I finally got my dotfiles repo in order earlier this year, motivated by getting a new laptop and that heaving sigh that goes with the feeling of having to set everything up again.  Don't get me wrong.  There are times when a clean install and fresh start seems refreshing, but my experience has been a new computer arrives at a time when I'm already super busy trying to finish other things and something went wrong with the previous machine.

There are so many people sharing their methods and tools for organizing their dotfiles out there.  For me, the challenge in taking this on, was to scope it down to something accomplishable and iterate.  

Goals

My initial thinking around what I wanted to accomplish was:

  1. Ability to execute a one-line command to provision a clean mac with my preferred set of opensource/free development tooling, to drastically reduce recovery and/or migration time after purchasing a new computer.
  2. Start source controlling and backing up my git, fish, ssh, and vscode customizations so I don't lose/forget awesome git customizations like:
git config --global pull.rebase true
git config --global rebase.autoStash true

github

  1. Remember some OS X settings I have customized.
  2. Have a home for those useful short scripts that one accumulates over the years, such as this ruby mass-rename w/regex script that came from somewhere in the bowels of stackoverflow:
#!/bin/bash
# usage: renameall oldstring newstring filepattern
ruby -e "a = ARGV.shift; b = ARGV.shift; ARGV.each{ |f| File.rename(f, f.gsub(a, b)) }" "$@"

github

Surprises

One surprise and news to me was that many popular mac desktop apps, such as 1Password, Paw, Slack, VirtualBox, NvAlt, Vscode, etc  can be installed without user interaction via brew cask install [app] github

I also had no idea the extent to which OS X settings can be customized via command-line.  I had stumbled across a defaults write ... command here and there on stackoverflow, but the world of possibilities was not illuminated for me until I saw Mathias's os x defaults script, which I ended up customizing and extending here.

Stop me please

Alas, I didn't get to completely eliminating manual steps.  But that's ok.  I'm reminded of this XKCD chart any time I feel that urge to push something to the nines.

Is it worth the time

So I ended up jotting some notes to remind my future self of a few remaining manual steps that didn't seem to lend themselves to scripting.