Untitled
unknown
plain_text
a year ago
33 kB
18
Indexable
#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 SYM 6 // #define MOUSE 7 #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 }; < { // layer-tap config flavor = "balanced"; tapping-term-ms = <200>; quick-tap-ms = <QUICK_TAP_MS>; }; ZMK_CONDITIONAL_LAYER(FN NUM, SYS) // FN + NUM --> SYS /* 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>; \ require-prior-idle-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_R THUMBS) // " " " " MAKE_HRM(hmr_rpar_gt, &kp, &rpar_gt, KEYS_R 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 RT0 RT1 RT2 RT3 RT4 RM1 RM2 RM3 RB1 RB2 RB3 RH0 RH1>; // ignored-layers = <MOUSE>; // ) /* Custom behaviors */ // Alt+Tab swapper, requires PR #1366 ZMK_BEHAVIOR(window_swapper, tri_state, bindings = <&kt LALT>, <&kp TAB>, <&kt LALT>; ignored-key-positions = <LT2>; ) ZMK_BEHAVIOR(kt_la_gui, macro, wait-ms = <0>; tap-ms = <5>; bindings = <&kt LALT>, <&kt LGUI>; ) // App tab swapper ZMK_BEHAVIOR(tab_swapper, tri_state, bindings = <&kt_la_gui>, <&kp RIGHT>, <&kt_la_gui>; ignored-key-positions = <LB2>, <LB3>, <LB4>; ) // 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 = <¯o_press &mo UC &kp LSHFT> , <¯o_pause_for_release> , <¯o_release &mo UC &kp LSHFT>; ) // reuse basic mod-morph scheme #define SIMPLE_MORPH(NAME, MOD, BINDING1, BINDING2) \ ZMK_BEHAVIOR(NAME, mod_morph, \ mods = <(MOD_L ## MOD|MOD_R ## MOD)>; \ bindings = <BINDING1>, <BINDING2>; \ ) // tap: comma | shift + tap: semicolon | ctrl + shift + tap: < SIMPLE_MORPH(comma_morph, SFT, &kp COMMA, &comma_inner_morph) SIMPLE_MORPH(comma_inner_morph, CTL, &kp SEMICOLON, &kp LESS_THAN) // tap: dot | shift + tap: colon | ctrl + shift + tap: > SIMPLE_MORPH(dot_morph, SFT, &kp DOT, &dot_inner_morph) SIMPLE_MORPH(dot_inner_morph, CTL, &kp COLON, &kp GREATER_THAN) // tap: left/right parenthesis | shft + tap: less-than/greater-than SIMPLE_MORPH(lpar_lt, SFT, &kp LPAR, &kp LT) SIMPLE_MORPH(rpar_gt, SFT, &kp RPAR, &kp GT) // 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>; ) SIMPLE_MORPH(spc_morph, SFT, &kp SPACE, &dot_spc) 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: copy | double-tap: cut ZMK_BEHAVIOR(copy_cut, tap_dance, tapping-term-ms = <200>; bindings = <&kp LC(INS)>, <&kp LC(X)>; ) ZMK_BEHAVIOR(nav_5_down, macro, wait-ms = <5>; tap-ms = <3>; bindings = <&kp DOWN>, <&kp DOWN>, <&kp DOWN>, <&kp DOWN>, <&kp DOWN>; ) ZMK_BEHAVIOR(nav_5_up, macro, wait-ms = <5>; tap-ms = <3>; bindings = <&kp UP>, <&kp UP>, <&kp UP>, <&kp UP>, <&kp UP>; ) SIMPLE_MORPH(qnav_down, ALT, &kp DOWN, &nav_5_down) SIMPLE_MORPH(qnav_up, ALT, &kp UP, &nav_5_up) // TODO: fix. still not working ZMK_BEHAVIOR(nav_close, macro, wait-ms = <20>; tap-ms = <5>; bindings = <&kt_la_gui>, <&kp LC(W)>, <&kt_la_gui>; ) ZMK_BEHAVIOR(nav_recent_tab, macro, wait-ms = <20>; tap-ms = <5>; bindings = <&kt_la_gui>, <&kp LC(LS(T))>, <&kt_la_gui>; ) // TODO: Nav toggle on return kp // TODO: change smart shift to sticky caps lock // 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 PIN_WIN &kp LG(LC(LS(Q))) // pin window across desktops #define PIN_APP &kp LG(LC(LS(A))) // pin application across desktops #define DSK_MGR &kp LA(GRAVE) // desktop manager #define VOL_DOWN &hmr LCTRL C_VOL_DN #define BACK &kp LG(LBKT) // back #define FORWARD &kp LG(RBKT) // forward /* Keymap */ ZMK_LAYER(base, //â•──────╮ â•─────────────┬─────────────┬─────────────┬─────────────┬─────────────╮ â•──────╮ â•─────────────┬─────────────┬─────────────┬─────────────┬─────────────╮ â•──────╮ &kp TAB &kp Q &kp W &kp F &kp P &kp G X_MT &kp J &kp L &kp U &kp Y &kp COLON X_RT //├──────┤ ├─────────────┼─────────────┼─────────────┼─────────────┼─────────────┤ ├──────┤ ├─────────────┼─────────────┼─────────────┼─────────────┼─────────────┤ ├──────┤ X_LM &hml LGUI A &hml LALT R &hml LCTRL S &hml LSHFT T &kp D X_MM &kp H &hmr RSHFT N &hmr RCTRL E &hmr RALT I &hmr RGUI O &kp BSPC //├──────┤ ├─────────────┼─────────────┼─────────────┼─────────────┼─────────────┤ ├──────┤ ├─────────────┼─────────────┼─────────────┼─────────────┼─────────────┤ ├──────┤ X_LB &kp Z &kp X &kp C &kp V &kp B X_MB &kp K &kp M &comma_morph &dot_morph &kp FSLH X_RB //╰──────╯ ╰─────────────┼─────────────┴─────────────┼─────────────┼─────────────┤ ├──────┤ ├─────────────┼─────────────┼─────────────┴───────────────────────────╯ ╰──────╯ < FN ESC <_spc NAV 0 &kp SPACE X_MH &kp RETURN < NUM BSPC &smart_shft // ╰─────────────┴─────────────┴─────────────╯ ╰──────╯ ╰─────────────┴─────────────┴─────────────╯ ) ZMK_LAYER(nav, //â•──────╮ â•─────────────┬─────────────┬─────────────┬─────────────┬─────────────╮ â•──────╮ â•─────────────┬─────────────┬─────────────┬─────────────┬─────────────╮ â•──────╮ &kp TAB &kp N1 &kp N2 &kp N3 &kp N4 &kp N5 &kp N6 &kp N7 &kp N8 &kp N9 &kp N0 &kp BSPC //├──────┤ ├─────────────┼─────────────┼─────────────┼─────────────┼─────────────┤ ├──────┤ ├─────────────┼─────────────┼─────────────┼─────────────┼─────────────┤ ├──────┤ X_LM &kp LESS_THAN &kp GREATER_THAN &kp MINUS &kp PLUS &kp COMMA X_MM &kp DOT &kp LEFT &kp DOWN &kp UP &kp RIGHT &kp COLON //├──────┤ ├─────────────┼─────────────┼─────────────┼─────────────┼─────────────┤ ├──────┤ ├─────────────┼─────────────┼─────────────┼─────────────┼─────────────┤ ├──────┤ X_LB BACK FORWARD &kp LEFT &tab_swapper &window_swapper X_MB &kp LS(TAB) &kp TAB &kp PG_DN &kp PG_UP ___ X_RB //├──────┤ ╰─────────────┼─────────────┴─────────────┼─────────────┼─────────────┤ ├──────┤ ├─────────────┼─────────────┼─────────────┴───────────────────────────╯ ├──────┤ X_LH ___ ___ X_MH &kp RETURN NAV_BSPC X_RH //╰──────╯ ╰─────────────┴─────────────╯ ╰──────╯ ╰─────────────┴─────────────╯ ╰──────╯ ) ZMK_LAYER(fn, //â•──────╮ â•─────────────┬─────────────┬─────────────┬─────────────┬─────────────╮ â•──────╮ â•─────────────┬─────────────┬─────────────┬─────────────┬─────────────╮ â•──────╮ X_LT &kp F12 &kp F7 &kp F8 &kp F9 ___ X_MT ___ ___ ___ ___ ___ X_RT //├──────┤ ├─────────────┼─────────────┼─────────────┼─────────────┼─────────────┤ ├──────┤ ├─────────────┼─────────────┼─────────────┼─────────────┼─────────────┤ ├──────┤ X_LM &hml LCTRL F11 &hml LALT F4 &hml LGUI F5 &hml LSHFT F6 ___ X_MM ___ &kp C_PREV VOL_DOWN &kp C_VOL_UP &kp C_NEXT X_RM //├──────┤ ├─────────────┼─────────────┼─────────────┼─────────────┼─────────────┤ ├──────┤ ├─────────────┼─────────────┼─────────────┼─────────────┼─────────────┤ ├──────┤ X_LB &kp F10 &kp F1 &kp F2 &kp F3 ___ X_MB PIN_APP PIN_WIN DSK_MGR ___ ___ X_RB //├──────┤ ╰─────────────┼─────────────┴─────────────┼─────────────┼─────────────┤ ├──────┤ ├─────────────┼─────────────┼─────────────┴───────────────────────────╯ ├──────┤ X_LH ___ ___ X_MH &kp C_MUTE &kp C_PP X_RH //╰──────╯ ╰─────────────┴─────────────╯ ╰──────╯ ╰─────────────┴─────────────╯ ╰──────╯ ) ZMK_LAYER(num, //â•──────╮ â•─────────────┬─────────────┬─────────────┬─────────────┬─────────────╮ â•──────╮ â•─────────────┬─────────────┬─────────────┬─────────────┬─────────────╮ â•──────╮ &kp TAB &kp EXCL &kp AT &kp HASH &kp DLLR &kp PRCNT X_MT &kp CARET &kp AMPS &kp ASTRK &kp UNDER &kp BSLH &kp BSPC //├──────┤ ├─────────────┼─────────────┼─────────────┼─────────────┼─────────────┤ ├──────┤ ├─────────────┼─────────────┼─────────────┼─────────────┼─────────────┤ ├──────┤ &kp LCTRL &kp SEMI &kp EQUAL &kp LPAR &kp RPAR &kp LBKT X_MM &kp RBKT &kp LBRC &kp RBRC &kp DOUBLE_QUOTES &kp SINGLE_QUOTE &kp GRAVE //├──────┤ ├─────────────┼─────────────┼─────────────┼─────────────┼─────────────┤ ├──────┤ ├─────────────┼─────────────┼─────────────┼─────────────┼─────────────┤ ├──────┤ &kp LSHFT &kp COLON CANCEL &kp MINUS &kp PLUS NAV_DEL X_MB &kp MINUS &kp PLUS &kp LBRC &kp RBRC &kp PIPE &kp TILDE //├──────┤ ╰─────────────┼─────────────┴─────────────┼─────────────┼─────────────┤ ├──────┤ ├─────────────┼─────────────┼─────────────┴───────────────────────────╯ ├──────┤ X_LH &kp UNDER ___ 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(sym, //â•──────╮ â•─────────────┬─────────────┬─────────────┬─────────────┬─────────────╮ â•──────╮ â•─────────────┬─────────────┬─────────────┬─────────────┬─────────────╮ â•──────╮ X_LT &kp LG(Q) &kp LG(W) &kp LG(LS(T)) &kp LG(T) &kp F1 X_MT ___ &kp STAR &kp FSLH &kp TILDE &kp GRAVE X_RT //├──────┤ ├─────────────┼─────────────┼─────────────┼─────────────┼─────────────┤ ├──────┤ ├─────────────┼─────────────┼─────────────┼─────────────┼─────────────┤ ├──────┤ X_LM &hml LCTRL EXCL &hml LALT AT &hml LGUI HASH &hml LSHFT DLLR &kp F2 X_MM ___ &hmr RSHFT AMPS &hmr RGUI PIPE &hmr RALT PLUS &hmr RCTRL MINUS X_RM //├──────┤ ├─────────────┼─────────────┼─────────────┼─────────────┼─────────────┤ ├──────┤ ├─────────────┼─────────────┼─────────────┼─────────────┼─────────────┤ ├──────┤ X_LB &kp RG(F) &kp RG(S) &kp RG(Z) &kp RG(RS(Z)) &kp F3 X_MB ___ &kp CARET &kp PRCNT &kp BSLH &kp FSLH X_RB //├──────┤ ╰─────────────┼─────────────┴─────────────┼─────────────┼─────────────┤ ├──────┤ ├─────────────┼─────────────┼─────────────┴───────────────────────────╯ ├──────┤ X_LH ___ ___ X_MH &kp RETURN &kp BSPC X_RH //╰──────╯ ╰─────────────┴─────────────╯ ╰──────╯ ╰─────────────┴─────────────╯ ╰──────╯ ) // Not compiling for some reason // ZMK_LAYER(mouse, //â•──────╮ â•─────────────┬─────────────┬─────────────┬─────────────┬─────────────╮ â•──────╮ â•─────────────┬─────────────┬─────────────┬─────────────┬─────────────╮ â•──────╮ // X_LT ___ ___ ___ ___ ___ X_MT U_WH_L U_WH_D U_MS_U U_WH_U U_WH_R X_RT //├──────┤ ├─────────────┼─────────────┼─────────────┼─────────────┼─────────────┤ ├──────┤ ├─────────────┼─────────────┼─────────────┼─────────────┼─────────────┤ ├──────┤ // X_LM ___ ___ ___ ___ ___ X_MM ___ U_MS_L U_MS_D U_MS_R ___ X_RM //├──────┤ ├─────────────┼─────────────┼─────────────┼─────────────┼─────────────┤ ├──────┤ ├─────────────┼─────────────┼─────────────┼─────────────┼─────────────┤ ├──────┤ // X_LB ___ ___ ___ ___ ___ X_MB ___ &mkp MB4 &mkp MCLK &mkp MB5 ___ X_RB //├──────┤ ╰─────────────┼─────────────┴─────────────┼─────────────┼─────────────┤ ├──────┤ ├─────────────┼─────────────┼─────────────┴───────────────────────────╯ ├──────┤ // X_LH ___ ___ X_MH &mkp LCLK &mkp RCLK X_RH //╰──────╯ ╰─────────────┴─────────────╯ ╰──────╯ ╰─────────────┴─────────────╯ ╰──────╯ //) /* vim: set ft=c tw=174: */
Editor is loading...
Leave a Comment