Quest for Window Manager: Xmonad

While I was tweaking a lot with my fluxbox and openbox desktop, I came to know about the tiling window managers like wmii, dwm, xmonad, awesome, musca, ratpoison etc. These wms[1] are very lightweight, minimalist and completely different in paradigm than the non-tiling wms. The main difference being that they manage the placing and if necessary sizing of the windows themselves and as a user you are relieved from these mundane tasks. At first, with the word “tiling” I just recalled the option in Windows 3.1 which was used to arrange the windows as tiles on the desktop. At that time though, it made less sense as the screen sizes were generally very small. But now a days, with wide screens and often multiple monitors attached,  tiling your windows makes  good use of your real estate on the screen. At first, it feels a bit different, but after some usage, I realised that it can be very useful if you don’t have to spend time arranging windows on your desktop. You utilise maximum of your desktop space and save a lot of time so you can hack without any bells and whistles of a Desktop Environment coming in your way.

All the window managers mentioned above have their own peculiarities and features. I don’t want to go into the details of each one so,  here is the archlinux wiki page which compares the different tiling window managers.

My choice fell on xmonad. It has several reasons. The first being it looks awesome (no pun intended). The second being the language behind it, yes haskell[2].  The configuration file is also written in haskell, with which it is possible to customize and  extend the basic features provided by xmonad.  It  surely is a challenge to learn a fresh new language to be able to understand the configuration file and  to customize. This actually was a plus point for me because  I already had heard  many interesting things about haskell, so  I wanted to learn it to have a feel of  a lazy and purely functional language.  So, xmonad being a new paradigm window manager for me, it was also an opportunity for me to start learning haskell.

Some screenshots to give you  a feel of what I am talking about.

Xmonad Clean

Xmonad clean with conky, dzen , conky, mpd, weather status bar

Xmonad Busy

Xmonad running tmux and vim editing the primary configuration file of xmonad.

Xmonad is a very efficient dynamic tiling window manager which is very slim in terms of memory usage. Although the core part is relatively plain in terms of features, there are plenty of extensions which could be used to take advantage of different features.  Although for me it was an interesting  opportunity to start learning  haskell and understand the config file,  it is not at all necessary to learn haskell to configure xmonad. There are many example configurations available on the xmonad site with screenshots.  The xmonad config file is generally well  readable, so it is possible and often recommended  to initially copy an example configuration and keep on modifying it until you get it customized to your needs. I also liked the way xmonad handles multiple screens. Actually in the beginning it felt a bit  strange, but after some experience with it,  it is so  intuitive, that you would not like multiple screen handling of any other window manager.

This  is  my config file which is more or less a basic configuration with some changes.  Please feel free to suggest any improvements or changes. I have started learning haskell by following the book Real World Haskell, which in my opinion is a very good book for beginners. Please feel free to suggest any other useful resources for that as well.  I hope I will be able to use more of xmonad and fix some issues I am having with it.

On the cons side, xmonad doesn’t handle swing (java) based applications very well. There is a workaround in the config file by setting the param  setWMName  to “LG3D” to get it working.  I am still  having problems related to focusing with eclipse java IDE.  I am looking for a solution to this issue.


1. Window Managers

2. Haskell