mirror of
https://github.com/LnL7/nix-darwin.git
synced 2025-03-31 04:04:45 +00:00
users: ensure uniqueness of gid/uid entries
Instead of a cryptic error during activation conflicting ids are now caught during evaluation. error: The option `users.uids.30001' has conflicting definitions
This commit is contained in:
parent
590e9c872a
commit
3d50598ae0
1 changed files with 22 additions and 2 deletions
|
@ -9,12 +9,17 @@ let
|
||||||
user = import ./user.nix;
|
user = import ./user.nix;
|
||||||
|
|
||||||
toArguments = concatMapStringsSep " " (v: "'${v}'");
|
toArguments = concatMapStringsSep " " (v: "'${v}'");
|
||||||
|
toGID = v: { "${toString v.gid}" = v.name; };
|
||||||
|
toUID = v: { "${toString v.uid}" = v.name; };
|
||||||
|
|
||||||
isCreated = list: name: elem name list;
|
isCreated = list: name: elem name list;
|
||||||
isDeleted = attrs: name: ! elem name (mapAttrsToList (n: v: v.name) attrs);
|
isDeleted = attrs: name: ! elem name (mapAttrsToList (n: v: v.name) attrs);
|
||||||
|
|
||||||
createdGroups = mapAttrsToList (n: v: v) (filterAttrs (n: v: isCreated cfg.knownGroups v.name) cfg.groups);
|
gids = mapAttrsToList (n: toGID) (filterAttrs (n: v: isCreated cfg.knownGroups v.name) cfg.groups);
|
||||||
createdUsers = mapAttrsToList (n: v: v) (filterAttrs (n: v: isCreated cfg.knownUsers v.name) cfg.users);
|
uids = mapAttrsToList (n: toUID) (filterAttrs (n: v: isCreated cfg.knownUsers v.name) cfg.users);
|
||||||
|
|
||||||
|
createdGroups = mapAttrsToList (n: v: cfg.groups."${v}") cfg.gids;
|
||||||
|
createdUsers = mapAttrsToList (n: v: cfg.users."${v}") cfg.uids;
|
||||||
deletedGroups = filter (n: isDeleted cfg.groups n) cfg.knownGroups;
|
deletedGroups = filter (n: isDeleted cfg.groups n) cfg.knownGroups;
|
||||||
deletedUsers = filter (n: isDeleted cfg.users n) cfg.knownUsers;
|
deletedUsers = filter (n: isDeleted cfg.users n) cfg.knownUsers;
|
||||||
|
|
||||||
|
@ -55,6 +60,18 @@ in
|
||||||
description = "Configuration for users.";
|
description = "Configuration for users.";
|
||||||
};
|
};
|
||||||
|
|
||||||
|
users.gids = mkOption {
|
||||||
|
internal = true;
|
||||||
|
type = types.attrsOf types.str;
|
||||||
|
default = {};
|
||||||
|
};
|
||||||
|
|
||||||
|
users.uids = mkOption {
|
||||||
|
internal = true;
|
||||||
|
type = types.attrsOf types.str;
|
||||||
|
default = {};
|
||||||
|
};
|
||||||
|
|
||||||
users.forceRecreate = mkOption {
|
users.forceRecreate = mkOption {
|
||||||
internal = true;
|
internal = true;
|
||||||
type = types.bool;
|
type = types.bool;
|
||||||
|
@ -65,6 +82,9 @@ in
|
||||||
|
|
||||||
config = {
|
config = {
|
||||||
|
|
||||||
|
users.gids = mkMerge gids;
|
||||||
|
users.uids = mkMerge uids;
|
||||||
|
|
||||||
system.activationScripts.groups.text = mkIf (cfg.knownGroups != []) ''
|
system.activationScripts.groups.text = mkIf (cfg.knownGroups != []) ''
|
||||||
echo "setting up groups..." >&2
|
echo "setting up groups..." >&2
|
||||||
|
|
||||||
|
|
Loading…
Add table
Reference in a new issue