This should set up Xmonad to make space for Gnome's panel and status bar automatically.

Having done this, you should now be able to use Gnome with Xmonad, and most things will work. At the time of writing, there are a couple of things that don't fully work: clicking on the taskbar to select a window doesn't focus the window, and clicking on the panel to switch desktops doesn't. Of course you can use the standard Xmonad keys to perform these actions instead.

Explanations of the various options are given below, along with some other things you might want to tweak.

4 Tweak Gnome to work better with Xmonad

These are a few steps that greatly improves the experience of running Xmonad under Gnome. Note that on some systems the binary gconftool is called gconftool-2.

4.3 Fixing the pointer

After switching to Xmonad you might notice that the default pointer isn't the one you chose in your beautiful Gnome theme. The way to address this is to run xsetroot during session startup. Open the session configuration dialogue (System -> Preferences -> Sessions). Add a new startup program, choose any name and comment you want but make the command

/usr/bin/xsetroot -cursor_name left_ptr

5 Tips on configuring Xmonad

Allthe configuration is done in ~/.xmonad/xmonad.hs.

5.1 Change the mod key

The default mod key is alt, which conflicts with Gnome keybindings. In order to use be able to use the keyboard to e.g. getting rid of dialogues we rebind it to the left logo key:

main = xmonad $ defaultConfig {
modMask = mod4Mask
}

5.2 Make space for the panel

There are two options for creating space for the Gnome panel; the builtin way using gaps and ManageDocks. The ManageDocks method has been used in the configuration provided above.

5.3 Extended Window Manager Hints

EwmhDesktop makes it possible to let Gnome know about Xmonad windows and workspaces. EwmhDesktop has been enabled in the example configuration above. By itself, configuring XMonad with EwmhDesktop looks like this:

5.4 Key bindings for switching desktops

Gnome lays out the desktops in a row by default, and uses Ctrl+Alt+Left/Right for switching desktops left/right. To get similar behaviour in Xmonad, you need to add some keybindings. The contrib module XMonad.Actions.CycleWS has some useful actions for cycling workspaces, and I use these keybindings: