{ ... }: let stickTap = action: "tap-hold-press 0 200 (one-shot-press-pcancel 1000 (${action})) (${action})"; mkConfig = { blueTrigger, redTrigger, chordDelay }: '' ;; {{{ Source layout (defsrc grv 1 2 3 4 5 6 7 8 9 0 - = bspc tab q w e r t y u i o p [ ] \ caps a s d f g h j k l ; ' ret lsft z x c v b n m , . / rsft lctl lmet ${redTrigger} spc ${blueTrigger} ) ;; }}} ;; {{{ Layer & utility aliases (defalias red (layer-while-held red) blue (layer-while-held blue) purple (layer-while-held purple) em (unicode —) ) ;; }}} (defchordsv2-experimental ;; {{{ Left modifiers (a s d f) (multi lctl lalt lsft) ${toString chordDelay} all-released () (a s d ) (multi lalt lsft) ${toString chordDelay} all-released () ( s d f) (multi lctl lsft) ${toString chordDelay} all-released () (a s ) lalt ${toString chordDelay} all-released () ( s d ) lsft ${toString chordDelay} all-released () ( s f) lctl ${toString chordDelay} all-released () ;; }}} ;; {{{ Right modifiers (j k l ;) (multi rctl ralt rsft) ${toString chordDelay} all-released () (j k l ) (multi rctl rsft) ${toString chordDelay} all-released () ( k l ;) (multi ralt rsft) ${toString chordDelay} all-released () (j l ) rctl ${toString chordDelay} all-released () ( k l ) rsft ${toString chordDelay} all-released () ( l ;) ralt ${toString chordDelay} all-released () ;; }}} ;; {{{ Special keys (d f) tab ${toString chordDelay} all-released () (e f) ret ${toString chordDelay} all-released () (q w) esc ${toString chordDelay} all-released () (g h) bspc ${toString chordDelay} all-released () (n l) rmet ${toString chordDelay} all-released () (j k) f10 ${toString chordDelay} all-released () (c p) f11 ${toString chordDelay} all-released () (j i) f12 ${toString chordDelay} all-released () ;; }}} ;; {{{ Wm keybinds (n l k) M-p ${toString chordDelay} all-released () (n l q) M-1 ${toString chordDelay} all-released () (n l w) M-2 ${toString chordDelay} all-released () (n l e) M-3 ${toString chordDelay} all-released () (n l r) M-4 ${toString chordDelay} all-released () (n l t) M-5 ${toString chordDelay} all-released () (n l a) M-6 ${toString chordDelay} all-released () (n l s) M-7 ${toString chordDelay} all-released () (n l d) M-8 ${toString chordDelay} all-released () (n l f) M-9 ${toString chordDelay} all-released () (n l g) M-0 ${toString chordDelay} all-released () ;; }}} ) ;; {{{ Qwerty (deflayer qwerty XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX q w e r t y u i o p XX XX XX XX a s d f g h j k l ; XX XX lsft z x c v b n m , . ' XX XX lmet @red spc @blue ) ;; }}} ;; {{{ Transparent template (deflayer template _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ ) ;; }}} ;; {{{ Blue (deflayer blue _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ S-= S-2 S-3 S-4 S-5 S-- S-7 S-8 grv S-grv _ _ _ _ S-, S-[ [ S-9 S-/ S-\ - / = S-; _ _ _ S-. S-] ] S-0 S-1 @em S-6 _ _ S-' _ _ _ @purple \ _ ) ;; }}} ;; {{{ Red (deflayer red _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 1 2 3 4 5 home pgdn pgup end del _ _ _ _ 6 7 8 9 0 left down up rght _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ @purple ) ;; }}} ;; {{{ Purple (defalias ;; Press once to active caps lock for a word (revert after being idle ;; for 2s), or twice for real caps lock. cps (tap-dance 200 ((caps-word 2000) caps)) udo (arbitrary-code 131) ;; undo cpy (arbitrary-code 133) ;; copy pst (arbitrary-code 135) ;; paste cut (arbitrary-code 137) ;; cut ) (deflayer purple _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ f1 f2 f3 f4 f5 @cps @cpy next volu brup _ _ _ _ f6 f7 f8 f9 f10 @udo @pst pp vold brdn _ _ _ f11 f12 _ _ _ _ @cut prev mute _ _ _ _ _ _ _ ) ;; }}} ''; extraDefCfg = '' concurrent-tap-hold true ;; Required by chords ''; in { services.kanata = { enable = true; keyboards.tethysLaptop = { inherit extraDefCfg; devices = [ "/dev/input/by-path/platform-i8042-serio-0-event-kbd" ]; config = mkConfig { redTrigger = "lalt"; blueTrigger = "ralt"; chordDelay = 25; }; }; keyboards.keychronK6 = { inherit extraDefCfg; devices = [ "/dev/input/by-id/usb-Keychron_Keychron_K6-event-kbd" ]; config = mkConfig { redTrigger = "lalt"; blueTrigger = "rctl"; chordDelay = 30; }; }; }; }