summaryrefslogtreecommitdiff
path: root/modules/users/default.nix
diff options
context:
space:
mode:
authorDaiderd Jordan <daiderd@gmail.com>2018-01-14 13:26:18 +0100
committerDaiderd Jordan <daiderd@gmail.com>2018-01-14 13:26:18 +0100
commitb1645201f19351412ebdee80178c0cb8f702306c (patch)
tree12e51e40958343fa0e6204ff97e8f44fd3fac4c9 /modules/users/default.nix
parentf0e4aabb78ecd9b60385f67259f3cfd7ee9ae31c (diff)
users: add support for group members
Unlike user options this is updated if the group already exists.
Diffstat (limited to 'modules/users/default.nix')
-rw-r--r--modules/users/default.nix15
1 files changed, 12 insertions, 3 deletions
diff --git a/modules/users/default.nix b/modules/users/default.nix
index fb43265..0a4c1de 100644
--- a/modules/users/default.nix
+++ b/modules/users/default.nix
@@ -8,6 +8,8 @@ let
group = import ./group.nix;
user = import ./user.nix;
+ toArguments = concatMapStringsSep " " (v: "'${v}'");
+
isCreated = list: name: elem name list;
isDeleted = attrs: name: ! elem name (mapAttrsToList (n: v: v.name) attrs);
@@ -56,10 +58,17 @@ in
echo "creating group ${v.name}..." >&2
dscl . -create '/Groups/${v.name}' PrimaryGroupID ${toString v.gid}
dscl . -create '/Groups/${v.name}' RealName '${v.description}'
- else
- if [ "$g" -ne ${toString v.gid} ]; then
- echo "warning: existing group '${v.name}' has unexpected gid $g, skipping..." >&2
+ g=${toString v.gid}
+ fi
+
+ if [ "$g" -eq ${toString v.gid} ]; then
+ g=$(dscl . -read '/Groups/${v.name}' GroupMembership 2> /dev/null) || true
+ if [ "$g" != 'GroupMembership: ${concatStringsSep " " v.members}' ]; then
+ echo "updating group members ${v.name}..." >&2
+ dscl . -create '/Groups/${v.name}' GroupMembership ${toArguments v.members}
fi
+ else
+ echo "warning: existing group '${v.name}' has unexpected gid $g, skipping..." >&2
fi
'') createdGroups}