changelog shortlog graph tags branches changeset files revisions annotate raw help

Mercurial > infra > home / .config/kbd/moonlander/keymap.c

changeset 95: f69061a590da
parent: f82cb9ded8cf
author: Richard Westhaver <ellis@rwest.io>
date: Sat, 07 Sep 2024 22:40:44 -0400
permissions: -rw-r--r--
description: moonlander concessions
1 #include QMK_KEYBOARD_H
2 #include "version.h"
3 #include "keymap_french.h"
4 #include "keymap_spanish.h"
5 #include "keymap_hungarian.h"
6 #include "keymap_swedish.h"
7 // #include "keymap_br_abnt2.h"
8 #include "keymap_canadian_multilingual.h"
9 //#include "keymap_german_ch.h"
10 //#include "keymap_jp.h"
11 #include "keymap_korean.h"
12 #include "keymap_bepo.h"
13 #include "keymap_italian.h"
14 #include "keymap_slovenian.h"
15 #include "keymap_lithuanian_azerty.h"
16 #include "keymap_danish.h"
17 #include "keymap_norwegian.h"
18 #include "keymap_portuguese.h"
19 // #include "keymap_contributions.h"
20 #include "keymap_czech.h"
21 #include "keymap_romanian.h"
22 #include "keymap_russian.h"
23 #include "keymap_uk.h"
24 //#include "keymap_estonian.h"
25 //#include "keymap_belgian.h"
26 #include "keymap_us_international.h"
27 //#include "keymap_croatian.h"
28 //#include "keymap_turkish_q.h"
29 //#include "keymap_slovak.h"
30 
31 #define KC_MAC_UNDO LGUI(KC_Z)
32 #define KC_MAC_CUT LGUI(KC_X)
33 #define KC_MAC_COPY LGUI(KC_C)
34 #define KC_MAC_PASTE LGUI(KC_V)
35 #define KC_PC_UNDO LCTL(KC_Z)
36 #define KC_PC_CUT LCTL(KC_X)
37 #define KC_PC_COPY LCTL(KC_C)
38 #define KC_PC_PASTE LCTL(KC_V)
39 #define ES_LESS_MAC KC_GRAVE
40 #define ES_GRTR_MAC LSFT(KC_GRAVE)
41 #define ES_BSLS_MAC ALGR(KC_6)
42 #define NO_PIPE_ALT KC_GRAVE
43 #define NO_BSLS_ALT KC_EQUAL
44 #define LSA_T(kc) MT(MOD_LSFT | MOD_LALT, kc)
45 #define BP_NDSH_MAC ALGR(KC_8)
46 #define SE_SECT_MAC ALGR(KC_6)
47 #define MOON_LED_LEVEL LED_LEVEL
48 
49 enum custom_keycodes {
50  RGB_SLD = ML_SAFE_RANGE,
51 };
52 
53 enum tap_dance_codes {
54  DANCE_0,
55  DANCE_1,
56  DANCE_2,
57  DANCE_3,
58  DANCE_4,
59  DANCE_5,
60  DANCE_6,
61  DANCE_7,
62  DANCE_8,
63 };
64 
65 const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
66  [0] = LAYOUT_moonlander(
67  // 1
68  KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_EQL,
69  KC_GRAVE, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINUS,
70  // 2
71  KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, TG(1),
72  TG(2), KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSLS,
73  // 3
74  KC_LCTL, KC_A, KC_S, KC_D, KC_F, KC_G, KC_LALT,
75  KC_ENT, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOTE,
76  // 4
77  KC_LSFT, KC_Z ,KC_X, KC_C, KC_V, KC_B,
78  KC_N, KC_M, KC_COMMA, KC_DOT, KC_SLASH, KC_BSPC,
79  // 5
80  KC_UP, KC_DOWN, KC_LBRC, KC_LPRN, KC_SPC, KC_LCTL,
81  KC_LALT, KC_SPC, KC_RPRN, KC_RBRC, KC_LEFT, KC_RIGHT,
82  // 6
83  A(KC_X), C(KC_C), KC_LGUI,
84  ALT_T(KC_PASTE), RGB_MODE_FORWARD, QK_LOCK
85  ),
86  [1] = LAYOUT_moonlander(
87  KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_PSCREEN, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT,
88  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,
89  KC_ESCAPE, 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_LSHIFT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_RSHIFT,
91  TT(2), TD(DANCE_6), KC_9, KC_0, KC_ENTER, MO(4), LT(4,KC_ENTER), KC_LEFT, KC_DOWN, KC_UP, KC_RIGHT, TT(3),
92  KC_LALT, KC_SPACE, KC_LCTRL, KC_DELETE, KC_SPACE, KC_BSPACE
93  ),
94  [2] = LAYOUT_moonlander(
95  KC_NUMLOCK, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_TRANSPARENT, KC_NUMLOCK, KC_KP_SLASH, KC_KP_ASTERISK, KC_NO, KC_SCROLLLOCK, KC_PAUSE,
96  KC_KP_DOT, KC_KP_ASTERISK, KC_KP_PLUS, KC_KP_7, KC_KP_8, KC_KP_9, KC_F7, KC_TRANSPARENT, KC_KP_7, KC_KP_8, KC_KP_9, KC_KP_MINUS, KC_PGUP, KC_PGDOWN,
97  KC_TRANSPARENT, KC_KP_SLASH, KC_KP_MINUS, KC_KP_4, KC_KP_5, KC_KP_6, KC_F8, KC_TRANSPARENT, KC_KP_4, KC_KP_5, KC_KP_6, KC_KP_PLUS, KC_HOME, KC_END,
98  TD(DANCE_7), KC_F11, KC_F12, KC_KP_1, KC_KP_2, KC_KP_3, KC_KP_1, KC_KP_2, KC_KP_3, KC_KP_ENTER, KC_TRANSPARENT, TD(DANCE_8),
99  KC_TRANSPARENT, KC_INSERT, KC_F9, KC_F10, KC_KP_0, KC_KP_ENTER, CAPS_WORD, KC_KP_0, KC_KP_DOT, KC_EQUAL, KC_TRANSPARENT, TO(0),
100  MT(MOD_LALT, KC_PGUP),KC_SPACE, MT(MOD_LCTL, KC_PGDOWN), KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT
101  ),
102  [3] = LAYOUT_moonlander(
103  KC_TRANSPARENT, KC_TRANSPARENT, KC_MS_ACCEL0, KC_MS_ACCEL1, KC_MS_ACCEL2, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_AUDIO_MUTE, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, RESET,
104  KC_TRANSPARENT, KC_MS_BTN5, KC_MS_WH_LEFT, KC_MS_UP, KC_MS_WH_RIGHT, KC_MS_WH_UP, KC_TRANSPARENT, KC_MS_WH_LEFT, KC_TRANSPARENT, KC_AUDIO_VOL_DOWN,KC_AUDIO_VOL_UP,KC_TRANSPARENT, KC_MEDIA_PREV_TRACK,KC_MEDIA_NEXT_TRACK,
105  KC_TRANSPARENT, KC_MS_BTN4, KC_MS_LEFT, KC_MS_DOWN, KC_MS_RIGHT, KC_MS_WH_DOWN, KC_TRANSPARENT, KC_MS_WH_RIGHT, LCTL(LSFT(KC_LEFT)),LCTL(KC_LEFT), LCTL(KC_RIGHT), LCTL(LSFT(KC_RIGHT)),KC_MEDIA_STOP, KC_MEDIA_PLAY_PAUSE,
106  MT(MOD_LSFT, KC_LBRACKET),KC_TRANSPARENT, KC_MS_BTN1, KC_MS_BTN3, KC_MS_BTN2, KC_TRANSPARENT, KC_TRANSPARENT, LCTL(LSFT(KC_T)),LCTL(KC_PGUP), LCTL(KC_PGDOWN),KC_TRANSPARENT, MT(MOD_RSFT, KC_RBRACKET),
107  TO(0), TO(1), LGUI(LCTL(KC_LEFT)),LGUI(LCTL(KC_RIGHT)),KC_TRANSPARENT, KC_ASTG, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT,
108  KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, MT(MOD_RCTL, KC_INSERT),KC_SPACE, KC_TRANSPARENT
109  ),
110  [4] = LAYOUT_moonlander(
111  KC_INSERT, KC_LCBR, KC_RCBR, KC_LBRACKET, KC_RBRACKET, KC_MINUS, KC_EQUAL, KC_GRAVE, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6,
112  KC_DELETE, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSLASH, KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_7,
113  KC_BSPACE, KC_H, KC_J, KC_K, KC_L, KC_SCOLON, KC_QUOTE, KC_ESCAPE, KC_A, KC_S, KC_D, KC_F, KC_G, KC_8,
114  KC_RSPC, KC_N, KC_M, KC_COMMA, KC_DOT, KC_SLASH, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_LSPO,
115  KC_ENTER, KC_LEFT, KC_DOWN, KC_UP, KC_RIGHT, TO(0), TO(0), KC_LGUI, KC_9, KC_0, KC_HOME, KC_END,
116  OSM(MOD_LALT), KC_SPACE, OSM(MOD_LCTL), OSM(MOD_LCTL), KC_SPACE, OSM(MOD_LALT)
117  ),
118  // [MACRO]
119  // [LISP]
120  // [CTL]
121  // [CMD]
122 };
123 
124 extern rgb_config_t rgb_matrix_config;
125 
126 void keyboard_post_init_user(void) {
127  rgb_matrix_enable();
128 }
129 
130 
131 const uint8_t PROGMEM ledmap[][DRIVER_LED_TOTAL][3] = {
132  [0] = { {188,255,255}, {188,255,255}, {188,255,255}, {151,255,255}, {25,255,255}, {102,255,255}, {151,255,255}, {151,255,255}, {151,255,255}, {188,255,255}, {102,255,255}, {151,255,255}, {151,255,255}, {151,255,255}, {102,255,255}, {102,255,255}, {151,255,255}, {151,255,255}, {151,255,255}, {102,255,255}, {102,255,255}, {151,255,255}, {151,255,255}, {151,255,255}, {188,255,255}, {102,255,255}, {151,255,255}, {151,255,255}, {151,255,255}, {102,255,255}, {102,255,255}, {102,255,255}, {151,255,255}, {25,255,255}, {152,255,255}, {7,255,255}, {102,255,255}, {102,255,255}, {102,255,255}, {151,255,255}, {25,255,255}, {102,255,255}, {151,255,255}, {102,255,255}, {102,255,255}, {188,255,255}, {102,255,255}, {151,255,255}, {151,255,255}, {102,255,255}, {188,255,255}, {102,255,255}, {151,255,255}, {151,255,255}, {102,255,255}, {188,255,255}, {102,255,255}, {151,255,255}, {151,255,255}, {151,255,255}, {188,255,255}, {102,255,255}, {151,255,255}, {151,255,255}, {151,255,255}, {188,255,255}, {188,255,255}, {188,255,255}, {152,255,255}, {25,255,255}, {152,255,255}, {7,255,255} },
133 
134  [1] = { {188,255,255}, {188,255,255}, {188,255,255}, {188,255,255}, {0,245,245}, {102,255,255}, {151,255,255}, {25,255,255}, {151,255,255}, {25,255,255}, {102,255,255}, {25,255,255}, {25,255,255}, {151,255,255}, {102,255,255}, {102,255,255}, {151,255,255}, {25,255,255}, {151,255,255}, {102,255,255}, {102,255,255}, {151,255,255}, {151,255,255}, {151,255,255}, {25,255,255}, {102,255,255}, {151,255,255}, {151,255,255}, {151,255,255}, {102,255,255}, {102,255,255}, {102,255,255}, {151,255,255}, {25,255,255}, {151,255,255}, {0,245,245}, {102,255,255}, {102,255,255}, {102,255,255}, {151,255,255}, {0,245,245}, {102,255,255}, {151,255,255}, {102,255,255}, {102,255,255}, {25,255,255}, {102,255,255}, {151,255,255}, {151,255,255}, {102,255,255}, {25,255,255}, {102,255,255}, {151,255,255}, {151,255,255}, {102,255,255}, {25,255,255}, {102,255,255}, {151,255,255}, {151,255,255}, {151,255,255}, {25,255,255}, {102,255,255}, {151,255,255}, {151,255,255}, {151,255,255}, {188,255,255}, {188,255,255}, {188,255,255}, {151,255,255}, {25,255,255}, {151,255,255}, {25,255,255} },
135 
136  [2] = { {41,255,255}, {102,255,255}, {0,0,0}, {188,255,255}, {151,255,255}, {188,255,255}, {102,255,255}, {102,255,255}, {188,255,255}, {25,255,255}, {188,255,255}, {102,255,255}, {102,255,255}, {188,255,255}, {188,255,255}, {188,255,255}, {151,255,255}, {0,0,255}, {151,255,255}, {188,255,255}, {188,255,255}, {0,0,255}, {151,255,255}, {0,0,255}, {151,255,255}, {188,255,255}, {151,255,255}, {0,0,255}, {151,255,255}, {188,255,255}, {188,255,255}, {188,255,255}, {151,255,255}, {0,0,0}, {151,255,255}, {41,255,255}, {188,255,255}, {25,255,255}, {25,255,255}, {188,255,255}, {151,255,255}, {188,255,255}, {25,255,255}, {25,255,255}, {0,0,0}, {0,0,0}, {0,0,0}, {102,255,255}, {102,255,255}, {102,255,255}, {41,255,255}, {102,255,255}, {151,255,255}, {0,0,255}, {151,255,255}, {102,255,255}, {102,255,255}, {0,0,255}, {151,255,255}, {0,0,255}, {151,255,255}, {41,255,255}, {151,255,255}, {0,0,255}, {151,255,255}, {0,0,0}, {0,0,0}, {0,0,0}, {0,0,0}, {0,0,0}, {0,0,0}, {41,255,255} },
137 
138  [3] = { {0,0,0}, {0,0,0}, {0,0,0}, {0,0,0}, {151,255,255}, {0,0,0}, {25,255,255}, {25,255,255}, {0,0,0}, {25,255,255}, {0,245,245}, {188,255,255}, {74,255,255}, {25,255,255}, {188,255,255}, {0,245,245}, {74,255,255}, {74,255,255}, {25,255,255}, {188,255,255}, {0,245,245}, {188,255,255}, {74,255,255}, {25,255,255}, {0,0,0}, {0,0,0}, {188,255,255}, {188,255,255}, {0,0,0}, {0,0,0}, {0,0,0}, {0,0,0}, {0,0,0}, {0,0,0}, {0,0,0}, {41,255,255}, {41,255,255}, {0,245,245}, {0,245,245}, {0,0,0}, {152,255,255}, {0,0,0}, {0,245,245}, {255,245,245}, {0,0,0}, {0,0,0}, {0,0,0}, {0,0,0}, {151,255,255}, {25,255,255}, {0,0,0}, {0,0,0}, {41,255,255}, {74,255,255}, {25,255,255}, {0,0,0}, {41,255,255}, {41,255,255}, {74,255,255}, {25,255,255}, {0,0,0}, {0,0,0}, {0,0,0}, {151,255,255}, {0,0,0}, {0,0,0}, {188,255,255}, {188,255,255}, {0,0,0}, {0,0,0}, {151,255,255}, {0,0,0} },
139 
140  [4] = { {188,255,255}, {188,255,255}, {188,255,255}, {188,255,255}, {25,255,255}, {151,255,255}, {102,255,255}, {102,255,255}, {102,255,255}, {188,255,255}, {151,255,255}, {102,255,255}, {102,255,255}, {102,255,255}, {188,255,255}, {151,255,255}, {102,255,255}, {102,255,255}, {151,255,255}, {188,255,255}, {151,255,255}, {102,255,255}, {102,255,255}, {151,255,255}, {188,255,255}, {151,255,255}, {102,255,255}, {151,255,255}, {151,255,255}, {151,255,255}, {151,255,255}, {151,255,255}, {25,255,255}, {151,255,255}, {25,255,255}, {25,255,255}, {151,255,255}, {151,255,255}, {151,255,255}, {188,255,255}, {188,255,255}, {151,255,255}, {102,255,255}, {102,255,255}, {102,255,255}, {188,255,255}, {151,255,255}, {102,255,255}, {102,255,255}, {102,255,255}, {151,255,255}, {151,255,255}, {102,255,255}, {102,255,255}, {102,255,255}, {151,255,255}, {151,255,255}, {102,255,255}, {102,255,255}, {102,255,255}, {188,255,255}, {151,255,255}, {102,255,255}, {102,255,255}, {102,255,255}, {188,255,255}, {188,255,255}, {188,255,255}, {25,255,255}, {151,255,255}, {25,255,255}, {25,255,255} },
141 
142 };
143 
144 void set_layer_color(int layer) {
145  for (int i = 0; i < DRIVER_LED_TOTAL; i++) {
146  HSV hsv = {
147  .h = pgm_read_byte(&ledmap[layer][i][0]),
148  .s = pgm_read_byte(&ledmap[layer][i][1]),
149  .v = pgm_read_byte(&ledmap[layer][i][2]),
150  };
151  if (!hsv.h && !hsv.s && !hsv.v) {
152  rgb_matrix_set_color( i, 0, 0, 0 );
153  } else {
154  RGB rgb = hsv_to_rgb( hsv );
155  float f = (float)rgb_matrix_config.hsv.v / UINT8_MAX;
156  rgb_matrix_set_color( i, f * rgb.r, f * rgb.g, f * rgb.b );
157  }
158  }
159 }
160 
161 void rgb_matrix_indicators_user(void) {
162  if (rawhid_state.rgb_control) {
163  return;
164  }
165  if (keyboard_config.disable_layer_led) { return; }
166  switch (biton32(layer_state)) {
167  case 0:
168  set_layer_color(0);
169  break;
170  case 1:
171  set_layer_color(1);
172  break;
173  case 2:
174  set_layer_color(2);
175  break;
176  case 3:
177  set_layer_color(3);
178  break;
179  case 4:
180  set_layer_color(4);
181  break;
182  default:
183  if (rgb_matrix_get_flags() == LED_FLAG_NONE)
184  rgb_matrix_set_color_all(0, 0, 0);
185  break;
186  }
187 }
188 
189 bool process_record_user(uint16_t keycode, keyrecord_t *record) {
190  switch (keycode) {
191 
192  case RGB_SLD:
193  if (rawhid_state.rgb_control) {
194  return false;
195  }
196  if (record->event.pressed) {
197  rgblight_mode(1);
198  }
199  return false;
200  }
201  return true;
202 }
203 
204 
205 typedef struct {
206  bool is_press_action;
207  uint8_t step;
208 } tap;
209 
210 enum {
211  SINGLE_TAP = 1,
212  SINGLE_HOLD,
213  DOUBLE_TAP,
214  DOUBLE_HOLD,
215  DOUBLE_SINGLE_TAP,
216  MORE_TAPS
217 };
218 
219 static tap dance_state[9];
220 
221 uint8_t dance_step(qk_tap_dance_state_t *state);
222 
223 uint8_t dance_step(qk_tap_dance_state_t *state) {
224  if (state->count == 1) {
225  if (state->interrupted || !state->pressed) return SINGLE_TAP;
226  else return SINGLE_HOLD;
227  } else if (state->count == 2) {
228  if (state->interrupted) return DOUBLE_SINGLE_TAP;
229  else if (state->pressed) return DOUBLE_HOLD;
230  else return DOUBLE_TAP;
231  }
232  return MORE_TAPS;
233 }
234 
235 
236 void on_dance_0(qk_tap_dance_state_t *state, void *user_data);
237 void dance_0_finished(qk_tap_dance_state_t *state, void *user_data);
238 void dance_0_reset(qk_tap_dance_state_t *state, void *user_data);
239 
240 void on_dance_0(qk_tap_dance_state_t *state, void *user_data) {
241  if(state->count == 3) {
242  tap_code16(LCTL(KC_GRAVE));
243  tap_code16(LCTL(KC_GRAVE));
244  tap_code16(LCTL(KC_GRAVE));
245  }
246  if(state->count > 3) {
247  tap_code16(LCTL(KC_GRAVE));
248  }
249 }
250 
251 void dance_0_finished(qk_tap_dance_state_t *state, void *user_data) {
252  dance_state[0].step = dance_step(state);
253  switch (dance_state[0].step) {
254  case SINGLE_TAP: register_code16(LCTL(KC_GRAVE)); break;
255  case SINGLE_HOLD: register_code16(LCTL(KC_V)); break;
256  case DOUBLE_TAP: register_code16(LCTL(KC_GRAVE)); register_code16(LCTL(KC_GRAVE)); break;
257  case DOUBLE_SINGLE_TAP: tap_code16(LCTL(KC_GRAVE)); register_code16(LCTL(KC_GRAVE));
258  }
259 }
260 
261 void dance_0_reset(qk_tap_dance_state_t *state, void *user_data) {
262  wait_ms(10);
263  switch (dance_state[0].step) {
264  case SINGLE_TAP: unregister_code16(LCTL(KC_GRAVE)); break;
265  case SINGLE_HOLD: unregister_code16(LCTL(KC_V)); break;
266  case DOUBLE_TAP: unregister_code16(LCTL(KC_GRAVE)); break;
267  case DOUBLE_SINGLE_TAP: unregister_code16(LCTL(KC_GRAVE)); break;
268  }
269  dance_state[0].step = 0;
270 }
271 void on_dance_1(qk_tap_dance_state_t *state, void *user_data);
272 void dance_1_finished(qk_tap_dance_state_t *state, void *user_data);
273 void dance_1_reset(qk_tap_dance_state_t *state, void *user_data);
274 
275 void on_dance_1(qk_tap_dance_state_t *state, void *user_data) {
276  if(state->count == 3) {
277  tap_code16(KC_9);
278  tap_code16(KC_9);
279  tap_code16(KC_9);
280  }
281  if(state->count > 3) {
282  tap_code16(KC_9);
283  }
284 }
285 
286 void dance_1_finished(qk_tap_dance_state_t *state, void *user_data) {
287  dance_state[1].step = dance_step(state);
288  switch (dance_state[1].step) {
289  case SINGLE_TAP: register_code16(KC_9); break;
290  case SINGLE_HOLD: register_code16(LCTL(KC_X)); break;
291  case DOUBLE_TAP: register_code16(KC_9); register_code16(KC_9); break;
292  case DOUBLE_SINGLE_TAP: tap_code16(KC_9); register_code16(KC_9);
293  }
294 }
295 
296 void dance_1_reset(qk_tap_dance_state_t *state, void *user_data) {
297  wait_ms(10);
298  switch (dance_state[1].step) {
299  case SINGLE_TAP: unregister_code16(KC_9); break;
300  case SINGLE_HOLD: unregister_code16(LCTL(KC_X)); break;
301  case DOUBLE_TAP: unregister_code16(KC_9); break;
302  case DOUBLE_SINGLE_TAP: unregister_code16(KC_9); break;
303  }
304  dance_state[1].step = 0;
305 }
306 void on_dance_2(qk_tap_dance_state_t *state, void *user_data);
307 void dance_2_finished(qk_tap_dance_state_t *state, void *user_data);
308 void dance_2_reset(qk_tap_dance_state_t *state, void *user_data);
309 
310 void on_dance_2(qk_tap_dance_state_t *state, void *user_data) {
311  if(state->count == 3) {
312  tap_code16(KC_0);
313  tap_code16(KC_0);
314  tap_code16(KC_0);
315  }
316  if(state->count > 3) {
317  tap_code16(KC_0);
318  }
319 }
320 
321 void dance_2_finished(qk_tap_dance_state_t *state, void *user_data) {
322  dance_state[2].step = dance_step(state);
323  switch (dance_state[2].step) {
324  case SINGLE_TAP: register_code16(KC_0); break;
325  case SINGLE_HOLD: register_code16(LCTL(KC_C)); break;
326  case DOUBLE_TAP: register_code16(KC_0); register_code16(KC_0); break;
327  case DOUBLE_SINGLE_TAP: tap_code16(KC_0); register_code16(KC_0);
328  }
329 }
330 
331 void dance_2_reset(qk_tap_dance_state_t *state, void *user_data) {
332  wait_ms(10);
333  switch (dance_state[2].step) {
334  case SINGLE_TAP: unregister_code16(KC_0); break;
335  case SINGLE_HOLD: unregister_code16(LCTL(KC_C)); break;
336  case DOUBLE_TAP: unregister_code16(KC_0); break;
337  case DOUBLE_SINGLE_TAP: unregister_code16(KC_0); break;
338  }
339  dance_state[2].step = 0;
340 }
341 void on_dance_3(qk_tap_dance_state_t *state, void *user_data);
342 void dance_3_finished(qk_tap_dance_state_t *state, void *user_data);
343 void dance_3_reset(qk_tap_dance_state_t *state, void *user_data);
344 
345 void on_dance_3(qk_tap_dance_state_t *state, void *user_data) {
346  if(state->count == 3) {
347  tap_code16(LALT(KC_SPACE));
348  tap_code16(LALT(KC_SPACE));
349  tap_code16(LALT(KC_SPACE));
350  }
351  if(state->count > 3) {
352  tap_code16(LALT(KC_SPACE));
353  }
354 }
355 
356 void dance_3_finished(qk_tap_dance_state_t *state, void *user_data) {
357  dance_state[3].step = dance_step(state);
358  switch (dance_state[3].step) {
359  case SINGLE_TAP: register_code16(LALT(KC_SPACE)); break;
360  case SINGLE_HOLD: register_code16(KC_LGUI); break;
361  case DOUBLE_TAP: register_code16(LALT(KC_SPACE)); register_code16(LALT(KC_SPACE)); break;
362  case DOUBLE_SINGLE_TAP: tap_code16(LALT(KC_SPACE)); register_code16(LALT(KC_SPACE));
363  }
364 }
365 
366 void dance_3_reset(qk_tap_dance_state_t *state, void *user_data) {
367  wait_ms(10);
368  switch (dance_state[3].step) {
369  case SINGLE_TAP: unregister_code16(LALT(KC_SPACE)); break;
370  case SINGLE_HOLD: unregister_code16(KC_LGUI); break;
371  case DOUBLE_TAP: unregister_code16(LALT(KC_SPACE)); break;
372  case DOUBLE_SINGLE_TAP: unregister_code16(LALT(KC_SPACE)); break;
373  }
374  dance_state[3].step = 0;
375 }
376 void on_dance_4(qk_tap_dance_state_t *state, void *user_data);
377 void dance_4_finished(qk_tap_dance_state_t *state, void *user_data);
378 void dance_4_reset(qk_tap_dance_state_t *state, void *user_data);
379 
380 void on_dance_4(qk_tap_dance_state_t *state, void *user_data) {
381  if(state->count == 3) {
382  tap_code16(LGUI(KC_2));
383  tap_code16(LGUI(KC_2));
384  tap_code16(LGUI(KC_2));
385  }
386  if(state->count > 3) {
387  tap_code16(LGUI(KC_2));
388  }
389 }
390 
391 void dance_4_finished(qk_tap_dance_state_t *state, void *user_data) {
392  dance_state[4].step = dance_step(state);
393  switch (dance_state[4].step) {
394  case SINGLE_TAP: register_code16(LGUI(KC_2)); break;
395  case SINGLE_HOLD: layer_on(4); break;
396  case DOUBLE_TAP: register_code16(LGUI(KC_2)); register_code16(LGUI(KC_2)); break;
397  case DOUBLE_SINGLE_TAP: tap_code16(LGUI(KC_2)); register_code16(LGUI(KC_2));
398  }
399 }
400 
401 void dance_4_reset(qk_tap_dance_state_t *state, void *user_data) {
402  wait_ms(10);
403  switch (dance_state[4].step) {
404  case SINGLE_TAP: unregister_code16(LGUI(KC_2)); break;
405  case SINGLE_HOLD: layer_off(4); break;
406  case DOUBLE_TAP: unregister_code16(LGUI(KC_2)); break;
407  case DOUBLE_SINGLE_TAP: unregister_code16(LGUI(KC_2)); break;
408  }
409  dance_state[4].step = 0;
410 }
411 void on_dance_5(qk_tap_dance_state_t *state, void *user_data);
412 void dance_5_finished(qk_tap_dance_state_t *state, void *user_data);
413 void dance_5_reset(qk_tap_dance_state_t *state, void *user_data);
414 
415 void on_dance_5(qk_tap_dance_state_t *state, void *user_data) {
416  if(state->count == 3) {
417  tap_code16(KC_PSCREEN);
418  tap_code16(KC_PSCREEN);
419  tap_code16(KC_PSCREEN);
420  }
421  if(state->count > 3) {
422  tap_code16(KC_PSCREEN);
423  }
424 }
425 
426 void dance_5_finished(qk_tap_dance_state_t *state, void *user_data) {
427  dance_state[5].step = dance_step(state);
428  switch (dance_state[5].step) {
429  case SINGLE_TAP: register_code16(KC_PSCREEN); break;
430  case SINGLE_HOLD: register_code16(LGUI(LSFT(KC_S))); break;
431  case DOUBLE_TAP: register_code16(KC_PSCREEN); register_code16(KC_PSCREEN); break;
432  case DOUBLE_SINGLE_TAP: tap_code16(KC_PSCREEN); register_code16(KC_PSCREEN);
433  }
434 }
435 
436 void dance_5_reset(qk_tap_dance_state_t *state, void *user_data) {
437  wait_ms(10);
438  switch (dance_state[5].step) {
439  case SINGLE_TAP: unregister_code16(KC_PSCREEN); break;
440  case SINGLE_HOLD: unregister_code16(LGUI(LSFT(KC_S))); break;
441  case DOUBLE_TAP: unregister_code16(KC_PSCREEN); break;
442  case DOUBLE_SINGLE_TAP: unregister_code16(KC_PSCREEN); break;
443  }
444  dance_state[5].step = 0;
445 }
446 void dance_6_finished(qk_tap_dance_state_t *state, void *user_data);
447 void dance_6_reset(qk_tap_dance_state_t *state, void *user_data);
448 
449 void dance_6_finished(qk_tap_dance_state_t *state, void *user_data) {
450  dance_state[6].step = dance_step(state);
451  switch (dance_state[6].step) {
452  case SINGLE_TAP: layer_move(0); break;
453  case SINGLE_HOLD: layer_on(4); break;
454  case DOUBLE_TAP: layer_move(0); break;
455  case DOUBLE_SINGLE_TAP: layer_move(0); break;
456  }
457 }
458 
459 void dance_6_reset(qk_tap_dance_state_t *state, void *user_data) {
460  wait_ms(10);
461  switch (dance_state[6].step) {
462  case SINGLE_HOLD: layer_off(4); break;
463  }
464  dance_state[6].step = 0;
465 }
466 void on_dance_7(qk_tap_dance_state_t *state, void *user_data);
467 void dance_7_finished(qk_tap_dance_state_t *state, void *user_data);
468 void dance_7_reset(qk_tap_dance_state_t *state, void *user_data);
469 
470 void on_dance_7(qk_tap_dance_state_t *state, void *user_data) {
471  if(state->count == 3) {
472  tap_code16(KC_LCBR);
473  tap_code16(KC_LCBR);
474  tap_code16(KC_LCBR);
475  }
476  if(state->count > 3) {
477  tap_code16(KC_LCBR);
478  }
479 }
480 
481 void dance_7_finished(qk_tap_dance_state_t *state, void *user_data) {
482  dance_state[7].step = dance_step(state);
483  switch (dance_state[7].step) {
484  case SINGLE_TAP: register_code16(KC_LCBR); break;
485  case SINGLE_HOLD: register_code16(KC_LSHIFT); break;
486  case DOUBLE_TAP: register_code16(KC_LCBR); register_code16(KC_LCBR); break;
487  case DOUBLE_SINGLE_TAP: tap_code16(KC_LCBR); register_code16(KC_LCBR);
488  }
489 }
490 
491 void dance_7_reset(qk_tap_dance_state_t *state, void *user_data) {
492  wait_ms(10);
493  switch (dance_state[7].step) {
494  case SINGLE_TAP: unregister_code16(KC_LCBR); break;
495  case SINGLE_HOLD: unregister_code16(KC_LSHIFT); break;
496  case DOUBLE_TAP: unregister_code16(KC_LCBR); break;
497  case DOUBLE_SINGLE_TAP: unregister_code16(KC_LCBR); break;
498  }
499  dance_state[7].step = 0;
500 }
501 void on_dance_8(qk_tap_dance_state_t *state, void *user_data);
502 void dance_8_finished(qk_tap_dance_state_t *state, void *user_data);
503 void dance_8_reset(qk_tap_dance_state_t *state, void *user_data);
504 
505 void on_dance_8(qk_tap_dance_state_t *state, void *user_data) {
506  if(state->count == 3) {
507  tap_code16(KC_RCBR);
508  tap_code16(KC_RCBR);
509  tap_code16(KC_RCBR);
510  }
511  if(state->count > 3) {
512  tap_code16(KC_RCBR);
513  }
514 }
515 
516 void dance_8_finished(qk_tap_dance_state_t *state, void *user_data) {
517  dance_state[8].step = dance_step(state);
518  switch (dance_state[8].step) {
519  case SINGLE_TAP: register_code16(KC_RCBR); break;
520  case SINGLE_HOLD: register_code16(KC_RSHIFT); break;
521  case DOUBLE_TAP: register_code16(KC_RCBR); register_code16(KC_RCBR); break;
522  case DOUBLE_SINGLE_TAP: tap_code16(KC_RCBR); register_code16(KC_RCBR);
523  }
524 }
525 
526 void dance_8_reset(qk_tap_dance_state_t *state, void *user_data) {
527  wait_ms(10);
528  switch (dance_state[8].step) {
529  case SINGLE_TAP: unregister_code16(KC_RCBR); break;
530  case SINGLE_HOLD: unregister_code16(KC_RSHIFT); break;
531  case DOUBLE_TAP: unregister_code16(KC_RCBR); break;
532  case DOUBLE_SINGLE_TAP: unregister_code16(KC_RCBR); break;
533  }
534  dance_state[8].step = 0;
535 }
536 
537 qk_tap_dance_action_t tap_dance_actions[] = {
538  [DANCE_0] = ACTION_TAP_DANCE_FN_ADVANCED(on_dance_0, dance_0_finished, dance_0_reset),
539  [DANCE_1] = ACTION_TAP_DANCE_FN_ADVANCED(on_dance_1, dance_1_finished, dance_1_reset),
540  [DANCE_2] = ACTION_TAP_DANCE_FN_ADVANCED(on_dance_2, dance_2_finished, dance_2_reset),
541  [DANCE_3] = ACTION_TAP_DANCE_FN_ADVANCED(on_dance_3, dance_3_finished, dance_3_reset),
542  [DANCE_4] = ACTION_TAP_DANCE_FN_ADVANCED(on_dance_4, dance_4_finished, dance_4_reset),
543  [DANCE_5] = ACTION_TAP_DANCE_FN_ADVANCED(on_dance_5, dance_5_finished, dance_5_reset),
544  [DANCE_6] = ACTION_TAP_DANCE_FN_ADVANCED(NULL, dance_6_finished, dance_6_reset),
545  [DANCE_7] = ACTION_TAP_DANCE_FN_ADVANCED(on_dance_7, dance_7_finished, dance_7_reset),
546  [DANCE_8] = ACTION_TAP_DANCE_FN_ADVANCED(on_dance_8, dance_8_finished, dance_8_reset),
547 };