Created
August 30, 2016 17:09
-
-
Save deckarep/1d47848621a83ef1776fad32e1a5b461 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#!/bin/sh | |
# Welcome to the thoughtbot laptop script! | |
# Be prepared to turn your laptop (or desktop, no haters here) | |
# into an awesome development machine. | |
fancy_echo() { | |
local fmt="$1"; shift | |
# shellcheck disable=SC2059 | |
printf "\n$fmt\n" "$@" | |
} | |
append_to_zshrc() { | |
local text="$1" zshrc | |
local skip_new_line="$2" | |
if [ -w "$HOME/.zshrc.local" ]; then | |
zshrc="$HOME/.zshrc.local" | |
else | |
zshrc="$HOME/.zshrc" | |
fi | |
if ! grep -Fqs "$text" "$zshrc"; then | |
if [ "$skip_new_line" -eq 1 ]; then | |
printf "%s\n" "$text" >> "$zshrc" | |
else | |
printf "\n%s\n" "$text" >> "$zshrc" | |
fi | |
fi | |
} | |
trap 'ret=$?; test $ret -ne 0 && printf "failed\n\n" >&2; exit $ret' EXIT | |
set -e | |
if [ ! -d "$HOME/.bin/" ]; then | |
mkdir "$HOME/.bin" | |
fi | |
if [ ! -f "$HOME/.zshrc" ]; then | |
touch "$HOME/.zshrc" | |
fi | |
# shellcheck disable=SC2016 | |
append_to_zshrc 'export PATH="$HOME/.bin:$PATH"' | |
case "$SHELL" in | |
*/zsh) : ;; | |
*) | |
fancy_echo "Changing your shell to zsh ..." | |
chsh -s "$(which zsh)" | |
;; | |
esac | |
brew_install_or_upgrade() { | |
if brew_is_installed "$1"; then | |
if brew_is_upgradable "$1"; then | |
fancy_echo "Upgrading %s ..." "$1" | |
brew upgrade "$@" | |
else | |
fancy_echo "Already using the latest version of %s. Skipping ..." "$1" | |
fi | |
else | |
fancy_echo "Installing %s ..." "$1" | |
brew install "$@" | |
fi | |
} | |
brew_is_installed() { | |
local name="$(brew_expand_alias "$1")" | |
brew list -1 | grep -Fqx "$name" | |
} | |
brew_is_upgradable() { | |
local name="$(brew_expand_alias "$1")" | |
! brew outdated --quiet "$name" >/dev/null | |
} | |
brew_tap() { | |
brew tap "$1" 2> /dev/null | |
} | |
brew_expand_alias() { | |
brew info "$1" 2>/dev/null | head -1 | awk '{gsub(/:/, ""); print $1}' | |
} | |
brew_launchctl_restart() { | |
local name="$(brew_expand_alias "$1")" | |
local domain="homebrew.mxcl.$name" | |
local plist="$domain.plist" | |
fancy_echo "Restarting %s ..." "$1" | |
mkdir -p "$HOME/Library/LaunchAgents" | |
ln -sfv "/usr/local/opt/$name/$plist" "$HOME/Library/LaunchAgents" | |
if launchctl list | grep -Fq "$domain"; then | |
launchctl unload "$HOME/Library/LaunchAgents/$plist" >/dev/null | |
fi | |
launchctl load "$HOME/Library/LaunchAgents/$plist" >/dev/null | |
} | |
gem_install_or_update() { | |
if gem list "$1" --installed > /dev/null; then | |
fancy_echo "Updating %s ..." "$1" | |
gem update "$@" | |
else | |
fancy_echo "Installing %s ..." "$1" | |
gem install "$@" | |
rbenv rehash | |
fi | |
} | |
if ! command -v brew >/dev/null; then | |
fancy_echo "Installing Homebrew ..." | |
curl -fsS \ | |
'https://raw.githubusercontent.com/Homebrew/install/master/install' | ruby | |
append_to_zshrc '# recommended by brew doctor' | |
# shellcheck disable=SC2016 | |
append_to_zshrc 'export PATH="/usr/local/bin:$PATH"' 1 | |
export PATH="/usr/local/bin:$PATH" | |
else | |
fancy_echo "Homebrew already installed. Skipping ..." | |
fi | |
fancy_echo "Updating Homebrew formulas ..." | |
brew update | |
brew_install_or_upgrade 'git' | |
brew_install_or_upgrade 'postgres' | |
brew_launchctl_restart 'postgresql' | |
brew_install_or_upgrade 'redis' | |
brew_launchctl_restart 'redis' | |
brew_install_or_upgrade 'couchdb' | |
brew_launchctl_restart 'couchdb' | |
brew_install_or_upgrade 'the_silver_searcher' | |
brew_install_or_upgrade 'vim' | |
brew_install_or_upgrade 'ctags' | |
brew_install_or_upgrade 'tmux' | |
brew_install_or_upgrade 'reattach-to-user-namespace' | |
brew_install_or_upgrade 'imagemagick' | |
brew_install_or_upgrade 'qt' | |
brew_install_or_upgrade 'gh' | |
brew_install_or_upgrade 'node' | |
brew_install_or_upgrade 'zmq' | |
brew_launchctl_restart 'zmq' | |
brew_install_or_upgrade 'rabbitmq' | |
brew_launchctl_restart 'rabbitmq' | |
brew_install_or_upgrade 'rbenv' | |
brew_install_or_upgrade 'ruby-build' | |
# shellcheck disable=SC2016 | |
append_to_zshrc 'eval "$(rbenv init - zsh --no-rehash)"' 1 | |
brew_install_or_upgrade 'openssl' | |
brew unlink openssl && brew link openssl --force | |
brew_install_or_upgrade 'libyaml' | |
ruby_version="$(curl -sSL http://ruby.thoughtbot.com/latest)" | |
eval "$(rbenv init - zsh)" | |
if ! rbenv versions | grep -Fq "$ruby_version"; then | |
rbenv install -s "$ruby_version" | |
fi | |
rbenv global "$ruby_version" | |
rbenv shell "$ruby_version" | |
gem update --system | |
gem_install_or_update 'bundler' | |
fancy_echo "Configuring Bundler ..." | |
number_of_cores=$(sysctl -n hw.ncpu) | |
bundle config --global jobs $((number_of_cores - 1)) | |
brew_install_or_upgrade 'heroku-toolbelt' | |
if ! command -v rcup >/dev/null; then | |
brew_tap 'thoughtbot/formulae' | |
brew_install_or_upgrade 'rcm' | |
fi | |
if [ -f "$HOME/.laptop.local" ]; then | |
. "$HOME/.laptop.local" | |
fi |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment