server/programs/kanata/default.nix

125 lines
3.4 KiB
Nix

{ pkgs, ... }:
let
kanata-config = ''
(defcfg
process-unmapped-keys yes
danger-enable-cmd yes
)
(defsrc
esc
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 lalt spc ralt rctl
)
(deflayer qwerty
@esc
grv 1 2 3 4 5 6 7 8 9 0 - = bspc
tab q w e r t y u i o p [ ] \
@cap a s d f g h j k l ; ' ret
lsft z x c v b n m , . / rsft
lctl @lmet lalt spc ralt @rctl
)
(deflayer control
@esc
grv 1 2 3 4 5 6 7 8 9 0 - = bspc
tab q w e @replay t y u i o p @wup @wdown \
@cap a s d f g left down up right ; ' bspc
lsft z x C-c v bspc n @macro , . C-f rsft
lctl lmet lalt spc ralt @rctl
)
(deflayermap (programming)
f (macro f n spc)
w (macro w h e r e spc)
l (macro l o o p { ret)
u (macro u s e spc)
i (macro i m p o r t spc)
s (macro s e l f spc)
)
(defalias
;; hold esc
esc (tap-hold 800 800 esc caps)
;; control
cap (tap-hold-release 200 200
(multi dynamic-macro-record-stop esc)
(layer-while-held control)
)
lmet (
tap-hold-press 200 200
(cmd ${pkgs.lib.getExe' pkgs.custom.niri "niri"} msg action toggle-overview)
lmet
)
macro (dynamic-macro-record 0)
replay (dynamic-macro-play 0)
wup (mwheel-up 50 120)
wdown (mwheel-down 50 120)
;; programming
rctl (
tap-hold-release
200 200
C-k (layer-while-held programming)
)
)
'';
in
{
custom.program.kanata.requirements = [ "graphical" ];
custom.program.kanata.home-config =
{ pkgs, config, ... }:
{
systemd.user.services.kanata = {
Unit = {
Description = "kanata";
};
Service = {
Restart = "always";
RestartSec = "3";
ExecStart = "${pkgs.kanata-with-cmd}/bin/kanata --cfg ${pkgs.writeText "kanata.kbd" kanata-config}";
Nice = "-20";
};
Install = {
WantedBy = [ "default.target" ];
};
};
home.file.kanata = {
target = ".config/kanata/kanata.kbd";
text = kanata-config;
};
};
# custom.program.kanata.system-config =
# { pkgs, ... }:
# {
# sudo groupadd uinput
# sudo usermod -aG input $USER
# sudo usermod -aG uinput $USER
# echo "KERNEL=="uinput", MODE="0660", GROUP="uinput", OPTIONS+="static_node=uinput"" >> /etc/udev/rules.d/99-input.rules
# reboot or sudo udevadm control --reload-rules && sudo udevadm trigger
# sudo modprobe uinput
users.groups.uinput = { };
users.extraUsers.jana.extraGroups = [
"uinput"
"input"
];
environment.systemPackages = [ pkgs.kanata-with-cmd ];
services.udev.extraRules = ''
KERNEL=="uinput", MODE="0660", GROUP="uinput", OPTIONS+="static_node=uinput"
'';
# };
}