1{ lib, ... }:
2
3{
4 name = "kmonad";
5
6 meta = {
7 maintainers = with lib.maintainers; [ linj ];
8 };
9
10 nodes = {
11 machine = {
12 services.kmonad = {
13 enable = true;
14 extraArgs = [
15 "--log-level=debug"
16 ];
17 keyboards = {
18 defaultKbd = {
19 device = "/dev/input/by-id/vm-default-kbd";
20 defcfg = {
21 enable = true;
22 fallthrough = true;
23 };
24 config = ''
25 (defsrc :name default-src
26 1)
27 (deflayer default-layer :source default-src
28 @T2)
29 (defalias
30 T2 2)
31 '';
32 };
33 };
34 };
35
36 # make a determinate symlink to the default vm keyboard for kmonad to use
37 services.udev.extraRules = ''
38 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"
39 '';
40 };
41 };
42
43 testScript = ''
44 service_name = "kmonad-defaultKbd"
45 machine.wait_for_unit(f"{service_name}.service")
46
47 with subtest("kmonad is running"):
48 machine.succeed(f"systemctl status {service_name}")
49 with subtest("kmonad symlink is created"):
50 machine.wait_for_file(f"/dev/input/by-id/{service_name}", timeout=5)
51 '';
52}