[xmonad] xmonad as an outsider

Weeble clockworksaint at gmail.com
Thu Nov 10 15:12:38 CET 2011

I have been reading the xmonad development thread, and it got me to
thinking about my experiences with xmonad. I definitely think things
could be improved, but I'm not sure how would be best. Maybe it's all
a documentation thing, or maybe some of it could be new or changed
APIs. I'll just try to explain how I have experienced xmonad, and what
gave me problems.

First of all, as background, I am a programmer. I did a little Haskell
at university, but not much and I use it so rarely that I can never
remember the syntax. Mostly I program in C#, C++, Python and a little
bit of Coffeescript. I run Ubuntu on a laptop and mostly only install
stuff via apt-get. I like the command-line and vim, but I'm no
anti-mouse purist and spend a lot of time using only the mouse or the
touchpad while browsing the web.

I think I first installed xmonad via apt-get, and at some point had
some problem that meant moving to cabal or darcs. That was a bit of a
pain, especially trying to understand where each of these things had
put files and knowing whether I'd successfully uninstalled them later.
What is much more of a pain is months later when I try to change
something and realise I need to upgrade and then I'm not even sure how
I installed xmonad in the first place, so I'm not sure what I need to
do to update it. After an upgrade to a new version of Ubuntu there's
generally a period of a few weeks before I find the time to figure out
how to get xmonad up and running again.

Configuring xmonad is generally pretty mystifying. Even though I have
a basic knowledge of Haskell, it's often very hard to untangle things
in the config file or in examples. Problems I've had:

* Strange symbols, like ".|.", "|||", "-->", "=?", "<&&>". These can't
be Googled for, so it's hard to find out what they do or where they're
defined. Haskell already has lots of operators that aren't
particularly familiar to programmers coming from other languages, so
this just seems to add to the confusion.

* Hard to find out where functions are defined. Example configuration
files generally import all modules into the one big namespace. In
Python, the equivalent construct, "from foo import *" is generally
discouraged for this reason, but I don't know what's conventional in
Haskell. It seems the forms "import Module (x,y,z)" or "import
qualified Module" would be better for example configuration files, as
they aid discoverability: then when I see a name used in a
configuration file I can easily see which module it came from without
having to grep through source files.

* Poor layout documentation. One of the things I was most interested
when I was a new user was in finding out what layouts were available
and how to compose them. I found the layout documentation to be very
limited. There's no overview and there are no diagrams, just a great
big list of layout names, so to find anything you pretty much have to
try them all one by one. Even worse, some of them require arguments
that they do not document. E.g.
If there is somewhere that shows example screenshots of all these
layouts, it would be good if it was more prominently linked from the

* Baffling failure messages. If you make a mistake in your xmonad
configuration, or if you upgrade and the API for something has
changed, the error messages are generally very hard to understand, and
it can take quite a deep understanding of Haskell to realise that you
just missed out an argument or used the wrong operator.

I think most of these things can be improved, though maybe not the
error messages. I really love *using* xmonad, and I've not found
another window manager that I'm nearly as happy with, but the horror
of *configuring* xmonad wastes a lot of my time and makes me
disinclined to recommend it to others.


More information about the xmonad mailing list