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,95 +1,134 @@
|
||||
#! /usr/bin/env bash
|
||||
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() {
|
||||
local group="$1"
|
||||
local pkg
|
||||
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"
|
||||
for pkg in "$@"; do
|
||||
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[@]}
|
||||
if is_package_installed "$pkg"; then
|
||||
echo " Exists: ${pkg}"
|
||||
else
|
||||
echo "--> Installed: ${base}"
|
||||
echo " Installing: ${pkg}"
|
||||
install_package "$install_args"
|
||||
fi
|
||||
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 "$@"
|
||||
|
||||
Reference in New Issue
Block a user