1{ pkgs, ... }:
2
3{
4 name = "retroarch";
5 meta = with pkgs.lib; {
6 maintainers = teams.libretro.members ++ [ maintainers.j0hax ];
7 };
8
9 nodes.machine =
10 { ... }:
11
12 {
13 imports = [ ./common/user-account.nix ];
14 services.xserver.enable = true;
15 services.xserver.desktopManager.retroarch = {
16 enable = true;
17 package = pkgs.retroarch-bare;
18 };
19 services.displayManager = {
20 sddm.enable = true;
21 defaultSession = "RetroArch";
22 autoLogin = {
23 enable = true;
24 user = "alice";
25 };
26 };
27 };
28
29 testScript =
30 { nodes, ... }:
31 let
32 user = nodes.machine.users.users.alice;
33 xdo = "${pkgs.xdotool}/bin/xdotool";
34 in
35 ''
36 with subtest("Wait for login"):
37 start_all()
38 machine.wait_for_file("/run/sddm/xauth_*")
39 machine.wait_until_succeeds("test -s /run/sddm/xauth_*")
40 machine.succeed("xauth merge /run/sddm/xauth_*")
41
42 with subtest("Check RetroArch started"):
43 machine.wait_until_succeeds("pgrep retroarch")
44 machine.wait_for_window("^RetroArch")
45
46 with subtest("Check configuration created"):
47 machine.wait_for_file("${user.home}/.config/retroarch/retroarch.cfg")
48
49 with subtest("Wait to get a screenshot"):
50 machine.execute(
51 "${xdo} key Alt+F1 sleep 10"
52 )
53 machine.screenshot("screen")
54 '';
55}