Over the past few years I’ve been trying to find the perfect window manager for me. Some have had the correct features, but terrible behavior. Some turn me off with painful programming languages. Others have horrible authors who are bat-shit insane. What follows is a chronicle of my progression through various window managers, and a brief overview and review of each.
I started the journey long ago with Ion3. My main problem with it was the terrible default configuration. Hundreds of lines of incomprehensible Lua means that it’s very difficult to write a proper laptop status bar. I slogged through, learned Lua, and eventually came up with something that was usable. Then I learned of the author’s bat-shit insane-ness. Not wanting to get sued, I switched away. I wanted something that was easy to understand and script with a “large” install base.
WMII was my next choice. Coming from only using one tiling window manager, I had no idea if any used standarized key bindings. Ion used the F[1..12] keys for operations, while wmii uses the standard Mod+[A..z] combinations. There were a few problems, such as lacking a default way to resize tiles using the keyboard, and having non-persistent tiles. It also lacks a way to have an invisible “pop-up window” like the one that Ion3 uses. WMII uses a column-based layout, so it is impossible to have a layout such as 2 terminals tiled horizontally beneath a browser window. Overall though, I was happy with the system. All of the scripting is done in bash, which is the most familiar to me. It also has a very cool structure that uses libixp and plan9.
That is, until I tried to use multiple monitors. WMII has no Xinerama support, so trying to launch something simple such as a terminal meant that it was stretched across both displays. It’s still usable, but it meant that I was constantly playing janitor, which was the primary reason I left traditional window managers in the first place! Some of my coworkers happened to be window manager snobs too, and I overheard them discussing another tiling window manager called AwesomeWM. Logically that was my next choice on my desktop.
AwesomeWM is a second generation descendant of WMII. WMII begat DWM and DWM begat AwesomeWM. It to me was a harder transition than from Ion3 to WMII. Some paradigms are different, such as having ‘master layouts’ for tiles. I’m still not comfortable with this concept, and prefer to have freeform layouts. Likewise, window focus scrolling is done in a clockwise/counter-clockwise fashion instead of the familiar cardinal direction movement. The scripting was also a step backward, relying on the same Lua engine that Ion3 did. The default configurations were much more readable however, and I was able to modify them without too much trouble. I didn’t want to get stuck using it daily, so I kept trying to find a way to shoehorn Xinerama support into WMII.
Which someone did for me. Enter i3, a remake of WMII, but using the same XCB goodness that AwesomeWM does. It had the Xinerama support I had been craving, scripting is still done through the bash, it lacks the plan9 filesystem to save weight, and allegedly supported row-and-column layouts. Some of the things left out are the aforementioned plan9 filesystem, a status bar(they recommend dmenu. Key bindings were (intentionally?) slightly different than WMII, but easy to replicate. The problem was that i3 wasn’t done. I had been using version i3-3.?, which lacked some of the promised features. Regardless, I’ve happily been using it at work for the past few months. On single-head systems like my netbook, I’ve still been using WMII.
WMII has been chugging along on all the rest of my systems until today. Exploring some of the new Fedora 12 features I came across a package called systemtap. I emerged it and used the example script fork-nd.stp. This script attaches to the kernel and reports whenever a new process is created. It revealed that 11 processes were created just to launch a terminal(urxvtc). Likewise, it took 2 processes simply to change focus on a window. The default status bar, which merely displays load and the time was creating 3 processes per second! No doubt this had a very adverse effect on battery life.
All day since I’ve woken up, I’ve been perusing new tiling window managers to try. Primarily I’ve been searching for the ones linked to through Wikipedia. Ones catching my eye have been DWM, although it succumbs to the same master layouts problem of AwesomeWM. Others I still must investigate include ScrotWM, TrsWM, echinuswm, and TritiumWM.
The one that caught my eye today, and I have been experimenting with is Musca. It too lacks status bar and launcher features. It uses the dmenu launcher by default, and I will probably end up using the same dzen2 configuration from my i3 setup. Key bindings are very different than what I was used to, with some extra features I didn’t know were possible. It has some features that hark all the way back to Ion, such as having serveral window pixmaps in one tile, then cycling through them. It has a concept that a tile, and the applications within the tile being different. Configuration is done through a header file, so binary distribution is pretty useless. To modify the configuration, edit the header file, recompile, reinstall. Since it’s not the only program that does this, the Gentoo folks have a system all figured out for systems like this through an eclass called saved_config. Simply edit the /etc/portage/savedconfig/x11-wm/musca-0.9.23 file, then sudo USE=”savedconfig” emerge musca to change settings.