Skip to content

Appearance: real host config reads and reviewed, owned host overrides - #515

Draft
raiseCatError wants to merge 2 commits into
devfrom
feature/appearance-welcome-20261028
Draft

raiseCatError wants to merge 2 commits into
devfrom
feature/appearance-welcome-20261028

Conversation

@raiseCatError

Copy link
Copy Markdown
Owner

Refs #399

What changed

  • /appearance reads Ghostty and Kitty opacity, blur and background from the real configuration graph. Ghostty: every default root, then one include queue (per v1.4.0 Config.zig). Kitty: the first existing kitty.conf (XDG, then ~/Library/Preferences/kitty on macOS), includes in place. Unresolved theme values, dynamic includes and unsafe values are reported, not invented.
  • Saving shows the exact change. Files are written only after Enter: an NMSh-owned fragment, one recorded include hook and an ownership ledger. Snapshots are re-verified before each atomic write, and NMSh's own writes roll back on failure. Setup refuses when a later include would override the managed values.
  • R removes exactly the recorded hook. Later user lines stay on their own line, including when the original file had no final newline. Removal also recovers when the hook is already gone.
  • Kitty gets the appearance adapter but not the Ghostty key-binding installer, so /keyboard keeps its guidance on Kitty.
  • The old Ghostty reader returned fixed values and the old saver appended silently. Both are replaced.

Verification

  • Focused tests (hostAppearance, appearanceHub, hostIntegration, hostProfiles, ghosttyKeyboard): 39/39 pass. Typecheck and git diff --check pass.
  • npm run verify on the pre-review source: 4592 of 4608 pass. The 2 failures are live startup timeouts under machine load (absolutePathLive fish, ansiLiveRegion): the frontend wrote 0 bytes in 20 s. Each passes when rerun alone. The final review fixes touch only host-appearance files and were checked with the focused set.
  • An independent review of the final diff found no blocker. Both should-fix items were fixed with regressions.
  • All tests use private temporary homes. No real host configuration was read or written.

Needs human testing (NOT RUN)

  • Ghostty and Kitty on macOS: open /appearance, change opacity/blur/background, review with S, confirm with Enter, reload the host, then remove with R. Check that the config is byte-identical apart from the hook.
  • A Kitty user whose config is only in ~/Library/Preferences/kitty.
  • GPU rendering, opacity restart behavior and blur on real hosts are not validated.

…overrides

/appearance now reads Ghostty and Kitty opacity, blur and background from the
actual configuration graph (Ghostty: every default root, then one include
queue; Kitty: the first existing kitty.conf, includes in place) and reports
unresolved or unsafe values instead of inventing them.

Saving shows the exact change and writes only after Enter: an NMSh-owned
fragment, one recorded include hook and an ownership ledger, with captured
snapshots re-verified before each atomic write and NMSh's own writes rolled
back on failure. R removes exactly the recorded hook, keeping later user
lines on their own line even when the original lacked a final newline, and
recovers when the hook is already gone. Setup refuses when a later include
would override the managed values.

Kitty gets the appearance adapter but not the Ghostty key-binding installer,
so /keyboard keeps its guidance there. On macOS Kitty's config in
Library/Preferences is used instead of creating a new XDG file that would
shadow it.

Refs #399

This branch has not been deployed

No deployments
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant