1import ./make-test.nix ({ pkgs, ...} :
2
3{
4 name = "plasma5";
5 meta = with pkgs.stdenv.lib.maintainers; {
6 maintainers = [ ttuegel ];
7 };
8
9 machine = { ... }:
10 let
11 sddm_theme = pkgs.stdenv.mkDerivation {
12 name = "breeze-ocr-theme";
13 phases = "buildPhase";
14 buildCommand = ''
15 mkdir -p $out/share/sddm/themes/
16 cp -r ${pkgs.plasma-workspace}/share/sddm/themes/breeze $out/share/sddm/themes/breeze-ocr-theme
17 chmod -R +w $out/share/sddm/themes/breeze-ocr-theme
18 printf "[General]\ntype=color\ncolor=#1d99f3\nbackground=\n" > $out/share/sddm/themes/breeze-ocr-theme/theme.conf
19 '';
20 };
21 in
22 {
23 imports = [ ./common/user-account.nix ];
24 services.xserver.enable = true;
25 services.xserver.displayManager.sddm.enable = true;
26 services.xserver.displayManager.sddm.theme = "breeze-ocr-theme";
27 services.xserver.desktopManager.plasma5.enable = true;
28 services.xserver.desktopManager.default = "plasma5";
29 virtualisation.memorySize = 1024;
30 environment.systemPackages = [ sddm_theme ];
31
32 # fontconfig-penultimate-0.3.3 -> 0.3.4 broke OCR apparently, but no idea why.
33 nixpkgs.config.packageOverrides = superPkgs: {
34 fontconfig-penultimate = superPkgs.fontconfig-penultimate.override {
35 version = "0.3.3";
36 sha256 = "1z76jbkb0nhf4w7fy647yyayqr4q02fgk6w58k0yi700p0m3h4c9";
37 };
38 };
39 };
40
41 enableOCR = true;
42
43 testScript = { nodes, ... }: let
44 user = nodes.machine.config.users.users.alice;
45 xdo = "${pkgs.xdotool}/bin/xdotool";
46 in ''
47 startAll;
48 # Wait for display manager to start
49 $machine->waitForText(qr/${user.description}/);
50 $machine->screenshot("sddm");
51
52 # Log in
53 $machine->sendChars("${user.password}\n");
54 $machine->waitForFile("/home/alice/.Xauthority");
55 $machine->succeed("xauth merge ~alice/.Xauthority");
56
57 $machine->waitUntilSucceeds("pgrep plasmashell");
58 $machine->waitForWindow("^Desktop ");
59
60 # Check that logging in has given the user ownership of devices.
61 $machine->succeed("getfacl /dev/snd/timer | grep -q alice");
62
63 $machine->execute("su - alice -c 'DISPLAY=:0.0 dolphin &'");
64 $machine->waitForWindow(" Dolphin");
65
66 $machine->execute("su - alice -c 'DISPLAY=:0.0 konsole &'");
67 $machine->waitForWindow("Konsole");
68
69 $machine->execute("su - alice -c 'DISPLAY=:0.0 systemsettings5 &'");
70 $machine->waitForWindow("Settings");
71
72 $machine->execute("${xdo} key Alt+F1 sleep 10");
73 $machine->screenshot("screen");
74 '';
75})