summaryrefslogtreecommitdiffstats
path: root/nixos/tests/kmonad.nix
blob: 0c880a99787efb805101dc1b79fe5c3a76782625 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
{ 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)
  '';
}