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+};