303 lines
27 KiB
C++
303 lines
27 KiB
C++
#include <behaviors.dtsi>
|
|
#include <dt-bindings/zmk/keys.h>
|
|
#if CONFIG_WIRELESS
|
|
#include <dt-bindings/zmk/bt.h>
|
|
#include <dt-bindings/zmk/outputs.h>
|
|
#define _BT_SEL_KEYS_ &bt BT_SEL 0 &bt BT_SEL 1 &bt BT_SEL 2 &bt BT_SEL 3 &bt BT_SEL 4
|
|
#define _BT_CFG_KEYS_ &bt BT_CLR &trans &out OUT_TOG
|
|
#else
|
|
#define _BT_SEL_KEYS_ &trans &trans &trans &trans &trans
|
|
#define _BT_CFG_KEYS_ &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 SYS 2
|
|
#define NUM 3
|
|
#define FN 4
|
|
#define UC 5
|
|
#define MWH 6
|
|
|
|
#include "combos.dtsi" // must be sourced after layer-shortcuts
|
|
#include "mouse.dtsi"
|
|
#include "extra_keys.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 | double-tap: sticky fun-layer | hold: num-layer
|
|
ZMK_BEHAVIOR(num_fun_dance, tap_dance,
|
|
tapping-term-ms = <200>;
|
|
bindings = <&num_word>, <&sl FN>;
|
|
)
|
|
ZMK_BEHAVIOR(num_layer_word, hold_tap,
|
|
flavor = "balanced";
|
|
tapping-term-ms = <200>;
|
|
quick-tap-ms = <QUICK_TAP_MS>;
|
|
bindings = <&mo>, <&num_fun_dance>;
|
|
)
|
|
#define NUM_WORD &num_layer_word NUM 0
|
|
|
|
// scroll-mode, requires PR #1366
|
|
ZMK_BEHAVIOR(scroll_mode, tri_state,
|
|
bindings = <&tog MWH>, <&none>, <&tog MWH>;
|
|
ignored-key-positions = <RT2 RM2>;
|
|
ignored-layers = <MWH>;
|
|
)
|
|
|
|
// 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>;
|
|
)
|
|
|
|
// 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 = <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, requires PR #1366
|
|
ZMK_BEHAVIOR(swap, tri_state,
|
|
bindings = <&kt LALT>, <&kp TAB>, <&kt LALT>;
|
|
ignored-key-positions = <LT2>;
|
|
)
|
|
|
|
/* Keymap */
|
|
|
|
ZMK_LAYER(default_layer,
|
|
//╭──────╮ ╭─────────────┬─────────────┬─────────────┬─────────────┬─────────────╮ ╭──────╮ ╭─────────────┬─────────────┬─────────────┬─────────────┬─────────────╮ ╭──────╮
|
|
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 &key_repeat X_RB
|
|
//├──────┤ ╰─────────────┼─────────────┴─────────────┼─────────────┼─────────────┤ ├──────┤ ├─────────────┼─────────────┼─────────────┴───────────────────────────╯ ├──────┤
|
|
X_LH &bs_del_sys <_spc NAV 0 X_MH &ss_cw NUM_WORD X_RH
|
|
//╰──────╯ ╰─────────────┴─────────────╯ ╰──────╯ ╰─────────────┴─────────────╯ ╰──────╯
|
|
)
|
|
|
|
ZMK_LAYER(nav_layer,
|
|
//╭──────╮ ╭─────────────┬─────────────┬─────────────┬─────────────┬─────────────╮ ╭──────╮ ╭─────────────┬─────────────┬─────────────┬─────────────┬─────────────╮ ╭──────╮
|
|
X_LT ___ ___ &kp LS(TAB) &swap ___ 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 ©_cut &kp LS(INS) ___ X_RB
|
|
//├──────┤ ╰─────────────┼─────────────┴─────────────┼─────────────┼─────────────┤ ├──────┤ ├─────────────┼─────────────┼─────────────┴───────────────────────────╯ ├──────┤
|
|
X_LH ___ ___ X_MH ___ CANCEL X_RH
|
|
//╰──────╯ ╰─────────────┴─────────────╯ ╰──────╯ ╰─────────────┴─────────────╯ ╰──────╯
|
|
)
|
|
|
|
ZMK_LAYER(sys_layer,
|
|
//╭──────╮ ╭─────────────┬─────────────┬─────────────┬─────────────┬─────────────╮ ╭──────╮ ╭─────────────┬─────────────┬─────────────┬─────────────┬─────────────╮ ╭──────╮
|
|
X_LT _BT_SEL_KEYS_ X_MT ___ &kp C_PREV &kp C_VOL_UP &kp C_NEXT &win_sleep X_RT
|
|
//├──────┤ ├─────────────┼─────────────┼─────────────┼─────────────┼─────────────┤ ├──────┤ ├─────────────┼─────────────┼─────────────┼─────────────┼─────────────┤ ├──────┤
|
|
X_LM &sk LGUI &sk LALT &sk LCTRL &sk LSHFT ___ X_MM ___ DSK_PREV &kp C_VOL_DN DSK_NEXT ___ X_RM
|
|
//├──────┤ ├─────────────┼─────────────┼─────────────┼─────────────┼─────────────┤ ├──────┤ ├─────────────┼─────────────┼─────────────┼─────────────┼─────────────┤ ├──────┤
|
|
X_LB _BT_CFG_KEYS_ &reset &bootloader X_MB &bootloader &reset ___ ___ ___ X_RB
|
|
//├──────┤ ╰─────────────┼─────────────┴─────────────┼─────────────┼─────────────┤ ├──────┤ ├─────────────┼─────────────┼─────────────┴───────────────────────────╯ ├──────┤
|
|
X_LH ___ ___ X_MH &kp C_PP &kp C_MUTE X_RH
|
|
//╰──────╯ ╰─────────────┴─────────────╯ ╰──────╯ ╰─────────────┴─────────────╯ ╰──────╯
|
|
)
|
|
|
|
ZMK_LAYER(num_layer,
|
|
//╭──────╮ ╭─────────────┬─────────────┬─────────────┬─────────────┬─────────────╮ ╭──────╮ ╭─────────────┬─────────────┬─────────────┬─────────────┬─────────────╮ ╭──────╮
|
|
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 N0 &kp N1 &kp N2 &kp N3 ___ X_MB ___ ___ ___ ___ ___ X_RB
|
|
//├──────┤ ╰─────────────┼─────────────┴─────────────┼─────────────┼─────────────┤ ├──────┤ ├─────────────┼─────────────┼─────────────┴───────────────────────────╯ ├──────┤
|
|
X_LH ___ ___ X_MH ___ ___ X_RH
|
|
//╰──────╯ ╰─────────────┴─────────────╯ ╰──────╯ ╰─────────────┴─────────────╯ ╰──────╯
|
|
)
|
|
|
|
ZMK_LAYER(fn_layer,
|
|
//╭──────╮ ╭─────────────┬─────────────┬─────────────┬─────────────┬─────────────╮ ╭──────╮ ╭─────────────┬─────────────┬─────────────┬─────────────┬─────────────╮ ╭──────╮
|
|
X_LT &kp F12 &kp F7 &kp F8 &kp F9 ___ X_MT ___ ___ ___ ___ ___ X_RT
|
|
//├──────┤ ├─────────────┼─────────────┼─────────────┼─────────────┼─────────────┤ ├──────┤ ├─────────────┼─────────────┼─────────────┼─────────────┼─────────────┤ ├──────┤
|
|
X_LM &kp F11 &kp F4 &kp F5 &kp F6 ___ X_MM ___ &sk RSHFT &sk LCTRL &sk LALT &sk LGUI X_RM
|
|
//├──────┤ ├─────────────┼─────────────┼─────────────┼─────────────┼─────────────┤ ├──────┤ ├─────────────┼─────────────┼─────────────┼─────────────┼─────────────┤ ├──────┤
|
|
X_LB &kp F10 &kp F1 &kp F2 &kp F3 ___ X_MB ___ ___ ___ ___ ___ X_RB
|
|
//├──────┤ ╰─────────────┼─────────────┴─────────────┼─────────────┼─────────────┤ ├──────┤ ├─────────────┼─────────────┼─────────────┴───────────────────────────╯ ├──────┤
|
|
X_LH ___ ___ X_MH ___ ___ X_RH
|
|
//╰──────╯ ╰─────────────┴─────────────╯ ╰──────╯ ╰─────────────┴─────────────╯ ╰──────╯
|
|
)
|
|
|
|
ZMK_LAYER(uc_layer,
|
|
//╭──────╮ ╭─────────────┬─────────────┬─────────────┬─────────────┬─────────────╮ ╭──────╮ ╭─────────────┬─────────────┬─────────────┬─────────────┬─────────────╮ ╭──────╮
|
|
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(mwh_layer,
|
|
//╭──────╮ ╭─────────────┬─────────────┬─────────────┬─────────────┬─────────────╮ ╭──────╮ ╭─────────────┬─────────────┬─────────────┬─────────────┬─────────────╮ ╭──────╮
|
|
X_LT ___ ___ ___ ___ ___ X_MT ___ ___ &mwh SCROLL_UP ___ ___ X_RT
|
|
//├──────┤ ├─────────────┼─────────────┼─────────────┼─────────────┼─────────────┤ ├──────┤ ├─────────────┼─────────────┼─────────────┼─────────────┼─────────────┤ ├──────┤
|
|
X_LM ___ ___ ___ ___ ___ X_MM ___ ___ &mwh SCROLL_DOWN ___ ___ X_RM
|
|
//├──────┤ ├─────────────┼─────────────┼─────────────┼─────────────┼─────────────┤ ├──────┤ ├─────────────┼─────────────┼─────────────┼─────────────┼─────────────┤ ├──────┤
|
|
X_LB ___ ___ ___ ___ ___ X_MB ___ ___ ___ ___ ___ X_RB
|
|
//├──────┤ ╰─────────────┼─────────────┴─────────────┼─────────────┼─────────────┤ ├──────┤ ├─────────────┼─────────────┼─────────────┴───────────────────────────╯ ├──────┤
|
|
X_LH ___ ___ X_MH ___ ___ X_RH
|
|
//╰──────╯ ╰─────────────┴─────────────╯ ╰──────╯ ╰─────────────┴─────────────╯ ╰──────╯
|
|
)
|
|
|
|
/* vim: set ft=cpp tw=174: */
|