{ pkgs, lib, ... }: { name = "firstTest"; nodes.test-machine = {suites ? null, ...}: { imports = suites.iso; home-manager.users.pub-solar.programs.bash.shellAliases = { test-x11 = "glinfo | tee /tmp/test-x11.out && touch /tmp/test-x11-exit-ok"; test-wayland = "wayland-info | tee /tmp/test-wayland.out && touch /tmp/test-wayland-exit-ok"; }; # source: https://github.com/NixOS/nixpkgs/blob/nixos-unstable/nixos/tests/sway.nix environment = { # For glinfo and wayland-info: systemPackages = with pkgs; [mesa-demos wayland-utils alacritty]; # Use a fixed SWAYSOCK path (for swaymsg): variables = { "SWAYSOCK" = "/tmp/sway-ipc.sock"; # TODO: Investigate if we can get hardware acceleration to work (via # virtio-gpu and Virgil). We currently have to use the Pixman software # renderer since the GLES2 renderer doesn't work inside the VM (even # with WLR_RENDERER_ALLOW_SOFTWARE): # "WLR_RENDERER_ALLOW_SOFTWARE" = "1"; "WLR_RENDERER" = "pixman"; }; # To help with OCR: etc."xdg/foot/foot.ini".text = lib.generators.toINI {} { main = { font = "inconsolata:size=14"; }; colors = rec { foreground = "000000"; background = "ffffff"; regular2 = foreground; }; }; }; fonts.fonts = [pkgs.inconsolata]; # Need to switch to a different GPU driver than the default one (-vga std) so that Sway can launch: virtualisation.qemu.options = ["-vga none -device virtio-gpu-pci"]; virtualisation.cores = 4; virtualisation.memorySize = 2048; }; enableOCR = true; testScript = '' import shlex def swaymsg(command: str, succeed=True): with machine.nested(f"sending swaymsg {command!r}" + " (allowed to fail)" * (not succeed)): (machine.succeed if succeed else machine.execute)( f"su - pub-solar -c {shlex.quote('swaymsg -- ' + command)}" ) machine.wait_for_unit("multi-user.target") # To check the version: print(machine.succeed("sway --version")) # Wait for Sway to complete startup: machine.wait_for_file("/run/user/1000/wayland-1") machine.wait_for_file("/tmp/sway-ipc.sock") # Start a terminal (foot) on workspace 3: machine.wait_for_text("1") machine.send_key("meta_l-3") machine.sleep(3) machine.send_key("meta_l-ret") machine.sleep(10) machine.send_chars("whoami\n") machine.sleep(3) machine.wait_for_text("pub-solar") machine.send_chars("test-wayland\n") machine.wait_for_file("/tmp/test-wayland-exit-ok") print(machine.succeed("cat /tmp/test-wayland.out")) machine.copy_from_vm("/tmp/test-wayland.out") machine.sleep(3) machine.screenshot("foot_wayland_info") machine.send_key("meta_l-shift-q") machine.wait_until_fails("pgrep foot") ''; }