I prefer Unix-like operating systems that are free software. I'm mostly a Linux user, on a variety of devices, with occasional forays into FreeBSD. I use my own GARStow distribution, along with Debian GNU/Linux. I usually design software to run on any modern Unix-like system.

I use roughly the same suite of software across a wide range of systems; here are the programs I use, and some rationale.


Both rxvt-unicode and Thomas Dickey's xterm. Both have excellent Unicode support. rxvt-unicode has tidier font selection support, including selecting characters from multiple X and Xft fonts for better cross-language support, and can run as a daemon for quicker startup on low-memory systems. xterm can synthesise bold variants of fonts, and has slightly better classic terminal emulation.

All my text-based applications live in a single large tmux session, to which I attach from wherever I'm working. The ability to have multiple terminals of different shapes attached to the same session is really useful; I've typically got a few dozen terminals attached to my session. (I used to do the same with GNU Screen, but tmux is much more reliable, although it has a clunkier interface.)


GNU bash, although since I'm a very conservative shell feature user, I'm just as happy in pdksh, mksh or zsh. bash is ubiquitously available and has good Unicode support.

Window manager

Openbox, for a combination of standards compliance and text-based configurability (although I wish it didn't use XML as its config file syntax).

I remap Caps Lock to be a Meta modifier key, and use that for a load of window-manager-related and application-launching shortcuts. (This is how I discovered that the IBM Model M keyboard doesn't respond to Caps Lock-Shift-2 as a combination.) I've got single-key shortcuts to launch terminals in various sizes, and to kick off dmenu for running a single command. I also use shortcuts for common window management operations — for example, to move a window to an edge of the screen and maximise along that edge, or to tile windows across the screen.

System monitoring

After years of simpler and simpler monitoring configurations, I'm now down to just the clock, CPU load, and battery status (on laptops) in my termbar program.

Web browser

I use Firefox. (I used to complain here about it being memory-hungry, but it's actually got a lot better as a result of recent work, and given that even the weediest ARM board I use has half a gigabyte of RAM now it's less of a concern.) Firefox still has a number of useful features that haven't made it into any of the other free browsers yet: decent typography through pango (unlike WebKit browsers), working custom stylesheet support, and a good range of extensions. Extensions I use include Adblock Plus, Greasemonkey, It's All Text!, HTTPS Everywhere, Certificate Patrol, NoScript, Open In Browser and Tree Style Tab. I have some GM scripts that fix various kinds of broken HTML.

I use ELinks when I don't have X available. It's nice being able to bounce between the source and the rendered version, and to view the source of arbitrary URLs without needing to worry whether the browser knows it's a text type or not.

Mail client

Mutt does everything I want: it's text-based, it's quick, it's easy to customise for different accounts, it understands plenty of mailbox formats, and it does GPG correctly.

My customisations include some PINE-like keybindings. A long time ago I used to be a PINE user, and my brain hasn't recovered yet.

Text editor

VIM, usually. I started using this on the Amiga, and these days I use it for pretty much everything; fast, accurate syntax highlighting and being able to type ex commands when I need to do something complicated are the two key features.

I don't use GNU Emacs much as an editor these days, but it's a great virtual machine for programs that need to deal with text — I always have at least a couple of Emacs sessions open running Gnus and Org-Mode.


Gnus within Emacs. The killer feature is that it'll happily treat mail folders as newsgroups, so I can deal with mailing lists transparently. I'm using the nnimap backend with the Dovecot imapd, since I've got lots of mail folders and nnmaildir's performance is pretty awful.


Org-Mode within Emacs. The calendar display is good enough, and keeping everything as plain text means that I can easily synchronise my calendar and random notes around using a version control system. (I don't really use org-mode's to-do lists, except through the calendar.)

File manager

ROX-Filer. I do some file management at the command line, but for finding things quickly and moving files around, ROX-Filer provides an excellent clone of the RiscOS file management interface, which I happen to like a lot. It handles large directories well, and the filtering and sorting features work really nicely for things like photo management and dealing with MythTV recordings. I use drag-and-drop into applications rather than file dialogs wherever possible.

I wasn't very happy with the loss of the Details view in the ROX-Filer 2.0 series; even after some modification, I still don't find the List view usable, since it completely changes the mechanisms used for group selection and drag-and-drop. My ROX-Filer is patched so it's got an option to make the column views always be a single column wide by default.

Music player

Potamus, my replacement for GNU xhippo (which I also wrote). The Potamus UI contains essentially the only features I ever use.

However, it's probably worth noting that the bulk of the listening I do these days is with a Sansa Clip+ running the excellent Rockbox free-software firmware.

Video player

MPV, which copes perfectly with a wide variety of video formats, handles wacky stuff like subtitles and multichannel audio streams appropriately, and has a nice simple keyboard interface. (MPV basically fixes all the minor complaints I had about MPlayer, and leaves all the features I like!)

VLC is also excellent; I use it for satellite TV viewing.

Graphics editing

GIMP. No complaints; having never been an Adobe Photoshop user, GIMP's interface makes perfect sense to me. (Or, rather, it used to until they started changing it to be more like Photoshop's — argh!)

For rotating large numbers of photos and similar, gthumb is my tool of choice (but the GTK 2 version, please; the GTK 3 versions are horrible). When I need to script graphical work I'll use GraphicsMagick and NetPBM.

Audio editing

For small jobs such as mastering lecture recordings, mhWaveEdit — nice snappy UI, and does JACK properly.

For multitrack recording and serious editing, Ardour is a great bit of software.

"Office" stuff

For word processing, I use VIM and LaTeX, since that lets me produce documents that look nice with the absolute minimum amount of hassle. It's hard to beat LaTeX for academic — and especially collaborative — writing, and it's a pretty sad reflection on the software industry that nobody's produced anything in the last 30 years that matches its output quality, or deals with references as easily.

For slides, spreadsheets, drawing diagrams, and dealing with documents in proprietary formats, LibreOffice does the lot. Instant good-quality PDF export is a particularly useful feature.


One of my window manager keybindings is a single key to bring up a Python REPL — which does everything I could possibly want as a calculator, and high-end statistics and graphing are only an import scipy away.

For generating charts, I use gnuplot; it's one of those tools where pretty any feature I want is probably there, somewhere, if I can navigate my way through the creative help mechanism...


Irssi. I've twiddled a lot of configuration settings and created my own theme to make irssi fit into my setup (and brain) a little better. It supports everything I could want from an IRC client, and works nicely with multiple channels in text mode.

For XMPP, I use bitlbee as an gateway to IRC.