├── 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 | ![](cheatsheet.png) 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 | ![](photo.jpg) 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 | --------------------------------------------------------------------------------