keymap.c 9.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238
  1. /* Copyright 2015-2017 Jack Humbert
  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 <http://www.gnu.org/licenses/>.
  15. */
  16. #include QMK_KEYBOARD_H
  17. extern keymap_config_t keymap_config;
  18. bool isGame = false;
  19. bool qwertGame = false;
  20. enum planck_layers {
  21. _COLEMAK,
  22. _GAME,
  23. _QWERTGAME,
  24. _LOWER,
  25. _RAISE,
  26. _ADJUST
  27. };
  28. enum planck_keycodes {
  29. COLEMAK = SAFE_RANGE,
  30. GCTOGG,
  31. QGCTOGG,
  32. LOWER,
  33. RAISE,
  34. PAREN
  35. };
  36. enum {
  37. TD_SPC_ENT = 0,
  38. TD_ESC_CAPS
  39. };
  40. qk_tap_dance_action_t tap_dance_actions[] = {
  41. [TD_SPC_ENT] = ACTION_TAP_DANCE_DOUBLE(KC_SPC, KC_ENT),
  42. [TD_ESC_CAPS] = ACTION_TAP_DANCE_DOUBLE(KC_ESC, KC_CAPS)
  43. };
  44. const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
  45. /* Colemak
  46. * ,-----------------------------------------------------------------------------------.
  47. * | Tab | Q | W | F | P | G | J | L | U | Y | ; | = |
  48. * |------+------+------+------+------+-------------+------+------+------+------+------|
  49. * | Esc | A | R | S | T | D | H | N | E | I | O | " |
  50. * |------+------+------+------+------+------|------+------+------+------+------+------|
  51. * | Shift| Z | X | C | V | B | K | M | , | . | / | - |
  52. * |------+------+------+------+------+------+------+------+------+------+------+------|
  53. * | Ctrl | GUI | Alt |PAREN |Lower | shift|space |Raise | Left | Down | Up | Right|
  54. * `-----------------------------------------------------------------------------------'
  55. */
  56. [_COLEMAK] = LAYOUT_planck_grid(
  57. KC_TAB, KC_Q, KC_W, KC_F, KC_P, KC_G, KC_J, KC_L, KC_U, KC_Y, KC_SCLN, KC_EQL,
  58. KC_ESC, KC_A, KC_R, KC_S, KC_T, KC_D, KC_H, KC_N, KC_E, KC_I, KC_O, KC_QUOT,
  59. KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_K, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_MINS,
  60. KC_LCTL, KC_LGUI, KC_LALT, PAREN, LOWER, RSFT_T(KC_BSPC), TD(TD_SPC_ENT), RAISE, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT
  61. ),
  62. /* Lower
  63. * ,-----------------------------------------------------------------------------------.
  64. * | | | | [ | ] | | ( | ) | { | } | | + |
  65. * |------+------+------+------+------+-------------+------+------+------+------+------|
  66. * | Del | F1 | F2 | F3 | F4 | F5 | F6 | left | down | up | right| | |
  67. * |------+------+------+------+------+------|------+------+------+------+------+------|
  68. * | | F7 | F8 | F9 | F10 | F11 | F12 | | | | | _ |
  69. * |------+------+------+------+------+------+------+------+------+------+------+------|
  70. * | | | | | | | | Next | Vol- | Vol+ | Play |
  71. * `-----------------------------------------------------------------------------------'
  72. */
  73. [_LOWER] = LAYOUT_planck_grid(
  74. _______, _______, _______, KC_LBRC, KC_RBRC, _______, KC_LPRN, KC_RPRN, KC_LCBR, KC_RCBR, _______, S(KC_EQL),
  75. KC_DEL, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT, KC_PIPE,
  76. _______, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, _______, KC_MPRV, KC_MNXT, _______, KC_UNDS,
  77. _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_VOLD, KC_VOLU, KC_MPLY
  78. ),
  79. /* Raise
  80. * ,-----------------------------------------------------------------------------------.
  81. * | ` | ! | @ | # | $ | % | ^ | & | * | ( | ) | DEL |
  82. * |------+------+------+------+------+-------------+------+------+------+------+------|
  83. * | ~ | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | \ |
  84. * |------+------+------+------+------+------|------+------+------+------+------+------|
  85. * | | | | | | | | | | | | |
  86. * |------+------+------+------+------+------+------+------+------+------+------+------|
  87. * | | | | | | | | | | | GCTG |
  88. * `-----------------------------------------------------------------------------------'
  89. */
  90. [_RAISE] = LAYOUT_planck_grid(
  91. KC_GRV, KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN, KC_DEL,
  92. KC_TILD, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_BSLS,
  93. _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
  94. _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, GCTOGG
  95. ),
  96. /* Adjust (Lower + Raise)
  97. * ,-----------------------------------------------------------------------------------.
  98. * |EEPRst| Reset| | | | | | | | | | Del |
  99. * |------+------+------+------+------+-------------+------+------+------+------+------|
  100. * | | | |Aud on|Audoff|AGnorm|AGswap| | | | | |
  101. * |------+------+------+------+------+------|------+------+------+------+------+------|
  102. * | |Voice-|Voice+|Mus on|Musoff| | | | | | | |
  103. * |------+------+------+------+------+------+------+------+------+------+------+------|
  104. * | | | | | | | | | | | |
  105. * `-----------------------------------------------------------------------------------'
  106. */
  107. [_ADJUST] = LAYOUT_planck_grid(
  108. EEP_RST, RESET, DEBUG, RGB_TOG, RGB_MOD, RGB_HUI, RGB_HUD, RGB_SAI, RGB_SAD, RGB_VAI, RGB_VAD, KC_DEL ,
  109. _______, _______, MU_MOD, AU_ON, AU_OFF, AG_NORM, AG_SWAP, _______, _______, _______, _______, _______,
  110. _______, MUV_DE, MUV_IN, MU_ON, MU_OFF, _______, _______, TERM_ON, TERM_OFF, _______, _______, _______,
  111. _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______
  112. ),
  113. [_GAME] = LAYOUT_planck_grid(
  114. KC_TAB, KC_Q, KC_W, KC_F, KC_P, KC_G, KC_J, KC_L, KC_U, KC_Y, KC_SCLN, KC_EQL,
  115. KC_ESC, KC_A, KC_R, KC_S, KC_T, KC_D, KC_H, KC_N, KC_E, KC_I, KC_O, KC_QUOT,
  116. KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_K, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_MINS,
  117. KC_LCTL, QGCTOGG, KC_LALT, LOWER, KC_SPC, RSFT_T(KC_BSPC), TD(TD_SPC_ENT), RAISE, KC_LEFT, KC_DOWN, KC_UP, KC_RIGHT
  118. ),
  119. [_QWERTGAME] = LAYOUT_planck_grid(
  120. KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_EQL,
  121. KC_ESC, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT,
  122. KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_MINS,
  123. KC_LCTL, QGCTOGG, KC_LALT, LOWER, KC_SPC, RSFT_T(KC_BSPC), TD(TD_SPC_ENT), RAISE, KC_LEFT, KC_DOWN, KC_UP, KC_RIGHT
  124. )
  125. };
  126. bool process_record_user(uint16_t keycode, keyrecord_t *record) {
  127. switch (keycode) {
  128. case COLEMAK:
  129. if (record->event.pressed) {
  130. set_single_persistent_default_layer(_COLEMAK);
  131. #ifdef BACKLIGHT_ENABLE
  132. backlight_set(0);
  133. #endif
  134. }
  135. return false;
  136. break;
  137. case GCTOGG:
  138. if (record->event.pressed) {
  139. if (!isGame) {
  140. set_single_persistent_default_layer(_GAME);
  141. isGame = true;
  142. }
  143. else {
  144. set_single_persistent_default_layer(_COLEMAK);
  145. isGame = false;
  146. qwertGame = false;
  147. }
  148. }
  149. return false;
  150. break;
  151. case QGCTOGG:
  152. if (record->event.pressed) {
  153. if (!qwertGame) {
  154. set_single_persistent_default_layer(_QWERTGAME);
  155. qwertGame = true;
  156. } else {
  157. set_single_persistent_default_layer(_GAME);
  158. qwertGame = false;
  159. }
  160. }
  161. return false;
  162. break;
  163. case LOWER:
  164. if (record->event.pressed) {
  165. layer_on(_LOWER);
  166. update_tri_layer(_LOWER, _RAISE, _ADJUST);
  167. } else {
  168. layer_off(_LOWER);
  169. update_tri_layer(_LOWER, _RAISE, _ADJUST);
  170. }
  171. return false;
  172. break;
  173. case RAISE:
  174. if (record->event.pressed) {
  175. layer_on(_RAISE);
  176. update_tri_layer(_LOWER, _RAISE, _ADJUST);
  177. } else {
  178. layer_off(_RAISE);
  179. update_tri_layer(_LOWER, _RAISE, _ADJUST);
  180. }
  181. return false;
  182. break;
  183. case PAREN:
  184. if (record->event.pressed) {
  185. SEND_STRING("()");
  186. }
  187. return false; break;
  188. }
  189. return true;
  190. }
  191. layer_state_t default_layer_state_set_user(layer_state_t state) {
  192. switch (get_highest_layer(state)) {
  193. case _GAME:
  194. rgblight_sethsv_noeeprom(0, UINT8_MAX, RGBLIGHT_LIMIT_VAL);
  195. rgblight_mode_noeeprom(RGBLIGHT_MODE_RAINBOW_SWIRL+5);
  196. break;
  197. case _QWERTGAME:
  198. rgblight_mode_noeeprom(RGBLIGHT_MODE_RAINBOW_MOOD+2);
  199. break;
  200. case _COLEMAK:
  201. rgblight_sethsv_noeeprom(0, 0, 0);
  202. rgblight_mode_noeeprom(RGBLIGHT_MODE_STATIC_LIGHT);
  203. break;
  204. default:
  205. break;
  206. }
  207. return state;
  208. }
  209. void matrix_init_user(void) {
  210. set_single_persistent_default_layer(_COLEMAK);
  211. isGame = false;
  212. qwertGame = false;
  213. #ifdef BACKLIGHT_ENABLE
  214. backlight_level(0);
  215. #endif
  216. }
  217. void keyboard_post_init_user(void) {
  218. rgblight_sethsv_noeeprom(0, 0, 0);
  219. rgblight_mode_noeeprom(RGBLIGHT_MODE_STATIC_LIGHT);
  220. }