#include #include #define XXX &none #define ___ &trans #define DSK_PREV &kp LG(LC(LEFT)) #define DSK_NEXT &kp LG(LC(RIGHT)) #define DEF 0 #define NAV 1 #define SYS 2 #define NUM 3 #define FN 4 #define UC 5 /* empty place holder if not on planck */ #if !defined EXTRA_MID #define EXTRA_MID #endif #if !defined EXTRA_BOT_L #define EXTRA_BOT_L #endif #if !defined EXTRA_BOT_R #define EXTRA_BOT_R #endif /* TODO and ISSUES * add repeat key * unicode not officially supported (#232), implement with macro (tri-lt on D and H) * tap-only combos not yet possible (#544), combos not working with global-quick-tap * mod-taps getting stuck with heterogenous combo-terms (#986, #905) * &bootloader doesn't work with Planck_rev6 (#1086) * mod-morph doesn't swallow mod (#686), PR https://github.com/zmkfirmware/zmk/pull/1114 * native sleep key doesn't work with windows (#1077), workaround implemented below * mouse wheel not implemented yet (#319) * Invalid DFU suffix signature warning when flashing with dfu-util */ /* sticky key config */ &sk { release-after-ms = <500>; // release after 0.5s quick-release; // fix double capitalization when rolling keys }; /* layer tap config */ < { flavor = "balanced"; tapping-term-ms = <200>; quick-tap-ms = <175>; // global-quick-tap; }; / { combos { #include "combos.dtsi" }; macros { // Windows sleep key win_sleep: win_sleep { wait-ms = <50>; tap-ms = <5>; compatible = "zmk,behavior-macro"; label = "WIN_SLEEP_KEY"; #binding-cells = <0>; bindings = <&kp LG(X) &kp U &kp S>; }; }; behaviors { /* homerow mods */ #define LHM LM0 LM1 LM2 LM3 // left-hand homerow mods #define RHM RM1 RM2 RM3 RM4 // right-hand homerow mods #define LHK LT0 LT1 LT2 LT3 LT4 LHM LM4 LB0 LB1 LB2 LB3 LB4 // left-hand keys #define RHK RT0 RT1 RT2 RT3 RT4 RM0 RHM RB0 RB1 RB2 RB3 RB4 // right-hand keys #define THK LH0 LH1 LH2 RH0 RH1 RH2 // thumb keys // left-hand homerow mods hml: left_hand_home_row_mods { compatible = "zmk,behavior-hold-tap"; label = "LEFT_HOME_ROW_MODS"; #binding-cells = <2>; flavor = "balanced"; tapping-term-ms = <280>; quick-tap-ms = <125>; global-quick-tap; bindings = <&kp>, <&kp>; hold-trigger-key-positions = ; }; // right-hand homerow mods hmr: right_hand_home_row_mods { compatible = "zmk,behavior-hold-tap"; label = "RIGHT_HOME_ROW_MODS"; #binding-cells = <2>; flavor = "balanced"; tapping-term-ms = <280>; quick-tap-ms = <125>; global-quick-tap; bindings = <&kp>, <&kp>; hold-trigger-key-positions = ; }; /* custom behaviors */ // sticky hold sh: sticky_hold { compatible = "zmk,behavior-hold-tap"; label = "STICKY_HOLD"; #binding-cells = <2>; flavor = "tap-preferred"; tapping-term-ms = <200>; // release mod immediately if hold longer than term bindings = <&kp>, <&sk>; }; /* custom keys */ // tap: backspace | shift + tap: delete | hold: activate fn layer bs_del_fn: backspace_del { compatible = "zmk,behavior-mod-morph"; label = "BSPC_DEL"; #binding-cells = <0>; bindings = << FN BSPC>, <&kp DEL>; mods = ; }; // tap: sticky shift | double tap: capsword ss_cw: sticky_shift_capsword { compatible = "zmk,behavior-tap-dance"; label = "STICKY_SHIFT_CAPSWORD"; #binding-cells = <0>; tapping-term-ms = <200>; bindings = <&sh LSHFT LSHFT>, <&caps_word>, <&none>; }; }; keymap { compatible = "zmk,keymap"; default_layer { bindings = < // ╭─────────────┬─────────────┬─────────────┬─────────────┬─────────────╮ ╭─────────────╮ ╭─────────────┬─────────────┬─────────────┬─────────────┬─────────────╮ &kp Q &kp W &kp F &kp P &kp B EXTRA_MID &kp J &kp L &kp U &kp Y &kp SQT // ├─────────────┼─────────────┼─────────────┼─────────────┼─────────────┤ ├─────────────┤ ├─────────────┼─────────────┼─────────────┼─────────────┼─────────────┤ &hml LGUI A &hml LALT R &hml LCTRL S &hml LSHFT T &kp G EXTRA_MID &kp M &hmr LSHFT N &hmr LCTRL E &hmr LALT I &hmr LGUI O // ├─────────────┼─────────────┼─────────────┼─────────────┼─────────────┤ ├─────────────┤ ├─────────────┼─────────────┼─────────────┼─────────────┼─────────────┤ &kp Z &kp X &kp C &kp D &kp V EXTRA_MID &kp K &kp H &kp COMMA &kp DOT &kp SEMI // ├─────────────┼─────────────┼─────────────┼─────────────┼─────────────┤ ├─────────────┤ ├─────────────┼─────────────┼─────────────┼─────────────┼─────────────┤ EXTRA_BOT_L < SYS ESC < NAV SPACE &kp TAB EXTRA_MID &ss_cw < NUM RET &bs_del_fn EXTRA_BOT_R // ╰─────────────╯ ╰─────────────┴──── ────────┴─────────────╯ ╰─────────────╯ ╰─────────────┴─────────────┴─────────────╯ ╰─────────────╯ >; }; nav_layer { bindings = < // ╭─────────────┬─────────────┬─────────────┬─────────────┬─────────────╮ ╭─────────────╮ ╭─────────────┬─────────────┬─────────────┬─────────────┬─────────────╮ ___ ___ ___ ___ ___ EXTRA_MID &kp PG_UP &kp HOME &kp UP &kp END &kp INS // ├─────────────┼─────────────┼─────────────┼─────────────┼─────────────┤ ├─────────────┤ ├─────────────┼─────────────┼─────────────┼─────────────┼─────────────┤ &sk LGUI &sk LALT &sk LCTRL &sk LSHFT ___ EXTRA_MID &kp PG_DN &kp LEFT &kp DOWN &kp RIGHT &kp DEL // ├─────────────┼─────────────┼─────────────┼─────────────┼─────────────┤ ├─────────────┤ ├─────────────┼─────────────┼─────────────┼─────────────┼─────────────┤ ___ ___ ___ ___ ___ EXTRA_MID ___ ___ ___ ___ ___ // ├─────────────┼─────────────┼─────────────┼─────────────┼─────────────┤ ├─────────────┤ ├─────────────┼─────────────┼─────────────┼─────────────┼─────────────┤ EXTRA_BOT_L ___ ___ ___ EXTRA_MID ___ ___ ___ EXTRA_BOT_R // ╰─────────────╯ ╰─────────────┴──── ────────┴─────────────╯ ╰─────────────╯ ╰─────────────┴─────────────┴─────────────╯ ╰─────────────╯ >; }; sys_layer { bindings = < // ╭─────────────┬─────────────┬─────────────┬─────────────┬─────────────╮ ╭─────────────╮ ╭─────────────┬─────────────┬─────────────┬─────────────┬─────────────╮ &kp LG(GRAVE) ___ ___ ___ &bootloader EXTRA_MID ___ &kp C_PREV &kp C_VOL_UP &kp C_NEXT &win_sleep // ├─────────────┼─────────────┼─────────────┼─────────────┼─────────────┤ ├─────────────┤ ├─────────────┼─────────────┼─────────────┼─────────────┼─────────────┤ ___ ___ ___ ___ ___ EXTRA_MID ___ DSK_PREV &kp C_VOL_DN DSK_NEXT ___ // ├─────────────┼─────────────┼─────────────┼─────────────┼─────────────┤ ├─────────────┤ ├─────────────┼─────────────┼─────────────┼─────────────┼─────────────┤ ___ ___ ___ ___ ___ EXTRA_MID ___ ___ ___ ___ ___ // ├─────────────┼─────────────┼─────────────┼─────────────┼─────────────┤ ├─────────────┤ ├─────────────┼─────────────┼─────────────┼─────────────┼─────────────┤ EXTRA_BOT_L ___ ___ ___ EXTRA_MID &kp C_MUTE &kp C_PP ___ EXTRA_BOT_R // ╰─────────────╯ ╰─────────────┴──── ────────┴─────────────╯ ╰─────────────╯ ╰─────────────┴─────────────┴─────────────╯ ╰─────────────╯ >; }; num_layer { bindings = < // ╭─────────────┬─────────────┬─────────────┬─────────────┬─────────────╮ ╭─────────────╮ ╭─────────────┬─────────────┬─────────────┬─────────────┬─────────────╮ &kp ESC &kp N7 &kp N8 &kp N9 &kp STAR EXTRA_MID ___ ___ ___ ___ ___ // ├─────────────┼─────────────┼─────────────┼─────────────┼─────────────┤ ├─────────────┤ ├─────────────┼─────────────┼─────────────┼─────────────┼─────────────┤ &kp RET &kp N4 &kp N5 &kp N6 &kp PLUS EXTRA_MID ___ &sk LSHFT &sk LCTRL &sk LALT &sk LGUI // ├─────────────┼─────────────┼─────────────┼─────────────┼─────────────┤ ├─────────────┤ ├─────────────┼─────────────┼─────────────┼─────────────┼─────────────┤ &kp TAB &kp N1 &kp N2 &kp N3 &kp FSLH EXTRA_MID ___ ___ ___ ___ ___ // ├─────────────┼─────────────┼─────────────┼─────────────┼─────────────┤ ├─────────────┤ ├─────────────┼─────────────┼─────────────┼─────────────┼─────────────┤ EXTRA_BOT_L &kp DOT &kp N0 &kp MINUS EXTRA_MID ___ ___ ___ EXTRA_BOT_R // ╰─────────────╯ ╰─────────────┴──── ────────┴─────────────╯ ╰─────────────╯ ╰─────────────┴─────────────┴─────────────╯ ╰─────────────╯ >; }; fn_layer { bindings = < // ╭─────────────┬─────────────┬─────────────┬─────────────┬─────────────╮ ╭─────────────╮ ╭─────────────┬─────────────┬─────────────┬─────────────┬─────────────╮ &kp F12 &kp F7 &kp F8 &kp F9 ___ EXTRA_MID ___ ___ ___ ___ ___ // ├─────────────┼─────────────┼─────────────┼─────────────┼─────────────┤ ├─────────────┤ ├─────────────┼─────────────┼─────────────┼─────────────┼─────────────┤ &kp F11 &kp F4 &kp F5 &kp F6 ___ EXTRA_MID ___ &sk LSHFT &sk LCTRL &sk LALT &sk LGUI // ├─────────────┼─────────────┼─────────────┼─────────────┼─────────────┤ ├─────────────┤ ├─────────────┼─────────────┼─────────────┼─────────────┼─────────────┤ &kp F10 &kp F1 &kp F2 &kp F3 ___ EXTRA_MID ___ ___ ___ ___ ___ // ├─────────────┼─────────────┼─────────────┼─────────────┼─────────────┤ ├─────────────┤ ├─────────────┼─────────────┼─────────────┼─────────────┼─────────────┤ EXTRA_BOT_L &kp F10 &kp F11 &kp F12 EXTRA_MID ___ ___ ___ EXTRA_BOT_R // ╰─────────────╯ ╰─────────────┴──── ────────┴─────────────╯ ╰─────────────╯ ╰─────────────┴─────────────┴─────────────╯ ╰─────────────╯ >; }; }; };