changelog shortlog graph tags branches changeset file revisions annotate raw help

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

revision 95: f69061a590da
parent 3: f82cb9ded8cf
     1.1--- a/.config/kbd/moonlander/keymap.c	Fri Aug 30 17:07:30 2024 -0400
     1.2+++ b/.config/kbd/moonlander/keymap.c	Sat Sep 07 22:40:44 2024 -0400
     1.3@@ -46,21 +46,24 @@
     1.4 #define SE_SECT_MAC ALGR(KC_6)
     1.5 #define MOON_LED_LEVEL LED_LEVEL
     1.6 
     1.7-enum layers {
     1.8-  MAIN,
     1.9+enum custom_keycodes {
    1.10+  RGB_SLD = ML_SAFE_RANGE,
    1.11 };
    1.12 
    1.13-enum custom_keycodes {
    1.14-  VRSN = SAFE_RANGE,
    1.15-  HSV_0_245_245,
    1.16-  HSV_74_255_206,
    1.17-  HSV_152_255_255,
    1.18+enum tap_dance_codes {
    1.19+  DANCE_0,
    1.20+  DANCE_1,
    1.21+  DANCE_2,
    1.22+  DANCE_3,
    1.23+  DANCE_4,
    1.24+  DANCE_5,
    1.25+  DANCE_6,
    1.26+  DANCE_7,
    1.27+  DANCE_8,
    1.28 };
    1.29 
    1.30-
    1.31-
    1.32 const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
    1.33-  [MAIN] = LAYOUT_moonlander(
    1.34+  [0] = LAYOUT_moonlander(
    1.35     // 1			  
    1.36     KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_EQL,
    1.37     KC_GRAVE, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINUS,
    1.38@@ -74,25 +77,471 @@
    1.39     KC_LSFT, KC_Z ,KC_X, KC_C, KC_V, KC_B,  
    1.40     KC_N, KC_M, KC_COMMA, KC_DOT, KC_SLASH, KC_BSPC,
    1.41     // 5
    1.42-    KC_UP, KC_DOWN, KC_LBRC, KC_LPRN, KC_SPC, LCTL,
    1.43-    LALT, KC_SPC, KC_RPRN, KC_RBRC, KC_LEFT, KC_RIGHT,
    1.44+    KC_UP, KC_DOWN, KC_LBRC, KC_LPRN, KC_SPC, KC_LCTL,
    1.45+    KC_LALT, KC_SPC, KC_RPRN, KC_RBRC, KC_LEFT, KC_RIGHT,
    1.46     // 6
    1.47     A(KC_X), C(KC_C), KC_LGUI,
    1.48     ALT_T(KC_PASTE), RGB_MODE_FORWARD, QK_LOCK
    1.49   ),
    1.50+  [1] = LAYOUT_moonlander(
    1.51+    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, 
    1.52+    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, 
    1.53+    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, 
    1.54+    KC_LSHIFT,      KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT,                                 KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_RSHIFT,      
    1.55+    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),          
    1.56+    KC_LALT,        KC_SPACE,       KC_LCTRL,                       KC_DELETE,      KC_SPACE,       KC_BSPACE
    1.57+  ),
    1.58+  [2] = LAYOUT_moonlander(
    1.59+    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,       
    1.60+    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,      
    1.61+    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,         
    1.62+    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),    
    1.63+    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),          
    1.64+    MT(MOD_LALT, KC_PGUP),KC_SPACE,       MT(MOD_LCTL, KC_PGDOWN),                KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT
    1.65+  ),
    1.66+  [3] = LAYOUT_moonlander(
    1.67+    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,          
    1.68+    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,
    1.69+    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,
    1.70+    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),
    1.71+    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, 
    1.72+    KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT,                 MT(MOD_RCTL, KC_INSERT),KC_SPACE,       KC_TRANSPARENT
    1.73+  ),
    1.74+  [4] = LAYOUT_moonlander(
    1.75+    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,           
    1.76+    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,           
    1.77+    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,           
    1.78+    KC_RSPC,        KC_N,           KC_M,           KC_COMMA,       KC_DOT,         KC_SLASH,                                       KC_Z,           KC_X,           KC_C,           KC_V,           KC_B,           KC_LSPO,        
    1.79+    KC_ENTER,       KC_LEFT,        KC_DOWN,        KC_UP,          KC_RIGHT,       TO(0),                                                                                                          TO(0),          KC_LGUI,        KC_9,           KC_0,           KC_HOME,        KC_END,         
    1.80+    OSM(MOD_LALT),  KC_SPACE,       OSM(MOD_LCTL),                  OSM(MOD_LCTL),  KC_SPACE,       OSM(MOD_LALT)
    1.81+                          ),
    1.82   // [MACRO]
    1.83   // [LISP]
    1.84   // [CTL]
    1.85   // [CMD]
    1.86 };
    1.87 
    1.88+extern rgb_config_t rgb_matrix_config;
    1.89+
    1.90+void keyboard_post_init_user(void) {
    1.91+  rgb_matrix_enable();
    1.92+}
    1.93+
    1.94+
    1.95+const uint8_t PROGMEM ledmap[][DRIVER_LED_TOTAL][3] = {
    1.96+    [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} },
    1.97+
    1.98+    [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} },
    1.99+
   1.100+    [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} },
   1.101+
   1.102+    [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} },
   1.103+
   1.104+    [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} },
   1.105+
   1.106+};
   1.107+
   1.108+void set_layer_color(int layer) {
   1.109+  for (int i = 0; i < DRIVER_LED_TOTAL; i++) {
   1.110+    HSV hsv = {
   1.111+      .h = pgm_read_byte(&ledmap[layer][i][0]),
   1.112+      .s = pgm_read_byte(&ledmap[layer][i][1]),
   1.113+      .v = pgm_read_byte(&ledmap[layer][i][2]),
   1.114+    };
   1.115+    if (!hsv.h && !hsv.s && !hsv.v) {
   1.116+        rgb_matrix_set_color( i, 0, 0, 0 );
   1.117+    } else {
   1.118+        RGB rgb = hsv_to_rgb( hsv );
   1.119+        float f = (float)rgb_matrix_config.hsv.v / UINT8_MAX;
   1.120+        rgb_matrix_set_color( i, f * rgb.r, f * rgb.g, f * rgb.b );
   1.121+    }
   1.122+  }
   1.123+}
   1.124+
   1.125+void rgb_matrix_indicators_user(void) {
   1.126+  if (rawhid_state.rgb_control) {
   1.127+      return;
   1.128+  }
   1.129+  if (keyboard_config.disable_layer_led) { return; }
   1.130+  switch (biton32(layer_state)) {
   1.131+    case 0:
   1.132+      set_layer_color(0);
   1.133+      break;
   1.134+    case 1:
   1.135+      set_layer_color(1);
   1.136+      break;
   1.137+    case 2:
   1.138+      set_layer_color(2);
   1.139+      break;
   1.140+    case 3:
   1.141+      set_layer_color(3);
   1.142+      break;
   1.143+    case 4:
   1.144+      set_layer_color(4);
   1.145+      break;
   1.146+   default:
   1.147+    if (rgb_matrix_get_flags() == LED_FLAG_NONE)
   1.148+      rgb_matrix_set_color_all(0, 0, 0);
   1.149+    break;
   1.150+  }
   1.151+}
   1.152+
   1.153 bool process_record_user(uint16_t keycode, keyrecord_t *record) {
   1.154-    if (record->event.pressed) {
   1.155-        switch (keycode) {
   1.156-        case VRSN:
   1.157-            SEND_STRING (QMK_KEYBOARD "/" QMK_KEYMAP " @ " QMK_VERSION);
   1.158+  switch (keycode) {
   1.159+
   1.160+    case RGB_SLD:
   1.161+        if (rawhid_state.rgb_control) {
   1.162             return false;
   1.163         }
   1.164+        if (record->event.pressed) {
   1.165+            rgblight_mode(1);
   1.166+        }
   1.167+        return false;
   1.168+  }
   1.169+  return true;
   1.170+}
   1.171+
   1.172+
   1.173+typedef struct {
   1.174+    bool is_press_action;
   1.175+    uint8_t step;
   1.176+} tap;
   1.177+
   1.178+enum {
   1.179+    SINGLE_TAP = 1,
   1.180+    SINGLE_HOLD,
   1.181+    DOUBLE_TAP,
   1.182+    DOUBLE_HOLD,
   1.183+    DOUBLE_SINGLE_TAP,
   1.184+    MORE_TAPS
   1.185+};
   1.186+
   1.187+static tap dance_state[9];
   1.188+
   1.189+uint8_t dance_step(qk_tap_dance_state_t *state);
   1.190+
   1.191+uint8_t dance_step(qk_tap_dance_state_t *state) {
   1.192+    if (state->count == 1) {
   1.193+        if (state->interrupted || !state->pressed) return SINGLE_TAP;
   1.194+        else return SINGLE_HOLD;
   1.195+    } else if (state->count == 2) {
   1.196+        if (state->interrupted) return DOUBLE_SINGLE_TAP;
   1.197+        else if (state->pressed) return DOUBLE_HOLD;
   1.198+        else return DOUBLE_TAP;
   1.199     }
   1.200-    return true;
   1.201+    return MORE_TAPS;
   1.202+}
   1.203+
   1.204+
   1.205+void on_dance_0(qk_tap_dance_state_t *state, void *user_data);
   1.206+void dance_0_finished(qk_tap_dance_state_t *state, void *user_data);
   1.207+void dance_0_reset(qk_tap_dance_state_t *state, void *user_data);
   1.208+
   1.209+void on_dance_0(qk_tap_dance_state_t *state, void *user_data) {
   1.210+    if(state->count == 3) {
   1.211+        tap_code16(LCTL(KC_GRAVE));
   1.212+        tap_code16(LCTL(KC_GRAVE));
   1.213+        tap_code16(LCTL(KC_GRAVE));
   1.214+    }
   1.215+    if(state->count > 3) {
   1.216+        tap_code16(LCTL(KC_GRAVE));
   1.217+    }
   1.218+}
   1.219+
   1.220+void dance_0_finished(qk_tap_dance_state_t *state, void *user_data) {
   1.221+    dance_state[0].step = dance_step(state);
   1.222+    switch (dance_state[0].step) {
   1.223+        case SINGLE_TAP: register_code16(LCTL(KC_GRAVE)); break;
   1.224+        case SINGLE_HOLD: register_code16(LCTL(KC_V)); break;
   1.225+        case DOUBLE_TAP: register_code16(LCTL(KC_GRAVE)); register_code16(LCTL(KC_GRAVE)); break;
   1.226+        case DOUBLE_SINGLE_TAP: tap_code16(LCTL(KC_GRAVE)); register_code16(LCTL(KC_GRAVE));
   1.227+    }
   1.228+}
   1.229+
   1.230+void dance_0_reset(qk_tap_dance_state_t *state, void *user_data) {
   1.231+    wait_ms(10);
   1.232+    switch (dance_state[0].step) {
   1.233+        case SINGLE_TAP: unregister_code16(LCTL(KC_GRAVE)); break;
   1.234+        case SINGLE_HOLD: unregister_code16(LCTL(KC_V)); break;
   1.235+        case DOUBLE_TAP: unregister_code16(LCTL(KC_GRAVE)); break;
   1.236+        case DOUBLE_SINGLE_TAP: unregister_code16(LCTL(KC_GRAVE)); break;
   1.237+    }
   1.238+    dance_state[0].step = 0;
   1.239+}
   1.240+void on_dance_1(qk_tap_dance_state_t *state, void *user_data);
   1.241+void dance_1_finished(qk_tap_dance_state_t *state, void *user_data);
   1.242+void dance_1_reset(qk_tap_dance_state_t *state, void *user_data);
   1.243+
   1.244+void on_dance_1(qk_tap_dance_state_t *state, void *user_data) {
   1.245+    if(state->count == 3) {
   1.246+        tap_code16(KC_9);
   1.247+        tap_code16(KC_9);
   1.248+        tap_code16(KC_9);
   1.249+    }
   1.250+    if(state->count > 3) {
   1.251+        tap_code16(KC_9);
   1.252+    }
   1.253+}
   1.254+
   1.255+void dance_1_finished(qk_tap_dance_state_t *state, void *user_data) {
   1.256+    dance_state[1].step = dance_step(state);
   1.257+    switch (dance_state[1].step) {
   1.258+        case SINGLE_TAP: register_code16(KC_9); break;
   1.259+        case SINGLE_HOLD: register_code16(LCTL(KC_X)); break;
   1.260+        case DOUBLE_TAP: register_code16(KC_9); register_code16(KC_9); break;
   1.261+        case DOUBLE_SINGLE_TAP: tap_code16(KC_9); register_code16(KC_9);
   1.262+    }
   1.263+}
   1.264+
   1.265+void dance_1_reset(qk_tap_dance_state_t *state, void *user_data) {
   1.266+    wait_ms(10);
   1.267+    switch (dance_state[1].step) {
   1.268+        case SINGLE_TAP: unregister_code16(KC_9); break;
   1.269+        case SINGLE_HOLD: unregister_code16(LCTL(KC_X)); break;
   1.270+        case DOUBLE_TAP: unregister_code16(KC_9); break;
   1.271+        case DOUBLE_SINGLE_TAP: unregister_code16(KC_9); break;
   1.272+    }
   1.273+    dance_state[1].step = 0;
   1.274+}
   1.275+void on_dance_2(qk_tap_dance_state_t *state, void *user_data);
   1.276+void dance_2_finished(qk_tap_dance_state_t *state, void *user_data);
   1.277+void dance_2_reset(qk_tap_dance_state_t *state, void *user_data);
   1.278+
   1.279+void on_dance_2(qk_tap_dance_state_t *state, void *user_data) {
   1.280+    if(state->count == 3) {
   1.281+        tap_code16(KC_0);
   1.282+        tap_code16(KC_0);
   1.283+        tap_code16(KC_0);
   1.284+    }
   1.285+    if(state->count > 3) {
   1.286+        tap_code16(KC_0);
   1.287+    }
   1.288+}
   1.289+
   1.290+void dance_2_finished(qk_tap_dance_state_t *state, void *user_data) {
   1.291+    dance_state[2].step = dance_step(state);
   1.292+    switch (dance_state[2].step) {
   1.293+        case SINGLE_TAP: register_code16(KC_0); break;
   1.294+        case SINGLE_HOLD: register_code16(LCTL(KC_C)); break;
   1.295+        case DOUBLE_TAP: register_code16(KC_0); register_code16(KC_0); break;
   1.296+        case DOUBLE_SINGLE_TAP: tap_code16(KC_0); register_code16(KC_0);
   1.297+    }
   1.298+}
   1.299+
   1.300+void dance_2_reset(qk_tap_dance_state_t *state, void *user_data) {
   1.301+    wait_ms(10);
   1.302+    switch (dance_state[2].step) {
   1.303+        case SINGLE_TAP: unregister_code16(KC_0); break;
   1.304+        case SINGLE_HOLD: unregister_code16(LCTL(KC_C)); break;
   1.305+        case DOUBLE_TAP: unregister_code16(KC_0); break;
   1.306+        case DOUBLE_SINGLE_TAP: unregister_code16(KC_0); break;
   1.307+    }
   1.308+    dance_state[2].step = 0;
   1.309+}
   1.310+void on_dance_3(qk_tap_dance_state_t *state, void *user_data);
   1.311+void dance_3_finished(qk_tap_dance_state_t *state, void *user_data);
   1.312+void dance_3_reset(qk_tap_dance_state_t *state, void *user_data);
   1.313+
   1.314+void on_dance_3(qk_tap_dance_state_t *state, void *user_data) {
   1.315+    if(state->count == 3) {
   1.316+        tap_code16(LALT(KC_SPACE));
   1.317+        tap_code16(LALT(KC_SPACE));
   1.318+        tap_code16(LALT(KC_SPACE));
   1.319+    }
   1.320+    if(state->count > 3) {
   1.321+        tap_code16(LALT(KC_SPACE));
   1.322+    }
   1.323+}
   1.324+
   1.325+void dance_3_finished(qk_tap_dance_state_t *state, void *user_data) {
   1.326+    dance_state[3].step = dance_step(state);
   1.327+    switch (dance_state[3].step) {
   1.328+        case SINGLE_TAP: register_code16(LALT(KC_SPACE)); break;
   1.329+        case SINGLE_HOLD: register_code16(KC_LGUI); break;
   1.330+        case DOUBLE_TAP: register_code16(LALT(KC_SPACE)); register_code16(LALT(KC_SPACE)); break;
   1.331+        case DOUBLE_SINGLE_TAP: tap_code16(LALT(KC_SPACE)); register_code16(LALT(KC_SPACE));
   1.332+    }
   1.333+}
   1.334+
   1.335+void dance_3_reset(qk_tap_dance_state_t *state, void *user_data) {
   1.336+    wait_ms(10);
   1.337+    switch (dance_state[3].step) {
   1.338+        case SINGLE_TAP: unregister_code16(LALT(KC_SPACE)); break;
   1.339+        case SINGLE_HOLD: unregister_code16(KC_LGUI); break;
   1.340+        case DOUBLE_TAP: unregister_code16(LALT(KC_SPACE)); break;
   1.341+        case DOUBLE_SINGLE_TAP: unregister_code16(LALT(KC_SPACE)); break;
   1.342+    }
   1.343+    dance_state[3].step = 0;
   1.344+}
   1.345+void on_dance_4(qk_tap_dance_state_t *state, void *user_data);
   1.346+void dance_4_finished(qk_tap_dance_state_t *state, void *user_data);
   1.347+void dance_4_reset(qk_tap_dance_state_t *state, void *user_data);
   1.348+
   1.349+void on_dance_4(qk_tap_dance_state_t *state, void *user_data) {
   1.350+    if(state->count == 3) {
   1.351+        tap_code16(LGUI(KC_2));
   1.352+        tap_code16(LGUI(KC_2));
   1.353+        tap_code16(LGUI(KC_2));
   1.354+    }
   1.355+    if(state->count > 3) {
   1.356+        tap_code16(LGUI(KC_2));
   1.357+    }
   1.358 }
   1.359+
   1.360+void dance_4_finished(qk_tap_dance_state_t *state, void *user_data) {
   1.361+    dance_state[4].step = dance_step(state);
   1.362+    switch (dance_state[4].step) {
   1.363+        case SINGLE_TAP: register_code16(LGUI(KC_2)); break;
   1.364+        case SINGLE_HOLD: layer_on(4); break;
   1.365+        case DOUBLE_TAP: register_code16(LGUI(KC_2)); register_code16(LGUI(KC_2)); break;
   1.366+        case DOUBLE_SINGLE_TAP: tap_code16(LGUI(KC_2)); register_code16(LGUI(KC_2));
   1.367+    }
   1.368+}
   1.369+
   1.370+void dance_4_reset(qk_tap_dance_state_t *state, void *user_data) {
   1.371+    wait_ms(10);
   1.372+    switch (dance_state[4].step) {
   1.373+        case SINGLE_TAP: unregister_code16(LGUI(KC_2)); break;
   1.374+        case SINGLE_HOLD: layer_off(4); break;
   1.375+        case DOUBLE_TAP: unregister_code16(LGUI(KC_2)); break;
   1.376+        case DOUBLE_SINGLE_TAP: unregister_code16(LGUI(KC_2)); break;
   1.377+    }
   1.378+    dance_state[4].step = 0;
   1.379+}
   1.380+void on_dance_5(qk_tap_dance_state_t *state, void *user_data);
   1.381+void dance_5_finished(qk_tap_dance_state_t *state, void *user_data);
   1.382+void dance_5_reset(qk_tap_dance_state_t *state, void *user_data);
   1.383+
   1.384+void on_dance_5(qk_tap_dance_state_t *state, void *user_data) {
   1.385+    if(state->count == 3) {
   1.386+        tap_code16(KC_PSCREEN);
   1.387+        tap_code16(KC_PSCREEN);
   1.388+        tap_code16(KC_PSCREEN);
   1.389+    }
   1.390+    if(state->count > 3) {
   1.391+        tap_code16(KC_PSCREEN);
   1.392+    }
   1.393+}
   1.394+
   1.395+void dance_5_finished(qk_tap_dance_state_t *state, void *user_data) {
   1.396+    dance_state[5].step = dance_step(state);
   1.397+    switch (dance_state[5].step) {
   1.398+        case SINGLE_TAP: register_code16(KC_PSCREEN); break;
   1.399+        case SINGLE_HOLD: register_code16(LGUI(LSFT(KC_S))); break;
   1.400+        case DOUBLE_TAP: register_code16(KC_PSCREEN); register_code16(KC_PSCREEN); break;
   1.401+        case DOUBLE_SINGLE_TAP: tap_code16(KC_PSCREEN); register_code16(KC_PSCREEN);
   1.402+    }
   1.403+}
   1.404+
   1.405+void dance_5_reset(qk_tap_dance_state_t *state, void *user_data) {
   1.406+    wait_ms(10);
   1.407+    switch (dance_state[5].step) {
   1.408+        case SINGLE_TAP: unregister_code16(KC_PSCREEN); break;
   1.409+        case SINGLE_HOLD: unregister_code16(LGUI(LSFT(KC_S))); break;
   1.410+        case DOUBLE_TAP: unregister_code16(KC_PSCREEN); break;
   1.411+        case DOUBLE_SINGLE_TAP: unregister_code16(KC_PSCREEN); break;
   1.412+    }
   1.413+    dance_state[5].step = 0;
   1.414+}
   1.415+void dance_6_finished(qk_tap_dance_state_t *state, void *user_data);
   1.416+void dance_6_reset(qk_tap_dance_state_t *state, void *user_data);
   1.417+
   1.418+void dance_6_finished(qk_tap_dance_state_t *state, void *user_data) {
   1.419+    dance_state[6].step = dance_step(state);
   1.420+    switch (dance_state[6].step) {
   1.421+        case SINGLE_TAP: layer_move(0); break;
   1.422+        case SINGLE_HOLD: layer_on(4); break;
   1.423+        case DOUBLE_TAP: layer_move(0); break;
   1.424+        case DOUBLE_SINGLE_TAP: layer_move(0); break;
   1.425+    }
   1.426+}
   1.427+
   1.428+void dance_6_reset(qk_tap_dance_state_t *state, void *user_data) {
   1.429+    wait_ms(10);
   1.430+    switch (dance_state[6].step) {
   1.431+        case SINGLE_HOLD: layer_off(4); break;
   1.432+    }
   1.433+    dance_state[6].step = 0;
   1.434+}
   1.435+void on_dance_7(qk_tap_dance_state_t *state, void *user_data);
   1.436+void dance_7_finished(qk_tap_dance_state_t *state, void *user_data);
   1.437+void dance_7_reset(qk_tap_dance_state_t *state, void *user_data);
   1.438+
   1.439+void on_dance_7(qk_tap_dance_state_t *state, void *user_data) {
   1.440+    if(state->count == 3) {
   1.441+        tap_code16(KC_LCBR);
   1.442+        tap_code16(KC_LCBR);
   1.443+        tap_code16(KC_LCBR);
   1.444+    }
   1.445+    if(state->count > 3) {
   1.446+        tap_code16(KC_LCBR);
   1.447+    }
   1.448+}
   1.449+
   1.450+void dance_7_finished(qk_tap_dance_state_t *state, void *user_data) {
   1.451+    dance_state[7].step = dance_step(state);
   1.452+    switch (dance_state[7].step) {
   1.453+        case SINGLE_TAP: register_code16(KC_LCBR); break;
   1.454+        case SINGLE_HOLD: register_code16(KC_LSHIFT); break;
   1.455+        case DOUBLE_TAP: register_code16(KC_LCBR); register_code16(KC_LCBR); break;
   1.456+        case DOUBLE_SINGLE_TAP: tap_code16(KC_LCBR); register_code16(KC_LCBR);
   1.457+    }
   1.458+}
   1.459+
   1.460+void dance_7_reset(qk_tap_dance_state_t *state, void *user_data) {
   1.461+    wait_ms(10);
   1.462+    switch (dance_state[7].step) {
   1.463+        case SINGLE_TAP: unregister_code16(KC_LCBR); break;
   1.464+        case SINGLE_HOLD: unregister_code16(KC_LSHIFT); break;
   1.465+        case DOUBLE_TAP: unregister_code16(KC_LCBR); break;
   1.466+        case DOUBLE_SINGLE_TAP: unregister_code16(KC_LCBR); break;
   1.467+    }
   1.468+    dance_state[7].step = 0;
   1.469+}
   1.470+void on_dance_8(qk_tap_dance_state_t *state, void *user_data);
   1.471+void dance_8_finished(qk_tap_dance_state_t *state, void *user_data);
   1.472+void dance_8_reset(qk_tap_dance_state_t *state, void *user_data);
   1.473+
   1.474+void on_dance_8(qk_tap_dance_state_t *state, void *user_data) {
   1.475+    if(state->count == 3) {
   1.476+        tap_code16(KC_RCBR);
   1.477+        tap_code16(KC_RCBR);
   1.478+        tap_code16(KC_RCBR);
   1.479+    }
   1.480+    if(state->count > 3) {
   1.481+        tap_code16(KC_RCBR);
   1.482+    }
   1.483+}
   1.484+
   1.485+void dance_8_finished(qk_tap_dance_state_t *state, void *user_data) {
   1.486+    dance_state[8].step = dance_step(state);
   1.487+    switch (dance_state[8].step) {
   1.488+        case SINGLE_TAP: register_code16(KC_RCBR); break;
   1.489+        case SINGLE_HOLD: register_code16(KC_RSHIFT); break;
   1.490+        case DOUBLE_TAP: register_code16(KC_RCBR); register_code16(KC_RCBR); break;
   1.491+        case DOUBLE_SINGLE_TAP: tap_code16(KC_RCBR); register_code16(KC_RCBR);
   1.492+    }
   1.493+}
   1.494+
   1.495+void dance_8_reset(qk_tap_dance_state_t *state, void *user_data) {
   1.496+    wait_ms(10);
   1.497+    switch (dance_state[8].step) {
   1.498+        case SINGLE_TAP: unregister_code16(KC_RCBR); break;
   1.499+        case SINGLE_HOLD: unregister_code16(KC_RSHIFT); break;
   1.500+        case DOUBLE_TAP: unregister_code16(KC_RCBR); break;
   1.501+        case DOUBLE_SINGLE_TAP: unregister_code16(KC_RCBR); break;
   1.502+    }
   1.503+    dance_state[8].step = 0;
   1.504+}
   1.505+
   1.506+qk_tap_dance_action_t tap_dance_actions[] = {
   1.507+        [DANCE_0] = ACTION_TAP_DANCE_FN_ADVANCED(on_dance_0, dance_0_finished, dance_0_reset),
   1.508+        [DANCE_1] = ACTION_TAP_DANCE_FN_ADVANCED(on_dance_1, dance_1_finished, dance_1_reset),
   1.509+        [DANCE_2] = ACTION_TAP_DANCE_FN_ADVANCED(on_dance_2, dance_2_finished, dance_2_reset),
   1.510+        [DANCE_3] = ACTION_TAP_DANCE_FN_ADVANCED(on_dance_3, dance_3_finished, dance_3_reset),
   1.511+        [DANCE_4] = ACTION_TAP_DANCE_FN_ADVANCED(on_dance_4, dance_4_finished, dance_4_reset),
   1.512+        [DANCE_5] = ACTION_TAP_DANCE_FN_ADVANCED(on_dance_5, dance_5_finished, dance_5_reset),
   1.513+        [DANCE_6] = ACTION_TAP_DANCE_FN_ADVANCED(NULL, dance_6_finished, dance_6_reset),
   1.514+        [DANCE_7] = ACTION_TAP_DANCE_FN_ADVANCED(on_dance_7, dance_7_finished, dance_7_reset),
   1.515+        [DANCE_8] = ACTION_TAP_DANCE_FN_ADVANCED(on_dance_8, dance_8_finished, dance_8_reset),
   1.516+};