hydrate ${config.system.build.nixos-rebuild}/bin/nixos-rebuild ${cfg.operation}
sync
while read user;do
- remove_arg=-r
- if [[ "$(userenv_query "$user" .otherPackagesAction)" == keep ]];then
- remove_arg=
- fi
+ configured_action=$(userenv_query "$user" .otherPackagesAction)
+ action=
+ case "$configured_action" in
+ keep) action=-i;;
+ remove) action=-ir;;
+ set-remove) action=--set;;
+ *) die "Unexpected otherPackagesAction $configured_action for user $user"
+ esac
hydrate /run/wrappers/bin/sudo -u "$user" \
- ${pkgs.nix}/bin/nix-env -f '<nixpkgs>' $remove_arg -iA "$(userenv_query "$user" .package)"
+ ${pkgs.nix}/bin/nix-env -f '<nixpkgs>' "$action" -A "$(userenv_query "$user" .package)"
sync
done < <( config_query '.userEnvironments | keys []' )
''}
otherPackagesAction = mkOption {
type = types.enum [
"remove"
+ "set-remove"
"keep"
];
default = "remove";
through your one entire-environment <literal>package</literal>.
This keeps your environment declarative and ensures that all
packages receive regular updates.
+
+ "set-remove" is mostly equilavent to "remove", but uses
+ nix-env --set, resulting in a profile without a manifest.nix.
'';
};
};