Files
dotwryn/setup/packages/installer.brew.zsh
T

77 lines
2.0 KiB
Bash
Raw Normal View History

2026-09-21 06:48:49 -06:00
#####################################################################
setup.packages.installer.brew.setup-package-manager() {
command -v brew &>/dev/null && return 0
# an already-installed homebrew still isn't on PATH in a fresh login
# shell, so adopt it before concluding it needs installing
local brew_path
for brew_path in /opt/homebrew/bin/brew /usr/local/bin/brew
do
[[ -x "${brew_path}" ]] || continue
eval "$("${brew_path}" shellenv)"
return 0
done
unset brew_path
: \
&& /bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)" \
&& eval "$(/opt/homebrew/bin/brew shellenv 2>/dev/null || /usr/local/bin/brew shellenv 2>/dev/null)" \
|| echo.error 'failed to install homebrew' \
|| return 1 \
;
}
setup.packages.installer.brew.update-repositories() { brew update && brew upgrade; }
setup.packages.installer.brew.list-installed() { # targets needing "brew install --cask" are carried through this whole pipeline as "cask:name"
brew list --formula 2>/dev/null
brew list --cask 2>/dev/null | sed 's/^/cask:/'
}
setup.packages.installer.brew.install-batch() {
local -a formulae casks
local target
for target in "${@}"
do
case "${target}" in
( cask:* ) casks+=("${target#cask:}") ;;
( * ) formulae+=("${target}") ;;
esac
done
unset target
if [[ "${#formulae[@]}" -gt 0 ]]
then
yes | brew install "${formulae[@]}" || return 1
fi
if [[ "${#casks[@]}" -gt 0 ]]
then
yes | brew install --cask "${casks[@]}" || return 2
fi
}
setup.packages.installer.brew.install-managed() {
local target="${1}"
local -a cask_flag
if [[ "${target}" == cask:* ]]
then
target="${target#cask:}"
cask_flag=(--cask)
fi
if brew list "${cask_flag[@]}" --versions "${target}" &>/dev/null
then
echo.success "found '${target}'"
return 0
fi
: \
&& echo.status "installing '${target}'" \
&& yes | brew install "${cask_flag[@]}" "${target}" \
&& echo.success "'${target}' installed" \
|| echo.error "failed to install '${target}'" \
;
}