I’ve recently been going through another crisis of faith regarding window managers. Until a few months ago, I had been happily using gnome for 1 or 2 years, but one day I got the bug to try out something else…to minimize a bit. I had been poking around in Haskell at the time, so I made a jump to xmonad.
Xmonad was quite nice: it was stable, it was “regular” once you learned its idioms, it was fast, and it was highly configurable. I spent perhaps 3 months polishing my xmonad config, getting it under my fingers, and generally nesting. But I never really got past the one thing that initially directed me to xmonad: configuration in Haskell. The deeper I got into xmonad, the more configuration I wanted, and the more I got frustrated with what I think of as the “word of god” programming style that functional programming seems to require: you have to hold a lot of state in your head, devise the perfect statement of that thought in code, and execute it. Any change to the system often requires serious reconsideration of many other aspects of the code. I’m sure much of this is my lack of sophistication with functional programming, but, be that as it may, I finally got fed up with xmonad.
By this time, though, I was hooked on the tiling approach to window management. Everything is heavily keyboard-driven, smart and consistent decisions are made for you regarding window placement, and the manager generally just stays out of your way. So I had to find an alternative.
After some poking around and a few false starts, I decided to give awesome a go. Awesome is configured and scripted via lua, has a good community, and seemed like an all-around good fit for me. To make a long story short, though, I ultimately gave up on awesome after about 2 months, and I can tell you why:
- I never liked awesome’s multi-monitor behavior. Rather than spreading logical desktops across the monitors (like xmonad), awesome maintains distinct sets of desktops for each monitor. This might work for some people, but it drives me nuts…in my mind, a desktop is a set of windows across the entire viewable area. The need to juggle monitors as well as desktops just took me out of the zone way too often.
- Try googling “awesome” or “awesome config” or, really, anything short of “configuration of the awesome window manager”: you’re not likely to get close to what you really want. This may seem like a minor thing, but it quickly go to be a pain in the ass, especially when I was first learning the new system. As you might imagine, xmonad does not suffer from this particular problem!
- Stability. For whatever reason, awesome would sometimes just crash and shunt be back to the login manager. This happened regularly on my multi-monitor work station, but I don’t recall it ever happening on my laptop, so it may have been related to xinerama, video drivers, or something like that. Regardless, it was extremely difficult to stomach, and this more than anything else convinced me to head for greener pastures.
Once again I was wandering in the wilderness, searching for the window management sweet spot. Again I looked wide and far: ion, ratpoison, dwm, bluetile, and so on. Finally, almost on a whim, I tried out wmii…and fell in love. wmii is configured and scripted using a plan-9-style virtual filesystem, meaning that it’s scriptable by anything that can read or write files…meaning that it’s really scriptable by anything you want!
The wmii multi-monitor paradigm is exactly what I want: a desktop spread across all monitors. It has a straightforward layout model based on columns and vertical stacking within a column. It supports a few per-column layout schemes by default, and they have been just right for my needs. It’s conceptually clean, completely stable (as far as I can tell), and works great out of the box. What’s not to like?
To be fair, it’s not perfect (yet.) wmii draws a titlebar on every window, and I could generally do with out that. For the most part, the titlebar just takes up space…I can tell I’m in chrome or emacs without the window manager reminding me. Sometimes it’s useful (e.g. if you have multiple xterms open you can label them), but if I had to choose between titlebars and no titlebars I’d definitely do without. Perhaps I just haven’t found out how to turn them off.
Another bit of a downer is that the wmii community doesn’t seem to be as big as some of the others. This is a bit frustrating at first, but the documentation for wmii is good enough that once you grok a few important concepts, and if you’re willing to apply yourself, you can do whatever you want without much help.
Happily ever after…?
Who knows. As Calvin says, I must obey the inscrutable exhortations of my soul, so we’ll see how long wmii lasts. I’m really happy with it for now, though. I’ve quickly reached the point that I don’t need to think about it; it does its job quietly and competently. So, if you’re looking for a good tiling window manager (or a good window manager of any type!), do yourself a favor and check it out.