// Copyright (c) 2022 The ZMK Contributors // SPDX-License-Identifier: MIT #include #include #include // Home row mods macro #define HRML(k1,k2,k3,k4) &hltl SYM k1 &hml LALT k2 &hml LSHFT k3 &hml LCTRL k4 #define HRMR(k1,k2,k3,k4) &hmr RCTRL k1 &hmr RSHFT k2 &hmr LALT k3 &hltr SYM k4 #define RIGHT_KEYS 5 6 7 8 9 15 16 17 18 19 25 26 27 28 29 32 33 #define LEFT_KEYS 0 1 2 3 4 10 11 12 13 14 20 21 22 23 24 30 31 #define BASE 0 #define SYM 1 #define NUM 2 #define NAV 3 #define CTRL 4 #define WM 5 #define CZ_ACUTE 6 #define CZ_CARET 7 #define FKEYS 8 #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_E &czech_caret_E #define CZ_CA_R &czech_caret_R #define CZ_CA_S &czech_caret_S #define CZ_CA_D &czech_caret_D #define CZ_CA_C &czech_caret_C #define CZ_CA_T &czech_caret_T #define CZ_CA_Z &czech_caret_Z #define CZ_CA_N &czech_caret_N #define CZ_CA_T &czech_caret_T #define CZ_CA_U &kp RA(SEMI) 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(E) CZECH_CARET_MACRO(S) CZECH_CARET_MACRO(D) CZECH_CARET_MACRO(C) CZECH_CARET_MACRO(T) CZECH_CARET_MACRO(Z) CZECH_CARET_MACRO(N) CZECH_CARET_MACRO(R) < { tapping-term-ms = <170>; require-prior-idle-ms = <50>; quick-tap-ms = <150>; flavor = "balanced"; hold-trigger-on-release; }; / { behaviors { prog_caps: prog_caps { compatible = "zmk,behavior-caps-word"; #binding-cells = <0>; continue-list = ; }; ht: hold_tap { compatible = "zmk,behavior-hold-tap"; #binding-cells = <2>; flavor = "tap-preferred"; tapping-term-ms = <220>; quick-tap-ms = <150>; require-prior-idle-ms = <100>; bindings = <&kp>, <&kp>; }; 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 = <1 2>; bindings = <&kp TAB>; layers = ; }; combo_caps_word { timeout-ms = <50>; key-positions = <12 17>; bindings = <&prog_caps>; layers = ; }; }; conditional_layers { compatible = "zmk,conditional-layers"; ctrl_layer { if-layers =