Document the settings vocabulary and its traps
Records how to add a setting -- one schema entry -- and the failure modes found building the pages. Every one of them fails silently rather than loudly, which is why they are worth writing down: a wrong readAs makes successful writes look rejected, hyprpaper accepts an all-outputs wallpaper request and ignores it, and a copy of the Quickshell config shares the live shell's ID so an "isolated" harness can kill the running desktop. Also documents the two generated configurations and why they are generated: ~/.config/hypr is a symlink into this repository, so writing there at runtime would commit machine state to a tracked file. Claude-Session: https://claude.ai/code/session_01BRvzt4H8XXLPVH5MyYdk9L
This commit is contained in:
@@ -285,3 +285,64 @@ can run in parallel with it.
|
||||
|
||||
Nothing here is committed yet; `main` has 20+ uncommitted paths from prior work
|
||||
that should get a restore point before Stage 1 begins.
|
||||
|
||||
---
|
||||
|
||||
## Stage 5 — Replace GNOME Settings for what Panama owns
|
||||
|
||||
Not in the original plan. Added after the settings vocabulary made new pages
|
||||
cheap enough that the limiting factor stopped being effort and started being
|
||||
scope. Built jointly with the codex agent, which took default applications, the
|
||||
page migrations, and the remaining hardcoded values.
|
||||
|
||||
- [x] **Wallpaper** — thumbnail grid, applied over hyprpaper IPC.
|
||||
- [x] **Power & Lock** — screen blank, lock, suspend, lock-before-sleep.
|
||||
- [x] **Date & Time** — timezone and network time via `timedatectl`.
|
||||
- [x] **Accessibility** — pointer size, text scale, motion, contrast.
|
||||
- [x] **Search that indexes settings**, not page names.
|
||||
- [x] **Editable Dock** — reorder, unpin, add.
|
||||
- [x] **Settings snapshots** — save, list, restore.
|
||||
- [x] **Rebindable shortcuts.**
|
||||
- [ ] Displays: resolution, refresh rate, scale, rotation.
|
||||
- [ ] Per-application notification rules.
|
||||
- [ ] Window rules (float/tile/workspace) as a page.
|
||||
|
||||
**Landed.** Each of these turned up something the compositor or its tools do
|
||||
differently than documented, and in every case the failure mode was silence
|
||||
rather than an error:
|
||||
|
||||
* **hyprpaper 0.8 ignores the "all outputs" form.** `<empty>,<path>` is accepted
|
||||
and does nothing, so a wallpaper set that way appears to succeed and never
|
||||
changes. Its IPC is also much smaller than older versions suggest — `preload`,
|
||||
`listloaded`, `unload`, and `reload` all answer "invalid hyprpaper request".
|
||||
* **`cursor:inactive_timeout` is answered as `float`, not `int`.** A wrong
|
||||
`readAs` does not fail loudly; it makes every write to that key look rejected,
|
||||
and the user sees an error for a change that worked.
|
||||
* **Snapshot filenames collided at one-second resolution.** A save followed
|
||||
promptly by a restore produced the same name twice, and the restore's own
|
||||
safety snapshot overwrote the file it was about to read. Found by the
|
||||
contract, which restores immediately after saving.
|
||||
* **Keying bind overrides by description moved every bind sharing one.**
|
||||
Rebinding `SUPER+C` also dragged `XF86Calculator` onto the same chord.
|
||||
Descriptions are not unique; chords are.
|
||||
* **The GNOME delegation allow-list named a panel that does not exist.**
|
||||
`users` is not in `gnome-control-center --list`, so that button opened
|
||||
nothing.
|
||||
* **A copy of the Quickshell config shares the live shell's ID.** Quickshell
|
||||
derives it from content rather than path, so an "isolated" harness built by
|
||||
copying the config directory can kill or drive the running desktop. This took
|
||||
the live shell down twice during development. Harnesses pointing at a single
|
||||
distinct `.qml` file are unaffected.
|
||||
|
||||
Two configurations are now generated rather than edited, because `~/.config/hypr`
|
||||
is a symlink into this repository and writing there at runtime would put machine
|
||||
state into a tracked file: hypridle's config, into `XDG_STATE_HOME` with a
|
||||
systemd drop-in pointing at it, and the wallpaper, which is applied over IPC and
|
||||
re-applied at shell start instead of being written into `hyprpaper.conf`.
|
||||
|
||||
The schema gained a `json` type for structured values — the dock's pinned list
|
||||
and the keybind overrides — so they live in the one settings file and are
|
||||
covered by the one reset, rather than each growing a preference store of its
|
||||
own. `restoreDefaults()` spans every store Panama owns, including the Home
|
||||
accessory arrangement, which it reaches through that service's existing public
|
||||
aliases rather than an API added for the purpose.
|
||||
|
||||
Reference in New Issue
Block a user