Create setup-user command
This commit is contained in:
168
bin/azw-setup-user
Executable file
168
bin/azw-setup-user
Executable file
@@ -0,0 +1,168 @@
|
||||
#!/usr/bin/env zsh
|
||||
# vi: set ft=zsh tw=80 ts=2
|
||||
|
||||
function getExecPrerequisites() {
|
||||
cmds+=(
|
||||
[launchctl]=''
|
||||
[git]=''
|
||||
[mkdir]=''
|
||||
[chmod]=''
|
||||
[]=''
|
||||
)
|
||||
}
|
||||
|
||||
function hideFolders() {
|
||||
chflags hidden ${HOME}/bin
|
||||
}
|
||||
|
||||
function checkExecPrerequisites() {
|
||||
local -A cmds
|
||||
getExecPrerequisites || return
|
||||
checkCommands -m 'This script needs %1$s to work. Please install and retry.' ${(k)cmds} || return
|
||||
}
|
||||
|
||||
function configureInstallPrefix() {
|
||||
local dirPath= desc=
|
||||
for dirPath desc in ${homebrew_prefix} 'Creating install prefix' ${homebrew_directory} 'Creating Homebrew directory'; do
|
||||
if [[ ! -d ${dirPath} ]]; then
|
||||
indicateActivity -- ${desc} createDirAndLogOnFailure ${dirPath}
|
||||
fi
|
||||
done
|
||||
}
|
||||
|
||||
function createDirAndLogOnFailure() {
|
||||
local dirPath=$1
|
||||
mkdir -p ${dirPath} 2> /dev/null || {
|
||||
loptty -- -e 'Could not create directory' -e $dirPath
|
||||
return 10
|
||||
}
|
||||
chmod 744 ${dirPath}
|
||||
}
|
||||
|
||||
function downloadHomebrew() {
|
||||
local git_homebrew_remote=`getDefaultGitHomebrewURL`
|
||||
pushd -q ${homebrew_directory} || return 10
|
||||
test -d ".git" && return
|
||||
git init -q
|
||||
git config remote.origin.url "${git_homebrew_remote}"
|
||||
git config remote.origin.fetch '+refs/heads/*:refs/remotes/origin/*'
|
||||
git config core.autocrlf false
|
||||
git config --replace-all homebrew.analyticsmessage false
|
||||
git config --replace-all homebrew.caskanalyticsmessage false
|
||||
git fetch --quiet --force origin > /dev/null
|
||||
git fetch --quiet --force --tags origin > /dev/null
|
||||
git reset --hard origin/master
|
||||
popd -q
|
||||
}
|
||||
|
||||
function createBrewCallerScript() {
|
||||
local cmdPath=${HOME}/bin/brew
|
||||
local brewPath=${homebrew_directory}/bin/brew
|
||||
[[ -f ${cmdPath} ]] && rm ${cmdPath}
|
||||
mkdir -p ${cmdPath:h}
|
||||
cat <<- BREWCALLER > ${cmdPath}
|
||||
#!/usr/bin/env zsh
|
||||
export HOMEBREW_CASK_OPTS="--no-quarantine \${HOMEBREW_CASK_OPTS}"
|
||||
export HOMEBREW_NO_AUTO_UPDATE=1
|
||||
export HOMEBREW_NO_ANALYTICS=1
|
||||
export HOMEBREW_NO_ANALYTICS_THIS_RUN=1
|
||||
export HOMEBREW_NO_ANALYTICS_MESSAGE_OUTPUT=1
|
||||
"${brewPath}" "\$@"
|
||||
BREWCALLER
|
||||
chown $(id -un):$(id -gn) ${cmdPath}
|
||||
chmod u=rwx,go=r ${cmdPath}
|
||||
}
|
||||
|
||||
function createBrewPeriodicScript() {
|
||||
local brewCallerPath=${HOME}/bin/brew
|
||||
local cmdPath=${HOME}/bin/brew-periodic
|
||||
[[ -f ${cmdPath} ]] && rm ${cmdPath}
|
||||
mkdir -p ${cmdPath:h}
|
||||
cat <<- BREWCALLER > ${cmdPath}
|
||||
#!/usr/bin/env zsh
|
||||
local brew='${brewCallerPath}'
|
||||
\$brew update
|
||||
\$brew upgrade --greedy
|
||||
\$brew cleanup
|
||||
BREWCALLER
|
||||
chown $(id -un):$(id -gn) ${cmdPath}
|
||||
chmod u=rwx,go=r ${cmdPath}
|
||||
}
|
||||
|
||||
function updateBrew() {
|
||||
local brewPath=${homebrew_directory}/bin/brew
|
||||
${brewPath} update --force --quiet
|
||||
chmod go-w "${homebrew_directory}/share/zsh"
|
||||
}
|
||||
|
||||
function createLaunchDaemonsPlist() {
|
||||
local uid=`id -u`
|
||||
local serviceName="de.astzweig.macos.launchagents.$1"
|
||||
local launchAgentPath=${HOME}/Library/LaunchAgents
|
||||
local launcherPath="${launchAgentPath}/${serviceName}.plist"
|
||||
[[ -d ${launchAgentPath} ]] || mkdir ${launchAgentPath} || return
|
||||
[[ -f ${launcherPath} ]] && {
|
||||
launchctl disable gui/${uid}/${serviceName}
|
||||
rm ${launcherPath}
|
||||
}
|
||||
cat <<- LAUNCHDPLIST > ${launcherPath}
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
|
||||
<plist version="1.0">
|
||||
<dict>
|
||||
<key>Label</key>
|
||||
<string>${serviceName}</string>
|
||||
<key>ProgramArguments</key>
|
||||
<array>
|
||||
<string>${HOME}/bin/brew-periodic</string>
|
||||
</array>
|
||||
<key>StartInterval</key>
|
||||
<integer>1800</integer>
|
||||
</dict>
|
||||
</plist>
|
||||
LAUNCHDPLIST
|
||||
chmod u=rw,go=r ${launcherPath}
|
||||
launchctl enable gui/${uid}/${serviceName} &> /dev/null
|
||||
launchctl bootstrap gui/${uid}/ ${launcherPath} &> /dev/null || true
|
||||
}
|
||||
|
||||
function installHomebrewUpdater() {
|
||||
createLaunchDaemonsPlist brew-updater
|
||||
}
|
||||
|
||||
function getDefaultHomebrewPrefix() {
|
||||
print -- ${HOMEBREW_PREFIX:-${HOME}/Library/Application Support}
|
||||
}
|
||||
|
||||
function getHomebrewDirectoryPath() {
|
||||
print -- ${homebrew_prefix:-$(getDefaultHomebrewPrefix)}/Homebrew
|
||||
}
|
||||
|
||||
function configure_folders() {
|
||||
local dirPath
|
||||
for dirPath in ${HOME}/bin ${HOME}/.vim/{backups,swaps}; do
|
||||
[[ ! -d ${dirPath} ]] && indicateActivity -- "Creating ${dirPath}" mkdir ${dirPath}
|
||||
done
|
||||
indicateActivity -- 'Hide folders' hideFolders
|
||||
}
|
||||
|
||||
function main() {
|
||||
lop -y h1 -- -i 'Setup User'
|
||||
[[ $(id -u) -eq 0 ]] && { loptty -- -e 'Command must not be run as root.' -e $dirPath; return 16 }
|
||||
configure_folders
|
||||
local homebrew_prefix=`getDefaultHomebrewPrefix`
|
||||
local homebrew_directory=`getHomebrewDirectoryPath`
|
||||
checkExecPrerequisites || return 17
|
||||
configureInstallPrefix || return 10
|
||||
indicateActivity -- 'Downloading Homebrew' downloadHomebrew || return 11
|
||||
indicateActivity -- 'Create brew caller script' createBrewCallerScript || return 12
|
||||
indicateActivity -- 'Create brew periodic script' createBrewPeriodicScript || return 13
|
||||
indicateActivity -- 'Update brew' updateBrew || return 14
|
||||
indicateActivity -- 'Install Homebrew updater' installHomebrewUpdater || return 15
|
||||
}
|
||||
|
||||
if [[ "${ZSH_EVAL_CONTEXT}" == toplevel || "${ZSH_EVAL_CONTEXT}" == cmdarg ]]; then
|
||||
_DIR="${0:A:h}"
|
||||
source autoload-zshlib
|
||||
main "$@"
|
||||
fi
|
||||
Reference in New Issue
Block a user