keymap.c 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280
  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. #include "muse.h"
  18. #include "keymap_german.h"
  19. enum combos {
  20. AE,
  21. OE,
  22. UE,
  23. SZ
  24. };
  25. const uint16_t PROGMEM ae_combo[] = {KC_A, KC_E, COMBO_END};
  26. const uint16_t PROGMEM oe_combo[] = {KC_O, KC_E, COMBO_END};
  27. const uint16_t PROGMEM ue_combo[] = {KC_U, KC_E, COMBO_END};
  28. const uint16_t PROGMEM sz_combo[] = {KC_S, DE_Z, COMBO_END};
  29. combo_t key_combos[COMBO_COUNT] = {
  30. [AE] = COMBO(ae_combo, DE_AE),
  31. [OE] = COMBO(oe_combo, DE_OE),
  32. [UE] = COMBO(ue_combo, DE_UE),
  33. [SZ] = COMBO(sz_combo, DE_SS)
  34. };
  35. enum planck_layers {
  36. _QWERTZ,
  37. _NUMPD,
  38. _LOWER,
  39. _RAISE,
  40. _ADJUST
  41. };
  42. enum planck_keycodes {
  43. QWERTZ = SAFE_RANGE,
  44. NUMPD,
  45. SCROLL
  46. };
  47. bool scroll = false;
  48. #ifdef AUDIO_ENABLE
  49. float ping_song[][2] = SONG(PING_SOUND);
  50. #endif
  51. #define LOWER MO(_LOWER)
  52. #define RAISE MO(_RAISE)
  53. const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
  54. /* QWERTZ
  55. * ,-----------------------------------------------------------------------------------.
  56. * | RtEnc| Q | W | E | R | T | Z | U | I | O | P | Bksp |
  57. * |------+------+------+------+------+------+------+------+------+------+------+------|
  58. * | Esc | A | S | D | F | G | H | J | K | L | + | - |
  59. * |------+------+------+------+------+------+------+------+------+------+------+------|
  60. * | SfTab| Y | X | C | V | B | N | M | , | . | Up |SfEnt |
  61. * |------+------+------+------+------+------+------+------+------+------+------+------|
  62. * | Ctrl | GUI | NumPd| Alt | Num | Space | Sym | Del | Left | Down |Right |
  63. * `-----------------------------------------------------------------------------------'
  64. */
  65. [_QWERTZ] = LAYOUT_planck_grid(
  66. SCROLL, KC_Q, KC_W, KC_E, KC_R, KC_T, DE_Z, KC_U, KC_I, KC_O, KC_P, KC_BSPC,
  67. KC_ESC, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, DE_PLUS, DE_MINS,
  68. LSFT_T(KC_TAB),DE_Y, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_UP, SC_SENT,
  69. KC_LCTL, KC_LGUI, NUMPD, KC_LALT, LOWER, KC_SPC, KC_SPC, RAISE, KC_DEL, KC_LEFT, KC_DOWN, KC_RGHT
  70. ),
  71. /* Numpad
  72. * ,-----------------------------------------------------------------------------------.
  73. * | | 7 | 8 | 9 | / | | | | | | | |
  74. * |------+------+------+------+------+------+------+------+------+------+------+------|
  75. * | NLCK | 4 | 5 | 6 | - | | | | | | | |
  76. * |------+------+------+------+------+------+------+------+------+------+------+------|
  77. * | | 1 | 2 | 3 | + | | | | | | | |
  78. * |------+------+------+------+------+------+------+------+------+------+------+------|
  79. * | | . | 0 | , |NumOFF| Enter |Raise | | | | |
  80. * `-----------------------------------------------------------------------------------'
  81. */
  82. [_NUMPD] = LAYOUT_planck_grid(
  83. SFT_T(KC_PASTE),KC_P7, KC_P8, KC_P9, DE_SLSH, _______, _______, _______, _______, _______, _______, _______,
  84. KC_NUM, KC_P4, KC_P5, KC_P6, DE_MINS, _______, _______, _______, _______, _______, _______, _______,
  85. _______, KC_P1, KC_P2, KC_P3, DE_PLUS, _______, _______, _______, _______, _______, _______, _______,
  86. CTL_T(KC_COPY),KC_DOT, KC_P0, KC_COMM, NUMPD, KC_ENT, KC_ENT, _______, _______, _______, _______, _______
  87. ),
  88. /* Lower
  89. * ,-----------------------------------------------------------------------------------.
  90. * | | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | |
  91. * |------+------+------+------+------+------+------+------+------+------+------+------|
  92. * | ^ | F1 | F2 | F3 | F4 | F5 | F6 | F7 | F8 | F9 | | |
  93. * |------+------+------+------+------+------+------+------+------+------+------+------|
  94. * | | F10 | F11 | F12 | F13 | F14 | F15 | | | |Pg Up | |
  95. * |------+------+------+------+------+------+------+------+------+------+------+------|
  96. * | | | | | | | | | Home |Pg Dn | End |
  97. * `-----------------------------------------------------------------------------------'
  98. */
  99. [_LOWER] = LAYOUT_planck_grid(
  100. _______, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, _______,
  101. KC_GRV, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, _______, _______,
  102. _______, KC_F10, KC_F11, KC_F12, KC_F13, KC_F14, KC_F15, _______, _______, _______, KC_PGUP, _______,
  103. _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_HOME, KC_PGDN, KC_END
  104. ),
  105. /* Raise
  106. * ,-----------------------------------------------------------------------------------.
  107. * | | ! | " | § | $ | % | & | / | ( | ) | = | |
  108. * |------+------+------+------+------+------+------+------+------+------+------+------|
  109. * | ° | | | | | | | | ? | [ | ] | ' | | |
  110. * |------+------+------+------+------+------+------+------+------+------+------+------|
  111. * | | | | | | \ | < | > | { | } | Vol+ | |
  112. * |------+------+------+------+------+------+------+------+------+------+------+------|
  113. * | | | | | | | | | Brt- | Vol- | Brt+ |
  114. * `-----------------------------------------------------------------------------------'
  115. */
  116. [_RAISE] = LAYOUT_planck_grid(
  117. _______, KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_CIRC, DE_SLSH, DE_LPRN, DE_RPRN, DE_EQL, KC_BSPC,
  118. KC_TILD, _______, _______, _______, _______, _______, DE_PIPE, DE_QUES, DE_LBRC, DE_RBRC, DE_QUOT, DE_HASH,
  119. _______, _______, _______, _______, _______, DE_BSLS, DE_LABK, DE_RABK, DE_LCBR, DE_RCBR, KC_VOLU, _______,
  120. _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_BRID, KC_VOLD, KC_BRIU
  121. ),
  122. /* Adjust (Lower + Raise)
  123. * v------------------------RGB CONTROL--------------------v
  124. * ,-----------------------------------------------------------------------------------.
  125. * | | Reset|Debug | RGB |RGBMOD| HUE+ | HUE- | SAT+ | SAT- |BRGTH+|BRGTH-| Del |
  126. * |------+------+------+------+------+------+------+------+------+------+------+------|
  127. * |PowOff| |MUSmod|Aud on|Audoff|AGnorm|AGswap|Qwerty|Colemk|Dvorak|Plover| |
  128. * |------+------+------+------+------+------+------+------+------+------+------+------|
  129. * | |Voice-|Voice+|Mus on|Musoff|MIDIon|MIDIof| | | | | |
  130. * |------+------+------+------+------+------+------+------+------+------+------+------|
  131. * | | | | | | | | | | | |
  132. * `-----------------------------------------------------------------------------------'
  133. */
  134. [_ADJUST] = LAYOUT_planck_grid(
  135. _______, QK_BOOT, DB_TOGG, RGB_TOG, RGB_MOD, RGB_HUI, RGB_HUD, RGB_SAI, RGB_SAD, RGB_VAI, RGB_VAD, KC_DEL ,
  136. KC_PWR, _______, MU_NEXT, AU_ON, AU_OFF, AG_NORM, AG_SWAP, _______, _______, _______, _______, _______,
  137. _______, AU_PREV, AU_NEXT, MU_ON, MU_OFF, MI_ON, MI_OFF, _______, _______, _______, _______, _______,
  138. _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______
  139. )
  140. };
  141. bool process_record_user(uint16_t keycode, keyrecord_t *record) {
  142. switch (keycode) {
  143. /*case QWERTY:
  144. if (record->event.pressed) {
  145. print("mode just switched to qwerty and this is a huge string\n");
  146. set_single_persistent_default_layer(_QWERTY);
  147. }
  148. return false;
  149. break;
  150. case COLEMAK:
  151. if (record->event.pressed) {
  152. set_single_persistent_default_layer(_COLEMAK);
  153. }
  154. return false;
  155. break;
  156. case DVORAK:
  157. if (record->event.pressed) {
  158. set_single_persistent_default_layer(_DVORAK);
  159. }
  160. return false;
  161. break;*/
  162. case NUMPD:
  163. if (record->event.pressed) {
  164. #ifdef AUDIO_ENABLE
  165. PLAY_SONG(ping_song);
  166. #endif
  167. if (layer_state_is(_NUMPD)) {
  168. layer_off(_NUMPD);
  169. } else {
  170. layer_on(_NUMPD);
  171. }
  172. }
  173. return false;
  174. break;
  175. case SCROLL:
  176. if (record->event.pressed) {
  177. scroll = true;
  178. } else {
  179. scroll = false;
  180. }
  181. default:
  182. return true;
  183. }
  184. }
  185. void encoder_update(bool clockwise) {
  186. if (layer_state_is(_NUMPD)){
  187. if (clockwise) {
  188. tap_code(KC_RIGHT);
  189. } else {
  190. tap_code(KC_LEFT);
  191. }
  192. } else if (scroll) { //scroll fast mode
  193. if (clockwise) {
  194. tap_code(KC_PGDN);
  195. } else {
  196. tap_code(KC_PGUP);
  197. }
  198. } else {
  199. if (clockwise) {
  200. #ifdef MOUSEKEY_ENABLE
  201. tap_code(KC_MS_WH_DOWN);
  202. #else
  203. tap_code(KC_PGDN);
  204. #endif
  205. } else {
  206. #ifdef MOUSEKEY_ENABLE
  207. tap_code(KC_MS_WH_UP);
  208. #else
  209. tap_code(KC_PGUP);
  210. #endif
  211. }
  212. }
  213. }
  214. void matrix_scan_user(void) {
  215. }
  216. bool music_mask_user(uint16_t keycode) {
  217. switch (keycode) {
  218. case RAISE:
  219. case LOWER:
  220. return false;
  221. default:
  222. return true;
  223. }
  224. }
  225. const rgblight_segment_t PROGMEM numbers_layer[] = RGBLIGHT_LAYER_SEGMENTS(
  226. {3, 4, HSV_GREEN}
  227. );
  228. const rgblight_segment_t PROGMEM symbols_layer[] = RGBLIGHT_LAYER_SEGMENTS(
  229. {2, 5, HSV_PURPLE}
  230. );
  231. const rgblight_segment_t PROGMEM numpad_layer[] = RGBLIGHT_LAYER_SEGMENTS(
  232. {5, 4, HSV_RED} // Light 4 LEDs, starting with LED 6
  233. );
  234. const rgblight_segment_t PROGMEM config_layer[] = RGBLIGHT_LAYER_SEGMENTS(
  235. {2, 6, HSV_YELLOW}
  236. );
  237. // Now define the array of layers. Later layers take precedence
  238. const rgblight_segment_t* const PROGMEM my_rgb_layers[] = RGBLIGHT_LAYERS_LIST(
  239. numbers_layer,
  240. symbols_layer,
  241. numpad_layer, // Overrides other layers
  242. config_layer
  243. );
  244. void keyboard_post_init_user(void) {
  245. // Enable the LED layers
  246. rgblight_layers = my_rgb_layers;
  247. }
  248. layer_state_t layer_state_set_user(layer_state_t state) {
  249. if (!(layer_state_is(_NUMPD))) {
  250. state = update_tri_layer_state(state, _LOWER, _RAISE, _ADJUST);
  251. }
  252. rgblight_set_layer_state(2, layer_state_cmp(state, 1));
  253. rgblight_set_layer_state(0, layer_state_cmp(state, 2));
  254. rgblight_set_layer_state(1, layer_state_cmp(state, 3));
  255. rgblight_set_layer_state(3, layer_state_cmp(state, 4));
  256. return state;
  257. }