
The old order would trigger the morph on Ctrl + Dot, which is used by some browsers to fill in fields. With the new order, the nested morph is only triggered if both Ctrl and Shift are pressed simultaneously.
276 lines
23 KiB
C++
276 lines
23 KiB
C++
#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"
|
|
|
|
#define DEF 0
|
|
#define NAV 1
|
|
#define SYS 2
|
|
#define NUM 3
|
|
#define FN 4
|
|
#define UC 5
|
|
|
|
#include "combos.dtsi" // must be sourced after layer-shortcuts
|
|
#include "mouse.dtsi"
|
|
#include "xtr_defaults.h"
|
|
|
|
ZMK_CONDITIONAL_LAYER(SYS NUM, FN) // SYS + NUM --> FN
|
|
|
|
/* Navigation keys and misc shortcuts */
|
|
|
|
&mt {
|
|
flavor = "tap-preferred";
|
|
tapping-term-ms = <220>;
|
|
quick-tap-ms = <220>; // repeat on tap-into-hold
|
|
hold-trigger-key-positions = <0>; // tap on interrupt
|
|
};
|
|
|
|
#define NAV_LEFT &mt HOME LEFT // tap: left | long-tap: beginning of line
|
|
#define NAV_RIGHT &mt END 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
|
|
|
|
#define XXX &none
|
|
#define ___ &trans
|
|
|
|
#define CANCEL &kp K_CANCEL // cancel caps-word and num-word
|
|
#define DSK_PREV &kp LG(LC(LEFT)) // previous desktop
|
|
#define DSK_NEXT &kp LG(LC(RIGHT)) // next desktop
|
|
|
|
/* Settings */
|
|
|
|
#define QUICK_TAP_MS 175
|
|
|
|
&sk { // sticky-key config
|
|
release-after-ms = <600>; // release after 0.6s
|
|
quick-release; // no double capitalization when rolling keys
|
|
};
|
|
|
|
&sl { // sticky-layer config
|
|
ignore-modifiers;
|
|
};
|
|
|
|
< { // layer-tap config
|
|
flavor = "balanced";
|
|
tapping-term-ms = <200>;
|
|
quick-tap-ms = <QUICK_TAP_MS>;
|
|
};
|
|
|
|
&caps_word { // mods deactivate caps-word, requires PR #1441
|
|
/delete-property/ ignore-modifiers;
|
|
};
|
|
|
|
&num_word { // num-word, requires PR #1441
|
|
layers = <NUM>;
|
|
};
|
|
|
|
/* Homerow mods */
|
|
|
|
#define KEYS_L LT0 LT1 LT2 LT3 LT4 LM0 LM1 LM2 LM3 LM4 LB0 LB1 LB2 LB3 LB4 // left-hand keys
|
|
#define KEYS_R RT0 RT1 RT2 RT3 RT4 RM0 RM1 RM2 RM3 RM4 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 = <280>;
|
|
quick-tap-ms = <QUICK_TAP_MS>;
|
|
global-quick-tap-ms = <150>; // requires PR #1387
|
|
bindings = <&kp>, <&kp>;
|
|
hold-trigger-key-positions = <KEYS_R THUMBS>;
|
|
hold-trigger-on-release; // requires PR #1423
|
|
)
|
|
|
|
ZMK_BEHAVIOR(hmr, hold_tap, // right-hand HRMs
|
|
flavor = "balanced";
|
|
tapping-term-ms = <280>;
|
|
quick-tap-ms = <QUICK_TAP_MS>;
|
|
global-quick-tap-ms = <150>; // requires PR #1387
|
|
bindings = <&kp>, <&kp>;
|
|
hold-trigger-key-positions = <KEYS_L THUMBS>;
|
|
hold-trigger-on-release; // requires PR #1423
|
|
)
|
|
|
|
/* Custom behaviors */
|
|
|
|
// tap: num-word | hold: num-layer
|
|
ZMK_BEHAVIOR(num_layer_word, hold_tap,
|
|
flavor = "balanced";
|
|
tapping-term-ms = <200>;
|
|
quick-tap-ms = <QUICK_TAP_MS>;
|
|
bindings = <&mo>, <&num_word>;
|
|
)
|
|
#define NUM_WORD &num_layer_word NUM 0
|
|
|
|
// tap: sticky shift | double tap: capsword | triple tap: cancel capsword
|
|
// ZMK_BEHAVIOR(ss_cw, tap_dance,
|
|
// tapping-term-ms = <200>;
|
|
// bindings = <&sk LSHFT>, <&caps_word>, <CANCEL>;
|
|
// )
|
|
// tap: sticky-shift | lshft + tap: caps-word | hold: shift
|
|
ZMK_BEHAVIOR(ss_cw, mod_morph,
|
|
bindings = <&sk LSHFT>, <&caps_word>;
|
|
mods = <(MOD_LSFT)>;
|
|
)
|
|
|
|
// tap: backspace | lshft + tap: delete | rshft + tap: shift-delete | hold: num layer
|
|
ZMK_BEHAVIOR(bs_del_sys, mod_morph,
|
|
bindings = << SYS BSPC>, <&kp DEL>;
|
|
mods = <(MOD_LSFT|MOD_RSFT)>;
|
|
keep-mods = <MOD_LSFT>; // requires PR #1412
|
|
)
|
|
|
|
// tap: space | space + tap: dot -> space -> sticky shift | hold: activate layer
|
|
ZMK_BEHAVIOR(dot_spc, macro,
|
|
wait-ms = <0>;
|
|
tap-ms = <5>;
|
|
bindings = <&kp DOT &kp SPACE &sk LSHFT>;
|
|
)
|
|
ZMK_BEHAVIOR(spc_morph, mod_morph,
|
|
bindings = <&kp SPACE>, <&dot_spc>;
|
|
mods = <(MOD_LSFT|MOD_RSFT)>;
|
|
)
|
|
ZMK_BEHAVIOR(lt_spc, hold_tap,
|
|
flavor = "balanced";
|
|
tapping-term-ms = <200>;
|
|
quick-tap-ms = <QUICK_TAP_MS>;
|
|
bindings = <&mo>, <&spc_morph>;
|
|
)
|
|
|
|
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 = <100>;
|
|
tap-ms = <5>;
|
|
bindings = <&kp LG(X) &kp U &kp S>;
|
|
)
|
|
|
|
// Sticky layer + sticky shift (workaround for issue #1421)
|
|
ZMK_BEHAVIOR(uc_shift, macro,
|
|
wait-ms = <0>;
|
|
tap-ms = <1>;
|
|
bindings = <¯o_press &mo UC &kp LSHFT>
|
|
, <¯o_pause_for_release>
|
|
, <¯o_release &mo UC &kp LSHFT>;
|
|
)
|
|
ZMK_BEHAVIOR(sls, sticky_key,
|
|
release-after-ms = <1000>;
|
|
bindings = <&uc_shift>;
|
|
ignore-modifiers;
|
|
)
|
|
|
|
// tap: comma | shift + tap: semicolon | ctrl + shift + tap: <
|
|
ZMK_BEHAVIOR(comma_inner_morph, mod_morph,
|
|
bindings = <&kp SEMICOLON>, <&kp LESS_THAN>;
|
|
mods = <(MOD_LCTL|MOD_RCTL)>;
|
|
)
|
|
ZMK_BEHAVIOR(comma_morph, mod_morph,
|
|
mods = <(MOD_LSFT|MOD_RSFT)>;
|
|
bindings = <&kp COMMA>, <&comma_inner_morph>;
|
|
)
|
|
|
|
// tap: dot | shift + tap: colon | ctrl + shift + tap: >
|
|
ZMK_BEHAVIOR(dot_inner_morph, mod_morph,
|
|
bindings = <&kp COLON>, <&kp GREATER_THAN>;
|
|
mods = <(MOD_LCTL|MOD_RCTL)>;
|
|
)
|
|
ZMK_BEHAVIOR(dot_morph, mod_morph,
|
|
bindings = <&kp DOT>, <&dot_inner_morph>;
|
|
mods = <(MOD_LSFT|MOD_RSFT)>;
|
|
)
|
|
|
|
// Swapper
|
|
/ {
|
|
behaviors {
|
|
swap: swapper {
|
|
compatible = "zmk,behavior-tri-state";
|
|
label = "SWAPPER";
|
|
#binding-cells = <0>;
|
|
bindings = <&kt LALT>, <&kp TAB>, <&kt LALT>;
|
|
ignored-key-positions = <LT2>;
|
|
};
|
|
};
|
|
};
|
|
|
|
/* Keymap */
|
|
|
|
ZMK_LAYER(default_layer,
|
|
// ╭─────────────┬─────────────┬─────────────┬─────────────┬─────────────╮ ╭─────────────╮ ╭─────────────┬─────────────┬─────────────┬─────────────┬─────────────╮
|
|
&kp Q &kp W &kp F &kp P &kp B XTR_MT &kp J &kp L &kp U &kp Y &kp SQT
|
|
// ├─────────────┼─────────────┼─────────────┼─────────────┼─────────────┤ ├─────────────┤ ├─────────────┼─────────────┼─────────────┼─────────────┼─────────────┤
|
|
&hml LGUI A &hml LALT R &hml LCTRL S &hml LSHFT T &kp G XTR_MM &kp M &hmr RSHFT N &hmr LCTRL E &hmr LALT I &hmr LGUI O
|
|
// ├─────────────┼─────────────┼─────────────┼─────────────┼─────────────┤ ├─────────────┤ ├─────────────┼─────────────┼─────────────┼─────────────┼─────────────┤
|
|
&kp Z &kp X &kp C &kp D &kp V XTR_MB &kp K &kp H &comma_morph &dot_morph &key_repeat
|
|
// ├─────────────┼─────────────┴─────────────┼─────────────┼─────────────┤ ├─────────────┤ ├─────────────┼─────────────┼─────────────┴─────────────┼─────────────┤
|
|
XTR_LH &bs_del_sys <_spc NAV 0 XTR_MH &ss_cw NUM_WORD XTR_RH
|
|
// ╰─────────────╯ ╰─────────────┴─────────────╯ ╰─────────────╯ ╰─────────────┴─────────────╯ ╰─────────────╯
|
|
)
|
|
|
|
ZMK_LAYER(nav_layer,
|
|
// ╭─────────────┬─────────────┬─────────────┬─────────────┬─────────────╮ ╭─────────────╮ ╭─────────────┬─────────────┬─────────────┬─────────────┬─────────────╮
|
|
___ ___ &kp LS(TAB) &swap ___ XTR_MT &kp PG_UP NAV_BSPC NAV_UP NAV_DEL ___
|
|
// ├─────────────┼─────────────┼─────────────┼─────────────┼─────────────┤ ├─────────────┤ ├─────────────┼─────────────┼─────────────┼─────────────┼─────────────┤
|
|
&sk LGUI &sk LALT &sk LCTRL &sk LSHFT ___ XTR_MM &kp PG_DN NAV_LEFT NAV_DOWN NAV_RIGHT &kp RET
|
|
// ├─────────────┼─────────────┼─────────────┼─────────────┼─────────────┤ ├─────────────┤ ├─────────────┼─────────────┼─────────────┼─────────────┼─────────────┤
|
|
___ ___ ___ ___ ___ XTR_MB &kp INS &kp TAB ©_cut &kp LS(INS) ___
|
|
// ├─────────────┼─────────────┴─────────────┼─────────────┼─────────────┤ ├─────────────┤ ├─────────────┼─────────────┼─────────────┴─────────────┼─────────────┤
|
|
XTR_LH ___ ___ XTR_MH ___ CANCEL XTR_RH
|
|
// ╰─────────────╯ ╰─────────────┴─────────────╯ ╰─────────────╯ ╰─────────────┴─────────────╯ ╰─────────────╯
|
|
)
|
|
|
|
ZMK_LAYER(sys_layer,
|
|
// ╭─────────────┬─────────────┬─────────────┬─────────────┬─────────────╮ ╭─────────────╮ ╭─────────────┬─────────────┬─────────────┬─────────────┬─────────────╮
|
|
&kp LG(GRAVE) ___ ___ &reset &bootloader XTR_MT ___ &kp C_PREV &kp C_VOL_UP &kp C_NEXT &win_sleep
|
|
// ├─────────────┼─────────────┼─────────────┼─────────────┼─────────────┤ ├─────────────┤ ├─────────────┼─────────────┼─────────────┼─────────────┼─────────────┤
|
|
&sk LGUI &sk LALT &sk LCTRL &sk LSHFT ___ XTR_MM ___ DSK_PREV &kp C_VOL_DN DSK_NEXT ___
|
|
// ├─────────────┼─────────────┼─────────────┼─────────────┼─────────────┤ ├─────────────┤ ├─────────────┼─────────────┼─────────────┼─────────────┼─────────────┤
|
|
___ ___ ___ ___ ___ XTR_MB ___ ___ ___ ___ ___
|
|
// ├─────────────┼─────────────┴─────────────┼─────────────┼─────────────┤ ├─────────────┤ ├─────────────┼─────────────┼─────────────┴─────────────┼─────────────┤
|
|
XTR_LH ___ ___ XTR_MH &kp C_PP &kp C_MUTE XTR_RH
|
|
// ╰─────────────╯ ╰─────────────┴─────────────╯ ╰─────────────╯ ╰─────────────┴─────────────╯ ╰─────────────╯
|
|
)
|
|
|
|
ZMK_LAYER(num_layer,
|
|
// ╭─────────────┬─────────────┬─────────────┬─────────────┬─────────────╮ ╭─────────────╮ ╭─────────────┬─────────────┬─────────────┬─────────────┬─────────────╮
|
|
___ &kp N7 &kp N8 &kp N9 ___ XTR_MT ___ ___ ___ ___ ___
|
|
// ├─────────────┼─────────────┼─────────────┼─────────────┼─────────────┤ ├─────────────┤ ├─────────────┼─────────────┼─────────────┼─────────────┼─────────────┤
|
|
&hml LGUI N0 &hml LALT N4 &hml LCTRL N5 &hml LSHFT N6 ___ XTR_MM ___ ___ ___ ___ ___
|
|
// ├─────────────┼─────────────┼─────────────┼─────────────┼─────────────┤ ├─────────────┤ ├─────────────┼─────────────┼─────────────┼─────────────┼─────────────┤
|
|
___ &kp N1 &kp N2 &kp N3 ___ XTR_MB ___ ___ ___ ___ ___
|
|
// ├─────────────┼─────────────┴─────────────┼─────────────┼─────────────┤ ├─────────────┤ ├─────────────┼─────────────┼─────────────┴─────────────┼─────────────┤
|
|
XTR_LH ___ ___ XTR_MH ___ ___ XTR_RH
|
|
// ╰─────────────╯ ╰─────────────┴─────────────╯ ╰─────────────╯ ╰─────────────┴─────────────╯ ╰─────────────╯
|
|
)
|
|
|
|
ZMK_LAYER(fn_layer,
|
|
// ╭─────────────┬─────────────┬─────────────┬─────────────┬─────────────╮ ╭─────────────╮ ╭─────────────┬─────────────┬─────────────┬─────────────┬─────────────╮
|
|
&kp F12 &kp F7 &kp F8 &kp F9 ___ XTR_MT ___ ___ ___ ___ ___
|
|
// ├─────────────┼─────────────┼─────────────┼─────────────┼─────────────┤ ├─────────────┤ ├─────────────┼─────────────┼─────────────┼─────────────┼─────────────┤
|
|
&kp F11 &kp F4 &kp F5 &kp F6 ___ XTR_MM ___ &sk RSHFT &sk LCTRL &sk LALT &sk LGUI
|
|
// ├─────────────┼─────────────┼─────────────┼─────────────┼─────────────┤ ├─────────────┤ ├─────────────┼─────────────┼─────────────┼─────────────┼─────────────┤
|
|
&kp F10 &kp F1 &kp F2 &kp F3 ___ XTR_MB ___ ___ ___ ___ ___
|
|
// ├─────────────┼─────────────┴─────────────┼─────────────┼─────────────┤ ├─────────────┤ ├─────────────┼─────────────┼─────────────┴─────────────┼─────────────┤
|
|
XTR_LH ___ ___ XTR_MH ___ ___ XTR_RH
|
|
// ╰─────────────╯ ╰─────────────┴─────────────╯ ╰─────────────╯ ╰─────────────┴─────────────╯ ╰─────────────╯
|
|
)
|
|
|
|
ZMK_LAYER(uc_layer,
|
|
// ╭─────────────┬─────────────┬─────────────┬─────────────┬─────────────╮ ╭─────────────╮ ╭─────────────┬─────────────┬─────────────┬─────────────┬─────────────╮
|
|
___ &el_omega &el_phi &el_pi &el_beta XTR_MT ___ &el_lambda &el_upsilon &el_psi &de_eszett
|
|
// ├─────────────┼─────────────┼─────────────┼─────────────┼─────────────┤ ├─────────────┤ ├─────────────┼─────────────┼─────────────┼─────────────┼─────────────┤
|
|
&el_alpha &el_rho &el_sigma &el_tau &el_gamma XTR_MM &el_mu &el_nu &el_epsilon &el_iota &el_omikron
|
|
// ├─────────────┼─────────────┼─────────────┼─────────────┼─────────────┤ ├─────────────┤ ├─────────────┼─────────────┼─────────────┼─────────────┼─────────────┤
|
|
&el_zeta &el_xi &el_chi &el_delta &el_theta XTR_MB &el_kappa &el_eta &de_ae &de_oe &de_ue
|
|
// ├─────────────┼─────────────┴─────────────┼─────────────┼─────────────┤ ├─────────────┤ ├─────────────┼─────────────┼─────────────┴─────────────┼─────────────┤
|
|
XTR_LH ___ ___ XTR_MH ___ ___ XTR_RH
|
|
// ╰─────────────╯ ╰─────────────┴─────────────╯ ╰─────────────╯ ╰───────────────────────────╯ ╰─────────────╯
|
|
)
|
|
|
|
/* vim: set tw=180: */
|