I’ve been using Xmonad as my window manager under X11 since early December. Xmonad is written in Haskell, a purely functional programming language that compiles down to machine code. Haskell is the most different looking programming language I’ve ever seen; when I started looking at Lisp, the structures made sense, but I’ve been lost looking at Haskell code. I suppose I need to pick up a book on the subject. I digress, Xmonad builds upon a different paradigm than what most users are used to. Most Window Managers (including Windows Explorer, Gnome, Etc.) use co-ordinate based stacks of objects to represent the environment. Think of this as having Firefox or Internet Explorer fullscreen, and you press alt-tab to get to Google Talk or you drag iTunes around the screen. Xmonad deviates from this by implementing what’s known as a tiling window manager. Instead of stacking objects, Xmonad gives applications non-overlapping regions of your monitor. This has the handy effect of putting what you’re using right in front of your eyes.
The way Xmonad handles where it puts the applications is terrific. If you have one window open, it will take up your whole monitor. If you have two, each will get half. But what about if you have three, or more? Xmonad solves this by declaring the left half of your screen as the main workspace, displaying one window there, and divides the right half in twain. Hence your attention can be given fully to your main application, while you switch to the other programs for support. This is quite handy if you’re a programmer and you have GNU Emacs or gVim open as your main application and two terminals open to test your project stacked one on top of the other to the right of it.
There is the obvious issue of “Most of my applications are designed as WIMP interfaces and this will break them!”. Don’t worry, other tiling window managers such as Ion force you into strict tiling, but you can configure Xmonad in its settings file to allow certain applications to float on top of other windows. Everything in Xmonad can also be controlled by the keyboard. Switching between windows is as simple at hitting alt-k. You can switch virtual desktops by pressing alt-<screen_num>(I switched mine to alt-f1 … f9 so as to not interfere with Irssi). There’s also multi-monitor support.
You can find out more about Xmonad at http://xmonad.org. They also have a directory of interesting screenshots, and a wiki full of configurations.