blackhole://nilFM

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:

Other behaviors I wanted that ryudo didn't provide:

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.

Desktop screenshot showing: panel with minimized window button at top, terminals at center-ish, audacious music player at right, and dock at bottom-left

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:

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

Openbox root menu showing the pipe (sub)menu for removable storage. A single entry is visible showing its device node and label.

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.