Friday 23 September 2011

Tiling window managers

My first try with tiling window managers was ion3. I liked it and used it for months. I loved its keystroke-driven minimalistic approach. Although the Lua config was too high for me, I could not set things up correctly. It did not support fancy titlebars nor a systray, it simply worked. I saw its limitations and I was a bit sad that the developers did not support the software any more, so I went back to Gnome. Nowadays as I started using Arch Linux I needed something powerful and tiling WMs came to my mind again. So I made some research and tried some of them. Here is my short review of them.
 
 The WM I need is a tiling window manager with:
- Configurable keyboard shortcuts
- Tag bar (to see which tag I actually use), urgent tag is preferred
- Systray
- Statusbar (with configurable contents of computer state like clock, cpu, battery, etc.)
- Easy-to-use config file (I do not want to learn programming languages to set it up!)
- Dual-head support
- Rules to place different applications where (screen and workspace) I want and how (floating or tiling) I want.

Here are the ones I tried:

Awesome
Awesome is simply awesome. It has almost everything I need: It handles dual screen (although it was sort of a pain to set it up and still I have problems with it), there is a built-in taskbar and systray: good point! The lua configuration language is too diificult for me. I just do not see logics and simplicity here, there are redundant solutions for things and above all the config syntax changes from one version of Awesome to another. Maybe I will come back later again.

Subtle
Subtle is an easy-to-set-up tiling WM but I could not get dual head working on it properly. Possibly it is my fault, I did not spend too much time with it.

Xmonad
At first sight I liked it but it has a frightening config file written in Haskell and you have to load third-party plugins to access basic features (like statusbar, systray, etc.).

i3
i3 is very close to my expectations. I only have one complaint against it: it does not support a configurable statusbar (although it has a built-in one, it contains too much and useless information but others are missing) nor a native systray. Somehow I could not get third-party statusbars and systrays working in my dual head setup. They always overlapped, windows were ignoring them, etc. I might have done dirty hacks to get it work but I gave it up. Anyway, nice project.

Scrotwm
Simple, very easy to configure but lacks major features like tags and rules.

Wmfs
After quite a lot of experimenting with so much WMs out there I found Wmfs. It has a very straightforward configuration file and you do not have to include plugins or third-party software. Multi-head setup works very well and can be set up as easily as everything else. The "bar" contains a taglist, a layout chooser, the title of the actual window, a message where you can place any text with some formatting (i.e. a static text or a status message updated regularly by a shell script) and a systray. Everything can be driven by keystrokes and rules can be assigned to many different window properties. This is the first tiling WM that I could set up properly with one simple(!) config file and it just works fine with all the main features I expected. I have some minor issues though:
- If I run xrandr, the system crashes. This means that hot-changing of single / dual monitors does not work. For example if I plug in an external display to my laptop and run xrandr to set my dual screen up, all my running applications are killed and the WM hangs. Maybe there will be a solution for this soon, but by that time I have to be careful with this.

- The titlebar shows only the title of the actual window. Right clicking shows the other clients of the actual tag but it is not convenient to use. A bar with all the windows of the actual tag would be nice with color mark for the actual client (just like in Awesome). This is not a major issue but it would be very informative to have such a feature.
- Using regexps or wildcards in rule definitions would be very handy. This is a nice-to-have feature, I can live without it.

My Wmfs dual-head GUI looks like this:



You can find my actual wmfsrc config file, wmfs-status message generator script (for indicating the date, time, battery and processor state invoked from .xinitrc regularly) and my .xinitrc file in the right panel under "My actual config files".

2 comments: