my urchin config with urobs timeless homerow mods

home row mods!!

Changed files
+80 -11
config
+71 -10
config/urchin.keymap
··· 9 9 #include <dt-bindings/zmk/bt.h> 10 10 #include <dt-bindings/zmk/outputs.h> 11 11 12 + #include "zmk-helpers/helper.h" 13 + #include "zmk-helpers/key-labels/42.h" 14 + #include <dt-bindings/zmk/keys.h> 15 + 16 + #define QUICK_TAP_MS 175 17 + 12 18 // Layer definitions 13 19 #define BASE 0 14 20 #define SYM 1 15 21 #define EXT 2 16 22 #define FNC 3 17 - #define SETTINGS 6 23 + #define SETTINGS 4 24 + 25 + /* Homerow mods */ 26 + 27 + #define HM_TAPPING_TERM 300 28 + #define HM_TAPPING_TERM_FAST 200 29 + #define HM_PRIOR_IDLE 150 30 + 31 + #define KEYS_L LT0 LT1 LT2 LT3 LT4 LM0 LM1 LM2 LM3 LM4 LB0 LB1 LB2 LB3 LB4 // left hand 32 + #define KEYS_R RT0 RT1 RT2 RT3 RT4 RM0 RM1 RM2 RM3 RM4 RB0 RB1 RB2 RB3 RB4 // right hand 33 + #define KEYS_T LH1 LH0 RH0 RH1 // thumbs on 34 keys 34 + 18 35 // ----------------- 19 36 20 37 &sk { ··· 23 40 }; 24 41 25 42 26 - &mt { 43 + &mt { // mode-tap config 27 44 flavor = "tap-preferred"; 28 45 tapping_term_ms = <200>; 29 46 quick_tap_ms = <75>; 30 47 }; 31 48 49 + &lt { // layer-tap config 50 + flavor = "balanced"; 51 + tapping-term-ms = <200>; 52 + quick-tap-ms = <QUICK_TAP_MS>; 53 + }; 32 54 33 55 / { 34 56 behaviors { 57 + // Positional Homerow mods 58 + // Homerow mods that prevent accidental activations when rolling keys, 59 + // such as when typing `st` or `ne` on colemak-dh layouts or `as` on 60 + // qwerty. 61 + // 62 + // Works by only allowing a mod to activate within tapping-term if 63 + // it's on the opposite side of the keyboard or on the same side thumb 64 + // keys. 65 + 66 + // Further optimization using urob's timerless homerow mods method: 67 + // https://github.com/urob/zmk-config#timeless-homerow-mods 68 + hml: homerow_mods_left { 69 + compatible = "zmk,behavior-hold-tap"; 70 + #binding-cells = <2>; 71 + bindings = <&kp>, <&kp>; 72 + 73 + flavor = "balanced"; 74 + tapping-term-ms = <HM_TAPPING_TERM>; 75 + quick-tap-ms = <175>; // repeat on tap-into-hold 76 + require-prior-idle-ms = <HM_PRIOR_IDLE>; 77 + 78 + hold-trigger-key-positions = <KEYS_R KEYS_T>; 79 + hold-trigger-on-release; 80 + }; 81 + 82 + hmr: homerow_mods_right { 83 + compatible = "zmk,behavior-hold-tap"; 84 + #binding-cells = <2>; 85 + bindings = <&kp>, <&kp>; 86 + 87 + flavor = "balanced"; 88 + tapping-term-ms = <HM_TAPPING_TERM>; 89 + quick-tap-ms = <175>; 90 + require-prior-idle-ms = <HM_PRIOR_IDLE>; 91 + 92 + hold-trigger-key-positions = <KEYS_L KEYS_T>; 93 + hold-trigger-on-release; 94 + }; 95 + 35 96 // Enables holding the first mod-tap key 36 97 // by performing a tap-release-hold sequence. 37 98 // To use it: "&qt KEYCODE1 KEYCODE2" ··· 83 144 default_layer { 84 145 label = "Base"; 85 146 bindings = < 86 - &kp DOT &kp COMMA &kp DOT &kp P &kp Y &kp F &kp G &kp C &kp R &kp L 87 - &kp A &kp O &kp E &kp U &kp I &kp D &kp H &kp T &kp N &kp S 88 - &kp SCLN &kp Q &kp J &kp K &kp X &kp B &kp M &kp W &kp V &kp Z 89 - &mt LALT SPC &mt LGUI TAB &mt LSHIFT RET &mt LCTRL BSPC 147 + &kp DOT &kp COMMA &kp DOT &kp P &kp Y &kp F &kp G &kp C &kp R &kp L 148 + &hml LCTRL A &hml LALT O &hml LSHIFT E &hml LGUI U &kp I &kp D &hmr RGUI H &hmr RSHIFT T &hmr RALT N &hmr RCTRL S 149 + &kp SCLN &kp Q &kp J &kp K &kp X &kp B &kp M &kp W &kp V &kp Z 150 + &mt LALT SPC &mt LGUI TAB &mt LSHIFT RET &mt LCTRL BSPC 90 151 >; 91 152 }; 92 153 ··· 94 155 sym_layer { 95 156 label = "Sym."; 96 157 bindings = < 97 - &kp N1 &kp N2 &kp N3 &kp N4 &kp N5 &kp N6 &kp N7 &kp N8 &kp N9 &kp N0 98 - &none &none &none &none &none &none &none &none &none &none 99 - &none &none &none &none &none &none &none &none &none &none 100 - &mo FNC &none &trans &trans 158 + &none &none &none &none &none &none &kp N7 &kp N8 &kp N9 &none 159 + &none &none &none &none &none &none &kp N4 &kp N5 &kp N6 &none 160 + &none &none &none &none &none &kp N0 &kp N1 &kp N2 &kp N3 &none 161 + &mo FNC &none &trans &trans 101 162 >; 102 163 }; 103 164
+8
config/west.yml
··· 6 6 # kyek / duckyb 7 7 - name: duckyb 8 8 url-base: https://github.com/duckyb 9 + - name: urob 10 + url-base: https://github.com/urob 9 11 projects: 10 12 - name: zmk 11 13 remote: zmkfirmware ··· 13 15 import: app/west.yml 14 16 - name: urchin-zmk-module 15 17 remote: duckyb 18 + revision: main 19 + - name: zmk-helpers 20 + remote: urob 21 + revision: main 22 + - name: zmk-auto-layer 23 + remote: urob 16 24 revision: main 17 25 self: 18 26 path: config
+1 -1
flake.nix
··· 33 33 shield = "urchin_%PART%"; 34 34 35 35 zephyrDepsHash = 36 - "sha256-9QwsEJAoMrTp4gHgCsSsrAiDC1JN3brLSINIxKJKq08="; 36 + "sha256-DXOQ+Hu8p1qeLiB1loRmKG9YOVbkJWMOrDI/aVA472M="; 37 37 38 38 meta = { 39 39 description = "ZMK firmware";