another custom desktop environment
I like building desktop environments; I've used ryudo as my daily driver for most of the past couple years but recently came back to a custom openbox-based setup, and thought I'd share some of my musings on this.
Behavior from ryudo I wanted to keep:
- window management via the root menu (riosh)
- explicit window borders around even windows that don't want them
- minimized windows being shared between all desktops (both restoring to the active desktop and forming a common list)
- alt-tab doesn't include minimized windows
Other behaviors I wanted that ryudo didn't provide:
- real panel and dock support (both for my own aesthetic enjoyment and for others who have to use my computer(s))
- titlebars with buttons (same reason)
- seamless handling of (most) external storage
- EWMH support (for cortile)
Another big inspiration is NeXTSTEP/OPENSTEP (hereafter I will just call it NeXTSTEP), which make me lean toward panel plus dock, and also informs my design aesthetic overall.
I decided to go back to my roots and go for openbox + tint2 + plank, but I still needed to modify some stuff to get things to behave and look the way I was imagining.
theme: steppenwolf and friends
steppenwolf is my trusty application theme in gray, black, and turquoise; and I have honed in on an accompanying terminal/editor/panel aesthetic that offsets it with translucent blue. urchin is the matching theme I made for KWin, and I wanted the same kind of aesthetic for this setup but slightly more understated. abyss is the next evolution of urchinV2, with thicker borders and forgoing the rounded mac-style buttons.
paradigm: NeXTSTEP strikes again
NeXTSTEP had an awesome UI. It's no wonder macOS absorbed it and nearly every other modern desktop interface takes its main tropes from it. This setup is no exception in that regard.
Elements from NeXTSTEP I wanted to emphasize in this desktop environment are:
- dock with application icons
- dedicated interface for iconified (minimized) windows
The former is easily accomplished by plank, and I already have a steppenwolf theme for it.
The global application menu used by macOS and most of its UI-clones is not something I care about (most of my daily programs either don't have a menubar or, in the case of acme9k, have such a specialized type of menubar that it's beyond such a thing). Instead, I wanted to use the space in the middle of the panel for the minimized window buttons.
But while tint2 has an option to not include minimized windows, it doesn't include an option to only include minimized windows. So I made a patch to achieve this. I love C.
the finer points of window management
There were a couple things that openbox didn't do right on the money, as amazing of a window manager as it is. But, C is great and so is the openbox codebase, so it was easy to fix: this patch reverts a recent change in the codebase that added a top border to maximized windows (uggo), as well as tweaks the cycle behavior to not include minimized windows, and makes the window border (not titlebar) mandatory on all non-dock windows.
this part of the openbox config handles unminimizing minimized windows as ryudo does (pay no mind to the misleading comment about zentile after that tag — leftover from trying to manage the window-switching logic from the config instead of the code).
The other part of this is cortile, which is a great program written in Go to cooperatively tile your windows with an EWMH-compliant window manager. It works a lot better than its predecessor.
handling external storage
Another nice thing in a desktop environment is how it handles external storage. My main media storage is on ZFS, which is not supported by udisks (and so I may add some custom biz for that in the future), but for other external storage I wrote this script which is used in an openbox pipe-menu. It lists likely candidates for external filesystems with udiskie (along with an eject icon if they are mounted already), and lets you toggle the mount status with a click.
you do you
The personal computer is not dead. It just takes a bit of elbow grease to lift out of the muck.