Apart from the Haskell fun, xmonad is really really good. Especially how it handles workspaces on multiple monitors. By default, each monitor has one workspace. Not one workspace for ALL monitors.
So if your side screen has say documentation open, and you switch on your main screen from terminal to editor, only the main screen changes. The side screen stays untouched. Some people prefer it, some hate it. But it's good that xmonad offers it. It also has hot reloading of the config, which is also nice.
Sure, Niri's config is approachable, but is it hackable? It only offers what Niri offers, right? You can't extend its functionality by config alone.
That is where XMonad and others shine. Sure, they might not be for the "I don't wanna spend time configuring my WM to death" crowd (and I mean absolutely no derision in that. We all have different rabbit holes we want to customize to oblivion), but Xmonad or Stumpwm etc allow for those shenanigans, and I myself am very very happy to have those.
Long story short, it's not all 100% about the type safety, it's also a lot about the extensibility of it.
Niri is nice, not mocking it. But infinite scrolling is not everyone's jam. Some others might even question the choice of KDL instead of JSON without any clear benifit.
Whatever you prefer and if it works for you, great. That's why we have choices ^^
I'm not a Niri stan by any means - I only switched to it the other week, and was using sway/i3 before then - but I suspect that most alternatives have answers to these, too.
> Especially how it handles workspaces on multiple monitors. By default, each monitor has one workspace. Not one workspace for ALL monitors.
> It also has hot reloading of the config, which is also nice.
Niri will reload your config on save; Sway requires a keybind, but no restart.
> Sure, Niri's config is approachable, but is it hackable? It only offers what Niri offers, right? You can't extend its functionality by config alone.
Most Wayland compositors offer that extensibility through messaging; you would send messages to Niri or Sway through scripts to achieve custom behaviour. I do miss having scripting built-in in AwesomeWM, but it hasn't been too much of an issue for me in practice.
> Niri is nice, not mocking it. But infinite scrolling is not everyone's jam. Some others might even question the choice of KDL instead of JSON without any clear benifit.
I brought Niri up as an example, but the general point I was trying to make is that the other tiling compositors/WMs out there offer similar solutions that get you to the same place, but through easier means. As for KDL, I think it would be difficult to argue that JSON is easier for humans to edit than KDL :p
> Whatever you prefer and if it works for you, great. That's why we have choices ^^
By all means! I'm not denigrating XMonad or such here; it's more that I think it's probably not the right choice for most people in the market, as there are alternative solutions that are likely to get you to the same place with less friction.
Trust me, the majority of tiling WMs has on workspace for ALL monitors combined. The percentage of WMs treating every monitor as a separate unit is smaller.
And sure, you can send message and commands to Niri via IPC, but that is very very different from say XMonad or StumpWM where you can actually override or alter functionality within the config instead of having to change the original source code.
That I'd say is the very definition of hackable. When you can actually just throw stuff into your config to change core behavior.
No, it doesn't seem that way. The Niri manual says each monitor has an independent set of workspaces. In XMonad there is one shared set for all monitors, but each monitor independently shows one of those workspaces.
(If the user tries to show on monitor A the workspace currently visible on monitor B the two monitors swap their workspaces.)
To pile on, if I wanted an actual language to do config work I would prefer bash for simple scripting. I started using riverwm and I love its take on config. Use whatever language you want because configuring it is just running a sequence of riverctl commands. I found it very ergonomic since i can test config in the cli, I can just use a bash script to run commands — and some extra daemons like mako, waybar, and wlsunset
> xmonad is really really good. Especially how it handles workspaces on multiple monitors
This is the reaon I use XMonad, and I hate how this one design choice that only one window manager has gotten right is what locks me into X11. If anyone ever learns of a non-X11 window manager that handles workspaces on multiple monitors the XMonad way, contact me!
I got good and bad news: my own WM did it Xmonad style, but I have not updated it in years. If there is enough request I might revive it (also X11 though, so not fitting the bill).
See https://github.com/Kintaro/wtftw It handles screens the exact same way Xmonad does, because it was modeled after Xmonad. The config is entirely done in Rust, so it allows for a lot of hackability. On reload, the config gets compiled to a dynamic library and the WM restarts itself, passing the current window IDs to itself to "reload".
But I was meaning to pick up a new project in 2026 for myself. So maybe a CL based Wayland WM with an Xmonad style?
So if your side screen has say documentation open, and you switch on your main screen from terminal to editor, only the main screen changes. The side screen stays untouched. Some people prefer it, some hate it. But it's good that xmonad offers it. It also has hot reloading of the config, which is also nice.
Sure, Niri's config is approachable, but is it hackable? It only offers what Niri offers, right? You can't extend its functionality by config alone.
That is where XMonad and others shine. Sure, they might not be for the "I don't wanna spend time configuring my WM to death" crowd (and I mean absolutely no derision in that. We all have different rabbit holes we want to customize to oblivion), but Xmonad or Stumpwm etc allow for those shenanigans, and I myself am very very happy to have those.
Long story short, it's not all 100% about the type safety, it's also a lot about the extensibility of it.
Niri is nice, not mocking it. But infinite scrolling is not everyone's jam. Some others might even question the choice of KDL instead of JSON without any clear benifit.
Whatever you prefer and if it works for you, great. That's why we have choices ^^