I haven’t really changed my xmonad config in a long time. I started running it around the time version 0.2 came out, and that was in May, 2007. It didn’t take me too long to get comfortable with a simple xmonad + dzen setup, so except for upgrading my config to work with new xmonad versions and trying out new contrib modules now and then, not much changed.
My dzen setup was pretty brittle though, and hard-coded to the screen resolution. And there were too many pieces. Everything started from a bash script, and by everything I mean xmonad, 3 dzens, stalonetray, gnome do, mpd, various gnome daemons, xbindkeys, xmodmap, xsetroot, xset, and xrdb. It was messy, but it actually worked really well.
Since I upgraded to Ubuntu 10.04 (Lucid Lynx), I decided to make another change and get rid of most of that setup. Now I’m just running Gnome, with the window manager switched to xmonad. Of course, there are still customizations, but they’re pretty minor compared to the old setup.
I just used the simplest setup to replace metacity with xmonad, and added the xmonad-log-applet so I can continue using some of the same panel setup from dzen. The installation instructions for that all worked properly, and the only problem I have with the applet is that it doesn’t seem to handle utf8, so some characters don’t display properly (like in the title bar of the browser I’m typing this into).
The log-applet uses pango for text formatting, which is easy enough, and the example code for the applet is easy to adapt. I used this pango reference to get the formatting I wanted, and the log applet blends nicely into the new Ubuntu theme.
One thing I still wish xmonad supported is compositing. I think it gives a desktop a nice, smooth, solidness that I miss in xmonad. Of course, xmonad more than makes up for the lack by being ridiculously good. I gave xcompmgr and fadeInactive another try, but it’s still unreliable and unstable.
Every time I do something like this, I end up taking a look around the xmonad wiki and in the contrib modules and finding something useful. This time I found two small ones.
- Place hook. A simple module that controls where floating windows will appear on the screen. I have mine appear centered on the mouse cursor, but without going offscreen or covering the panel: placeHook (withGaps (24,0,0,0) (inBounds(underMouse (0.5, 0.5))))
- fullScreenEventHook. This comes from EwmhDesktops, but is only in the development version. It just makes hitting F in a video player, or F11 in a browser to go to fullscreen mode work. Previously I was using toggleLayout to switch to a fullscreen layout.
Of course, digging in to my config like this also shows that it’s time for a cleanup in there. There are many bits that I just don’t use, and there’s some messiness where my attempts to customize have collided with my lack of Haskell skills. Still, my config file is on github, so feel free to dig for usefulness. I’m sure it’s there somewhere.
My one remaining problem from this upgrade is that I can’t remap control keys. I was using xmodmap to add two control keys where I could reach them easily, and not having them is really slowing me down. This looks like it’s due to this bug, which I really hope gets fixed before release.
Overall, I’m very happy with this setup. It’s going to take something really amazing to get me to switch from xmonad.


Recent Comments