Charlie Harvey

Experiences using XMonad as my windowmanager

A lot of the GNU/Linux community have been switching to alternative window managers of late. Gnome 3 seems rather resource intensive. And Ubuntu Unity is a terrible monstrosity. I have heard good things about Awesome window manager. But I decided to have a crack with the Haskell-based XMonad. I’ve been using it on my laptop for the last few months now, so I figure it is time for a bit of a writeup. This is not intended as a howto, John_Goerzen has written a great Xmonad getting started on the Haskell wiki.

xmonad in action

Image is a link to a bigger version

Getting it installed

Installation wasn’t too much of a faff, I installed it from apt like any other package, restarted gdm and it was available in my list of windowmanagers like I’d expect. I didn't keep detailed notes of the setup but I did add a number of extra pieces and tweaks to get it working well enough to replace GNOME for most work. Configuration is in a single file in your home directory, and you will want to be a little comfortable with Haskell syntax (or cheat and copy-paste off the internet). I found this video of Simon Peyton-Jones who works on the GHCi compiler to be helpful in understanding some of the conceptual ideas behind how XMonad works, though it is really about Haskell rather than XMonad per se.

Extra Pieces

By default, XMonad doesn’t come with a bar or a tray. And though I don’t use them all the time, they are occasionally useful. I ended up opting for XMobar, and trayer for providing the tray. Trayer had to be started in my xmonad.start script, listed below. I also added an extra layout using XMonad.Layout.Spiral based on the Golden Ratio, which I borrowed from Octoploid’s xmonad.hs and which is in use in the screenshot below.

spiral window layout with xmonad

Image is a link to a bigger version

Playing with GNOME

So, now came the trickier bit, which was getting GNOME and xmonad playing with each other as I wanted. I’m using Gnome 2 on Debian Squeeze, so YMMV. I should also mention that there is a great howto which will probably contain all you need over on the Haskell Wiki. The first bit for me was to make an alternative launch script to do some other stuff that I wanted, before the real Xmonad was launched. $ cat /usr/local/bin/xmonad.start #!/bin/bash xrdb -merge .Xresources trayer --edge top --align right --SetDockType true --SetPartialStrut true --expand true --width 15 --height 12 --transparent true --tint 0x000000 & gnome-screensaver gnome-settings-daemon gnome-power-manager & transmission -m & if [ -x /usr/bin/nm-applet ] ; then nm-applet --sm-disable & fi exec /usr/bin/xmonad

Now I tweaked the xsession filoe that Debian had created for me to use my custom Xmonad launcher. $ cat /usr/share/xsessions/xmonad.desktop [Desktop Entry] Encoding=UTF-8 Name=XMonad Comment=Lightweight tiling window manager Exec=xmonad.start Icon=xmonad.png Type=XSession

Finally I copy pasted the Gnome config bits described on the Haskell wiki into my xmonad.hs, and launched. Now I have a tray, courtesy of trayer, the ability to lock my screen, to powerdown when my laptop closes and crucially to bittorrent the various operating systems I need to with transmission. Which along with a windowmanager is pretty much all I need.

How was it?

So far I am delighted with XMonad. It has encouraged me to make much more extensive use of workspaces, and I’ve found that partitioning classes of work into different spaces has helped me stay focussed on one task at a time. Rather than glancing over at the email window, or checking Hacker News, I’ve been able to keep working on the code in front of me. It has made me more productive and less distracted.

… reliable, robust and helped me use the mouse less and stay focussed more

I’ve also been using the mouse far less. I use vim for editing already, and vimperator with firefox for browsing, which can be largely mouse-free. Because you have to learn the keybindings to make XMonad work at all, I have got into using them all the time. Another nail in the coffin of my pointing device!

Being able to flip between layouts is cute, but I mostly use full screen and any other layout, apart from when I need to work with GIMP. I haven’t played with assigning workspaces to monitors yet, but it sounds like the sort of thing that could be handy. The config file is well documented and works as expected for the most part and playing round with the setup is a joy for a programmer like me.

GIMP really doesn’t seem to play nicely with XMonad, at least I need to do some more research to make it work nicley. The main problem I have is when I work on other WMs I keep finding myself pressing alt-2 to go to my code workspace or alt-1 to go to my web workspace and this makes odd things happen. That can be annoying.

Overall XMonad has been reliable, robust and has helped me use the mouse less and stay focussed more. Not bad.

My xmonad.hs

You can have a look at my xmonad.hs. It is, perhaps inevitably, a bit of a mess. But it works for me ®


  • Be respectful. You may want to read the comment guidelines before posting.
  • You can use Markdown syntax to format your comments. You can only use level 5 and 6 headings.
  • You can add class="your language" to code blocks to help highlight.js highlight them correctly.

Privacy note: This form will forward your IP address, user agent and referrer to the Akismet, StopForumSpam and Botscout spam filtering services. I don’t log these details. Those services will. I do log everything you type into the form. Full privacy statement.