1import ./make-test-python.nix ({ pkgs, lib, ... }: {
2 name = "miriway";
3
4 meta = {
5 maintainers = with lib.maintainers; [ OPNA2608 ];
6 };
7
8 nodes.machine = { config, ... }: {
9 imports = [
10 ./common/auto.nix
11 ./common/user-account.nix
12 ];
13
14 # Seems to very rarely get interrupted by oom-killer
15 virtualisation.memorySize = 2047;
16
17 test-support.displayManager.auto = {
18 enable = true;
19 user = "alice";
20 };
21
22 services.xserver = {
23 enable = true;
24 displayManager.defaultSession = lib.mkForce "miriway";
25 };
26
27 programs.miriway = {
28 enable = true;
29 config = ''
30 add-wayland-extensions=all
31 enable-x11=
32
33 ctrl-alt=t:foot --maximized
34 ctrl-alt=a:env WINIT_UNIX_BACKEND=x11 WAYLAND_DISPLAY=invalid alacritty --option window.startup_mode=maximized
35
36 shell-component=dbus-update-activation-environment --systemd DISPLAY WAYLAND_DISPLAY
37
38 shell-component=foot --maximized
39 '';
40 };
41
42 environment = {
43 shellAliases = {
44 test-wayland = "wayland-info | tee /tmp/test-wayland.out && touch /tmp/test-wayland-exit-ok";
45 test-x11 = "glinfo | tee /tmp/test-x11.out && touch /tmp/test-x11-exit-ok";
46 };
47
48 systemPackages = with pkgs; [
49 mesa-demos
50 wayland-utils
51 foot
52 alacritty
53 ];
54
55 # To help with OCR
56 etc."xdg/foot/foot.ini".text = lib.generators.toINI { } {
57 main = {
58 font = "inconsolata:size=16";
59 };
60 colors = rec {
61 foreground = "000000";
62 background = "ffffff";
63 regular2 = foreground;
64 };
65 };
66 etc."xdg/alacritty/alacritty.yml".text = lib.generators.toYAML { } {
67 font = rec {
68 normal.family = "Inconsolata";
69 bold.family = normal.family;
70 italic.family = normal.family;
71 bold_italic.family = normal.family;
72 size = 16;
73 };
74 colors = rec {
75 primary = {
76 foreground = "0x000000";
77 background = "0xffffff";
78 };
79 normal = {
80 green = primary.foreground;
81 };
82 };
83 };
84 };
85
86 fonts.packages = [ pkgs.inconsolata ];
87 };
88
89 enableOCR = true;
90
91 testScript = { nodes, ... }: ''
92 start_all()
93 machine.wait_for_unit("multi-user.target")
94
95 # Wait for Miriway to complete startup
96 machine.wait_for_file("/run/user/1000/wayland-0")
97 machine.succeed("pgrep miriway-shell")
98 machine.screenshot("miriway_launched")
99
100 # Test Wayland
101 # We let Miriway start the first terminal, as we might get stuck if it's not ready to process the first keybind
102 # machine.send_key("ctrl-alt-t")
103 machine.wait_for_text("alice@machine")
104 machine.send_chars("test-wayland\n")
105 machine.wait_for_file("/tmp/test-wayland-exit-ok")
106 machine.copy_from_vm("/tmp/test-wayland.out")
107 machine.screenshot("foot_wayland_info")
108 # Only succeeds when a mouse is moved inside an interactive session?
109 # machine.send_chars("exit\n")
110 # machine.wait_until_fails("pgrep foot")
111 machine.succeed("pkill foot")
112
113 # Test XWayland
114 machine.send_key("ctrl-alt-a")
115 machine.wait_for_text("alice@machine")
116 machine.send_chars("test-x11\n")
117 machine.wait_for_file("/tmp/test-x11-exit-ok")
118 machine.copy_from_vm("/tmp/test-x11.out")
119 machine.screenshot("alacritty_glinfo")
120 # Only succeeds when a mouse is moved inside an interactive session?
121 # machine.send_chars("exit\n")
122 # machine.wait_until_fails("pgrep alacritty")
123 machine.succeed("pkill alacritty")
124 '';
125})