{ lib, ... }: { name = "kmonad"; meta = { maintainers = with lib.maintainers; [ linj ]; }; nodes = { machine = { services.kmonad = { enable = true; extraArgs = [ "--log-level=debug" ]; keyboards = { defaultKbd = { device = "/dev/input/by-id/vm-default-kbd"; defcfg = { enable = true; fallthrough = true; }; config = '' (defsrc :name default-src 1) (deflayer default-layer :source default-src @T2) (defalias T2 2) ''; }; }; }; # make a determinate symlink to the default vm keyboard for kmonad to use services.udev.extraRules = '' ACTION=="add", KERNEL=="event*", SUBSYSTEM=="input", ATTRS{name}=="QEMU Virtio Keyboard", ATTRS{id/product}=="0001", ATTRS{id/vendor}=="0627", SYMLINK+="input/by-id/vm-default-kbd" ''; }; }; testScript = '' service_name = "kmonad-defaultKbd" machine.wait_for_unit(f"{service_name}.service") with subtest("kmonad is running"): machine.succeed(f"systemctl status {service_name}") with subtest("kmonad symlink is created"): machine.wait_for_file(f"/dev/input/by-id/{service_name}", timeout=5) ''; }