- darwin installer: delete hardware report, not necessary - moves os-specific code from the darwin installer to to `poly_*` functions - adds profile.d support to the profile targets, which automatically handles many distros which don't have a /etc/bashrc but do have an /etc/profile.d - /bin/bash -> /usr/bin/env bash - document why each excluded shellcheck check is excluded - rename the multi-user to Daemon-based
		
			
				
	
	
		
			144 lines
		
	
	
	
		
			3.2 KiB
		
	
	
	
		
			Bash
		
	
	
	
	
	
			
		
		
	
	
			144 lines
		
	
	
	
		
			3.2 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_configure_nix_daemon_service() {
 | |
|     _sudo "to set up the nix-daemon as a LaunchDaemon" \
 | |
|           ln -sfn "/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}"
 | |
| }
 |