diff --git a/moonlander/qmk_firmware/keyboards/zsa/moonlander/keymaps/main/config.h b/moonlander/qmk_firmware/keyboards/zsa/moonlander/keymaps/main/config.h
index 22827a5..86b6c22 100644
--- a/moonlander/qmk_firmware/keyboards/zsa/moonlander/keymaps/main/config.h
+++ b/moonlander/qmk_firmware/keyboards/zsa/moonlander/keymaps/main/config.h
@@ -1,8 +1,8 @@
+#define CHORDAL_HOLD
#undef RGB_MATRIX_TIMEOUT
#define RGB_MATRIX_TIMEOUT 300000
#define USB_SUSPEND_WAKEUP_DELAY 0
-#define SERIAL_NUMBER "Kqb5l/MaB6VN"
#define LAYER_STATE_8BIT
#define RGB_MATRIX_STARTUP_SPD 60
diff --git a/moonlander/qmk_firmware/keyboards/zsa/moonlander/keymaps/main/keymap.c b/moonlander/qmk_firmware/keyboards/zsa/moonlander/keymaps/main/keymap.c
index 0e24f87..31ba9d9 100644
--- a/moonlander/qmk_firmware/keyboards/zsa/moonlander/keymaps/main/keymap.c
+++ b/moonlander/qmk_firmware/keyboards/zsa/moonlander/keymaps/main/keymap.c
@@ -11,50 +11,86 @@ enum custom_keycodes {
+enum tap_dance_codes {
+ DANCE_0,
+ DANCE_1,
+ DANCE_2,
+ DANCE_3,
+ DANCE_4,
+ DANCE_5,
+};
+
+#define DUAL_FUNC_0 LT(2, KC_6)
+#define DUAL_FUNC_1 LT(14, KC_E)
+#define DUAL_FUNC_2 LT(13, KC_F22)
+#define DUAL_FUNC_3 LT(7, KC_H)
+#define DUAL_FUNC_4 LT(12, KC_0)
+#define DUAL_FUNC_5 LT(11, KC_8)
+#define DUAL_FUNC_6 LT(1, KC_C)
+#define DUAL_FUNC_7 LT(1, KC_F8)
+#define DUAL_FUNC_8 LT(3, KC_F12)
+#define DUAL_FUNC_9 LT(6, KC_F1)
+#define DUAL_FUNC_10 LT(5, KC_W)
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
[0] = LAYOUT_moonlander(
- LSFT(KC_LEFT_ALT),KC_1, KC_2, KC_3, KC_4, KC_5, KC_LEFT, KC_RIGHT, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINUS,
- KC_LEFT_ALT, KC_Q, KC_W, KC_E, KC_R, KC_T, TG(3), MEH_T(KC_TAB), KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSLS,
- KC_LEFT_CTRL, KC_A, KC_S, KC_D, KC_F, KC_G, TG(2), KC_GRAVE, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOTE,
- KC_LEFT_SHIFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_SLASH, KC_EQUAL, KC_UP, TG(1),
- KC_LEFT_CTRL, TG(4), KC_LEFT_ALT, KC_COMMA, KC_DOT, KC_LEFT_GUI, MT(MOD_LCTL, KC_ESCAPE),KC_LBRC, KC_RBRC, KC_LEFT, KC_DOWN, KC_RIGHT,
- MT(MOD_LGUI, KC_SPACE),KC_BSPC, KC_DELETE, MT(MOD_RALT, KC_TAB),KC_ENTER, ALL_T(KC_SPACE)
+ LSFT(KC_LEFT_ALT),KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_RIGHT_ALT, KC_RIGHT_ALT, KC_AMPR, KC_LPRN, KC_ASTR, KC_CIRC, KC_RPRN, KC_NO,
+ KC_TAB, KC_QUOTE, KC_COMMA, KC_DOT, KC_P, KC_Y, TG(5), CW_TOGG, KC_F, KC_G, KC_C, KC_R, KC_L, KC_SLASH,
+ LT(2, KC_ENTER),MT(MOD_LGUI, KC_A),MT(MOD_LALT, KC_O),MT(MOD_LCTL, KC_E),MT(MOD_LSFT, KC_U),LT(4, KC_I), TT(4), KC_GRAVE, LT(4, KC_D), MT(MOD_LSFT, KC_H),MT(MOD_LCTL, KC_T),MT(MOD_LALT, KC_N),MT(MOD_LGUI, KC_S),KC_MINUS,
+ KC_ESCAPE, KC_SCLN, KC_Q, KC_J, KC_K, KC_X, KC_B, KC_M, KC_W, KC_V, KC_Z, KC_BSLS,
+ TO(1), TG(3), KC_TRANSPARENT, KC_NO, KC_EQUAL, KC_NO, KC_NO, KC_LBRC, KC_RBRC, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT,
+ KC_SPACE, KC_BSPC, KC_DELETE, KC_TAB, KC_ENTER, KC_SPACE
),
[1] = LAYOUT_moonlander(
+ LSFT(KC_LEFT_ALT),LSFT(KC_1), LSFT(KC_2), LSFT(KC_3), LSFT(KC_4), LSFT(KC_5), KC_RIGHT_ALT, KC_RIGHT_ALT, LSFT(KC_6), LSFT(KC_7), LSFT(KC_8), LSFT(KC_9), LSFT(KC_0), KC_NO,
+ KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, TG(5), CW_TOGG, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSLS,
+ LT(2, KC_ENTER),MT(MOD_LGUI, KC_A),MT(MOD_LALT, KC_S),MT(MOD_RCTL, KC_D),MT(MOD_LSFT, KC_F),LT(4, KC_G), TT(4), KC_GRAVE, LT(4, KC_H), MT(MOD_LSFT, KC_J),MT(MOD_RCTL, KC_K),MT(MOD_LALT, KC_L),MT(MOD_LGUI, KC_SCLN),KC_QUOTE,
+ KC_ESCAPE, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_SLASH, KC_EQUAL, KC_MINUS, KC_TRANSPARENT,
+ TO(0), TG(3), KC_TRANSPARENT, KC_COMMA, KC_DOT, KC_LEFT_GUI, MT(MOD_LCTL, KC_ESCAPE),KC_LBRC, KC_RBRC, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT,
+ KC_SPACE, KC_BSPC, KC_DELETE, KC_TAB, KC_ENTER, KC_SPACE
+ ),
+ [2] = LAYOUT_moonlander(
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,
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,
- KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_LEFT, KC_DOWN, KC_UP, KC_RIGHT, KC_TRANSPARENT, KC_TRANSPARENT,
+ KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_LEFT, KC_DOWN, KC_UP, KC_RIGHT, KC_TRANSPARENT,
KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_INSERT, KC_PAGE_UP, KC_TRANSPARENT,
KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_LPRN, KC_RPRN, KC_HOME, KC_PGDN, KC_END,
KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT
),
- [2] = LAYOUT_moonlander(
- KC_ESCAPE, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_TRANSPARENT, KC_TRANSPARENT, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11,
- KC_TRANSPARENT, KC_EXLM, KC_AT, KC_LCBR, KC_RCBR, KC_PIPE, KC_TRANSPARENT, KC_TRANSPARENT, KC_UP, KC_7, KC_8, KC_9, KC_ASTR, KC_F12,
- KC_TRANSPARENT, KC_HASH, KC_DLR, KC_LPRN, KC_RPRN, KC_GRAVE, KC_TRANSPARENT, KC_TRANSPARENT, KC_DOWN, KC_4, KC_5, KC_6, KC_KP_PLUS, KC_TRANSPARENT,
- KC_TRANSPARENT, KC_PERC, KC_CIRC, KC_LBRC, KC_RBRC, KC_TILD, KC_AMPR, KC_1, KC_2, KC_3, KC_BSLS, KC_TRANSPARENT,
- KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, RGB_MODE_FORWARD, RGB_TOG, KC_0, KC_0, KC_DOT, KC_EQUAL, KC_TRANSPARENT,
- RGB_VAD, RGB_VAI, TOGGLE_LAYER_COLOR, RGB_SLD, RGB_HUD, RGB_HUI
- ),
[3] = LAYOUT_moonlander(
- KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, QK_MUSIC_ON, KC_TRANSPARENT, DM_REC1, DM_REC2, DM_RSTP, KC_TRANSPARENT, QK_BOOT,
- KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_MS_UP, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, QK_MUSIC_OFF, KC_TRANSPARENT, DM_PLY1, DM_PLY2, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT,
- KC_TRANSPARENT, KC_TRANSPARENT, KC_MS_LEFT, KC_MS_DOWN, KC_MS_RIGHT, 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, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_AUDIO_VOL_UP,KC_TRANSPARENT,
- KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_MS_BTN1, KC_MS_BTN2, KC_MS_JIGGLER_TOGGLE, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_AUDIO_MUTE, KC_AUDIO_VOL_DOWN,KC_RIGHT_CTRL,
- KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT
+ KC_ESCAPE, KC_1, KC_2, KC_3, KC_4, KC_5, KC_F5, DUAL_FUNC_0, KC_6, KC_7, KC_8, KC_9, KC_0, KC_F12,
+ KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_I, KC_NO, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSLS,
+ KC_LEFT_CTRL, KC_A, KC_S, KC_D, KC_F, KC_G, KC_TRANSPARENT, KC_GRAVE, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOTE,
+ KC_LEFT_SHIFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_SLASH, KC_EQUAL, KC_MINUS, KC_UP,
+ KC_M, KC_TRANSPARENT, KC_LEFT_ALT, KC_COMMA, KC_DOT, KC_ENTER, KC_TRANSPARENT, KC_LBRC, KC_RBRC, KC_LEFT, KC_DOWN, KC_RIGHT,
+ KC_SPACE, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT
),
[4] = LAYOUT_moonlander(
- 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,
- KC_TAB, KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT,
- KC_LEFT_CTRL, KC_LEFT_CTRL, KC_A, KC_S, KC_D, KC_F, KC_G, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT,
- KC_LEFT_SHIFT, KC_LEFT_SHIFT, KC_Z, KC_X, KC_C, KC_V, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT,
- KC_LEFT_CTRL, KC_TRANSPARENT, KC_LEFT_ALT, KC_TRANSPARENT, KC_B, KC_ENTER, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT,
- KC_SPACE, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT
+ KC_ESCAPE, DUAL_FUNC_1, DUAL_FUNC_2, DUAL_FUNC_3, DUAL_FUNC_4, DUAL_FUNC_5, KC_TRANSPARENT, KC_TRANSPARENT, DUAL_FUNC_6, DUAL_FUNC_7, DUAL_FUNC_8, DUAL_FUNC_9, DUAL_FUNC_10, KC_TRANSPARENT,
+ KC_TRANSPARENT, KC_EXLM, KC_AT, KC_LCBR, KC_RCBR, KC_PIPE, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_7, KC_8, KC_9, KC_ASTR, KC_TRANSPARENT,
+ KC_TRANSPARENT, KC_HASH, KC_DLR, KC_LPRN, KC_RPRN, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, TD(DANCE_0), TD(DANCE_1), TD(DANCE_2), KC_PLUS, KC_TRANSPARENT,
+ KC_TRANSPARENT, KC_PERC, KC_CIRC, KC_LBRC, KC_RBRC, KC_TILD, KC_AMPR, TD(DANCE_3), TD(DANCE_4), TD(DANCE_5), KC_SLASH, KC_TRANSPARENT,
+ KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, RGB_MODE_FORWARD, RGB_TOG, KC_0, KC_X, KC_DOT, KC_EQUAL, KC_TRANSPARENT,
+ RGB_VAD, RGB_VAI, TOGGLE_LAYER_COLOR, RGB_SLD, RGB_HUD, RGB_HUI
+ ),
+ [5] = LAYOUT_moonlander(
+ KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, QK_MUSIC_ON, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, QK_BOOT,
+ KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_MS_UP, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, QK_MUSIC_OFF, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT,
+ KC_TRANSPARENT, KC_TRANSPARENT, KC_MS_LEFT, KC_MS_DOWN, KC_MS_RIGHT, 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, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_AUDIO_VOL_UP,KC_TRANSPARENT,
+ KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_MS_WH_UP, KC_MS_WH_DOWN, KC_MS_JIGGLER_TOGGLE, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_AUDIO_MUTE, KC_AUDIO_VOL_DOWN,KC_TRANSPARENT,
+ KC_MS_BTN1, KC_MS_BTN2, KC_MS_BTN3, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT
),
};
+const char chordal_hold_layout[MATRIX_ROWS][MATRIX_COLS] PROGMEM = LAYOUT(
+ 'L', 'L', 'L', 'L', 'L', 'L', 'L', 'R', 'R', 'R', 'R', 'R', 'R', 'R',
+ 'L', 'L', 'L', 'L', 'L', 'L', 'L', 'R', 'R', 'R', 'R', 'R', 'R', 'R',
+ 'L', 'L', 'L', 'L', 'L', 'L', 'L', 'R', 'R', 'R', 'R', 'R', 'R', 'R',
+ 'L', 'L', 'L', 'L', 'L', 'L', 'R', 'R', 'R', 'R', 'R', 'R',
+ 'L', 'L', 'L', 'L', 'L', '*', '*', 'R', 'R', 'R', 'R', 'R',
+ '*', '*', '*', '*', '*', '*'
+);
@@ -72,15 +108,17 @@ void keyboard_post_init_user(void) {
}
const uint8_t PROGMEM ledmap[][RGB_MATRIX_LED_COUNT][3] = {
- [0] = { {173,205,220}, {131,81,242}, {131,81,242}, {131,81,242}, {131,81,242}, {205,82,242}, {205,82,242}, {205,82,242}, {205,82,242}, {87,218,204}, {205,82,242}, {205,82,242}, {205,82,242}, {205,82,242}, {131,81,242}, {205,82,242}, {205,82,242}, {205,82,242}, {205,82,242}, {205,82,242}, {205,82,242}, {205,82,242}, {205,82,242}, {205,82,242}, {205,82,242}, {205,82,242}, {205,82,242}, {205,82,242}, {205,82,242}, {205,82,242}, {180,255,233}, {14,222,242}, {131,81,242}, {205,82,242}, {205,82,242}, {131,81,242}, {205,82,242}, {205,82,242}, {205,82,242}, {205,255,255}, {205,82,242}, {205,82,242}, {205,82,242}, {205,82,242}, {205,82,242}, {205,82,242}, {205,82,242}, {205,82,242}, {205,82,242}, {205,82,242}, {205,82,242}, {205,82,242}, {205,82,242}, {205,82,242}, {205,82,242}, {205,82,242}, {205,82,242}, {205,82,242}, {205,82,242}, {205,82,242}, {205,82,242}, {205,82,242}, {205,82,242}, {205,82,242}, {205,82,242}, {205,82,242}, {131,81,242}, {205,82,242}, {131,81,242}, {44,233,244}, {131,81,242}, {131,81,242} },
+ [0] = { {173,205,220}, {131,81,242}, {44,233,244}, {131,81,242}, {180,255,233}, {205,82,242}, {205,82,242}, {131,81,242}, {205,82,242}, {87,218,204}, {205,82,242}, {205,82,242}, {131,81,242}, {205,82,242}, {205,82,242}, {205,82,242}, {205,82,242}, {131,81,242}, {205,82,242}, {205,82,242}, {205,82,242}, {205,82,242}, {131,81,242}, {205,82,242}, {205,82,242}, {205,82,242}, {205,82,242}, {14,222,242}, {205,82,242}, {131,81,242}, {180,255,233}, {14,222,242}, {131,81,242}, {131,81,242}, {131,81,242}, {131,81,242}, {205,82,242}, {205,82,242}, {205,82,242}, {205,82,242}, {205,82,242}, {205,82,242}, {205,82,242}, {131,81,242}, {205,82,242}, {205,82,242}, {205,82,242}, {205,82,242}, {131,81,242}, {205,82,242}, {205,82,242}, {205,82,242}, {205,82,242}, {131,81,242}, {205,82,242}, {205,82,242}, {205,82,242}, {205,82,242}, {131,81,242}, {205,82,242}, {205,82,242}, {205,82,242}, {205,82,242}, {14,222,242}, {205,82,242}, {131,81,242}, {131,81,242}, {205,82,242}, {131,81,242}, {44,233,244}, {131,81,242}, {131,81,242} },
- [1] = { {0,0,0}, {0,0,0}, {0,0,0}, {0,0,0}, {0,0,0}, {0,0,0}, {0,0,0}, {0,0,0}, {0,0,0}, {0,0,0}, {0,0,0}, {0,0,0}, {0,0,0}, {0,0,0}, {0,0,0}, {0,0,0}, {0,0,0}, {0,0,0}, {0,0,0}, {0,0,0}, {0,0,0}, {0,0,0}, {0,0,0}, {0,0,0}, {0,0,0}, {0,0,0}, {0,0,0}, {0,0,0}, {0,0,0}, {0,0,0}, {0,0,0}, {0,0,0}, {0,0,0}, {0,0,0}, {0,0,0}, {0,0,0}, {0,0,0}, {0,0,0}, {0,0,0}, {0,0,0}, {205,255,255}, {0,0,0}, {0,0,0}, {0,0,0}, {205,255,255}, {205,255,255}, {0,0,0}, {0,0,0}, {205,255,255}, {205,255,255}, {205,255,255}, {0,0,0}, {0,0,0}, {205,255,255}, {0,0,0}, {205,255,255}, {0,0,0}, {0,0,0}, {205,255,255}, {0,0,0}, {205,255,255}, {0,0,0}, {0,0,0}, {205,255,255}, {0,0,0}, {0,0,0}, {0,0,0}, {0,0,0}, {0,0,0}, {0,0,0}, {0,0,0}, {0,0,0} },
+ [1] = { {173,205,220}, {131,81,242}, {44,233,244}, {131,81,242}, {220,81,242}, {205,82,242}, {205,82,242}, {131,81,242}, {205,82,242}, {87,218,204}, {205,82,242}, {205,82,242}, {131,81,242}, {205,82,242}, {205,82,242}, {205,82,242}, {205,82,242}, {131,81,242}, {205,82,242}, {205,82,242}, {205,82,242}, {205,82,242}, {131,81,242}, {205,82,242}, {205,82,242}, {205,82,242}, {205,82,242}, {14,222,242}, {205,82,242}, {205,82,242}, {180,255,233}, {14,222,242}, {131,81,242}, {205,82,242}, {205,82,242}, {131,81,242}, {205,82,242}, {205,82,242}, {205,82,242}, {205,82,242}, {205,82,242}, {205,82,242}, {205,82,242}, {131,81,242}, {205,82,242}, {205,82,242}, {205,82,242}, {205,82,242}, {131,81,242}, {205,82,242}, {205,82,242}, {205,82,242}, {205,82,242}, {131,81,242}, {205,82,242}, {205,82,242}, {205,82,242}, {205,82,242}, {131,81,242}, {205,82,242}, {205,82,242}, {205,82,242}, {205,82,242}, {14,222,242}, {205,82,242}, {205,82,242}, {131,81,242}, {205,82,242}, {131,81,242}, {44,233,244}, {131,81,242}, {131,81,242} },
- [2] = { {0,0,0}, {0,0,0}, {0,0,0}, {0,0,0}, {0,0,0}, {14,222,242}, {0,0,0}, {0,0,0}, {0,0,0}, {0,0,0}, {14,222,242}, {0,0,0}, {0,0,0}, {0,0,0}, {0,0,0}, {14,222,242}, {0,0,0}, {0,0,0}, {0,0,0}, {0,0,0}, {14,222,242}, {0,0,0}, {0,0,0}, {0,0,0}, {0,0,0}, {14,222,242}, {0,0,0}, {0,0,0}, {0,0,0}, {0,0,0}, {0,0,0}, {14,222,242}, {0,0,0}, {0,0,0}, {0,0,0}, {0,0,0}, {14,222,242}, {14,222,242}, {0,0,0}, {0,0,0}, {0,0,0}, {14,222,242}, {0,0,0}, {0,0,0}, {0,0,0}, {0,0,0}, {14,222,242}, {205,255,255}, {205,255,255}, {205,255,255}, {205,255,255}, {14,222,242}, {205,255,255}, {205,255,255}, {205,255,255}, {205,255,255}, {14,222,242}, {205,255,255}, {205,255,255}, {205,255,255}, {205,255,255}, {14,222,242}, {0,0,0}, {0,0,0}, {0,0,0}, {0,0,0}, {0,0,0}, {0,0,0}, {0,0,0}, {0,0,0}, {0,0,0}, {0,0,0} },
+ [2] = { {0,0,0}, {0,0,0}, {0,0,0}, {0,0,0}, {0,0,0}, {0,0,0}, {0,0,0}, {0,0,0}, {0,0,0}, {0,0,0}, {0,0,0}, {0,0,0}, {0,0,0}, {0,0,0}, {0,0,0}, {0,0,0}, {0,0,0}, {0,0,0}, {0,0,0}, {0,0,0}, {0,0,0}, {0,0,0}, {0,0,0}, {0,0,0}, {0,0,0}, {0,0,0}, {0,0,0}, {0,0,0}, {0,0,0}, {0,0,0}, {0,0,0}, {0,0,0}, {0,0,0}, {0,0,0}, {0,0,0}, {0,0,0}, {0,0,0}, {0,0,0}, {0,0,0}, {0,0,0}, {205,255,255}, {0,0,0}, {0,0,0}, {205,255,255}, {205,255,255}, {205,255,255}, {0,0,0}, {0,0,0}, {205,255,255}, {205,255,255}, {205,255,255}, {0,0,0}, {0,0,0}, {205,255,255}, {0,0,0}, {205,255,255}, {0,0,0}, {0,0,0}, {205,255,255}, {0,0,0}, {205,255,255}, {0,0,0}, {0,0,0}, {0,0,0}, {0,0,0}, {0,0,0}, {0,0,0}, {0,0,0}, {0,0,0}, {0,0,0}, {0,0,0}, {0,0,0} },
- [3] = { {0,0,0}, {0,0,0}, {0,0,0}, {0,0,0}, {0,0,0}, {0,0,0}, {0,0,0}, {0,0,0}, {0,0,0}, {0,0,0}, {0,0,0}, {0,0,0}, {180,255,233}, {0,0,0}, {0,0,0}, {0,0,0}, {180,255,233}, {180,255,233}, {0,0,0}, {180,255,233}, {0,0,0}, {0,0,0}, {180,255,233}, {0,0,0}, {180,255,233}, {0,0,0}, {0,0,0}, {0,0,0}, {0,0,0}, {0,0,0}, {180,255,233}, {0,0,0}, {0,0,0}, {0,0,0}, {0,0,0}, {74,255,255}, {255,220,201}, {0,0,0}, {0,0,0}, {0,0,0}, {180,255,233}, {0,0,0}, {0,0,0}, {0,0,0}, {180,255,233}, {180,255,233}, {41,255,255}, {0,0,0}, {0,0,0}, {0,0,0}, {180,255,233}, {0,255,255}, {74,255,255}, {0,0,0}, {0,0,0}, {0,0,0}, {0,255,255}, {74,255,255}, {0,0,0}, {0,0,0}, {0,0,0}, {0,0,0}, {0,0,0}, {0,0,0}, {0,0,0}, {210,218,204}, {210,218,204}, {255,220,201}, {0,0,0}, {0,0,0}, {0,0,0}, {0,0,0} },
+ [3] = { {0,245,245}, {0,245,245}, {0,245,245}, {0,245,245}, {80,218,204}, {139,150,241}, {139,150,241}, {87,218,204}, {139,150,241}, {87,218,204}, {139,150,241}, {87,218,204}, {87,218,204}, {139,150,241}, {0,245,245}, {139,150,241}, {139,150,241}, {87,218,204}, {139,150,241}, {139,150,241}, {139,150,241}, {139,150,241}, {139,150,241}, {139,150,241}, {139,150,241}, {139,150,241}, {139,150,241}, {139,150,241}, {139,150,241}, {14,222,242}, {80,218,204}, {14,222,242}, {139,150,241}, {139,150,241}, {139,150,241}, {139,150,241}, {14,222,242}, {139,150,241}, {139,150,241}, {139,150,241}, {139,150,241}, {139,150,241}, {139,150,241}, {139,150,241}, {139,150,241}, {139,150,241}, {139,150,241}, {139,150,241}, {139,150,241}, {139,150,241}, {139,150,241}, {139,150,241}, {139,150,241}, {139,150,241}, {139,150,241}, {139,150,241}, {139,150,241}, {139,150,241}, {139,150,241}, {139,150,241}, {139,150,241}, {139,150,241}, {139,150,241}, {139,150,241}, {139,150,241}, {14,222,242}, {139,150,241}, {139,150,241}, {139,150,241}, {44,233,244}, {139,150,241}, {139,150,241} },
- [4] = { {0,245,245}, {0,245,245}, {0,245,245}, {0,245,245}, {0,245,245}, {0,0,0}, {0,245,245}, {0,245,245}, {0,245,245}, {87,218,204}, {0,0,0}, {0,0,0}, {87,218,204}, {0,0,0}, {0,245,245}, {0,0,0}, {87,218,204}, {87,218,204}, {0,0,0}, {0,0,0}, {0,0,0}, {0,0,0}, {87,218,204}, {0,0,0}, {0,0,0}, {0,0,0}, {0,0,0}, {0,0,0}, {0,0,0}, {0,0,0}, {0,0,0}, {0,0,0}, {0,0,0}, {0,0,0}, {0,0,0}, {0,0,0}, {0,0,0}, {0,0,0}, {0,0,0}, {0,0,0}, {0,0,0}, {0,0,0}, {0,0,0}, {0,0,0}, {0,0,0}, {0,0,0}, {0,0,0}, {0,0,0}, {0,0,0}, {0,0,0}, {0,0,0}, {0,0,0}, {0,0,0}, {0,0,0}, {0,0,0}, {0,0,0}, {0,0,0}, {0,0,0}, {0,0,0}, {0,0,0}, {0,0,0}, {0,0,0}, {0,0,0}, {0,0,0}, {0,0,0}, {0,0,0}, {0,0,0}, {0,0,0}, {0,0,0}, {44,233,244}, {0,0,0}, {0,0,0} },
+ [4] = { {0,0,0}, {0,0,0}, {0,0,0}, {0,0,0}, {0,0,0}, {14,222,242}, {0,0,0}, {0,0,0}, {0,0,0}, {0,0,0}, {14,222,242}, {0,0,0}, {0,0,0}, {0,0,0}, {0,0,0}, {14,222,242}, {43,141,235}, {80,218,204}, {156,152,231}, {0,0,0}, {14,222,242}, {43,141,235}, {80,218,204}, {156,152,231}, {0,0,0}, {14,222,242}, {0,0,0}, {0,0,0}, {0,0,0}, {0,0,0}, {0,0,0}, {14,222,242}, {0,0,0}, {0,0,0}, {0,0,0}, {0,0,0}, {0,0,0}, {0,0,0}, {0,0,0}, {0,0,0}, {0,0,0}, {14,222,242}, {0,0,0}, {0,0,0}, {0,0,0}, {0,0,0}, {14,222,242}, {205,255,255}, {205,255,255}, {205,255,255}, {205,255,255}, {14,222,242}, {205,255,255}, {205,255,255}, {205,255,255}, {205,255,255}, {14,222,242}, {205,255,255}, {205,255,255}, {205,255,255}, {205,255,255}, {14,222,242}, {0,0,0}, {0,0,0}, {0,0,0}, {0,0,0}, {0,0,0}, {0,0,0}, {0,0,0}, {0,0,0}, {0,0,0}, {0,0,0} },
+
+ [5] = { {0,0,0}, {0,0,0}, {0,0,0}, {0,0,0}, {0,0,0}, {0,0,0}, {0,0,0}, {0,0,0}, {0,0,0}, {0,0,0}, {0,0,0}, {0,0,0}, {180,255,233}, {0,0,0}, {0,0,0}, {0,0,0}, {180,255,233}, {180,255,233}, {0,0,0}, {180,255,233}, {0,0,0}, {0,0,0}, {180,255,233}, {0,0,0}, {180,255,233}, {0,0,0}, {0,0,0}, {0,0,0}, {0,0,0}, {0,0,0}, {180,255,233}, {0,0,0}, {180,255,233}, {180,255,233}, {180,255,233}, {74,255,255}, {255,220,201}, {0,0,0}, {0,0,0}, {0,0,0}, {0,0,0}, {0,0,0}, {0,0,0}, {0,0,0}, {180,255,233}, {180,255,233}, {0,0,0}, {0,0,0}, {0,0,0}, {0,0,0}, {180,255,233}, {0,0,0}, {0,0,0}, {0,0,0}, {0,0,0}, {0,0,0}, {0,0,0}, {0,0,0}, {0,0,0}, {0,0,0}, {0,0,0}, {0,0,0}, {0,0,0}, {0,0,0}, {0,0,0}, {210,218,204}, {210,218,204}, {0,0,0}, {0,0,0}, {0,0,0}, {0,0,0}, {0,0,0} },
};
@@ -101,9 +139,6 @@ void set_layer_color(int layer) {
}
bool rgb_matrix_indicators_user(void) {
- if (rawhid_state.rgb_control) {
- return false;
- }
if (!keyboard_config.disable_layer_led) {
switch (biton32(layer_state)) {
case 0:
@@ -121,6 +156,9 @@ bool rgb_matrix_indicators_user(void) {
case 4:
set_layer_color(4);
break;
+ case 5:
+ set_layer_color(5);
+ break;
default:
if (rgb_matrix_get_flags() == LED_FLAG_NONE) {
rgb_matrix_set_color_all(0, 0, 0);
@@ -136,7 +174,256 @@ bool rgb_matrix_indicators_user(void) {
}
+typedef struct {
+ bool is_press_action;
+ uint8_t step;
+} tap;
+enum {
+ SINGLE_TAP = 1,
+ SINGLE_HOLD,
+ DOUBLE_TAP,
+ DOUBLE_HOLD,
+ DOUBLE_SINGLE_TAP,
+ MORE_TAPS
+};
+
+static tap dance_state[6];
+
+uint8_t dance_step(tap_dance_state_t *state);
+
+uint8_t dance_step(tap_dance_state_t *state) {
+ if (state->count == 1) {
+ if (state->interrupted || !state->pressed) return SINGLE_TAP;
+ else return SINGLE_HOLD;
+ } else if (state->count == 2) {
+ if (state->interrupted) return DOUBLE_SINGLE_TAP;
+ else if (state->pressed) return DOUBLE_HOLD;
+ else return DOUBLE_TAP;
+ }
+ return MORE_TAPS;
+}
+
+
+void on_dance_0(tap_dance_state_t *state, void *user_data);
+void dance_0_finished(tap_dance_state_t *state, void *user_data);
+void dance_0_reset(tap_dance_state_t *state, void *user_data);
+
+void on_dance_0(tap_dance_state_t *state, void *user_data) {
+ if(state->count == 3) {
+ tap_code16(KC_4);
+ tap_code16(KC_4);
+ tap_code16(KC_4);
+ }
+ if(state->count > 3) {
+ tap_code16(KC_4);
+ }
+}
+
+void dance_0_finished(tap_dance_state_t *state, void *user_data) {
+ dance_state[0].step = dance_step(state);
+ switch (dance_state[0].step) {
+ case SINGLE_TAP: register_code16(KC_4); break;
+ case DOUBLE_TAP: register_code16(KC_4); register_code16(KC_4); break;
+ case DOUBLE_HOLD: register_code16(LSFT(KC_D)); break;
+ case DOUBLE_SINGLE_TAP: tap_code16(KC_4); register_code16(KC_4);
+ }
+}
+
+void dance_0_reset(tap_dance_state_t *state, void *user_data) {
+ wait_ms(10);
+ switch (dance_state[0].step) {
+ case SINGLE_TAP: unregister_code16(KC_4); break;
+ case DOUBLE_TAP: unregister_code16(KC_4); break;
+ case DOUBLE_HOLD: unregister_code16(LSFT(KC_D)); break;
+ case DOUBLE_SINGLE_TAP: unregister_code16(KC_4); break;
+ }
+ dance_state[0].step = 0;
+}
+void on_dance_1(tap_dance_state_t *state, void *user_data);
+void dance_1_finished(tap_dance_state_t *state, void *user_data);
+void dance_1_reset(tap_dance_state_t *state, void *user_data);
+
+void on_dance_1(tap_dance_state_t *state, void *user_data) {
+ if(state->count == 3) {
+ tap_code16(KC_5);
+ tap_code16(KC_5);
+ tap_code16(KC_5);
+ }
+ if(state->count > 3) {
+ tap_code16(KC_5);
+ }
+}
+
+void dance_1_finished(tap_dance_state_t *state, void *user_data) {
+ dance_state[1].step = dance_step(state);
+ switch (dance_state[1].step) {
+ case SINGLE_TAP: register_code16(KC_5); break;
+ case DOUBLE_TAP: register_code16(KC_5); register_code16(KC_5); break;
+ case DOUBLE_HOLD: register_code16(LSFT(KC_E)); break;
+ case DOUBLE_SINGLE_TAP: tap_code16(KC_5); register_code16(KC_5);
+ }
+}
+
+void dance_1_reset(tap_dance_state_t *state, void *user_data) {
+ wait_ms(10);
+ switch (dance_state[1].step) {
+ case SINGLE_TAP: unregister_code16(KC_5); break;
+ case DOUBLE_TAP: unregister_code16(KC_5); break;
+ case DOUBLE_HOLD: unregister_code16(LSFT(KC_E)); break;
+ case DOUBLE_SINGLE_TAP: unregister_code16(KC_5); break;
+ }
+ dance_state[1].step = 0;
+}
+void on_dance_2(tap_dance_state_t *state, void *user_data);
+void dance_2_finished(tap_dance_state_t *state, void *user_data);
+void dance_2_reset(tap_dance_state_t *state, void *user_data);
+
+void on_dance_2(tap_dance_state_t *state, void *user_data) {
+ if(state->count == 3) {
+ tap_code16(KC_6);
+ tap_code16(KC_6);
+ tap_code16(KC_6);
+ }
+ if(state->count > 3) {
+ tap_code16(KC_6);
+ }
+}
+
+void dance_2_finished(tap_dance_state_t *state, void *user_data) {
+ dance_state[2].step = dance_step(state);
+ switch (dance_state[2].step) {
+ case SINGLE_TAP: register_code16(KC_6); break;
+ case DOUBLE_TAP: register_code16(KC_6); register_code16(KC_6); break;
+ case DOUBLE_HOLD: register_code16(LSFT(KC_F)); break;
+ case DOUBLE_SINGLE_TAP: tap_code16(KC_6); register_code16(KC_6);
+ }
+}
+
+void dance_2_reset(tap_dance_state_t *state, void *user_data) {
+ wait_ms(10);
+ switch (dance_state[2].step) {
+ case SINGLE_TAP: unregister_code16(KC_6); break;
+ case DOUBLE_TAP: unregister_code16(KC_6); break;
+ case DOUBLE_HOLD: unregister_code16(LSFT(KC_F)); break;
+ case DOUBLE_SINGLE_TAP: unregister_code16(KC_6); break;
+ }
+ dance_state[2].step = 0;
+}
+void on_dance_3(tap_dance_state_t *state, void *user_data);
+void dance_3_finished(tap_dance_state_t *state, void *user_data);
+void dance_3_reset(tap_dance_state_t *state, void *user_data);
+
+void on_dance_3(tap_dance_state_t *state, void *user_data) {
+ if(state->count == 3) {
+ tap_code16(KC_1);
+ tap_code16(KC_1);
+ tap_code16(KC_1);
+ }
+ if(state->count > 3) {
+ tap_code16(KC_1);
+ }
+}
+
+void dance_3_finished(tap_dance_state_t *state, void *user_data) {
+ dance_state[3].step = dance_step(state);
+ switch (dance_state[3].step) {
+ case SINGLE_TAP: register_code16(KC_1); break;
+ case DOUBLE_TAP: register_code16(KC_1); register_code16(KC_1); break;
+ case DOUBLE_HOLD: register_code16(LSFT(KC_A)); break;
+ case DOUBLE_SINGLE_TAP: tap_code16(KC_1); register_code16(KC_1);
+ }
+}
+
+void dance_3_reset(tap_dance_state_t *state, void *user_data) {
+ wait_ms(10);
+ switch (dance_state[3].step) {
+ case SINGLE_TAP: unregister_code16(KC_1); break;
+ case DOUBLE_TAP: unregister_code16(KC_1); break;
+ case DOUBLE_HOLD: unregister_code16(LSFT(KC_A)); break;
+ case DOUBLE_SINGLE_TAP: unregister_code16(KC_1); break;
+ }
+ dance_state[3].step = 0;
+}
+void on_dance_4(tap_dance_state_t *state, void *user_data);
+void dance_4_finished(tap_dance_state_t *state, void *user_data);
+void dance_4_reset(tap_dance_state_t *state, void *user_data);
+
+void on_dance_4(tap_dance_state_t *state, void *user_data) {
+ if(state->count == 3) {
+ tap_code16(KC_2);
+ tap_code16(KC_2);
+ tap_code16(KC_2);
+ }
+ if(state->count > 3) {
+ tap_code16(KC_2);
+ }
+}
+
+void dance_4_finished(tap_dance_state_t *state, void *user_data) {
+ dance_state[4].step = dance_step(state);
+ switch (dance_state[4].step) {
+ case SINGLE_TAP: register_code16(KC_2); break;
+ case DOUBLE_TAP: register_code16(KC_2); register_code16(KC_2); break;
+ case DOUBLE_HOLD: register_code16(LSFT(KC_B)); break;
+ case DOUBLE_SINGLE_TAP: tap_code16(KC_2); register_code16(KC_2);
+ }
+}
+
+void dance_4_reset(tap_dance_state_t *state, void *user_data) {
+ wait_ms(10);
+ switch (dance_state[4].step) {
+ case SINGLE_TAP: unregister_code16(KC_2); break;
+ case DOUBLE_TAP: unregister_code16(KC_2); break;
+ case DOUBLE_HOLD: unregister_code16(LSFT(KC_B)); break;
+ case DOUBLE_SINGLE_TAP: unregister_code16(KC_2); break;
+ }
+ dance_state[4].step = 0;
+}
+void on_dance_5(tap_dance_state_t *state, void *user_data);
+void dance_5_finished(tap_dance_state_t *state, void *user_data);
+void dance_5_reset(tap_dance_state_t *state, void *user_data);
+
+void on_dance_5(tap_dance_state_t *state, void *user_data) {
+ if(state->count == 3) {
+ tap_code16(KC_3);
+ tap_code16(KC_3);
+ tap_code16(KC_3);
+ }
+ if(state->count > 3) {
+ tap_code16(KC_3);
+ }
+}
+
+void dance_5_finished(tap_dance_state_t *state, void *user_data) {
+ dance_state[5].step = dance_step(state);
+ switch (dance_state[5].step) {
+ case SINGLE_TAP: register_code16(KC_3); break;
+ case DOUBLE_TAP: register_code16(KC_3); register_code16(KC_3); break;
+ case DOUBLE_HOLD: register_code16(LSFT(KC_C)); break;
+ case DOUBLE_SINGLE_TAP: tap_code16(KC_3); register_code16(KC_3);
+ }
+}
+
+void dance_5_reset(tap_dance_state_t *state, void *user_data) {
+ wait_ms(10);
+ switch (dance_state[5].step) {
+ case SINGLE_TAP: unregister_code16(KC_3); break;
+ case DOUBLE_TAP: unregister_code16(KC_3); break;
+ case DOUBLE_HOLD: unregister_code16(LSFT(KC_C)); break;
+ case DOUBLE_SINGLE_TAP: unregister_code16(KC_3); break;
+ }
+ dance_state[5].step = 0;
+}
+
+tap_dance_action_t tap_dance_actions[] = {
+ [DANCE_0] = ACTION_TAP_DANCE_FN_ADVANCED(on_dance_0, dance_0_finished, dance_0_reset),
+ [DANCE_1] = ACTION_TAP_DANCE_FN_ADVANCED(on_dance_1, dance_1_finished, dance_1_reset),
+ [DANCE_2] = ACTION_TAP_DANCE_FN_ADVANCED(on_dance_2, dance_2_finished, dance_2_reset),
+ [DANCE_3] = ACTION_TAP_DANCE_FN_ADVANCED(on_dance_3, dance_3_finished, dance_3_reset),
+ [DANCE_4] = ACTION_TAP_DANCE_FN_ADVANCED(on_dance_4, dance_4_finished, dance_4_reset),
+ [DANCE_5] = ACTION_TAP_DANCE_FN_ADVANCED(on_dance_5, dance_5_finished, dance_5_reset),
+};
bool process_record_user(uint16_t keycode, keyrecord_t *record) {
switch (keycode) {
@@ -157,10 +444,172 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) {
}
break;
- case RGB_SLD:
- if (rawhid_state.rgb_control) {
- return false;
+ case DUAL_FUNC_0:
+ if (record->tap.count > 0) {
+ if (record->event.pressed) {
+ register_code16(KC_F9);
+ } else {
+ unregister_code16(KC_F9);
}
+ } else {
+ if (record->event.pressed) {
+ register_code16(KC_F8);
+ } else {
+ unregister_code16(KC_F8);
+ }
+ }
+ return false;
+ case DUAL_FUNC_1:
+ if (record->tap.count > 0) {
+ if (record->event.pressed) {
+ register_code16(KC_F1);
+ } else {
+ unregister_code16(KC_F1);
+ }
+ } else {
+ if (record->event.pressed) {
+ register_code16(KC_F11);
+ } else {
+ unregister_code16(KC_F11);
+ }
+ }
+ return false;
+ case DUAL_FUNC_2:
+ if (record->tap.count > 0) {
+ if (record->event.pressed) {
+ register_code16(KC_F2);
+ } else {
+ unregister_code16(KC_F2);
+ }
+ } else {
+ if (record->event.pressed) {
+ register_code16(KC_F12);
+ } else {
+ unregister_code16(KC_F12);
+ }
+ }
+ return false;
+ case DUAL_FUNC_3:
+ if (record->tap.count > 0) {
+ if (record->event.pressed) {
+ register_code16(KC_F3);
+ } else {
+ unregister_code16(KC_F3);
+ }
+ } else {
+ if (record->event.pressed) {
+ register_code16(KC_F13);
+ } else {
+ unregister_code16(KC_F13);
+ }
+ }
+ return false;
+ case DUAL_FUNC_4:
+ if (record->tap.count > 0) {
+ if (record->event.pressed) {
+ register_code16(KC_F4);
+ } else {
+ unregister_code16(KC_F4);
+ }
+ } else {
+ if (record->event.pressed) {
+ register_code16(KC_F14);
+ } else {
+ unregister_code16(KC_F14);
+ }
+ }
+ return false;
+ case DUAL_FUNC_5:
+ if (record->tap.count > 0) {
+ if (record->event.pressed) {
+ register_code16(KC_F5);
+ } else {
+ unregister_code16(KC_F5);
+ }
+ } else {
+ if (record->event.pressed) {
+ register_code16(KC_F15);
+ } else {
+ unregister_code16(KC_F15);
+ }
+ }
+ return false;
+ case DUAL_FUNC_6:
+ if (record->tap.count > 0) {
+ if (record->event.pressed) {
+ register_code16(KC_F6);
+ } else {
+ unregister_code16(KC_F6);
+ }
+ } else {
+ if (record->event.pressed) {
+ register_code16(KC_F16);
+ } else {
+ unregister_code16(KC_F16);
+ }
+ }
+ return false;
+ case DUAL_FUNC_7:
+ if (record->tap.count > 0) {
+ if (record->event.pressed) {
+ register_code16(KC_F7);
+ } else {
+ unregister_code16(KC_F7);
+ }
+ } else {
+ if (record->event.pressed) {
+ register_code16(KC_F17);
+ } else {
+ unregister_code16(KC_F17);
+ }
+ }
+ return false;
+ case DUAL_FUNC_8:
+ if (record->tap.count > 0) {
+ if (record->event.pressed) {
+ register_code16(KC_F8);
+ } else {
+ unregister_code16(KC_F8);
+ }
+ } else {
+ if (record->event.pressed) {
+ register_code16(KC_F18);
+ } else {
+ unregister_code16(KC_F18);
+ }
+ }
+ return false;
+ case DUAL_FUNC_9:
+ if (record->tap.count > 0) {
+ if (record->event.pressed) {
+ register_code16(KC_F9);
+ } else {
+ unregister_code16(KC_F9);
+ }
+ } else {
+ if (record->event.pressed) {
+ register_code16(KC_F19);
+ } else {
+ unregister_code16(KC_F19);
+ }
+ }
+ return false;
+ case DUAL_FUNC_10:
+ if (record->tap.count > 0) {
+ if (record->event.pressed) {
+ register_code16(KC_F10);
+ } else {
+ unregister_code16(KC_F10);
+ }
+ } else {
+ if (record->event.pressed) {
+ register_code16(KC_F20);
+ } else {
+ unregister_code16(KC_F20);
+ }
+ }
+ return false;
+ case RGB_SLD:
if (record->event.pressed) {
rgblight_mode(1);
}
diff --git a/moonlander/qmk_firmware/keyboards/zsa/moonlander/keymaps/main/keymap.json b/moonlander/qmk_firmware/keyboards/zsa/moonlander/keymaps/main/keymap.json
index 884fca9..38542d6 100644
--- a/moonlander/qmk_firmware/keyboards/zsa/moonlander/keymaps/main/keymap.json
+++ b/moonlander/qmk_firmware/keyboards/zsa/moonlander/keymaps/main/keymap.json
@@ -1,6 +1,5 @@
{
"modules": [
- "zsa/oryx",
"zsa/mousejiggler",
"zsa/defaults"
]
diff --git a/moonlander/qmk_firmware/keyboards/zsa/moonlander/keymaps/main/rules.mk b/moonlander/qmk_firmware/keyboards/zsa/moonlander/keymaps/main/rules.mk
index e354f0d..b3db918 100644
--- a/moonlander/qmk_firmware/keyboards/zsa/moonlander/keymaps/main/rules.mk
+++ b/moonlander/qmk_firmware/keyboards/zsa/moonlander/keymaps/main/rules.mk
@@ -1,7 +1,6 @@
CONSOLE_ENABLE = no
COMMAND_ENABLE = no
AUDIO_ENABLE = no
-ORYX_ENABLE = yes
-RGB_MATRIX_CUSTOM_KB = yes
-DYNAMIC_MACRO_ENABLE = yes
+TAP_DANCE_ENABLE = yes
SPACE_CADET_ENABLE = no
+CAPS_WORD_ENABLE = yes
diff --git a/quickshell/.config/quickshell/Modals/Settings/SettingsContent.qml b/quickshell/.config/quickshell/Modals/Settings/SettingsContent.qml
index 6ceaec2..2a0ab32 100644
--- a/quickshell/.config/quickshell/Modals/Settings/SettingsContent.qml
+++ b/quickshell/.config/quickshell/Modals/Settings/SettingsContent.qml
@@ -89,7 +89,7 @@ Item {
id: displaysLoader
anchors.fill: parent
- active: root.currentIndex === 6
+ active: root.currentIndex === 5
visible: active
asynchronous: true
@@ -102,7 +102,7 @@ Item {
id: recentAppsLoader
anchors.fill: parent
- active: root.currentIndex === 7
+ active: root.currentIndex === 6
visible: active
asynchronous: true
@@ -115,7 +115,7 @@ Item {
id: themeColorsLoader
anchors.fill: parent
- active: root.currentIndex === 8
+ active: root.currentIndex === 7
visible: active
asynchronous: true
@@ -124,19 +124,6 @@ Item {
}
- Loader {
- id: aboutLoader
-
- anchors.fill: parent
- active: root.currentIndex === 9
- visible: active
- asynchronous: true
-
- sourceComponent: AboutTab {
- }
-
- }
-
}
}
diff --git a/quickshell/.config/quickshell/Modals/Settings/SettingsSidebar.qml b/quickshell/.config/quickshell/Modals/Settings/SettingsSidebar.qml
index 42cc362..126f914 100644
--- a/quickshell/.config/quickshell/Modals/Settings/SettingsSidebar.qml
+++ b/quickshell/.config/quickshell/Modals/Settings/SettingsSidebar.qml
@@ -32,9 +32,6 @@ Rectangle {
}, {
"text": "Theme & Colors",
"icon": "palette"
- }, {
- "text": "About",
- "icon": "info"
}]
width: 270
diff --git a/quickshell/.config/quickshell/Modules/Settings/AboutTab.qml b/quickshell/.config/quickshell/Modules/Settings/AboutTab.qml
deleted file mode 100644
index feff20a..0000000
--- a/quickshell/.config/quickshell/Modules/Settings/AboutTab.qml
+++ /dev/null
@@ -1,535 +0,0 @@
-import QtQuick
-import QtQuick.Controls
-import QtQuick.Effects
-import qs.Common
-import qs.Services
-import qs.Widgets
-
-Item {
- id: aboutTab
-
- property bool isHyprland: CompositorService.isHyprland
-
- DankFlickable {
- anchors.fill: parent
- anchors.topMargin: Theme.spacingL
- clip: true
- contentHeight: mainColumn.height
- contentWidth: width
-
- Column {
- id: mainColumn
-
- width: parent.width
- spacing: Theme.spacingXL
-
- // ASCII Art Header
- StyledRect {
- width: parent.width
- height: asciiSection.implicitHeight + Theme.spacingL * 2
- radius: Theme.cornerRadius
- color: Qt.rgba(Theme.surfaceVariant.r, Theme.surfaceVariant.g,
- Theme.surfaceVariant.b, 0.3)
- border.color: Qt.rgba(Theme.outline.r, Theme.outline.g,
- Theme.outline.b, 0.2)
- border.width: 1
-
- Column {
- id: asciiSection
-
- anchors.fill: parent
- anchors.margins: Theme.spacingL
- spacing: Theme.spacingM
-
- Item {
- width: parent.width
- height: asciiText.implicitHeight
-
- StyledText {
- id: asciiText
-
- text: "██████╗ █████╗ ███╗ ██╗██╗ ██╗\n██╔══██╗██╔══██╗████╗ ██║██║ ██╔╝\n██║ ██║███████║██╔██╗ ██║█████╔╝ \n██║ ██║██╔══██║██║╚██╗██║██╔═██╗ \n██████╔╝██║ ██║██║ ╚████║██║ ██╗\n╚═════╝ ╚═╝ ╚═╝╚═╝ ╚═══╝╚═╝ ╚═╝"
- isMonospace: true
- font.pixelSize: Theme.fontSizeMedium
- color: Theme.primary
- anchors.centerIn: parent
- }
- }
-
- StyledText {
- text: "DankMaterialShell"
- font.pixelSize: Theme.fontSizeXLarge
- font.weight: Font.Bold
- color: Theme.surfaceText
- horizontalAlignment: Text.AlignHCenter
- width: parent.width
- }
-
- Item {
- id: communityIcons
- anchors.horizontalCenter: parent.horizontalCenter
- height: 24
- width: {
- if (isHyprland) {
- return compositorButton.width + discordButton.width + Theme.spacingM + redditButton.width + Theme.spacingM
- } else {
- return compositorButton.width + matrixButton.width + 4 + discordButton.width + Theme.spacingM + redditButton.width + Theme.spacingM
- }
- }
-
- // Compositor logo (Niri or Hyprland)
- Item {
- id: compositorButton
- width: 24
- height: 24
- anchors.verticalCenter: parent.verticalCenter
- anchors.verticalCenterOffset: -2
- x: 0
-
- property bool hovered: false
- property string tooltipText: isHyprland ? "Hyprland Website" : "niri GitHub"
-
- Image {
- anchors.fill: parent
- source: Qt.resolvedUrl(".").toString().replace(
- "file://", "").replace(
- "/Modules/Settings/",
- "") + (isHyprland ? "/assets/hyprland.svg" : "/assets/niri.svg")
- sourceSize: Qt.size(24, 24)
- smooth: true
- fillMode: Image.PreserveAspectFit
- }
-
- MouseArea {
- anchors.fill: parent
- cursorShape: Qt.PointingHandCursor
- hoverEnabled: true
- onEntered: parent.hovered = true
- onExited: parent.hovered = false
- onClicked: Qt.openUrlExternally(
- isHyprland ? "https://hypr.land" : "https://github.com/YaLTeR/niri")
- }
- }
-
- // Matrix button (only for Niri)
- Item {
- id: matrixButton
- width: 30
- height: 24
- x: compositorButton.x + compositorButton.width + 4
- visible: !isHyprland
-
- property bool hovered: false
- property string tooltipText: "niri Matrix Chat"
-
- Image {
- anchors.fill: parent
- source: Qt.resolvedUrl(".").toString().replace(
- "file://", "").replace(
- "/Modules/Settings/",
- "") + "/assets/matrix-logo-white.svg"
- sourceSize: Qt.size(28, 18)
- smooth: true
- fillMode: Image.PreserveAspectFit
- layer.enabled: true
-
- layer.effect: MultiEffect {
- colorization: 1
- colorizationColor: Theme.surfaceText
- }
- }
-
- MouseArea {
- anchors.fill: parent
- cursorShape: Qt.PointingHandCursor
- hoverEnabled: true
- onEntered: parent.hovered = true
- onExited: parent.hovered = false
- onClicked: Qt.openUrlExternally(
- "https://matrix.to/#/#niri:matrix.org")
- }
- }
-
- // Discord button
- Item {
- id: discordButton
- width: 20
- height: 20
- x: isHyprland ? compositorButton.x + compositorButton.width + Theme.spacingM : matrixButton.x + matrixButton.width + Theme.spacingM
- anchors.verticalCenter: parent.verticalCenter
-
- property bool hovered: false
- property string tooltipText: isHyprland ? "Hyprland Discord Server" : "niri Discord Server"
-
- Image {
- anchors.fill: parent
- source: Qt.resolvedUrl(".").toString().replace(
- "file://", "").replace(
- "/Modules/Settings/",
- "") + "/assets/discord.svg"
- sourceSize: Qt.size(20, 20)
- smooth: true
- fillMode: Image.PreserveAspectFit
- }
-
- MouseArea {
- anchors.fill: parent
- cursorShape: Qt.PointingHandCursor
- hoverEnabled: true
- onEntered: parent.hovered = true
- onExited: parent.hovered = false
- onClicked: Qt.openUrlExternally(
- isHyprland ? "https://discord.com/invite/hQ9XvMUjjr" : "https://discord.gg/vT8Sfjy7sx")
- }
- }
-
- // Reddit button
- Item {
- id: redditButton
- width: 20
- height: 20
- x: discordButton.x + discordButton.width + Theme.spacingM
- anchors.verticalCenter: parent.verticalCenter
-
- property bool hovered: false
- property string tooltipText: isHyprland ? "r/hyprland Subreddit" : "r/niri Subreddit"
-
- Image {
- anchors.fill: parent
- source: Qt.resolvedUrl(".").toString().replace(
- "file://", "").replace(
- "/Modules/Settings/",
- "") + "/assets/reddit.svg"
- sourceSize: Qt.size(20, 20)
- smooth: true
- fillMode: Image.PreserveAspectFit
- }
-
- MouseArea {
- anchors.fill: parent
- cursorShape: Qt.PointingHandCursor
- hoverEnabled: true
- onEntered: parent.hovered = true
- onExited: parent.hovered = false
- onClicked: Qt.openUrlExternally(
- isHyprland ? "https://reddit.com/r/hyprland" : "https://reddit.com/r/niri")
- }
- }
- }
- }
- }
-
-
- // Project Information
- StyledRect {
- width: parent.width
- height: projectSection.implicitHeight + Theme.spacingL * 2
- radius: Theme.cornerRadius
- color: Qt.rgba(Theme.surfaceVariant.r, Theme.surfaceVariant.g,
- Theme.surfaceVariant.b, 0.3)
- border.color: Qt.rgba(Theme.outline.r, Theme.outline.g,
- Theme.outline.b, 0.2)
- border.width: 1
-
- Column {
- id: projectSection
-
- anchors.fill: parent
- anchors.margins: Theme.spacingL
- spacing: Theme.spacingM
-
- Row {
- width: parent.width
- spacing: Theme.spacingM
-
- DankIcon {
- name: "info"
- size: Theme.iconSize
- color: Theme.primary
- anchors.verticalCenter: parent.verticalCenter
- }
-
- StyledText {
- text: "About"
- font.pixelSize: Theme.fontSizeLarge
- font.weight: Font.Medium
- color: Theme.surfaceText
- anchors.verticalCenter: parent.verticalCenter
- }
- }
-
- StyledText {
- text: `DankMaterialShell is a modern desktop inspired by MUI 3.
-
The goal is to provide a high level of functionality and customization so that it can be a suitable replacement for complete desktop environments like Gnome, KDE, or Cosmic.
- `
- textFormat: Text.RichText
- font.pixelSize: Theme.fontSizeMedium
- linkColor: Theme.primary
- onLinkActivated: url => Qt.openUrlExternally(url)
- color: Theme.surfaceVariantText
- width: parent.width
- wrapMode: Text.WordWrap
-
- MouseArea {
- anchors.fill: parent
- cursorShape: parent.hoveredLink ? Qt.PointingHandCursor : Qt.ArrowCursor
- acceptedButtons: Qt.NoButton
- propagateComposedEvents: true
- }
- }
- }
- }
-
- // Technical Details
- StyledRect {
- width: parent.width
- height: techSection.implicitHeight + Theme.spacingL * 2
- radius: Theme.cornerRadius
- color: Qt.rgba(Theme.surfaceVariant.r, Theme.surfaceVariant.g,
- Theme.surfaceVariant.b, 0.3)
- border.color: Qt.rgba(Theme.outline.r, Theme.outline.g,
- Theme.outline.b, 0.2)
- border.width: 1
-
- Column {
- id: techSection
-
- anchors.fill: parent
- anchors.margins: Theme.spacingL
- spacing: Theme.spacingM
-
- Row {
- width: parent.width
- spacing: Theme.spacingM
-
- DankIcon {
- name: "code"
- size: Theme.iconSize
- color: Theme.primary
- anchors.verticalCenter: parent.verticalCenter
- }
-
- StyledText {
- text: "Technical Details"
- font.pixelSize: Theme.fontSizeLarge
- font.weight: Font.Medium
- color: Theme.surfaceText
- anchors.verticalCenter: parent.verticalCenter
- }
- }
-
- Grid {
- width: parent.width
- columns: 2
- columnSpacing: Theme.spacingL
- rowSpacing: Theme.spacingS
-
- StyledText {
- text: "Framework:"
- font.pixelSize: Theme.fontSizeMedium
- font.weight: Font.Medium
- color: Theme.surfaceText
- }
-
- StyledText {
- text: `Quickshell`
- linkColor: Theme.primary
- textFormat: Text.RichText
- onLinkActivated: url => Qt.openUrlExternally(url)
- font.pixelSize: Theme.fontSizeMedium
- color: Theme.surfaceVariantText
-
- MouseArea {
- anchors.fill: parent
- cursorShape: parent.hoveredLink ? Qt.PointingHandCursor : Qt.ArrowCursor
- acceptedButtons: Qt.NoButton
- propagateComposedEvents: true
- }
- }
-
- StyledText {
- text: "Language:"
- font.pixelSize: Theme.fontSizeMedium
- font.weight: Font.Medium
- color: Theme.surfaceText
- }
-
- StyledText {
- text: "QML (Qt Modeling Language)"
- font.pixelSize: Theme.fontSizeMedium
- color: Theme.surfaceVariantText
- }
-
- StyledText {
- text: "Compositor:"
- font.pixelSize: Theme.fontSizeMedium
- font.weight: Font.Medium
- color: Theme.surfaceText
- }
-
- Row {
- spacing: 4
-
- StyledText {
- text: `niri`
- font.pixelSize: Theme.fontSizeMedium
- linkColor: Theme.primary
- textFormat: Text.RichText
- color: Theme.surfaceVariantText
- onLinkActivated: url => Qt.openUrlExternally(url)
- anchors.verticalCenter: parent.verticalCenter
-
- MouseArea {
- anchors.fill: parent
- cursorShape: parent.hoveredLink ? Qt.PointingHandCursor : Qt.ArrowCursor
- acceptedButtons: Qt.NoButton
- propagateComposedEvents: true
- }
- }
-
- StyledText {
- text: "&"
- font.pixelSize: Theme.fontSizeMedium
- color: Theme.surfaceVariantText
- anchors.verticalCenter: parent.verticalCenter
- }
-
- StyledText {
- text: `hyprland`
- font.pixelSize: Theme.fontSizeMedium
- linkColor: Theme.primary
- textFormat: Text.RichText
- color: Theme.surfaceVariantText
- onLinkActivated: url => Qt.openUrlExternally(url)
- anchors.verticalCenter: parent.verticalCenter
-
- MouseArea {
- anchors.fill: parent
- cursorShape: parent.hoveredLink ? Qt.PointingHandCursor : Qt.ArrowCursor
- acceptedButtons: Qt.NoButton
- propagateComposedEvents: true
- }
- }
- }
-
- StyledText {
- text: "Github:"
- font.pixelSize: Theme.fontSizeMedium
- font.weight: Font.Medium
- color: Theme.surfaceText
- }
-
- Row {
- spacing: 4
-
- StyledText {
- text: `DankMaterialShell`
- font.pixelSize: Theme.fontSizeMedium
- color: Theme.surfaceVariantText
- linkColor: Theme.primary
- textFormat: Text.RichText
- onLinkActivated: url => Qt.openUrlExternally(url)
- anchors.verticalCenter: parent.verticalCenter
-
- MouseArea {
- anchors.fill: parent
- cursorShape: parent.hoveredLink ? Qt.PointingHandCursor : Qt.ArrowCursor
- acceptedButtons: Qt.NoButton
- propagateComposedEvents: true
- }
- }
-
- StyledText {
- text: "- Support Us With a Star ⭐"
- font.pixelSize: Theme.fontSizeMedium
- color: Theme.surfaceVariantText
- anchors.verticalCenter: parent.verticalCenter
- }
- }
-
- StyledText {
- text: "System Monitoring:"
- font.pixelSize: Theme.fontSizeMedium
- font.weight: Font.Medium
- color: Theme.surfaceText
- }
-
- Row {
- spacing: 4
-
- StyledText {
- text: `dgop`
- font.pixelSize: Theme.fontSizeMedium
- color: Theme.surfaceVariantText
- linkColor: Theme.primary
- textFormat: Text.RichText
- onLinkActivated: url => Qt.openUrlExternally(url)
- anchors.verticalCenter: parent.verticalCenter
-
- MouseArea {
- anchors.fill: parent
- cursorShape: parent.hoveredLink ? Qt.PointingHandCursor : Qt.ArrowCursor
- acceptedButtons: Qt.NoButton
- propagateComposedEvents: true
- }
- }
-
- StyledText {
- text: "- Stateless System Monitoring"
- font.pixelSize: Theme.fontSizeMedium
- color: Theme.surfaceVariantText
- anchors.verticalCenter: parent.verticalCenter
- }
- }
- }
- }
- }
-
- }
- }
-
- // Community tooltip - positioned absolutely above everything
- Rectangle {
- id: communityTooltip
- parent: aboutTab
- z: 1000
-
- property var hoveredButton: {
- if (compositorButton.hovered) return compositorButton
- if (matrixButton.visible && matrixButton.hovered) return matrixButton
- if (discordButton.hovered) return discordButton
- if (redditButton.hovered) return redditButton
- return null
- }
-
- property string tooltipText: hoveredButton ? hoveredButton.tooltipText : ""
-
- visible: hoveredButton !== null && tooltipText !== ""
- width: tooltipLabel.implicitWidth + 24
- height: tooltipLabel.implicitHeight + 12
-
- color: Theme.surfaceContainer
- radius: Theme.cornerRadius
- border.width: 1
- border.color: Theme.outlineMedium
-
- x: hoveredButton ? hoveredButton.mapToItem(aboutTab, hoveredButton.width / 2, 0).x - width / 2 : 0
- y: hoveredButton ? communityIcons.mapToItem(aboutTab, 0, 0).y - height - 8 : 0
-
- layer.enabled: true
- layer.effect: MultiEffect {
- shadowEnabled: true
- shadowOpacity: 0.15
- shadowVerticalOffset: 2
- shadowBlur: 0.5
- }
-
- StyledText {
- id: tooltipLabel
- anchors.centerIn: parent
- text: communityTooltip.tooltipText
- font.pixelSize: Theme.fontSizeSmall
- color: Theme.surfaceText
- }
- }
-}