forked from thoughtbot/laptop
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathmac
238 lines (178 loc) · 7.33 KB
/
mac
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
#!/usr/bin/env bash
### end common-components/bash-shebang
# Welcome to the thoughtbot laptop script! Be prepared to turn your laptop (or
# desktop, no haters here) into an awesome development machine.
# This file is auto-generated. Do not edit it by hand unless you know what
# you're doing. Please see 'CONTRIBUTING.md' for more information.
### end common-components/header
trap 'ret=$?; test $ret -ne 0 && printf "failed\n\n" >&2; exit $ret' EXIT
set -e
### end common-components/exit-trap
if [[ ! -d "$HOME/.bin/" ]]; then
mkdir "$HOME/.bin"
fi
if [ ! -f "$HOME/.zshrc" ]; then
touch "$HOME/.zshrc"
fi
if [[ ":$PATH:" != *":$HOME/.bin:"* ]]; then
printf 'export PATH="$HOME/.bin:$PATH"\n' >> ~/.zshrc
export PATH="$HOME/.bin:$PATH"
fi
### end common-components/check-home-bin
fancy_echo() {
printf "\n%b\n" "$1"
}
### end common-components/shared-functions
fancy_echo "Changing your shell to zsh ..."
chsh -s $(which zsh)
### end common-components/zsh
brew_install_or_upgrade() {
if brew_is_installed "$1"; then
if brew_is_upgradable "$1"; then
brew upgrade "$@"
fi
else
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
[[ $? -ne 0 ]]
}
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"
mkdir -p ~/Library/LaunchAgents
ln -sfv /usr/local/opt/$NAME/$PLIST ~/Library/LaunchAgents
if launchctl list | grep -q $DOMAIN; then
launchctl unload ~/Library/LaunchAgents/$PLIST >/dev/null
fi
launchctl load ~/Library/LaunchAgents/$PLIST >/dev/null
}
### end mac-components/mac-functions
if [[ -f /etc/zshenv ]]; then
fancy_echo "Fixing OSX zsh environment bug ..."
sudo mv /etc/{zshenv,zshrc}
fi
### end mac-components/zsh-fix
if ! command -v brew >/dev/null; then
fancy_echo "Installing Homebrew, a good OS X package manager ..."
ruby <(curl -fsS https://raw.githubusercontent.com/Homebrew/install/master/install)
if ! grep -qs "recommended by brew doctor" ~/.zshrc; then
fancy_echo "Put Homebrew location earlier in PATH ..."
printf '\n# recommended by brew doctor\n' >> ~/.zshrc
printf 'export PATH="/usr/local/bin:$PATH"\n' >> ~/.zshrc
export PATH="/usr/local/bin:$PATH"
fi
else
fancy_echo "Homebrew already installed. Skipping ..."
fi
fancy_echo "Updating Homebrew formulas ..."
brew update
### end mac-components/homebrew
fancy_echo "Installing Postgres, a good open source relational database ..."
brew_install_or_upgrade 'postgres' '--no-python'
fancy_echo "Installing Redis, a good key-value database ..."
brew_install_or_upgrade 'redis'
fancy_echo "Installing The Silver Searcher (better than ack or grep) to search the contents of files ..."
brew_install_or_upgrade 'the_silver_searcher'
fancy_echo "Installing vim from Homebrew to get the latest version ..."
brew_install_or_upgrade 'vim'
fancy_echo "Installing ctags, to index files for vim tab completion of methods, classes, variables ..."
brew_install_or_upgrade 'ctags'
fancy_echo "Installing tmux, to save project state and switch between projects ..."
brew_install_or_upgrade 'tmux'
fancy_echo "Installing reattach-to-user-namespace, for copy-paste and RubyMotion compatibility with tmux ..."
brew_install_or_upgrade 'reattach-to-user-namespace'
fancy_echo "Installing ImageMagick, to crop and resize images ..."
brew_install_or_upgrade 'imagemagick'
fancy_echo "Installing QT, used by Capybara Webkit for headless Javascript integration testing ..."
brew_install_or_upgrade 'qt'
fancy_echo "Installing watch, to execute a program periodically and show the output ..."
brew_install_or_upgrade 'watch'
fancy_echo "Installing GitHub CLI client ..."
brew_install_or_upgrade 'gh'
node_version="0.10"
fancy_echo "Installing NVM, Node.js, and NPM, for running apps and installing JavaScript packages ..."
brew_install_or_upgrade 'nvm'
if ! grep -qs 'source $(brew --prefix nvm)/nvm.sh' ~/.zshrc; then
printf 'export PATH="$PATH:/usr/local/lib/node_modules"\n' >> ~/.zshrc
printf 'source $(brew --prefix nvm)/nvm.sh\n' >> ~/.zshrc
fi
source $(brew --prefix nvm)/nvm.sh
nvm install "$node_version"
fancy_echo "Setting $node_version as the global default nodejs..."
nvm alias default "$node_version"
### end mac-components/packages
fancy_echo "Starting Postgres ..."
brew_launchctl_restart postgresql
### end mac-components/start-services
fancy_echo "Installing rbenv, to change Ruby versions ..."
brew_install_or_upgrade 'rbenv'
if ! grep -qs "rbenv init" ~/.zshrc; then
printf 'export PATH="$HOME/.rbenv/bin:$PATH"\n' >> ~/.zshrc
printf 'eval "$(rbenv init - zsh --no-rehash)"\n' >> ~/.zshrc
fancy_echo "Enable shims and autocompletion ..."
eval "$(rbenv init - zsh)"
fi
export PATH="$HOME/.rbenv/bin:$PATH"
fancy_echo "Installing rbenv-gem-rehash so the shell automatically picks up binaries after installing gems with binaries..."
brew_install_or_upgrade 'rbenv-gem-rehash'
fancy_echo "Installing ruby-build, to install Rubies ..."
brew_install_or_upgrade 'ruby-build'
### end mac-components/rbenv
fancy_echo "Upgrading and linking OpenSSL ..."
brew_install_or_upgrade 'openssl'
brew unlink openssl && brew link openssl --force
### end mac-components/compiler-and-libraries
ruby_version="2.1.4"
fancy_echo "Installing Ruby $ruby_version ..."
RUBY_CONFIGURE_OPTS="--without-gcc --disable-install-rdoc" rbenv install "$ruby_version"
fancy_echo "Setting $ruby_version as global default Ruby ..."
rbenv global "$ruby_version"
rbenv rehash
fancy_echo "Updating to latest Rubygems version ..."
gem update --system
fancy_echo "Installing Bundler to install project-specific Ruby gems ..."
gem install bundler --no-document --pre
### end common-components/ruby-environment
fancy_echo "Configuring Bundler for faster, parallel gem installation ..."
number_of_cores=$(sysctl -n hw.ncpu)
bundle config --global jobs $((number_of_cores - 1))
### end mac-components/bundler
fancy_echo "Installing Suspenders, thoughtbot's Rails template ..."
gem install suspenders --no-document
fancy_echo "Installing Parity, shell commands for development, staging, and
production parity ..."
gem install parity --no-document
### end common-components/default-gems
fancy_echo "Installing Heroku CLI client ..."
brew_install_or_upgrade 'heroku-toolbelt'
fancy_echo "Installing the heroku-config plugin to pull config variables locally to be used as ENV variables ..."
heroku plugins:install git://github.com/ddollar/heroku-config.git
fancy_echo "Installing foreman ..."
curl -sLo /tmp/foreman.pkg http://assets.foreman.io/foreman/foreman.pkg && \
sudo installer -pkg /tmp/foreman.pkg -tgt /
### end mac-components/heroku
if ! command -v rcup >/dev/null; then
fancy_echo "Installing rcm, to manage your dotfiles ..."
brew tap thoughtbot/formulae
brew_install_or_upgrade 'rcm'
else
fancy_echo "rcm already installed. Skipping ..."
fi
### end mac-components/rcm
fancy_echo "Installing your personal additions from ~/.laptop.local ..."
if [[ -f ~/.laptop.local ]]; then
source ~/.laptop.local
fi
### end common-components/personal-additions