xdg: the account's folders and the machine's default applications #50

Merged
mesh-admin merged 1 commits from feat/xdg-module into main 2026-10-05 09:53:31 +00:00
Contributor

A new Go module for the workstations' XDG conventions (hq ADR 0208, 0182, 0174, 0210). It claims no seat, needs no display and makes no contribution.

Owns

  • ~/.config/user-dirs.dirs, whole, adopted from the operator's file. The desktop machine has three folders pointed at the home, so those three are settings: desktop-dir, publicshare-dir and videos-dir. They have no default; set the mesh's layer to $HOME/Desktop, $HOME/Public and $HOME/Videos, and the desktop machine's layer to $HOME/. One improvement: PROJECTS becomes ~/projects.
  • ~/.config/user-dirs.conf with enabled=False. I measured xdg-user-dirs-update 0.20, which dex runs at every login. While it is enabled it reassigns a missing folder to the home, adds a line for each default the file lacks and rewrites the file. Once disabled it does nothing, even with --force.
  • ~/.config/user-dirs.locale.
  • /etc/xdg/mimeapps.list: the machine's default applications. Applications read this list last, so the person's own ~/.config/mimeapps.list always wins, and the mesh never writes that file.
  • Packages: xdg-user-dirs and xdg-utils.

Why the mimeapps list is not a block in the person's file. I measured this against copies of the file. xdg-mime reads the first of two [Default Applications] groups and GLib reads the last, so the two answered differently. gio mime merged the groups and dropped the block's markers. xdg-mime default wrote the person's choice inside the mesh's block, where the next push would remove it.

Autostart is listed, not owned. Each entry belongs to its application's module.

Tools: xdg_user_dirs, xdg_default (with set, it runs xdg-mime default and writes the person's list), xdg_open_handlers, xdg_autostart (applies dex 0.10's own rules), xdg_check.

Testing: go vet and go test pass, using fakes and xdg-mime/gio output recorded on the laptop. mctl module check modules/* passes for all 105 manifests. I also ran the tools read-only against the laptop. The README covers the migration for each workstation.

Not merged, built or assigned.

A new Go module for the workstations' XDG conventions (hq ADR 0208, 0182, 0174, 0210). It claims no seat, needs no display and makes no contribution. **Owns** - `~/.config/user-dirs.dirs`, whole, adopted from the operator's file. The desktop machine has three folders pointed at the home, so those three are settings: `desktop-dir`, `publicshare-dir` and `videos-dir`. They have no default; set the mesh's layer to `$HOME/Desktop`, `$HOME/Public` and `$HOME/Videos`, and the desktop machine's layer to `$HOME/`. One improvement: PROJECTS becomes `~/projects`. - `~/.config/user-dirs.conf` with `enabled=False`. I measured xdg-user-dirs-update 0.20, which dex runs at every login. While it is enabled it reassigns a missing folder to the home, adds a line for each default the file lacks and rewrites the file. Once disabled it does nothing, even with --force. - `~/.config/user-dirs.locale`. - `/etc/xdg/mimeapps.list`: the machine's default applications. Applications read this list last, so the person's own `~/.config/mimeapps.list` always wins, and the mesh never writes that file. - Packages: `xdg-user-dirs` and `xdg-utils`. **Why the mimeapps list is not a block in the person's file.** I measured this against copies of the file. xdg-mime reads the first of two `[Default Applications]` groups and GLib reads the last, so the two answered differently. `gio mime` merged the groups and dropped the block's markers. `xdg-mime default` wrote the person's choice inside the mesh's block, where the next push would remove it. **Autostart** is listed, not owned. Each entry belongs to its application's module. **Tools:** `xdg_user_dirs`, `xdg_default` (with `set`, it runs `xdg-mime default` and writes the person's list), `xdg_open_handlers`, `xdg_autostart` (applies dex 0.10's own rules), `xdg_check`. **Testing:** go vet and go test pass, using fakes and xdg-mime/gio output recorded on the laptop. `mctl module check modules/*` passes for all 105 manifests. I also ran the tools read-only against the laptop. The README covers the migration for each workstation. Not merged, built or assigned.
mesh-admin added 1 commit 2026-10-05 09:50:47 +00:00
The workstations' XDG conventions had no owner: xdg-user-dirs-update rewrote
the folders file at every login, both machines' default-application lists
named an editor neither has, and the laptop kept two dead links of the
retired predecessor. The module adopts the operator's folders (three as
settings, as the machines differ), disables the update so it cannot undo the
mesh's file, and writes the machine's own mimeapps list, the last one read,
so the person's choices in their own list always win. Autostart is listed,
not owned: each entry is its application's module's.
mesh-admin merged commit 37bb53ab95 into main 2026-10-05 09:53:31 +00:00
mesh-admin deleted branch feat/xdg-module 2026-10-05 09:53:31 +00:00
Author
Contributor

Delivery novox/mesh-catalog@37bb53ab9524 — held since 2026-10-06T23:05:28Z

Held for a person: merged without a passing check: only a person decides that it goes on — mesh-delivery.release with why lets it go on.

Delivery plan — builds xdg → g14, shanks; no bus step

  • tier 0: xdg
  • g14: receives xdg
  • shanks: receives xdg

Transitions

  • 2026-10-06 23:05 (new) → proposed (announced): novox/mesh-catalog#50 merged; its head was not heard by this owner, so it is made from the forge's word
  • 2026-10-06 23:05 proposed → held (merged-unchecked): merged without a passing check — a verdict known with it is taken first: only a person decides that it goes on

The commit's note under refs/notes/mesh-plan keeps every transition: git log --notes=mesh-plan.

<!-- mesh-delivery:view --> **Delivery** `novox/mesh-catalog@37bb53ab9524` — **held** since 2026-10-06T23:05:28Z Held for a person: merged without a passing check: only a person decides that it goes on — `mesh-delivery.release` with why lets it go on. **Delivery plan** — builds xdg → g14, shanks; no bus step - tier 0: xdg - g14: receives xdg - shanks: receives xdg **Transitions** - 2026-10-06 23:05 (new) → proposed (announced): novox/mesh-catalog#50 merged; its head was not heard by this owner, so it is made from the forge's word - 2026-10-06 23:05 proposed → held (merged-unchecked): merged without a passing check — a verdict known with it is taken first: only a person decides that it goes on The commit's note under `refs/notes/mesh-plan` keeps every transition: `git log --notes=mesh-plan`.
Sign in to join this conversation.
No Reviewers
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: novox/mesh-catalog#50