diff --git a/config/combos.dtsi b/config/combos.dtsi new file mode 100644 index 0000000..88bdfd0 --- /dev/null +++ b/config/combos.dtsi @@ -0,0 +1,98 @@ +/* KEY POSITIONS + + ╭────────────────────╮ ╭────────╮ ╭────────────────────╮ + │ 0 1 2 3 4 │ │ 5 6 │ │ 7 8 9 10 11 │ + │ 12 13 14 15 16 │ │ 17 18 │ │ 19 20 21 22 23 │ + │ 24 25 26 27 28 │ │ 29 30 │ │ 31 32 33 34 35 │ + │ 36 37 38 39 40 │ │ 41 42 │ │ 43 44 45 46 47 │ + ╰────────────────────╯ ╰────────╯ ╰────────────────────╯ */ + +compatible = "zmk,combos"; + +#define COMBO(NAME, BINDINGS, KEYPOS, LAYERS, TERM) \ + combo_##NAME { \ + timeout-ms = ; \ + bindings = ; \ + key-positions = ; \ + layers = ; \ + }; + +#define COMBO_TERM_H 30 +#define COMBO_TERM_V 40 + +#define LT0 0 +#define LT1 1 +#define LT2 2 +#define LT3 3 +#define LT4 4 +#define RT0 7 +#define RT1 8 +#define RT2 9 +#define RT3 10 +#define RT4 11 + +#define LM0 12 +#define LM1 13 +#define LM2 14 +#define LM3 15 +#define LM4 16 +#define RM0 19 +#define RM1 20 +#define RM2 21 +#define RM3 22 +#define RM4 23 + +#define LB0 24 +#define LB1 25 +#define LB2 26 +#define LB3 27 +#define LB4 28 +#define RB0 31 +#define RB1 32 +#define RB2 33 +#define RB3 34 +#define RB4 35 + +/* Capsword */ +COMBO(cpwrd, &caps_word, LM3 RM1, DEF NUM, COMBO_TERM_H) + +/* Punctuation (horizontal left hand) */ +COMBO(all, &kp LC(A), LT1 LT2, DEF NUM, COMBO_TERM_H) +COMBO(app, &kp LG(SPACE), LT2 LT3, DEF NUM, COMBO_TERM_H) + +COMBO(excl, &kp EXCL, LM1 LM2, DEF NUM, COMBO_TERM_H) +COMBO(qmark, &kp QMARK, LM2 LM3, DEF NUM, COMBO_TERM_H) + +COMBO(cut, &kp LC(X), RB1 RB3, DEF NUM, COMBO_TERM_H) +COMBO(copy, &kp LC(INS), RB1 RB2, DEF NUM, COMBO_TERM_H) +COMBO(paste, &kp LS(INS), RB2 RB3, DEF NUM, COMBO_TERM_H) + +/* Brackets (horizontal right hand) */ +COMBO(lbrc, &kp LBRC, RT1 RT2, DEF NUM, COMBO_TERM_H) +COMBO(rbrc, &kp RBRC, RT2 RT3, DEF NUM, COMBO_TERM_H) +COMBO(lpar, &kp LPAR, RM1 RM2, DEF NUM, COMBO_TERM_H) +COMBO(rpar, &kp RPAR, RM2 RM3, DEF NUM, COMBO_TERM_H) +COMBO(lbrk, &kp LBKT, RB1 RB2, DEF NUM, COMBO_TERM_H) +COMBO(rbrk, &kp RBKT, RB2 RB3, DEF NUM, COMBO_TERM_H) + +/* Other symbols (vertical combos) */ +COMBO(at, &kp AT, LT1 LM1, DEF NUM, COMBO_TERM_V) +COMBO(hash, &kp HASH, LT2 LM2, DEF NUM, COMBO_TERM_V) +COMBO(dllr, &kp DLLR, LT3 LM3, DEF NUM, COMBO_TERM_V) +COMBO(prcnt, &kp PRCNT, LT4 LM4, DEF NUM, COMBO_TERM_V) + +COMBO(caret, &kp CARET, RT0 RM0, DEF NUM, COMBO_TERM_V) +COMBO(plus, &kp PLUS, RT1 RM1, DEF NUM, COMBO_TERM_V) +COMBO(star, &kp STAR, RT2 RM2, DEF NUM, COMBO_TERM_V) +COMBO(amps, &kp AMPS, RT3 RM3, DEF NUM, COMBO_TERM_V) + +COMBO(grave, &kp GRAVE, LM1 LB1, DEF NUM, COMBO_TERM_V) +COMBO(bslh, &kp BSLH, LM2 LB2, DEF NUM, COMBO_TERM_V) +COMBO(tilde, &kp TILDE, LM3 LB3, DEF NUM, COMBO_TERM_V) +COMBO(equal, &kp EQUAL, LM4 LB4, DEF NUM, COMBO_TERM_V) + +COMBO(under, &kp UNDER, RM0 RB0, DEF NUM, COMBO_TERM_V) +COMBO(minus, &kp MINUS, RM1 RB1, DEF NUM, COMBO_TERM_V) +COMBO(fslh, &kp FSLH, RM2 RB2, DEF NUM, COMBO_TERM_V) +COMBO(pipe, &kp PIPE, RM3 RB3, DEF NUM, COMBO_TERM_V) + diff --git a/config/planck_rev6.keymap b/config/planck_rev6.keymap index 47e63dc..b909571 100644 --- a/config/planck_rev6.keymap +++ b/config/planck_rev6.keymap @@ -1,22 +1,192 @@ #include #include -/ { - keymap { - compatible = "zmk,keymap"; +#define XXX &none +#define ___ &trans +#define DSK_PREV &kp LG(LC(LEFT)) +#define DSK_NEXT &kp LG(LC(RIGHT)) - default_layer { -// ----------------------------------------------------------------------------------------- -// | TAB | Q | W | E | R | T | Y | U | I | O | P | BSPC | -// | ESC | A | S | D | F | G | H | J | K | L | ; | ' | -// | SHIFT | Z | X | C | V | B | N | M | , | . | / | RET | -// | FN | LGUI | LALT | LCTL | LOWR | SPACE | RAIS | LARW | DARW | UARW | RARW | - bindings = < - &kp TAB &kp Q &kp W &kp E &kp R &kp T &kp Y &kp U &kp I &kp O &kp P &kp DEL - &kp ESC &kp A &kp S &kp D &kp F &kp G &kp H &kp J &kp K &kp L &kp SEMI &kp SQT - &kp LSHFT &kp Z &kp X &kp C &kp V &kp B &kp N &kp M &kp COMMA &kp DOT &kp BSLH &kp RET - &trans &kp LGUI &kp LALT &kp LCTRL &trans &trans &kp SPACE &trans &kp LEFT &kp DOWN &kp UP &kp RIGHT - >; - }; - }; +#define DEF 0 +#define NAV 1 +#define SYS 2 +#define NUM 3 +#define FUN 4 +#define GRK 5 + +#define LHK 0 1 2 3 4 12 13 14 15 16 24 25 26 27 28 // left-hand keys +#define RHK 7 8 9 10 11 19 20 21 22 23 31 32 33 34 35 // right-hand keys +#define THK 38 39 40 43 44 45 // thumb keys + +/ { + + combos { + #include "combos.dtsi" + }; + + macros { + // + }; + +// TODO: +// * add unicode layer, trigger with mod-tap on D and H +// * set up repeat key +// * combos with global-quick-tab? +// * debug mod-taps +// * why does &bootloader not work? +// * fix flashing issue: "Invalid DFU suffix signature" + + + behaviors { + + // HRM left hand + hml: left_hand_positional_hold_tap { + compatible = "zmk,behavior-hold-tap"; + label = "LEFT_POSITIONAL_HOLD_TAP"; + #binding-cells = <2>; + flavor = "balanced"; + tapping-term-ms = <180>; + quick-tap-ms = <125>; + global-quick-tap; + bindings = <&kp>, <&kp>; + hold-trigger-key-positions = ; + }; + + // HRM right hand + hmr: right_hand_positional_hold_tap { + compatible = "zmk,behavior-hold-tap"; + label = "RIGHT_POSITIONAL_HOLD_TAP"; + #binding-cells = <2>; + flavor = "balanced"; + tapping-term-ms = <180>; + quick-tap-ms = <125>; + global-quick-tap; + bindings = <&kp>, <&kp>; + hold-trigger-key-positions = ; + }; + + // Layer on Hold + sticky tap on tap --- currently not used + lst: layer_sticky_tap { + compatible = "zmk,behavior-hold-tap"; + label = "LAYER_STICKY_TAP"; + #binding-cells = <2>; + tapping-term-ms = <175>; + quick_tap_ms = <0>; + flavor = "tap-preferred"; + bindings = <&mo>, <&sk>; + }; + + // mod-morph shift + backspace into delete + bsdel: backspace_del { + compatible = "zmk,behavior-mod-morph"; + label = "BSPC_DEL"; + #binding-cells = <0>; + bindings = <&kp BSPC>, <&kp DEL>; + mods = ; + }; + + // Layer change + backspace/del key + lt_bspc: layer_tap_backspace_del { + compatible = "zmk,behavior-hold-tap"; + label = "LT_BT"; + #binding-cells = <2>; // TODO: can we get rid of superfluous 2nd arg? + tapping-term-ms = <150>; + flavor = "tap-preferred"; + bindings = <&mo>, <&bsdel>; + }; + + // sticky key with quick release (fixes double capitalization when rolling keys) + skq: sticky_key_quick_release { + compatible = "zmk,behavior-sticky-key"; + label = "STICKY_KEY_QUICK_RELEASE"; + #binding-cells = <1>; + bindings = <&kp>; + release-after-ms = <1000>; + quick-release; + }; + + // sticky shift, double tap activates caps word + ss_cw: sticky_shift_capsword { + compatible = "zmk,behavior-tap-dance"; + label = "STICKY_SHIFT_CAPSWORD"; + #binding-cells = <0>; + tapping-term-ms = <200>; + bindings = <&skq LSHFT>, <&caps_word>, <&none>; + }; + + }; + + keymap { + compatible = "zmk,keymap"; + + default_layer { + bindings = < +// ╭─────────────┬─────────────┬─────────────┬─────────────┬─────────────╮ ╭─────────────┬─────────────╮ ╭─────────────┬─────────────┬─────────────┬─────────────┬─────────────╮ + &kp Q &kp W &kp F &kp P &kp B XXX XXX &kp J &kp L &kp U &kp Y &kp SQT +// ├─────────────┼─────────────┼─────────────┼─────────────┼─────────────┤ ├─────────────┼─────────────┤ ├─────────────┼─────────────┼─────────────┼─────────────┼─────────────┤ + &hml LGUI A &hml LALT R &hml LCTRL S &hml LSHFT T &kp G XXX XXX &kp M &hmr LSHFT N &hmr LCTRL E &hmr LALT I &hmr LGUI O +// ├─────────────┼─────────────┼─────────────┼─────────────┼─────────────┤ ├─────────────┼─────────────┤ ├─────────────┼─────────────┼─────────────┼─────────────┼─────────────┤ + &kp Z &kp X &kp C &kp D &kp V XXX XXX &kp K &kp H &kp COMMA &kp DOT &kp SEMI +// ├─────────────┼─────────────┼─────────────┼─────────────┼─────────────┤ ├─────────────┼─────────────┤ ├─────────────┼─────────────┼─────────────┼─────────────┼─────────────┤ + XXX &kp LGUI < SYS ESC < NAV SPACE &kp TAB XXX XXX < NUM RET &ss_cw <_bspc FUN 0 &kp DOWN &kp UP +// ╰─────────────┴─────────────┴─────────────┴─────────────┴─────────────╯ ╰─────────────┴─────────────╯ ╰─────────────┴─────────────┴─────────────┴─────────────┴─────────────╯ + >; + }; + + nav_layer { + bindings = < +// ╭─────────────┬─────────────┬─────────────┬─────────────┬─────────────╮ ╭─────────────┬─────────────╮ ╭─────────────┬─────────────┬─────────────┬─────────────┬─────────────╮ + ___ ___ ___ ___ ___ &tog NUM XXX &kp PG_UP &kp HOME &kp UP &kp END &kp INS +// ├─────────────┼─────────────┼─────────────┼─────────────┼─────────────┤ ├─────────────┼─────────────┤ ├─────────────┼─────────────┼─────────────┼─────────────┼─────────────┤ + &sk LGUI &sk LALT &sk LCTRL &sk LSHFT ___ XXX XXX &kp PG_DN &kp LEFT &kp DOWN &kp RIGHT &kp DEL +// ├─────────────┼─────────────┼─────────────┼─────────────┼─────────────┤ ├─────────────┼─────────────┤ ├─────────────┼─────────────┼─────────────┼─────────────┼─────────────┤ + ___ ___ ___ ___ ___ XXX XXX ___ ___ ___ ___ ___ +// ├─────────────┼─────────────┼─────────────┼─────────────┼─────────────┤ ├─────────────┼─────────────┤ ├─────────────┼─────────────┼─────────────┼─────────────┼─────────────┤ + ___ ___ ___ ___ ___ XXX XXX ___ ___ ___ ___ ___ +// ╰─────────────┴─────────────┴─────────────┴─────────────┴─────────────╯ ╰─────────────┴─────────────╯ ╰─────────────┴─────────────┴─────────────┴─────────────┴─────────────╯ + >; + }; + + sys_layer { + bindings = < +// ╭─────────────┬─────────────┬─────────────┬─────────────┬─────────────╮ ╭─────────────┬─────────────╮ ╭─────────────┬─────────────┬─────────────┬─────────────┬─────────────╮ + &kp LG(GRAVE) ___ ___ ___ &bootloader XXX XXX ___ &kp C_PREV &kp C_VOL_UP &kp C_NEXT &kp C_SLEEP +// ├─────────────┼─────────────┼─────────────┼─────────────┼─────────────┤ ├─────────────┼─────────────┤ ├─────────────┼─────────────┼─────────────┼─────────────┼─────────────┤ + ___ ___ ___ ___ ___ XXX XXX ___ DSK_PREV &kp C_VOL_DN DSK_NEXT ___ +// ├─────────────┼─────────────┼─────────────┼─────────────┼─────────────┤ ├─────────────┼─────────────┤ ├─────────────┼─────────────┼─────────────┼─────────────┼─────────────┤ + ___ ___ ___ ___ ___ XXX XXX ___ ___ ___ ___ ___ +// ├─────────────┼─────────────┼─────────────┼─────────────┼─────────────┤ ├─────────────┼─────────────┤ ├─────────────┼─────────────┼─────────────┼─────────────┼─────────────┤ + ___ ___ ___ ___ ___ XXX XXX &kp C_MUTE &kp C_PP ___ ___ ___ +// ╰─────────────┴─────────────┴─────────────┴─────────────┴─────────────╯ ╰─────────────┴─────────────╯ ╰─────────────┴─────────────┴─────────────┴─────────────┴─────────────╯ + >; + }; + + num_layer { + bindings = < +// ╭─────────────┬─────────────┬─────────────┬─────────────┬─────────────╮ ╭─────────────┬─────────────╮ ╭─────────────┬─────────────┬─────────────┬─────────────┬─────────────╮ + &kp ESC &kp N7 &kp N8 &kp N9 &kp STAR &tog NUM XXX ___ ___ ___ ___ ___ +// ├─────────────┼─────────────┼─────────────┼─────────────┼─────────────┤ ├─────────────┼─────────────┤ ├─────────────┼─────────────┼─────────────┼─────────────┼─────────────┤ + &kp RET &kp N4 &kp N5 &kp N6 &kp PLUS XXX XXX ___ &sk LSHFT &sk LCTRL &sk LALT &sk LGUI +// ├─────────────┼─────────────┼─────────────┼─────────────┼─────────────┤ ├─────────────┼─────────────┤ ├─────────────┼─────────────┼─────────────┼─────────────┼─────────────┤ + &kp TAB &kp N1 &kp N2 &kp N3 &kp FSLH XXX XXX ___ ___ ___ ___ ___ +// ├─────────────┼─────────────┼─────────────┼─────────────┼─────────────┤ ├─────────────┼─────────────┤ ├─────────────┼─────────────┼─────────────┼─────────────┼─────────────┤ + ___ ___ &kp DOT &kp N0 &kp MINUS XXX XXX ___ ___ ___ ___ ___ +// ╰─────────────┴─────────────┴─────────────┴─────────────┴─────────────╯ ╰─────────────┴─────────────╯ ╰─────────────┴─────────────┴─────────────┴─────────────┴─────────────╯ + >; + }; + + fun_layer { + bindings = < +// ╭─────────────┬─────────────┬─────────────┬─────────────┬─────────────╮ ╭─────────────┬─────────────╮ ╭─────────────┬─────────────┬─────────────┬─────────────┬─────────────╮ + &kp F12 &kp F7 &kp F8 &kp F9 ___ XXX XXX ___ ___ ___ ___ ___ +// ├─────────────┼─────────────┼─────────────┼─────────────┼─────────────┤ ├─────────────┼─────────────┤ ├─────────────┼─────────────┼─────────────┼─────────────┼─────────────┤ + &kp F11 &kp F4 &kp F5 &kp F6 ___ XXX XXX ___ &sk LSHFT &sk LCTRL &sk LALT &sk LGUI +// ├─────────────┼─────────────┼─────────────┼─────────────┼─────────────┤ ├─────────────┼─────────────┤ ├─────────────┼─────────────┼─────────────┼─────────────┼─────────────┤ + &kp F10 &kp F1 &kp F2 &kp F3 ___ XXX XXX ___ ___ ___ ___ ___ +// ├─────────────┼─────────────┼─────────────┼─────────────┼─────────────┤ ├─────────────┼─────────────┤ ├─────────────┼─────────────┼─────────────┼─────────────┼─────────────┤ + ___ ___ &kp F10 &kp F11 &kp F12 XXX XXX ___ ___ ___ ___ ___ +// ╰─────────────┴─────────────┴─────────────┴─────────────┴─────────────╯ ╰─────────────┴─────────────╯ ╰─────────────┴─────────────┴─────────────┴─────────────┴─────────────╯ + >; + }; + + }; };