aboutsummaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
-rw-r--r--nixos.nix62
-rw-r--r--test/configuration.nix18
-rw-r--r--test/test.py4
3 files changed, 59 insertions, 25 deletions
diff --git a/nixos.nix b/nixos.nix
index 307355b2..25eb777a 100644
--- a/nixos.nix
+++ b/nixos.nix
@@ -9,6 +9,7 @@ packages:
let
inherit (lib)
lists
+ attrsets
mkMerge
mkIf
mapAttrs
@@ -231,25 +232,48 @@ in
{
useUserPackages = false; # prevent users.users entries from being added
- users = mkMerge (
- foldlAttrs (
- acc: _: fid:
- acc
- ++ foldlAttrs (
- acc': _: app:
- acc'
- ++ [
- {
- ${getsubname fid app.identity} = mkMerge [
- cfg.extraHomeConfig
- app.extraConfig
- { home.packages = app.packages; }
- ];
- }
- ]
- ) [ { ${getsubname fid 0} = cfg.extraHomeConfig; } ] cfg.apps
- ) [ privPackages ] cfg.users
- );
+ users =
+ mkMerge
+ (foldlAttrs
+ (
+ acc: _: fid:
+ foldlAttrs
+ (
+ acc: _: app:
+ (
+ let
+ key = getsubname fid app.identity;
+ in
+ {
+ usernames = acc.usernames // {
+ ${key} = true;
+ };
+ merge = acc.merge ++ [
+ {
+ ${key} = mkMerge (
+ [
+ app.extraConfig
+ { home.packages = app.packages; }
+ ]
+ ++ lib.optional (!attrsets.hasAttrByPath [ key ] acc.usernames) cfg.extraHomeConfig
+ );
+ }
+ ];
+ }
+ )
+ )
+ {
+ inherit (acc) usernames;
+ merge = acc.merge ++ [ { ${getsubname fid 0} = cfg.extraHomeConfig; } ];
+ }
+ cfg.apps
+ )
+ {
+ usernames = { };
+ merge = [ privPackages ];
+ }
+ cfg.users
+ ).merge;
};
users =
diff --git a/test/configuration.nix b/test/configuration.nix
index 0bee0b2e..4bd1ea55 100644
--- a/test/configuration.nix
+++ b/test/configuration.nix
@@ -95,14 +95,23 @@
stateDir = "/var/lib/fortify";
users.alice = 0;
- extraHomeConfig = {
- home.stateVersion = "23.05";
- };
+ extraHomeConfig =
+ { config, ... }:
+ {
+ # To test merge deduplication:
+ options._fortify.stateVersion = lib.mkOption { type = lib.types.str; };
+
+ config = {
+ home = { inherit (config._fortify) stateVersion; };
+ _fortify.stateVersion = "23.05";
+ };
+ };
apps = {
"cat.gensokyo.extern.foot.noEnablements" = {
name = "ne-foot";
identity = 1;
+ shareUid = true;
verbose = true;
share = pkgs.foot;
packages = with pkgs; [
@@ -130,7 +139,8 @@
"cat.gensokyo.extern.Alacritty.x11" = {
name = "x11-alacritty";
- identity = 3;
+ identity = 1;
+ shareUid = true;
verbose = true;
share = pkgs.alacritty;
packages = with pkgs; [
diff --git a/test/test.py b/test/test.py
index b912d6ef..4b67b6fd 100644
--- a/test/test.py
+++ b/test/test.py
@@ -206,9 +206,9 @@ machine.wait_until_fails("pgrep foot", timeout=5)
# Test XWayland (foot does not support X):
swaymsg("exec x11-alacritty")
-wait_for_window(f"u0_a{aid(2)}@machine")
+wait_for_window(f"u0_a{aid(0)}@machine")
machine.send_chars("clear; glinfo && touch /tmp/x11-ok\n")
-machine.wait_for_file(tmpdir_path(2, "x11-ok"), timeout=15)
+machine.wait_for_file(tmpdir_path(0, "x11-ok"), timeout=15)
collect_state_ui("alacritty_x11")
check_state("x11-alacritty", 2)
machine.send_chars("exit\n")