import ./make-test-python.nix ({ pkgs, lib, ... }: { name = "miriway"; meta = { maintainers = with lib.maintainers; [ OPNA2608 ]; # FIXME On ARM Miriway inside the VM doesn't receive keyboard inputs, why? broken = pkgs.stdenv.hostPlatform.isAarch; }; nodes.machine = { config, ... }: { imports = [ ./common/auto.nix ./common/user-account.nix ]; # Seems to very rarely get interrupted by oom-killer virtualisation.memorySize = 2047; test-support.displayManager.auto = { enable = true; user = "alice"; }; services.xserver = { enable = true; displayManager.defaultSession = lib.mkForce "miriway"; }; programs.miriway = { enable = true; config = '' add-wayland-extensions=all ctrl-alt=t:foot --maximized ctrl-alt=a:env WINIT_UNIX_BACKEND=x11 WAYLAND_DISPLAY=invalid alacritty --option window.startup_mode=maximized shell-component=dbus-update-activation-environment --systemd DISPLAY WAYLAND_DISPLAY shell-component=foot --maximized ''; }; environment = { shellAliases = { test-wayland = "wayland-info | tee /tmp/test-wayland.out && touch /tmp/test-wayland-exit-ok"; test-x11 = "glinfo | tee /tmp/test-x11.out && touch /tmp/test-x11-exit-ok"; }; systemPackages = with pkgs; [ mesa-demos wayland-utils foot alacritty ]; # To help with OCR etc."xdg/foot/foot.ini".text = lib.generators.toINI { } { main = { font = "inconsolata:size=16"; }; colors = rec { foreground = "000000"; background = "ffffff"; regular2 = foreground; }; }; etc."xdg/alacritty/alacritty.yml".text = lib.generators.toYAML { } { font = rec { normal.family = "Inconsolata"; bold.family = normal.family; italic.family = normal.family; bold_italic.family = normal.family; size = 16; }; colors = rec { primary = { foreground = "0x000000"; background = "0xffffff"; }; normal = { green = primary.foreground; }; }; }; }; fonts.fonts = [ pkgs.inconsolata ]; }; enableOCR = true; testScript = { nodes, ... }: '' start_all() machine.wait_for_unit("multi-user.target") # Wait for Miriway to complete startup machine.wait_for_file("/run/user/1000/wayland-0") machine.succeed("pgrep miriway-shell") machine.screenshot("miriway_launched") # Test Wayland # We let Miriway start the first terminal, as we might get stuck if it's not ready to process the first keybind # machine.send_key("ctrl-alt-t") machine.wait_for_text("alice@machine") machine.send_chars("test-wayland\n") machine.wait_for_file("/tmp/test-wayland-exit-ok") machine.copy_from_vm("/tmp/test-wayland.out") machine.screenshot("foot_wayland_info") # Only succeeds when a mouse is moved inside an interactive session? # machine.send_chars("exit\n") # machine.wait_until_fails("pgrep foot") machine.succeed("pkill foot") # Test XWayland machine.send_key("ctrl-alt-a") machine.wait_for_text("alice@machine") machine.send_chars("test-x11\n") machine.wait_for_file("/tmp/test-x11-exit-ok") machine.copy_from_vm("/tmp/test-x11.out") machine.screenshot("alacritty_glinfo") # Only succeeds when a mouse is moved inside an interactive session? # machine.send_chars("exit\n") # machine.wait_until_fails("pgrep alacritty") machine.succeed("pkill alacritty") ''; })