forked from mathiasbynens/dotfiles
-
Notifications
You must be signed in to change notification settings - Fork 0
/
setup-a-new-machine.sh
executable file
·284 lines (187 loc) · 9.58 KB
/
setup-a-new-machine.sh
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
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
# copy paste this file in bit by bit.
# don't run it.
echo "do not run this script in one go. hit ctrl-c NOW"
read -n 1
##############################################################################################################
### backup old machine's key items
mkdir -p ~/migration/home/
mkdir -p ~/migration/Library/"Application Support"/
mkdir -p ~/migration/Library/Preferences/
mkdir -p ~/migration/Library/Application Support/
mkdir -p ~/migration/rootLibrary/Preferences/SystemConfiguration/
cd ~/migration
# what is worth reinstalling?
brew leaves > brew-list.txt # all top-level brew installs
brew cask list > cask-list.txt
npm list -g --depth=0 > npm-g-list.txt
yarn global list --depth=0 > yarn-g-list.txt
# then compare brew-list to what's in `brew.sh`
# comm <(sort brew-list.txt) <(sort brew.sh-cleaned-up)
# backup some dotfiles likely not under source control
cp -Rp \
~/.bash_history \
~/.extra ~/.extra.fish \
~/.gitconfig.local \
~/.gnupg \
~/.nano \
~/.nanorc \
~/.netrc \
~/.ssh \
~/.z \
~/migration/home
cp -Rp ~/Documents ~/migration
cp -Rp /Library/Preferences/SystemConfiguration/com.apple.airport.preferences.plist ~/migration/rootLibrary/Preferences/SystemConfiguration/ # wifi
cp -Rp ~/Library/Preferences/net.limechat.LimeChat.plist ~/migration/Library/Preferences/
cp -Rp ~/Library/Preferences/com.tinyspeck.slackmacgap.plist ~/migration/Library/Preferences/
cp -Rp ~/Library/Services ~/migration/Library/ # automator stuff
cp -Rp ~/Library/Fonts ~/migration/Library/ # all those fonts you've installed
# editor settings & plugins
cp -Rp ~/Library/Application\ Support/Sublime\ Text\ * ~/migration/Library/"Application Support"
cp -Rp ~/Library/Application\ Support/Code\ -\ Insider* ~/migration/Library/"Application Support"
# also consider...
# random git branches you never pushed anywhere?
# git untracked files (or local gitignored stuff). stuff you never added, but probably want..
# OneTab history pages, because chrome tabs are valuable.
# usage logs you've been keeping.
# iTerm settings.
# Prefs, General, Use settings from Folder
# Finder settings and TotalFinder settings
# Not sure how to do this yet. Really want to.
# Timestats chrome extension stats
# chrome-extension://ejifodhjoeeenihgfpjijjmpomaphmah/options.html#_options
# gotta export into JSON through devtools:
# copy(JSON.stringify(localStorage))
# pbpaste > timestats-canary.json.txt
# software licenses.
# sublimetext's is in its Application Support folder
# maybe ~/Pictures and such
cp -Rp ~/Pictures ~/migration
### end of old machine backup
##############################################################################################################
##############################################################################################################
### XCode Command Line Tools
# thx https://github.com/alrra/dotfiles/blob/ff123ca9b9b/os/os_x/installs/install_xcode.sh
if ! xcode-select --print-path &> /dev/null; then
# Prompt user to install the XCode Command Line Tools
xcode-select --install &> /dev/null
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
# Wait until the XCode Command Line Tools are installed
until xcode-select --print-path &> /dev/null; do
sleep 5
done
print_result $? 'Install XCode Command Line Tools'
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
# Point the `xcode-select` developer directory to
# the appropriate directory from within `Xcode.app`
# https://github.com/alrra/dotfiles/issues/13
sudo xcode-select -switch /Applications/Xcode.app/Contents/Developer
print_result $? 'Make "xcode-select" developer directory point to Xcode'
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
# Prompt user to agree to the terms of the Xcode license
# https://github.com/alrra/dotfiles/issues/10
sudo xcodebuild -license
print_result $? 'Agree with the XCode Command Line Tools licence'
fi
###
##############################################################################################################
##############################################################################################################
### homebrew!
# (if your machine has /usr/local locked down (like google's), you can do this to place everything in ~/.homebrew
mkdir $HOME/.homebrew && curl -L https://github.com/mxcl/homebrew/tarball/master | tar xz --strip 1 -C $HOME/.homebrew
export PATH=$HOME/.homebrew/bin:$HOME/.homebrew/sbin:$PATH
# install all the things
./brew.sh
### end of homebrew
##############################################################################################################
##############################################################################################################
### install of common things
###
# github.com/jamiew/git-friendly
# the `push` command which copies the github compare URL to my clipboard is heaven
bash < <( curl https://raw.github.com/jamiew/git-friendly/master/install.sh)
# autocompletion for git branch names https://git-scm.com/book/en/v1/Git-Basics-Tips-and-Tricks
curl https://raw.githubusercontent.com/git/git/master/contrib/completion/git-completion.bash -o ~/.git-completion.bash
# Type `git open` to open the GitHub page or website for a repository.
npm install -g git-open
# fancy listing of recent branches
npm install -g git-recent
# sexy git diffs
npm install -g diff-so-fancy
# trash as the safe `rm` alternative
npm install --global trash-cli
# more readable git diffs
npm install --global diff-so-fancy
# install better nanorc config
# https://github.com/scopatz/nanorc
curl https://raw.githubusercontent.com/scopatz/nanorc/master/install.sh | sh
# github.com/rupa/z - oh how i love you
git clone https://github.com/rupa/z.git ~/code/z
# consider reusing your current .z file if possible. it's painful to rebuild :)
# z is hooked up in .bash_profile
# github.com/thebitguru/play-button-itunes-patch
# disable itunes opening on media keys
git clone https://github.com/thebitguru/play-button-itunes-patch ~/code/play-button-itunes-patch
# my magic photobooth symlink -> dropbox. I love it.
# + first move Photo Booth folder out of Pictures
# + then start Photo Booth. It'll ask where to put the library.
# + put it in Dropbox/public
# * Now… you can record photobooth videos quickly and they upload to dropbox DURING RECORDING
# * then you grab public URL and send off your video message in a heartbeat.
# for the c alias (syntax highlighted cat)
sudo easy_install Pygments
# change to bash 4 (installed by homebrew)
BASHPATH=$(brew --prefix)/bin/bash
#sudo echo $BASHPATH >> /etc/shells
sudo bash -c 'echo $(brew --prefix)/bin/bash >> /etc/shells'
chsh -s $BASHPATH # will set for current user only.
echo $BASH_VERSION # should be 4.x not the old 3.2.X
# Later, confirm iterm settings aren't conflicting.
# iterm with more margin! http://hackr.it/articles/prettier-gutter-in-iterm-2/
# (admittedly not as easy to maintain)
# setting up the sublime symlink
ln -sf "/Applications/Sublime Text.app/Contents/SharedSupport/bin/subl" ~/bin/subl
# install nvm (Node Version Nanager, https://github.com/nvm-sh/nvm)
curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.34.0/install.sh | bash
###
##############################################################################################################
## Chromium hacking
# improve perf of git inside of chromium checkout
# read https://chromium.googlesource.com/chromium/src/+/master/docs/mac_build_instructions.md
# default is (257*1024)
sudo sysctl kern.maxvnodes=$((512*1024))
echo kern.maxvnodes=$((512*1024)) | sudo tee -a /etc/sysctl.conf
# https://facebook.github.io/watchman/docs/install.html#mac-os-file-descriptor-limits
sudo sysctl -w kern.maxfiles=$((10*1024*1024))
sudo sysctl -w kern.maxfilesperproc=$((1024*1024))
echo kern.maxfiles=$((10*1024*1024)) | sudo tee -a /etc/sysctl.conf
echo kern.maxfilesperproc=$((1024*1024)) | sudo tee -a /etc/sysctl.conf
# speed up git status (to run only in chromium repo)
git config status.showuntrackedfiles no
git update-index --untracked-cache
# faster git server communication.
# like a LOT faster. https://opensource.googleblog.com/2018/05/introducing-git-protocol-version-2.html
git config protocol.version 2
# see also "A Chromium Compiling Setup for DevTools Hackers"
# https://gist.github.com/paulirish/2d84a6db1b41b4020685
# also this unrelated thing
# git config user.email "[email protected]"
##############################################################################################################
### remaining configuration
###
# go read mathias, paulmillr, gf3, alraa's dotfiles to see what's worth stealing.
# prezto and antigen communties also have great stuff
# github.com/sorin-ionescu/prezto/blob/master/modules/utility/init.zsh
# set up osx defaults
# maybe something else in here https://github.com/hjuutilainen/dotfiles/blob/master/bin/osx-user-defaults.sh
sh .osx
# setup and run Rescuetime!
###
##############################################################################################################
##############################################################################################################
### symlinks to link dotfiles into ~/
###
# move git credentials into ~/.gitconfig.local http://stackoverflow.com/a/13615531/89484
# now .gitconfig can be shared across all machines and only the .local changes
# add manual symlink for .ssh/config and probably .config/fish
###
##############################################################################################################