common.nix

 1{
 2  config,
 3  lib,
 4  ...
 5}: let
 6  cfg = config.test-support;
 7in {
 8  options.test-support = with lib; {
 9    user = mkOption {
10      default = "alice";
11      type = types.str;
12    };
13    desktop-environment = mkOption {
14      default = "icewm";
15      type = types.enum ["icewm"];
16    };
17  };
18
19  config = let
20    de = cfg.desktop-environment;
21    displayManager =
22      if de == "icewm"
23      then "lightdm"
24      else throw "unreachable";
25    windowManager =
26      if de == "icewm"
27      then "icewm"
28      else throw "unreachable";
29  in {
30    virtualisation.memorySize = lib.mkDefault 2000; # 2gb
31    services.displayManager.autoLogin.enable = true;
32    services.displayManager.autoLogin.user = "alice";
33    services.displayManager.defaultSession =
34      if de == "icewm"
35      then "none+icewm"
36      else null;
37
38    services.xserver.enable = true;
39    services.xserver.windowManager.${windowManager}.enable = true;
40    services.xserver.displayManager.${displayManager}.enable = true;
41
42    environment.sessionVariables = {
43      "ZED_ALLOW_EMULATED_GPU" = 1;
44    };
45
46    users.users.${cfg.user} = {
47      createHome = true;
48      home = "/home/${cfg.user}";
49      group = "users";
50      isNormalUser = true;
51      password = "password";
52    };
53  };
54}