XMonad has been my window manager of choice for years now.
I especially like that the code is short and easy to understand, so you can easily modify it (or write an extension) if you want.
If you don't have previous Haskell experience, then other window managers like i3 or bspwm might be more comfortable.
> If you don't have previous Haskell experience, then other window managers like i3 or bspwm might be more comfortable.
My biggest beef with xmonad is that its configuration file is itself Haskell source code. So even if xmonad is the only Haskell project I use, I have to pull in GHC to compile my configuration. Since I'm not a Haskell guy, this means that I'm easily tipped off the cliff into cabal hell, which is not where I want to be when updating my WM config. For all that, xmonad is great when it works, and I stuck with it from 2011 to 2014 before moving on to i3.
My distribution maintainers deal with the cabal hell so I don't have to. I just use the xmonad package and it just works, including with a configuration file.
I found that this approach worked right up to the point where I tried to make non-trivial changes to the config, following examples from the xmonad website. If you want your config to use a Haskell package that's not provided by your distro, as many of the config examples do, you're out of luck unless you want to take the cabal route.
It's possible this situation has improved since last year, when I switched to i3, but it can never be fully rectified as long as the config file is itself Haskell source. I find it surprising that, despite the Haskell community's claims that Haskell is great for writing domain-specific languages, xmonad does not expose a DSL for you to configure it with.
> I find it surprising that, despite the Haskell community's claims that Haskell is great for writing domain-specific languages, xmonad does not expose a DSL for you to configure it with.
I presume it's nice that you can actually customize xmonad with code. So an appropriate DSL would be a programming language so using Haskell makes sense. Any other DSL would be more limiting.
> If you want your config to use a Haskell package that's not provided by your distro, as many of the config examples do, you're out of luck unless you want to take the cabal route.
I can understand that this would cause pain. I suppose it's up to cabal and/or distros to fix this.
> I presume it's nice that you can actually customize xmonad with code. So an appropriate DSL would be a programming language so using Haskell makes sense. Any other DSL would be more limiting.
You've hit the nail on the head here --- the problem is that xmonad offers an unlimited scope for configuration, including extensions to the behavior of xmonad. I'd rather see a clear separation between mechanisms for configuration and extension, even if that reduces the power of configuration.
It breaks the window manager standard. Occasionally, you'll see apps that break as a result; you'll want to unbind C-z in Emacs, for example.
There's a bug open for KDE explicitly asking for xmonad-like mutiple monitor support, which is marked WONTFIX as a result. But yes, I absolutely adore xmonad's take on it, and it's well worth the occasional glitches.
I love i3 and have gotten quite used to it. Although now that I do have haskell experience, I kind of wish I'd ramped up on XMonad. Of course, I'd try to configure it to behave just like i3 (especially with regard to the hierarchical containers, pretty sure XMonad doesn't do that OOTB), so now I'm not sure if I should switch ;)
I used it for a while and liked it a lot because it taught me plenty of Haskell. But looking back, I find it a little over-engineered, and the Haskell code seems to be a game of abstraction more than anything else. I don't know what point they are proving, but a lot of code seems to be over-parameterized. IMO, these superfluous generalizations make the code opaque to beginners while not adding much functionality. This coding style seems to be a general trait (if I may) of the Haskell programs that is not present in typical OCaml code (which is why I tend to prefer the latter).
Plus the API is rock solid. I've been using my current config for about 4 years now (with 0.10 and 0.11) and things just worked. I remember the hellish experiences I had each time awesome was updated...
Awesome breaking config so often is the reason why I currently run it with default configuration only. It sounds like I should give xmonad another look.
Can't agree more. XMonad is what I based my Rust window manager on. Nice, clean, easy to understand code base. No other window manager gave me so many insights into how a WM works.
I have no background or interest in Haskell but have no particular problem configuring Xmonad. I just cut and paste. The only thing I needed to learn was how the separators nested in Haskell.
It would be different if there was a lot of configuration to do, but simplicity is the whole point here.
If you don't have previous Haskell experience, then other window managers like i3 or bspwm might be more comfortable.