More on the windowmanager article

This commit is contained in:
Nox Sluijtman 2022-11-04 17:57:23 +01:00
parent c852d39730
commit 3683e3913c
2 changed files with 54 additions and 10 deletions

View file

@ -2,7 +2,7 @@
title: "On window managers and XMonad"
date: "2022-11-03T23:17:35+01:00"
author: "$HUMANOID"
tags: ["linux", "window managers"]
tags: ["linux", "window managers", "xmonad"]
description: "A ramble about a highly configurable window manager"
---
@ -67,8 +67,8 @@ pretty much exactly how I wanted it to. In other words, a fairly basic
configuration with most of the default features ripped out and instead my
partially-organically-grown-probably-batshit-insane-keybindings (I use `Super` +
`Space` to open my run launcher. In fact, on my keyboard I have holding the big
space bar (yes it has two space bars, it is about as insane as my window
management keybindings) bound to `Super` + `Space`).
space bar (yes it has two space bars, its layout is about as insane as my
window management keybindings) bound to `Super` + `Space`).
To this day I still use DWM quite frequently on machines where I don't really
want to think about what graphical interface to chuck on it (hence I half
@ -79,17 +79,61 @@ planning on frequently using fullscreen applications and how strong the machine
in question was; AwesomeWM being noticeably slower than DWM on _really_ old
machines (like RejuvinatedBrick). Until at some point, I came across XMonad.
I tried it.
I tried it for an evening.
Hated the fact that it's configured in _sodding Haskell_ and went back to DWM.
I hated the fact that it's configured in _sodding Haskell_ and went back to DWM.
A few months later, I came across it's implementation of chorded keys through
A few months later, I came across an implementation of chorded keys through
the `XMonad.Util.EZConfig` module and decided to give it another shot.
This time I was hooked.
The biggest problem I had with it was _still_ the fact that it was configured in
Haskell, but the level of configurability made it worth dealing with the
functional pain. It was also the first time I decided to not bother with a
The biggest problem I had with it was _still_ the fact that it was configured
in Haskell, but the absurd level of customisability made it worth dealing with
the functional pain. It was also the first time I decided to not bother with a
status bar as getting a basic configuration going had given me enough grief for
one month.
one month.
For a really long time I could tell you how great XMonad was, but that it had
one major caveat: "it's configured in Haskell". Sure, besides Haskell there were
a few other things that I didn't like much.
As for gripes I had (and partially still have) with XMonad, they were quite few,
surprisingly. Coming from AwesomeWM and DWM, I would've liked XMonad to use tags
instead of workspaces; fullscreen is a bit of a pain to get working, but has
less fuckups than DWM; the fact that it's configured in Haskell; it not having a
set of workspaces per monitor (at least by default, I kind of stopped caring
after a little while); the fact that it's configured in Haskell; the
`XMonad.Layout.ShowWName` module being kind of unstable and last but not least,
the fact that it's configured in _fucking Haskell_.
It almost seems like I got sick of being sick of it being configured in Haskell
and I decided to dive into learning the language with the goal of being able to
fully understand by monstrous 384 line config file (without the around 200 lines
of documentation in the comments).
{{< img class="stickers" src="/images/config_length.png" >}}
So far I don't fully understand it yet at the time of writing, but I do
understand it a hell of a lot better than when I prodoced most of those 300
lines.
The greatest thing about XMonad is simultaneously the thing that kept me away
from it: it's written and configured in bloody Haskell. Thus there is barely a
separation configuration and source code. The only difference there _really_ is,
is the filename. Once you understand a bit of Haskell (no small task if you're
used to imperative languages) adding and integrating your own features is really
easy.
Weird thing with Haskell I'm noticing so far is that I'm slowly but surely
managing to dig up old concepts that I tried to implement in imperative
languages, but couldn't due to their nature. Things like pattern matching and
maps are quite intuitive to me. It's just that the syntax takes a _lot_ of
getting used to.
I highly recommend giving it a shot if you're willing to bash your head against
the Haskell wall for a while before understanding how your window manager works.
Looking back I find it quite funny to see how I went from not being able to get
i3 to do what I wanted it too and giving up; to barely being able to write or
understand Haskell but putting up with it.

Binary file not shown.

After

Width:  |  Height:  |  Size: 30 KiB