I recently had to hand over my work laptop to get repaired, because the keyboard and trackpad no longer worked at all. When I got my loaner, the first thing I did was reinstall a few crucial things that make my life as a developer so much better. Here's my list of must-haves, and a little bit on why I value each one so much.

Oh My Zsh!

I use zsh as my shell of choice, and the first thing I installed was oh my zsh, an open source framework for managing zsh configuration. Here's a few of the settings I use for managing the look and feel of my terminal, configured in ~/.zshrc:

ZSH_THEME="robbyrussell"

plugins=(git osx colorize safe-paste bower coffee gas github heroku jira redis-cli node npm nvm celery fabric pip python virtualenv brew)

# Bonus function - search all files for string except for certain folders
function grepex() {
	grep -r $@ --exclude-dir{bower_components,libs,node_modules,.git} $PWD
}

iTerm

I find iTerm to be much easier and intuitive to use that the built in Terminal in macOS. The most important setting to me is probably the Reuse previous session's directory, which maintains the directory you are in if you open a tab while focused in another tab. Otherwise it just defaults to ~. The unlimited scrollback feature is quite nice as well, especially when cating a long file or running a script that logs several thousand lines.

Homebrew

Homebrew is hands down the best package manager for macOS. All you have to do to install your database or language of choice is brew install <package> and it'll instantly be available on your command line.

NVM

For my fellow Node.js developers, NVM is an invaluable tool. It stands for Node Version Manager, and allows you to install multiple versions of Node alongside each other with nvm install v5.11.1 or whatever you want, and switching to another installed version is as simple as nvm use v6.2.0.

Screenhero

We pair a lot at work, and Screenhero is an invaluable tool for pair programming. It was just purchased by Slack and no longer has open signups, but see if you can find someone you know who can invite you!

ClipMenu

I copy and paste a LOT of things every day, and unfortunately your clipboard can only hold one thing at a time. That's where ClipMenu comes in. It can track your clipboard history, and by hitting cmd-shift-v, you instantly have access to the last 20+ things you copied and pasted. Bonus feature, it also lets you save snippets that you frequently need and don't want to go look up every single time.

Visual Studio Code

Currently my editor of choice, Visual Studio Code is Microsoft's open source editor. It features nearly every feature that other popular editors have, but has the most active development team of any editor I have seen. New features seem to crop up every few weeks for those on stable builds, and every night for those of us who run the nightly build. It also has a very active extensions ecosystem, which is also hugely beneficial. My three favorite extensions are:

  • Wallaby.js - Runs your tests in real time, and highlights code coverage right in VSCode. 100% worth the $140 I paid personally for the license. My productivity has increased immensely.
  • Can I Use - In editor caniuse.com which is super helpful for CSS development
  • CoffeeLint - Most of the code I write now is CoffeeScript, and built in linting is incredibly useful.

Slack

Slack is the communication tool we use at work, and is super helpful when it comes to pinging product folks for ticket clarification or for sharing code with colleagues. I don't think there's much more I need to say about Slack.

Bonus Tools

I can live without these, but they make life a lot easier so I figured you might want to see them too.

  • Git Up - Not maintained any more, but it works much more effectively than a regular old git pull.
  • Diff So Fancy - Makes your diffs a bit prettier and easier to read, which is all they really need.
  • uBlock Origin - Nobody wants to look at endless ads. Install this and forget they exist.
  • Dotfiles - These are the dotfiles I use. The .gitconfig one should have your username and email at the top, so copy it into your existing ~/.gitconfig.