// Copyright (c) 2022 The ZMK Contributors // SPDX-License-Identifier: MIT #include #include #include #define RIGHT_KEYS 6 7 8 9 10 11 18 19 20 21 22 23 30 31 32 33 34 35 39 40 41 #define LEFT_KEYS 0 1 2 3 4 5 12 13 14 15 16 17 24 25 26 27 28 29 36 37 38 #define BASE 0 #define NOHOMODS 1 #define GAMES 2 #define SYM 3 #define NAV 4 #define FKEYS 5 #define NUM 6 #define WM 7 #define CTRL 8 #define TTY 9 #define CZ_ACUTE 10 #define CZ_CARET 11 #define DEAD_KEY_MACRO(name, dead_key, symbol) \ / { \ macros { \ name: name { \ compatible = "zmk,behavior-macro"; \ wait-ms = <0>; \ tap-ms = <0>; \ #binding-cells = <0>; \ bindings = <¯o_tap dead_key>, <¯o_tap &kp symbol>; \ }; \ }; \ }; #define SHIFTED_DEAD_KEY_MACRO(name, dead_key, symbol) \ / { \ macros { \ name: name { \ compatible = "zmk,behavior-macro"; \ wait-ms = <0>; \ tap-ms = <0>; \ #binding-cells = <0>; \ bindings = <¯o_tap dead_key>, <¯o_tap &kp LS(symbol)>; \ }; \ }; \ }; #define DEAD_KEY_BEHAVIOR(name, nonshifted_name, shifted_name) \ / { \ behaviors { \ name: name { \ compatible = "zmk,behavior-mod-morph"; \ #binding-cells = <0>; \ bindings = <&nonshifted_name>, <&shifted_name>; \ mods = <(MOD_LSFT | MOD_RSFT)>; \ }; \ }; \ }; #define CZECH_CHAR_MACRO(name, dead_key, symbol) \ DEAD_KEY_MACRO(nonshifted_czech_ ## name, dead_key, symbol) \ SHIFTED_DEAD_KEY_MACRO(shifted_czech_ ## name, dead_key, symbol) \ DEAD_KEY_BEHAVIOR(czech_ ## name, nonshifted_czech_ ## name, shifted_czech_ ## name) #define CZECH_CARET_MACRO(symbol) \ CZECH_CHAR_MACRO(caret_ ## symbol, &kp LS(RA(EQUAL)), symbol) #define CZECH_ACUTE_MACRO(symbol) \ CZECH_CHAR_MACRO(acute_ ## symbol, &kp RA(EQUAL), symbol) #define CZ_AC_A &czech_acute_A #define CZ_AC_E &czech_acute_E #define CZ_AC_I &czech_acute_I #define CZ_AC_O &czech_acute_O #define CZ_AC_U &czech_acute_U #define CZ_AC_Y &czech_acute_Y #define CZ_CA_C &czech_caret_C #define CZ_CA_D &czech_caret_D #define CZ_CA_E &czech_caret_E #define CZ_CA_N &czech_caret_N #define CZ_CA_R &czech_caret_R #define CZ_CA_S &czech_caret_S #define CZ_CA_T &czech_caret_T #define CZ_CA_U &kp RA(SEMI) #define CZ_CA_Z &czech_caret_Z CZECH_ACUTE_MACRO(A) CZECH_ACUTE_MACRO(E) CZECH_ACUTE_MACRO(I) CZECH_ACUTE_MACRO(O) CZECH_ACUTE_MACRO(U) CZECH_ACUTE_MACRO(Y) CZECH_CARET_MACRO(C) CZECH_CARET_MACRO(D) CZECH_CARET_MACRO(E) CZECH_CARET_MACRO(N) CZECH_CARET_MACRO(R) CZECH_CARET_MACRO(S) CZECH_CARET_MACRO(T) CZECH_CARET_MACRO(Z) < { tapping-term-ms = <170>; quick-tap-ms = <110>; flavor = "balanced"; hold-trigger-on-release; }; / { behaviors { prog_caps: prog_caps { compatible = "zmk,behavior-caps-word"; #binding-cells = <0>; continue-list = ; }; hltl: home_row_layer_toggle_l { compatible = "zmk,behavior-hold-tap"; #binding-cells = <2>; flavor = "balanced"; require-prior-idle-ms = <50>; tapping-term-ms = <170>; quick-tap-ms = <100>; bindings = <&mo>, <&kp>; hold-trigger-key-positions = ; hold-trigger-on-release; }; hltr: home_row_layer_toggle_r { compatible = "zmk,behavior-hold-tap"; #binding-cells = <2>; flavor = "balanced"; require-prior-idle-ms = <50>; tapping-term-ms = <170>; quick-tap-ms = <100>; bindings = <&mo>, <&kp>; hold-trigger-key-positions = ; hold-trigger-on-release; }; hml: home_row_mod_left { compatible = "zmk,behavior-hold-tap"; #binding-cells = <2>; flavor = "balanced"; require-prior-idle-ms = <50>; tapping-term-ms = <170>; quick-tap-ms = <100>; bindings = <&kp>, <&kp>; hold-trigger-key-positions = ; hold-trigger-on-release; }; hmr: home_row_mod_right { compatible = "zmk,behavior-hold-tap"; #binding-cells = <2>; flavor = "balanced"; require-prior-idle-ms = <50>; tapping-term-ms = <170>; quick-tap-ms = <100>; bindings = <&kp>, <&kp>; hold-trigger-key-positions = ; hold-trigger-on-release; }; comma_excl: mod_morph_comma { compatible = "zmk,behavior-mod-morph"; #binding-cells = <0>; bindings = <&kp COMMA>, <&kp EXCL>; mods = <(MOD_LSFT | MOD_RSFT)>; }; dot_ques: mod_morph_dot { compatible = "zmk,behavior-mod-morph"; #binding-cells = <0>; bindings = <&kp DOT>, <&kp QMARK>; mods = <(MOD_LSFT | MOD_RSFT)>; }; }; combos { compatible = "zmk,combos"; combo_tab { timeout-ms = <20>; key-positions = <2 3>; bindings = <&kp TAB>; layers = ; }; combo_caps_word { timeout-ms = <50>; key-positions = <15 20>; bindings = <&prog_caps>; layers = ; }; }; keymap { compatible = "zmk,keymap"; base { bindings = < //╭─────────────┬─────────────┬─────────────┬─────────────┬─────────────┬─────────────╮ ╭─────────────┬─────────────┬─────────────┬─────────────┬─────────────┬─────────────╮ &trans &hml LGUI Q &kp W &kp E &kp R &kp T &kp Y &kp U &kp I &kp O &hmr RGUI P &trans //├─────────────┼─────────────┼─────────────┼─────────────┼─────────────┼─────────────┤ ├─────────────┼─────────────┼─────────────┼─────────────┼─────────────┼─────────────┤ &trans &hltl SYM A &hml LALT S &hml LSHIFT D &hml LCTRL F &kp G &kp H &hmr RCTRL J &hmr RSHIFT K &hmr LALT L &hltr SYM SEMI &mo CTRL //├─────────────┼─────────────┼─────────────┼─────────────┼─────────────┼─────────────┤ ├─────────────┼─────────────┼─────────────┼─────────────┼─────────────┼─────────────┤ &key_repeat &kp Z &kp X &kp C &kp V &kp B &kp N &hltr WM M &comma_excl &dot_ques &kp FSLH &mo FKEYS //╰─────────────┴─────────────┴─────────────┴─────────────┼─────────────┼─────────────┤ ├─────────────┼─────────────┼─────────────┴─────────────┴─────────────┴─────────────╯ &mo CZ_ACUTE < NAV ESC < NUM SPACE &kp ENTER &kp BSPC &mo CZ_CARET // ╰─────────────┴─────────────┴─────────────╯ ╰─────────────┴─────────────┴─────────────╯ >; }; no_home_mods { bindings = < //╭─────────────┬─────────────┬─────────────┬─────────────┬─────────────┬─────────────╮ ╭─────────────┬─────────────┬─────────────┬─────────────┬─────────────┬─────────────╮ &hml LGUI TAB &kp Q &kp W &kp E &kp R &kp T &kp Y &kp U &kp I &kp O &kp P &hmr LGUI BSLH //├─────────────┼─────────────┼─────────────┼─────────────┼─────────────┼─────────────┤ ├─────────────┼─────────────┼─────────────┼─────────────┼─────────────┼─────────────┤ &hml LCTRL ESC &hltl SYM A &kp S &kp D &kp F &hltl NUM G &kp H &kp J &kp K &kp L &hltr SYM SEMI &mo CTRL //├─────────────┼─────────────┼─────────────┼─────────────┼─────────────┼─────────────┤ ├─────────────┼─────────────┼─────────────┼─────────────┼─────────────┼─────────────┤ &sk LSHIFT &kp Z &kp X &kp C &kp V &kp B &kp N &kp M &comma_excl &dot_ques &kp FSLH &sk RSHIFT //╰─────────────┴─────────────┴─────────────┴─────────────┼─────────────┼─────────────┤ ├─────────────┼─────────────┼─────────────┴─────────────┴─────────────┴─────────────╯ &mo CZ_ACUTE &kp ESC &hml LALT SPACE &hmr LALT ENTER &kp BSPC &mo CZ_CARET // ╰─────────────┴─────────────┴─────────────╯ ╰─────────────┴─────────────┴─────────────╯ >; }; games { bindings = < //╭─────────────┬─────────────┬─────────────┬─────────────┬─────────────┬─────────────╮ ╭─────────────┬─────────────┬─────────────┬─────────────┬─────────────┬─────────────╮ &kp TAB &kp Q &kp W &kp E &kp R &kp T &kp Y &kp U &kp I &kp O &kp P &kp BSLH //├─────────────┼─────────────┼─────────────┼─────────────┼─────────────┼─────────────┤ ├─────────────┼─────────────┼─────────────┼─────────────┼─────────────┼─────────────┤ &kp LCTRL &kp A &kp S &kp D &kp F &kp G &kp H &kp J &kp K &kp L &kp SEMI &mo CTRL //├─────────────┼─────────────┼─────────────┼─────────────┼─────────────┼─────────────┤ ├─────────────┼─────────────┼─────────────┼─────────────┼─────────────┼─────────────┤ &kp LSHIFT &kp Z &kp X &kp C &kp V &kp B &kp N &kp M &comma_excl &dot_ques &kp FSLH &kp RSHIFT //╰─────────────┴─────────────┴─────────────┴─────────────┼─────────────┼─────────────┤ ├─────────────┼─────────────┼─────────────┴─────────────┴─────────────┴─────────────╯ &mo FKEYS &key_repeat &kp SPACE &hmr LALT ENTER &kp BSPC &mo CZ_CARET // ╰─────────────┴─────────────┴─────────────╯ ╰─────────────┴─────────────┴─────────────╯ >; }; symbols { bindings = < //╭─────────────┬─────────────┬─────────────┬─────────────┬─────────────┬─────────────╮ ╭─────────────┬─────────────┬─────────────┬─────────────┬─────────────┬─────────────╮ &trans &kp SQT &kp LT &kp GT &kp BSLH &kp GRAVE &kp AMPS &kp UNDER &kp LBKT &kp RBKT &kp PRCNT &trans //├─────────────┼─────────────┼─────────────┼─────────────┼─────────────┼─────────────┤ ├─────────────┼─────────────┼─────────────┼─────────────┼─────────────┼─────────────┤ &trans &kp EXCL &kp MINUS &kp PLUS &kp EQUAL &kp HASH &kp PIPE &kp TILDE &kp LPAR &kp RPAR &kp DQT &trans //├─────────────┼─────────────┼─────────────┼─────────────┼─────────────┼─────────────┤ ├─────────────┼─────────────┼─────────────┼─────────────┼─────────────┼─────────────┤ &trans &kp COLON &kp FSLH &kp ASTRK &kp CARET &trans &trans &kp DLLR &kp LBRC &kp RBRC &kp AT &trans //╰─────────────┴─────────────┴─────────────┴─────────────┼─────────────┼─────────────┤ ├─────────────┼─────────────┼─────────────┴─────────────┴─────────────┴─────────────╯ &trans &kp TAB &trans &trans &kp DEL &none // ╰─────────────┴─────────────┴─────────────╯ ╰─────────────┴─────────────┴─────────────╯ >; }; navigation { bindings = < //╭─────────────┬─────────────┬─────────────┬─────────────┬─────────────┬─────────────╮ ╭─────────────┬─────────────┬─────────────┬─────────────┬─────────────┬─────────────╮ &trans &kp LGUI &trans &trans &trans &trans &kp HOME &kp PG_DN &kp PG_UP &kp END &kp INS &kp DEL //├─────────────┼─────────────┼─────────────┼─────────────┼─────────────┼─────────────┤ ├─────────────┼─────────────┼─────────────┼─────────────┼─────────────┼─────────────┤ &trans &kp LCTRL &kp LALT &sk LSHIFT &kp LCTRL &trans &kp LEFT &kp DOWN &kp UP &kp RIGHT &trans &trans //├─────────────┼─────────────┼─────────────┼─────────────┼─────────────┼─────────────┤ ├─────────────┼─────────────┼─────────────┼─────────────┼─────────────┼─────────────┤ &trans &trans &trans &trans &trans &trans &kp PAUSE_BREAK &kp C_PREV &kp C_PP &kp C_NEXT &kp C_MUTE &kp PSCRN //╰─────────────┴─────────────┴─────────────┴─────────────┼─────────────┼─────────────┤ ├─────────────┼─────────────┼─────────────┴─────────────┴─────────────┴─────────────╯ &trans &trans &trans &trans &kp TAB &none // ╰─────────────┴─────────────┴─────────────╯ ╰─────────────┴─────────────┴─────────────╯ >; }; function_keys { bindings = < //╭─────────────┬─────────────┬─────────────┬─────────────┬─────────────┬─────────────╮ ╭─────────────┬─────────────┬─────────────┬─────────────┬─────────────┬─────────────╮ &trans &trans &kp F4 &kp F9 &kp F8 &kp F10 &trans &trans &trans &trans &kp RGUI &trans //├─────────────┼─────────────┼─────────────┼─────────────┼─────────────┼─────────────┤ ├─────────────┼─────────────┼─────────────┼─────────────┼─────────────┼─────────────┤ &trans &trans &kp F3 &kp F2 &kp F1 &kp F11 &trans &kp LCTRL &sk RSHIFT &kp LALT &kp RGUI &trans //├─────────────┼─────────────┼─────────────┼─────────────┼─────────────┼─────────────┤ ├─────────────┼─────────────┼─────────────┼─────────────┼─────────────┼─────────────┤ &mo CTRL &trans &kp F5 &kp F6 &kp F7 &kp F12 &trans &trans &trans &trans &trans &trans //╰─────────────┴─────────────┴─────────────┴─────────────┼─────────────┼─────────────┤ ├─────────────┼─────────────┼─────────────┴─────────────┴─────────────┴─────────────╯ &trans &trans &trans &trans &trans &none // ╰─────────────┴─────────────┴─────────────╯ ╰─────────────┴─────────────┴─────────────╯ >; }; numbers { bindings = < //╭─────────────┬─────────────┬─────────────┬─────────────┬─────────────┬─────────────╮ ╭─────────────┬─────────────┬─────────────┬─────────────┬─────────────┬─────────────╮ &trans &trans &trans &trans &trans &trans &kp PLUS &kp N8 &kp N9 &kp N4 &trans &trans //├─────────────┼─────────────┼─────────────┼─────────────┼─────────────┼─────────────┤ ├─────────────┼─────────────┼─────────────┼─────────────┼─────────────┼─────────────┤ &trans &kp LGUI &kp LALT &kp LCTRL &sk LSHIFT &trans &kp EQUAL &kp N1 &kp N2 &kp N3 &kp FSLH &trans //├─────────────┼─────────────┼─────────────┼─────────────┼─────────────┼─────────────┤ ├─────────────┼─────────────┼─────────────┼─────────────┼─────────────┼─────────────┤ &trans &trans &trans &trans &trans &trans &kp MINUS &kp N7 &kp N6 &kp N5 &kp DOT &trans //╰─────────────┴─────────────┴─────────────┴─────────────┼─────────────┼─────────────┤ ├─────────────┼─────────────┼─────────────┴─────────────┴─────────────┴─────────────╯ &trans &trans &trans &kp N0 &none &none // ╰─────────────┴─────────────┴─────────────╯ ╰─────────────┴─────────────┴─────────────╯ >; }; window_manager { bindings = < //╭─────────────┬─────────────┬─────────────┬─────────────┬─────────────┬─────────────╮ ╭─────────────┬─────────────┬─────────────┬─────────────┬─────────────┬─────────────╮ &trans &kp LG(E) &kp LG(N4) &kp LG(N9) &kp LG(N8) &trans &trans &trans &kp LG(SEMI) &kp LG(LS(ENTER)) &trans &trans //├─────────────┼─────────────┼─────────────┼─────────────┼─────────────┼─────────────┤ ├─────────────┼─────────────┼─────────────┼─────────────┼─────────────┼─────────────┤ &trans &kp LG(W) &kp LG(N3) &kp LG(N2) &kp LG(N1) &trans &trans &kp RCTRL &kp RSHIFT &kp LALT &kp RGUI &kp LG(LS(C)) //├─────────────┼─────────────┼─────────────┼─────────────┼─────────────┼─────────────┤ ├─────────────┼─────────────┼─────────────┼─────────────┼─────────────┼─────────────┤ &trans &kp LG(R) &kp LG(N5) &kp LG(N6) &kp LG(N7) &trans &trans &trans &trans &trans &trans &kp LG(LS(SEMI)) //╰─────────────┴─────────────┴─────────────┴─────────────┼─────────────┼─────────────┤ ├─────────────┼─────────────┼─────────────┴─────────────┴─────────────┴─────────────╯ &trans &trans &none &trans &trans &trans // ╰─────────────┴─────────────┴─────────────╯ ╰─────────────┴─────────────┴─────────────╯ >; }; control { bindings = < //╭─────────────┬─────────────┬─────────────┬─────────────┬─────────────┬─────────────╮ ╭─────────────┬─────────────┬─────────────┬─────────────┬─────────────┬─────────────╮ &trans &sys_reset &trans &trans &bt BT_SEL 3 &bt BT_SEL 0 &trans &trans &trans &trans &trans &sys_reset //├─────────────┼─────────────┼─────────────┼─────────────┼─────────────┼─────────────┤ ├─────────────┼─────────────┼─────────────┼─────────────┼─────────────┼─────────────┤ &trans &bootloader &trans &trans &bt BT_SEL 4 &bt BT_SEL 1 &trans &trans &trans &trans &trans &bootloader //├─────────────┼─────────────┼─────────────┼─────────────┼─────────────┼─────────────┤ ├─────────────┼─────────────┼─────────────┼─────────────┼─────────────┼─────────────┤ &trans &bt BT_CLR &trans &trans &trans &bt BT_SEL 2 &trans &trans &trans &trans &trans &trans //╰─────────────┴─────────────┴─────────────┴─────────────┼─────────────┼─────────────┤ ├─────────────┼─────────────┼─────────────┴─────────────┴─────────────┴─────────────╯ &trans &trans &trans &to BASE &to NOHOMODS &to GAMES // ╰─────────────┴─────────────┴─────────────╯ ╰─────────────┴─────────────┴─────────────╯ >; }; tty { bindings = < //╭─────────────┬─────────────┬─────────────┬─────────────┬─────────────┬─────────────╮ ╭─────────────┬─────────────┬─────────────┬─────────────┬─────────────┬─────────────╮ &trans &trans &kp LA(LC(F4)) &kp LA(LC(F9)) &kp LA(LC(F8)) &kp LA(LC(F10)) &trans &trans &trans &trans &trans &trans //├─────────────┼─────────────┼─────────────┼─────────────┼─────────────┼─────────────┤ ├─────────────┼─────────────┼─────────────┼─────────────┼─────────────┼─────────────┤ &trans &trans &kp LA(LC(F3)) &kp LA(LC(F2)) &kp LA(LC(F1)) &kp LA(LC(F11)) &trans &trans &trans &trans &trans &trans //├─────────────┼─────────────┼─────────────┼─────────────┼─────────────┼─────────────┤ ├─────────────┼─────────────┼─────────────┼─────────────┼─────────────┼─────────────┤ &trans &trans &kp LA(LC(F5)) &kp LA(LC(F6)) &kp LA(LC(F7)) &kp LA(LC(F12)) &trans &trans &trans &trans &trans &trans //╰─────────────┴─────────────┴─────────────┴─────────────┼─────────────┼─────────────┤ ├─────────────┼─────────────┼─────────────┴─────────────┴─────────────┴─────────────╯ &trans &trans &none &trans &trans &trans // ╰─────────────┴─────────────┴─────────────╯ ╰─────────────┴─────────────┴─────────────╯ >; }; czech_acute { bindings = < //╭─────────────┬─────────────┬─────────────┬─────────────┬─────────────┬─────────────╮ ╭─────────────┬─────────────┬─────────────┬─────────────┬─────────────┬─────────────╮ &trans &trans &trans CZ_AC_E &trans &trans CZ_AC_Y CZ_AC_U CZ_AC_I CZ_AC_O &trans &trans //├─────────────┼─────────────┼─────────────┼─────────────┼─────────────┼─────────────┤ ├─────────────┼─────────────┼─────────────┼─────────────┼─────────────┼─────────────┤ &trans CZ_AC_A &trans &trans &trans &trans &trans &trans &trans &trans &trans &trans //├─────────────┼─────────────┼─────────────┼─────────────┼─────────────┼─────────────┤ ├─────────────┼─────────────┼─────────────┼─────────────┼─────────────┼─────────────┤ &trans &trans &trans &trans &trans &trans &trans &trans &trans &trans &trans &trans //╰─────────────┴─────────────┴─────────────┴─────────────┼─────────────┼─────────────┤ ├─────────────┼─────────────┼─────────────┴─────────────┴─────────────┴─────────────╯ &trans &trans &trans &trans &trans &trans // ╰─────────────┴─────────────┴─────────────╯ ╰─────────────┴─────────────┴─────────────╯ >; }; czech_caret { bindings = < //╭─────────────┬─────────────┬─────────────┬─────────────┬─────────────┬─────────────╮ ╭─────────────┬─────────────┬─────────────┬─────────────┬─────────────┬─────────────╮ &trans &trans &trans CZ_CA_E CZ_CA_R CZ_CA_T &trans CZ_CA_U &trans &trans &trans &trans //├─────────────┼─────────────┼─────────────┼─────────────┼─────────────┼─────────────┤ ├─────────────┼─────────────┼─────────────┼─────────────┼─────────────┼─────────────┤ &trans &trans CZ_CA_S CZ_CA_D &trans &trans &trans &trans &trans &trans &trans &trans //├─────────────┼─────────────┼─────────────┼─────────────┼─────────────┼─────────────┤ ├─────────────┼─────────────┼─────────────┼─────────────┼─────────────┼─────────────┤ &trans CZ_CA_Z &trans CZ_CA_C &trans &trans CZ_CA_N &trans &trans &trans &trans &trans //╰─────────────┴─────────────┴─────────────┴─────────────┼─────────────┼─────────────┤ ├─────────────┼─────────────┼─────────────┴─────────────┴─────────────┴─────────────╯ &trans &trans &trans &trans &trans &trans // ╰─────────────┴─────────────┴─────────────╯ ╰─────────────┴─────────────┴─────────────╯ >; }; }; };