You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

434 lines
35 KiB

  1. #include QMK_KEYBOARD_H
  2. #include "version.h"
  3. #include "keymap_german.h"
  4. #include "keymap_nordic.h"
  5. #include "keymap_french.h"
  6. #include "keymap_spanish.h"
  7. #include "keymap_hungarian.h"
  8. #include "keymap_swedish.h"
  9. #include "keymap_br_abnt2.h"
  10. #include "keymap_canadian_multilingual.h"
  11. #include "keymap_german_ch.h"
  12. #include "keymap_jp.h"
  13. #include "keymap_bepo.h"
  14. #define KC_MAC_UNDO LGUI(KC_Z)
  15. #define KC_MAC_CUT LGUI(KC_X)
  16. #define KC_MAC_COPY LGUI(KC_C)
  17. #define KC_MAC_PASTE LGUI(KC_V)
  18. #define KC_PC_UNDO LCTL(KC_Z)
  19. #define KC_PC_CUT LCTL(KC_X)
  20. #define KC_PC_COPY LCTL(KC_C)
  21. #define KC_PC_PASTE LCTL(KC_V)
  22. #define ES_LABK_MAC KC_GRAVE
  23. #define ES_RABK_MAC LSFT(KC_GRAVE)
  24. #define ES_BSLS_MAC ALGR(KC_6)
  25. #define NO_PIPE_ALT KC_GRAVE
  26. #define NO_BSLS_ALT KC_EQUAL
  27. enum custom_keycodes {
  28. RGB_SLD = EZ_SAFE_RANGE,
  29. MS_WH_UP,
  30. MS_WH_DOWN,
  31. MS_WH_RIGHT,
  32. MS_WH_LEFT,
  33. };
  34. // tapdance keycodes
  35. enum td_keycodes {
  36. CTRL_TO12,
  37. SHIFT_TO13,
  38. ALT_TO11,
  39. };
  40. // define a type containing as many tapdance states as you need
  41. typedef enum {
  42. SINGLE_TAP,
  43. SINGLE_HOLD,
  44. } td_state_t;
  45. // create a global instance of the tapdance state type
  46. static td_state_t td_state;
  47. // declare your tapdance functions:
  48. // function to determine the current tapdance state
  49. int cur_dance (qk_tap_dance_state_t *state);
  50. // `finished` and `reset` functions for each tapdance keycode
  51. void ctrlto12_finished (qk_tap_dance_state_t *state, void *user_data);
  52. void ctrlto12_reset (qk_tap_dance_state_t *state, void *user_data);
  53. void altto11_finished (qk_tap_dance_state_t *state, void *user_data);
  54. void altto11_reset (qk_tap_dance_state_t *state, void *user_data);
  55. void shiftto13_finished (qk_tap_dance_state_t *state, void *user_data);
  56. void shiftto13_reset (qk_tap_dance_state_t *state, void *user_data);
  57. const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
  58. [0] = LAYOUT_ergodox_pretty(
  59. KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO,
  60. KC_INSERT, KC_Q, LGUI_T(KC_W), MT(MOD_HYPR, KC_E),LT(5,KC_R), KC_T, KC_NO, KC_NO, KC_Y, LT(6,KC_U), MT(MOD_HYPR, KC_I),RGUI_T(KC_O), KC_P, KC_PSCREEN,
  61. KC_ESCAPE, LSFT_T(KC_A), LCTL_T(KC_S), LALT_T(KC_D), LT(1,KC_F), KC_G, KC_H, LT(2,KC_J), RALT_T(KC_K), RCTL_T(KC_L), RSFT_T(KC_SCOLON),KC_CAPSLOCK,
  62. KC_HOME, LT(9,KC_Z), MT(MOD_LGUI | MOD_LCTL,KC_X), LT(7,KC_C), LT(3,KC_V), KC_B, KC_NO, KC_NO, KC_N, LT(4,KC_M), LT(8,KC_COMMA), MT(MOD_RGUI | MOD_RCTL, KC_DOT), KC_QUOTE, KC_END,
  63. KC_NO, KC_NO, KC_NO, KC_NO, KC_DELETE, KC_TAB, KC_NO, KC_NO, KC_NO, KC_NO,
  64. KC_NO, KC_NO, KC_NO, KC_NO,
  65. KC_NO, KC_NO,
  66. TO(10), KC_BSPACE, KC_NO, KC_NO, KC_ENTER, KC_SPACE
  67. ),
  68. [1] = LAYOUT_ergodox_pretty(
  69. KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT,
  70. KC_TRANSPARENT, KC_NO, KC_LGUI, KC_HYPR, KC_NO, KC_NO, KC_TRANSPARENT, KC_TRANSPARENT, KC_NO, KC_7, KC_8, KC_9, KC_NO, KC_TRANSPARENT,
  71. KC_TRANSPARENT, KC_LSHIFT, KC_LCTRL, KC_LALT, KC_TRANSPARENT, KC_NO, KC_NO, KC_4, KC_5, KC_6, KC_0, KC_TRANSPARENT,
  72. KC_TRANSPARENT, KC_NO, MT(MOD_LGUI | MOD_LCTL,KC_NO), KC_NO, KC_NO, KC_NO, KC_TRANSPARENT, KC_TRANSPARENT, KC_NO, KC_1, KC_2, KC_3, KC_NO, KC_TRANSPARENT,
  73. KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT,
  74. KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT,
  75. KC_TRANSPARENT, KC_TRANSPARENT,
  76. KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT
  77. ),
  78. [2] = LAYOUT_ergodox_pretty(
  79. KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT,
  80. KC_TRANSPARENT, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_TRANSPARENT, KC_TRANSPARENT, KC_NO, KC_NO, KC_HYPR, KC_RGUI, KC_NO, KC_TRANSPARENT,
  81. KC_TRANSPARENT, KC_LPRN, KC_RPRN, KC_ASTR, KC_SLASH, KC_NO, KC_NO, KC_TRANSPARENT, KC_RALT, KC_RCTRL, KC_RSHIFT, KC_TRANSPARENT,
  82. KC_TRANSPARENT, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_TRANSPARENT, KC_TRANSPARENT, KC_NO, KC_NO, KC_NO, MT(MOD_RGUI | MOD_RCTL, KC_NO), KC_NO, KC_TRANSPARENT,
  83. KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT,
  84. KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT,
  85. KC_TRANSPARENT, KC_TRANSPARENT,
  86. KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT
  87. ),
  88. [3] = LAYOUT_ergodox_pretty(
  89. KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT,
  90. KC_TRANSPARENT, KC_NO, KC_LGUI, KC_HYPR, KC_NO, KC_NO, KC_TRANSPARENT, KC_TRANSPARENT, KC_NO, KC_F9, KC_F10, KC_F11, KC_F12, KC_TRANSPARENT,
  91. KC_TRANSPARENT, KC_LSHIFT, KC_LCTRL, KC_LALT, KC_NO, KC_NO, KC_NO, KC_F5, KC_F6, KC_F7, KC_F8, KC_TRANSPARENT,
  92. KC_TRANSPARENT, KC_NO, MT(MOD_LGUI | MOD_LCTL,KC_NO), KC_NO, KC_TRANSPARENT, KC_NO, KC_TRANSPARENT, KC_TRANSPARENT, KC_NO, KC_F1, KC_F2, KC_F3, KC_F4, KC_TRANSPARENT,
  93. KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT,
  94. KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT,
  95. KC_TRANSPARENT, KC_TRANSPARENT,
  96. KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT
  97. ),
  98. [4] = LAYOUT_ergodox_pretty(
  99. KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT,
  100. KC_TRANSPARENT, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_TRANSPARENT, KC_TRANSPARENT, KC_NO, KC_NO, KC_HYPR, KC_RGUI, KC_NO, KC_TRANSPARENT,
  101. KC_TRANSPARENT, KC_LBRACKET, KC_RBRACKET, KC_QUES, KC_EXLM, KC_NO, KC_NO, KC_NO, KC_RALT, KC_RCTRL, KC_RSHIFT, KC_TRANSPARENT,
  102. KC_TRANSPARENT, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_TRANSPARENT, KC_TRANSPARENT, KC_NO, KC_TRANSPARENT, KC_NO, MT(MOD_RGUI | MOD_RCTL, KC_NO), KC_NO, KC_TRANSPARENT,
  103. KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT,
  104. KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT,
  105. KC_TRANSPARENT, KC_TRANSPARENT,
  106. KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT
  107. ),
  108. [5] = LAYOUT_ergodox_pretty(
  109. KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT,
  110. KC_TRANSPARENT, KC_NO, KC_LGUI, KC_HYPR, KC_TRANSPARENT, KC_NO, KC_TRANSPARENT, KC_TRANSPARENT, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_TRANSPARENT,
  111. KC_TRANSPARENT, KC_LSHIFT, KC_LCTRL, KC_LALT, KC_NO, KC_NO, KC_NO, KC_HASH, KC_BSLASH, KC_GRAVE, KC_TILD, KC_TRANSPARENT,
  112. KC_TRANSPARENT, KC_NO, MT(MOD_LGUI | MOD_LCTL,KC_NO), KC_NO, KC_NO, KC_NO, KC_TRANSPARENT, KC_TRANSPARENT, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_TRANSPARENT,
  113. KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT,
  114. KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT,
  115. KC_TRANSPARENT, KC_TRANSPARENT,
  116. KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT
  117. ),
  118. [6] = LAYOUT_ergodox_pretty(
  119. KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT,
  120. KC_TRANSPARENT, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_TRANSPARENT, KC_TRANSPARENT, KC_NO, KC_TRANSPARENT, KC_HYPR, KC_RGUI, KC_NO, KC_TRANSPARENT,
  121. KC_TRANSPARENT, KC_UNDS, KC_EQUAL, KC_MINUS, KC_PLUS, KC_NO, KC_NO, KC_NO, KC_RALT, KC_RCTRL, KC_RSHIFT, KC_TRANSPARENT,
  122. KC_TRANSPARENT, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_TRANSPARENT, KC_TRANSPARENT, KC_NO, KC_NO, KC_NO, MT(MOD_RGUI | MOD_RCTL, KC_NO), KC_NO, KC_TRANSPARENT,
  123. KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT,
  124. KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT,
  125. KC_TRANSPARENT, KC_TRANSPARENT,
  126. KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT
  127. ),
  128. [7] = LAYOUT_ergodox_pretty(
  129. KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT,
  130. KC_TRANSPARENT, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_TRANSPARENT, KC_TRANSPARENT, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_TRANSPARENT,
  131. KC_TRANSPARENT, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_AT, KC_DLR, KC_PERC, KC_CIRC, KC_TRANSPARENT,
  132. KC_TRANSPARENT, KC_NO, KC_NO, KC_TRANSPARENT, KC_NO, KC_NO, KC_TRANSPARENT, KC_TRANSPARENT, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_TRANSPARENT,
  133. KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT,
  134. KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT,
  135. KC_TRANSPARENT, KC_TRANSPARENT,
  136. KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT
  137. ),
  138. [8] = LAYOUT_ergodox_pretty(
  139. KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT,
  140. KC_TRANSPARENT, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_TRANSPARENT, KC_TRANSPARENT, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_TRANSPARENT,
  141. KC_TRANSPARENT, KC_LCBR, KC_RCBR, KC_AMPR, KC_PIPE, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_TRANSPARENT,
  142. KC_TRANSPARENT, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_TRANSPARENT, KC_TRANSPARENT, KC_NO, KC_NO, KC_TRANSPARENT, KC_NO, KC_NO, KC_TRANSPARENT,
  143. KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT,
  144. KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT,
  145. KC_TRANSPARENT, KC_TRANSPARENT,
  146. KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT
  147. ),
  148. [9] = LAYOUT_ergodox_pretty(
  149. KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT,
  150. KC_TRANSPARENT, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_TRANSPARENT, KC_TRANSPARENT, KC_NO, KC_NO, KC_AUDIO_VOL_UP,KC_NO, KC_NO, KC_TRANSPARENT,
  151. KC_TRANSPARENT, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_MEDIA_PREV_TRACK,KC_AUDIO_VOL_DOWN,KC_MEDIA_NEXT_TRACK,KC_MEDIA_PLAY_PAUSE,KC_TRANSPARENT,
  152. KC_TRANSPARENT, KC_TRANSPARENT, KC_NO, KC_NO, KC_NO, KC_NO, KC_TRANSPARENT, KC_TRANSPARENT, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_TRANSPARENT,
  153. KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT,
  154. KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT,
  155. KC_TRANSPARENT, KC_TRANSPARENT,
  156. KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT
  157. ),
  158. [10] = LAYOUT_ergodox_pretty(
  159. KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT,
  160. KC_TRANSPARENT, KC_NO, KC_LGUI, KC_MS_BTN2, KC_ACL2, KC_NO, KC_TRANSPARENT, KC_TRANSPARENT, KC_NO, KC_NO, KC_MS_UP, KC_NO, KC_NO, KC_TRANSPARENT,
  161. KC_TRANSPARENT, TD(SHIFT_TO13), TD(CTRL_TO12), TD(ALT_TO11), KC_MS_BTN1, KC_NO, KC_NO, KC_MS_LEFT, KC_MS_DOWN, KC_MS_RIGHT, KC_NO, KC_TRANSPARENT,
  162. KC_TRANSPARENT, KC_NO, MT(MOD_LGUI | MOD_LCTL,KC_NO), KC_ACL0, KC_NO, KC_NO, KC_TRANSPARENT, KC_TRANSPARENT, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_TRANSPARENT,
  163. KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT,
  164. KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT,
  165. KC_TRANSPARENT, KC_TRANSPARENT,
  166. KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, TO(0)
  167. ),
  168. [11] = LAYOUT_ergodox_pretty(
  169. KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT,
  170. KC_TRANSPARENT, KC_NO, KC_LGUI, KC_HYPR, KC_NO, KC_NO, KC_TRANSPARENT, KC_TRANSPARENT, KC_NO, KC_NO, KC_UP, KC_NO, KC_NO, KC_TRANSPARENT,
  171. KC_TRANSPARENT, KC_LSHIFT, KC_LCTRL, KC_LALT, KC_NO, KC_NO, KC_NO, KC_LEFT, KC_DOWN, KC_RIGHT, KC_NO, KC_TRANSPARENT,
  172. KC_TRANSPARENT, KC_NO, MT(MOD_LGUI | MOD_LCTL,KC_NO), KC_NO, KC_NO, KC_NO, KC_TRANSPARENT, KC_TRANSPARENT, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_TRANSPARENT,
  173. KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT,
  174. KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT,
  175. KC_TRANSPARENT, KC_TRANSPARENT,
  176. KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, TO(0)
  177. ),
  178. [12] = LAYOUT_ergodox_pretty(
  179. KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT,
  180. KC_TRANSPARENT, KC_NO, KC_LGUI, KC_HYPR, KC_ACL2, KC_NO, KC_TRANSPARENT, KC_TRANSPARENT, KC_NO, KC_NO, KC_MS_WH_UP, KC_NO, KC_NO, KC_TRANSPARENT,
  181. KC_TRANSPARENT, KC_LSHIFT, KC_LCTRL, KC_LALT, KC_NO, KC_NO, KC_NO, KC_MS_WH_LEFT, KC_MS_WH_DOWN, KC_MS_WH_RIGHT, KC_NO, KC_TRANSPARENT,
  182. KC_TRANSPARENT, KC_NO, MT(MOD_LGUI | MOD_LCTL,KC_NO), MO(14), KC_NO, KC_NO, KC_TRANSPARENT, KC_TRANSPARENT, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_TRANSPARENT,
  183. KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT,
  184. KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT,
  185. KC_TRANSPARENT, KC_TRANSPARENT,
  186. KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, TO(0)
  187. ),
  188. [13] = LAYOUT_ergodox_pretty(
  189. KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT,
  190. KC_TRANSPARENT, KC_NO, KC_LGUI, KC_HYPR, KC_NO, KC_NO, KC_TRANSPARENT, KC_TRANSPARENT, KC_NO, KC_NO, KC_PGUP, KC_NO, KC_NO, KC_TRANSPARENT,
  191. KC_TRANSPARENT, KC_LSHIFT, KC_LCTRL, KC_LALT, KC_NO, KC_NO, KC_NO, KC_NO, KC_PGDOWN, KC_NO, KC_NO, KC_TRANSPARENT,
  192. KC_TRANSPARENT, KC_NO, MT(MOD_LGUI | MOD_LCTL,KC_NO), KC_NO, KC_NO, KC_NO, KC_TRANSPARENT, KC_TRANSPARENT, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_TRANSPARENT,
  193. KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT,
  194. KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT,
  195. KC_TRANSPARENT, KC_TRANSPARENT,
  196. KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, TO(0)
  197. ),
  198. [14] = LAYOUT_ergodox_pretty(
  199. KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT,
  200. KC_TRANSPARENT, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_TRANSPARENT, KC_TRANSPARENT, KC_NO, KC_NO, MS_WH_UP, KC_NO, KC_NO, KC_TRANSPARENT,
  201. KC_TRANSPARENT, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, MS_WH_LEFT, MS_WH_DOWN, MS_WH_RIGHT, KC_NO, KC_TRANSPARENT,
  202. KC_TRANSPARENT, KC_NO, KC_NO, KC_TRANSPARENT, KC_NO, KC_NO, KC_TRANSPARENT, KC_TRANSPARENT, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_TRANSPARENT,
  203. KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT,
  204. KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT,
  205. KC_TRANSPARENT, KC_TRANSPARENT,
  206. KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT
  207. ),
  208. };
  209. uint32_t layer_state_set_user(uint32_t state) {
  210. uint8_t layer = biton32(state);
  211. ergodox_board_led_off();
  212. ergodox_right_led_1_off();
  213. ergodox_right_led_2_off();
  214. ergodox_right_led_3_off();
  215. switch (layer) {
  216. case 1:
  217. ergodox_right_led_1_on();
  218. break;
  219. case 2:
  220. ergodox_right_led_2_on();
  221. break;
  222. case 3:
  223. ergodox_right_led_3_on();
  224. break;
  225. case 4:
  226. ergodox_right_led_1_on();
  227. ergodox_right_led_2_on();
  228. break;
  229. case 5:
  230. ergodox_right_led_1_on();
  231. ergodox_right_led_3_on();
  232. break;
  233. case 6:
  234. ergodox_right_led_2_on();
  235. ergodox_right_led_3_on();
  236. break;
  237. case 7:
  238. ergodox_right_led_1_on();
  239. ergodox_right_led_2_on();
  240. ergodox_right_led_3_on();
  241. break;
  242. default:
  243. break;
  244. }
  245. return state;
  246. };
  247. // determine the tapdance state to return
  248. int cur_dance (qk_tap_dance_state_t *state) {
  249. if (state->count == 1) {
  250. if (state->interrupted && state->pressed && state->interrupting_keycode == KC_MS_BTN1) {return SINGLE_HOLD;}
  251. if (state->interrupted && state->pressed && state->interrupting_keycode == 22273) {return SINGLE_HOLD;}
  252. if (state->interrupted && state->pressed && state->interrupting_keycode == 22272) {return SINGLE_HOLD;}
  253. if (state->interrupted && state->pressed && state->interrupting_keycode == KC_TAB) {return SINGLE_HOLD;}
  254. else if (state->interrupted || !state->pressed) {
  255. // if (state->interrupted) {
  256. // print("interrupted\n");
  257. // uprintf("Shift: %u\n", KC_LSHIFT);
  258. // uprintf("Control: %u\n", KC_LCTRL);
  259. // uprintf("%u\n",state->interrupting_keycode);
  260. // }
  261. return SINGLE_TAP;
  262. }
  263. else { return SINGLE_HOLD; }
  264. }
  265. else { return 2; } // any number higher than the maximum state value you return above
  266. }
  267. // /* Backup in case previous code is hard to piece together. */
  268. // int cur_dance (qk_tap_dance_state_t *state) {
  269. // if (state->count == 1) {
  270. // if (state->interrupted || !state->pressed) { return SINGLE_TAP; }
  271. // else { return SINGLE_HOLD; }
  272. // }
  273. // else { return 2; } // any number higher than the maximum state value you return above
  274. // }
  275. void ctrlto12_finished (qk_tap_dance_state_t *state, void *user_data) {
  276. td_state = cur_dance(state);
  277. switch (td_state) {
  278. case SINGLE_TAP:
  279. layer_on(12);
  280. break;
  281. case SINGLE_HOLD:
  282. if (state->interrupted && (state->interrupting_keycode == 22273 || state->interrupting_keycode == 43)) {
  283. register_mods(MOD_BIT(KC_LCTRL));
  284. break;
  285. }
  286. register_mods(MOD_BIT(KC_LCTRL)); // for a layer-tap key, use `layer_on(_MY_LAYER)` here
  287. if (state->interrupted && state->interrupting_keycode == KC_MS_BTN1) {
  288. register_code16(LCTL(KC_MS_BTN1));
  289. }
  290. break;
  291. }
  292. }
  293. void ctrlto12_reset (qk_tap_dance_state_t *state, void *user_data) {
  294. switch (td_state) {
  295. case SINGLE_TAP:
  296. break;
  297. case SINGLE_HOLD:
  298. if (state->interrupted && (state->interrupting_keycode == 22273 || state->interrupting_keycode == 43) ) {
  299. unregister_mods(MOD_BIT(KC_LCTRL));
  300. break;
  301. }
  302. unregister_mods(MOD_BIT(KC_LCTRL)); // for a layer-tap key, use `layer_off(_MY_LAYER)` here
  303. if (state->interrupted && state->interrupting_keycode == KC_MS_BTN1) {
  304. unregister_code16(LCTL(KC_MS_BTN1));
  305. }
  306. break;
  307. }
  308. }
  309. void shiftto13_finished (qk_tap_dance_state_t *state, void *user_data) {
  310. td_state = cur_dance(state);
  311. switch (td_state) {
  312. case SINGLE_TAP:
  313. layer_on(13);
  314. break;
  315. case SINGLE_HOLD:
  316. if (state->interrupted && (state->interrupting_keycode == 22272 || state->interrupting_keycode == 43) ) {
  317. register_mods(MOD_BIT(KC_LSHIFT));
  318. break;
  319. }
  320. register_mods(MOD_BIT(KC_LSHIFT)); // for a layer-tap key, use `layer_on(_MY_LAYER)` here
  321. if (state->interrupted && state->interrupting_keycode == KC_MS_BTN1) {
  322. register_code16(LSFT(KC_MS_BTN1));
  323. }
  324. break;
  325. }
  326. }
  327. void shiftto13_reset (qk_tap_dance_state_t *state, void *user_data) {
  328. switch (td_state) {
  329. case SINGLE_TAP:
  330. break;
  331. case SINGLE_HOLD:
  332. if (state->interrupted && (state->interrupting_keycode == 22272 || state->interrupting_keycode == 43) ) {
  333. unregister_mods(MOD_BIT(KC_LSHIFT));
  334. break;
  335. }
  336. unregister_mods(MOD_BIT(KC_LSHIFT)); // for a layer-tap key, use `layer_off(_MY_LAYER)` here
  337. if (state->interrupted && state->interrupting_keycode == KC_MS_BTN1) {
  338. unregister_code16(LSFT(KC_MS_BTN1));
  339. }
  340. break;
  341. }
  342. }
  343. void altto11_finished (qk_tap_dance_state_t *state, void *user_data) {
  344. td_state = cur_dance(state);
  345. switch (td_state) {
  346. case SINGLE_TAP:
  347. layer_on(11);
  348. break;
  349. case SINGLE_HOLD:
  350. register_mods(MOD_BIT(KC_LALT)); // for a layer-tap key, use `layer_on(_MY_LAYER)` here
  351. if (state->interrupted && state->interrupting_keycode == KC_MS_BTN1) {
  352. register_code16(LALT(KC_MS_BTN1));
  353. }
  354. break;
  355. }
  356. }
  357. void altto11_reset (qk_tap_dance_state_t *state, void *user_data) {
  358. switch (td_state) {
  359. case SINGLE_TAP:
  360. break;
  361. case SINGLE_HOLD:
  362. unregister_mods(MOD_BIT(KC_LALT)); // for a layer-tap key, use `layer_off(_MY_LAYER)` here
  363. if (state->interrupted && state->interrupting_keycode == KC_MS_BTN1) {
  364. unregister_code16(LALT(KC_MS_BTN1));
  365. }
  366. break;
  367. }
  368. }
  369. // define `ACTION_TAP_DANCE_FN_ADVANCED()` for each tapdance keycode, passing in `finished` and `reset` functions
  370. qk_tap_dance_action_t tap_dance_actions[] = {
  371. [CTRL_TO12] = ACTION_TAP_DANCE_FN_ADVANCED(NULL, ctrlto12_finished, ctrlto12_reset),
  372. [SHIFT_TO13] = ACTION_TAP_DANCE_FN_ADVANCED(NULL, shiftto13_finished, shiftto13_reset),
  373. [ALT_TO11] = ACTION_TAP_DANCE_FN_ADVANCED(NULL, altto11_finished, altto11_reset),
  374. };
  375. /* Debugging functions */
  376. void keyboard_post_init_user(void) {
  377. // Customise these values to desired behaviour
  378. // debug_enable=true;
  379. // debug_matrix=true;
  380. // debug_keyboard=true;
  381. // debug_mouse=true;
  382. }
  383. bool process_record_user(uint16_t keycode, keyrecord_t *record) {
  384. // If console is enabled, it will print the matrix position and status of each key pressed
  385. // #ifdef CONSOLE_ENABLE
  386. // uprintf("KL: kc: %u, col: %u, row: %u, pressed: %u\n", keycode, record->event.key.col, record->event.key.row, record->event.pressed);
  387. // #endif
  388. switch (keycode) {
  389. case MS_WH_DOWN:
  390. if (record->event.pressed) {
  391. SEND_STRING(SS_TAP(X_MS_WH_DOWN));
  392. }
  393. break;
  394. case MS_WH_UP:
  395. if (record->event.pressed) {
  396. SEND_STRING(SS_TAP(X_MS_WH_UP));
  397. }
  398. break;
  399. case MS_WH_LEFT:
  400. if (record->event.pressed) {
  401. SEND_STRING(SS_TAP(X_MS_WH_LEFT));
  402. }
  403. break;
  404. case MS_WH_RIGHT:
  405. if (record->event.pressed) {
  406. SEND_STRING(SS_TAP(X_MS_WH_RIGHT));
  407. }
  408. break;
  409. }
  410. return true;
  411. }