Files
lhns--steam-frame-nix/modules/steamvr-debugger.nix
T
Pierre Kisters 1ad0dd751e modules/cleanup.nix: orphan cleanup on every switch
Every module imports cleanup.nix (also exported as
homeManagerModules.cleanup), which
- puts steam-frame-nix-cleanup (install.sh cleanup) on PATH;
- runs `cleanup --orphans --quiet` after linkGeneration on every switch,
  keeping what the configuration still uses (steamFrame.cleanup.keep, set
  by the modules: debugger while steamvrDebugger is on, the Firefox desktop
  profile's user.js while its fix applies); in a dry run it runs with
  --dry-run;
- runs `cleanup --all` instead when Home Manager's `uninstall = true;` is
  set (the manual uninstall route);
- removes links of older versions at paths Home Manager is about to own
  before checkLinkTargets (steamFrame.cleanup.migrateLinks), which would
  count as collisions otherwise.

install.sh cleanup gains --quiet (only actions, deferrals and warnings;
the header only when something is printed). The Jellyfin module's own
removal of the old shim copy goes: cleanup does it.
2026-09-29 00:01:30 +02:00

98 lines
3.6 KiB
Nix

# SteamVR web helper debugger: DevTools of the dashboard (vrwebhelper) on
# 127.0.0.1:8087, for dashboard patches. On automatically (mkDefault) when a
# patch targets port 8087.
#
# The port opens only with VRWebHelper/DebuggerEnabled (requires a SteamVR
# restart). steamvr.vrsettings is rewritten by SteamVR from memory, so it
# can't be a store link or be edited while SteamVR runs: a oneshot merges just
# that key with jq before each steamvr.service start (drop-in Wants/After;
# ExecStartPre= would be too late, vrserver starts in the unit's own chain).
# Disabled, it resets the key only if it set it (marker in
# $XDG_STATE_HOME/steam-frame-nix); a manual setting is kept.
# Developer Mode forwards the port to 0.0.0.0:8088 (README, "DevTools on the
# LAN"); our patches use 127.0.0.1 only.
{ config, lib, pkgs, ... }:
let
cfg = config.steamFrame.steamvrDebugger;
usesDebugger = p: builtins.match "[a-z]+://[^/]*:8087(/.*)?" p.endpoint != null;
merge = pkgs.writeShellApplication {
name = "steamvr-webhelper-debugger";
runtimeInputs = [ pkgs.jq pkgs.coreutils ];
text = ''
f="$HOME/.config/openvr/config/steamvr.vrsettings"
marker="''${XDG_STATE_HOME:-$HOME/.local/state}/steam-frame-nix/steamvr-debugger"
${if cfg.enable then ''
want=true
'' else ''
if [ ! -e "$marker" ]; then
echo "not managed (VRWebHelper.DebuggerEnabled left as is)"
exit 0
fi
want=false
''}
mkdir -p "$(dirname "$f")"
[ -s "$f" ] || printf '{}\n' > "$f"
if [ "$(jq '.VRWebHelper.DebuggerEnabled' "$f")" = "$want" ]; then
echo "VRWebHelper.DebuggerEnabled already $want"
else
tmp="$(mktemp "$f.XXXXXX")"
trap 'rm -f "$tmp"' EXIT
jq --indent 3 --argjson v "$want" '.VRWebHelper.DebuggerEnabled = $v' "$f" > "$tmp"
chmod --reference="$f" "$tmp"
mv "$tmp" "$f"
echo "VRWebHelper.DebuggerEnabled set to $want (effective from this SteamVR start)"
fi
if [ "$want" = true ]; then
mkdir -p "$(dirname "$marker")"
touch "$marker"
else
rm -f "$marker"
fi
'';
};
in {
imports = [ ./cleanup.nix ./steam-ui-patches.nix ];
options.steamFrame.steamvrDebugger.enable = lib.mkOption {
type = lib.types.bool;
default = false;
defaultText = lib.literalMD ''
on automatically when a SteamVR dashboard patch (a
`steamFrame.uiPatches.patches` entry on port 8087) is enabled
'';
description = ''
SteamVR's web helper debugger (dashboard DevTools on 127.0.0.1:8087,
VRWebHelper/DebuggerEnabled in steamvr.vrsettings), needed by SteamVR
dashboard patches, which turn it on automatically. Takes effect after one SteamVR
restart; off resets the key at the next start. Developer Mode also
forwards the port to the LAN (0.0.0.0:8088).
'';
};
config = {
steamFrame.steamvrDebugger.enable =
lib.mkDefault (lib.any usesDebugger config.steamFrame.uiPatches.patches);
steamFrame.cleanup.keep = lib.optional cfg.enable "debugger";
systemd.user.services.steamvr-webhelper-debugger = {
Unit = {
Description = "Set SteamVR VRWebHelper/DebuggerEnabled (steam-frame-nix)";
Before = [ "steamvr.service" ];
};
Service = {
Type = "oneshot";
ExecStart = "${merge}/bin/steamvr-webhelper-debugger";
};
};
# Wants=, not Requires=: SteamVR still starts if the merge fails.
xdg.configFile."systemd/user/steamvr.service.d/webhelper-debugger.conf".text = ''
[Unit]
Wants=steamvr-webhelper-debugger.service
After=steamvr-webhelper-debugger.service
'';
};
}