2
0

keymap.c 9.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265
  1. #pragma message "You may need to add LAYOUT_planck_grid to your keymap layers - see default for an example"
  2. #include "planck.h"
  3. #include "action_layer.h"
  4. extern keymap_config_t keymap_config;
  5. #define G(X) LGUI(X)
  6. #define A(X) LALT(X)
  7. #define C(X) LCTL(X)
  8. #define AC(X) A(C(X))
  9. #define SC(X) S(C(X))
  10. #define _______ KC_TRNS
  11. #define XXXXXXX KC_NO
  12. enum planck_layers {
  13. _COLEMAK,
  14. _QWERTY,
  15. _SYMB,
  16. _MOVE,
  17. _FUNC,
  18. };
  19. enum planck_keycodes {
  20. COLEMAK = SAFE_RANGE,
  21. QWERTY,
  22. SYMB,
  23. MOVE,
  24. FUNC,
  25. };
  26. const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
  27. /* COLEMAK
  28. * ,-----------------------------------------------------------------------.
  29. * |Tab | Q | W | F | P | G | J | L | U | Y | ; | - |
  30. * |-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----|
  31. * |Bksp | A | R | S | T | D | H | N | E | I | O | ' |
  32. * |-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----|
  33. * |Shift| Z | X | C | V | B | K | M | , | . | / |Shift|
  34. * |-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----|
  35. * |Func |Ctrl | Alt |Super|Symb |Enter|Space|Move |Super| Alt |Ctrl |Func |
  36. * `-----------------------------------------------------------------------'
  37. */
  38. [_COLEMAK] = {
  39. {
  40. KC_TAB, KC_Q, KC_W, KC_F,
  41. KC_P, KC_G, KC_J, KC_L,
  42. KC_U, KC_Y, KC_SCLN, KC_MINS
  43. },
  44. {
  45. KC_BSPC, KC_A, KC_R, KC_S,
  46. KC_T, KC_D, KC_H, KC_N,
  47. KC_E, KC_I, KC_O, KC_QUOT
  48. },
  49. {
  50. KC_LSFT, KC_Z, KC_X, KC_C,
  51. KC_V, KC_B, KC_K, KC_M,
  52. KC_COMM, KC_DOT, KC_SLSH, KC_RSFT
  53. },
  54. {
  55. FUNC, KC_LCTL, KC_LALT, KC_LGUI,
  56. SYMB, KC_ENT, KC_SPC, MOVE,
  57. KC_RGUI, KC_RALT, KC_RCTL, FUNC
  58. }
  59. },
  60. /* QWERTY
  61. * ,-----------------------------------------------------------------------.
  62. * |Tab | Q | W | E | R | T | Y | U | I | O | P | - |
  63. * |-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----|
  64. * |Bksp | A | S | D | F | G | H | J | K | L | ; | ' |
  65. * |-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----|
  66. * |Shift| Z | X | C | V | B | N | M | , | . | / |Shift|
  67. * |-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----|
  68. * |Func |Ctrl | Alt |Super|Symb |Enter|Space|Move |Super| Alt |Ctrl |Func |
  69. * `-----------------------------------------------------------------------'
  70. */
  71. [_QWERTY] = {
  72. {
  73. KC_TAB, KC_Q, KC_W, KC_E,
  74. KC_R, KC_T, KC_Y, KC_U,
  75. KC_I, KC_O, KC_P, KC_MINS
  76. },
  77. {
  78. KC_BSPC, KC_A, KC_S, KC_D,
  79. KC_F, KC_G, KC_H, KC_J,
  80. KC_K, KC_L, KC_SCLN, KC_QUOT
  81. },
  82. {
  83. KC_LSFT, KC_Z, KC_X, KC_C,
  84. KC_V, KC_B, KC_N, KC_M,
  85. KC_COMM, KC_DOT, KC_SLSH, KC_RSFT
  86. },
  87. {
  88. FUNC, KC_LCTL, KC_LALT, KC_LGUI,
  89. SYMB, KC_ENT, KC_SPC, MOVE,
  90. KC_RGUI, KC_RALT, KC_RCTL, FUNC
  91. }
  92. },
  93. /* SYMB
  94. * ,-----------------------------------------------------------------------.
  95. * | Esc | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | |
  96. * |-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----|
  97. * | Del | ! | @ | # | $ | % | ^ | & | * | ( | ) | |
  98. * |-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----|
  99. * | | ~ | ` | + | = | | | \ | [ | ] | { | } | |
  100. * |-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----|
  101. * | | | | | | | | | | | | |
  102. * `-----------------------------------------------------------------------'
  103. */
  104. [_SYMB] = {
  105. {
  106. KC_ESC, KC_1, KC_2, KC_3,
  107. KC_4, KC_5, KC_6, KC_7,
  108. KC_8, KC_9, KC_0, _______
  109. },
  110. {
  111. KC_DEL, KC_EXLM, KC_AT, KC_HASH,
  112. KC_DLR, KC_PERC, KC_CIRC, KC_AMPR,
  113. KC_ASTR, KC_LPRN, KC_RPRN, _______
  114. },
  115. {
  116. _______, KC_TILD, KC_GRV, KC_PLUS,
  117. KC_EQL, KC_PIPE, KC_BSLS, KC_LBRC,
  118. KC_RBRC, KC_LCBR, KC_RCBR, _______
  119. },
  120. {
  121. _______, _______, _______, _______,
  122. _______, _______, _______, _______,
  123. _______, _______, _______, _______
  124. }
  125. },
  126. /* MOVE
  127. * ,-----------------------------------------------------------------------.
  128. * | | | | | | | |Home | Up | End | | Esc |
  129. * |-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----|
  130. * | | | | | | | |Left |Down |Right|Caps | Del |
  131. * |-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----|
  132. * | | | | | | | |PgDn |PgUp |TabL |TabR | |
  133. * |-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----|
  134. * | | | | | | | | | | | | |
  135. * `-----------------------------------------------------------------------'
  136. */
  137. [_MOVE] = {
  138. {
  139. AC(KC_A), AC(KC_B), AC(KC_C), AC(KC_D),
  140. AC(KC_E), AC(KC_F), XXXXXXX, KC_HOME,
  141. KC_UP, KC_END, XXXXXXX, KC_ESC
  142. },
  143. {
  144. AC(KC_G), AC(KC_H), AC(KC_I), AC(KC_J),
  145. AC(KC_K), AC(KC_L), XXXXXXX, KC_LEFT,
  146. KC_DOWN, KC_RGHT, KC_CAPS, KC_DEL
  147. },
  148. {
  149. _______, AC(KC_M), AC(KC_N), AC(KC_O),
  150. AC(KC_P), AC(KC_Q), XXXXXXX, KC_PGDN,
  151. KC_PGUP, SC(KC_TAB), C(KC_TAB), _______
  152. },
  153. {
  154. _______, _______, _______, _______,
  155. _______, _______, _______, _______,
  156. _______, _______, _______, _______
  157. }
  158. },
  159. /* FUNC
  160. * ,-----------------------------------------------------------------------.
  161. * |Reset| F1 | F2 | F3 | F4 | F5 | F6 | F7 | F8 | F9 | F10 |VolUp|
  162. * |-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----|
  163. * |Power| F11 | F12 | F13 | F14 | F15 | F16 | F17 | F18 | F19 | F20 |VolDn|
  164. * |-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----|
  165. * | | F21 | F22 | F23 | F24 | | | | |Clmak|Qwrty| |
  166. * |-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----|
  167. * | | | | |Prev |Mute |Play |Next | | | | |
  168. * `-----------------------------------------------------------------------'
  169. */
  170. [_FUNC] = {
  171. {
  172. RESET, KC_F1, KC_F2, KC_F3,
  173. KC_F4, KC_F5, KC_F6, KC_F7,
  174. KC_F8, KC_F9, KC_F10, KC_VOLU
  175. },
  176. {
  177. KC_POWER, KC_F11, KC_F12, KC_F13,
  178. KC_F14, KC_F15, KC_F16, KC_F17,
  179. KC_F18, KC_F19, KC_F20, KC_VOLD
  180. },
  181. {
  182. _______, KC_F21, KC_F22, KC_F23,
  183. KC_F24, XXXXXXX, XXXXXXX, XXXXXXX,
  184. XXXXXXX, COLEMAK, QWERTY, _______
  185. },
  186. {
  187. _______, _______, _______, _______,
  188. KC_MPRV, KC_MUTE, KC_MPLY, KC_MNXT,
  189. _______, _______, _______, _______
  190. }
  191. }
  192. };
  193. #ifdef AUDIO_ENABLE
  194. float colemak_song[][2] = SONG(COLEMAK_SOUND);
  195. float qwerty_song[][2] = SONG(QWERTY_SOUND);
  196. #endif
  197. void set_colemak(void) {
  198. #ifdef AUDIO_ENABLE
  199. stop_all_notes();
  200. PLAY_SONG(colemak_song);
  201. #endif
  202. set_single_persistent_default_layer(_COLEMAK);
  203. }
  204. void set_qwerty(void) {
  205. #ifdef AUDIO_ENABLE
  206. stop_all_notes();
  207. PLAY_SONG(qwerty_song);
  208. #endif
  209. set_single_persistent_default_layer(_QWERTY);
  210. }
  211. bool process_record_user(uint16_t keycode, keyrecord_t *record) {
  212. switch (keycode) {
  213. case COLEMAK:
  214. if (record->event.pressed) {
  215. set_colemak();
  216. }
  217. return false;
  218. break;
  219. case QWERTY:
  220. if (record->event.pressed) {
  221. set_qwerty();
  222. }
  223. return false;
  224. break;
  225. case SYMB:
  226. if (record->event.pressed) {
  227. layer_on(_SYMB);
  228. } else {
  229. layer_off(_SYMB);
  230. }
  231. return false;
  232. break;
  233. case MOVE:
  234. if (record->event.pressed) {
  235. layer_on(_MOVE);
  236. } else {
  237. layer_off(_MOVE);
  238. }
  239. return false;
  240. break;
  241. case FUNC:
  242. if (record->event.pressed) {
  243. layer_on(_FUNC);
  244. } else {
  245. layer_off(_FUNC);
  246. }
  247. return false;
  248. break;
  249. }
  250. return true;
  251. }