Out on the tiles

I’ve been experimenting with tiling window managers recently. I tried out awesome and xmonad, and read documentation on several others including dwm and wmii. The prompt cause is that I’ve been doing a lot of surgery on large repositories recently, and when you get up to 50K commits that’s enough to create serious memory pressure on my 4G of core (don’t laugh, I tend to drive my old hardware until the bolts fall out). A smaller, lighter window manager can actually make a difference in performance.

More generally, I think the people advocating these have some good UI arguments – OK, maybe only when addressing hard-core hackers, but hey we’re users too. Ditching the overhead of frobbing window sizes and decorations in favor of getting actual work done is a kind of austerity I can get behind. My normal work layout consisted of just three big windows that nearly filled the screen anyway – terminal, Emacs and browser. Why not cut out the surrounding cruft?

I wasn’t able to settle on a tiling wm that really satisfied, though, until my friend HedgeMage pointed me at i3. After a day or so of using it I suspect I’ll be sticking with it. The differences from other tiling wms are not major but it seems just enough better designed and documented to cross a threshold for me, from interesting novelty to useful tool. Along with this change I’m ditching Chatzilla for irsii; my biggest configuration challenge in the new setup, actually, was teaching irssi how to use libnotify so I get visible IRC activity cues even when irsii itself is hidden.

One side effect of i3 is that I think it increases the expected utiliity of a multi-monitor configuration enough to actually make me shell out for a dual-head card and another flatscreen – the documentation suggests (and HedgeMage confirms) that i3 workspace-to-display mapping works naturally and well. The auxiliary screen will be all browser, all the time, leaving the main display for editing and shell windows.

It’s not quite a perfect fit. The i3 model of new-window layout is based on either horizontally or vertically splitting parent windows into equal parts. While this produces visually elegant layouts, for some applications I’d like it to try harder to split space so that the new application gets its preferred size rather than half the parent. In particular I want my terminal emulators and Emacs windows to be exactly 80 columns unless I explicitly resize them. I’ve proposed some rules for this on the i3 development list and may try to implement them in the i3 codebase.

I’m not quite used to the look yet. On the one hand, seeing almost all graphics banished from my screen in favor of fixed-width text still seems weirdly retro, almost as though it were a reversion to the green screens of my youth. On the other hand, we sure didn’t have graphical browsers in another window then. And the effect of the whole is … clean, is the best way I can put it. Elegant. Uncluttered. I like that.

Even old Unix hands like me take the Windows-Icons-Mouse-Pointer style of interface for granted nowadays, but i3 does fine without the I in WIMP. This makes me wonder how much of the rest of the WIMPiness of our interfaces is a mistake, an overelaboration, a local peak in design space rather than a global one.

I was willing enough to defend the CLI for expert users in The Art of Unix Programming, and I’ve put my practice where my theory is in designing tools like reposurgeon. Now I wonder if I should have been still more of an – um – iconoclast.