zmk/config/base.keymap
2023-06-21 09:52:15 -04:00

326 lines
28 KiB
C++

#include <behaviors.dtsi>
#include <dt-bindings/zmk/keys.h>
#if CONFIG_WIRELESS
#include <dt-bindings/zmk/bt.h>
#define _BT_SEL_KEYS_ &bt BT_SEL 0 &bt BT_SEL 1 &bt BT_SEL 2 &bt BT_SEL 3 &bt BT_CLR
#else
#define _BT_SEL_KEYS_ &trans &trans &trans &trans &trans
#endif
#include "../zmk-nodefree-config/helper.h"
#include "../zmk-nodefree-config/international_chars/greek.dtsi"
#include "../zmk-nodefree-config/international_chars/german.dtsi"
#define DEF 0
#define NAV 1
#define FN 2
#define NUM 3
#define SYS 4
#define UC 5
#define MOUSE 6
#include "combos.dtsi" // requires layer aliases
#include "mouse.dtsi"
#include "extra_keys.h"
#define XXX &none
#define ___ &trans
/* Global settings */
#define QUICK_TAP_MS 175
&sk { // sticky-key config
release-after-ms = <900>; // release after 0.6s
quick-release; // no double capitalization when rolling keys
};
&sl { // sticky-layer config
ignore-modifiers; // allow chording sticky mods & layers
};
&lt { // layer-tap config
flavor = "balanced";
tapping-term-ms = <200>;
quick-tap-ms = <QUICK_TAP_MS>;
};
/* Homerow mods */
#define KEYS_L LT0 LT1 LT2 LT3 LT4 LM0 LM1 LM2 LM3 LM4 LB0 LB1 LB2 LB3 LB4 // left hand
#define KEYS_R RT0 RT1 RT2 RT3 RT4 RM0 RM1 RM2 RM3 RM4 RB0 RB1 RB2 RB3 RB4 // right hand
#define THUMBS LH2 LH1 LH0 RH0 RH1 RH2 // thumbs
#define MAKE_HRM(NAME, HOLD, TAP, TRIGGER_POS) \
ZMK_BEHAVIOR(NAME, hold_tap, \
flavor = "balanced"; \
tapping-term-ms = <280>; \
quick-tap-ms = <QUICK_TAP_MS>; \
global-quick-tap-ms = <150>; \
bindings = <HOLD>, <TAP>; \
hold-trigger-key-positions = <TRIGGER_POS>; \
hold-trigger-on-release; \
)
MAKE_HRM(hml, &kp, &kp, KEYS_R THUMBS) // left-hand HRMs
MAKE_HRM(hmr, &kp, &kp, KEYS_L THUMBS) // right-hand HRMs
MAKE_HRM(hml_repeat, &kp, &key_repeat, KEYS_R THUMBS) // used for HRM-combo
MAKE_HRM(hmr_lpar_lt, &kp, &lpar_lt, KEYS_L THUMBS) // " " " "
MAKE_HRM(hmr_rpar_gt, &kp, &rpar_gt, KEYS_L THUMBS) // " " " "
/* Nav cluster */
// long-tap action on hold, short-tap action on all interrupts
#define MT_CORE \
flavor = "tap-preferred"; \
tapping-term-ms = <220>; \
quick-tap-ms = <220>; \
hold-trigger-key-positions = <0>;
&mt { MT_CORE };
ZMK_BEHAVIOR(mt_home, hold_tap, bindings = <&masked_home>, <&kp>; MT_CORE)
ZMK_BEHAVIOR(mt_end, hold_tap, bindings = <&masked_end>, <&kp>; MT_CORE)
#define NAV_LEFT &mt_home 0 LEFT // tap: left | long-tap: beginning of line
#define NAV_RIGHT &mt_end 0 RIGHT // tap: right | long-tap: end of line
#define NAV_UP &mt LC(HOME) UP // tap: up | long-tap: beginning of document
#define NAV_DOWN &mt LC(END) DOWN // tap: down | long-tap: end of document
#define NAV_BSPC &mt LC(BSPC) BSPC // tap: bspc | long-tap: delete word backward
#define NAV_DEL &mt LC(DEL) DEL // tap: del | long-tap: delete word forward
// mask CTRL when holding left/right to avoid accidental jumps to beginning/end of document
#define MASK_MODS(NAME, MODS, BINDING) \
ZMK_BEHAVIOR(NAME, mod_morph, \
bindings = <BINDING>, <BINDING>; \
mods = <MODS>; \
)
MASK_MODS(masked_home, (MOD_LCTL), &kp HOME)
MASK_MODS(masked_end, (MOD_LCTL), &kp END)
/* Caps-word, num-word and smart-mouse */
// tap: sticky-shift | shift + tap/ double-tap: caps-word | hold: shift
ZMK_BEHAVIOR(smart_shft, mod_morph,
bindings = <&sk LSHFT>, <&caps_word>;
mods = <(MOD_LSFT)>;
)
&caps_word { // mods deactivate caps-word, requires PR #1451
/delete-property/ ignore-modifiers;
};
// tap: num-word | double-tap: sticky num-layer | hold: num-layer
#define SMART_NUM &smart_num NUM 0
ZMK_BEHAVIOR(smart_num, hold_tap,
flavor = "balanced";
tapping-term-ms = <200>;
quick-tap-ms = <QUICK_TAP_MS>;
bindings = <&mo>, <&num_dance>;
)
ZMK_BEHAVIOR(num_dance, tap_dance,
tapping-term-ms = <200>;
bindings = <&num_word>, <&sl NUM>; // reverse this for sticky-num on single tap
)
&num_word { // num-word, requires PR #1451
layers = <NUM>;
continue-list = <BSPC DEL DOT COMMA PLUS MINUS STAR FSLH EQUAL>;
};
// smart-mouse, requires PR #1366
ZMK_BEHAVIOR(smart_mouse, tri_state,
bindings = <&tog MOUSE>, <&none>, <&tog MOUSE>;
ignored-key-positions = <LT1 LT3 RT1 RT2 RT3 RM1 RM2 RM3 RH0 RH1>;
ignored-layers = <MOUSE>;
)
/* Custom behaviors */
// Alt+Tab swapper, requires PR #1366
ZMK_BEHAVIOR(swapper, tri_state,
bindings = <&kt LALT>, <&kp TAB>, <&kt LALT>;
ignored-key-positions = <LT2>;
)
// Sticky layer + sticky shift (workaround for issue #1421)
ZMK_BEHAVIOR(sls, sticky_key,
release-after-ms = <1000>;
bindings = <&uc_shift>;
ignore-modifiers;
)
ZMK_BEHAVIOR(uc_shift, macro,
wait-ms = <0>;
tap-ms = <1>;
bindings = <&macro_press &mo UC &kp LSHFT>
, <&macro_pause_for_release>
, <&macro_release &mo UC &kp LSHFT>;
)
// tap: comma | shift + tap: semicolon | ctrl + shift + tap: <
ZMK_BEHAVIOR(comma_morph, mod_morph,
mods = <(MOD_LSFT|MOD_RSFT)>;
bindings = <&kp COMMA>, <&comma_inner_morph>;
)
ZMK_BEHAVIOR(comma_inner_morph, mod_morph,
bindings = <&kp SEMICOLON>, <&kp LESS_THAN>;
mods = <(MOD_LCTL|MOD_RCTL)>;
)
// tap: dot | shift + tap: colon | ctrl + shift + tap: >
ZMK_BEHAVIOR(dot_morph, mod_morph,
bindings = <&kp DOT>, <&dot_inner_morph>;
mods = <(MOD_LSFT|MOD_RSFT)>;
)
ZMK_BEHAVIOR(dot_inner_morph, mod_morph,
bindings = <&kp COLON>, <&kp GREATER_THAN>;
mods = <(MOD_LCTL|MOD_RCTL)>;
)
// tap: qmark | shift + tap: excl
ZMK_BEHAVIOR(qexcl, mod_morph,
bindings = <&kp QMARK>, <&kp EXCL>;
mods = <(MOD_LSFT|MOD_RSFT)>;
)
// tap: space | shift + tap: dot -> space -> sticky shift | hold: activate layer
ZMK_BEHAVIOR(lt_spc, hold_tap,
flavor = "balanced";
tapping-term-ms = <200>;
quick-tap-ms = <QUICK_TAP_MS>;
bindings = <&mo>, <&spc_morph>;
)
ZMK_BEHAVIOR(spc_morph, mod_morph,
bindings = <&kp SPACE>, <&dot_spc>;
mods = <(MOD_LSFT|MOD_RSFT)>;
)
ZMK_BEHAVIOR(dot_spc, macro,
wait-ms = <0>;
tap-ms = <5>;
bindings = <&kp DOT &kp SPACE &sk LSHFT>;
)
// tap: backspace | lshft + tap: delete | rshft + tap: shift-delete
ZMK_BEHAVIOR(bs_del, mod_morph,
bindings = <&kp BSPC>, <&kp DEL>;
mods = <(MOD_LSFT|MOD_RSFT)>;
keep-mods = <MOD_RSFT>;
)
// tap: left-parenthesis | shft + tap: less-than
ZMK_BEHAVIOR(lpar_lt, mod_morph,
bindings = <&kp LPAR>, <&kp LT>;
mods = <(MOD_LSFT|MOD_RSFT)>;
)
// tap: right-parenthesis | shft + tap: greater-than
ZMK_BEHAVIOR(rpar_gt, mod_morph,
bindings = <&kp RPAR>, <&kp GT>;
mods = <(MOD_LSFT|MOD_RSFT)>;
)
// tap: copy | double-tap: cut
ZMK_BEHAVIOR(copy_cut, tap_dance,
tapping-term-ms = <200>;
bindings = <&kp LC(INS)>, <&kp LC(X)>;
)
// Windows sleep key
ZMK_BEHAVIOR(win_sleep, macro,
wait-ms = <500>;
tap-ms = <50>;
bindings = <&kp LG(X) &kp U &kp S>;
)
// misc aliases
#define CANCEL &kp K_CANCEL // cancel caps-word, num-word and smart-mouse
#define DSK_PREV &hmr RSHFT LG(LC(LEFT)) // previous desktop
#define DSK_NEXT &hmr LALT LG(LC(RIGHT)) // next desktop
#define VOL_DOWN &hmr LCTRL C_VOL_DN
/* Keymap */
ZMK_CONDITIONAL_LAYER(FN NUM, SYS) // FN + NUM --> SYS
ZMK_LAYER(base,
//╭──────╮ ╭─────────────┬─────────────┬─────────────┬─────────────┬─────────────╮ ╭──────╮ ╭─────────────┬─────────────┬─────────────┬─────────────┬─────────────╮ ╭──────╮
X_LT &kp Q &kp W &kp F &kp P &kp B X_MT &kp J &kp L &kp U &kp Y &kp SQT X_RT
//├──────┤ ├─────────────┼─────────────┼─────────────┼─────────────┼─────────────┤ ├──────┤ ├─────────────┼─────────────┼─────────────┼─────────────┼─────────────┤ ├──────┤
X_LM &hml LGUI A &hml LALT R &hml LCTRL S &hml LSHFT T &kp G X_MM &kp M &hmr RSHFT N &hmr LCTRL E &hmr LALT I &hmr LGUI O X_RM
//├──────┤ ├─────────────┼─────────────┼─────────────┼─────────────┼─────────────┤ ├──────┤ ├─────────────┼─────────────┼─────────────┼─────────────┼─────────────┤ ├──────┤
X_LB &kp Z &kp X &kp C &kp D &kp V X_MB &kp K &kp H &comma_morph &dot_morph &qexcl X_RB
//├──────┤ ╰─────────────┼─────────────┴─────────────┼─────────────┼─────────────┤ ├──────┤ ├─────────────┼─────────────┼─────────────┴───────────────────────────╯ ├──────┤
X_LH &lt_spc NAV 0 &lt FN RET X_MH SMART_NUM &smart_shft X_RH
//╰──────╯ ╰─────────────┴─────────────╯ ╰──────╯ ╰─────────────┴─────────────╯ ╰──────╯
)
ZMK_LAYER(nav,
//╭──────╮ ╭─────────────┬─────────────┬─────────────┬─────────────┬─────────────╮ ╭──────╮ ╭─────────────┬─────────────┬─────────────┬─────────────┬─────────────╮ ╭──────╮
X_LT ___ ___ &kp LS(TAB) &swapper ___ X_MT &kp PG_UP NAV_BSPC NAV_UP NAV_DEL ___ X_RT
//├──────┤ ├─────────────┼─────────────┼─────────────┼─────────────┼─────────────┤ ├──────┤ ├─────────────┼─────────────┼─────────────┼─────────────┼─────────────┤ ├──────┤
X_LM &sk LGUI &sk LALT &sk LCTRL &sk LSHFT ___ X_MM &kp PG_DN NAV_LEFT NAV_DOWN NAV_RIGHT &kp RET X_RM
//├──────┤ ├─────────────┼─────────────┼─────────────┼─────────────┼─────────────┤ ├──────┤ ├─────────────┼─────────────┼─────────────┼─────────────┼─────────────┤ ├──────┤
X_LB ___ ___ ___ ___ ___ X_MB &kp INS &kp TAB &kp LT &kp GT ___ X_RB
//├──────┤ ╰─────────────┼─────────────┴─────────────┼─────────────┼─────────────┤ ├──────┤ ├─────────────┼─────────────┼─────────────┴───────────────────────────╯ ├──────┤
X_LH ___ ___ X_MH ___ CANCEL X_RH
//╰──────╯ ╰─────────────┴─────────────╯ ╰──────╯ ╰─────────────┴─────────────╯ ╰──────╯
)
ZMK_LAYER(fn,
//╭──────╮ ╭─────────────┬─────────────┬─────────────┬─────────────┬─────────────╮ ╭──────╮ ╭─────────────┬─────────────┬─────────────┬─────────────┬─────────────╮ ╭──────╮
X_LT &kp F12 &kp F7 &kp F8 &kp F9 ___ X_MT ___ &kp C_PREV &kp C_VOL_UP &kp C_NEXT &win_sleep X_RT
//├──────┤ ├─────────────┼─────────────┼─────────────┼─────────────┼─────────────┤ ├──────┤ ├─────────────┼─────────────┼─────────────┼─────────────┼─────────────┤ ├──────┤
X_LM &kp F11 &kp F4 &kp F5 &kp F6 ___ X_MM ___ DSK_PREV VOL_DOWN DSK_NEXT ___ X_RM
//├──────┤ ├─────────────┼─────────────┼─────────────┼─────────────┼─────────────┤ ├──────┤ ├─────────────┼─────────────┼─────────────┼─────────────┼─────────────┤ ├──────┤
X_LB &kp F10 &kp F1 &kp F2 &kp F3 ___ X_MB ___ ___ ___ ___ ___ X_RB
//├──────┤ ╰─────────────┼─────────────┴─────────────┼─────────────┼─────────────┤ ├──────┤ ├─────────────┼─────────────┼─────────────┴───────────────────────────╯ ├──────┤
X_LH ___ ___ X_MH &kp C_MUTE &kp C_PP X_RH
//╰──────╯ ╰─────────────┴─────────────╯ ╰──────╯ ╰─────────────┴─────────────╯ ╰──────╯
)
ZMK_LAYER(num,
//╭──────╮ ╭─────────────┬─────────────┬─────────────┬─────────────┬─────────────╮ ╭──────╮ ╭─────────────┬─────────────┬─────────────┬─────────────┬─────────────╮ ╭──────╮
X_LT ___ &kp N7 &kp N8 &kp N9 ___ X_MT ___ ___ ___ ___ ___ X_RT
//├──────┤ ├─────────────┼─────────────┼─────────────┼─────────────┼─────────────┤ ├──────┤ ├─────────────┼─────────────┼─────────────┼─────────────┼─────────────┤ ├──────┤
X_LM &hml LGUI N0 &hml LALT N4 &hml LCTRL N5 &hml LSHFT N6 ___ X_MM ___ ___ ___ ___ ___ X_RM
//├──────┤ ├─────────────┼─────────────┼─────────────┼─────────────┼─────────────┤ ├──────┤ ├─────────────┼─────────────┼─────────────┼─────────────┼─────────────┤ ├──────┤
X_LB ___ &kp N1 &kp N2 &kp N3 ___ X_MB ___ ___ ___ ___ ___ X_RB
//├──────┤ ╰─────────────┼─────────────┴─────────────┼─────────────┼─────────────┤ ├──────┤ ├─────────────┼─────────────┼─────────────┴───────────────────────────╯ ├──────┤
X_LH ___ ___ X_MH ___ ___ X_RH
//╰──────╯ ╰─────────────┴─────────────╯ ╰──────╯ ╰─────────────┴─────────────╯ ╰──────╯
)
ZMK_LAYER(sys,
//╭──────╮ ╭─────────────┬─────────────┬─────────────┬─────────────┬─────────────╮ ╭──────╮ ╭─────────────┬─────────────┬─────────────┬─────────────┬─────────────╮ ╭──────╮
X_LT _BT_SEL_KEYS_ X_MT ___ ___ ___ ___ ___ X_RT
//├──────┤ ├─────────────┼─────────────┼─────────────┼─────────────┼─────────────┤ ├──────┤ ├─────────────┼─────────────┼─────────────┼─────────────┼─────────────┤ ├──────┤
X_LM ___ ___ ___ ___ &bootloader X_MM &bootloader ___ ___ ___ ___ X_RM
//├──────┤ ├─────────────┼─────────────┼─────────────┼─────────────┼─────────────┤ ├──────┤ ├─────────────┼─────────────┼─────────────┼─────────────┼─────────────┤ ├──────┤
X_LB ___ ___ ___ ___ &sys_reset X_MB &sys_reset ___ ___ ___ ___ X_RB
//├──────┤ ╰─────────────┼─────────────┴─────────────┼─────────────┼─────────────┤ ├──────┤ ├─────────────┼─────────────┼─────────────┴───────────────────────────╯ ├──────┤
X_LH ___ ___ X_MH ___ ___ X_RH
//╰──────╯ ╰─────────────┴─────────────╯ ╰──────╯ ╰─────────────┴─────────────╯ ╰──────╯
)
ZMK_LAYER(uc,
//╭──────╮ ╭─────────────┬─────────────┬─────────────┬─────────────┬─────────────╮ ╭──────╮ ╭─────────────┬─────────────┬─────────────┬─────────────┬─────────────╮ ╭──────╮
X_LT ___ &el_omega &el_phi &el_pi &el_beta X_MT ___ &el_lambda &el_upsilon &el_psi &de_eszett X_RT
//├──────┤ ├─────────────┼─────────────┼─────────────┼─────────────┼─────────────┤ ├──────┤ ├─────────────┼─────────────┼─────────────┼─────────────┼─────────────┤ ├──────┤
X_LM &el_alpha &el_rho &el_sigma &el_tau &el_gamma X_MM &el_mu &el_nu &el_epsilon &el_iota &el_omikron X_RM
//├──────┤ ├─────────────┼─────────────┼─────────────┼─────────────┼─────────────┤ ├──────┤ ├─────────────┼─────────────┼─────────────┼─────────────┼─────────────┤ ├──────┤
X_LB &el_zeta &el_xi &el_chi &el_delta &el_theta X_MB &el_kappa &el_eta &de_ae &de_oe &de_ue X_RB
//├──────┤ ╰─────────────┼─────────────┴─────────────┼─────────────┼─────────────┤ ├──────┤ ├─────────────┼─────────────┼─────────────┴───────────────────────────╯ ├──────┤
X_LH ___ ___ X_MH ___ ___ X_RH
//╰──────╯ ╰─────────────┴─────────────╯ ╰──────╯ ╰───────────────────────────╯ ╰──────╯
)
ZMK_LAYER(mouse,
//╭──────╮ ╭─────────────┬─────────────┬─────────────┬─────────────┬─────────────╮ ╭──────╮ ╭─────────────┬─────────────┬─────────────┬─────────────┬─────────────╮ ╭──────╮
X_LT ___ ___ ___ ___ ___ X_MT ___ U_WH_D U_MS_U U_WH_U ___ X_RT
//├──────┤ ├─────────────┼─────────────┼─────────────┼─────────────┼─────────────┤ ├──────┤ ├─────────────┼─────────────┼─────────────┼─────────────┼─────────────┤ ├──────┤
X_LM ___ ___ ___ ___ ___ X_MM ___ U_MS_L U_MS_D U_MS_R ___ X_RM
//├──────┤ ├─────────────┼─────────────┼─────────────┼─────────────┼─────────────┤ ├──────┤ ├─────────────┼─────────────┼─────────────┼─────────────┼─────────────┤ ├──────┤
X_LB ___ ___ ___ ___ ___ X_MB ___ ___ ___ ___ ___ X_RB
//├──────┤ ╰─────────────┼─────────────┴─────────────┼─────────────┼─────────────┤ ├──────┤ ├─────────────┼─────────────┼─────────────┴───────────────────────────╯ ├──────┤
X_LH ___ ___ X_MH U_BTN2 U_BTN1 X_RH
//╰──────╯ ╰─────────────┴─────────────╯ ╰──────╯ ╰─────────────┴─────────────╯ ╰──────╯
)
/* vim: set ft=c tw=174: */