💾 Archived View for l-3.space › dwm.gmi captured on 2023-04-19 at 22:28:54. Gemini links have been rewritten to link to archived content
⬅️ Previous capture (2021-11-30)
-=-=-=-=-=-=-
Time-stamp: <2020-09-04 15h31 EDT>
This post is part of my Qubes OS content.
In the past i had favoured manual tiling window managers. The reasons for this are primarily:
These points certainly eliminate traditional, floating window managers from consideration. Historically i have found automatic tiling window managers to be unsatisfactory because the third point above.
Owing to these preferences i landed up using Ratpoison.
Ratpoison is a simple Window Manager with no fat library dependencies, no fancy graphics, no window decorations, and no rodent dependence. It is largely modelled after GNU Screen which has done wonders in the virtual terminal market.
The screen can be split into non-overlapping frames. All windows are kept maximized inside their frames to take full advantage of your precious screen real estate.
All interaction with the window manager is done through keystrokes. ratpoison has a prefix map to minimize the key clobbering that cripples Emacs and other quality pieces of software.
This was, i think, my first love and it will always have a special place in my heart. It is lightweight, manages windows exactly as i like them, has a modal leader key (yes!), and is entirely keyboard driven.
But then i learnt of Emacs and the temptation of power was too great. All roads lead to EXWM i'm sure.
This allowed me to use Emacs as my window manager. There was much rejoicing, and i spent many hours ``optimising my environment for work'' (certainly many more than were ever spent working). Although i felt a pang of guilt for abandoning trusty Ratpoison for the frankenstein monster that was my sprawling Emacs setup, ... simulation keys!
EXWM has a built-in feature to translate certain, Emacs-style inputs into things the rest of the world can understand. C-n --> downarrow, for example.
Warning: these are dangerous habits to form because when they're gone, chaos ensues (i'm looking at you, Firefox, with your un-rebindable C-n for new window!).
Unfortunately when i was thrust from my garden of Eden into the real world of misbehaving software and vulnerable applications the Emacs-for-everything dream had to end. Data separation and access control were the order of the day, and i simply could not run a flat environment like Emacs in the most trusted heart of my computer.
So i compromised.
That compromise was
If i truly had to minimise the attack surface of dom0, i would have to run a small, well-curated window manager which could be made to understand the border colouring and virtual machine separation of Qubes. These criteria left little room, and DWM emerged as almost the unique choice.
Of course, vanilla DWM wasn't going to work (at the very least, it didn't understand Qubes), and so i had to apply some patches, do some configuration, and write some supporting scripts. You can find the result of this effort here:
https://git.sr.ht/~tslil/qubes-dwm
Let's take a quick look at the various patches and scripts i'm employing in my setup.
Because Qubes uses LightDM for its login manager (and i'm too afraid to get rid of this), i couldn't employ the usual tricks of writing startup stuff to ~/.xinitrc . There might be some XDG-style way to do this, but simpler was to use the autostart patch which looks at ~/.config/dwm/autostart{,_blocking}.sh and runs these two scripts (waiting on the latter).
I use these to set keyboard layouts, start the screen locker, set the wallpaper, run xdg_autostart, and run the dwm status generator.
As i mentioned above, i find that my laptop screen is too small to split into more than two regions. The solution to this for me is the deck layout. This allows me to have one large region for one window and one small region to display one of any of the remaining windows.
I don't know to what extent this counts as automatic tiling, but it's my preferred layout and the default one in the config.
It's helpful to have different layout schemes on different tags, and to be able to change the layout scheme without effecting other tags.
This is probably my raison d'être for using DWM. Someone already went through the motions of having DWM display the correct border colours for windows based on their VMs of origin, and to annotate the displayed title with this information.
Apparently the DWM devs enjoy turning their heads to the left:
putting these things together means that i am staring at the left-most 30% of screen more than any other location. Reversing the side of the master region seems only natural.
This one is fairly self-explanatory. DWM has a bar anyway, which i need to use to know the VM details for the currently focused window. I might as well take some of that space to display all those fancy tray icons (tomb-gtk-tray, pulse-audio, nm-applet for VPN and internet, Qubes-specific stuff about clipboards, ...).
My DWM configuration is held together by scripts and hope. As is customary for DWM setups, i'm using dmenu to launch applications. There was a fair bit of fiddling involved in setting this up sanely.
I want the suggested list of programmes to be extracted from a list of .desktop files relevant to the VM of the currently active window, and i'd like the colours to match too. This is implemented by scripts/dmenu_cur and its helpers. The rest is all fairly straightforward stuff about locking the screen, generating a status-line, and parsing autostart entries.