diff options
| author | Daiderd Jordan <daiderd@gmail.com> | 2020-02-11 16:41:40 +0100 |
|---|---|---|
| committer | Daiderd Jordan <daiderd@gmail.com> | 2020-02-11 16:41:40 +0100 |
| commit | 3d50598ae007b175924344992cfcd41366e1bf57 (patch) | |
| tree | 0bdbed3f4a2fb87bbf7109d2c085089c93edd79f /modules | |
| parent | 590e9c872a850e970f9b5ba1d2428ec030fb7455 (diff) | |
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
Diffstat (limited to 'modules')
| -rw-r--r-- | modules/users/default.nix | 24 |
1 files changed, 22 insertions, 2 deletions
diff --git a/modules/users/default.nix b/modules/users/default.nix index e791a49..6605a28 100644 --- a/modules/users/default.nix +++ b/modules/users/default.nix @@ -9,12 +9,17 @@ let user = import ./user.nix; toArguments = concatMapStringsSep " " (v: "'${v}'"); + toGID = v: { "${toString v.gid}" = v.name; }; + toUID = v: { "${toString v.uid}" = v.name; }; isCreated = list: name: elem name list; 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); - createdUsers = mapAttrsToList (n: v: v) (filterAttrs (n: v: isCreated cfg.knownUsers v.name) cfg.users); + gids = mapAttrsToList (n: toGID) (filterAttrs (n: v: isCreated cfg.knownGroups v.name) cfg.groups); + 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; deletedUsers = filter (n: isDeleted cfg.users n) cfg.knownUsers; @@ -55,6 +60,18 @@ in 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 { internal = true; type = types.bool; @@ -65,6 +82,9 @@ in config = { + users.gids = mkMerge gids; + users.uids = mkMerge uids; + system.activationScripts.groups.text = mkIf (cfg.knownGroups != []) '' echo "setting up groups..." >&2 |
