{ # Enable the uinput module boot.kernelModules = [ "uinput" ]; # Enable uinput hardware.uinput.enable = true; # Set up udev rules for uinput services.udev.extraRules = '' KERNEL=="uinput", MODE="0660", GROUP="uinput", OPTIONS+="static_node=uinput" ''; # Ensure the uinput group exists users.groups.uinput = { }; services.libinput.enable = true; # Add the Kanata service user to necessary groups systemd.services.kanata-internalKeyboard.serviceConfig = { SupplementaryGroups = [ "input" "uinput" ]; }; services.kanata = { enable = true; keyboards = { internalKeyboard = { extraDefCfg = "process-unmapped-keys yes"; config = '' (defsrc caps tab d h j k l ) (defvar tap-time 200 hold-time 200 ) (defalias caps (tap-hold 200 200 esc lctl) tab (tap-hold $tap-time $hold-time tab (layer-toggle arrow)) del del ;; Alias for the true delete key action ) (deflayer base @caps @tab d h j k l ) (deflayer arrow _ _ @del left down up right ) ''; }; }; }; }