diff --git a/content/rambles/windowmanagers.md b/content/rambles/windowmanagers.md index 9bcf418..37988ba 100644 --- a/content/rambles/windowmanagers.md +++ b/content/rambles/windowmanagers.md @@ -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. diff --git a/static/images/config_length.png b/static/images/config_length.png new file mode 100644 index 0000000..58b87b6 Binary files /dev/null and b/static/images/config_length.png differ