Commit Graph
3 Commits
Author SHA1 Message Date
Pierre Kisters 1672210ead firefox: desktop profile user.js only while its Firefox runs
The desktop profile's user.js link (undoing the fullscreen fix there) was
kept in place on every switch and before every launch. Now the launcher
(nested desktop only) makes it right before Firefox starts, waits for
Firefox instead of exec'ing it, and once it has exited and the profile is
no longer in use removes the link and the value Firefox stored from it in
prefs.js. A second launch that hands its URL to the running Firefox returns
at once and leaves both alone; a user.js of the user's own is never
touched. The desktop profile itself is a normal Firefox profile (browser
data) and is never removed.

No activation step touches profiles anymore: leftovers of a crash and what
older versions wrote (user.js copies and links, their prefs.js values) are
steam-frame-nix-cleanup's (orphans on switch), which leaves the desktop
link alone while the profile is in use; the firefox-desktop-userjs --keep
is gone. The launcher lives in firefox/launcher.nix; checks.firefox runs it
against a fake flatpak (link only while running, forwarded second launch,
prefs.js cleaned only once unlocked, own user.js untouched, Steam session).
2026-09-29 00:07:26 +02:00
Pierre Kisters b7b32d0aa9 steamvr-debugger: set DebuggerEnabled only while SteamVR runs
The key used to be merged into steamvr.vrsettings for good (reset at the
next start after disabling, via a marker). Now it is on only while SteamVR
runs and nothing depends on Nix to undo it:

- before each SteamVR start, the oneshot runs `install.sh
  steamvr-debugger-arm`: the key's value goes to
  ~/.local/state/steam-frame-nix/steamvr-debugger.armed ("absent", "false",
  "nofile"), the key is set (jq --indent 3, mode kept), and a runtime
  drop-in $XDG_RUNTIME_DIR/systemd/user/steamvr.service.d/
  50-steam-frame-nix-debugger.conf runs a /usr/bin-only restore script from
  $XDG_RUNTIME_DIR/steam-frame-nix on ExecStopPost= (daemon-reload only when
  newly written: once per boot). A key that is already true without .armed
  is the user's own and never touched. The old marker migrates to .armed
  ("absent").
- when SteamVR stops, the key goes back to its previous value (removed if
  it was absent, the file too if it only existed for the key) and .armed
  is removed. .armed is the only trace a power loss can leave; the next
  start or steam-frame-nix-cleanup resolves it.
- disabled: no unit and no drop-in at all; the orphan cleanup restores the
  key once SteamVR is stopped (or leaves it to the runtime drop-in while it
  runs).

A daemon-reload from a oneshot pulled in by a pending start job was tried
on dummy user units: the job survives and the new ExecStopPost= applies,
also on restart (stop, then the oneshot, then start).
checks.cleanup covers arming, re-arming, restoring and the user's own key.
2026-09-29 00:02:57 +02:00
Pierre Kisters 7255315b73 install.sh cleanup: remove what steam-frame-nix wrote outside the Nix store
`install.sh cleanup [--dry-run] (--all | --orphans [--keep <artifact>]...)`
knows every file any version wrote outside the store and Home Manager's
links, removes only what is provably its own, prints every action and
reports everything else as "left alone"; a second run changes nothing.
Only bash, coreutils, findutils, grep, sed, awk and jq (all in /usr/bin on
SteamOS), so it also works piped from curl after a rollback or with Nix gone.

- SteamVR debugger: VRWebHelper.DebuggerEnabled is put back to its value
  from before (steamvr-debugger.armed; the old empty marker means "absent"
  and is migrated), only while SteamVR is stopped. While it runs, a runtime
  drop-in (/run/user/<uid>/systemd/user/steamvr.service.d) runs a /usr/bin-only
  restore script from /run/user/<uid>/steam-frame-nix when SteamVR stops.
- icon fallback links into Breeze and their manifest (dirs only if they
  held nothing else; hicolor's mtime bumped so Steam rescans).
- Firefox: the desktop profile's user.js link, older user.js links and
  marker-headed copies, and the values they left in prefs.js (only with the
  profile closed; deferred otherwise).
- Jellyfin: the hwdec shim entries in the Flatpak override (devices=all
  only when it came with them), an empty override file, the old shim copy.
- the dashboard patches' saved state: --all only; --orphans removes just
  stale *.json.tmp files.

`install.sh uninstall` runs `cleanup --all` before removing Home Manager
(replacing its own ui-patches removal) and names what is deferred;
`install.sh status` shows what `cleanup --all` would do. The flake exports
it as packages.<system>.cleanup / apps.cleanup
(`nix run github:lhns/steam-frame-nix#cleanup -- --all`), and
checks.cleanup runs it against fake home and runtime dirs: every artifact
next to look-alikes that aren't ours, --dry-run, second runs, SteamVR
running (deferral, restore script), the user's own debugger key.
2026-09-28 23:57:35 +02:00