zmk/config/base.keymap
2022-08-05 10:35:59 -04:00

204 lines
22 KiB
C++

/*
ISSUES, WORKAROUNDS and a "ZMK-WISHLIST"
* tap-only combos not yet possible (#544), prevents rapid chording of HRMs
* no chording with positional hold-taps (#1363)
* &bootloader doesn't work with Planck_rev6 (#1086)
* no global-quick-tap for combos yet
* mod-taps getting stuck with heterogenous combo-terms (#986, #905)
* sticky-hold swallows OS shift when typing quickly, using sticky-tap for now
* native sleep key doesn't work with windows (#1077), using sleep-macro for now
* no native unicode support (#232), using preprocessor workaround instead
* no native mouse keys (#319), using mouse PR #778
* mod-morph doesn't swallow mod (#686), using masked-mod PR #1114
* invalid DFU suffix signature warning when flashing with dfu-util
*/
#include <behaviors.dtsi>
#include <dt-bindings/zmk/keys.h>
#include "../zmk-nodefree-config/helper.h"
#include "../zmk-nodefree-config/international_chars/greek.dtsi"
#include "../zmk-nodefree-config/international_chars/german.dtsi"
// make a 36 keys layout unless EXTRA-keys are defined in parent .keymap file
#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
#define XXX &none
#define ___ &trans
#define DSK_PREV &kp LG(LC(LEFT)) // previous desktop on windows
#define DSK_NEXT &kp LG(LC(RIGHT)) // next " " "
#define CANCEL &kp K_CANCEL // cancels caps-word and does nothing else
#define DEF 0
#define NAV 1
#define SYS 2
#define NUM 3
#define FN 4
#define UC 5
#define QUICK_TAP_MS 220
#include "combos.dtsi" // source after layer shortcuts
#include "mouse.dtsi"
// sticky key config
&sk {
release-after-ms = <550>; // release after 0.55s
quick-release; // no double capitalization when rolling keys
};
// sticky layer config
&sl {
// release-after-ms = <550>; // release after 0.55s
ignore-modifiers; // no double capitalization when rolling keys
};
// layer tap config
&lt {
flavor = "balanced";
tapping-term-ms = <200>;
quick-tap-ms = <QUICK_TAP_MS>; // double-tap + hold repeats tap-key
// global-quick-tap;
};
/* homerow mods */
#define HRM_LT LM1 LM2 LM3 LM4 // left-hand HRMs
#define HRM_RT RM1 RM2 RM3 RM4 // right-hand HRMs
#define KEYS_LT LT0 LT1 LT2 LT3 LT4 LM0 HRM_LT LB0 LB1 LB2 LB3 LB4 // left-hand keys
#define KEYS_RT RT0 RT1 RT2 RT3 RT4 RM0 HRM_RT RB0 RB1 RB2 RB3 RB4 // right-hand keys
#define THUMBS LH2 LH1 LH0 RH0 RH1 RH2 // thumb keys
ZMK_BEHAVIOR(hml, hold_tap, // left-hand HRMs
flavor = "balanced";
tapping-term-ms = <200>;
quick-tap-ms = <QUICK_TAP_MS>;
global-quick-tap-ms = <150>;
bindings = <&kp>, <&kp>;
hold-trigger-key-positions = <KEYS_RT THUMBS HRM_LT>; // include left-hand HRMs for chording
)
ZMK_BEHAVIOR(hmr, hold_tap, // right-hand HRMs
flavor = "balanced";
tapping-term-ms = <200>;
quick-tap-ms = <QUICK_TAP_MS>;
global-quick-tap-ms = <150>;
bindings = <&kp>, <&kp>;
hold-trigger-key-positions = <KEYS_LT THUMBS HRM_RT>; // include right-hand HRMs for chording
)
/* custom keys and macros */
// sticky-shift that cancels capsword (used in ss_cw below). Alternatively: mod-morph ss_cw into CANCEL to swallow sticky-shift when capsword is active
ZMK_BEHAVIOR(sticky_shift, macro,
wait-ms = <0>;
tap-ms = <1>;
bindings = <&macro_tap CANCEL> // cancel caps_word;
, <&macro_press &sk LSHFT> // then tap sticky-shift and hold
, <&macro_pause_for_release> // until key release to enable
, <&macro_release &sk LSHFT>; // holding shift
)
// tap: sticky shift | double tap: capsword | triple tap: cancel capsword
ZMK_BEHAVIOR(ss_cw, tap_dance,
tapping-term-ms = <200>;
// bindings = <&sticky_shift>, <&caps_word>, <CANCEL>;
bindings = <&sk LSHFT>, <&caps_word>, <CANCEL>;
)
// tap: backspace | lshft + tap: delete | rshft + tap: shift-delete | hold: num layer
ZMK_BEHAVIOR(bs_del_num, mod_morph,
bindings = <&lt NUM BSPC>, <&kp DEL>;
mods = <(MOD_LSFT|MOD_RSFT)>;
masked_mods = <MOD_LSFT>; // requires PR #1114
)
// Windows sleep key
ZMK_BEHAVIOR(win_sleep, macro,
wait-ms = <100>;
tap-ms = <5>;
bindings = <&kp LG(X) &kp U &kp S>;
)
/* keymap */
ZMK_LAYER(default_layer,
// ╭─────────────┬─────────────┬─────────────┬─────────────┬─────────────╮ ╭─────────────╮ ╭─────────────┬─────────────┬─────────────┬─────────────┬─────────────╮
&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 RSHFT 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 &lt UC ESC &lt NAV SPACE &lt SYS TAB EXTRA_MID &lt FN RET &ss_cw &bs_del_num EXTRA_BOT_R
// ╰─────────────╯ ╰─────────────┴──── ────────┴─────────────╯ ╰─────────────╯ ╰─────────────┴─────────────┴─────────────╯ ╰─────────────╯
)
ZMK_LAYER(nav_layer,
// ╭─────────────┬─────────────┬─────────────┬─────────────┬─────────────╮ ╭─────────────╮ ╭─────────────┬─────────────┬─────────────┬─────────────┬─────────────╮
___ ___ ___ ___ ___ 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 ___ &kp LC(X) &kp LC(INS) &kp LS(INS) ___
// ├─────────────┼─────────────┼─────────────┼─────────────┼─────────────┤ ├─────────────┤ ├─────────────┼─────────────┼─────────────┼─────────────┼─────────────┤
EXTRA_BOT_L ___ ___ ___ EXTRA_MID ___ ___ ___ EXTRA_BOT_R
// ╰─────────────╯ ╰─────────────┴──── ────────┴─────────────╯ ╰─────────────╯ ╰─────────────┴─────────────┴─────────────╯ ╰─────────────╯
)
ZMK_LAYER(sys_layer,
// ╭─────────────┬─────────────┬─────────────┬─────────────┬─────────────╮ ╭─────────────╮ ╭─────────────┬─────────────┬─────────────┬─────────────┬─────────────╮
&kp LG(GRAVE) ___ ___ &reset &bootloader EXTRA_MID ___ &kp C_PREV &kp C_VOL_UP &kp C_NEXT &win_sleep
// ├─────────────┼─────────────┼─────────────┼─────────────┼─────────────┤ ├─────────────┤ ├─────────────┼─────────────┼─────────────┼─────────────┼─────────────┤
&sk LGUI &sk LALT &sk LCTRL &sk LSHFT ___ 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
// ╰─────────────╯ ╰─────────────┴──── ────────┴─────────────╯ ╰─────────────╯ ╰─────────────┴─────────────┴─────────────╯ ╰─────────────╯
)
ZMK_LAYER(num_layer,
// ╭─────────────┬─────────────┬─────────────┬─────────────┬─────────────╮ ╭─────────────╮ ╭─────────────┬─────────────┬─────────────┬─────────────┬─────────────╮
&kp ESC &kp N7 &kp N8 &kp N9 &kp STAR EXTRA_MID ___ ___ ___ ___ ___
// ├─────────────┼─────────────┼─────────────┼─────────────┼─────────────┤ ├─────────────┤ ├─────────────┼─────────────┼─────────────┼─────────────┼─────────────┤
&kp TAB &kp N4 &kp N5 &kp N6 &kp PLUS EXTRA_MID ___ &sk RSHFT &sk LCTRL &sk LALT &sk LGUI
// ├─────────────┼─────────────┼─────────────┼─────────────┼─────────────┤ ├─────────────┤ ├─────────────┼─────────────┼─────────────┼─────────────┼─────────────┤
&kp RET &kp N1 &kp N2 &kp N3 &kp FSLH EXTRA_MID ___ ___ ___ ___ ___
// ├─────────────┼─────────────┼─────────────┼─────────────┼─────────────┤ ├─────────────┤ ├─────────────┼─────────────┼─────────────┼─────────────┼─────────────┤
EXTRA_BOT_L &kp DOT &kp N0 &kp MINUS EXTRA_MID ___ ___ ___ EXTRA_BOT_R
// ╰─────────────╯ ╰─────────────┴──── ────────┴─────────────╯ ╰─────────────╯ ╰─────────────┴─────────────┴─────────────╯ ╰─────────────╯
)
ZMK_LAYER(fn_layer,
// ╭─────────────┬─────────────┬─────────────┬─────────────┬─────────────╮ ╭─────────────╮ ╭─────────────┬─────────────┬─────────────┬─────────────┬─────────────╮
&kp F12 &kp F7 &kp F8 &kp F9 ___ EXTRA_MID ___ ___ ___ ___ ___
// ├─────────────┼─────────────┼─────────────┼─────────────┼─────────────┤ ├─────────────┤ ├─────────────┼─────────────┼─────────────┼─────────────┼─────────────┤
&kp F11 &kp F4 &kp F5 &kp F6 ___ EXTRA_MID ___ &sk RSHFT &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
// ╰─────────────╯ ╰─────────────┴──── ────────┴─────────────╯ ╰─────────────╯ ╰─────────────┴─────────────┴─────────────╯ ╰─────────────╯
)
ZMK_LAYER(uc_layer,
// ╭─────────────┬─────────────┬─────────────┬─────────────┬─────────────╮ ╭─────────────╮ ╭─────────────┬─────────────┬─────────────┬─────────────┬─────────────╮
___ &el_omega &el_phi &el_pi &el_beta EXTRA_MID ___ &el_lambda &el_upsilon &el_psi &de_eszett
// ├─────────────┼─────────────┼─────────────┼─────────────┼─────────────┤ ├─────────────┤ ├─────────────┼─────────────┼─────────────┼─────────────┼─────────────┤
&el_alpha &el_rho &el_sigma &el_tau &el_gamma EXTRA_MID &el_mu &el_nu &el_epsilon &el_iota &el_omikron
// ├─────────────┼─────────────┼─────────────┼─────────────┼─────────────┤ ├─────────────┤ ├─────────────┼─────────────┼─────────────┼─────────────┼─────────────┤
&el_zeta &el_xi &el_chi &el_delta &el_theta EXTRA_MID &el_kappa &el_eta &de_ae &de_oe &de_ue
// ├─────────────┼─────────────┼─────────────┼─────────────┼─────────────┤ ├─────────────┤ ├─────────────┼─────────────┼─────────────┼─────────────┼─────────────┤
EXTRA_BOT_L ___ ___ ___ EXTRA_MID ___ ___ ___ EXTRA_BOT_R
// ╰─────────────╯ ╰─────────────┴──── ────────┴─────────────╯ ╰─────────────╯ ╰─────────────┴─────────────┴─────────────╯ ╰─────────────╯
)