skip to content
A logo Linell asked a nice AI to create. Linell Bonnette

My Development Setup

/ 6 min read

11/09/2020: updated to add autojump.

I spend a lot of time on my computer, so I enjoy tweaking things to match my preferences. I have my setup honed in pretty well for my day to day use but I’ve never really kept track of what all tools I actually use or how I have them configured. Here’s a rough stab at what I use everyday:

Tools

iTerm2

iTerm2 is a terminal emulator for macOS that does amazing things. It’s got an impressive set of features but I’m going to be honest on this one: I’ve been using it for so long that I’m not even 100% why I started. I use the advanced paste feature relatively often when copy-pasting code from a vim buffer into the Rails console, but most of the other features are honestly covered by other tools that I use.

I briefly tried Alacritty recently but experienced an issue where sometimes output would get suck and the only fix was to kill the window completely, which got old very fast.

I should probably revisit iTerm2 and see what I would miss if I were to just use the built in Terminal app, but for now let it suffice to say that iTerm2 has been rock solid for years.

tmux

tmux is a terminal multiplexer that lets you “switch easily between several programs in one terminal, detach them (they keep running in the background) and reattach them to a different terminal.” If that sounds a little Greek to you don’t worry: it lets you have a bunch of terminal windows inside of a single terminal window. When you close the Terminal.app window the tmux session doesn’t have to close, so you can have a persistent session sitting around (and running things!) even if it isn’t currently on your screen. I use this primarily for organization and consistency. I’ve got a full screen terminal window that has several panes for each project I’m working on and at least one dedicated to SSH so that I don’t forget I’m on server and not local. Each of those panes can have several processes running in them without me needing to have ten different application windows floating around.

Now, as I briefly mentioned when talking about iTerm 2, you don’t have to have to have tmux for this functionality. iTerm2 lets you split windows until your heart’s content. I’m going to be honest here though:

  1. My windows from tmux look better.
  2. The ability to attach and detach is awesome.
  3. tmux lets me do a vim-esque copy paste that comes in very handy.

tmux is sort of like iTerm in that I’ve been using it so long that I’m not even sure what all it actually does. It’s just part of my workflow that I’ve become accostomed to at this point. Here is my tmux configuration file if you’re curious about any bit of how I interact with tmux.

Zsh + OhMyZsh

OhMyZsh is an open source framework for managing my Zsh configuration. There are lots of reasons to use Zsh as a replacement for your usual bash shell. For years I used a coworker’s configuration modified for my own use and that was great, but I wanted to up my game so I started using my own, from scratch, configuration.

Turns out there’s not a ton of reason to, at least for me. I just end up with more things I’ve got to care about in my setup. These days I use OhMyZsh pretty much completely stock. I’ve got a few plugins enabled that make my life easier but nothing that isn’t pretty standard with OhMyZsh.

ZSH_THEME="robbyrussell"
plugins=(
autojump
docker
gem
git
git-extras
rbenv
tmux
)

Those are the only relevant bits from my configuration to get the exact setup that I’m running at the time of this writing.

Long story short: Zsh is very cool and OhMyZsh makes it so ridiculously easy that there’s no reason not to use them both (well I’m sure there are, but let’s be real: you know if you’re one of the people who shouldn’t).

Vim

I’m a big fan of Vim for 100% of my text editing needs. I haven’t really used anything else to edit code since 2014, and I don’t really have a reason to change that any time soon. I use Neovim as a replacement for Vim and it’s been as solid as a rock with literally zero problems that I can recall. Instead of trying to explain everything I’m using, I’ll just post my ~/.config/nvim/init.vim to a Gist..

Everything should be pretty Google-able. I use Plug as a package manager, so it should be easy enough to get everything setup pretty easily… but I also don’t remember many of the installation instructions.

Things I know you have to install:

  • RipGrep for blazing fast text searching.

DBeaver

DBeaver is a free multi-platform database tool. I think it’s important to be able to dive into databases and this is the best tool I’ve found for the job. DBeaver is firmly a better tool than I need, but it’s free and I’ve never needed to do something that I couldn’t figure out how to do via DBeaver.

Hammerspoon

I use Hammerspoon mostly as a window manager. I’ve got key combinations set up that let me easily move windows around in a grid and an easy way to see what song is playing via Spotify, but those two things are both each worth the installation alone and I’m barely scratching the surface of the plethora of things you can do with Hammerspoon.

Fun fact: the Hammerspoon website is one of my first open source contributions! It’s not as pretty as I remembered it being, but I’m still pretty proud to have my work so visible on a project I use every day.

Autojump

Autojump is a “faster way to navigate your filesystem” that, to make a long story short, lets me plop j api into a terminal to automatically jump to my most frequently used directory that matches the string “api”. This has become second nature and, while I won’t pretend it’s saved me hours of time, it’s definitely handy.


Questions? Comments? Suggestions? Let me know on Twitter! I know this list is pretty incomplete but I’m planning on keeping this page updated as I find new things or remember old ones.