forked from thoughtbot/laptop
-
Notifications
You must be signed in to change notification settings - Fork 1
/
mac
executable file
·230 lines (188 loc) · 5.17 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
#!/bin/sh
# Welcome to the Revelry 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:-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
echo "
__________ .__
\______ \ _______ __ ____ | |_______ ___.__.
| _// __ \ \/ // __ \| |\_ __ < | |
| | \ ___/\ /\ ___/| |_| | \/\___ |
|____|_ /\___ >\_/ \___ >____/__| / ____|
\/ \/ \/ \/
"
arch=$(uname -m)
if [ "$arch" == "arm64" ]; then
HOMEBREW_PREFIX=/opt/homebrew
/usr/sbin/softwareupdate --install-rosetta --agree-to-license
else
HOMEBREW_PREFIX=/usr/local
fi
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"'
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"
fancy_echo "Adding OhMyZsh ..."
sudo sh -c "$(curl -fsSL https://raw.github.com/ohmyzsh/ohmyzsh/master/tools/install.sh)"
}
case "$SHELL" in
*/zsh)
if [ "$(command -v zsh)" != "$HOMEBREW_PREFIX/bin/zsh" ] ; then
update_shell
fi
;;
*)
update_shell
;;
esac
update_paths_in_zshrc() {
fancy_echo "Updating Brew and ASDF paths in .zshrc"
append_to_zshrc "export PATH=\"$HOMEBREW_PREFIX/bin:$PATH\"" 1
append_to_zshrc "source $(brew --prefix asdf)/asdf.sh" 1
export PATH="$HOMEBREW_PREFIX/bin:$PATH"
}
echo "Are you migrating from an Intel Macbook AND have already run Migration Assistant? Y or N"
read is_a_migration
if ! [ "$is_a_migration" == "${is_a_migration#[Yy]}" ]; then
fancy_echo "Creating dump file of migrated Homebrew formulae .."
brew bundle dump
fancy_echo "Installing Homebrew to opt/homebrew ..."
/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"
update_paths_in_zshrc
fi
if ! command -v brew >/dev/null; then
fancy_echo "Installing Homebrew ..."
/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"
append_to_zshrc '# recommended by brew doctor'
update_paths_in_zshrc
fi
fancy_echo "Updating Homebrew formulae ..."
brew update --force # https://github.com/Homebrew/brew/issues/1151
if ! [ "$is_a_migration" == "${is_a_migration#[Yy]}" ]; then
brew bundle --file Brewfile # Created by bundle dump for migration users
else
brew bundle --file=- <<EOF
cask_args appdir: '/Applications'
tap 'homebrew/cask'
tap 'homebrew/bundle'
tap 'heroku/brew'
brew 'asdf'
brew 'bash'
brew 'bat'
brew 'coreutils'
brew 'curl'
brew 'dockutil'
brew 'elixir'
brew 'openjdk'
brew 'fd'
brew 'fzf'
brew 'git'
brew 'gh'
brew 'gnu-sed'
brew 'gnupg'
brew 'heroku'
brew 'htop'
brew 'hub'
brew 'hyperfine'
brew 'jq'
brew 'less'
brew 'ncdu'
brew 'nmap'
brew 'parallel'
brew 'postgres'
brew 'pspg'
brew 'pv'
brew 'ripgrep'
brew 'rsync'
brew 'tmux'
brew 'vim'
brew 'wget'
brew 'zsh'
brew 'zsh-autosuggestions'
brew 'zsh-history-substring-search'
brew 'zsh-syntax-highlighting'
EOF
fi
add_or_update_asdf_plugin() {
local name="$1"
if ! asdf plugin-list | grep -Fq "$name"; then
asdf plugin-add "$name"
else
asdf plugin-update "$name"
fi
if ! [ "$name" == "nodejs" ]; then
# Installing 15.14.0 because 16.0 breaks Phoenix 1.5 and lower
asdf install nodejs 15.14.0
else
CFLAGS="-Wno-error=implicit-function-declaration" asdf install "$name" latest
fi
}
source $(brew --prefix asdf)/asdf.sh
add_or_update_asdf_plugin "erlang"
add_or_update_asdf_plugin "elixir"
add_or_update_asdf_plugin "ruby"
add_or_update_asdf_plugin "nodejs"
add_or_update_asdf_plugin "dotnet-core"
bash "$HOME/.asdf/plugins/nodejs/bin/import-release-team-keyring"
if [ "$arch" == "arm64" ] && ! command -v docker >/dev/null; then
wget -O /tmp/Docker.dmg https://desktop.docker.com/mac/stable/arm64/62632/Docker.dmg
sudo hdiutil attach /tmp/Docker.dmg
rsync -a /Volumes/Docker/Docker.app /Applications/
fi
# Install casks after everything else because if an app exists it will throw
# an error and exit the script
brew bundle --file=- <<EOF
cask '1password'
cask 'alfred'
cask 'dash'
cask 'firefox'
cask 'google-chrome'
cask 'iterm2'
cask 'keybase'
cask 'ngrok'
cask 'slack'
cask 'visual-studio-code'
cask 'vlc'
cask 'zoom'
EOF
if [ -f "$HOME/.laptop.local" ]; then
fancy_echo "Running your customizations from ~/.laptop.local ..."
# shellcheck disable=SC1090
. "$HOME/.laptop.local"
fi