mirror of
https://github.com/LnL7/nix-darwin.git
synced 2024-12-14 11:57:34 +00:00
users: allow home
to be managed by macOS
This commit is contained in:
parent
c9af5c2d13
commit
bd161d61d6
3 changed files with 24 additions and 5 deletions
|
@ -236,7 +236,13 @@ in
|
|||
|
||||
requireFDA ${name} "created"
|
||||
|
||||
sysadminctl -addUser ${lib.escapeShellArgs ([ v.name "-UID" v.uid "-GID" v.gid ] ++ (lib.optionals (v.description != null) [ "-fullName" v.description ]) ++ [ "-home" v.home "-shell" (shellPath v.shell) ])} 2> /dev/null
|
||||
sysadminctl -addUser ${lib.escapeShellArgs ([
|
||||
v.name
|
||||
"-UID" v.uid
|
||||
"-GID" v.gid ]
|
||||
++ (lib.optionals (v.description != null) [ "-fullName" v.description ])
|
||||
++ (lib.optionals (v.home != null) [ "-home" v.home ])
|
||||
++ [ "-shell" (shellPath v.shell) ])} 2> /dev/null
|
||||
|
||||
# We need to check as `sysadminctl -addUser` still exits with exit code 0 when there's an error
|
||||
if ! id ${name} &> /dev/null; then
|
||||
|
@ -245,7 +251,10 @@ in
|
|||
fi
|
||||
|
||||
dscl . -create ${dsclUser} IsHidden ${if v.isHidden then "1" else "0"}
|
||||
${optionalString v.createHome "createhomedir -cu ${name}"}
|
||||
|
||||
# `sysadminctl -addUser` won't create the home directory if we use the `-home`
|
||||
# flag so we need to do it ourselves
|
||||
${optionalString (v.home != null && v.createHome) "createhomedir -cu ${name} > /dev/null"}
|
||||
fi
|
||||
|
||||
# Update properties on known users to keep them inline with configuration
|
||||
|
|
|
@ -53,9 +53,17 @@
|
|||
# };
|
||||
|
||||
home = mkOption {
|
||||
type = types.path;
|
||||
default = "/var/empty";
|
||||
description = "The user's home directory.";
|
||||
type = types.nullOr types.path;
|
||||
default = null;
|
||||
description = ''
|
||||
The user's home directory. This defaults to `null`.
|
||||
|
||||
When this is set to `null`, the value is managed by macOS instead of
|
||||
`nix-darwin`. This means if the user has not been created yet,
|
||||
`sysadminctl` will be called without the `-home` flag which means the
|
||||
user will have a default home directory of `/Users/<name>` which will
|
||||
be created by `sysadminctl`.
|
||||
'';
|
||||
};
|
||||
|
||||
createHome = mkOption {
|
||||
|
|
|
@ -20,6 +20,7 @@
|
|||
|
||||
users.users."created.user".uid = 42001;
|
||||
users.users."created.user".description = null;
|
||||
users.users."created.user".home = null;
|
||||
|
||||
users.users."unknown.user".uid = 42002;
|
||||
|
||||
|
@ -49,6 +50,7 @@
|
|||
grep "sysadminctl -addUser ${lib.escapeShellArgs [ "foo" "-UID" 42000 "-GID" 42000 "-fullName" "Foo user" "-home" "/Users/foo" "-shell" "/run/current-system/sw/bin/bash" ]}" ${config.out}/activate
|
||||
grep "createhomedir -cu ${lib.escapeShellArg "foo"}" ${config.out}/activate
|
||||
grep "sysadminctl -addUser ${lib.escapeShellArgs [ "created.user" "-UID" 42001 ]} .* ${lib.escapeShellArgs [ "-shell" "/sbin/nologin" ]}" ${config.out}/activate
|
||||
(! grep "sysadminctl -addUser ${lib.escapeShellArg "created.user"} .* -home" ${config.out}/activate)
|
||||
(! grep "deleteUser ${lib.escapeShellArg "created.user"}" ${config.out}/activate)
|
||||
(! grep "dscl . -delete ${lib.escapeShellArg "/Groups/created.user"}" ${config.out}/activate)
|
||||
|
||||
|
|
Loading…
Reference in a new issue