![Travis A. Everett](/assets/img/avatar_default.png)
Some of the changes in #3788 to support non-systemd Nix installs don't appear to be aware that the darwin installer exists, which resulted in some skipped steps and inappropriate instructions.
152 lines
3.3 KiB
Bash
152 lines
3.3 KiB
Bash
#!/usr/bin/env bash
|
|
|
|
set -eu
|
|
set -o pipefail
|
|
|
|
readonly PLIST_DEST=/Library/LaunchDaemons/org.nixos.nix-daemon.plist
|
|
|
|
dsclattr() {
|
|
/usr/bin/dscl . -read "$1" \
|
|
| awk "/$2/ { print \$2 }"
|
|
}
|
|
|
|
poly_validate_assumptions() {
|
|
if [ "$(uname -s)" != "Darwin" ]; then
|
|
failure "This script is for use with macOS!"
|
|
fi
|
|
}
|
|
|
|
poly_service_installed_check() {
|
|
[ -e "$PLIST_DEST" ]
|
|
}
|
|
|
|
poly_service_uninstall_directions() {
|
|
cat <<EOF
|
|
$1. Delete $PLIST_DEST
|
|
|
|
sudo launchctl unload $PLIST_DEST
|
|
sudo rm $PLIST_DEST
|
|
|
|
EOF
|
|
}
|
|
|
|
poly_service_setup_note() {
|
|
cat <<EOF
|
|
- load and start a LaunchDaemon (at $PLIST_DEST) for nix-daemon
|
|
|
|
EOF
|
|
}
|
|
|
|
poly_extra_try_me_commands(){
|
|
:
|
|
}
|
|
poly_extra_setup_instructions(){
|
|
:
|
|
}
|
|
|
|
poly_configure_nix_daemon_service() {
|
|
_sudo "to set up the nix-daemon as a LaunchDaemon" \
|
|
cp -f "/nix/var/nix/profiles/default$PLIST_DEST" "$PLIST_DEST"
|
|
|
|
_sudo "to load the LaunchDaemon plist for nix-daemon" \
|
|
launchctl load /Library/LaunchDaemons/org.nixos.nix-daemon.plist
|
|
|
|
_sudo "to start the nix-daemon" \
|
|
launchctl start org.nixos.nix-daemon
|
|
|
|
}
|
|
|
|
poly_group_exists() {
|
|
/usr/bin/dscl . -read "/Groups/$1" > /dev/null 2>&1
|
|
}
|
|
|
|
poly_group_id_get() {
|
|
dsclattr "/Groups/$1" "PrimaryGroupID"
|
|
}
|
|
|
|
poly_create_build_group() {
|
|
_sudo "Create the Nix build group, $NIX_BUILD_GROUP_NAME" \
|
|
/usr/sbin/dseditgroup -o create \
|
|
-r "Nix build group for nix-daemon" \
|
|
-i "$NIX_BUILD_GROUP_ID" \
|
|
"$NIX_BUILD_GROUP_NAME" >&2
|
|
}
|
|
|
|
poly_user_exists() {
|
|
/usr/bin/dscl . -read "/Users/$1" > /dev/null 2>&1
|
|
}
|
|
|
|
poly_user_id_get() {
|
|
dsclattr "/Users/$1" "UniqueID"
|
|
}
|
|
|
|
poly_user_hidden_get() {
|
|
dsclattr "/Users/$1" "IsHidden"
|
|
}
|
|
|
|
poly_user_hidden_set() {
|
|
_sudo "in order to make $1 a hidden user" \
|
|
/usr/bin/dscl . -create "/Users/$1" "IsHidden" "1"
|
|
}
|
|
|
|
poly_user_home_get() {
|
|
dsclattr "/Users/$1" "NFSHomeDirectory"
|
|
}
|
|
|
|
poly_user_home_set() {
|
|
_sudo "in order to give $1 a safe home directory" \
|
|
/usr/bin/dscl . -create "/Users/$1" "NFSHomeDirectory" "$2"
|
|
}
|
|
|
|
poly_user_note_get() {
|
|
dsclattr "/Users/$1" "RealName"
|
|
}
|
|
|
|
poly_user_note_set() {
|
|
_sudo "in order to give $username a useful note" \
|
|
/usr/bin/dscl . -create "/Users/$1" "RealName" "$2"
|
|
}
|
|
|
|
poly_user_shell_get() {
|
|
dsclattr "/Users/$1" "UserShell"
|
|
}
|
|
|
|
poly_user_shell_set() {
|
|
_sudo "in order to give $1 a safe home directory" \
|
|
/usr/bin/dscl . -create "/Users/$1" "UserShell" "$2"
|
|
}
|
|
|
|
poly_user_in_group_check() {
|
|
username=$1
|
|
group=$2
|
|
dseditgroup -o checkmember -m "$username" "$group" > /dev/null 2>&1
|
|
}
|
|
|
|
poly_user_in_group_set() {
|
|
username=$1
|
|
group=$2
|
|
|
|
_sudo "Add $username to the $group group"\
|
|
/usr/sbin/dseditgroup -o edit -t user \
|
|
-a "$username" "$group"
|
|
}
|
|
|
|
poly_user_primary_group_get() {
|
|
dsclattr "/Users/$1" "PrimaryGroupID"
|
|
}
|
|
|
|
poly_user_primary_group_set() {
|
|
_sudo "to let the nix daemon use this user for builds (this might seem redundant, but there are two concepts of group membership)" \
|
|
/usr/bin/dscl . -create "/Users/$1" "PrimaryGroupID" "$2"
|
|
}
|
|
|
|
poly_create_build_user() {
|
|
username=$1
|
|
uid=$2
|
|
builder_num=$3
|
|
|
|
_sudo "Creating the Nix build user (#$builder_num), $username" \
|
|
/usr/bin/dscl . create "/Users/$username" \
|
|
UniqueID "${uid}"
|
|
}
|