aboutsummaryrefslogtreecommitdiffstats
path: root/desktop
diff options
context:
space:
mode:
authorDanilo M. <danix@danix.xyz>2026-09-15 10:47:02 +0200
committerDanilo M. <danix@danix.xyz>2026-09-15 10:51:16 +0200
commitf6143e312cf9f20bc2b9be126eaa583f638538e0 (patch)
tree4128a950deaa74e72151bb124d2bf4be336aaf29 /desktop
parentf43f31a8efabcf160d6897191f99d173aa9f5c64 (diff)
downloadquickshell-f6143e312cf9f20bc2b9be126eaa583f638538e0.tar.gz
quickshell-f6143e312cf9f20bc2b9be126eaa583f638538e0.zip
docs: add the status registry design
Desktop modes as state: do not disturb and presentation mode, with one place that owns them. First of two specs; the notification daemon that replaces dunst is the second and consumes the registry's dnd mode rather than owning it. The registry comes first because DND belongs to the desktop rather than to the notification daemon, and because the daemon is the larger and riskier component. The design that needed deciding was not the toggle but the coupling. Presentation mode sets DND, so DND has two writers, and turning presentation mode off has to restore what the user had rather than clearing it. That rule is why this is a registry and not two booleans. State is one file per mode in XDG_RUNTIME_DIR, matching the convention breaktimer already writes on this machine. That directory is /run/user/1000, a tmpfs, so a reboot clears every mode with no cleanup code. Logout without reboot is less certain and the design does not lean on it: elogind runs here and its pam module documents removing the runtime directory at last logout, but the same manual says the module does nothing when the system was not booted with elogind as init, which on Slackware it is not. If removal does not happen, a mode survives a logout, which is the same behaviour as surviving a shell restart. FileView covers both directions: atomicWrites for the write, watchChanges for the watch, no shell-out. External watchers need close_write,moved_to because an atomic write arrives as a rename, the same trap the mail watcher hit with Xapian. Confirmed while designing: the compositor advertises zwp_idle_inhibit_manager_v1 and waybar's built-in idle_inhibitor already drives it here, so the inhibitor is asserted over Wayland rather than D-Bus. That module is replaced rather than demoted, because it owns its inhibitor object and cannot display state owned by anything else; left alongside the registry it would assert a second inhibitor and idle would resume only when both released. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01A7ThHHh5iTYbVfp3rNAkw2
Diffstat (limited to 'desktop')
0 files changed, 0 insertions, 0 deletions