diff --git a/modules/01-set-hostname.sh b/modules/01-set-hostname.sh new file mode 100644 index 0000000..8913292 --- /dev/null +++ b/modules/01-set-hostname.sh @@ -0,0 +1,88 @@ +#!/usr/bin/env zsh +# vi: ft=zsh + +function getQuestionsPrerequisites() { + cmds=( + [systemsetup]='' + ) + requireRootPrivileges +} + +function getExecPrerequisites() { + cmds=( + [osascript]='' + [scutil]='' + [systemsetup]='' + ) +} + +function getQuestions() { + local timezones + timezones="`systemsetup -listtimezones | tail -n +2 | awk '{print $1}' | paste -sd, -`" + questions=( + 'i: hostname=What shall the hostname of this host be?' + 's: timezone=What shall the timezone of this host be? # choose from:'"${timezones};" + ) +} + +function quitSystemPreferences() { + ps -A -o pid,comm | grep "MacOS/System Settings" | awk '{print "kill -9 " $1}' | /bin/sh +} + +function setComputerName() { + scutil --set ComputerName "${hostname}" + scutil --set HostName "${hostname}" + scutil --set LocalHostName "${hostname}" + systemsetup -setcomputername "${hostname}" + systemsetup -setlocalsubnetname "${hostname}" +} + +function configureComputerHostname() { + local currentComputerName="`scutil --get ComputerName`" + if [[ "${currentComputerName}" != "${hostname}" ]]; then + lop -- -i 'Hostname of computer has not been set.' -i "Will set to ${hostname}." + indicateActivity -- 'Set computer name' setComputerName + else + lop -- -i 'Hostname of computer seems to have already been set. Skipping.' -i "Hostname: $currentComputerName" + fi +} + +function configureTimezone(){ + systemsetup -settimezone "${timezone}" >&! /dev/null +} + +function configure_system() { + lop -y h1 -- -i 'Configure System Settings' + indicateActivity -- 'Quitting System Preferences' quitSystemPreferences + configureComputerHostname + indicateActivity -- 'Configuring timezone' configureTimezone +} + +function getUsage() { + local cmdName=$1 text='' + read -r -d '' text <<- USAGE + Usage: + $cmdName show-questions [ ]... + $cmdName [-v] [-d FILE] --hostname NAME --timezone ZONE + + Configure host specific settings. + + Options: + --hostname NAME Set NAME as current host's host name. + --timezone ZONE Set ZONE as current host's timezone [default: Europe/Berlin]. + --noninteractive Run module noninteractively. + -d FILE, --logfile FILE Print log message to logfile instead of stdout. + -v, --verbose Be more verbose. + ---- + $cmdName 0.1.0 + Copyright (C) 2022 Rezart Qelibari, Astzweig GmbH & Co. KG + License EUPL-1.2. There is NO WARRANTY, to the extent permitted by law. + USAGE + print -- ${text} +} + +if [[ "${ZSH_EVAL_CONTEXT}" == toplevel ]]; then + test -f "${ASTZWEIG_MACOS_SYSTEM_LIB}" || { echo 'This module requires macos-system library. Please run again with macos-system library provieded as a path in ASTZWEIG_MACOS_SYSTEM_LIB env variable.'; return 10 } + source "${ASTZWEIG_MACOS_SYSTEM_LIB}" + module_main $0 "$@" +fi diff --git a/modules/01-system-settings.sh b/modules/01-system-settings.sh index 648ef7a..128a305 100755 --- a/modules/01-system-settings.sh +++ b/modules/01-system-settings.sh @@ -2,9 +2,6 @@ # vi: set ft=zsh tw=80 ts=2 function getQuestionsPrerequisites() { - cmds=( - [systemsetup]='' - ) requireRootPrivileges } @@ -21,46 +18,15 @@ function getExecPrerequisites() { ) } -function getQuestions() { - local timezones - timezones="`systemsetup -listtimezones | tail -n +2 | awk '{print $1}' | paste -sd, -`" - questions=( - 'i: hostname=What shall the hostname of this host be?' - 's: timezone=What shall the timezone of this host be? # choose from:'"${timezones};" - ) -} - function quitSystemPreferences() { - indicateActivity -- 'Quitting System Preferences' osascript -e 'tell application "System Preferences" to quit' -} - -function setComputerName() { - scutil --set ComputerName "${hostname}" - scutil --set HostName "${hostname}" - scutil --set LocalHostName "${hostname}" - systemsetup -setcomputername "${hostname}" - systemsetup -setlocalsubnetname "${hostname}" -} - -function configureComputerHostname() { - local currentComputerName="`scutil --get ComputerName`" - if [[ "${currentComputerName}" != "${hostname}" ]]; then - lop -- -i 'Hostname of computer has not been set.' -i "Will set to ${hostname}." - indicateActivity -- 'Set computer name' setComputerName - else - lop -- -i 'Hostname of computer seems to have already been set. Skipping.' -i "Hostname: $currentComputerName" - fi + ps -A -o pid,comm | grep "MacOS/System Settings" | awk '{print "kill -9 " $1}' | /bin/sh } function configureBasicSystem(){ - # Disable the sound effects on boot - nvram SystemAudioVolume=" " - - systemsetup -settimezone "${timezone}" >&! /dev/null systemsetup -setusingnetworktime on >&! /dev/null systemsetup -setnetworktimeserver 'time.apple.com' >&! /dev/null systemsetup -setsleep never >&! /dev/null - systemsetup -setwakeonnetworkaccess off >&! /dev/null + systemsetup -setwakeonnetworkaccess on >&! /dev/null systemsetup -setrestartfreeze on >&! /dev/null systemsetup -f -setremotelogin off >&! /dev/null systemsetup -setremoteappleevents off >&! /dev/null @@ -101,8 +67,7 @@ function configureMacOSFirewall() { function configure_system() { lop -y h1 -- -i 'Configure System Settings' - quitSystemPreferences - configureComputerHostname + indicateActivity -- 'Quitting System Preferences' quitSystemPreferences indicateActivity -- 'Configuring systemsetup and nvram' configureBasicSystem indicateActivity -- 'Configuring power management' configurePowerManagement indicateActivity -- 'Configuring login window' configureLoginWindow @@ -115,13 +80,11 @@ function getUsage() { read -r -d '' text <<- USAGE Usage: $cmdName show-questions [ ]... - $cmdName [-v] [-d FILE] --hostname NAME --timezone ZONE + $cmdName [-v] [-d FILE] - Set energy, basic network and host preferences. + Set energy, network and basic preferences. Options: - --hostname NAME Set NAME as current host's host name. - --timezone ZONE Set ZONE as current host's timezone [default: Europe/Berlin]. -d FILE, --logfile FILE Print log message to logfile instead of stdout. -v, --verbose Be more verbose. ----