The purpose of this script is to provision a new machine running a fresh install of macOS. It installs and configures the software, dotfiles, and general preference I use for Ruby-based web development. The command line environment is based on Zsh (via Oh-My-Zsh), Vim and Tmux running in iTerm2.
The bootstrap
script is very specific to the Mac platform. It has been successfully tested on the following versions of macOS:
- El Capitan (10.11)
- Sierra (10.12)
▹ Looking for dotfiles only? Check out My Dotfiles for macOS
Make sure your software is up to date:
sudo softwareupdate -i -a
Install Apple's command line tools:
xcode-select --install
Reboot, check for additional updates, then reinstall, reboot if needed.
sudo softwareupdate -l
sudo softwareupdate -i -a
Sign in to your iCloud account: System Preferences > iCloud. (If you don't sign in before running the bootstrap
script, mas-cli
will not be able to install apps from the Mac App Store.)
To install with a one-liner, run this:
curl --remote-name https://raw.githubusercontent.com/tadelv/mac-bootstrap/master/bootstrap && sh bootstrap 2>&1 | tee ~/bootstrap.log
Want to read through the script first?
curl --remote-name https://raw.githubusercontent.com/tadelv/mac-bootstrap/master/bootstrap
less bootstrap
sh bootstrap 2>&1 | tee ~/bootstrap.log
WARNING: This script will ask for your admin password multiple times. You'll need to babysit it for a while. :)
When you invoke bootstrap
, here's what it does:
- Step 1: Run my adaptation of thoughtbot's Laptop script. This is a provisioning script which installs lots of goodies like Homebrew, rbenv, postgres, etc. My version is now stored locally in this repo under
install/laptop
. Step 1 also sets up a Brewfile, installing a variety of Homebrew packages, casks, and now Mac App Store apps! - Step 2: Install Oh-My-Zsh.
- Step 3: Install NVM for managing Node.js versions.
- Step 4: Clone My Dotfiles for macOS and symlink them to
$HOME
. - Step 5: Install various executable scripts (for Tmux and Git) to
$HOME/bin
. - Step 6: Install Tmuxinator for managing tmux sessions.
- Step 7: Install Ukrainian spell-check dictionaries.
- Step 8: Install several fixed-width fonts.
- Step 9: Install Vundle and plugins for Vim.
- Step 10: Set a variety of macOS defaults. (adapted from https://mths.be/macos) Step 10 also customizes the macOS dock.
NOTE: Previously, I used the bootstrap
script to set up many of the standard directories I use in my work. But since I now have Dropbox Pro, all those directories are downloaded automatically after Dropbox is installed. Once they've synced, I symlink them into place in $HOME
.
After running bootstrap
there are still a few things that need to be done.
- Restart your machine in order for some changes to take effect.
Install software from Mac App Store.(Thank you mas-cli!)- Complete Brew Bundle with
brew bundle install --global
- Set up iTerm2 profile (see details below).
- Add personal data to
~/.gitconfig.local
and~/.zshrc.local
. - Set up desired macOS keyboard shortcuts (see list below)
Thanks to a great blog post by Trevor Brown, I learned that you can quickly set up iTerm2 by exporting your profile. Here are the steps.
- Open iTerm2.
- Select iTerm2 > Preferences.
- Under the General tab, check the box labeled "Load preferences from a custom folder or URL:"
- Press "Browse" and point it to
~/dotfiles/iterm2/com.googlecode.iterm2.plist
. - Restart iTerm2.
These are my (current) primary macOS keyboard shortcuts:
- Alfred: ⌘Space
- Spotlight search: ⌘⇧Space
- Switch input source: ⌃⇧Space
- Fantastical: ⌥⌘Space
- OmniFocus: ⌃⌥Space
- iTerm2 hotkey window: ⌥Space
- Remap Caps Lock to CTRL (anyone know a way to automate this?)
- Dash: ⌃⇧K (in hub mode)
No one else's development setup will ever be a perfect match for you. That said, if your needs are close enough to mine, you might benefit from using the same shell scripts and overall structure, and just swapping out the particulars with your own. Here's my recommended approach to doing that:
-
Fork this repo and clone your new fork to your local machine.
-
Review the 10 steps in
bootstrap
and make your own customizations. Here's an overview of what's going on:
- Step 1 (required): Take a look at Laptop and see what you might want to tweak. One of the biggest things is the Brewfile, which you can find in this repo under
install/Brewfile
. Here you can customize all the packages, casks, and MAS apps that will be installed. Laptop also sets up some basics that are required by the bootstrap script later on. - Step 2 (recommended): Use
oh-my-zsh
? - Step 4 (required): The dotfiles. Update the
$DOTFILES_*
variables (seebootstrap
under "Variable declarations") to reference your dotfiles. As a starting point, you can fork mine and then point to your fork. - Step 5 (recommended): Install scripts to
~/bin
? - Step 6 (recommended): Install and configure Tmuxinator?
- Step 8 (optional): Install fixed-width fonts?
- Step 10 (optional): Review general macOS settings in
install/macos-defaults
and adjust as needed.install/macos-dock
ensures that the dock contains only the apps you select. Adjust as desired. (NOTE: Themacos-dock
script depends on thedockutil
package installed by Homebrew.)
-
Create
~/.gitconfig.local
and~/.zshrc.local
and add in your personal information. These files are sourced in~/.gitconfig
and~/.zshrc
respectively. -
Update the README with your own info, instructions/reminders so you don't forget what you did, and especially the correct install URL:
curl --remote-name https://raw.githubusercontent.com//mac-bootstrap/master/bootstrap && sh bootstrap 2>&1 | tee ~/boostrap.log
-
Run the script on your machine and wait for the first error. :) Then fix, commit, push, and repeat.
- Pro Vim (https://github.com/Integralist/ProVim)
- Trevor Brown (https://github.com/Stratus3D/dotfiles)
- Chris Toomey (https://github.com/christoomey/dotfiles)
- thoughtbot (https://github.com/thoughtbot/dotfiles)
- Lars Kappert (https://github.com/webpro/dotfiles)
- Ryan Bates (https://github.com/ryanb/dotfiles)
- Ben Orenstein (https://github.com/r00k/dotfiles)
- Joshua Clayton (https://github.com/joshuaclayton/dotfiles)
- Drew Neil (https://github.com/nelstrom/dotfiles)
- Kevin Suttle (https://github.com/kevinSuttle/OSXDefaults)
- Carlos Becker (https://github.com/caarlos0/dotfiles)
- Zach Holman (https://github.com/holman/dotfiles/)
- Mathias Bynens (https://github.com/mathiasbynens/dotfiles/)
- Paul Irish (https://github.com/paulirish/dotfiles)
- http://dotfiles.github.io/
- https://medium.com/@webprolific/getting-started-with-dotfiles-43c3602fd789
- http://code.tutsplus.com/tutorials/setting-up-a-mac-dev-machine-from-zero-to-hero-with-dotfiles--net-35449
- https://github.com/webpro/awesome-dotfiles
- http://blog.smalleycreative.com/tutorials/using-git-and-github-to-manage-your-dotfiles/
- http://carlosbecker.com/posts/first-steps-with-mac-os-x-as-a-developer/
- https://mattstauffer.co/blog/setting-up-a-new-os-x-development-machine-part-1-core-files-and-custom-shell
Copyright (c) 2016 Joshua Steele. MIT License