Setting up a Mac for Software Development

June 2019 ยท 3 minute read

Author’s note: This is not meant to be a generic guide for other people to follow. This is specific to the things I use, and I really only wrote this to keep track of what I did. I realize that isn’t useful, but presumably I will have more to say after I’ve used this machine for a while.

New $DAYJOB, new work machine and development environment. I have long forgotten to detail setup steps, so I figured writing something up would potentially be useful for me to reference in the future.

I haven’t used a Mac in some time - I had a G5 or a G4 years and years ago, played World of Warcraft on it, got bored and installed FreeBSD. Long live real Unix.

At the time I wasn’t a professional software developer - just a teenager trying to enjoy my free time. I don’t remember the ease of installing dev tools, as I mostly used nano and a shell box. Even if I remembered anything, dev tooling on all OSes has changed so much that it wouldn’t be useful, anyway.

So - first things first, I looked into tooling that Mac devs use.


It seems that the de-facto tool for installing various dev tools and applications is Homebrew. Personally, I’m not fond of polluting /usr/local even on my main machine despite the fact that /usr/local exists for that reason. Typically, I install things to $HOME/.local.

While this isn’t recommended for Homebrew, I did it anyway. I don’t know enough about this OS yet to say whether or not it was a silly idea, but I’m sticking to it.

To do this, I ran:

mkdir .local
git clone .local/brew
export PATH="$HOME/.local/brew/bin:$PATH"
brew doctor

There were a few directories I needed to create and take ownership of, and brew doctor should give a friendly list of commands to run.


I like Alacritty, but I hear good things about iTerm2. I decided to stick with something familiar and will experiment with iTerm2 in the future.

Installing Alacritty was simple:

brew cask install alacritty

Due to the way Mac “applications” work, this installed into /Applications. It’s owned by my user, so I guess that’s fine, even if I’d rather it end up in my home directory.

To get back to parity with my other machines, I cloned my dotfiles into ~/.local and symlinked them. Realizing that the zsh version was super old, I installed an updated version:

brew install zsh

Followed by a clone of oh-my-zsh:

git clone .oh-my-zsh

I use this on other machines so my .zshrc already expects it. Since now I’ve got a variety of machines using this setup, I needed to add something to my .paths so I could conditionally insert brew into the path:

if [[ "$OSTYPE" == "darwin"* ]]; then
    export PATH="$HOME/.local/brew/bin:$PATH"

Everything Else

At this point, I’m almost set up. To do work, I needed neovim and its dependencies.

brew install neovim
brew install python3
brew install python2
pip3 install neovim
pip2 install neovim

Ran neovim, :UpdateRemotePlugins, presto. Done.

Last but not least, Firefox and Thunderbird!

brew cask install firefox
brew cask install thunderbird

The End

I’m sure there’s a Mac user out there laughing about things I’m missing or did wrong. Feel free to ping me - c at the obvious domain. I’ve been out of the Mac ecosystem for a very long time, but it’s close enough to what I’m used to terminal-wise… time will tell if that holds up.