Files
nixos/hosts/yarn/optiscaler-fh5-rdna3.ini
Simon Gardling e010b4e3c1 game-mods: drop in-house launchOptions writer, hardcode FH5 ini
Replaces three handfuls of custom code with upstream / static data:

- Per-app Steam launch options now declared via different-name/steam-
  config-nix's `programs.steam.config.apps.<n>` instead of a custom
  ~70-line `apply_launch_options` Python function. The dropped writer
  was racy: it edited localconfig.vdf without checking for a running
  Steam, so any timer firing while Steam was open would lose its
  changes on the next Steam shutdown. steam-config-nix's `closeSteam`
  flag closes that race.

  Also moves the GE-Proton compat-tool pin to declarative config —
  one fewer manual click in Steam UI to remember.

- `mods.<>.launchOptions` option, the `launchOptionsData` aggregation,
  and `LAUNCH_OPTIONS_DATA` are removed from desktop-game-mods.nix.
  The module now does file-drops only; Steam config lives in its own
  `programs.steam.config` namespace, where it belongs.

  fh5-vkd3d-no-hvv (which existed only to set VKD3D_CONFIG) collapses
  into the FH5 launchOptions block in hosts/yarn/default.nix.

- `unitConfig.X-ConfigHash` on game-mods.service is replaced with
  `restartTriggers`. NixOS already emits `X-Restart-Triggers=<hash>`
  on the unit; the workaround was redundant. The Type=oneshot,
  RemainAfterExit=no semantics make `systemctl restart` re-run
  ExecStart cleanly on hash change.

- The awk pipeline that patched OptiScaler's stock OptiScaler.ini at
  build time is replaced with a hand-written hosts/yarn/optiscaler-
  fh5-rdna3.ini containing only the keys we override (5 of them).
  OptiScaler's Config::readString defaults missing keys to "auto"
  (Config.cpp:1568), so a minimal file is sufficient. Side benefits:
  one upstream-source dependency removed, a key-rename in upstream
  becomes a behavior change rather than a silent awk-no-match.

  Override values + sources:
    Fsr4Update=true              FH5 wiki, FSR4 Linux Setup
    DlssReactiveMaskBias=0.65    FH5 wiki, "Known Issues"
    FsrNonLinearColorSpace=true  FSR4 wiki, "Image Quality"
    EnableFsr2Inputs=false       FH5 wiki, "Known Issues"
    Dxgi=false                   FH5 wiki

- forza-trigger's three custom Python derivations (pydualsense,
  hidapi-usb, fdp) factored out of default.nix into a sibling
  python-packages.nix. Same logic, single-purpose file. Bumping a
  version is now a one-place hash roll.

- pkgs.dualsensectl removed from the daemon's environment.system-
  Packages. Single-shot writes from the CLI get clobbered by the BG
  sendReport thread within ~4ms anyway, so the tool is only useful
  with the daemon stopped — not worth the unconditional install.
  Bring it in ad-hoc with `nix-shell -p dualsensectl`.
2026-05-03 00:35:49 -04:00

40 lines
1.6 KiB
INI

; OptiScaler.ini overrides for Forza Horizon 5 on RDNA 3 (Navi 32) under
; Linux/Proton with FSR 4 INT8 enabled. Tested on OptiScaler 0.9.1.
;
; Keys not listed here fall through to OptiScaler's "auto" defaults
; (Config.cpp: missing keys silently resolve to std::nullopt -> _defaultValue).
;
; Sources:
; - https://github.com/optiscaler/OptiScaler/wiki/Forza-Horizon-5
; - https://github.com/optiscaler/OptiScaler/wiki/FSR4-Compatibility-List
;
; Companion launch-option env vars (set via programs.steam.config in
; hosts/yarn/default.nix):
; PROTON_FSR4_UPGRADE=1
; DXIL_SPIRV_CONFIG=wmma_rdna3_workaround (RDNA 3 INT8 visuals fix)
; VKD3D_CONFIG=no_upload_hvv (vkd3d-proton stutter workaround)
[Inputs]
; FSR2 inputs are buggy in FH5; OptiScaler 0.7.8+ auto-disables them per game
; but explicit is safer across version bumps. Source: FH5 wiki ("Known Issues").
EnableFsr2Inputs=false
[FSR]
; DirectX 12 Agility SDK upgrade. Required for the FSR 4 path on RDNA 3 INT8
; under Proton (the FFX SDK shipped with the game predates FSR 4). Source:
; FSR4 Compatibility wiki, "Linux Setup" section.
Fsr4Update=true
; FH5 wiki: 0.65 fixes flickering lights and reduces car ghosting with FSR-FG.
DlssReactiveMaskBias=0.65
; FSR 4 on RDNA 3 IQ recommendation; mitigates white flashes and artifacting
; from the INT8 emulation path. Source: FSR4 Compatibility wiki, "Image Quality".
FsrNonLinearColorSpace=true
[Spoofing]
; FH5 wiki recommendation. The auto default on AMD spoofs to NVIDIA, which
; OptiScaler 0.9 deliberately drops for FH5; pinning false here makes the
; behavior version-proof.
Dxgi=false