// Copyright (c) 2022 The ZMK Contributors
// SPDX-License-Identifier: MIT
#include <behaviors.dtsi>
#include <dt-bindings/zmk/keys.h>
#include <dt-bindings/zmk/bt.h>
#include <dt-bindings/zmk/outputs.h>
#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 = <220>;
quick-tap-ms = <110>;
flavor = "balanced";
require-prior-idle-ms = <100>;
hold-trigger-key-positions = <RIGHT_KEYS>;
hold-trigger-on-release;
};
/ {
behaviors {
prog_caps: prog_caps {
compatible = "zmk,behavior-caps-word";
#binding-cells = <0>;
continue-list = <UNDERSCORE MINUS BACKSPACE DELETE>;
};
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 = <RIGHT_KEYS>;
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 = <LEFT_KEYS>;
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 = <RIGHT_KEYS>;
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 = <LEFT_KEYS>;
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 = <BASE>;
};
combo_caps_word {
timeout-ms = <50>;
key-positions = <15 20>;
bindings = <&prog_caps>;
layers = <BASE>;
};
};
keymap {
compatible = "zmk,keymap";
base {
bindings = <
//╭─────────────┬─────────────┬─────────────┬─────────────┬─────────────┬─────────────╮ ╭─────────────┬─────────────┬─────────────┬─────────────┬─────────────┬─────────────╮
&kp TAB &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 &out OUT_USB &trans &bt BT_SEL 3 &bt BT_SEL 0 &trans &trans &trans &trans &trans &sys_reset
//├─────────────┼─────────────┼─────────────┼─────────────┼─────────────┼─────────────┤ ├─────────────┼─────────────┼─────────────┼─────────────┼─────────────┼─────────────┤
&trans &bootloader &out OUT_BLE &trans &bt BT_SEL 4 &bt BT_SEL 1 &trans &trans &trans &trans &trans &bootloader
//├─────────────┼─────────────┼─────────────┼─────────────┼─────────────┼─────────────┤ ├─────────────┼─────────────┼─────────────┼─────────────┼─────────────┼─────────────┤
&trans &bt BT_CLR &out OUT_TOG &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
// ╰─────────────┴─────────────┴─────────────╯ ╰─────────────┴─────────────┴─────────────╯
>;
};
};
};