2
0

keymap.c 8.5 KB

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