Revamping my development toolchain

It used to be that once a year I would take a good, hard look at the tools I used and endeavor to learn something new or change my workflow with those tools. However, I’ve been living the #startuplife for the past two years, so it’s been about three years since I last addressed my development toolchain. I decided to come up for air and take some time this weekend to rectify that by addressing five main areas: my terminal emulator, my shell, my terminal multiplexer, my IRC client, and my color scheme—yes, even my color scheme! In addition, I decided to push out my updated Octopress-powered blog, even though things are still a little rough around the edges.

Switching to iTerm2

I’ve been a long-time user of Terminal.app, but I had been hearing good things about iTerm2. I actually used iTerm (version 1) years ago, but I switched back to Terminal.app for reasons I cannot recall. Nevertheless, iTerm2 has come a long way, and I wanted to take advantage of some of its functionality like split panes, better full-screen support, etc. So, that was the first major change I made to my tools.

Ditching bash for zsh

Bash has been my favored shell since I began using Linux about fourteen years ago. I’d never given much thought to using a different shell, and to be honest, switching shells always seemed a daunting task. I thought I’d have to relearn my way around the shell, and everything I took for granted with Bash would be non-existent in a different shell. Fortunately, this is not true. As it turns out, zsh “can be thought of as an extended Bourne shell with a large number of improvements, including some features of bash, ksh, and tcsh” (Wikipedia).

I was able to switch to zsh without ditching my knowledge of bash. As a result, I’ve gained all the advantages of zsh, which include advanced customization and scripting capabilities, while continuing to provide most (if not all) the same functionality and commands I’m used to in bash. I have much more to learn, though, so if you have tips and tricks, please share.

If you’re interested in switching to zsh, I recommend checking out oh-my-zsh. It’s a framework for managing your zsh configuration, and it contains lots of goodies. In addition, there are great posts by Mark Nichols and Jon Kinney that will get you quickly up-to-speed with oh-my-zsh. The latter post has the awesome title “It’s not enough to bash in heads, you’ve got to bash in minds…with ZSH”.

Using tmux instead of screen

Generally, I’ve really only used screen when I started noticing that my connection to a remote development machine was getting sluggish or I wanted to keep a constant connection to IRC, but tmux has opened my eyes to so many more possibilities that a multiplexer can offer. I’ve just only started using it, so I can’t say much about it, but I encourage you to read Hawk Host’s two-part post on tmux.

Moving back to irssi

I used irssi in a screen session for years. Then, I decided I needed Growl notifications from my IRC client. I quit using irssi in favor of Linkinus. I’ve used Linkinus for about two years—together with the IRC bouncer znc for some of that time—but I’ve continued to miss the flexibility and functionality of irssi. On a whim, I decided to switch back to irssi, but it wasn’t without some searching. I needed to find a way to make irssi work with growl, as well as a way to make irssi send notifications to my phone when I was marked as “away.” Finding solutions to both of these—as well as the switch to tmux—helped make the transition back to irssi much easier.

Using the Solarized color scheme

Finding the perfect, universal color scheme doesn’t sound so important until you’ve found it. Somehow, I stumble upon the Solarized project. This project has a color scheme designed for gui and terminal applications. It has been tested in a variety of lighting conditions, and it’s very clear and easy to read. Using the fixed-width Menlo font face, I quickly fell in love with Solarized. They have color schemes for iTerm2, TextMate, vim, tmux, irssi, GNU ls, and many more.

Wrapping up

I’ve put all my configuration into a dotfiles repository on GitHub to help me keep track of things. Feel free to play with my configuration and suggest improvements to it. You’ll need to install zsh, rubygems, and rake first. Then, clone my repo and run rake install. If you’re not already running zsh, change your shell to zsh with chsh -s zsh. You’ll probably want to install the Solarized theme for your terminal emulator first, too.

I know I haven’t provided a very deep dive into these tools, but I hope I’ve skimmed the surface just enough to provide you with the information you need to find out what works best for you.

Thanks for reading!