Last active
July 28, 2018 11:11
-
-
Save munkius/0dba61dab3e2f2e572a804208a79b099 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 | |
# Welcome to the TMI laptop script! | |
# Inspired by and adapted from https://raw.githubusercontent.com/thoughtbot/laptop/master/mac | |
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="$(command -v 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 | |
sudo chsh -s "$shell_path" "$USER" | |
} | |
case "$SHELL" in | |
*/zsh) | |
if [ "$(command -v zsh)" != '/usr/local/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 "$@" | |
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 --force # https://github.com/Homebrew/brew/issues/1151 | |
brew bundle --file=- <<EOF | |
tap "homebrew/services" | |
tap "universal-ctags/universal-ctags" | |
tap "caskroom/cask" | |
# Unix | |
brew "git" | |
brew "openssl" | |
brew "watchman" | |
brew "zsh" | |
# Heroku | |
brew "heroku" | |
# GitHub | |
brew "hub" | |
# Image manipulation | |
brew "imagemagick" | |
# Testing | |
brew "[email protected]" if MacOS::Xcode.installed? | |
# Programming language prerequisites and package managers | |
brew "libyaml" # should come after openssl | |
brew "coreutils" | |
brew "yarn" | |
cask "gpg-suite" | |
# Databases | |
brew "postgres", restart_service: :changed | |
brew "redis", restart_service: :changed | |
# Coding | |
brew "rbenv" | |
brew "cloc" | |
# Cask | |
brew cask "1password" | |
brew cask "dropbox" | |
brew cask "evernote" | |
brew cask "firefox" | |
brew cask "google-chrome" | |
brew cask "harvest" | |
brew cask "iterm2" | |
brew cask "slack" | |
brew cask "spotify" | |
brew cask "telegram" | |
brew cask "visual-studio-code" | |
EOF | |
if brew list | grep --silent "[email protected]"; then | |
fancy_echo "Symlink qmake binary to /usr/local/bin for Capybara Webkit..." | |
brew unlink [email protected] | |
brew link --force [email protected] | |
fi | |
fancy_echo "Update heroku binary..." | |
brew unlink heroku | |
brew link --force heroku | |
fancy_echo "Configuring asdf version manager..." | |
if [ ! -d "$HOME/.asdf" ]; then | |
git clone https://github.com/asdf-vm/asdf.git ~/.asdf --branch v0.5.0 | |
append_to_zshrc "source $HOME/.asdf/asdf.sh" 1 | |
fi | |
install_asdf_plugin() { | |
local name="$1" | |
local url="$2" | |
if ! asdf plugin-list | grep -Fq "$name"; then | |
asdf plugin-add "$name" "$url" | |
fi | |
} | |
# shellcheck disable=SC1090 | |
source "$HOME/.asdf/asdf.sh" | |
install_asdf_plugin "ruby" "https://github.com/asdf-vm/asdf-ruby.git" | |
install_asdf_plugin "nodejs" "https://github.com/asdf-vm/asdf-nodejs.git" | |
install_asdf_language() { | |
local language="$1" | |
local version | |
version="$(asdf list-all "$language" | grep -v "[a-z]" | tail -1)" | |
if ! asdf list "$language" | grep -Fq "$version"; then | |
asdf install "$language" "$version" | |
asdf global "$language" "$version" | |
fi | |
} | |
fancy_echo "Installing latest Ruby..." | |
install_asdf_language "ruby" | |
gem update --system | |
gem_install_or_update "bundler" | |
number_of_cores=$(sysctl -n hw.ncpu) | |
bundle config --global jobs $((number_of_cores - 1)) | |
fancy_echo "Installing latest Node..." | |
bash "$HOME/.asdf/plugins/nodejs/bin/import-release-team-keyring" | |
install_asdf_language "nodejs" | |
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