diff --git a/bin/bootstrap-caskroom b/bin/bootstrap-caskroom index 9c45479..9ae332f 100755 --- a/bin/bootstrap-caskroom +++ b/bin/bootstrap-caskroom @@ -1,174 +1,211 @@ #! /usr/bin/env bash 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() { local group="$1" + local pkg 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" - for pkg in "$@"; do - 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[@]} + 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=( - 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 "$@" diff --git a/bin/bootstrap-homebrew b/bin/bootstrap-homebrew index d1746f1..de35052 100755 --- a/bin/bootstrap-homebrew +++ b/bin/bootstrap-homebrew @@ -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 "$@"