____ ____ ____ ____ ____ ____ ____ ____ ____ ____ 
||W |||R |||I |||T |||E |||R |||1 |||3 |||' |||S ||
||__|||__|||__|||__|||__|||__|||__|||__|||__|||__||
|/__|/__|/__|/__|/__|/__|/__|/__|/__|/__|
-----------*** made with Emacs+Linux, on a sunny day ***------------------
____ ____ ____ ____ ____ ____ ____ ____ ||W |||E |||B |||S |||P |||A |||C |||E || ||__|||__|||__|||__|||__|||__|||__|||__|| |/__|/__|/__|/__|/__|/__|/__|/__|
----*** Matt Walsh is still a dick ***---

An honest talk about tiling window managers
my new adventures…

Date: 2024-05-22

Recently I got back into customizing my tiling window managers. For a long time I was very content with the functions and the look that they gave me. I dabbed into Hyprland, but it unusable for me with nVidia card, and also because waybar didn't show me the workspaces (other things worked, and I liked the animation and the control scheme). I am pretty much finished Bspwm, and I am very happy with it, having a reliable system. The feeling that I have a complete system, how I like it, is pretty much a new experience for me.

I looked at Hyprland, dk, and herbstluftwm. These were my experience. I have no problem with multimonitor setup now, I did make a good config for polybar, and I am using separate files for different WMs. Please don't ask for my dotfiles, because these are just for personal use. Maybe one day when I am satisfied with it, or clean it up from my sillyness. I am also not a programmer, so I try to use mostly basic stuff, with very few scripts, that I can understand. My shortcuts are for my own habits, I mostly like keychord (Emacs-like), because then I can just put everything on keyboard and hardly run out of combinations.

Rebuilding dwm

My satisfaction with Bspwm lasted about a week, when I had the urge to check out what's new in the world of dwm. Not that I know any of C programming language (or any programming), but I just had the urge. I practically had to re-learn customizing and patching and I really enjoyed this too. DWM is like a tech Lego, you have certain pieces you can use to build your system, and it's on you, if you can. One drawback of this is that some patches of course won't be compatible, no matter how hard I tried to fit it in. I originally wanted to write a full post about dwm, but I think it is boring.

If someone is interested, here is the patchlist:

  • autostart
  • centeredmaster
  • fullgaps
  • games
  • gridmode
  • keychord
  • movestack
  • pertag
  • shiftviewclients
  • systray
  • tallallmon

I checked my earlier dwm, and it looks like I haven't used it in 4 years. No wonder I forgot most stuff. Now I have another monitor as well, which of course gives you possibilities and headaches too. Since dwm has different array of tags (aka workspaces) for each monitor. Which sometimes hard for me to switch to stuff, although with some patches I am sure it can be better.

Bspwm is a comfy home, since you can give a set number of desktops for each of your screen, like first monitor has 1-6, and second monitor 7-11. You don't even need to use the same number of desktops. Absolutely brilliant.

Herbstluftwm

I had eyes on herbstlufwm (I'll call it "herbs" from now on, and yes I know it is German for "autumn air" or "autumn breeze") for a couple of months now, since I have discovered jake@linux on youtube. He creates the best Void Linux videos, and also a tiling wm junkie. His favorite is herbstluftwm, and a few weeks ago I tried it, I didn't like it, and went back to bspwm.

Then I really got curious after rebuilding dwm. My mind loves the supercomfy, but also occasionally just wants to meet the new, and work on stuff, so I gave herbs another chance.

And now herbs is one of my favorite tiling wm. It is super fast, and seemingly well configurable. It is a manual tiler, but it works much better in that regard than bspwm. In default we have frames, that we can interact with, or we can split the screen to many frames, or start programs inside the frames. This seems like complicated at first, but since most tiling window manager does its own thing, I just usually open a bunch of terminal windows and start playing around with the default shortcuts.

The usual vim keys are the navigation keys between objects, and in default we can even move between monitors with it (or use Mod-Backspace). I got quickly used to the creating frames, but some of the customization stuff is still way above my comprehension, maybe because there are so many of it?

I found not much videos or tutorials of it (silly me), I searched github as well. I am still in the learning phase, but I love it. My only gripe at first was that, the workspaces (also tags here, like in dwm), are shared between monitors. So in default you have 9 tags, and you can interact with the same 9 tags on all of your monitors. Of course this is not a big problem if you are using a single screen setup. But even with 2 it can be a headscratcher.

Example: on monitor A you have the 3rd tag, on monitor B you have the 5th tag. Now if you switch to the 5th tag on monitor A, the 2 tag simple switch between the two monitors. It is hard to get used to, when I mostly used bspwm with 2 screens, where I can assign workspaces to monitors. There is also a problem with this behavior. I like polybar, but it only shows the active tag independently from the monitor focus. I would like to see both monitors active tag, which is possible with xmobar, which for some reason I can't make it work with herbs. Yes, I have a working XMonad on my Void system, what can I say, I am a tiling wm junkie…

I like to watch videos on my second monitor, and especially Twitch with chatterino. I use mpv to watch the stream, and in herbs I found the easiest way to open 4 streams and still see chat. The default split is 50% of any of the remaining space for a frame (which you can change in your config file), so I can use chatterino, let's say 1/4 of the screen, and use the other 3/4 for four stream window in total, like a grid. I can make this layout it seconds, and there are script solutions to save these layouts (I am still trying to make it work). It is mindblowingly easy to use frames and I love it.

herbs-twitch-layout.png

I also have a nice working scratchpad, which works in a very interesting way. You can hide it as a usual scratchpad, however it works like a hidden tag, and you can use it to launch any program on it. In this way, you don't have to assign different shortcuts to launch different programs in a scratchpad, you can use that one for everything, much easier. This script also has some nice animation added, so it behaves like an old Quake terminal, you can even setup the speed. Since I am using kitty terminal, I can just open up multiple tabs for my used things, which is just really useful.

One thing that bothers me with herbs is that I doesn't support keychords, which I very much like to use in Xmonad and Bspwm (via sxhkd), and recently I even managed to apply a patch in dwm. I absolutely love the possibilities of billions of shortcuts.

For herbs, I have yet to make keychain.sh work, which is supplied on the official github, and I can't seem to find any good examples either. So for the time being I simplified my keybindings.

What I also like that you can simplify your autostart main config file for herbs, simple just including another file that holds the keybindings, themes or rules for windows. In this way, instead of dealing with a bigger file, you can focus on a specific part. I have tons of keybindings still, much better to put it in a separate file. Never mind theme changing. Reloading your autostart file, also reloads any changes you made inside the included files, and it is fairly quick in my experience.

About rules: you can apply the usual, start a specific program on a specific tag, which is extra nice if you have multiple monitors. You can make windows float, which I often do, like a calculator or pavucontrol and my image viewer Nsxiv.

There are many possibilities that you can read on the official herbstluftwm website. Really nice documentation, higly recommending reading the manual.


This website doesn't track you. I don't use any javascript or other scripts. I don't store any information about the visitors. It's just pure old fashioned HTML and some CSS. Hosted on Neocities and created with Emacs.