keymap.c 16 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276
  1. /* Copyright 2020 Stephen J. Bush
  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. #include "muppetjones.h"
  18. #include "rgblight.h"
  19. #define LAYOUT_wrapper(...) LAYOUT(__VA_ARGS__)
  20. /* Layers from muppetjones.h
  21. _CLMK_DH = 0,
  22. _MOUSE,
  23. _LOWER,
  24. _RAISE,
  25. _NAV,
  26. _ADJUST,
  27. */
  28. /*
  29. * Custom Keys
  30. */
  31. #ifdef ENCODER_ENABLE
  32. bool encoder_update_standard(uint8_t index, bool clockwise);
  33. #endif
  34. /*
  35. * LAYERS
  36. */
  37. const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
  38. // clang-format off
  39. /*
  40. * Base Layer: Colemak DH
  41. *
  42. * ,-------------------------------------------. ,-------------------------------------------.
  43. * |CAPSWORD| Q | W | F | P | B | | J | L | U | Y | ; : | | \ |
  44. * |--------+------+------+------+------+------| |------+------+------+------+------+--------|
  45. * |ESC/HYPR| A | R | S | T | G | | M | N | E | I | O | ' " |
  46. * |--------+------+------+------+------+------+-------------. ,-------------+------+------+------+------+------+--------|
  47. * | LShift | Z | X | C | D | V |LShift|Leader| | Del | Tab | K | H | , < | . > | / ? | Sft/Ent|
  48. * `----------------------+------+------+------+------+------| |------+------+------+------+------+----------------------'
  49. * | MUTE | Del | Enter| Space| Enter| | Bspc | Space| Hyper| Tab | AltGr|
  50. * | | | Alt | Lower| Raise| | | Nav | Esc | Raise| |
  51. * `----------------------------------' `----------------------------------'
  52. */
  53. [_CLMK_DH] = LAYOUT_wrapper(
  54. CW_TOGG, __COLEMAK_MOD_DH_L1________________________, __COLEMAK_MOD_DH_R1_W_QUOT_________________, KC_BSLS,
  55. HY_ESC, __COLEMAK_MOD_DH_L2_W_GACS_________________, __COLEMAK_MOD_DH_R2_W_SCAG_________________, KC_QUOT,
  56. TD_LAYR, __COLEMAK_MOD_DH_L3________________________, KC_LSFT, QK_LEAD, KC_DEL, KC_TAB, __COLEMAK_MOD_DH_R3________________________, SC_SENT,
  57. KC_MUTE, KC_DEL, HY_ESC, LOW_BSP, RAI_ENT, KC_BSPC, NAV_SPC, HY_ESC, RAI_TAB, KC_RALT
  58. ),
  59. [_QWERTY] = LAYOUT_wrapper(
  60. _______, __QWERTY_L1________________________________, __QWERTY_R1________________________________, _______,
  61. _______, __QWERTY_L2________________________________, __QWERTY_R2________________________________, _______,
  62. _______, __QWERTY_L3________________________________, _______, _______, _______, _______, __QWERTY_R3________________________________, _______,
  63. __BLANK____________________________________, __BLANK____________________________________
  64. ),
  65. [_MOUSE] = LAYOUT_wrapper(
  66. _______, __BLANK____________________________________, __BLANK____________________________________, _______,
  67. _______, __BLANK____________________________________, __BLANK____________________________________, _______,
  68. _______, __BLANK____________________________________, _______, _______, _______, _______, __BLANK____________________________________, _______,
  69. KC_BTN1, _______, _______, _______, _______, _______, _______, _______, _______, KC_BTN2
  70. ),
  71. /*
  72. * Lower Layer: Numpad and some symbols
  73. *
  74. * ,-------------------------------------------. ,-------------------------------------------.
  75. * | | ~ | ` | ( | ) | xxxx | | / ? | 7 & | 8 * | 9 ( | - _ | |
  76. * |--------+------+------+------+------+------| |------+------+------+------+------+--------|
  77. * | | LGUI | LALT |LCTL [|LSFT ]| _ - | | * | 4 $ | 5 % | 6 ^ | , < | + |
  78. * |--------+------+------+------+------+------+-------------. ,-------------+------+------+------+------+------+--------|
  79. * | | xxxx | xxxx | { | } | LSFT | | | | | | 0 ) | 1 ! | 2 @ | 3 # | = + | |
  80. * `----------------------+------+------+------+------+------| |------+------+------+------+------+----------------------'
  81. * | | | | | | | | | | | |
  82. * | | | Lower| | | | | Nav | 0 | . | |
  83. * `----------------------------------' `----------------------------------'
  84. */
  85. [_LOWER] = LAYOUT_wrapper(
  86. _______, __SYMBOLS_L1_______________________________, __NUMPAD_R1________________________________, _______,
  87. _______, __SYMBOLS_L2_______________________________, __NUMPAD_R2________________________________, KC_COMM,
  88. _______, __SYMBOLS_L3_______________________________, _______, _______, _______, _______, __NUMPAD_R3________________________________, KC_DOT,
  89. __BLANK____________________________________, _______, KC_SPC, KC_0, KC_DOT, _______
  90. ),
  91. /*
  92. * Raise Layer: Symbols
  93. *
  94. * ,-------------------------------------------. ,-------------------------------------------.
  95. * | | ! | @ | { | } | | | | | & | € | | | \ |
  96. * |--------+------+------+------+------+------| |------+------+------+------+------+--------|
  97. * | | # | $ | ( | ) | ` | | _ | - | / | * | % | ' " |
  98. * |--------+------+------+------+------+------+-------------. ,-------------+------+------+------+------+------+--------|
  99. * | | % | ^ | [ | ] | ~ | | | | | | + | = | , | . | / ? | - _ |
  100. * `----------------------+------+------+------+------+------| |------+------+------+------+------+----------------------'
  101. * | | | | | | | | | | | |
  102. * | | | Lower| | | | | Nav | Raise| | |
  103. * `----------------------------------' `----------------------------------'
  104. */
  105. // [_RAISE] = LAYOUT(
  106. // _______, KC_EXLM, KC_AT, KC_LPRN, KC_RPRN, KC_PIPE, _______, KC_AMPR, _______, _______, _______, KC_BSLS,
  107. // _______, KC_HASH, KC_DLR, KC_LBRC, KC_RBRC, KC_GRV, KC_UNDS, KC_MINS, KC_SLSH, KC_ASTR, KC_PERC, KC_QUOT,
  108. // _______, KC_PERC, KC_CIRC, KC_LCBR, KC_RCBR, KC_TILD, _______, _______, _______, _______, KC_PLUS, KC_EQL, KC_COMM, KC_DOT, KC_SLSH, KC_MINS,
  109. // _______, _______, _______, _______, _______, _______, _______, _______, _______, _______
  110. // ),
  111. [_RAISE] = LAYOUT_wrapper(
  112. _______, XXXXXXX, XXXXXXX, KC_GRV, KC_GRV, KC_BSLS, __SYMBOLS_R1_______________________________, _______,
  113. _______, XXXXXXX, XXXXXXX, KC_UNDS, KC_MINS, KC_TILD, __SYMBOLS_R2_______________________________, _______,
  114. _______, XXXXXXX, XXXXXXX, KC_PLUS, KC_EQL, KC_GRV, _______, _______, _______, _______, __SYMBOLS_R3_______________________________, _______,
  115. __BLANK____________________________________, __BLANK____________________________________
  116. ),
  117. /*
  118. * Navigation Layer (w/ symbols on left)
  119. *
  120. * ,-------------------------------------------. ,-------------------------------------------.
  121. * | | | | | | | | PgUp | Home | Up | End | | ScrlLk |
  122. * |--------+------+------+------+------+------| |------+------+------+------+------+--------|
  123. * | | GUI | ALT | CTL | SFT | | | PgDn | Left | Down | Up | Right| CapsLk |
  124. * |--------+------+------+------+------+------+-------------. ,-------------+------+------+------+------+------+--------|
  125. * | | | | | | | | | | | | | | | | | |
  126. * `----------------------+------+------+------+------+------| |------+------+------+------+------+----------------------'
  127. * | | | | | | | | | | | |
  128. * | | | Lower| | | | | Nav | Raise| | |
  129. * `----------------------------------' `----------------------------------'
  130. */
  131. [_NAV] = LAYOUT_wrapper(
  132. _______, __VIM_L1___________________________________, __NAV_R1___________________________________, KC_SCRL,
  133. _______, __BLANK_W_GACS_____________________________, __NAV_R2___________________________________, KC_CAPS,
  134. _______, __BLANK____________________________________, _______, _______, _______, _______, __NAV_R3___________________________________, _______,
  135. __BLANK____________________________________, __BLANK____________________________________
  136. ),
  137. /*
  138. * Adjust Layer: Function keys, RGB
  139. *
  140. * ,-------------------------------------------. ,-------------------------------------------.
  141. * | Boot | Boot |Debug | | | | | | F1 | F2 | F3 | F4 | |
  142. * |--------+------+------+------+------+------| |------+------+------+------+------+--------|
  143. * | | TOG | SAI | HUI | VAI | MOD | | | F5 | F6 | F7 | F8 | |
  144. * |--------+------+------+------+------+------+-------------. ,-------------+------+------+------+------+------+--------|
  145. * | | | SAD | HUD | VAD | RMOD | | | | | | | F9 | F10 | F11 | F12 | |
  146. * `----------------------+------+------+------+------+------| |------+------+------+------+------+----------------------'
  147. * | | | | | | | | | | | |
  148. * | | | | | | | | | | | |
  149. * `----------------------------------' `----------------------------------'
  150. */
  151. [_ADJUST] = LAYOUT_wrapper(
  152. QK_BOOT, __ADJUST_L1________________________________, __MEDIA_R1_________________________________, _______,
  153. _______, __ADJUST_L2________________________________, __MEDIA_R2_________________________________, _______,
  154. _______, __ADJUST_L3________________________________, _______, _______, _______, _______, __MEDIA_R3_________________________________, _______,
  155. _______, _______, _______, _______, _______, _______, _______, _______, _______, _______
  156. )
  157. // /*
  158. // * Layer template
  159. // *
  160. // * ,-------------------------------------------. ,-------------------------------------------.
  161. // * | | | | | | | | | | | | | |
  162. // * |--------+------+------+------+------+------| |------+------+------+------+------+--------|
  163. // * | | | | | | | | | | | | | |
  164. // * |--------+------+------+------+------+------+-------------. ,-------------+------+------+------+------+------+--------|
  165. // * | | | | | | | | | | | | | | | | | |
  166. // * `----------------------+------+------+------+------+------| |------+------+------+------+------+----------------------'
  167. // * | | | | | | | | | | | |
  168. // * | | | | | | | | | | | |
  169. // * `----------------------------------' `----------------------------------'
  170. // */
  171. // [_LAYERINDEX] = LAYOUT(
  172. // _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
  173. // _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
  174. // _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
  175. // _______, _______, _______, _______, _______, _______, _______, _______, _______, _______
  176. // ),
  177. // clang-format on
  178. };
  179. /*
  180. *
  181. */
  182. void keyboard_post_init_user(void) {
  183. // Call the keymap level matrix init.
  184. #ifdef RGBLIGHT_ENABLE
  185. set_rgb_home();
  186. #endif
  187. }
  188. layer_state_t layer_state_set_user(layer_state_t state) {
  189. #ifdef RGBLIGHT_ENABLE
  190. set_rgb_by_layer(state);
  191. #endif
  192. return state;
  193. }
  194. bool process_record_keymap(uint16_t keycode, keyrecord_t* record) {
  195. // Regular user keycode case statement
  196. switch (keycode) {
  197. default:
  198. return true;
  199. }
  200. return true;
  201. }
  202. #ifdef ENCODER_ENABLE
  203. bool encoder_update_user(uint8_t index, bool clockwise) {
  204. # ifdef POINTING_DEVICE_ENABLE
  205. if (IS_LAYER_ON(_MOUSE))
  206. return encoder_update_mouse(index, clockwise);
  207. else
  208. # endif
  209. return encoder_update_standard(index, clockwise);
  210. }
  211. bool encoder_update_standard(uint8_t index, bool clockwise) {
  212. if (index == 0) {
  213. // Volume control
  214. if (clockwise) {
  215. tap_code(KC_VOLU);
  216. } else {
  217. tap_code(KC_VOLD);
  218. }
  219. } else if (index == 1) {
  220. // Page up/Page down
  221. # ifdef MOUSEKEY_ENABLE
  222. if (clockwise) {
  223. tap_code(KC_WH_D);
  224. } else {
  225. tap_code(KC_WH_U);
  226. }
  227. # else
  228. if (clockwise) {
  229. tap_code(KC_PGDN);
  230. } else {
  231. tap_code(KC_PGUP);
  232. }
  233. # endif
  234. }
  235. return true;
  236. }
  237. #endif
  238. #ifdef RGBLIGHT_ENABLE
  239. void set_layer_hsv(layer_state_t state, HSV* layer_color) {
  240. uint16_t h = layer_color->h, s = layer_color->s, v = layer_color->v;
  241. switch (get_highest_layer(state)) {
  242. case _RAISE:
  243. h += 3 * RGBLIGHT_HUE_STEP;
  244. break;
  245. case _LOWER:
  246. h += -3 * RGBLIGHT_HUE_STEP;
  247. break;
  248. case _NAV:
  249. h += 2 * RGBLIGHT_HUE_STEP;
  250. break;
  251. case _MOUSE:
  252. h += -8 * RGBLIGHT_HUE_STEP;
  253. break;
  254. default:
  255. break;
  256. }
  257. layer_color->h = h % 255;
  258. layer_color->s = s;
  259. layer_color->v = v % 255;
  260. return;
  261. }
  262. #endif