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.
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 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 ;)
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.
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.
> 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.
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).
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.
I used Mosiaco[0] for a while, but I found it more frustrating than useful. The paid version is slightly better but not by much.
Eventually I found gaming not to be a good enough reason to use windows as my main os, and now only boot into it if I really wanna play something I can't run in linux/under wine. Window management is my biggest technical/functional gripe with windows. AwesomeWM is just... awesome.
Not a full window manager, but I've used Winsplit Revolution for years to manually re-tile my windows. I have it set to use ctrl+alt and then the grid of keys:
qwe
asd
zxc
...to move windows into corners, sides, or the center of the screen. Hitting the same key over and over re-sizes it to take up more or less of the screen. It's sadly no longer being developed, but works fine on Win8 and Win10 (and so probably will continue to work into the foreseeable future).
It works pretty much like xmonad or awesomewm once you edit the keybindings. Unfortunately it doesn't have the same phenomenal multi-monitor support xmonad provides on linux. It works within the usual windows confines[0]. With xmonad/linux, each workspace is independent of the displays. With pwt/windows, each workspace uses the entire logical display surface.
I made this fork of an actual project in the hopes that this joke would one day become relevant... unfortunately I'm not that juvenile anymore so now it just sort of feels stupid: https://github.com/ranman/xgonads
>On-Topic: Anything that good hackers would find interesting. That includes more than hacking and startups. If you had to reduce it to a sentence, the answer might be: anything that gratifies one's intellectual curiosity.
Also from the submission guidelines:
>Please don't submit comments complaining that a submission is inappropriate for the site. If you think a story is spam or off-topic, flag it by clicking on its "flag" link. (Not all users will see this; there is a karma threshold.) If you think a comment is egregious, click on its timestamp to go to its page, then click "flag" at the top.
From the guidelines: On-Topic: Anything that good hackers would find interesting. That includes more than hacking and startups. If you had to reduce it to a sentence, the answer might be: anything that gratifies one's intellectual curiosity.
Also from the guidelines: Please don't submit comments complaining that a submission is inappropriate for the site. If you think a story is spam or off-topic, flag it by clicking on its "flag" link.
Sometimes it's OK in a community focused on a topic like "tech things" to remind everyone that something exists. Also, as HN is growing, and as a large portion of the people on this site are young (e.g. recent grads, new in the programming field, or even still undergrads) this is their first exposure. It's ok that we get beginner level articles - e.g. most of the tutorials linked here describe stuff that has been around for a long time and tutorialed many times before. It's still ok. It gets people exposed in a way that is useful.
Us old hands can add to the discussion by pointing out new features, or better articles or advanced stuff. It's much more productive than complaining that "i already knew this".
Xmonad is quite good, but I generally found its greatest strength to be its greatest weakness: it turns out I didn't actually want to learn Haskell to edit my wm configs. Nor did I really want to compile my wm configs, but that's more a question of the speed of the Haskell compiler than the choice of language.
Lua is not a great scripting language, but its biggest strength is its dog-simplicity. There just aren't a lot of places for bugs to hide in it.
Really, XMonad does not need much configuration to be quite useful when combined with Gnome/XFCE. Also, there are many, many examples you can copy and paste. I've been using it for 5+ years with minor adjustments - I wouldn't say I "know" Haskell. At all.
Further, "xmonad --recompile && xmonad --restart" is not that taxing on the rare occasion you change your configuration.
Xmonad(and others) is heavily inspired by dwm. I prefer dwm because it is configured in C instead of haskell(I don't know haskell) and the bar is much simpler than xmobar. Xmonad is cool if you like haskell though.
I've been using Xmonad for such a long time I can barely use a non-tiling WM properly now. Makes me look like a fool on almost anybody else's computer.
But perhaps the greatest thing about Xmonad is that it can lead you to Haskell and to functional programming in general, and I think this is one of the most useful and beautiful discoveries a developer can make. Your Javascript or your PHP will get better just by looking at some Haskell :)
This is encouraging. I switched from Awesome to Qtile just because I liked python more than lua, although Qtile lacks much in features (specifically, Awesome's better layouts, in my opinion). However, I've been wanting to learn Haskell and I was hoping using Xmonad would be a good excuse to learn it. It sounds like I'd get what I want.
That's just the dead blog and dead twitter. The mailing list is fairly active, hundreds of posts per month. The bug tracker is being bit by the death of google code and I don't recall reading where its going. It uses darcs and there's talk of a git mirror.
In a way its a pity this story popped up today. There's been talk on the mailing list just a week or two ago about a new release "real soon now". I assumed this story was the announcement of the new release, until I clicked thru and studied a bit.
Its not a GUI environment but a window manager along the philosophical lines of do one thing and do it very well. Once it works, which it does, its hard to find something to change unless the API changes for X (unlikely).
I've been a xmonad user for a long time, but I'm going to switch to i3.
While xmonad is nice, and haskell is nice, the haskell eco system is a PITA. And things break a lot(using cabal). And somehow, after a long time of no changes my xmonad will no longer recompile. Trying to update the haskell stuff just turned out to be a HUGE pain. Also the libraries take up way too much space because you have to have then in different ways. I forgot how it went, but having xmonad(a small wm) required something like 1 to 1,5gb of harddrive space.
Are you using a bleeding edge distro? I've been using the version of xmonad from apt-get in Ubuntu (usually the latest release) for ~3 years and it's never broken or required me to change my config.
I'm using Arch linux and I've only managed to break XMonad once (or maybe twice) when I removed some packages that my config relied on. Admittedly my config file is probably pretty boring.
For what it's worth my XMonad config broke at some point, so I'm running an executable from october 2013. I've tried fixing it, but too much is broken for it to be an easy fix right now.
Similar experience but with wmii. I wanted a tiling WM for a tiny hdd, tried wmii, MOD-Enter for term, MOD-<n> for workspace, a few ones to cycle through. Deal. It has some glitches, like MOD being swallowed somehow, maybe i3 doesn't have that. But so far I don't really miss XMonad. I do miss it because it's rock solid, it's Haskell, but wmii/i3 get you going in less than 1MB.
I've been considering switching to i3 for similar reasons (plus configuring xmonad in Haskell is a bit of a pain as I'm not great at it). The only thing that is keeping me from doing it is the fact that i3 seems to bind workspaces to screens - I often find myself wanting to bring a particular workspace up on my central monitor.
Any i3 users want to pipe up and enlighten me on how I could go about configuring i3 so that I can switch to any workspace on a particular screen?
For your WM you probably want to use a precompiled binary form your distro. What you're trying is equivalent of trying to get the whole gcc stack and deps to build a c-based WM. Haskell isn't a dynamic language and doesn't require anything Haskell-specific to be installed on the target system to run a binary.
If you really do want to compile your window manager from source, newer versions of cabal, the Haskell package manager, have something called sandboxes which basically remedy the problems you're talking about. I don't recommend compiling from source unless you know what you're doing though and if you're not using sandboxes, you probably don't.
I was using rpms until they broke multi-monitor support, then I switched to using cabal, which worked when I first installed it, but now it broke on it's own. And when trying to fix it several packages where broken again. For no reason. Cabal also doesn't do dependency management. So you have to try to install something, it'll complain it doesn't have X, then you have to install X, then it complains it doesn't have Y and so on.
Does Xmonad work OOTB on recent Ubuntu versions? I remember that after the switch to Gnome 3 it was a huge PITA to get Xmonad, Xmobar, and trayer (to get indicator applets) all working; some indicator applets never displayed anyway.
TBH, though, I didn't miss tiling WMs much after switching to OS X, mostly because I spend 95% of my time in Chrome with hella tabs, terminal with screen and Emacs.
XMonad is my favorite tiling window manager. I use it on top of XFCE, so I have a bit of a graphical interface just in case my non-technical friends use my computer and tiling / shortcuts / all the awesome stuff that comes with XMonad on top of that.
Although it is written in Haskell, I find the configuration pretty easy to use and manipulate. It's incredibly powerful and extremely lightweight when compared to other tiling managers.
TLDR; XMonad is my favorite tiling window manager.
59 comments
[ 3.9 ms ] story [ 113 ms ] threadIf you don't have previous Haskell experience, then other window managers like i3 or bspwm might be more comfortable.
right now awesomewm does everything i need and config being in lua helps a ton with readability and flexibility.
Super+e to open emacs, and then having emacs automatically sent/assigned to the tag/workspace titled "emacs"? Love it.
But my fav is having the "Menu" key bound to "open urxvt". Super convenient.
I can do all of that in i3 with a simple text editor.
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.
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.
Even Haskell people find themselves easily in the cabal hell. Everyone is aware of the issue, but it's still not solved.
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 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.
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 would be different if there was a lot of configuration to do, but simplicity is the whole point here.
Eventually I found gaming not to be a good enough reason to use windows as my main os, and now only boot into it if I really wanna play something I can't run in linux/under wine. Window management is my biggest technical/functional gripe with windows. AwesomeWM is just... awesome.
[0] http://www.soulidstudio.com/
qwe
asd
zxc
...to move windows into corners, sides, or the center of the screen. Hitting the same key over and over re-sizes it to take up more or less of the screen. It's sadly no longer being developed, but works fine on Win8 and Win10 (and so probably will continue to work into the foreseeable future).
Written in C# and can be configured via Ruby or Python. Have been using it for more than a year after previously using bug.n.
It works pretty much like xmonad or awesomewm once you edit the keybindings. Unfortunately it doesn't have the same phenomenal multi-monitor support xmonad provides on linux. It works within the usual windows confines[0]. With xmonad/linux, each workspace is independent of the displays. With pwt/windows, each workspace uses the entire logical display surface.
[0]: https://msdn.microsoft.com/en-us/library/windows/desktop/ms6...
I made this fork of an actual project in the hopes that this joke would one day become relevant... unfortunately I'm not that juvenile anymore so now it just sort of feels stupid: https://github.com/ranman/xgonads
>What to Submit
>On-Topic: Anything that good hackers would find interesting. That includes more than hacking and startups. If you had to reduce it to a sentence, the answer might be: anything that gratifies one's intellectual curiosity.
Also from the submission guidelines:
>Please don't submit comments complaining that a submission is inappropriate for the site. If you think a story is spam or off-topic, flag it by clicking on its "flag" link. (Not all users will see this; there is a karma threshold.) If you think a comment is egregious, click on its timestamp to go to its page, then click "flag" at the top.
Also from the guidelines: Please don't submit comments complaining that a submission is inappropriate for the site. If you think a story is spam or off-topic, flag it by clicking on its "flag" link.
Sometimes it's OK in a community focused on a topic like "tech things" to remind everyone that something exists. Also, as HN is growing, and as a large portion of the people on this site are young (e.g. recent grads, new in the programming field, or even still undergrads) this is their first exposure. It's ok that we get beginner level articles - e.g. most of the tutorials linked here describe stuff that has been around for a long time and tutorialed many times before. It's still ok. It gets people exposed in a way that is useful.
Us old hands can add to the discussion by pointing out new features, or better articles or advanced stuff. It's much more productive than complaining that "i already knew this".
http://awesome.naquadah.org/
Configurable using Lua, though I've actually changed almost nothing.
Lua is not a great scripting language, but its biggest strength is its dog-simplicity. There just aren't a lot of places for bugs to hide in it.
Further, "xmonad --recompile && xmonad --restart" is not that taxing on the rare occasion you change your configuration.
I can't say I regret it at all.
http://dwm.suckless.org/
[0] http://dwm.suckless.org/patches/pango
But perhaps the greatest thing about Xmonad is that it can lead you to Haskell and to functional programming in general, and I think this is one of the most useful and beautiful discoveries a developer can make. Your Javascript or your PHP will get better just by looking at some Haskell :)
In a way its a pity this story popped up today. There's been talk on the mailing list just a week or two ago about a new release "real soon now". I assumed this story was the announcement of the new release, until I clicked thru and studied a bit.
Its not a GUI environment but a window manager along the philosophical lines of do one thing and do it very well. Once it works, which it does, its hard to find something to change unless the API changes for X (unlikely).
While xmonad is nice, and haskell is nice, the haskell eco system is a PITA. And things break a lot(using cabal). And somehow, after a long time of no changes my xmonad will no longer recompile. Trying to update the haskell stuff just turned out to be a HUGE pain. Also the libraries take up way too much space because you have to have then in different ways. I forgot how it went, but having xmonad(a small wm) required something like 1 to 1,5gb of harddrive space.
Any i3 users want to pipe up and enlighten me on how I could go about configuring i3 so that I can switch to any workspace on a particular screen?
If you really do want to compile your window manager from source, newer versions of cabal, the Haskell package manager, have something called sandboxes which basically remedy the problems you're talking about. I don't recommend compiling from source unless you know what you're doing though and if you're not using sandboxes, you probably don't.
TBH, though, I didn't miss tiling WMs much after switching to OS X, mostly because I spend 95% of my time in Chrome with hella tabs, terminal with screen and Emacs.
Although it is written in Haskell, I find the configuration pretty easy to use and manipulate. It's incredibly powerful and extremely lightweight when compared to other tiling managers.
TLDR; XMonad is my favorite tiling window manager.
https://github.com/haskell/cabal/issues/936