keymap.c 20 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343
  1. #include QMK_KEYBOARD_H
  2. extern keymap_config_t keymap_config;
  3. // Each layer gets a name for readability, which is then used in the keymap matrix below.
  4. // The underscores don't mean anything - you can have a layer called STUFF or any other name.
  5. // Layer names don't all need to be of the same length, obviously, and you can also skip them
  6. // entirely and just use numbers.
  7. #define _QWERTY 0
  8. #define _COLEMAK 1
  9. #define _DVORAK 2
  10. #define _LOWER 3
  11. #define _RAISE 4
  12. #define _ADJUST 16
  13. enum custom_keycodes {
  14. QWERTY = SAFE_RANGE,
  15. COLEMAK,
  16. DVORAK,
  17. LOWER,
  18. RAISE,
  19. ADJUST,
  20. };
  21. #if HELIX_ROWS == 5
  22. const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
  23. /* Qwerty
  24. * ,-----------------------------------------------------------------------------------.
  25. * | ` | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | Bksp |
  26. * |------+------+------+------+------+------+------+------+------+------+------+------|
  27. * | Tab | Q | W | E | R | T | Y | U | I | O | P | Del |
  28. * |------+------+------+------+------+-------------+------+------+------+------+------|
  29. * | Esc | A | S | D | F | G | H | J | K | L | ; | " |
  30. * |------+------+------+------+------+------|------+------+------+------+------+------|
  31. * | Shift| Z | X | C | V | B | N | M | , | . | / |Enter |
  32. * |------+------+------+------+------+------+------+------+------+------+------+------|
  33. * |Adjust| Ctrl | Alt | GUI |Lower |Space |Space |Raise | Left | Down | Up |Right |
  34. * `-----------------------------------------------------------------------------------'
  35. */
  36. [_QWERTY] = LAYOUT( \
  37. KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_BSPC, \
  38. KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_DEL, \
  39. KC_ESC, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, \
  40. KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_ENT , \
  41. ADJUST, KC_LCTL, KC_LALT, KC_LGUI, LOWER, KC_SPC, KC_SPC, RAISE, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT \
  42. ),
  43. /* Colemak
  44. * ,-----------------------------------------------------------------------------------.
  45. * | ` | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | Bksp |
  46. * |------+------+------+------+------+------+------+------+------+------+------+------|
  47. * | Tab | Q | W | F | P | G | J | L | U | Y | ; | Del |
  48. * |------+------+------+------+------+-------------+------+------+------+------+------|
  49. * | Esc | A | R | S | T | D | H | N | E | I | O | " |
  50. * |------+------+------+------+------+------|------+------+------+------+------+------|
  51. * | Shift| Z | X | C | V | B | K | M | , | . | / |Enter |
  52. * |------+------+------+------+------+------+------+------+------+------+------+------|
  53. * |Adjust| Ctrl | Alt | GUI |Lower |Space |Space |Raise | Left | Down | Up |Right |
  54. * `-----------------------------------------------------------------------------------'
  55. */
  56. [_COLEMAK] = LAYOUT( \
  57. KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_BSPC, \
  58. KC_TAB, KC_Q, KC_W, KC_F, KC_P, KC_G, KC_J, KC_L, KC_U, KC_Y, KC_SCLN, KC_DEL, \
  59. KC_ESC, KC_A, KC_R, KC_S, KC_T, KC_D, KC_H, KC_N, KC_E, KC_I, KC_O, KC_QUOT, \
  60. KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_K, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_ENT , \
  61. ADJUST, KC_LCTL, KC_LALT, KC_LGUI, LOWER, KC_SPC, KC_SPC, RAISE, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT \
  62. ),
  63. /* Dvorak
  64. * ,-----------------------------------------------------------------------------------.
  65. * | ` | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | Bksp |
  66. * |------+------+------+------+------+------+------+------+------+------+------+------|
  67. * | Tab | " | , | . | P | Y | F | G | C | R | L | Del |
  68. * |------+------+------+------+------+-------------+------+------+------+------+------|
  69. * | Esc | A | O | E | U | I | D | H | T | N | S | / |
  70. * |------+------+------+------+------+------|------+------+------+------+------+------|
  71. * | Shift| ; | Q | J | K | X | B | M | W | V | Z |Enter |
  72. * |------+------+------+------+------+------+------+------+------+------+------+------|
  73. * |Adjust| Ctrl | Alt | GUI |Lower |Space |Space |Raise | Left | Down | Up |Right |
  74. * `-----------------------------------------------------------------------------------'
  75. */
  76. [_DVORAK] = LAYOUT( \
  77. KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_BSPC, \
  78. KC_TAB, KC_QUOT, KC_COMM, KC_DOT, KC_P, KC_Y, KC_F, KC_G, KC_C, KC_R, KC_L, KC_DEL, \
  79. KC_ESC, KC_A, KC_O, KC_E, KC_U, KC_I, KC_D, KC_H, KC_T, KC_N, KC_S, KC_SLSH, \
  80. KC_LSFT, KC_SCLN, KC_Q, KC_J, KC_K, KC_X, KC_B, KC_M, KC_W, KC_V, KC_Z, KC_ENT , \
  81. ADJUST, KC_LCTL, KC_LALT, KC_LGUI, LOWER, KC_SPC, KC_SPC, RAISE, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT \
  82. ),
  83. /* Lower
  84. * ,-----------------------------------------------------------------------------------.
  85. * | ~ | ! | @ | # | $ | % | ^ | & | * | ( | ) | Bksp |
  86. * |------+------+------+------+------+-------------+------+------+------+------+------|
  87. * | ~ | ! | @ | # | $ | % | ^ | & | * | ( | ) | Del |
  88. * |------+------+------+------+------+-------------+------+------+------+------+------|
  89. * | Del | F1 | F2 | F3 | F4 | F5 | F6 | _ | + | | \ | | |
  90. * |------+------+------+------+------+------|------+------+------+------+------+------|
  91. * | | F7 | F8 | F9 | F10 | F11 | F12 |ISO ~ |ISO | | | |Enter |
  92. * |------+------+------+------+------+------+------+------+------+------+------+------|
  93. * | | | | | | | | Next | Vol- | Vol+ | Play |
  94. * `-----------------------------------------------------------------------------------'
  95. */
  96. [_LOWER] = LAYOUT( \
  97. KC_TILD, KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN, KC_BSPC, \
  98. KC_TILD, KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN, KC_DEL, \
  99. KC_DEL, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_UNDS, KC_PLUS, KC_LCBR, KC_RCBR, KC_PIPE, \
  100. _______, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12,S(KC_NUHS),S(KC_NUBS),_______, _______, _______, \
  101. _______, _______, _______, _______, _______, _______, _______, _______, KC_MNXT, KC_VOLD, KC_VOLU, KC_MPLY \
  102. ),
  103. /* Raise
  104. * ,-----------------------------------------------------------------------------------.
  105. * | ` | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | Bksp |
  106. * |------+------+------+------+------+-------------+------+------+------+------+------|
  107. * | ` | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | Del |
  108. * |------+------+------+------+------+-------------+------+------+------+------+------|
  109. * | Del | F1 | F2 | F3 | F4 | F5 | F6 | - | = | [ | ] | \ |
  110. * |------+------+------+------+------+------|------+------+------+------+------+------|
  111. * | | F7 | F8 | F9 | F10 | F11 | F12 |ISO # |ISO / | | |Enter |
  112. * |------+------+------+------+------+------+------+------+------+------+------+------|
  113. * | | | | | | | | Next | Vol- | Vol+ | Play |
  114. * `-----------------------------------------------------------------------------------'
  115. */
  116. [_RAISE] = LAYOUT( \
  117. KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_BSPC, \
  118. KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_DEL, \
  119. KC_DEL, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_MINS, KC_EQL, KC_LBRC, KC_RBRC, KC_BSLS, \
  120. _______, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_NUHS, KC_NUBS, _______, _______, _______, \
  121. _______, _______, _______, _______, _______, _______, _______, _______, KC_MNXT, KC_VOLD, KC_VOLU, KC_MPLY \
  122. ),
  123. /* Adjust (Lower + Raise)
  124. * ,-----------------------------------------------------------------------------------.
  125. * | F1 | F2 | F3 | F4 | F5 | F6 | F7 | F8 | F9 | F10 | F11 | F12 |
  126. * |------+------+------+------+------+------+------+------+------+------+------+------|
  127. * | | Reset| | | | | | | | | | Del |
  128. * |------+------+------+------+------+-------------+------+------+------+------+------|
  129. * | | | |Aud on|Audoff|AGnorm|AGswap|Qwerty|Colemk|Dvorak| | |
  130. * |------+------+------+------+------+------|------+------+------+------+------+------|
  131. * | | | | | | | | | | | | |
  132. * |------+------+------+------+------+------+------+------+------+------+------+------|
  133. * | | | | | | | | | | | |
  134. * `-----------------------------------------------------------------------------------'
  135. */
  136. [_ADJUST] = LAYOUT( \
  137. KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, \
  138. _______, RESET, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_DEL, \
  139. _______, _______, _______, AU_ON, AU_OFF, AG_NORM, AG_SWAP, QWERTY, COLEMAK, DVORAK, _______, _______, \
  140. _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, \
  141. _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______ \
  142. )
  143. };
  144. #elif HELIX_ROWS == 4
  145. const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
  146. /* Qwerty
  147. * ,-----------------------------------------------------------------------------------.
  148. * | Tab | Q | W | E | R | T | Y | U | I | O | P | Bksp |
  149. * |------+------+------+------+------+-------------+------+------+------+------+------|
  150. * | Esc | A | S | D | F | G | H | J | K | L | ; | " |
  151. * |------+------+------+------+------+------|------+------+------+------+------+------|
  152. * | Shift| Z | X | C | V | B | N | M | , | . | / |Enter |
  153. * |------+------+------+------+------+------+------+------+------+------+------+------|
  154. * |Adjust| Ctrl | Alt | GUI |Lower |Space |Space |Raise | Left | Down | Up |Right |
  155. * `-----------------------------------------------------------------------------------'
  156. */
  157. [_QWERTY] = LAYOUT( \
  158. KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_DEL, \
  159. KC_ESC, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, \
  160. KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_ENT , \
  161. ADJUST, KC_LCTL, KC_LALT, KC_LGUI, LOWER, KC_SPC, KC_SPC, RAISE, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT \
  162. ),
  163. /* Colemak
  164. * ,-----------------------------------------------------------------------------------.
  165. * | Tab | Q | W | F | P | G | J | L | U | Y | ; | Bksp |
  166. * |------+------+------+------+------+-------------+------+------+------+------+------|
  167. * | Esc | A | R | S | T | D | H | N | E | I | O | " |
  168. * |------+------+------+------+------+------|------+------+------+------+------+------|
  169. * | Shift| Z | X | C | V | B | K | M | , | . | / |Enter |
  170. * |------+------+------+------+------+------+------+------+------+------+------+------|
  171. * |Adjust| Ctrl | Alt | GUI |Lower |Space |Space |Raise | Left | Down | Up |Right |
  172. * `-----------------------------------------------------------------------------------'
  173. */
  174. [_COLEMAK] = LAYOUT( \
  175. KC_TAB, KC_Q, KC_W, KC_F, KC_P, KC_G, KC_J, KC_L, KC_U, KC_Y, KC_SCLN, KC_BSPC, \
  176. KC_ESC, KC_A, KC_R, KC_S, KC_T, KC_D, KC_H, KC_N, KC_E, KC_I, KC_O, KC_QUOT, \
  177. KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_K, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_ENT , \
  178. ADJUST, KC_LCTL, KC_LALT, KC_LGUI, LOWER, KC_SPC, KC_SPC, RAISE, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT \
  179. ),
  180. /* Dvorak
  181. * ,-----------------------------------------------------------------------------------.
  182. * | Tab | " | , | . | P | Y | F | G | C | R | L | Bksp |
  183. * |------+------+------+------+------+-------------+------+------+------+------+------|
  184. * | Esc | A | O | E | U | I | D | H | T | N | S | / |
  185. * |------+------+------+------+------+------|------+------+------+------+------+------|
  186. * | Shift| ; | Q | J | K | X | B | M | W | V | Z |Enter |
  187. * |------+------+------+------+------+------+------+------+------+------+------+------|
  188. * |Adjust| Ctrl | Alt | GUI |Lower |Space |Space |Raise | Left | Down | Up |Right |
  189. * `-----------------------------------------------------------------------------------'
  190. */
  191. [_DVORAK] = LAYOUT( \
  192. KC_TAB, KC_QUOT, KC_COMM, KC_DOT, KC_P, KC_Y, KC_F, KC_G, KC_C, KC_R, KC_L, KC_BSPC, \
  193. KC_ESC, KC_A, KC_O, KC_E, KC_U, KC_I, KC_D, KC_H, KC_T, KC_N, KC_S, KC_SLSH, \
  194. KC_LSFT, KC_SCLN, KC_Q, KC_J, KC_K, KC_X, KC_B, KC_M, KC_W, KC_V, KC_Z, KC_ENT , \
  195. ADJUST, KC_LCTL, KC_LALT, KC_LGUI, LOWER, KC_SPC, KC_SPC, RAISE, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT \
  196. ),
  197. /* Lower
  198. * ,-----------------------------------------------------------------------------------.
  199. * | ~ | ! | @ | # | $ | % | ^ | & | * | ( | ) | Bksp |
  200. * |------+------+------+------+------+-------------+------+------+------+------+------|
  201. * | Del | F1 | F2 | F3 | F4 | F5 | F6 | _ | + | | \ | | |
  202. * |------+------+------+------+------+------|------+------+------+------+------+------|
  203. * | | F7 | F8 | F9 | F10 | F11 | F12 |ISO ~ |ISO | | | |Enter |
  204. * |------+------+------+------+------+------+------+------+------+------+------+------|
  205. * | | | | | | | | Next | Vol- | Vol+ | Play |
  206. * `-----------------------------------------------------------------------------------'
  207. */
  208. [_LOWER] = LAYOUT( \
  209. KC_TILD, KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN, KC_BSPC, \
  210. KC_DEL, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_UNDS, KC_PLUS, KC_LCBR, KC_RCBR, KC_PIPE, \
  211. _______, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12,S(KC_NUHS),S(KC_NUBS),_______, _______, _______, \
  212. _______, _______, _______, _______, _______, _______, _______, _______, KC_MNXT, KC_VOLD, KC_VOLU, KC_MPLY \
  213. ),
  214. /* Raise
  215. * ,-----------------------------------------------------------------------------------.
  216. * | ` | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | Bksp |
  217. * |------+------+------+------+------+-------------+------+------+------+------+------|
  218. * | Del | F1 | F2 | F3 | F4 | F5 | F6 | - | = | [ | ] | \ |
  219. * |------+------+------+------+------+------|------+------+------+------+------+------|
  220. * | | F7 | F8 | F9 | F10 | F11 | F12 |ISO # |ISO / | | |Enter |
  221. * |------+------+------+------+------+------+------+------+------+------+------+------|
  222. * | | | | | | | | Next | Vol- | Vol+ | Play |
  223. * `-----------------------------------------------------------------------------------'
  224. */
  225. [_RAISE] = LAYOUT( \
  226. KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_BSPC, \
  227. KC_DEL, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_MINS, KC_EQL, KC_LBRC, KC_RBRC, KC_BSLS, \
  228. _______, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_NUHS, KC_NUBS, _______, _______, _______, \
  229. _______, _______, _______, _______, _______, _______, _______, _______, KC_MNXT, KC_VOLD, KC_VOLU, KC_MPLY \
  230. ),
  231. /* Adjust (Lower + Raise)
  232. * ,-----------------------------------------------------------------------------------.
  233. * | | Reset| | | | | | | | | | Del |
  234. * |------+------+------+------+------+-------------+------+------+------+------+------|
  235. * | | | |Aud on|Audoff|AGnorm|AGswap|Qwerty|Colemk|Dvorak| | |
  236. * |------+------+------+------+------+------|------+------+------+------+------+------|
  237. * | | | | | | | | | | | | |
  238. * |------+------+------+------+------+------+------+------+------+------+------+------|
  239. * | | | | | | | | | | | |
  240. * `-----------------------------------------------------------------------------------'
  241. */
  242. [_ADJUST] = LAYOUT( \
  243. _______, RESET, _______, M_SAMPLE, _______, _______, _______, _______, _______, _______, _______, KC_DEL, \
  244. _______, _______, _______, AU_ON, AU_OFF, AG_NORM, AG_SWAP, QWERTY, COLEMAK, DVORAK, _______, _______, \
  245. _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, \
  246. _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______ \
  247. )
  248. };
  249. #else
  250. #error "undefined keymaps"
  251. #endif
  252. #ifdef AUDIO_ENABLE
  253. float tone_qwerty[][2] = SONG(QWERTY_SOUND);
  254. float tone_dvorak[][2] = SONG(DVORAK_SOUND);
  255. float tone_colemak[][2] = SONG(COLEMAK_SOUND);
  256. #endif
  257. void persistent_default_layer_set(uint16_t default_layer) {
  258. eeconfig_update_default_layer(default_layer);
  259. default_layer_set(default_layer);
  260. }
  261. bool process_record_user(uint16_t keycode, keyrecord_t *record) {
  262. switch (keycode) {
  263. case QWERTY:
  264. if (record->event.pressed) {
  265. #ifdef AUDIO_ENABLE
  266. PLAY_SONG(tone_qwerty);
  267. #endif
  268. persistent_default_layer_set(1UL<<_QWERTY);
  269. }
  270. return false;
  271. break;
  272. case COLEMAK:
  273. if (record->event.pressed) {
  274. #ifdef AUDIO_ENABLE
  275. PLAY_SONG(tone_colemak);
  276. #endif
  277. persistent_default_layer_set(1UL<<_COLEMAK);
  278. }
  279. return false;
  280. break;
  281. case DVORAK:
  282. if (record->event.pressed) {
  283. #ifdef AUDIO_ENABLE
  284. PLAY_SONG(tone_dvorak);
  285. #endif
  286. persistent_default_layer_set(1UL<<_DVORAK);
  287. }
  288. return false;
  289. break;
  290. case LOWER:
  291. if (record->event.pressed) {
  292. layer_on(_LOWER);
  293. update_tri_layer(_LOWER, _RAISE, _ADJUST);
  294. } else {
  295. layer_off(_LOWER);
  296. update_tri_layer(_LOWER, _RAISE, _ADJUST);
  297. }
  298. return false;
  299. break;
  300. case RAISE:
  301. if (record->event.pressed) {
  302. layer_on(_RAISE);
  303. update_tri_layer(_LOWER, _RAISE, _ADJUST);
  304. } else {
  305. layer_off(_RAISE);
  306. update_tri_layer(_LOWER, _RAISE, _ADJUST);
  307. }
  308. return false;
  309. break;
  310. case ADJUST:
  311. if (record->event.pressed) {
  312. layer_on(_ADJUST);
  313. } else {
  314. layer_off(_ADJUST);
  315. }
  316. return false;
  317. break;
  318. }
  319. return true;
  320. }