The Linux desktop as a workshop

Draft notes on Wayland tooling, small open-source utilities, and why fixing your own setup is useful practice.

30 September 2026Draft
  • linux
  • wayland
  • tooling

/ This is a working draft. The structure is here; the details are still being verified and filled in.

Why desktop tooling is worth the time

A homelab and a desktop have the same failure modes as a production server, just with lower stakes: services that do not start, configuration that drifts, state that is lost on restart, and upgrades that break assumptions.

Working on them is practice. It is also where I first ran into problems that later mattered at work — session state, permission boundaries, and the difference between “it works until I log out” and “it works”.

Projects

umbriel-session — session save and restore for the Umbriel Wayland compositor. It snapshots windows, workspaces, and geometry, then restores them on the next login.

The interesting part is not the snapshot itself. It is deciding what counts as the same window after a restart: identifiers change, clients start in a different order, and some applications do not want to be restored at all.

soundcore-buds — a Noctalia plugin that surfaces Soundcore earbuds battery, listening mode, and ANC controls in the desktop bar.

This one is mostly protocol work: speaking to a device, handling the states it reports, and not blocking the shell while waiting for a response.

Both are small. Neither is trying to become a platform. That constraint is deliberate — a utility that solves one problem is easier to keep working than a framework that solves several.

What I keep learning

  • State is the hard part. Anything that has to survive a logout exposes assumptions about what is persistent.
  • Failure recovery matters more than features. A tool that fails loudly and recovers cleanly is better than one that works until it does not.
  • Upstream changes are part of the contract. Compositor and shell APIs move. Maintaining a small tool is partly maintenance of other people’s decisions.

Open questions

  • How much session state can be restored generically versus per-application.
  • Whether the device plugin should keep its own cache or read state on every bar refresh.
  • How to test desktop behaviour automatically without a full graphical test harness.