Created
April 5, 2017 11:08
-
-
Save dannycroft/3e75ce65f5133670a406a60e8ff8900b to your computer and use it in GitHub Desktop.
This file contains hidden or 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 | |
| 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:-0}" | |
| 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 | |
| } | |
| # shellcheck disable=SC2154 | |
| 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"' | |
| HOMEBREW_PREFIX="/usr/local" | |
| if [ -d "$HOMEBREW_PREFIX" ]; then | |
| if ! [ -r "$HOMEBREW_PREFIX" ]; then | |
| sudo chown -R "$LOGNAME:admin" /usr/local | |
| fi | |
| else | |
| sudo mkdir "$HOMEBREW_PREFIX" | |
| sudo chflags norestricted "$HOMEBREW_PREFIX" | |
| sudo chown -R "$LOGNAME:admin" "$HOMEBREW_PREFIX" | |
| fi | |
| update_shell() { | |
| local shell_path; | |
| shell_path="$(which zsh)" | |
| fancy_echo "Changing your shell to zsh ..." | |
| if ! grep "$shell_path" /etc/shells > /dev/null 2>&1 ; then | |
| fancy_echo "Adding '$shell_path' to /etc/shells" | |
| sudo sh -c "echo $shell_path >> /etc/shells" | |
| fi | |
| chsh -s "$shell_path" | |
| } | |
| case "$SHELL" in | |
| */zsh) | |
| if [ "$(which zsh)" != '/bin/zsh' ] ; then | |
| update_shell | |
| fi | |
| ;; | |
| *) | |
| update_shell | |
| ;; | |
| esac | |
| gem_install_or_update() { | |
| if gem list "$1" --installed > /dev/null; then | |
| gem update "$@" | |
| else | |
| 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" | |
| fi | |
| if brew list | grep -Fq brew-cask; then | |
| fancy_echo "Uninstalling old Homebrew-Cask ..." | |
| brew uninstall --force brew-cask | |
| fi | |
| fancy_echo "Updating Homebrew formulae ..." | |
| brew update | |
| brew bundle --file=- <<EOF | |
| tap "thoughtbot/formulae" | |
| tap "homebrew/services" | |
| # Unix | |
| brew "ctags" | |
| brew "git" | |
| brew "openssl" | |
| brew "rcm" | |
| brew "reattach-to-user-namespace" | |
| brew "the_silver_searcher" | |
| brew "tmux" | |
| brew "vim" | |
| brew "zsh" | |
| # Heroku | |
| brew "heroku-toolbelt" | |
| brew "parity" | |
| # GitHub | |
| brew "hub" | |
| # Image manipulation | |
| brew "imagemagick" | |
| # Testing | |
| brew "qt" | |
| # Programming languages | |
| brew "libyaml" # should come after openssl | |
| brew "node" | |
| brew "rbenv" | |
| brew "ruby-build" | |
| # Databases | |
| brew "postgres", restart_service: true | |
| brew "redis", restart_service: true | |
| EOF | |
| fancy_echo "Configuring Ruby ..." | |
| find_latest_ruby() { | |
| rbenv install -l | grep -v - | tail -1 | sed -e 's/^ *//' | |
| } | |
| ruby_version="$(find_latest_ruby)" | |
| # shellcheck disable=SC2016 | |
| append_to_zshrc 'eval "$(rbenv init - --no-rehash)"' 1 | |
| eval "$(rbenv init -)" | |
| if ! rbenv versions | grep -Fq "$ruby_version"; then | |
| RUBY_CONFIGURE_OPTS=--with-openssl-dir=/usr/local/opt/openssl rbenv install -s "$ruby_version" | |
| fi | |
| rbenv global "$ruby_version" | |
| rbenv shell "$ruby_version" | |
| gem update --system | |
| gem_install_or_update 'bundler' | |
| number_of_cores=$(sysctl -n hw.ncpu) | |
| bundle config --global jobs $((number_of_cores - 1)) | |
| if [ -f "$HOME/.laptop.local" ]; then | |
| fancy_echo "Running your customizations from ~/.laptop.local ..." | |
| # shellcheck disable=SC1090 | |
| . "$HOME/.laptop.local" | |
| fi |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment