Like many UNIX users, I have a tendency to spend lots of time engineering a perfect operating environment. Here are some details on the software I like to use on my desktops, with all the tweaks I've made to them, excluding things like vi and basic UNIX utilities. All the tweaking took too much time, but it made me happy. One thing I've learned over the years is that usability and learning curve are completely separate things, and are often inversely proportional. Many software packages that take longer to learn make you more productive in the long run. If you're a casual computer user, this often means that traditional GUI apps with short learning curves are best for you. If you spend a serious amount of time on them, it's worth investing in more challenging, but ultimately more rewarding software.


The OS that I use for almost everything. I do have to keep OSX around for audio recording and sequencing, but having an OS that isn't ruled by a corporation and where all applications are free, modifiable and have no DRM is simply a beautiful thing. No license headaches, no "warez", no viruses, and low resource consumption. I've tried most every OS, and I always come back to FreeBSD. It's not for everyone, but it's very much for me.


zsh is my shell of choice, because it's forgiving of my wanton mashing together of csh and ksh-isms, and because its tab completion is brilliant (if dog slow). I've set up completions to finish URLs for w3m, hostnames for ssh, package names on remote FTP servers, hostnames from LDAP servers, etc. It does many tricks. My zshrc.


After probably 10 years of using WindowMaker/Blackbox/Openbox, awesome finally pulled me away. Of course, the author of awesome has since gone insane and crammed in tons of widgets and Lua support, so I switched to dwm.

So now I use dwm. It's incredibly small and efficient, and follows the UNIX philosophy. The idea of tiling window managers is that all screen real-estate should be maximally used. Ideas like docks or menubars are not generally compatible with this. So, rather than cluster apps in a menubar, windows take up as much space as they can get and arrange themselves automatically. Resizing or moving windows manually is almost never necessary, and the keyboard can be used for almost all navigation. Virtual desktops are replaced with "tags", which can be merged into each other.

The script, started from my .xsession file, sets the status bar to have the current machine load, battery life, and time/date. I also use the ``push'' and ``gaplessgrid'' patches.

You can compare my current dwm config.h to an equivalent awesome rc.lua.


Mutt is hands down the best mail client I've found. I've tried many, and I still like Thunderbird, but mutt is so much faster, more flexible and featureful that I can't stop using it. I hate it and love it - there's nothing it cannot do. It handles mailing lists great, supports pattern matching for tagging or deleting, and does proper threading. I have a little mailcap that uses the mutt_bgrun script to spawn a GUI app for handling attachments, or just converts the attachment to text and views it inline (if I'm not using a GUI desktop). It uses programs to convert Excel, Word, HTML, and images to plain text. Check out my .muttrc.


cmus is to music what mutt is to e-mail. It's console-based, very fast, and has pretty much every feature you'd want. I used to be very into Amarok, and I still use it for some things, but cmus starts instantly, is unobtrusive, and can be made to do lots of nice tricks like integrate into I particularly like the lqueue and tqueue functions (my ideas!), which are basically "party shuffle" for albums or tracks, respectively. I use this status script to update things on track change. It does the following:

w3m is deceptively featureful. It's a text-only web browser, but it does a great many things, and I find myself using it quite often. Among its many features:


A vastly under-appreciated HTTP and FTP server. There are relatively few services facing the external world that I run, and I demand that the ones that I do (with the sad exception of OpenSSH) be bulletproof, lightweight, and never have any security problems. Publicfile is all of those things, plus it's trivial to set up and configure and delightfully minimal.


As with publicfile, I run this because it's simple, easy and has no possibility of security issues. On most of my systems I use a local dnscache, so I never have to worry about DNS issues when moving my systems around or external DNS servers going down. It's fun to sit around watching the same BIND exploits happen over and over again and never have to worry.


I had always wanted something like calcurse, and only recently found it. It does everything I want in a calendar and todo list, all in a terminal window, with a simple interface. And, it handles iCal import and export.


I actually use this as my home recording solution. It's cross-platform, functional, and free. Quality audio software is really hard to find for free - it turns out audio programming is hard - so I appreciate this software all the more.


For over a decade I've used screen for running multi-window sessions on remote machines. I've only recently switched to tmux, which fulfills much of the same purpose but with some more modern and desirable features (and a BSD license).


I had never used LaTeX before last year, but took to it quite quickly. I'm becoming more and more convinced that WYSIWYG document creation has some serious disadvantages. Using LaTeX at work has made document creation much less stressful and easier for me. It certainly has its infuriating annoyances, but not nearly to the degree which OpenOffice and MS Word have. Well, to be perfectly honest, LaTeX sucks, but I haven't found anything that sucks less. And as is probably readily apparent, I enjoy learning arcane skills that yield superior results.