nix: deduplicate home-manager merging
All checks were successful
Test / Create distribution (push) Successful in 44s
Test / Sandbox (push) Successful in 55s
Test / Sandbox (race detector) (push) Successful in 53s
Test / Fortify (race detector) (push) Successful in 50s
Test / Fpkg (push) Successful in 54s
Test / Fortify (push) Successful in 2m8s
Test / Flake checks (push) Successful in 1m7s
All checks were successful
Test / Create distribution (push) Successful in 44s
Test / Sandbox (push) Successful in 55s
Test / Sandbox (race detector) (push) Successful in 53s
Test / Fortify (race detector) (push) Successful in 50s
Test / Fpkg (push) Successful in 54s
Test / Fortify (push) Successful in 2m8s
Test / Flake checks (push) Successful in 1m7s
This becomes a problem when extraHomeConfig defines nixos module options. Signed-off-by: Ophestra <cat@gensokyo.uk>
This commit is contained in:
parent
9a7c81a44e
commit
bf5772bd8a
62
nixos.nix
62
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 =
|
||||
|
@ -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; [
|
||||
|
@ -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")
|
||||
|
Loading…
x
Reference in New Issue
Block a user