python312Packages.millheater: 0.11.8 -> 0.12.0
[NixPkgs.git] / nixos / tests / tinywl.nix
blob2dc354812a75e3d45a0f6265afafdd2c83f37b52
1 import ./make-test-python.nix ({ pkgs, lib, ... }:
3   {
4     name = "tinywl";
5     meta = {
6       maintainers = with lib.maintainers; [ primeos ];
7     };
9     nodes.machine = { config, ... }: {
10       # Automatically login on tty1 as a normal user:
11       imports = [ ./common/user-account.nix ];
12       services.getty.autologinUser = "alice";
13       security.polkit.enable = true;
15       environment = {
16         systemPackages = with pkgs; [ tinywl foot wayland-utils ];
17       };
19       hardware.graphics.enable = true;
21       # Automatically start TinyWL when logging in on tty1:
22       programs.bash.loginShellInit = ''
23         if [ "$(tty)" = "/dev/tty1" ]; then
24           set -e
25           test ! -e /tmp/tinywl.log # Only start tinywl once
26           readonly TEST_CMD="wayland-info |& tee /tmp/test-wayland.out && touch /tmp/test-wayland-exit-ok; read"
27           readonly FOOT_CMD="foot sh -c '$TEST_CMD'"
28           tinywl -s "$FOOT_CMD" |& tee /tmp/tinywl.log
29           touch /tmp/tinywl-exit-ok
30         fi
31       '';
33       # Switch to a different GPU driver (default: -vga std), otherwise TinyWL segfaults:
34       virtualisation.qemu.options = [ "-vga none -device virtio-gpu-pci" ];
35     };
37     testScript = { nodes, ... }: ''
38       start_all()
39       machine.wait_for_unit("multi-user.target")
41       # Wait for complete startup:
42       machine.wait_until_succeeds("pgrep tinywl")
43       machine.wait_for_file("/run/user/1000/wayland-0")
44       machine.wait_until_succeeds("pgrep foot")
45       machine.wait_for_file("/tmp/test-wayland-exit-ok")
47       # Make a screenshot and save the result:
48       machine.screenshot("tinywl_foot")
49       print(machine.succeed("cat /tmp/test-wayland.out"))
50       machine.copy_from_vm("/tmp/test-wayland.out")
52       # Terminate cleanly:
53       machine.send_key("alt-esc")
54       machine.wait_until_fails("pgrep foot")
55       machine.wait_until_fails("pgrep tinywl")
56       machine.wait_for_file("/tmp/tinywl-exit-ok")
57       machine.copy_from_vm("/tmp/tinywl.log")
58     '';
59   })