mirror of
https://github.com/jimeh/dotfiles.git
synced 2026-02-19 12:26:39 +00:00
Refactor bootstrap-homebrew and bootstrap-caskroom scripts
This commit is contained in:
@@ -1,174 +1,211 @@
|
|||||||
#! /usr/bin/env bash
|
#! /usr/bin/env bash
|
||||||
set -e
|
set -e
|
||||||
|
|
||||||
|
# Settings
|
||||||
|
PACKAGE_LIST_CMD="brew cask list"
|
||||||
|
PACKAGE_INSTALL_CMD="brew cask install"
|
||||||
|
|
||||||
|
|
||||||
|
#
|
||||||
|
# Package list
|
||||||
|
#
|
||||||
|
|
||||||
|
CORE_PKGS=(
|
||||||
|
1password
|
||||||
|
aerial
|
||||||
|
alfred
|
||||||
|
appcleaner
|
||||||
|
bartender
|
||||||
|
betterzip
|
||||||
|
betterzipql
|
||||||
|
emacs-pretest
|
||||||
|
firefox
|
||||||
|
fluid
|
||||||
|
flux
|
||||||
|
google-chrome
|
||||||
|
gpg-suite
|
||||||
|
hammerspoon
|
||||||
|
iina
|
||||||
|
istat-menus
|
||||||
|
iterm2
|
||||||
|
karabiner-elements
|
||||||
|
logitech-gaming-software
|
||||||
|
logitech-options
|
||||||
|
mplayerx
|
||||||
|
osxfuse
|
||||||
|
qlcolorcode
|
||||||
|
qlmarkdown
|
||||||
|
qlstephen
|
||||||
|
resolutionator
|
||||||
|
stay
|
||||||
|
ubersicht
|
||||||
|
vlc
|
||||||
|
)
|
||||||
|
|
||||||
|
WORK_PKGS=(
|
||||||
|
atom
|
||||||
|
bbedit
|
||||||
|
chromedriver
|
||||||
|
cyberduck
|
||||||
|
dash
|
||||||
|
docker-edge
|
||||||
|
github-desktop
|
||||||
|
google-cloud-sdk
|
||||||
|
insomnia
|
||||||
|
java
|
||||||
|
kaleidoscope
|
||||||
|
licecap
|
||||||
|
medis
|
||||||
|
minikube
|
||||||
|
minishift
|
||||||
|
muzzle
|
||||||
|
paw
|
||||||
|
postico
|
||||||
|
postman
|
||||||
|
robo-3t
|
||||||
|
rowanj-gitx
|
||||||
|
sequel-pro
|
||||||
|
slack
|
||||||
|
stride
|
||||||
|
transmit
|
||||||
|
vagrant
|
||||||
|
virtualbox
|
||||||
|
visual-studio-code
|
||||||
|
)
|
||||||
|
|
||||||
|
PERSONAL_PKGS=(
|
||||||
|
4k-video-downloader
|
||||||
|
adium-beta
|
||||||
|
android-file-transfer
|
||||||
|
audio-hijack
|
||||||
|
autodmg
|
||||||
|
bowtie
|
||||||
|
calibre
|
||||||
|
chicken
|
||||||
|
daisydisk
|
||||||
|
deluge
|
||||||
|
discord
|
||||||
|
dropbox
|
||||||
|
ethereum-wallet
|
||||||
|
filebot
|
||||||
|
gog-galaxy
|
||||||
|
google-photos-backup-and-sync
|
||||||
|
hackety-hack
|
||||||
|
handbrake
|
||||||
|
irccloud
|
||||||
|
istumbler
|
||||||
|
keybase
|
||||||
|
little-snitch
|
||||||
|
makemkv
|
||||||
|
messenger
|
||||||
|
micro-snitch
|
||||||
|
mist
|
||||||
|
omnigraffle
|
||||||
|
openemu
|
||||||
|
parallels-desktop
|
||||||
|
peakhour
|
||||||
|
plex-media-player
|
||||||
|
qlimagesize
|
||||||
|
qlprettypatch
|
||||||
|
qlvideo
|
||||||
|
quicklook-csv
|
||||||
|
quicklook-json
|
||||||
|
quicklookapk
|
||||||
|
rclone-browser
|
||||||
|
ring
|
||||||
|
screenhero
|
||||||
|
sixtyforce
|
||||||
|
skyfonts
|
||||||
|
skype
|
||||||
|
spotify
|
||||||
|
suspicious-package
|
||||||
|
teamviewer
|
||||||
|
transmission
|
||||||
|
unetbootin
|
||||||
|
virtualc64
|
||||||
|
viscosity
|
||||||
|
vmware-fusion
|
||||||
|
vnc-viewer
|
||||||
|
wavebox
|
||||||
|
webpquicklook
|
||||||
|
witgui
|
||||||
|
xld
|
||||||
|
yakyak
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
|
#
|
||||||
|
# Main
|
||||||
|
#
|
||||||
|
|
||||||
|
main() {
|
||||||
|
cache_installed_packages
|
||||||
|
|
||||||
|
install_packages "core" "${CORE_PKGS[@]}"
|
||||||
|
|
||||||
|
if [[ " $* " == *" work "* ]]; then
|
||||||
|
install_packages "work" "${WORK_PKGS[@]}"
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [[ " $* " == *" personal "* ]]; then
|
||||||
|
install_packages "personal" "${PERSONAL_PKGS[@]}"
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
#
|
||||||
|
# The rest...
|
||||||
|
#
|
||||||
|
|
||||||
|
INSTALLED_PACKAGES=()
|
||||||
|
|
||||||
|
package_name() {
|
||||||
|
local install_args="$1"
|
||||||
|
local pkg
|
||||||
|
|
||||||
|
pkg="$(echo "$install_args" | awk '{ print $1 }')"
|
||||||
|
[[ "$pkg" == *'/'* ]] && pkg="$(basename "$pkg")"
|
||||||
|
|
||||||
|
echo "$pkg"
|
||||||
|
}
|
||||||
|
|
||||||
|
cache_installed_packages() {
|
||||||
|
if [ ${#INSTALLED_PACKAGES[@]} -eq 0 ]; then
|
||||||
|
echo "--> Getting list of installed packages"
|
||||||
|
mapfile -t INSTALLED_PACKAGES < <($PACKAGE_LIST_CMD)
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
is_package_installed() {
|
||||||
|
local pkg="$1"
|
||||||
|
cache_installed_packages
|
||||||
|
|
||||||
|
for i in "${INSTALLED_PACKAGES[@]}"; do
|
||||||
|
[[ "$pkg" == "$i" ]] && return 0
|
||||||
|
done
|
||||||
|
return 1
|
||||||
|
}
|
||||||
|
|
||||||
|
install_package() {
|
||||||
|
$PACKAGE_INSTALL_CMD "$@"
|
||||||
|
}
|
||||||
|
|
||||||
install_packages() {
|
install_packages() {
|
||||||
local group="$1"
|
local group="$1"
|
||||||
|
local pkg
|
||||||
shift 1
|
shift 1
|
||||||
|
|
||||||
[ -z "$INSTALLED_PACKAGES" ] && INSTALLED_PACKAGES=( $(brew cask list) )
|
echo "--> Group: ${group}"
|
||||||
|
for install_args in "$@"; do
|
||||||
|
pkg="$(package_name "$install_args")"
|
||||||
|
|
||||||
echo "==> ${group} packages"
|
if is_package_installed "$pkg"; then
|
||||||
for pkg in "$@"; do
|
echo " Exists: ${pkg}"
|
||||||
local base=$(echo $pkg | awk '{print $1}')
|
|
||||||
[[ "$base" == *\/* ]] && base=$(basename "$base")
|
|
||||||
|
|
||||||
local found=""
|
|
||||||
|
|
||||||
for i in ${INSTALLED_PACKAGES[@]}; do
|
|
||||||
[[ "$base" == "$i" ]] && found=1
|
|
||||||
done
|
|
||||||
|
|
||||||
if [ -z "$found" ]; then
|
|
||||||
echo " -> Missing: ${base}"
|
|
||||||
brew cask install ${pkg[@]}
|
|
||||||
else
|
else
|
||||||
echo " -> Installed: ${base}"
|
echo " Installing: ${pkg}"
|
||||||
|
install_package "$install_args"
|
||||||
fi
|
fi
|
||||||
done
|
done
|
||||||
}
|
}
|
||||||
|
|
||||||
main() {
|
|
||||||
|
|
||||||
#
|
|
||||||
# Define packages
|
|
||||||
#
|
|
||||||
|
|
||||||
local core_pkgs=(
|
|
||||||
1password
|
|
||||||
aerial
|
|
||||||
alfred
|
|
||||||
appcleaner
|
|
||||||
bartender
|
|
||||||
betterzip
|
|
||||||
betterzipql
|
|
||||||
emacs-pretest
|
|
||||||
firefox
|
|
||||||
fluid
|
|
||||||
flux
|
|
||||||
google-chrome
|
|
||||||
gpg-suite
|
|
||||||
hammerspoon
|
|
||||||
iina
|
|
||||||
istat-menus
|
|
||||||
iterm2
|
|
||||||
karabiner-elements
|
|
||||||
logitech-gaming-software
|
|
||||||
logitech-options
|
|
||||||
mplayerx
|
|
||||||
osxfuse
|
|
||||||
qlcolorcode
|
|
||||||
qlmarkdown
|
|
||||||
qlstephen
|
|
||||||
resolutionator
|
|
||||||
stay
|
|
||||||
ubersicht
|
|
||||||
vlc
|
|
||||||
)
|
|
||||||
|
|
||||||
local work_pkgs=(
|
|
||||||
atom
|
|
||||||
bbedit
|
|
||||||
chromedriver
|
|
||||||
cyberduck
|
|
||||||
dash
|
|
||||||
docker-edge
|
|
||||||
github-desktop
|
|
||||||
google-cloud-sdk
|
|
||||||
insomnia
|
|
||||||
java
|
|
||||||
kaleidoscope
|
|
||||||
licecap
|
|
||||||
medis
|
|
||||||
minikube
|
|
||||||
minishift
|
|
||||||
muzzle
|
|
||||||
paw
|
|
||||||
postico
|
|
||||||
postman
|
|
||||||
robo-3t
|
|
||||||
rowanj-gitx
|
|
||||||
sequel-pro
|
|
||||||
slack
|
|
||||||
stride
|
|
||||||
transmit
|
|
||||||
vagrant
|
|
||||||
virtualbox
|
|
||||||
visual-studio-code
|
|
||||||
)
|
|
||||||
|
|
||||||
local personal_pkgs=(
|
|
||||||
4k-video-downloader
|
|
||||||
adium-beta
|
|
||||||
android-file-transfer
|
|
||||||
audio-hijack
|
|
||||||
autodmg
|
|
||||||
bowtie
|
|
||||||
calibre
|
|
||||||
chicken
|
|
||||||
daisydisk
|
|
||||||
deluge
|
|
||||||
discord
|
|
||||||
dropbox
|
|
||||||
ethereum-wallet
|
|
||||||
filebot
|
|
||||||
gog-galaxy
|
|
||||||
google-photos-backup-and-sync
|
|
||||||
hackety-hack
|
|
||||||
handbrake
|
|
||||||
irccloud
|
|
||||||
istumbler
|
|
||||||
keybase
|
|
||||||
little-snitch
|
|
||||||
makemkv
|
|
||||||
messenger
|
|
||||||
micro-snitch
|
|
||||||
mist
|
|
||||||
omnigraffle
|
|
||||||
openemu
|
|
||||||
parallels-desktop
|
|
||||||
peakhour
|
|
||||||
plex-media-player
|
|
||||||
qlimagesize
|
|
||||||
qlprettypatch
|
|
||||||
qlvideo
|
|
||||||
quicklook-csv
|
|
||||||
quicklook-json
|
|
||||||
quicklookapk
|
|
||||||
rclone-browser
|
|
||||||
ring
|
|
||||||
screenhero
|
|
||||||
sixtyforce
|
|
||||||
skyfonts
|
|
||||||
skype
|
|
||||||
spotify
|
|
||||||
suspicious-package
|
|
||||||
teamviewer
|
|
||||||
transmission
|
|
||||||
unetbootin
|
|
||||||
virtualc64
|
|
||||||
viscosity
|
|
||||||
vmware-fusion
|
|
||||||
vnc-viewer
|
|
||||||
wavebox
|
|
||||||
webpquicklook
|
|
||||||
witgui
|
|
||||||
xld
|
|
||||||
yakyak
|
|
||||||
)
|
|
||||||
|
|
||||||
#
|
|
||||||
# Install packages
|
|
||||||
#
|
|
||||||
|
|
||||||
install_packages "core" "${core_pkgs[@]}"
|
|
||||||
|
|
||||||
if [[ " $* " == *" work "* ]]; then
|
|
||||||
install_packages "work" "${work_pkgs[@]}"
|
|
||||||
fi
|
|
||||||
|
|
||||||
if [[ " $* " == *" personal "* ]]; then
|
|
||||||
install_packages "personal" "${personal_pkgs[@]}"
|
|
||||||
fi
|
|
||||||
}
|
|
||||||
|
|
||||||
main "$@"
|
main "$@"
|
||||||
|
|||||||
@@ -1,95 +1,134 @@
|
|||||||
#! /usr/bin/env bash
|
#! /usr/bin/env bash
|
||||||
set -e
|
set -e
|
||||||
|
|
||||||
|
# Settings
|
||||||
|
PACKAGE_LIST_CMD="brew list"
|
||||||
|
PACKAGE_INSTALL_CMD="brew install"
|
||||||
|
|
||||||
|
|
||||||
|
#
|
||||||
|
# Package list
|
||||||
|
#
|
||||||
|
|
||||||
|
CORE_PKGS=(
|
||||||
|
"aspell --with-lang-en --with-lang-el --with-lang-sv"
|
||||||
|
"global --with-ctags --with-pygments"
|
||||||
|
ack
|
||||||
|
bash
|
||||||
|
bazaar
|
||||||
|
colordiff
|
||||||
|
ctop
|
||||||
|
dep
|
||||||
|
dpkg
|
||||||
|
geckodriver
|
||||||
|
git
|
||||||
|
git-crypt
|
||||||
|
git-standup
|
||||||
|
go
|
||||||
|
goreleaser/tap/goreleaser
|
||||||
|
heroku
|
||||||
|
htop
|
||||||
|
httpie
|
||||||
|
jq
|
||||||
|
kubernetes-cli
|
||||||
|
kubernetes-helm
|
||||||
|
less
|
||||||
|
mysql
|
||||||
|
openshift-cli
|
||||||
|
peco
|
||||||
|
pyenv
|
||||||
|
rbenv
|
||||||
|
rclone
|
||||||
|
readline
|
||||||
|
reattach-to-user-namespace
|
||||||
|
redis
|
||||||
|
ruby-build
|
||||||
|
shellcheck
|
||||||
|
source-highlight
|
||||||
|
sshfs
|
||||||
|
the_silver_searcher
|
||||||
|
thefuck
|
||||||
|
tmux
|
||||||
|
tree
|
||||||
|
watch
|
||||||
|
wget
|
||||||
|
yank
|
||||||
|
zsh
|
||||||
|
)
|
||||||
|
|
||||||
|
PERSONAL_PKGS=(
|
||||||
|
"mkvtoolnix --with-qt"
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
|
#
|
||||||
|
# Main
|
||||||
|
#
|
||||||
|
|
||||||
|
main() {
|
||||||
|
cache_installed_packages
|
||||||
|
|
||||||
|
install_packages "core" "${CORE_PKGS[@]}"
|
||||||
|
|
||||||
|
if [[ " $* " == *" personal "* ]]; then
|
||||||
|
install_packages "personal" "${PERSONAL_PKGS[@]}"
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
#
|
||||||
|
# The rest...
|
||||||
|
#
|
||||||
|
|
||||||
|
INSTALLED_PACKAGES=()
|
||||||
|
|
||||||
|
package_name() {
|
||||||
|
local install_args="$1"
|
||||||
|
local pkg
|
||||||
|
|
||||||
|
pkg="$(echo "$install_args" | awk '{ print $1 }')"
|
||||||
|
[[ "$pkg" == *'/'* ]] && pkg="$(basename "$pkg")"
|
||||||
|
|
||||||
|
echo "$pkg"
|
||||||
|
}
|
||||||
|
|
||||||
|
cache_installed_packages() {
|
||||||
|
if [ ${#INSTALLED_PACKAGES[@]} -eq 0 ]; then
|
||||||
|
echo "--> Getting list of installed packages"
|
||||||
|
mapfile -t INSTALLED_PACKAGES < <($PACKAGE_LIST_CMD)
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
is_package_installed() {
|
||||||
|
local pkg="$1"
|
||||||
|
cache_installed_packages
|
||||||
|
|
||||||
|
for i in "${INSTALLED_PACKAGES[@]}"; do
|
||||||
|
[[ "$pkg" == "$i" ]] && return 0
|
||||||
|
done
|
||||||
|
return 1
|
||||||
|
}
|
||||||
|
|
||||||
|
install_package() {
|
||||||
|
$PACKAGE_INSTALL_CMD "$@"
|
||||||
|
}
|
||||||
|
|
||||||
install_packages() {
|
install_packages() {
|
||||||
local group="$1"
|
local group="$1"
|
||||||
|
local pkg
|
||||||
shift 1
|
shift 1
|
||||||
|
|
||||||
[ -z "$INSTALLED_PACKAGES" ] && INSTALLED_PACKAGES=( $(brew list) )
|
echo "--> Group: ${group}"
|
||||||
|
for install_args in "$@"; do
|
||||||
|
pkg="$(package_name "$install_args")"
|
||||||
|
|
||||||
echo "==> ${group} packages"
|
if is_package_installed "$pkg"; then
|
||||||
for pkg in "$@"; do
|
echo " Exists: ${pkg}"
|
||||||
local base=$(echo $pkg | awk '{print $1}')
|
|
||||||
local found=""
|
|
||||||
|
|
||||||
for i in ${INSTALLED_PACKAGES[@]}; do
|
|
||||||
[[ "$base" == "$i" ]] && found=1
|
|
||||||
done
|
|
||||||
|
|
||||||
if [ -z "$found" ]; then
|
|
||||||
echo "--> Missing: ${base}"
|
|
||||||
brew install ${pkg[@]}
|
|
||||||
else
|
else
|
||||||
echo "--> Installed: ${base}"
|
echo " Installing: ${pkg}"
|
||||||
|
install_package "$install_args"
|
||||||
fi
|
fi
|
||||||
done
|
done
|
||||||
}
|
}
|
||||||
|
|
||||||
main() {
|
|
||||||
|
|
||||||
#
|
|
||||||
# Define packages
|
|
||||||
#
|
|
||||||
|
|
||||||
local core_pkgs=(
|
|
||||||
"aspell --with-lang-en --with-lang-el --with-lang-sv"
|
|
||||||
"global --with-ctags --with-pygments"
|
|
||||||
ack
|
|
||||||
bash
|
|
||||||
bazaar
|
|
||||||
colordiff
|
|
||||||
ctop
|
|
||||||
dep
|
|
||||||
dpkg
|
|
||||||
geckodriver
|
|
||||||
git
|
|
||||||
git-crypt
|
|
||||||
git-standup
|
|
||||||
go
|
|
||||||
goreleaser/tap/goreleaser
|
|
||||||
heroku
|
|
||||||
htop
|
|
||||||
httpie
|
|
||||||
jq
|
|
||||||
kubernetes-cli
|
|
||||||
kubernetes-helm
|
|
||||||
less
|
|
||||||
mysql
|
|
||||||
openshift-cli
|
|
||||||
peco
|
|
||||||
pyenv
|
|
||||||
rbenv
|
|
||||||
rclone
|
|
||||||
readline
|
|
||||||
reattach-to-user-namespace
|
|
||||||
redis
|
|
||||||
ruby-build
|
|
||||||
shellcheck
|
|
||||||
source-highlight
|
|
||||||
sshfs
|
|
||||||
the_silver_searcher
|
|
||||||
thefuck
|
|
||||||
tmux
|
|
||||||
tree
|
|
||||||
watch
|
|
||||||
wget
|
|
||||||
yank
|
|
||||||
zsh
|
|
||||||
)
|
|
||||||
|
|
||||||
local personal_pkgs=(
|
|
||||||
"mkvtoolnix --with-qt"
|
|
||||||
)
|
|
||||||
|
|
||||||
#
|
|
||||||
# Install packages
|
|
||||||
#
|
|
||||||
|
|
||||||
install_packages "core" "${core_pkgs[@]}"
|
|
||||||
|
|
||||||
if [[ " $* " == *" personal "* ]]; then
|
|
||||||
install_packages "personal" "${personal_pkgs[@]}"
|
|
||||||
fi
|
|
||||||
}
|
|
||||||
|
|
||||||
main "$@"
|
main "$@"
|
||||||
|
|||||||
Reference in New Issue
Block a user