Dotfiles & Auto Provisioner

A ruby script which automatically bootstraps a new machine with all my settings, configurations, dotfiles, and more.



The Problem

I'm obsessed with efficiency when it comes to my development environment. I love tweaking my vimrc, finding new packages online, or writing small utility scripts so that I can work faster. Even the delay between key presses is important to me. At this point, I've customized most things on my computer to suit my needs.

When I started a new job I was given a brand new mac. As excited as I was to be rocking new hardware, it quickly dawned on me the extensive road I had ahead of me to get it up and running. So many binaries to install and so many config files to copy! Furthermore, even when I got my work computer up and running, it would be different from my personal computer. If I ever wanted to work on something on both computers there would likely be environment issues.

The Idea

The tool junkie in me got an itch and I set out to solve this problem. My goal was to automate the bootstrapping of a new dev machine with all my binaries, utility scripts, config files, computer settings, and so forth.

Step 1: Install system level packages

First it installs all my homebrew kegs, such as...

  • zsh
  • fzf
  • tmux
  • git
  • neovim
  • yarn

Then it installs all my homebrew casks, such as...

  • 1password
  • Alfred
  • Chrome
  • Iterm2
  • Docker
  • Slack

Step 2: Install Programming Languages

I use Ruby as my primary programming language. While OSX comes with a default Ruby installation, it's usually far behind the current stable version. To bypass this, I use chruby and ruby-install to install the latest stable version of Ruby and set it as my default Ruby system wide.

Step 3: Install Language Specific Packages

At this point I have Ruby and Node installed. The script then installs any Ruby Gems or NPM packages.

Step 4: Configure ZSH

At this stage, I've already installed ZSH via Homebrew. The next step is to install Oh-My-ZSH, and configure ZSH to be my default shell.

Step 5: Symlink Dotfiles

One of the best parts of this project was migrating all my different dotfiles, such as my vimrc or zshrc, to a single, version-controlled repository. However, these dotfiles have to live in the right directories to take effect. At this stage, the script symlinks the files to their correct locations. Some examples...

  • Symlink my zshrc to my root directory
  • Symlink my gitconfig to my root directory
  • Symlink my tmux config to my root directory
  • Symlink my gitconfig to my root directory
  • Create the correct directory structure for my vimrc and colorschemes and symlink them

Step 6: Install Vim Plugins

At this stage I have Neovim installed. However, none of the plugins referenced in my vimrc have been installed. This stage installs all those plugins so I have a fully functioning code editor.

Step 7: Miscellaneous

The last step does a variety of miscellaneous tasks. Some examples include...

  • Enabling italics in neovim
  • Setting my wallpaper images and specifying how frequently to transition through them
  • Setting the OSX Dock to be hidden by default
  • Setting a screenshot directory so that screenshots don't clutter my Desktop
  • Enabling certain applications to start on boot.

Step 8: Manual Labor UGH!

At this stage, the automated process has completed. There are still certain steps that I need to take to finish bootstrapping my computer that either cannot be automated or I was too lazy to automate. Some examples include...

  • Create new SSH keys for Github
  • Configure hot keys for certain applications
  • Modify the default directories in Finder.
  • Create Github API tokens and store them locally