#include #include #include #define HOST_OS 1 #include "../../../../zmk-nodefree-config/helper.h" ZMK_UNICODE_PAIR(lin_ae, N0, N0, E, N4, N0, N0, C, N4) ZMK_UNICODE_PAIR(lin_ao, N0, N0, E, N5, N0, N0, C, N5) ZMK_UNICODE_PAIR(lin_oe, N0, N0, F, N6, N0, N0, D, N6) ZMK_UNICODE_PAIR(lin_euro, N2, N0, A, C, N0, N0, B, N0) // euro sign and degree symbol ZMK_UNICODE_PAIR(lin_multi_o, A, N6, N6, E, F, F, F, D) // multiocular o // switch to Windows-mode (using WinCompose) #undef OS_UNICODE_LEAD #undef OS_UNICODE_TRAIL #define OS_UNICODE_LEAD ¯o_tap &kp RALT &kp U // WinCompose sequence #define OS_UNICODE_TRAIL ¯o_tap &kp RET ZMK_UNICODE_PAIR(win_ae, N0, N0, E, N4, N0, N0, C, N4) ZMK_UNICODE_PAIR(win_ao, N0, N0, E, N5, N0, N0, C, N5) ZMK_UNICODE_PAIR(win_oe, N0, N0, F, N6, N0, N0, D, N6) ZMK_UNICODE_PAIR(win_euro, N2, N0, A, C, N0, N0, B, N0) // euro sign and degree symbol ZMK_UNICODE_PAIR(win_multi_o, A, N6, N6, E, F, F, F, D) // multiocular o #define BASE 0 #define SYM 1 #define NAV 2 #define META 3 #define TOKI 4 #define GAME 5 #define WINDOWS 6 #define WIN_UNI 7 / { conditional_layers { compatible = "zmk,conditional-layers"; windows_unicode { if-layers = ; then-layer = ; }; meta_layer { if-layers = ; then-layer = ; }; }; }; / { behaviors { esctab: shift_esc_tab { compatible = "zmk,behavior-mod-morph"; label = ""; #binding-cells = <0>; bindings = <&kp ESC>, <&kp TAB>; mods = <(MOD_LSFT)>; }; escape: fancy_esc_key { // activate esc-tab macro if not holding ctrl, this allows ctrl-shift-esc but turns shift-esc into tab compatible = "zmk,behavior-mod-morph"; label = "esc"; #binding-cells = <0>; bindings = <&esctab>, <&kp ESC>; mods = <(MOD_LCTL)>; keep-mods = <(MOD_LCTL)>; }; }; }; / { keymap { compatible = "zmk,keymap"; l_base { bindings = < &escape &kp W &kp F &kp P &kp B &kp J &kp L &kp U &kp Y &kp BACKSPACE &kp A &kp R &kp S &kp T &kp G &kp M &kp N &kp E &kp I &kp O &kp LCTRL &kp X &kp C &kp D &kp V &kp K &kp H &kp Z &kp Q &kp LALT &kp SPACE &kp LSHIFT &kp LWIN &mo NAV &mo SYM &kp RET >; }; // numbers + symbols + non english letters l_sym { bindings = < &kp TAB &kp GRAVE &kp LBKT &kp RBKT &lin_euro &lin_multi_o &lin_ao &lin_ae &lin_oe &kp DEL &kp N1 &kp N2 &kp N3 &kp N4 &kp N5 &kp N6 &kp N7 &kp N8 &kp N9 &kp N0 &trans &kp SQT &kp SLASH &kp BSLH &kp EQUAL &kp MINUS &kp SEMI &kp COMMA &kp DOT &trans &trans &trans &trans &trans &trans &trans >; // ' " / ? \ | = + - _ ; : , < . > }; // F keys + navigation l_nav { bindings = < &kp F1 &kp F2 &kp F3 &kp F4 &kp F5 &kp PG_UP &kp HOME &kp UP &kp END &kp PSCRN &kp F6 &kp F7 &kp F8 &kp F9 &kp F10 &kp PG_DN &kp LEFT &kp DOWN &kp RIGHT &kp K_CMENU &trans &kp F11 &kp F12 &kp F13 &kp F14 &kp F15 &kp F16 &kp F17 &kp F18 &trans &trans &trans &trans &trans &trans &trans >; }; // media + bluetooth + layer toggles + numpad l_meta { bindings = < &kp C_VOL_DN &kp C_VOL_UP &tog WINDOWS &tog GAME &tog TOKI &kp KP_MULTIPLY &kp KP_N7 &kp KP_N8 &kp KP_N9 &kp KP_PLUS &kp C_PREV &kp C_NEXT &none &kp C_PLAY &none &kp KP_DIVIDE &kp KP_N4 &kp KP_N5 &kp KP_N6 &kp KP_N0 &trans &none &bt BT_SEL 0 &bt BT_NXT &bt BT_CLR &kp KP_DOT &kp KP_N1 &kp KP_N2 &kp KP_N3 &kp KP_MINUS &trans &trans &trans &trans &trans &kp KP_ENTER >; }; // toki pona l_toki { bindings = < &trans &kp P &kp W &kp U &none &tog TOKI &kp E &kp S &kp J &trans &kp N &kp L &kp I &kp A &none &none &kp O &kp T &kp M &kp K &trans &none &kp QMARK &kp EXCL &none &none &kp DOT &kp COMMA &none &none &trans &none &trans &none &trans &trans >; }; // game compatibility / half qwerty l_game { bindings = < &kp ESC &kp Q &kp W &kp E &kp R &none &none &kp UP &none &kp BSPC &kp LSHFT &kp A &kp S &kp D &kp F &none &kp LEFT &kp DOWN &kp RIGHT &none &kp LCTRL &kp Z &kp X &kp C &kp V &none &none &none &none &none &kp LALT &kp SPACE &tog GAME &tog GAME &none &kp RET >; }; // dummy layer for enabling windows unicode macros l_windows { bindings = < &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 &trans &trans &trans &trans &trans &trans &trans &trans >; }; l_win_unicode { bindings = < &trans &trans &trans &trans &win_euro &win_multi_o &win_ao &win_ae &win_oe &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 >; }; }; };