keymap.c 12 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237
  1. #include QMK_KEYBOARD_H
  2. enum layer_names {
  3. _DVORAK,
  4. _QWERTY,
  5. _COLEMAK,
  6. _KEYPAD,
  7. };
  8. enum custom_keycodes { DVORAK = SAFE_RANGE, QWERTY, COLEMAK, KEYPAD };
  9. // Aliases to make the keymap more uniform
  10. #define GUI_END GUI_T(KC_END)
  11. #define KPD_ENT LT(_KEYPAD, KC_ENT)
  12. #define MACLOCK LGUI(LCTL(KC_Q))
  13. // clang-format off
  14. /*
  15. Function Keys on All Layers (Keypad toggles):
  16. ,-----------------------------------------------------------------.
  17. | ESC | F1 | F2 | F3 | F4 | F5 | F6 | F7 | F8 |
  18. `-----------------------------------------------------------------'
  19. ,-----------------------------------------------------------------.
  20. | F9 | F10 | F11 | F12 | PScr | SLck | Paus | Keypad | RESET |
  21. `-----------------------------------------------------------------'
  22. Dvorak layer:
  23. ,-------------------------------------------.,-------------------------------------------.
  24. | = | 1 | 2 | 3 | 4 | 5 || 6 | 7 | 8 | 9 | 0 | \ |
  25. |--------+------+------+------+------+------||------+------+------+------+------+--------|
  26. | Tab | ' | , | . | P | Y || F | G | C | R | L | / |
  27. |--------+------+------+------+------+------||------+------+------+------+------+--------|
  28. | CapsLk | A | O | E | U | I || D | H | T | N | S | - |
  29. |--------+------+------+------+------+------||------+------+------+------+------+--------|
  30. | LShift | Z | X | C | V | X || B | M | W | V | Z | RShift |
  31. `--------+------+------+------+------+------'`------+------+------+------+------+--------'
  32. | ` | INS | Left | Rght | | Up | Dn | [ | ] |
  33. `---------------------------' `---------------------------'
  34. ,--------------.,--------------.
  35. | LCtl | LAlt || RGUI | RCtl |
  36. ,------|-------|------||------+-------+-------.
  37. | | | Home || PgUp | Enter | |
  38. | BkSp | Del |------||------| / | Space |
  39. | | | End || PgDn | KeyPd | |
  40. `---------------------'`----------------------'
  41. QWERTY layer:
  42. ,-------------------------------------------.,-------------------------------------------.
  43. | = | 1 | 2 | 3 | 4 | 5 || 6 | 7 | 8 | 9 | 0 | - |
  44. |--------+------+------+------+------+------||------+------+------+------+------+--------|
  45. | Tab | Q | W | E | R | T || Y | U | I | O | P | \ |
  46. |--------+------+------+------+------+------||------+------+------+------+------+--------|
  47. | CapsLk | A | S | D | F | G || H | J | K | L | ; | ' |
  48. |--------+------+------+------+------+------||------+------+------+------+------+--------|
  49. | LShift | Z | X | C | V | B || N | M | , | . | / | RShift |
  50. `--------+------+------+------+------+------'`------+------+------+------+------+--------'
  51. | ` | INS | Left | Rght | | Up | Dn | [ | ] |
  52. `---------------------------' `---------------------------'
  53. ,--------------.,--------------.
  54. | LCtl | LAlt || RGUI | RCtl |
  55. ,------|-------|------||------+-------+-------.
  56. | | | Home || PgUp | Enter | |
  57. | BkSp | Del |------||------| / | Space |
  58. | | | End || PgDn | KeyPd | |
  59. `---------------------'`----------------------'
  60. Colemak layer:
  61. ,-------------------------------------------.,-------------------------------------------.
  62. | = | 1 | 2 | 3 | 4 | 5 || 6 | 7 | 8 | 9 | 0 | - |
  63. |--------+------+------+------+------+------||------+------+------+------+------+--------|
  64. | Tab | Q | W | F | P | G || J | L | U | Y | ; | \ |
  65. |--------+------+------+------+------+------||------+------+------+------+------+--------|
  66. | BkSpc | A | R | S | T | D || H | N | E | I | O | ' |
  67. |--------+------+------+------+------+------||------+------+------+------+------+--------|
  68. | LShift | Z | X | C | V | B || K | M | , | . | / | RShift |
  69. `--------+------+------+------+------+------'`------+------+------+------+------+--------'
  70. | ` | INS | Left | Rght | | Up | Dn | [ | ] |
  71. `---------------------------' `---------------------------'
  72. ,--------------.,--------------.
  73. | LCtl | LAlt || RGUI | RCtl |
  74. ,------|-------|------||------+-------+-------.
  75. | | | Home || PgUp | Enter | |
  76. | BkSp | Del |------||------| / | Space |
  77. | | | End || PgDn | KeyPd | |
  78. `---------------------'`----------------------'
  79. Keypad layer:
  80. ,-------------------------------------------.,-------------------------------------------.
  81. | Power | | | | | || | NmLk | KP = | KP / | KP * | |
  82. |--------+------+------+------+------+------||------+------+------+------+------+--------|
  83. | Sleep | | | | | || | KP 7 | KP 8 | KP 9 | KP - | |
  84. |--------+------+------+------+------+------||------+------+------+------+------+--------|
  85. | Wake | | Mute | Vol- | Vol+ | || | KP 4 | KP 5 | KP 6 | KP + | |
  86. |--------+------+------+------+------+------||------+------+------+------+------+--------|
  87. | | Stop | Prev | Play | Next | Sel || | KP 1 | KP 2 | KP 3 |KP Ent| |
  88. `--------+------+------+------+------+------'`------+------+------+------+------+--------'
  89. | |QWERTY|Colemk|Dvorak| | | | KP . |KP Ent|
  90. `---------------------------' `---------------------------'
  91. ,-------------.,-------------.
  92. | | || |MacLck|
  93. ,------|------|------||------+------+------.
  94. | | | || | | |
  95. | | |------||------| | KP 0 |
  96. | | |MacLck|| | | |
  97. `--------------------'`--------------------'
  98. */
  99. const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
  100. [_DVORAK] = LAYOUT (
  101. // Left Hand
  102. KC_ESC, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8,
  103. KC_EQL, KC_1, KC_2, KC_3, KC_4, KC_5,
  104. KC_TAB, KC_QUOT, KC_COMM, KC_DOT, KC_P, KC_Y,
  105. KC_CAPS, KC_A, KC_O, KC_E, KC_U, KC_I,
  106. KC_LSFT, KC_SCLN, KC_Q, KC_J, KC_K, KC_X,
  107. KC_GRV, KC_INS, KC_LEFT, KC_RGHT,
  108. // Left Thumb
  109. KC_LCTL, KC_LALT,
  110. KC_HOME,
  111. KC_BSPC, KC_DEL, GUI_END,
  112. // Right Hand
  113. KC_F9, KC_F10, KC_F11, KC_F12, KC_PSCR, KC_SLCK, KC_PAUS, TG(_KEYPAD), RESET,
  114. KC_6, KC_7, KC_8, KC_9, KC_0, KC_BSLS,
  115. KC_F, KC_G, KC_C, KC_R, KC_L, KC_SLSH,
  116. KC_D, KC_H, KC_T, KC_N, KC_S, KC_MINS,
  117. KC_B, KC_M, KC_W, KC_V, KC_Z, KC_RSFT,
  118. KC_UP, KC_DOWN, KC_LBRC, KC_RBRC,
  119. // Right Thumb
  120. KC_RGUI, KC_RCTL,
  121. KC_PGUP,
  122. KC_PGDN, KPD_ENT, KC_SPC
  123. ),
  124. [_QWERTY] = LAYOUT (
  125. // Left Hand
  126. KC_ESC, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8,
  127. KC_EQL, KC_1, KC_2, KC_3, KC_4, KC_5,
  128. KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T,
  129. KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G,
  130. KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B,
  131. KC_GRV, KC_INS, KC_LEFT, KC_RGHT,
  132. // Left Thumb
  133. KC_LCTL, KC_LALT,
  134. KC_HOME,
  135. KC_BSPC, KC_DEL, KC_END,
  136. // Right Hand
  137. KC_F9, KC_F10, KC_F11, KC_F12, KC_PSCR, KC_SLCK, KC_PAUS, TG(_KEYPAD), RESET,
  138. KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS,
  139. KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSLS ,
  140. KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT,
  141. KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT,
  142. KC_UP, KC_DOWN, KC_LBRC, KC_RBRC,
  143. // Right Thumb
  144. KC_RGUI, KC_RCTL,
  145. KC_PGUP,
  146. KC_PGDN, KPD_ENT, KC_SPC
  147. ),
  148. [_COLEMAK] = LAYOUT (
  149. // Left Hand
  150. KC_ESC, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8,
  151. KC_EQL, KC_1, KC_2, KC_3, KC_4, KC_5,
  152. KC_TAB, KC_Q, KC_W, KC_F, KC_P, KC_G,
  153. KC_BSPC, KC_A, KC_R, KC_S, KC_T, KC_D,
  154. KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B,
  155. KC_GRV, KC_INS, KC_LEFT, KC_RGHT,
  156. // Left Thumb
  157. KC_LCTL, KC_LALT,
  158. KC_HOME,
  159. KC_BSPC, KC_DEL, KC_END,
  160. // Right Hand
  161. KC_F9, KC_F10, KC_F11, KC_F12, KC_PSCR, KC_SLCK, KC_PAUS, TG(_KEYPAD), RESET,
  162. KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS,
  163. KC_J, KC_L, KC_U, KC_Y, KC_SCLN, KC_BSLS,
  164. KC_H, KC_N, KC_E, KC_I, KC_O, KC_QUOT,
  165. KC_K, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT,
  166. KC_UP, KC_DOWN, KC_LBRC, KC_RBRC,
  167. // Right Thumb
  168. KC_RGUI, KC_RCTL,
  169. KC_PGUP,
  170. KC_PGDN, KPD_ENT, KC_SPC
  171. ),
  172. [_KEYPAD] = LAYOUT (
  173. // Left Hand
  174. _______, _______, _______, _______, _______, _______, _______, _______, _______,
  175. KC_PWR, _______, _______, _______, _______, _______,
  176. KC_SLEP, _______, _______, _______, _______, _______,
  177. KC_WAKE, _______, KC_MUTE, KC_VOLD, KC_VOLU, _______,
  178. _______, KC_MSTP, KC_MPRV, KC_MPLY, KC_MNXT, KC_MSEL,
  179. _______, QWERTY, COLEMAK, DVORAK,
  180. // Left Thumb
  181. _______, _______,
  182. _______,
  183. _______, _______, MACLOCK,
  184. // Right Hand
  185. _______, _______, _______, _______, _______, _______, _______, _______, _______,
  186. _______, KC_NLCK, KC_PEQL, KC_PSLS, KC_PAST, _______,
  187. _______, KC_P7, KC_P8, KC_P9, KC_PMNS, _______,
  188. _______, KC_P4, KC_P5, KC_P6, KC_PPLS, _______,
  189. _______, KC_P1, KC_P2, KC_P3, KC_PENT, _______,
  190. _______, _______, KC_PDOT, KC_PENT,
  191. // Right Thumb
  192. _______, MACLOCK,
  193. _______,
  194. _______, _______, KC_P0
  195. )
  196. };
  197. // clang-format on
  198. bool process_record_user(uint16_t keycode, keyrecord_t *record) {
  199. if (record->event.pressed) {
  200. switch (keycode) {
  201. case DVORAK:
  202. set_single_persistent_default_layer(_DVORAK);
  203. return false;
  204. case QWERTY:
  205. set_single_persistent_default_layer(_QWERTY);
  206. return false;
  207. case COLEMAK:
  208. set_single_persistent_default_layer(_COLEMAK);
  209. return false;
  210. }
  211. }
  212. return true;
  213. };
  214. // Runs just one time when the keyboard initializes.
  215. void matrix_init_user(void){};