├── English.iconset
├── icon_16x16.png
├── icon_16x16@2x.png
├── icon_32x32.png
└── icon_32x32@2x.png
├── Helix.bundle
└── Contents
│ ├── Info.plist
│ ├── Resources
│ ├── English - Helix.icns
│ ├── English - Helix.keylayout
│ ├── Russian - Helix.icns
│ ├── Russian - Helix.keylayout
│ └── en.lproj
│ │ └── InfoPlist.strings
│ └── version.plist
├── README.md
├── Russian.iconset
├── icon_16x16.png
├── icon_16x16@2x.png
├── icon_32x32.png
└── icon_32x32@2x.png
├── cheatsheet.png
├── cheatsheet1.pdf
├── cheatsheet2.pdf
├── photo.jpg
├── rev2
├── config.h
├── keymap.c
├── readme.md
├── readme_jp.md
└── rules.mk
├── rev3_5rows
├── config.h
├── keymap.c
├── oled_display.c
└── readme.md
└── script
├── build_bundle.sh
├── build_rev2.sh
└── build_rev3.sh
/English.iconset/icon_16x16.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tonsky/Helix-Layout/b128f636f257b6ea424a533df5a55cd5439e2606/English.iconset/icon_16x16.png
--------------------------------------------------------------------------------
/English.iconset/icon_16x16@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tonsky/Helix-Layout/b128f636f257b6ea424a533df5a55cd5439e2606/English.iconset/icon_16x16@2x.png
--------------------------------------------------------------------------------
/English.iconset/icon_32x32.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tonsky/Helix-Layout/b128f636f257b6ea424a533df5a55cd5439e2606/English.iconset/icon_32x32.png
--------------------------------------------------------------------------------
/English.iconset/icon_32x32@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tonsky/Helix-Layout/b128f636f257b6ea424a533df5a55cd5439e2606/English.iconset/icon_32x32@2x.png
--------------------------------------------------------------------------------
/Helix.bundle/Contents/Info.plist:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | CFBundleIdentifier
6 | me.tonsky.keyboardlayout.helix
7 | CFBundleName
8 | Helix
9 | CFBundleVersion
10 |
11 | KLInfo_English - Helix
12 |
13 | TICapsLockLanguageSwitchCapable
14 |
15 | TISInputSourceID
16 | me.tonsky.keyboardlayout.helix.english-helix
17 | TISIntendedLanguage
18 | en
19 | TISIconIsTemplate
20 |
21 |
22 | KLInfo_Russian - Helix
23 |
24 | TICapsLockLanguageSwitchCapable
25 |
26 | TISInputSourceID
27 | me.tonsky.keyboardlayout.helix.russian-helix
28 | TISIntendedLanguage
29 | ru
30 |
31 |
32 |
33 |
--------------------------------------------------------------------------------
/Helix.bundle/Contents/Resources/English - Helix.icns:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tonsky/Helix-Layout/b128f636f257b6ea424a533df5a55cd5439e2606/Helix.bundle/Contents/Resources/English - Helix.icns
--------------------------------------------------------------------------------
/Helix.bundle/Contents/Resources/English - Helix.keylayout:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
26 |
27 |
28 |
29 |
30 |
31 |
32 |
33 |
34 |
35 |
36 |
37 |
38 |
39 |
40 |
41 |
42 |
43 |
44 |
45 |
46 |
47 |
48 |
49 |
50 |
51 |
52 |
53 |
54 |
55 |
56 |
57 |
58 |
59 |
60 |
61 |
62 |
63 |
64 |
65 |
66 |
67 |
68 |
69 |
70 |
71 |
72 |
73 |
74 |
75 |
76 |
77 |
78 |
79 |
80 |
81 |
82 |
83 |
84 |
85 |
86 |
87 |
88 |
89 |
90 |
91 |
92 |
93 |
94 |
95 |
96 |
97 |
98 |
99 |
100 |
101 |
102 |
103 |
104 |
105 |
106 |
107 |
108 |
109 |
110 |
111 |
112 |
113 |
114 |
115 |
116 |
117 |
118 |
119 |
120 |
121 |
122 |
123 |
124 |
125 |
126 |
127 |
128 |
129 |
130 |
131 |
132 |
133 |
134 |
135 |
136 |
137 |
138 |
139 |
140 |
141 |
142 |
143 |
144 |
145 |
146 |
147 |
148 |
149 |
150 |
151 |
152 |
153 |
154 |
155 |
156 |
157 |
158 |
159 |
160 |
161 |
162 |
163 |
164 |
165 |
166 |
167 |
168 |
169 |
170 |
171 |
172 |
173 |
174 |
175 |
176 |
177 |
178 |
179 |
180 |
181 |
182 |
183 |
184 |
185 |
186 |
187 |
188 |
189 |
190 |
191 |
192 |
193 |
194 |
195 |
196 |
197 |
198 |
199 |
200 |
201 |
202 |
203 |
204 |
205 |
206 |
207 |
208 |
209 |
210 |
211 |
212 |
213 |
214 |
215 |
216 |
217 |
218 |
219 |
220 |
221 |
222 |
223 |
224 |
225 |
226 |
227 |
228 |
229 |
230 |
231 |
232 |
233 |
234 |
235 |
236 |
237 |
238 |
239 |
240 |
241 |
242 |
243 |
244 |
245 |
246 |
247 |
248 |
249 |
250 |
251 |
252 |
253 |
254 |
255 |
256 |
257 |
258 |
259 |
260 |
261 |
262 |
263 |
264 |
265 |
266 |
267 |
268 |
269 |
270 |
271 |
272 |
273 |
274 |
275 |
276 |
277 |
278 |
279 |
280 |
281 |
282 |
283 |
284 |
285 |
286 |
287 |
288 |
289 |
290 |
291 |
292 |
293 |
294 |
295 |
296 |
297 |
298 |
299 |
300 |
301 |
302 |
303 |
304 |
305 |
306 |
307 |
308 |
309 |
310 |
311 |
312 |
313 |
314 |
315 |
316 |
317 |
318 |
319 |
320 |
321 |
322 |
323 |
324 |
325 |
326 |
327 |
328 |
329 |
330 |
331 |
332 |
333 |
334 |
335 |
336 |
337 |
338 |
339 |
340 |
341 |
342 |
343 |
344 |
345 |
346 |
347 |
348 |
349 |
350 |
351 |
352 |
353 |
354 |
355 |
356 |
357 |
358 |
359 |
360 |
361 |
362 |
363 |
364 |
365 |
366 |
367 |
368 |
369 |
370 |
371 |
372 |
373 |
374 |
375 |
376 |
377 |
378 |
379 |
380 |
381 |
382 |
383 |
384 |
385 |
386 |
387 |
388 |
389 |
390 |
391 |
392 |
393 |
394 |
395 |
396 |
397 |
398 |
399 |
400 |
401 |
402 |
403 |
404 |
405 |
406 |
407 |
408 |
409 |
410 |
411 |
412 |
413 |
414 |
415 |
416 |
417 |
418 |
419 |
420 |
421 |
422 |
423 |
424 |
425 |
426 |
427 |
428 |
429 |
430 |
431 |
432 |
433 |
434 |
435 |
436 |
437 |
438 |
439 |
440 |
441 |
442 |
443 |
444 |
445 |
446 |
447 |
448 |
449 |
450 |
451 |
452 |
453 |
454 |
455 |
456 |
457 |
458 |
459 |
460 |
461 |
462 |
463 |
464 |
465 |
466 |
467 |
468 |
469 |
470 |
471 |
472 |
473 |
474 |
475 |
476 |
477 |
478 |
479 |
480 |
481 |
482 |
483 |
484 |
485 |
486 |
487 |
488 |
489 |
490 |
491 |
492 |
493 |
494 |
495 |
496 |
497 |
498 |
499 |
500 |
501 |
502 |
503 |
504 |
505 |
506 |
507 |
508 |
509 |
510 |
511 |
512 |
513 |
514 |
515 |
516 |
517 |
518 |
519 |
520 |
521 |
522 |
523 |
524 |
525 |
526 |
527 |
528 |
529 |
530 |
531 |
532 |
533 |
534 |
535 |
536 |
537 |
538 |
539 |
540 |
541 |
542 |
543 |
544 |
545 |
546 |
547 |
548 |
549 |
550 |
551 |
552 |
553 |
554 |
555 |
556 |
557 |
558 |
559 |
560 |
561 |
562 |
563 |
564 |
565 |
566 |
567 |
568 |
569 |
570 |
571 |
572 |
573 |
574 |
575 |
576 |
577 |
578 |
579 |
580 |
581 |
582 |
583 |
584 |
585 |
586 |
587 |
588 |
589 |
590 |
591 |
592 |
593 |
594 |
595 |
596 |
597 |
598 |
599 |
600 |
601 |
602 |
603 |
604 |
605 |
606 |
607 |
608 |
609 |
610 |
611 |
612 |
613 |
614 |
615 |
616 |
617 |
618 |
619 |
620 |
621 |
622 |
623 |
624 |
625 |
626 |
627 |
628 |
629 |
630 |
631 |
632 |
633 |
634 |
635 |
636 |
637 |
638 |
639 |
640 |
641 |
642 |
643 |
644 |
645 |
646 |
647 |
648 |
649 |
650 |
651 |
652 |
653 |
654 |
655 |
656 |
657 |
658 |
659 |
660 |
661 |
662 |
663 |
664 |
665 |
666 |
667 |
668 |
669 |
670 |
671 |
672 |
673 |
674 |
675 |
676 |
677 |
678 |
679 |
680 |
681 |
682 |
683 |
684 |
685 |
686 |
687 |
688 |
689 |
690 |
691 |
692 |
693 |
694 |
695 |
696 |
697 |
698 |
699 |
700 |
701 |
702 |
703 |
704 |
705 |
706 |
707 |
708 |
709 |
710 |
711 |
712 |
713 |
714 |
715 |
716 |
717 |
718 |
719 |
720 |
721 |
722 |
723 |
724 |
725 |
726 |
727 |
728 |
729 |
730 |
731 |
732 |
733 |
734 |
735 |
736 |
737 |
738 |
739 |
740 |
741 |
742 |
743 |
744 |
745 |
746 |
747 |
748 |
749 |
750 |
751 |
752 |
753 |
754 |
755 |
756 |
757 |
758 |
759 |
760 |
761 |
762 |
763 |
764 |
765 |
766 |
767 |
768 |
769 |
770 |
771 |
772 |
773 |
774 |
775 |
776 |
777 |
778 |
779 |
780 |
781 |
782 |
783 |
784 |
785 |
786 |
787 |
788 |
789 |
790 |
791 |
792 |
793 |
794 |
795 |
796 |
797 |
798 |
799 |
800 |
801 |
802 |
803 |
804 |
805 |
806 |
807 |
808 |
809 |
810 |
811 |
812 |
813 |
814 |
815 |
816 |
817 |
818 |
819 |
820 |
821 |
822 |
823 |
824 |
825 |
826 |
827 |
828 |
829 |
830 |
831 |
832 |
833 |
834 |
835 |
836 |
837 |
838 |
839 |
840 |
841 |
842 |
843 |
844 |
845 |
846 |
847 |
848 |
849 |
850 |
851 |
852 |
853 |
854 |
855 |
856 |
857 |
858 |
859 |
860 |
861 |
862 |
863 |
864 |
865 |
866 |
867 |
868 |
869 |
870 |
871 |
872 |
873 |
874 |
875 |
876 |
877 |
878 |
879 |
880 |
881 |
882 |
883 |
884 |
885 |
886 |
887 |
888 |
889 |
890 |
891 |
892 |
893 |
894 |
895 |
896 |
897 |
898 |
899 |
900 |
901 |
902 |
903 |
904 |
905 |
906 |
907 |
908 |
909 |
910 |
911 |
912 |
913 |
914 |
915 |
916 |
917 |
918 |
919 |
920 |
921 |
922 |
923 |
924 |
925 |
926 |
927 |
928 |
929 |
930 |
931 |
932 |
933 |
934 |
935 |
936 |
937 |
938 |
939 |
940 |
941 |
942 |
943 |
944 |
945 |
946 |
947 |
948 |
949 |
950 |
951 |
952 |
953 |
954 |
955 |
956 |
957 |
958 |
959 |
960 |
961 |
962 |
963 |
964 |
965 |
966 |
967 |
968 |
969 |
970 |
971 |
972 |
973 |
974 |
975 |
976 |
977 |
978 |
979 |
980 |
981 |
982 |
983 |
984 |
985 |
986 |
987 |
988 |
989 |
990 |
991 |
992 |
993 |
994 |
995 |
996 |
997 |
998 |
999 |
1000 |
1001 |
1002 |
1003 |
1004 |
1005 |
1006 |
1007 |
1008 |
1009 |
1010 |
1011 |
1012 |
1013 |
1014 |
1015 |
1016 |
1017 |
1018 |
1019 |
1020 |
1021 |
1022 |
1023 |
1024 |
1025 |
1026 |
1027 |
1028 |
1029 |
1030 |
1031 |
1032 |
1033 |
1034 |
1035 |
1036 |
1037 |
1038 |
1039 |
1040 |
1041 |
1042 |
1043 |
1044 |
1045 |
1046 |
1047 |
1048 |
1049 |
1050 |
1051 |
1052 |
1053 |
1054 |
1055 |
1056 |
1057 |
1058 |
1059 |
1060 |
1061 |
1062 |
1063 |
1064 |
1065 |
1066 |
1067 |
1068 |
1069 |
1070 |
1071 |
1072 |
1073 |
1074 |
1075 |
1076 |
1077 |
1078 |
1079 |
1080 |
1081 |
1082 |
1083 |
1084 |
1085 |
1086 |
1087 |
1088 |
1089 |
1090 |
1091 |
1092 |
1093 |
1094 |
1095 |
1096 |
1097 |
1098 |
1099 |
1100 |
1101 |
1102 |
1103 |
1104 |
1105 |
1106 |
1107 |
1108 |
1109 |
1110 |
1111 |
1112 |
1113 |
1114 |
1115 |
1116 |
1117 |
1118 |
1119 |
1120 |
1121 |
1122 |
1123 |
1124 |
1125 |
1126 |
1127 |
1128 |
1129 |
1130 |
1131 |
1132 |
1133 |
1134 |
1135 |
1136 |
1137 |
1138 |
1139 |
1140 |
1141 |
1142 |
1143 |
1144 |
1145 |
1146 |
1147 |
1148 |
1149 |
1150 |
1151 |
1152 |
1153 |
1154 |
1155 |
1156 |
1157 |
1158 |
1159 |
1160 |
1161 |
1162 |
1163 |
1164 |
1165 |
1166 |
1167 |
1168 |
1169 |
1170 |
1171 |
1172 |
1173 |
1174 |
1175 |
1176 |
1177 |
1178 |
1179 |
1180 |
1181 |
1182 |
1183 |
1184 |
1185 |
1186 |
1187 |
1188 |
1189 |
1190 |
1191 |
1192 |
1193 |
--------------------------------------------------------------------------------
/Helix.bundle/Contents/Resources/Russian - Helix.icns:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tonsky/Helix-Layout/b128f636f257b6ea424a533df5a55cd5439e2606/Helix.bundle/Contents/Resources/Russian - Helix.icns
--------------------------------------------------------------------------------
/Helix.bundle/Contents/Resources/Russian - Helix.keylayout:
--------------------------------------------------------------------------------
1 |
2 |
3 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
26 |
27 |
28 |
29 |
30 |
31 |
32 |
33 |
34 |
35 |
36 |
37 |
38 |
39 |
40 |
41 |
42 |
43 |
44 |
45 |
46 |
47 |
48 |
49 |
50 |
51 |
52 |
53 |
54 |
55 |
56 |
57 |
58 |
59 |
60 |
61 |
62 |
63 |
64 |
65 |
66 |
67 |
68 |
69 |
70 |
71 |
72 |
73 |
74 |
75 |
76 |
77 |
78 |
79 |
80 |
81 |
82 |
83 |
84 |
85 |
86 |
87 |
88 |
89 |
90 |
91 |
92 |
93 |
94 |
95 |
96 |
97 |
98 |
99 |
100 |
101 |
102 |
103 |
104 |
105 |
106 |
107 |
108 |
109 |
110 |
111 |
112 |
113 |
114 |
115 |
116 |
117 |
118 |
119 |
120 |
121 |
122 |
123 |
124 |
125 |
126 |
127 |
128 |
129 |
130 |
131 |
132 |
133 |
134 |
135 |
136 |
137 |
138 |
139 |
140 |
141 |
142 |
143 |
144 |
145 |
146 |
147 |
148 |
149 |
150 |
151 |
152 |
153 |
154 |
155 |
156 |
157 |
158 |
159 |
160 |
161 |
162 |
163 |
164 |
165 |
166 |
167 |
168 |
169 |
170 |
171 |
172 |
173 |
174 |
175 |
176 |
177 |
178 |
179 |
180 |
181 |
182 |
183 |
184 |
185 |
186 |
187 |
188 |
189 |
190 |
191 |
192 |
193 |
194 |
195 |
196 |
197 |
198 |
199 |
200 |
201 |
202 |
203 |
204 |
205 |
206 |
207 |
208 |
209 |
210 |
211 |
212 |
213 |
214 |
215 |
216 |
217 |
218 |
219 |
220 |
221 |
222 |
223 |
224 |
225 |
226 |
227 |
228 |
229 |
230 |
231 |
232 |
233 |
234 |
235 |
236 |
237 |
238 |
239 |
240 |
241 |
242 |
243 |
244 |
245 |
246 |
247 |
248 |
249 |
250 |
251 |
252 |
253 |
254 |
255 |
256 |
257 |
258 |
259 |
260 |
261 |
262 |
263 |
264 |
265 |
266 |
267 |
268 |
269 |
270 |
271 |
272 |
273 |
274 |
275 |
276 |
277 |
278 |
279 |
280 |
281 |
282 |
283 |
284 |
285 |
286 |
287 |
288 |
289 |
290 |
291 |
292 |
293 |
294 |
295 |
296 |
297 |
298 |
299 |
300 |
301 |
302 |
303 |
304 |
305 |
306 |
307 |
308 |
309 |
310 |
311 |
312 |
313 |
314 |
315 |
316 |
317 |
318 |
319 |
320 |
321 |
322 |
323 |
324 |
325 |
326 |
327 |
328 |
329 |
330 |
331 |
332 |
333 |
334 |
335 |
336 |
337 |
338 |
339 |
340 |
341 |
342 |
343 |
344 |
345 |
346 |
347 |
348 |
349 |
350 |
351 |
352 |
353 |
354 |
355 |
356 |
357 |
358 |
359 |
360 |
361 |
362 |
363 |
364 |
365 |
366 |
367 |
368 |
369 |
370 |
371 |
372 |
373 |
374 |
375 |
376 |
377 |
378 |
379 |
380 |
381 |
382 |
383 |
384 |
385 |
386 |
387 |
388 |
389 |
390 |
391 |
392 |
393 |
394 |
395 |
396 |
397 |
398 |
399 |
400 |
401 |
402 |
403 |
404 |
405 |
406 |
407 |
408 |
409 |
410 |
411 |
412 |
413 |
414 |
415 |
416 |
417 |
418 |
419 |
420 |
421 |
422 |
423 |
424 |
425 |
426 |
427 |
428 |
429 |
430 |
431 |
432 |
433 |
434 |
435 |
436 |
437 |
438 |
439 |
440 |
441 |
442 |
443 |
444 |
445 |
446 |
447 |
448 |
449 |
450 |
451 |
452 |
453 |
454 |
455 |
456 |
457 |
458 |
459 |
460 |
461 |
462 |
463 |
464 |
465 |
466 |
467 |
468 |
469 |
470 |
471 |
472 |
473 |
474 |
475 |
476 |
477 |
478 |
479 |
480 |
481 |
482 |
483 |
484 |
485 |
486 |
487 |
488 |
489 |
490 |
491 |
492 |
493 |
494 |
495 |
496 |
497 |
498 |
499 |
500 |
501 |
502 |
503 |
504 |
505 |
506 |
507 |
508 |
509 |
510 |
511 |
512 |
513 |
514 |
515 |
516 |
517 |
518 |
519 |
520 |
521 |
522 |
523 |
524 |
525 |
526 |
527 |
528 |
529 |
530 |
531 |
532 |
533 |
534 |
535 |
536 |
537 |
538 |
539 |
540 |
541 |
542 |
543 |
544 |
545 |
546 |
547 |
548 |
549 |
550 |
551 |
552 |
553 |
554 |
555 |
556 |
557 |
558 |
559 |
560 |
561 |
562 |
563 |
564 |
565 |
566 |
567 |
568 |
569 |
570 |
571 |
572 |
573 |
574 |
575 |
576 |
577 |
578 |
579 |
580 |
581 |
582 |
583 |
584 |
585 |
586 |
587 |
588 |
589 |
590 |
591 |
592 |
593 |
594 |
595 |
596 |
597 |
598 |
599 |
600 |
601 |
602 |
603 |
604 |
605 |
606 |
607 |
608 |
609 |
610 |
611 |
612 |
613 |
614 |
615 |
616 |
617 |
618 |
619 |
620 |
621 |
622 |
623 |
624 |
625 |
626 |
627 |
628 |
629 |
630 |
631 |
632 |
633 |
634 |
635 |
636 |
637 |
638 |
639 |
640 |
641 |
642 |
643 |
644 |
645 |
646 |
647 |
648 |
649 |
650 |
651 |
652 |
653 |
654 |
655 |
656 |
657 |
658 |
659 |
660 |
661 |
662 |
663 |
664 |
665 |
666 |
667 |
668 |
669 |
670 |
671 |
672 |
673 |
674 |
675 |
676 |
677 |
678 |
679 |
680 |
681 |
682 |
683 |
684 |
685 |
686 |
687 |
688 |
689 |
690 |
691 |
692 |
693 |
694 |
695 |
696 |
697 |
698 |
699 |
700 |
701 |
702 |
703 |
704 |
705 |
706 |
707 |
708 |
709 |
710 |
711 |
712 |
713 |
714 |
715 |
716 |
717 |
718 |
719 |
720 |
721 |
722 |
723 |
724 |
725 |
726 |
727 |
728 |
729 |
730 |
731 |
732 |
733 |
734 |
735 |
736 |
737 |
738 |
739 |
740 |
741 |
742 |
743 |
744 |
745 |
746 |
747 |
748 |
749 |
750 |
751 |
752 |
753 |
754 |
755 |
756 |
757 |
758 |
759 |
760 |
761 |
762 |
763 |
764 |
765 |
766 |
767 |
768 |
769 |
770 |
771 |
772 |
773 |
774 |
775 |
776 |
777 |
778 |
779 |
780 |
781 |
782 |
783 |
784 |
785 |
786 |
787 |
788 |
789 |
790 |
791 |
792 |
793 |
794 |
795 |
796 |
797 |
798 |
799 |
800 |
801 |
802 |
803 |
804 |
805 |
806 |
807 |
808 |
809 |
810 |
811 |
812 |
813 |
814 |
815 |
816 |
817 |
818 |
819 |
820 |
821 |
822 |
823 |
824 |
825 |
826 |
827 |
828 |
829 |
830 |
831 |
832 |
833 |
834 |
835 |
836 |
837 |
838 |
839 |
840 |
841 |
842 |
843 |
844 |
845 |
846 |
847 |
848 |
849 |
850 |
851 |
852 |
853 |
854 |
855 |
856 |
857 |
858 |
859 |
860 |
861 |
862 |
863 |
864 |
865 |
866 |
867 |
868 |
869 |
870 |
871 |
872 |
873 |
874 |
875 |
876 |
877 |
878 |
879 |
880 |
881 |
882 |
883 |
884 |
885 |
886 |
887 |
888 |
889 |
890 |
891 |
892 |
893 |
894 |
895 |
896 |
897 |
898 |
899 |
900 |
901 |
902 |
903 |
904 |
905 |
906 |
907 |
908 |
909 |
910 |
911 |
912 |
913 |
914 |
915 |
916 |
917 |
918 |
919 |
920 |
921 |
922 |
923 |
924 |
925 |
926 |
927 |
928 |
929 |
930 |
931 |
932 |
933 |
934 |
935 |
936 |
937 |
938 |
939 |
940 |
941 |
942 |
943 |
944 |
945 |
946 |
947 |
948 |
949 |
950 |
951 |
952 |
953 |
954 |
955 |
956 |
957 |
958 |
959 |
960 |
961 |
962 |
963 |
964 |
965 |
966 |
967 |
968 |
969 |
970 |
971 |
972 |
973 |
974 |
975 |
976 |
977 |
978 |
979 |
980 |
981 |
982 |
983 |
984 |
985 |
986 |
987 |
988 |
989 |
990 |
991 |
992 |
993 |
994 |
995 |
996 |
997 |
998 |
999 |
1000 |
1001 |
1002 |
1003 |
1004 |
1005 |
1006 |
1007 |
1008 |
1009 |
1010 |
1011 |
1012 |
1013 |
1014 |
1015 |
1016 |
1017 |
1018 |
1019 |
1020 |
1021 |
1022 |
1023 |
1024 |
1025 |
1026 |
1027 |
1028 |
1029 |
1030 |
1031 |
1032 |
1033 |
1034 |
1035 |
1036 |
1037 |
1038 |
1039 |
1040 |
1041 |
1042 |
1043 |
1044 |
1045 |
1046 |
1047 |
1048 |
1049 |
1050 |
1051 |
1052 |
1053 |
1054 |
1055 |
1056 |
1057 |
1058 |
1059 |
1060 |
1061 |
1062 |
1063 |
1064 |
1065 |
1066 |
1067 |
1068 |
1069 |
1070 |
1071 |
1072 |
1073 |
1074 |
1075 |
1076 |
1077 |
1078 |
1079 |
1080 |
1081 |
1082 |
1083 |
1084 |
1085 |
1086 |
1087 |
1088 |
1089 |
1090 |
1091 |
1092 |
1093 |
1094 |
1095 |
1096 |
1097 |
1098 |
1099 |
1100 |
1101 |
1102 |
1103 |
1104 |
1105 |
1106 |
1107 |
1108 |
1109 |
1110 |
1111 |
1112 |
1113 |
1114 |
1115 |
1116 |
1117 |
1118 |
1119 |
1120 |
1121 |
1122 |
1123 |
1124 |
1125 |
1126 |
1127 |
1128 |
1129 |
1130 |
1131 |
1132 |
1133 |
1134 |
1135 |
1136 |
1137 |
1138 |
1139 |
1140 |
1141 |
1142 |
1143 |
1144 |
1145 |
1146 |
1147 |
1148 |
1149 |
1150 |
1151 |
1152 |
1153 |
1154 |
1155 |
1156 |
1157 |
1158 |
1159 |
1160 |
1161 |
1162 |
1163 |
1164 |
1165 |
1166 |
1167 |
1168 |
1169 |
1170 |
1171 |
1172 |
1173 |
1174 |
1175 |
1176 |
1177 |
1178 |
1179 |
1180 |
1181 |
1182 |
1183 |
1184 |
1185 |
1186 |
1187 |
1188 |
1189 |
1190 |
1191 |
1192 |
1193 |
1194 |
1195 |
1196 |
1197 |
1198 |
1199 |
1200 |
1201 |
1202 |
1203 |
1204 |
1205 |
1206 |
1207 |
1208 |
1209 |
1210 |
1211 |
1212 |
1213 |
1214 |
1215 |
1216 |
1217 |
1218 |
1219 |
1220 |
1221 |
1222 |
1223 |
1224 |
1225 |
1226 |
1227 |
1228 |
1229 |
1230 |
1231 |
1232 |
1233 |
1234 |
1235 |
1236 |
1237 |
1238 |
1239 |
1240 |
1241 |
1242 |
1243 |
1244 |
1245 |
1246 |
1247 |
1248 |
1249 |
1250 |
1251 |
1252 |
1253 |
1254 |
1255 |
1256 |
1257 |
1258 |
1259 |
1260 |
1261 |
1262 |
1263 |
1264 |
1265 |
1266 |
1267 |
1268 |
1269 |
1270 |
1271 |
1272 |
1273 |
1274 |
1275 |
1276 |
1277 |
1278 |
1279 |
1280 |
1281 |
1282 |
1283 |
1284 |
1285 |
1286 |
1287 |
1288 |
1289 |
1290 |
--------------------------------------------------------------------------------
/Helix.bundle/Contents/Resources/en.lproj/InfoPlist.strings:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tonsky/Helix-Layout/b128f636f257b6ea424a533df5a55cd5439e2606/Helix.bundle/Contents/Resources/en.lproj/InfoPlist.strings
--------------------------------------------------------------------------------
/Helix.bundle/Contents/version.plist:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | BuildVersion
6 |
7 | ProjectName
8 | Helix
9 | SourceVersion
10 |
11 |
12 |
13 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | # Keymap & EN/RU layouts for Helix 60% split keyboard
2 |
3 | 
4 |
5 | ## Building keymap
6 |
7 | Following docs.qmk.fm/#/newbs_getting_started:
8 |
9 | ```
10 | brew install qmk/qmk/qmk
11 | qmk setup
12 | ```
13 |
14 | Then
15 |
16 | ```
17 | cd ~/ws
18 | git clone git@github.com:tonsky/Helix-Layout.git
19 | ln -s ~/ws/Helix-Layout/keymap ~/qmk_firmware/keyboards/helix/rev3_5rows/keymaps/tonsky
20 | cd ~/qmk_firmware
21 | make helix/rev3_5rows:tonsky
22 | ```
23 |
24 | Download [QMK Toolbox.app](https://github.com/qmk/qmk_toolbox/releases). In the app:
25 |
26 | - Local file -> Open `~/qmk_firmware/helix_rev3_5rows_tonsky.hex`
27 | - MCU: `atmega32u4`
28 | - Auto-flash: `checked`
29 | - Press reset switch on the keyboard
30 | - Repeat for the second half
31 |
32 | ## Layout
33 |
34 | Layout and keymap work together to put keys where I want them, when possible. This is EN/RU layout, which led to some compromises.
35 |
36 | - `EN` sends F13, `РУ` sends F14.
37 | - Option layout mostly compatible with [Ilya Birman Typography Layout](https://ilyabirman.ru/projects/typography-layout/).
38 | - Some of the principles from [github.com/tonsky/Universal-Layout](https://github.com/tonsky/Universal-Layout) apply.
39 | - Navigation arrows do not require Karabiner.
40 |
41 | ## The physical device
42 |
43 | 
44 |
45 | ## Where to buy
46 |
47 | [yushakobo.jp/shop/helix-keyboard-kit/](https://yushakobo.jp/shop/helix-keyboard-kit/)
--------------------------------------------------------------------------------
/Russian.iconset/icon_16x16.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tonsky/Helix-Layout/b128f636f257b6ea424a533df5a55cd5439e2606/Russian.iconset/icon_16x16.png
--------------------------------------------------------------------------------
/Russian.iconset/icon_16x16@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tonsky/Helix-Layout/b128f636f257b6ea424a533df5a55cd5439e2606/Russian.iconset/icon_16x16@2x.png
--------------------------------------------------------------------------------
/Russian.iconset/icon_32x32.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tonsky/Helix-Layout/b128f636f257b6ea424a533df5a55cd5439e2606/Russian.iconset/icon_32x32.png
--------------------------------------------------------------------------------
/Russian.iconset/icon_32x32@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tonsky/Helix-Layout/b128f636f257b6ea424a533df5a55cd5439e2606/Russian.iconset/icon_32x32@2x.png
--------------------------------------------------------------------------------
/cheatsheet.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tonsky/Helix-Layout/b128f636f257b6ea424a533df5a55cd5439e2606/cheatsheet.png
--------------------------------------------------------------------------------
/photo.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tonsky/Helix-Layout/b128f636f257b6ea424a533df5a55cd5439e2606/photo.jpg
--------------------------------------------------------------------------------
/rev2/config.h:
--------------------------------------------------------------------------------
1 | /*
2 | This is the c configuration file for the keymap
3 |
4 | Copyright 2012 Jun Wako
5 | Copyright 2015 Jack Humbert
6 |
7 | This program is free software: you can redistribute it and/or modify
8 | it under the terms of the GNU General Public License as published by
9 | the Free Software Foundation, either version 2 of the License, or
10 | (at your option) any later version.
11 |
12 | This program is distributed in the hope that it will be useful,
13 | but WITHOUT ANY WARRANTY; without even the implied warranty of
14 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15 | GNU General Public License for more details.
16 |
17 | You should have received a copy of the GNU General Public License
18 | along with this program. If not, see .
19 | */
20 |
21 | #pragma once
22 |
23 | #define MASTER_RIGHT
24 |
25 | // place overrides here
26 |
27 | // If you need more program area, try select and reduce rgblight modes to use.
28 |
29 | // Selection of RGBLIGHT MODE to use.
30 | #if defined(LED_ANIMATIONS)
31 | #define RGBLIGHT_EFFECT_BREATHING
32 | #define RGBLIGHT_EFFECT_RAINBOW_MOOD
33 | #define RGBLIGHT_EFFECT_RAINBOW_SWIRL
34 | #define RGBLIGHT_EFFECT_SNAKE
35 | #define RGBLIGHT_EFFECT_KNIGHT
36 | #define RGBLIGHT_EFFECT_CHRISTMAS
37 | #define RGBLIGHT_EFFECT_STATIC_GRADIENT
38 | //#define RGBLIGHT_EFFECT_RGB_TEST
39 | //#define RGBLIGHT_EFFECT_ALTERNATING
40 | #endif
41 |
--------------------------------------------------------------------------------
/rev2/keymap.c:
--------------------------------------------------------------------------------
1 | #include QMK_KEYBOARD_H
2 | #include "bootloader.h"
3 | #ifdef PROTOCOL_LUFA
4 | #include "lufa.h"
5 | #include "split_util.h"
6 | #endif
7 | #ifdef AUDIO_ENABLE
8 | #include "audio.h"
9 | #endif
10 | #ifdef SSD1306OLED
11 | #include "ssd1306.h"
12 | #endif
13 |
14 | #define USB_POLLING_INTERVAL_MS 1
15 |
16 | #ifdef RGBLIGHT_ENABLE
17 | //Following line allows macro to read current RGB settings
18 | extern rgblight_config_t rgblight_config;
19 | #endif
20 |
21 | extern uint8_t is_master;
22 |
23 | // Each layer gets a name for readability, which is then used in the keymap matrix below.
24 | // The underscores don't mean anything - you can have a layer called STUFF or any other name.
25 | // Layer names don't all need to be of the same length, obviously, and you can also skip them
26 | // entirely and just use numbers.
27 | enum layer_number {
28 | _QWERTY = 0,
29 | _LOWER,
30 | _RAISE,
31 | _ADJUST
32 | };
33 |
34 | enum custom_keycodes {
35 | QWERTY = SAFE_RANGE,
36 | LOWER,
37 | RAISE,
38 | ADJUST,
39 | // BACKLIT,
40 | // EISU,
41 | // KANA,
42 | RGBRST
43 | };
44 |
45 | #define TB_LEFT LGUI(LSFT(KC_LBRC))
46 | #define TB_RGHT LGUI(LSFT(KC_RBRC))
47 |
48 | const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
49 | [_QWERTY] = LAYOUT( \
50 | KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, \
51 | KC_GRV, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_EQL, \
52 | KC_TAB, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, \
53 | KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_LBRC, KC_RBRC, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_BSLS, \
54 | KC_LCTL, KC_LBRC, KC_RBRC, KC_LALT, KC_LGUI, KC_ENT, KC_SPC, KC_BSPC, LOWER, RAISE, XXXXXXX, XXXXXXX, KC_F13, KC_F14 \
55 | ),
56 |
57 | [_LOWER] = LAYOUT( \
58 | _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, \
59 | _______, _______, _______, _______, _______, _______, _______, TB_LEFT, KC_UP, TB_RGHT, _______, _______, \
60 | _______, _______, _______, _______, _______, _______, _______, KC_LEFT, KC_DOWN, KC_RGHT, _______, _______, \
61 | _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, \
62 | _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______ \
63 | ),
64 |
65 | [_RAISE] = LAYOUT( \
66 | XXXXXXX, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5 , KC_F6 , KC_F7 , KC_F8, KC_F9, KC_F10, KC_F11, \
67 | XXXXXXX, XXXXXXX, XXXXXXX, KC_INS , KC_HOME, KC_PGUP, XXXXXXX, KC_MRWD, KC_MPLY, KC_MFFD, XXXXXXX, XXXXXXX, \
68 | XXXXXXX, XXXXXXX, XXXXXXX, KC_DEL , KC_END , KC_PGDN, XXXXXXX, KC_VOLD, KC_MUTE, KC_VOLU, XXXXXXX, XXXXXXX, \
69 | XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, \
70 | XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX \
71 | ),
72 |
73 | [_ADJUST] = LAYOUT( \
74 | XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, \
75 | XXXXXXX, XXXXXXX, RGBRST, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, \
76 | XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, \
77 | XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, RGB_TOG, RGB_HUI, RGB_SAI, RGB_VAI, \
78 | XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, RGB_MOD, RGB_HUD, RGB_SAD, RGB_VAD \
79 | )
80 | };
81 |
82 |
83 | // define variables for reactive RGB
84 | bool TOG_STATUS = false;
85 | int RGB_current_mode;
86 |
87 | void persistent_default_layer_set(uint16_t default_layer) {
88 | eeconfig_update_default_layer(default_layer);
89 | default_layer_set(default_layer);
90 | }
91 |
92 | // Setting ADJUST layer RGB back to default
93 | void update_tri_layer_RGB(uint8_t layer1, uint8_t layer2, uint8_t layer3) {
94 | if (IS_LAYER_ON(layer1) && IS_LAYER_ON(layer2)) {
95 | #ifdef RGBLIGHT_ENABLE
96 | //rgblight_mode(RGB_current_mode);
97 | #endif
98 | layer_on(layer3);
99 | } else {
100 | layer_off(layer3);
101 | }
102 | }
103 |
104 | bool process_record_user(uint16_t keycode, keyrecord_t *record) {
105 | switch (keycode) {
106 | case QWERTY:
107 | if (record->event.pressed) {
108 | #ifdef AUDIO_ENABLE
109 | PLAY_SONG(tone_qwerty);
110 | #endif
111 | persistent_default_layer_set(1UL<<_QWERTY);
112 | }
113 | return false;
114 | break;
115 | case LOWER:
116 | if (record->event.pressed) {
117 | //not sure how to have keyboard check mode and set it to a variable, so my work around
118 | //uses another variable that would be set to true after the first time a reactive key is pressed.
119 | if (TOG_STATUS) { //TOG_STATUS checks is another reactive key currently pressed, only changes RGB mode if returns false
120 | } else {
121 | TOG_STATUS = !TOG_STATUS;
122 | #ifdef RGBLIGHT_ENABLE
123 | //rgblight_mode(RGBLIGHT_MODE_SNAKE + 1);
124 | #endif
125 | }
126 | layer_on(_LOWER);
127 | update_tri_layer_RGB(_LOWER, _RAISE, _ADJUST);
128 | } else {
129 | #ifdef RGBLIGHT_ENABLE
130 | //rgblight_mode(RGB_current_mode); // revert RGB to initial mode prior to RGB mode change
131 | #endif
132 | TOG_STATUS = false;
133 | layer_off(_LOWER);
134 | update_tri_layer_RGB(_LOWER, _RAISE, _ADJUST);
135 | }
136 | return false;
137 | break;
138 | case RAISE:
139 | if (record->event.pressed) {
140 | //not sure how to have keyboard check mode and set it to a variable, so my work around
141 | //uses another variable that would be set to true after the first time a reactive key is pressed.
142 | if (TOG_STATUS) { //TOG_STATUS checks is another reactive key currently pressed, only changes RGB mode if returns false
143 | } else {
144 | TOG_STATUS = !TOG_STATUS;
145 | #ifdef RGBLIGHT_ENABLE
146 | //rgblight_mode(RGBLIGHT_MODE_SNAKE);
147 | #endif
148 | }
149 | layer_on(_RAISE);
150 | update_tri_layer_RGB(_LOWER, _RAISE, _ADJUST);
151 | } else {
152 | #ifdef RGBLIGHT_ENABLE
153 | //rgblight_mode(RGB_current_mode); // revert RGB to initial mode prior to RGB mode change
154 | #endif
155 | layer_off(_RAISE);
156 | TOG_STATUS = false;
157 | update_tri_layer_RGB(_LOWER, _RAISE, _ADJUST);
158 | }
159 | return false;
160 | break;
161 | case ADJUST:
162 | if (record->event.pressed) {
163 | layer_on(_ADJUST);
164 | } else {
165 | layer_off(_ADJUST);
166 | }
167 | return false;
168 | break;
169 | //led operations - RGB mode change now updates the RGB_current_mode to allow the right RGB mode to be set after reactive keys are released
170 | case RGB_MOD:
171 | #ifdef RGBLIGHT_ENABLE
172 | if (record->event.pressed) {
173 | rgblight_mode(RGB_current_mode);
174 | rgblight_step();
175 | RGB_current_mode = rgblight_config.mode;
176 | }
177 | #endif
178 | return false;
179 | break;
180 | case RGBRST:
181 | #ifdef RGBLIGHT_ENABLE
182 | if (record->event.pressed) {
183 | eeconfig_update_rgblight_default();
184 | rgblight_enable();
185 | RGB_current_mode = rgblight_config.mode;
186 | }
187 | #endif
188 | break;
189 | }
190 | return true;
191 | }
192 |
193 | void matrix_init_user(void) {
194 | #ifdef AUDIO_ENABLE
195 | startup_user();
196 | #endif
197 | #ifdef RGBLIGHT_ENABLE
198 | RGB_current_mode = rgblight_config.mode;
199 | #endif
200 | //SSD1306 OLED init, make sure to add #define SSD1306OLED in config.h
201 | #ifdef SSD1306OLED
202 | iota_gfx_init(!has_usb()); // turns on the display
203 | #endif
204 | }
205 |
206 |
207 | //SSD1306 OLED update loop, make sure to add #define SSD1306OLED in config.h
208 | #ifdef SSD1306OLED
209 |
210 | void matrix_scan_user(void) {
211 | iota_gfx_task(); // this is what updates the display continuously
212 | }
213 |
214 | void matrix_update(struct CharacterMatrix *dest,
215 | const struct CharacterMatrix *source) {
216 | if (memcmp(dest->display, source->display, sizeof(dest->display))) {
217 | memcpy(dest->display, source->display, sizeof(dest->display));
218 | dest->dirty = true;
219 | }
220 | }
221 |
222 | //assign the right code to your layers for OLED display
223 | #define L_BASE 0
224 | #define L_LOWER (1<<_LOWER)
225 | #define L_RAISE (1<<_RAISE)
226 | #define L_ADJUST (1<<_ADJUST)
227 | #define L_ADJUST_TRI (L_ADJUST|L_RAISE|L_LOWER)
228 |
229 | static void render_logo(struct CharacterMatrix *matrix) {
230 |
231 | static const char helix_logo[] PROGMEM ={
232 | 0x80,0x81,0x82,0x83,0x84,0x85,0x86,0x87,0x88,0x89,0x8a,0x8b,0x8c,0x8d,0x8e,0x8f,0x90,0x91,0x92,0x93,0x94,
233 | 0xa0,0xa1,0xa2,0xa3,0xa4,0xa5,0xa6,0xa7,0xa8,0xa9,0xaa,0xab,0xac,0xad,0xae,0xaf,0xb0,0xb1,0xb2,0xb3,0xb4,
234 | 0xc0,0xc1,0xc2,0xc3,0xc4,0xc5,0xc6,0xc7,0xc8,0xc9,0xca,0xcb,0xcc,0xcd,0xce,0xcf,0xd0,0xd1,0xd2,0xd3,0xd4,
235 | 0};
236 | matrix_write_P(matrix, helix_logo);
237 | //matrix_write_P(&matrix, PSTR(" Split keyboard kit"));
238 | }
239 |
240 | static void render_rgbled_status(bool full, struct CharacterMatrix *matrix) {
241 | #ifdef RGBLIGHT_ENABLE
242 | char buf[30];
243 | if (RGBLIGHT_MODES > 1 && rgblight_config.enable) {
244 | if (full) {
245 | snprintf(buf, sizeof(buf), " LED %2d: %d,%d,%d ",
246 | rgblight_config.mode,
247 | rgblight_config.hue/RGBLIGHT_HUE_STEP,
248 | rgblight_config.sat/RGBLIGHT_SAT_STEP,
249 | rgblight_config.val/RGBLIGHT_VAL_STEP);
250 | } else {
251 | snprintf(buf, sizeof(buf), "[%2d] ",rgblight_config.mode);
252 | }
253 | matrix_write(matrix, buf);
254 | }
255 | #endif
256 | }
257 |
258 | static void render_layer_status(struct CharacterMatrix *matrix) {
259 | // Define layers here, Have not worked out how to have text displayed for each layer. Copy down the number you see and add a case for it below
260 | char buf[10];
261 | matrix_write_P(matrix, PSTR("Layer: "));
262 | switch (layer_state) {
263 | case L_BASE:
264 | matrix_write_P(matrix, PSTR("Default"));
265 | break;
266 | case L_RAISE:
267 | matrix_write_P(matrix, PSTR("Raise"));
268 | break;
269 | case L_LOWER:
270 | matrix_write_P(matrix, PSTR("Lower"));
271 | break;
272 | case L_ADJUST:
273 | case L_ADJUST_TRI:
274 | matrix_write_P(matrix, PSTR("Adjust"));
275 | break;
276 | default:
277 | matrix_write_P(matrix, PSTR("Undef-"));
278 | snprintf(buf,sizeof(buf), "%ld", layer_state);
279 | matrix_write(matrix, buf);
280 | }
281 | }
282 |
283 | void render_status(struct CharacterMatrix *matrix) {
284 |
285 | // Render to mode icon
286 | static const char os_logo[][2][3] PROGMEM ={{{0x95,0x96,0},{0xb5,0xb6,0}},{{0x97,0x98,0},{0xb7,0xb8,0}}};
287 | if(keymap_config.swap_lalt_lgui==false){
288 | matrix_write_P(matrix, os_logo[0][0]);
289 | matrix_write_P(matrix, PSTR("\n"));
290 | matrix_write_P(matrix, os_logo[0][1]);
291 | }else{
292 | matrix_write_P(matrix, os_logo[1][0]);
293 | matrix_write_P(matrix, PSTR("\n"));
294 | matrix_write_P(matrix, os_logo[1][1]);
295 | }
296 |
297 | matrix_write_P(matrix, PSTR(" "));
298 | render_layer_status(matrix);
299 | matrix_write_P(matrix, PSTR("\n"));
300 |
301 | // Host Keyboard LED Status
302 | matrix_write_P(matrix, (host_keyboard_leds() & (1<:<キーマップ名>`という指定で行います。
88 |
89 | ```
90 | $ make helix:default
91 | ```
92 |
93 | キーボードへの書き込みまで同時に行うには下記のように`:flash`を付けます。
94 |
95 | ```
96 | $ make helix:default:flash
97 | ```
98 |
99 | コンパイル結果と中間生成物を消去したい場合は以下のようにします。
100 |
101 | ```
102 | $ make helix:default:clean
103 | ```
104 |
105 | 上記の、rules.mk によるカスタマイズ項目の一部は下記のようにコマンド上で直接指定することも可能です。
106 |
107 | OLED を有効にしてコンパイルしてキーボードへの書き込む。
108 | ```
109 | $ make helix/rev2/oled:default:flash
110 | ```
111 |
112 | RGB バックライトを有効にしてコンパイルしてキーボードへ書き込む。
113 | ```
114 | $ make helix/rev2/back:default:flash
115 | ```
116 |
117 | RGB Underglow を有効にしてコンパイルしてキーボードへ書き込む。
118 | ```
119 | $ make helix/rev2/under:default:flash
120 | ```
121 |
122 | OLED とRGB バックライトを有効にしてコンパイルしてキーボードへ書き込む。
123 | ```
124 | $ make helix/rev2/oled/back:default:flash
125 | ```
126 |
127 | OLED とRGB Underglowを有効にしてコンパイルしてキーボードへ書き込む。
128 | ```
129 | $ make helix/rev2/oled/under:default:flash
130 | ```
131 |
132 | ## リンク
133 |
134 | * さらに詳細は、[こちら helix/Doc/firmware_jp.md](https://github.com/MakotoKurauchi/helix/blob/master/Doc/firmware_jp.md)をご覧ください。
135 | * [Helix top](https://github.com/MakotoKurauchi/helix)
136 |
--------------------------------------------------------------------------------
/rev2/rules.mk:
--------------------------------------------------------------------------------
1 | # QMK Standard Build Options
2 | # change to "no" to disable the options, or define them in the Makefile in
3 | # the appropriate keymap folder that will get included automatically
4 | #
5 | # See TOP/keyboards/helix/rules.mk for a list of options that can be set.
6 | # See TOP/docs/config_options.md for more information.
7 | #
8 | LTO_ENABLE = no # if firmware size over limit, try this option
9 |
10 | # Helix Spacific Build Options
11 | # you can uncomment and edit follows 7 Variables
12 | # jp: 以下の7つの変数を必要に応じて編集し、コメントアウトをはずします。
13 | HELIX_ROWS = 5 # Helix Rows is 4 or 5
14 | OLED_ENABLE = yes # OLED_ENABLE
15 | # LOCAL_GLCDFONT = no # use each keymaps "helixfont.h" insted of "common/glcdfont.c"
16 | # LED_BACK_ENABLE = yes # LED backlight (Enable WS2812 RGB underlight.)
17 | # LED_UNDERGLOW_ENABLE = yes # LED underglow (Enable WS2812 RGB underlight.)
18 | # LED_ANIMATIONS = yes # LED animations
19 | # IOS_DEVICE_ENABLE = no # connect to IOS device (iPad,iPhone)
20 |
21 | # convert Helix-specific options (that represent combinations of standard options)
22 | # into QMK standard options.
23 | include $(strip $(KEYBOARD_LOCAL_FEATURES_MK))
24 |
--------------------------------------------------------------------------------
/rev3_5rows/config.h:
--------------------------------------------------------------------------------
1 | /* Copyright 2020 yushakobo
2 | *
3 | * This program is free software: you can redistribute it and/or modify
4 | * it under the terms of the GNU General Public License as published by
5 | * the Free Software Foundation, either version 2 of the License, or
6 | * (at your option) any later version.
7 | *
8 | * This program is distributed in the hope that it will be useful,
9 | * but WITHOUT ANY WARRANTY; without even the implied warranty of
10 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11 | * GNU General Public License for more details.
12 | *
13 | * You should have received a copy of the GNU General Public License
14 | * along with this program. If not, see .
15 | */
16 |
17 | #pragma once
18 |
19 | #define MASTER_RIGHT
20 |
21 | // place overrides here
22 |
--------------------------------------------------------------------------------
/rev3_5rows/keymap.c:
--------------------------------------------------------------------------------
1 | /* Copyright 2020 yushakobo
2 | *
3 | * This program is free software: you can redistribute it and/or modify
4 | * it under the terms of the GNU General Public License as published by
5 | * the Free Software Foundation, either version 2 of the License, or
6 | * (at your option) any later version.
7 | *
8 | * This program is distributed in the hope that it will be useful,
9 | * but WITHOUT ANY WARRANTY; without even the implied warranty of
10 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11 | * GNU General Public License for more details.
12 | *
13 | * You should have received a copy of the GNU General Public License
14 | * along with this program. If not, see .
15 | */
16 | #include QMK_KEYBOARD_H
17 |
18 |
19 | // Defines names for use in layer keycodes and the keymap
20 | enum layer_names {
21 | _QWERTY = 0,
22 | _LOWER,
23 | _RAISE,
24 | _ADJUST
25 | };
26 |
27 | // Defines the keycodes used by our macros in process_record_user
28 | enum custom_keycodes {
29 | EISU = SAFE_RANGE,
30 | KANA,
31 | ADJUST,
32 | RGBRST
33 | };
34 |
35 | #define LOWER MO(_LOWER)
36 | #define RAISE MO(_RAISE)
37 |
38 | #define TB_LEFT LGUI(LSFT(KC_LBRC))
39 | #define TB_RGHT LGUI(LSFT(KC_RBRC))
40 |
41 | const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
42 | [_QWERTY] = LAYOUT( \
43 | KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, \
44 | KC_GRV, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_EQL, \
45 | KC_TAB, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, \
46 | KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_LBRC, KC_RBRC, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_BSLS, \
47 | KC_LCTL, KC_LBRC, KC_RBRC, KC_LALT, KC_LGUI, KC_ENT, KC_SPC, KC_BSPC, LOWER, RAISE, XXXXXXX, XXXXXXX, KC_F13, KC_F14 \
48 | ),
49 |
50 | [_LOWER] = LAYOUT( \
51 | _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, \
52 | _______, _______, _______, _______, _______, _______, _______, TB_LEFT, KC_UP, TB_RGHT, _______, _______, \
53 | _______, _______, _______, _______, _______, _______, _______, KC_LEFT, KC_DOWN, KC_RGHT, _______, _______, \
54 | _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, \
55 | _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______ \
56 | ),
57 |
58 | [_RAISE] = LAYOUT( \
59 | XXXXXXX, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5 , KC_F6 , KC_F7 , KC_F8, KC_F9, KC_F10, KC_F11, \
60 | XXXXXXX, XXXXXXX, XXXXXXX, KC_INS , KC_HOME, KC_PGUP, XXXXXXX, KC_MRWD, KC_MPLY, KC_MFFD, XXXXXXX, XXXXXXX, \
61 | XXXXXXX, XXXXXXX, XXXXXXX, KC_DEL , KC_END , KC_PGDN, XXXXXXX, KC_VOLD, KC_MUTE, KC_VOLU, XXXXXXX, XXXXXXX, \
62 | XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, \
63 | XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX \
64 | ),
65 |
66 | [_ADJUST] = LAYOUT( \
67 | XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, \
68 | XXXXXXX, XXXXXXX, RGBRST, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, \
69 | XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, \
70 | XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, RGB_TOG, RGB_HUI, RGB_SAI, RGB_VAI, \
71 | XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, RGB_MOD, RGB_HUD, RGB_SAD, RGB_VAD \
72 | )
73 | };
74 |
75 | bool encoder_update_user(uint8_t index, bool clockwise) {
76 | if (index == 0) { /* Left side encoder */
77 | if (clockwise) {
78 | tap_code(KC__VOLDOWN);
79 | } else {
80 | tap_code(KC__VOLUP);
81 | }
82 | } else if (index == 1) { /* Right side encoder */
83 | if (clockwise) {
84 | tap_code(KC_UP);
85 | } else {
86 | tap_code(KC_DOWN);
87 | }
88 | }
89 | return true;
90 | }
91 |
92 | layer_state_t layer_state_set_user(layer_state_t state) {
93 | return update_tri_layer_state(state, _LOWER, _RAISE, _ADJUST);
94 | }
95 |
96 | bool process_record_user(uint16_t keycode, keyrecord_t *record) {
97 | switch (keycode) {
98 | case EISU:
99 | if (record->event.pressed) {
100 | if (is_mac_mode()) {
101 | register_code(KC_LANG2);
102 | }else{
103 | tap_code16(LALT(KC_GRAVE));
104 | }
105 | } else {
106 | unregister_code(KC_LANG2);
107 | }
108 | return false;
109 | break;
110 | case KANA:
111 | if (record->event.pressed) {
112 | if (is_mac_mode()) {
113 | register_code(KC_LANG1);
114 | }else{
115 | tap_code16(LALT(KC_GRAVE));
116 | }
117 | } else {
118 | unregister_code(KC_LANG1);
119 | }
120 | return false;
121 | break;
122 | case ADJUST:
123 | if (record->event.pressed) {
124 | layer_on(_LOWER);
125 | layer_on(_RAISE);
126 | } else {
127 | layer_off(_LOWER);
128 | layer_off(_RAISE);
129 | }
130 | break;
131 | case RGBRST:
132 | #ifdef RGBLIGHT_ENABLE
133 | if (record->event.pressed) {
134 | eeconfig_update_rgblight_default();
135 | rgblight_enable();
136 | }
137 | #endif
138 | break;
139 | }
140 | return true;
141 | }
142 |
--------------------------------------------------------------------------------
/rev3_5rows/oled_display.c:
--------------------------------------------------------------------------------
1 | /* Copyright 2020 yushakobo
2 | *
3 | * This program is free software: you can redistribute it and/or modify
4 | * it under the terms of the GNU General Public License as published by
5 | * the Free Software Foundation, either version 2 of the License, or
6 | * (at your option) any later version.
7 | *
8 | * This program is distributed in the hope that it will be useful,
9 | * but WITHOUT ANY WARRANTY; without even the implied warranty of
10 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11 | * GNU General Public License for more details.
12 | *
13 | * You should have received a copy of the GNU General Public License
14 | * along with this program. If not, see .
15 | */
16 |
17 | #include QMK_KEYBOARD_H
18 |
19 | // Defines names for use in layer keycodes and the keymap
20 | enum layer_names {
21 | _QWERTY = 0,
22 | _LOWER,
23 | _RAISE,
24 | _ADJUST
25 | };
26 |
27 | #ifdef OLED_ENABLE
28 |
29 | void render_status(void) {
30 |
31 | // Render to mode icon
32 | static const char os_logo[][2][3] PROGMEM ={{{0x95,0x96,0},{0xb5,0xb6,0}},{{0x97,0x98,0},{0xb7,0xb8,0}}};
33 | if (is_mac_mode()) {
34 | oled_write_P(os_logo[0][0], false);
35 | oled_write_P(PSTR("\n"), false);
36 | oled_write_P(os_logo[0][1], false);
37 | }else{
38 | oled_write_P(os_logo[1][0], false);
39 | oled_write_P(PSTR("\n"), false);
40 | oled_write_P(os_logo[1][1], false);
41 | }
42 |
43 | oled_write_P(PSTR(" "), false);
44 |
45 | // Host Keyboard Layer Status
46 | oled_write_P(PSTR("Layer: "), false);
47 |
48 | switch (get_highest_layer(layer_state)) {
49 | case _QWERTY:
50 | oled_write_P(PSTR("Default\n"), false);
51 | break;
52 | case _RAISE:
53 | oled_write_P(PSTR("Raise\n"), false);
54 | break;
55 | case _LOWER:
56 | oled_write_P(PSTR("Lower\n"), false);
57 | break;
58 | case _ADJUST:
59 | oled_write_P(PSTR("Adjust\n"), false);
60 | break;
61 | default:
62 | // Or use the write_ln shortcut over adding '\n' to the end of your string
63 | oled_write_ln_P(PSTR("Undefined"), false);
64 | }
65 |
66 | oled_write_P(PSTR("\n"), false);
67 |
68 | // Host Keyboard LED Status
69 | led_t led_state = host_keyboard_led_state();
70 | oled_write_P(led_state.num_lock ? PSTR("NUM ") : PSTR(" "), false);
71 | oled_write_P(led_state.caps_lock ? PSTR("CAP ") : PSTR(" "), false);
72 | oled_write_P(led_state.scroll_lock ? PSTR("SCR ") : PSTR(" "), false);
73 | }
74 |
75 |
76 | static void render_logo(void) {
77 | static const char PROGMEM qmk_logo[] = {
78 | 0x80, 0x81, 0x82, 0x83, 0x84, 0x85, 0x86, 0x87, 0x88, 0x89, 0x8A, 0x8B, 0x8C, 0x8D, 0x8E, 0x8F, 0x90, 0x91, 0x92, 0x93, 0x94,
79 | 0xA0, 0xA1, 0xA2, 0xA3, 0xA4, 0xA5, 0xA6, 0xA7, 0xA8, 0xA9, 0xAA, 0xAB, 0xAC, 0xAD, 0xAE, 0xAF, 0xB0, 0xB1, 0xB2, 0xB3, 0xB4,
80 | 0xC0, 0xC1, 0xC2, 0xC3, 0xC4, 0xC5, 0xC6, 0xC7, 0xC8, 0xC9, 0xCA, 0xCB, 0xCC, 0xCD, 0xCE, 0xCF, 0xD0, 0xD1, 0xD2, 0xD3, 0xD4, 0x00
81 | };
82 |
83 | oled_write_P(qmk_logo, false);
84 | }
85 |
86 | static void render_rgbled_status(bool full) {
87 | #ifdef RGBLIGHT_ENABLE
88 | char buf[30];
89 | if (RGBLIGHT_MODES > 1 && rgblight_is_enabled()) {
90 | if (full) {
91 | snprintf(buf, sizeof(buf), " LED %2d: %d,%d,%d ",
92 | rgblight_get_mode(),
93 | rgblight_get_hue()/RGBLIGHT_HUE_STEP,
94 | rgblight_get_sat()/RGBLIGHT_SAT_STEP,
95 | rgblight_get_val()/RGBLIGHT_VAL_STEP);
96 | } else {
97 | snprintf(buf, sizeof(buf), "[%2d] ", rgblight_get_mode());
98 | }
99 | oled_write(buf, false);
100 | }
101 | #endif
102 | }
103 |
104 | void oled_task_user(void) {
105 | if(is_keyboard_master()){
106 | render_status();
107 | }else{
108 | render_logo();
109 | render_rgbled_status(true);
110 | }
111 | }
112 | #endif
113 |
--------------------------------------------------------------------------------
/rev3_5rows/readme.md:
--------------------------------------------------------------------------------
1 | # The default keymap for Helix rev3 5rows
2 |
3 | ### Qwerty Layer (Base)
4 | ```
5 | ,-----------------------------------------. ,-----------------------------------------.
6 | | ` | 1 | 2 | 3 | 4 | 5 | | 6 | 7 | 8 | 9 | 0 | Del |
7 | |------+------+------+------+------+------| |------+------+------+------+------+------|
8 | | Tab | Q | W | E | R | T | | Y | U | I | O | P | Bksp |
9 | |------+------+------+------+------+------| |------+------+------+------+------+------|
10 | | Ctrl | A | S | D | F | G | | H | J | K | L | ; | ' |
11 | |------+------+------+------+------+------+------+------+------+------+------+------+------+------|
12 | | Shift| Z | X | C | V | B | [ | ] | N | M | , | . | / |Enter |
13 | |------+------+------+------+------+------+------+------+------+------+------+------+------+------|
14 | |Adjust| Esc | Alt | GUI | EISU |Lower |Space |Space |Raise | KANA | Left | Down | Up |Right |
15 | `-------------------------------------------------------------------------------------------------'
16 |
17 | ```
18 |
19 | ### Lower Layer
20 | ```
21 | ,-----------------------------------------. ,-----------------------------------------.
22 | | | | | | | | | | | | | | |
23 | |------+------+------+------+------+------| |------+------+------+------+------+------|
24 | | ~ | ! | @ | # | $ | % | | ^ | & | * | ( | ) | |
25 | |------+------+------+------+------+------| |------+------+------+------+------+------|
26 | | | F1 | F2 | F3 | F4 | F5 | | F6 | _ | + | { | } | | |
27 | |------+------+------+------+------+------+------+------+------+------+------+------+------+------|
28 | | CAPS | F7 | F8 | F9 | F10 | F11 | ( | ) | F12 | | | Home | End | |
29 | |------+------+------+------+------+------+------+------+------+------+------+------+------+------|
30 | | | | | | | | | | | | Next | Vol- | Vol+ | Play |
31 | `-------------------------------------------------------------------------------------------------'
32 |
33 | ```
34 |
35 |
36 | ### Raise Layer
37 | ```
38 | ,-----------------------------------------. ,-----------------------------------------.
39 | | | | | | | | | | | | | | Bksp |
40 | |------+------+------+------+------+------| |------+------+------+------+------+------|
41 | | ` | 1 | 2 | 3 | 4 | 5 | | 6 | 7 | 8 | 9 | 0 | Del |
42 | |------+------+------+------+------+------| |------+------+------+------+------+------|
43 | | | F1 | F2 | F3 | F4 | F5 | | F6 | - | = | [ | ] | \ |
44 | |------+------+------+------+------+------+------+------+------+------+------+------+------+------|
45 | | CAPS | F7 | F8 | F9 | F10 | F11 | | | F12 | | |PageDn|PageUp| |
46 | |------+------+------+------+------+------+------+------+------+------+------+------+------+------|
47 | | | | | | | | | | | | Next | Vol- | Vol+ | Play |
48 | `-------------------------------------------------------------------------------------------------'
49 |
50 | ```
51 |
52 | ### Adjust Layer (Lower + Raise)
53 | ```
54 | ,-----------------------------------------. ,-----------------------------------------.
55 | | F1 | F2 | F3 | F4 | F5 | F6 | | F7 | F8 | F9 | F10 | F11 | F12 |
56 | |------+------+------+------+------+------| |------+------+------+------+------+------|
57 | | | Reset|RGBRST|EEPRST| | | | | | | | | Del |
58 | |------+------+------+------+------+------| |------+------+------+------+------+------|
59 | | | | | | | Mac | | Win | | | | | |
60 | |------+------+------+------+------+------+------+------+------+------+------+------+------+------|
61 | | | | | | | | | | | |RGB ON| HUE+ | SAT+ | VAL+ |
62 | |------+------+------+------+------+------+------+------+------+------+------+------+------+------|
63 | | | | | | | | | | | | MODE | HUE- | SAT- | VAL- |
64 | `-------------------------------------------------------------------------------------------------'
65 | ```
66 |
67 | ### Rotary Encoder Settings
68 |
69 | |L/R|Clockwise|Counter Clockwise|
70 | |---|---|---|
71 | |Left|Page Down|Page Up|
72 | |Right|Down|Up|
73 |
74 | ### DipSW Settings
75 |
76 | |Switch No.||
77 | |---|---|
78 | |Left 1|Toggle Win/mac|
79 | |Left 2|Not assigned|
80 | |Right 1|Not assigned|
81 | |Right 2|Not assigned|
82 |
--------------------------------------------------------------------------------
/script/build_bundle.sh:
--------------------------------------------------------------------------------
1 | #!/bin/zsh -euo pipefail
2 | cd `dirname $0`/..
3 |
4 | iconutil --convert icns --output Helix.bundle/Contents/Resources/English\ -\ Helix.icns English.iconset
5 | iconutil --convert icns --output Helix.bundle/Contents/Resources/Russian\ -\ Helix.icns Russian.iconset
6 |
7 | touch Helix.bundle
8 |
9 | sudo rm -rf /Library/Keyboard\ Layouts/Helix.bundle
10 | sudo cp -r Helix.bundle /Library/Keyboard\ Layouts/
--------------------------------------------------------------------------------
/script/build_rev2.sh:
--------------------------------------------------------------------------------
1 | #!/bin/zsh -euo pipefail
2 |
3 | qmk compile -kb helix/rev2 -km tonsky
--------------------------------------------------------------------------------
/script/build_rev3.sh:
--------------------------------------------------------------------------------
1 | #!/bin/zsh -euo pipefail
2 |
3 | qmk compile -kb helix/rev3_5rows -km tonsky
4 |
--------------------------------------------------------------------------------