From d935b6aabead48c893b5ae8af362009b3032a9de Mon Sep 17 00:00:00 2001 From: Rodrigo Dlugokenski Date: Sat, 11 Apr 2026 17:20:04 -0300 Subject: [PATCH] feat(keymap): add gaming layers + joystick launcher (closes #11) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Adds 5 new layers — GAME_PICK launcher + GAME_MC / GAME_LOL / GAME_DOOM / GAME_CS2 — entered from SYS via the joystick center key. Why: dedicated game layers bypass HRM / hold-tap entirely so WASD, SPACE, SHIFT, CTRL behave as pure keys during play. The 4-way joystick cluster becomes a launcher (UP/DN/LT/RT pick a game, center cancels), reusing the same physical key family for entry, selection, and cancel. Cross-game chassis: - Plain WASD/QWER on left half, plain QWERTY letters on right half so chat works without leaving game mode. - LCTRL @ pos 39 (pinky) — sprint/crouch, unified across MC/Doom/CS2/LoL. - LSHIFT @ pos 57 — sneak/walk on the strongest left thumb position. - SPACE on both thumbs (pos 56 + 59). - BSPC @ pos 60 for chat correction. LALT @ pos 61. F13 @ pos 62 for PTT. - Joystick = audio cluster: VOL+ / VOL- / MUTE / play-pause + center ENTER. - mo MEDIA on right thumb (pos 63) preserved. Per-game variants are intentionally minimal: pos 0 is F3 (debug) on MC and ` (console) on LoL/Doom/CS2. The four games are separated so the OLED display-name and per-game RGB underglow color make the active mode obvious. RGB feedback: each game-entry macro turns on the underglow and sets a solid color via RGB_COLOR_HSB — green for MC, gold for LoL, red for Doom, blue for CS2. The exit combo turns the underglow back off. Exit / re-pick combos (positions 0+12 and 0+5, scoped to layers 6-9): top corners are physically far apart so they can't fire during gameplay but are easy to do deliberately. Modeled on the existing softoff combo pattern. SYS layer pos 58 (was &mkp LCLK, dead-weight duplicate of NAV's LCLK) becomes &to 5 — the GAME_PICK entry point. Co-Authored-By: Claude Opus 4.6 (1M context) --- config/eyelash_sofle.keymap | 142 +- keymap-drawer/eyelash_sofle.svg | 2229 +++++++++++++++++++++++++----- keymap-drawer/eyelash_sofle.yaml | 473 ++++--- 3 files changed, 2323 insertions(+), 521 deletions(-) diff --git a/config/eyelash_sofle.keymap b/config/eyelash_sofle.keymap index 96cb8a5f59..b969c5f7a3 100644 --- a/config/eyelash_sofle.keymap +++ b/config/eyelash_sofle.keymap @@ -124,6 +124,23 @@ timeout-ms = <80>; layers = <0>; }; + + // Exit any game layer back to BASE. Top corners — physically far apart, + // impossible to brush during gameplay, easy to do deliberately. + combo_game_exit { + bindings = <&GAME_EXIT>; + key-positions = <0 12>; + timeout-ms = <50>; + layers = <6 7 8 9>; + }; + + // Re-open the picker without bouncing through BASE. + combo_game_repick { + bindings = <&to 5>; + key-positions = <0 5>; + timeout-ms = <50>; + layers = <6 7 8 9>; + }; }; macros { @@ -357,6 +374,44 @@ bindings = <&kp LT &kp PRCNT &kp SPACE &kp SPACE &kp PRCNT &kp GT &kp LEFT &kp LEFT &kp LEFT>; label = "EEX_NONPRINT"; }; + + // Game-mode entry macros: enable RGB underglow, set a solid color + // for the chosen game, then activate the matching layer. + GAME_MC_TO: GAME_MC_TO { + compatible = "zmk,behavior-macro"; + #binding-cells = <0>; + bindings = <&rgb_ug RGB_ON>, <&rgb_ug RGB_COLOR_HSB(120,100,50)>, <&to 6>; + label = "GAME_MC_TO"; + }; + + GAME_LOL_TO: GAME_LOL_TO { + compatible = "zmk,behavior-macro"; + #binding-cells = <0>; + bindings = <&rgb_ug RGB_ON>, <&rgb_ug RGB_COLOR_HSB(45,100,50)>, <&to 7>; + label = "GAME_LOL_TO"; + }; + + GAME_DOOM_TO: GAME_DOOM_TO { + compatible = "zmk,behavior-macro"; + #binding-cells = <0>; + bindings = <&rgb_ug RGB_ON>, <&rgb_ug RGB_COLOR_HSB(0,100,50)>, <&to 8>; + label = "GAME_DOOM_TO"; + }; + + GAME_CS2_TO: GAME_CS2_TO { + compatible = "zmk,behavior-macro"; + #binding-cells = <0>; + bindings = <&rgb_ug RGB_ON>, <&rgb_ug RGB_COLOR_HSB(220,100,50)>, <&to 9>; + label = "GAME_CS2_TO"; + }; + + // Exit: turn off the underglow and return to BASE. + GAME_EXIT: GAME_EXIT { + compatible = "zmk,behavior-macro"; + #binding-cells = <0>; + bindings = <&rgb_ug RGB_OFF>, <&to 0>; + label = "GAME_EXIT"; + }; }; keymap { @@ -420,11 +475,96 @@ &rgb_ug RGB_BRI &rgb_ug RGB_SAI &rgb_ug RGB_HUI &rgb_ug RGB_EFF &trans &trans &mmv MOVE_DOWN &kp KP_SLASH &kp KP_N4 &kp KP_N5 &kp KP_N6 &kp KP_PLUS &trans &rgb_ug RGB_BRD &rgb_ug RGB_SAD &rgb_ug RGB_HUD &rgb_ug RGB_EFR &trans &trans &mmv MOVE_LEFT &kp KP_ASTERISK &kp KP_N1 &kp KP_N2 &kp KP_N3 &kp KP_ENTER &trans &rgb_ug RGB_TOG &trans &trans &trans &trans &trans &mmv MOVE_RIGHT &kp KP_EQUAL &kp KP_N0 &kp COMMA &kp KP_DOT &kp PERCENT &trans -&trans &trans &trans &trans &trans &trans &mkp LCLK &trans &trans &trans &trans &trans +&trans &trans &trans &trans &trans &trans &to 5 &trans &trans &trans &trans &trans >; display-name = "SYS|NUM"; sensor-bindings = <&scroll_encoder>; }; + + // Layer 5 — GAME_PICK: transient launcher reached from SYS center key. + // Joystick directionals select a game; center cancels back to BASE. + // Every other key is &none so a stray press can't escape the picker. + layer_5 { + bindings = < +&none &none &none &none &none &none &GAME_MC_TO &none &none &none &none &none &none +&none &none &none &none &none &none &GAME_LOL_TO &none &none &none &none &none &none +&none &none &none &none &none &none &GAME_DOOM_TO &none &none &none &none &none &none +&none &none &none &none &none &none &GAME_CS2_TO &none &none &none &none &none &none +&none &none &none &none &none &none &to 0 &none &none &none &none &none + >; + + display-name = "GAME?"; + sensor-bindings = <&inc_dec_kp C_VOLUME_UP C_VOL_DN>; + }; + + // Layer 6 — GAME_MC (Minecraft). + // Plain WASD/QWER, no HRM. LCTRL@39 sprint, LSHIFT@57 sneak, SPACE on + // both thumbs. Right half stays as plain QWERTY for chat. Joystick is a + // 4-way audio cluster. F13@62 = push-to-talk for Discord/in-game voice. + layer_6 { + bindings = < +&kp F3 &kp N1 &kp N2 &kp N3 &kp N4 &kp N5 &kp C_VOL_UP &kp N6 &kp N7 &kp N8 &kp N9 &kp N0 &kp MINUS +&kp TAB &kp Q &kp W &kp E &kp R &kp T &kp C_VOL_DN &kp Y &kp U &kp I &kp O &kp P &kp EQUAL +&kp ESC &kp A &kp S &kp D &kp F &kp G &kp C_MUTE &kp H &kp J &kp K &kp L &kp SEMI &kp APOS +&kp LCTRL &kp Z &kp X &kp C &kp V &kp B &kp C_PP &kp N &kp M &kp COMMA &kp DOT &kp FSLH &kp RET +&kp C_MUTE &kp F2 &kp F11 &kp LGUI &kp SPACE &kp LSHFT &kp ENTER &kp SPACE &kp BSPC &kp LALT &kp F13 &mo 3 + >; + + display-name = "MINECRFT"; + sensor-bindings = <&inc_dec_kp C_VOLUME_UP C_VOL_DN>; + }; + + // Layer 7 — GAME_LOL (League of Legends, defaults). + // Same chassis as MC. ` (grave) replaces F3 at pos 0. + // QWER abilities + DF summoners + B recall + 1-6 items all at default + // letter positions. LCTRL@39 used for level-up combos (Ctrl+QWER). + // LSHIFT@57 = self-cast modifier; LALT@61 = ally-cast modifier. + // SPACE on left thumb (56) for camera-center mash. + layer_7 { + bindings = < +&kp GRAVE &kp N1 &kp N2 &kp N3 &kp N4 &kp N5 &kp C_VOL_UP &kp N6 &kp N7 &kp N8 &kp N9 &kp N0 &kp MINUS +&kp TAB &kp Q &kp W &kp E &kp R &kp T &kp C_VOL_DN &kp Y &kp U &kp I &kp O &kp P &kp EQUAL +&kp ESC &kp A &kp S &kp D &kp F &kp G &kp C_MUTE &kp H &kp J &kp K &kp L &kp SEMI &kp APOS +&kp LCTRL &kp Z &kp X &kp C &kp V &kp B &kp C_PP &kp N &kp M &kp COMMA &kp DOT &kp FSLH &kp RET +&kp C_MUTE &kp F2 &kp F11 &kp LGUI &kp SPACE &kp LSHFT &kp ENTER &kp SPACE &kp BSPC &kp LALT &kp F13 &mo 3 + >; + + display-name = "LoL"; + sensor-bindings = <&inc_dec_kp C_VOLUME_UP C_VOL_DN>; + }; + + // Layer 8 — GAME_DOOM (modern, GZDoom-style WASD + mouse). + // Same chassis as MC. ` (grave) at pos 0 = console. + // E (use) and F (alt-use) are reachable from WASD home on the left half. + layer_8 { + bindings = < +&kp GRAVE &kp N1 &kp N2 &kp N3 &kp N4 &kp N5 &kp C_VOL_UP &kp N6 &kp N7 &kp N8 &kp N9 &kp N0 &kp MINUS +&kp TAB &kp Q &kp W &kp E &kp R &kp T &kp C_VOL_DN &kp Y &kp U &kp I &kp O &kp P &kp EQUAL +&kp ESC &kp A &kp S &kp D &kp F &kp G &kp C_MUTE &kp H &kp J &kp K &kp L &kp SEMI &kp APOS +&kp LCTRL &kp Z &kp X &kp C &kp V &kp B &kp C_PP &kp N &kp M &kp COMMA &kp DOT &kp FSLH &kp RET +&kp C_MUTE &kp F2 &kp F11 &kp LGUI &kp SPACE &kp LSHFT &kp ENTER &kp SPACE &kp BSPC &kp LALT &kp F13 &mo 3 + >; + + display-name = "DOOM"; + sensor-bindings = <&inc_dec_kp C_VOLUME_UP C_VOL_DN>; + }; + + // Layer 9 — GAME_CS2 (Counter-Strike 2). + // Same chassis as MC. ` (grave) at pos 0 = developer console. + // Default binds: B buy, R reload, Q last weapon, E use, G drop, all + // at their natural letter positions on the left/right half. + layer_9 { + bindings = < +&kp GRAVE &kp N1 &kp N2 &kp N3 &kp N4 &kp N5 &kp C_VOL_UP &kp N6 &kp N7 &kp N8 &kp N9 &kp N0 &kp MINUS +&kp TAB &kp Q &kp W &kp E &kp R &kp T &kp C_VOL_DN &kp Y &kp U &kp I &kp O &kp P &kp EQUAL +&kp ESC &kp A &kp S &kp D &kp F &kp G &kp C_MUTE &kp H &kp J &kp K &kp L &kp SEMI &kp APOS +&kp LCTRL &kp Z &kp X &kp C &kp V &kp B &kp C_PP &kp N &kp M &kp COMMA &kp DOT &kp FSLH &kp RET +&kp C_MUTE &kp F2 &kp F11 &kp LGUI &kp SPACE &kp LSHFT &kp ENTER &kp SPACE &kp BSPC &kp LALT &kp F13 &mo 3 + >; + + display-name = "CS2"; + sensor-bindings = <&inc_dec_kp C_VOLUME_UP C_VOL_DN>; + }; }; }; diff --git a/keymap-drawer/eyelash_sofle.svg b/keymap-drawer/eyelash_sofle.svg index 940f4668bd..860ffb1ec1 100644 --- a/keymap-drawer/eyelash_sofle.svg +++ b/keymap-drawer/eyelash_sofle.svg @@ -1,99 +1,4 @@ - -/* start glyphs */ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -/* end glyphs */ + diff --git a/keymap-drawer/eyelash_sofle.yaml b/keymap-drawer/eyelash_sofle.yaml index f2e416ce2a..3634106fed 100644 --- a/keymap-drawer/eyelash_sofle.yaml +++ b/keymap-drawer/eyelash_sofle.yaml @@ -1,68 +1,68 @@ layout: {zmk_keyboard: eyelash_sofle} layers: BASE: - - {t: '`', s: '~'} - - {t: '1', s: '!'} - - {t: '2', s: '@'} - - {t: '3', s: '#'} - - {t: '4', s: $} - - {t: '5', s: '%'} - - $$mdi:arrow-up-bold$$ - - {t: '6', s: ^} - - {t: '7', s: '&'} - - {t: '8', s: '*'} - - {t: '9', s: (} - - {t: '0', s: )} - - {t: '-', s: _} - - $$mdi:keyboard-tab$$ + - '`' + - '1' + - '2' + - '3' + - '4' + - '5' + - UP ARROW + - '6' + - '7' + - '8' + - '9' + - '0' + - '-' + - TAB - Q - W - E - - {t: R, h: '$$mdi:apple-keyboard-option$$'} + - {t: R, h: RALT} - T - - $$mdi:arrow-down-bold$$ + - DOWN ARROW - Y - - {t: U, h: '$$mdi:apple-keyboard-option$$'} + - {t: U, h: RALT} - I - O - P - - {t: '=', s: +} - - $$mdi:keyboard-esc$$ + - '=' + - ESC - A - - {t: S, h: '$$mdi:apple-keyboard-option$$'} - - {t: D, h: '$$mdi:apple-keyboard-control$$'} - - {t: F, h: '$$mdi:apple-keyboard-shift$$'} + - {t: S, h: LALT} + - {t: D, h: LCTRL} + - {t: F, h: LSHFT} - G - - $$mdi:arrow-left-bold$$ + - LEFT ARROW - H - - {t: J, h: '$$mdi:apple-keyboard-shift$$'} - - {t: K, h: '$$mdi:apple-keyboard-control$$'} - - {t: L, h: '$$mdi:apple-keyboard-option$$'} - - {t: ;, s: ':'} - - {t: '''', s: '"'} - - {t: \, s: '|'} + - {t: J, h: RSHFT} + - {t: K, h: RCTRL} + - {t: L, h: LALT} + - ; + - '''' + - \ - Z - X - C - V - B - - $$mdi:arrow-right-bold$$ + - RIGHT ARROW - N - M - - {t: ',', s: <} - - {t: ., s: '>'} - - {t: /, s: '?'} - - {t: '$$mdi:keyboard-return$$', type: enter} - - $$mdi:volume-off$$ + - ',' + - . + - / + - RET + - MUTE - SYS|NUM - F11 - LGUI - NAV - - {t: '$$mdi:backspace$$', type: backspace} - - {t: '$$mdi:keyboard-return$$', type: enter} - - $$mdi:keyboard-space$$ - - {t: '$$mdi:backspace-reverse-outline$$', h: CODE} - - $$mdi:alpha-w-box$$ + - BSPC + - ENTER + - SPACE + - {t: DEL, h: CODE} + - '&caps_word' - F12 - MEDIA NAV: @@ -72,7 +72,7 @@ layers: - F3 - F4 - F5 - - {t: '$$mdi:menu-up$$', s: '$$mdi:mouse$$'} + - '&mmv MOVE_UP' - F6 - F7 - F8 @@ -81,11 +81,11 @@ layers: - F11 - Gui+U - Gui+I - - $$mdi:mouse-left-click-outline$$ - - $$mdi:mouse-scroll-wheel$$ - - $$mdi:mouse-right-click-outline$$ + - '&mkp LCLK' + - '&mkp MCLK' + - '&mkp RCLK' - '&mkp MB4' - - {t: '$$mdi:menu-down$$', s: '$$mdi:mouse$$'} + - '&mmv MOVE_DOWN' - HOME - PG DN - PG UP @@ -96,238 +96,317 @@ layers: - Gui+Sft+J - Gui+Sft+K - Gui+Sft+L - - {t: '$$mdi:transfer$$', type: trans} + - {t: ▽, type: trans} - '&mkp MB5' - - {t: '$$mdi:menu-left$$', s: '$$mdi:mouse$$'} - - {t: Gui+1, s: Gui+!} + - '&mmv MOVE_LEFT' + - Gui+1 - Gui+U - Gui+I - - {t: Gui+9, s: Gui+(} - - $$mdi:backspace-reverse-outline$$ + - Gui+9 + - DEL - PAUSE BREAK - Gui+Ctl+U - Gui+Ctl+I - Gui+Sft+Ctl+H - Gui+Sft+Ctl+L - - {t: '$$mdi:transfer$$', type: trans} - - {t: '$$mdi:transfer$$', type: trans} - - {t: '$$mdi:menu-right$$', s: '$$mdi:mouse$$'} - - $$mdi:arrow-left-bold$$ - - $$mdi:arrow-down-bold$$ - - $$mdi:arrow-up-bold$$ - - $$mdi:arrow-right-bold$$ + - {t: ▽, type: trans} + - {t: ▽, type: trans} + - '&mmv MOVE_RIGHT' + - LEFT + - DOWN + - UP + - RIGHT - Gui+Sft+H - Gui+Sft+L - - {t: '$$mdi:transfer$$', type: trans} - - {t: '$$mdi:transfer$$', type: trans} - - {t: '$$mdi:transfer$$', type: trans} - - {t: '$$mdi:transfer$$', type: trans} + - {t: ▽, type: trans} + - {t: ▽, type: trans} + - {t: ▽, type: trans} + - {t: ▽, type: trans} - {type: held} - - $$mdi:backspace-reverse-outline$$ - - $$mdi:mouse-left-click-outline$$ + - DEL + - '&mkp LCLK' - APP - - $$mdi:apple-keyboard-control$$ - - $$mdi:arrow-left-bold$$ - - $$mdi:arrow-right-bold$$ - - {t: '$$mdi:transfer$$', type: trans} + - LCTRL + - LEFT + - RIGHT + - {t: ▽, type: trans} CODE: - - {t: '$$mdi:transfer$$', type: trans} + - {t: ▽, type: trans} - '&M_SIGS' - '&M_SIGW' - '&M_SIGR' - '&M_SIGD' - '&M_CONCAT' - - {t: '$$mdi:transfer$$', type: trans} - - {t: '$$mdi:transfer$$', type: trans} + - {t: ▽, type: trans} + - {t: ▽, type: trans} - '&M_HEEXI' - '&M_HEEXNP' - - {t: '$$mdi:transfer$$', type: trans} - - {t: '$$mdi:transfer$$', type: trans} - - {t: '$$mdi:transfer$$', type: trans} - - {t: '$$mdi:transfer$$', type: trans} - - {t: '$$mdi:transfer$$', type: trans} + - {t: ▽, type: trans} + - {t: ▽, type: trans} + - {t: ▽, type: trans} + - {t: ▽, type: trans} + - {t: ▽, type: trans} - '&M_LARROW' - '&M_PIPE' - '&M_ARROW' - '&M_FARROW' - - {t: '$$mdi:transfer$$', type: trans} + - {t: ▽, type: trans} - '&M_DCOLON' - '&M_CLOSURE' - '&M_DBG' - '&M_TODO' - '&M_TFISH' - - {t: '$$mdi:transfer$$', type: trans} - - {t: '`', s: '~'} + - {t: ▽, type: trans} + - '`' - '{' - - {t: '}', h: '$$mdi:apple-keyboard-option$$'} - - {t: '[', h: '$$mdi:apple-keyboard-control$$', s: '{'} - - {t: ']', h: '$$mdi:apple-keyboard-shift$$', s: '}'} + - {t: '}', h: LALT} + - {t: '[', h: LCTRL} + - {t: ']', h: LSHFT} - + - - {t: '$$mdi:transfer$$', type: trans} + - {t: ▽, type: trans} - '&M_PAREN' - '&M_BRKT' - '&M_BRACE' - '&M_DQUO' - - {t: '$$mdi:transfer$$', type: trans} - - {t: '$$mdi:transfer$$', type: trans} - - {t: '$$mdi:transfer$$', type: trans} - - {t: '-', s: _} + - {t: ▽, type: trans} + - {t: ▽, type: trans} + - {t: ▽, type: trans} + - '-' - _ - ( - ) - - {t: '=', s: +} - - {t: '$$mdi:transfer$$', type: trans} + - '=' + - {t: ▽, type: trans} - '&M_EQEQ' - '&M_NEQ' - '&M_LEQ' - '&M_GEQ' - - {t: '$$mdi:transfer$$', type: trans} - - {t: '$$mdi:transfer$$', type: trans} - - {t: '$$mdi:transfer$$', type: trans} - - {t: '$$mdi:transfer$$', type: trans} - - {t: '$$mdi:transfer$$', type: trans} - - {t: '$$mdi:transfer$$', type: trans} - - {t: '$$mdi:transfer$$', type: trans} - - {t: '$$mdi:transfer$$', type: trans} - - {t: '$$mdi:transfer$$', type: trans} - - {t: '$$mdi:transfer$$', type: trans} + - {t: ▽, type: trans} + - {t: ▽, type: trans} + - {t: ▽, type: trans} + - {t: ▽, type: trans} + - {t: ▽, type: trans} + - {t: ▽, type: trans} + - {t: ▽, type: trans} + - {t: ▽, type: trans} + - {t: ▽, type: trans} + - {t: ▽, type: trans} - {type: held} - - {t: '$$mdi:transfer$$', type: trans} - - {t: '$$mdi:transfer$$', type: trans} - - {t: '$$mdi:transfer$$', type: trans} + - {t: ▽, type: trans} + - {t: ▽, type: trans} + - {t: ▽, type: trans} MEDIA: - - {t: '$$mdi:transfer$$', type: trans} - - {t: '$$mdi:transfer$$', type: trans} - - {t: '$$mdi:transfer$$', type: trans} - - {t: '$$mdi:transfer$$', type: trans} - - {t: '$$mdi:transfer$$', type: trans} - - {t: '$$mdi:transfer$$', type: trans} - - $$mdi:volume-high$$ - - {t: '$$mdi:transfer$$', type: trans} - - {t: '$$mdi:transfer$$', type: trans} - - {t: '$$mdi:transfer$$', type: trans} - - {t: '$$mdi:transfer$$', type: trans} - - {t: '$$mdi:transfer$$', type: trans} - - {t: '$$mdi:transfer$$', type: trans} - - {t: '$$mdi:transfer$$', type: trans} - - {t: '$$mdi:transfer$$', type: trans} - - {t: '$$mdi:transfer$$', type: trans} - - {t: '$$mdi:transfer$$', type: trans} - - {t: '$$mdi:transfer$$', type: trans} - - {t: '$$mdi:transfer$$', type: trans} - - $$mdi:volume-low$$ - - {t: '$$mdi:transfer$$', type: trans} - - {t: '$$mdi:transfer$$', type: trans} - - {t: '$$mdi:transfer$$', type: trans} - - {t: '$$mdi:transfer$$', type: trans} - - {t: '$$mdi:transfer$$', type: trans} - - {t: '$$mdi:transfer$$', type: trans} - - {t: '$$mdi:transfer$$', type: trans} - - {t: '$$mdi:transfer$$', type: trans} - - {t: '$$mdi:transfer$$', type: trans} - - {t: '$$mdi:transfer$$', type: trans} - - {t: '$$mdi:transfer$$', type: trans} - - {t: '$$mdi:transfer$$', type: trans} - - $$mdi:play-pause$$ - - $$mdi:volume-low$$ - - $$mdi:volume-high$$ - - $$mdi:play-pause$$ + - {t: ▽, type: trans} + - {t: ▽, type: trans} + - {t: ▽, type: trans} + - {t: ▽, type: trans} + - {t: ▽, type: trans} + - {t: ▽, type: trans} + - VOL UP + - {t: ▽, type: trans} + - {t: ▽, type: trans} + - {t: ▽, type: trans} + - {t: ▽, type: trans} + - {t: ▽, type: trans} + - {t: ▽, type: trans} + - {t: ▽, type: trans} + - {t: ▽, type: trans} + - {t: ▽, type: trans} + - {t: ▽, type: trans} + - {t: ▽, type: trans} + - {t: ▽, type: trans} + - VOL DN + - {t: ▽, type: trans} + - {t: ▽, type: trans} + - {t: ▽, type: trans} + - {t: ▽, type: trans} + - {t: ▽, type: trans} + - {t: ▽, type: trans} + - {t: ▽, type: trans} + - {t: ▽, type: trans} + - {t: ▽, type: trans} + - {t: ▽, type: trans} + - {t: ▽, type: trans} + - {t: ▽, type: trans} + - PP + - VOL DN + - VOL UP + - PP - STOP - - {t: '$$mdi:transfer$$', type: trans} - - {t: '$$mdi:transfer$$', type: trans} - - {t: '$$mdi:transfer$$', type: trans} - - {t: '$$mdi:transfer$$', type: trans} - - {t: '$$mdi:transfer$$', type: trans} - - {t: '$$mdi:transfer$$', type: trans} - - {t: '$$mdi:transfer$$', type: trans} - - {t: '$$mdi:transfer$$', type: trans} - - $$mdi:skip-next$$ + - {t: ▽, type: trans} + - {t: ▽, type: trans} + - {t: ▽, type: trans} + - {t: ▽, type: trans} + - {t: ▽, type: trans} + - {t: ▽, type: trans} + - {t: ▽, type: trans} + - {t: ▽, type: trans} + - NEXT - F20 - - $$mdi:volume-off$$ - - $$mdi:skip-previous$$ - - $$mdi:skip-next$$ - - {t: '$$mdi:transfer$$', type: trans} - - {t: '$$mdi:transfer$$', type: trans} - - {t: '$$mdi:transfer$$', type: trans} - - {t: '$$mdi:transfer$$', type: trans} - - {t: '$$mdi:transfer$$', type: trans} - - {t: '$$mdi:transfer$$', type: trans} - - {t: '$$mdi:transfer$$', type: trans} - - {t: '$$mdi:transfer$$', type: trans} - - $$mdi:volume-off$$ - - {t: '$$mdi:transfer$$', type: trans} - - {t: '$$mdi:transfer$$', type: trans} - - {t: '$$mdi:transfer$$', type: trans} - - {t: '$$mdi:transfer$$', type: trans} + - MUTE + - PREV + - NEXT + - {t: ▽, type: trans} + - {t: ▽, type: trans} + - {t: ▽, type: trans} + - {t: ▽, type: trans} + - {t: ▽, type: trans} + - {t: ▽, type: trans} + - {t: ▽, type: trans} + - {t: ▽, type: trans} + - MUTE + - {t: ▽, type: trans} + - {t: ▽, type: trans} + - {t: ▽, type: trans} + - {t: ▽, type: trans} - {type: held} SYS|NUM: - - $$mdi:bluetooth-off$$ - - {h: '1', s: '$$mdi:bluetooth-connect$$'} - - {h: '2', s: '$$mdi:bluetooth-connect$$'} - - {h: '3', s: '$$mdi:bluetooth-connect$$'} - - {h: '4', s: '$$mdi:bluetooth-connect$$'} - - {h: '5', s: '$$mdi:bluetooth-connect$$'} - - {t: '$$mdi:menu-up$$', s: '$$mdi:mouse$$'} + - BT CLR + - {t: BT, h: '0'} + - {t: BT, h: '1'} + - {t: BT, h: '2'} + - {t: BT, h: '3'} + - {t: BT, h: '4'} + - '&mmv MOVE_UP' - KP NUM - KP 7 - KP 8 - KP 9 - KP MINUS - - {t: '$$mdi:transfer$$', type: trans} + - {t: ▽, type: trans} - RGB BRI - RGB SAI - RGB HUI - RGB EFF - - {t: '$$mdi:transfer$$', type: trans} - - {t: '$$mdi:transfer$$', type: trans} - - {t: '$$mdi:menu-down$$', s: '$$mdi:mouse$$'} + - {t: ▽, type: trans} + - {t: ▽, type: trans} + - '&mmv MOVE_DOWN' - KP SLASH - KP 4 - KP 5 - KP 6 - KP PLUS - - {t: '$$mdi:transfer$$', type: trans} + - {t: ▽, type: trans} - RGB BRD - RGB SAD - RGB HUD - RGB EFR - - {t: '$$mdi:transfer$$', type: trans} - - {t: '$$mdi:transfer$$', type: trans} - - {t: '$$mdi:menu-left$$', s: '$$mdi:mouse$$'} + - {t: ▽, type: trans} + - {t: ▽, type: trans} + - '&mmv MOVE_LEFT' - KP ASTERISK - KP 1 - KP 2 - KP 3 - KP ENTER - - {t: '$$mdi:transfer$$', type: trans} + - {t: ▽, type: trans} - RGB TOG - - {t: '$$mdi:transfer$$', type: trans} - - {t: '$$mdi:transfer$$', type: trans} - - {t: '$$mdi:transfer$$', type: trans} - - {t: '$$mdi:transfer$$', type: trans} - - {t: '$$mdi:transfer$$', type: trans} - - {t: '$$mdi:menu-right$$', s: '$$mdi:mouse$$'} + - {t: ▽, type: trans} + - {t: ▽, type: trans} + - {t: ▽, type: trans} + - {t: ▽, type: trans} + - {t: ▽, type: trans} + - '&mmv MOVE_RIGHT' - KP EQUAL - KP 0 - - {t: ',', s: <} + - ',' - KP DOT - '%' - - {t: '$$mdi:transfer$$', type: trans} - - {t: '$$mdi:transfer$$', type: trans} + - {t: ▽, type: trans} + - {t: ▽, type: trans} - {type: held} - - {t: '$$mdi:transfer$$', type: trans} - - {t: '$$mdi:transfer$$', type: trans} - - {t: '$$mdi:transfer$$', type: trans} - - {t: '$$mdi:transfer$$', type: trans} - - $$mdi:mouse-left-click-outline$$ - - {t: '$$mdi:transfer$$', type: trans} - - {t: '$$mdi:transfer$$', type: trans} - - {t: '$$mdi:transfer$$', type: trans} - - {t: '$$mdi:transfer$$', type: trans} - - {t: '$$mdi:transfer$$', type: trans} + - {t: ▽, type: trans} + - {t: ▽, type: trans} + - {t: ▽, type: trans} + - {t: ▽, type: trans} + - {t: 'GAME?', h: toggle} + - {t: ▽, type: trans} + - {t: ▽, type: trans} + - {t: ▽, type: trans} + - {t: ▽, type: trans} + - {t: ▽, type: trans} + GAME?: + - '' + - '' + - '' + - '' + - '' + - '' + - '&GAME_MC_TO' + - '' + - '' + - '' + - '' + - '' + - '' + - '' + - '' + - '' + - '' + - '' + - '' + - '&GAME_LOL_TO' + - '' + - '' + - '' + - '' + - '' + - '' + - '' + - '' + - '' + - '' + - '' + - '' + - '&GAME_DOOM_TO' + - '' + - '' + - '' + - '' + - '' + - '' + - '' + - '' + - '' + - '' + - '' + - '' + - '&GAME_CS2_TO' + - '' + - '' + - '' + - '' + - '' + - '' + - '' + - '' + - '' + - '' + - '' + - '' + - {t: BASE, h: toggle} + - '' + - '' + - '' + - '' + - '' + MINECRFT: [F3, '1', '2', '3', '4', '5', VOL UP, '6', '7', '8', '9', '0', '-', TAB, Q, W, E, R, T, VOL DN, Y, U, I, O, P, '=', ESC, A, S, D, F, G, MUTE, H, J, K, + L, ;, '''', LCTRL, Z, X, C, V, B, PP, N, M, ',', ., /, RET, MUTE, F2, F11, LGUI, SPACE, LSHFT, ENTER, SPACE, BSPC, LALT, F13, MEDIA] + LoL: ['`', '1', '2', '3', '4', '5', VOL UP, '6', '7', '8', '9', '0', '-', TAB, Q, W, E, R, T, VOL DN, Y, U, I, O, P, '=', ESC, A, S, D, F, G, MUTE, H, J, K, L, + ;, '''', LCTRL, Z, X, C, V, B, PP, N, M, ',', ., /, RET, MUTE, F2, F11, LGUI, SPACE, LSHFT, ENTER, SPACE, BSPC, LALT, F13, MEDIA] + DOOM: ['`', '1', '2', '3', '4', '5', VOL UP, '6', '7', '8', '9', '0', '-', TAB, Q, W, E, R, T, VOL DN, Y, U, I, O, P, '=', ESC, A, S, D, F, G, MUTE, H, J, K, L, + ;, '''', LCTRL, Z, X, C, V, B, PP, N, M, ',', ., /, RET, MUTE, F2, F11, LGUI, SPACE, LSHFT, ENTER, SPACE, BSPC, LALT, F13, MEDIA] + CS2: ['`', '1', '2', '3', '4', '5', VOL UP, '6', '7', '8', '9', '0', '-', TAB, Q, W, E, R, T, VOL DN, Y, U, I, O, P, '=', ESC, A, S, D, F, G, MUTE, H, J, K, L, + ;, '''', LCTRL, Z, X, C, V, B, PP, N, M, ',', ., /, RET, MUTE, F2, F11, LGUI, SPACE, LSHFT, ENTER, SPACE, BSPC, LALT, F13, MEDIA] combos: - p: [14, 28, 40] k: '&soft_off' - p: [39, 49] k: '&M_PIPE' l: [BASE] +- p: [0, 12] + k: '&GAME_EXIT' + l: [MINECRFT, LoL, DOOM, CS2] +- p: [0, 5] + k: {t: 'GAME?', h: toggle} + l: [MINECRFT, LoL, DOOM, CS2]