Commit Graph

1760 Commits

Author SHA1 Message Date
c3139fd659 update
All checks were successful
Build and Deploy / mreow (push) Successful in 4m7s
Build and Deploy / yarn (push) Successful in 1m7s
Build and Deploy / muffin (push) Successful in 1m13s
2026-05-04 14:49:35 -04:00
6501fe2ddb forza-trigger: rewrite 2026-05-04 14:47:00 -04:00
09175cd0dc torrent-audit: make more robust 2026-05-04 14:46:41 -04:00
ce42ccdcc0 wireshark: disable (build fails)
All checks were successful
Build and Deploy / mreow (push) Successful in 1h37m30s
Build and Deploy / yarn (push) Successful in 15m23s
Build and Deploy / muffin (push) Successful in 42s
2026-05-03 23:10:05 -04:00
8d3436ff8b update
Some checks failed
Build and Deploy / mreow (push) Failing after 5m48s
Build and Deploy / muffin (push) Has been cancelled
Build and Deploy / yarn (push) Has been cancelled
2026-05-03 23:01:45 -04:00
35ae3087d2 pi: do not grep/find over /nix/store 2026-05-03 22:59:47 -04:00
71b797730a fh5: use proton experimental
All checks were successful
Build and Deploy / mreow (push) Successful in 3m33s
Build and Deploy / yarn (push) Successful in 1m25s
Build and Deploy / muffin (push) Successful in 1m6s
2026-05-03 22:47:49 -04:00
1fc2f995c7 yarn: forza dualsense adaptive trigger bridge 2026-05-03 22:47:41 -04:00
4d0ba317e1 Revert "lact: disable undervolt"
This reverts commit 6e69b40b4e.
2026-05-03 22:45:12 -04:00
a65a7e7bda steam-config-nix: move to my fork and drop gameMods 2026-05-03 22:45:11 -04:00
1686a2ecc5 remove stupid comment from optiscalar config 2026-05-03 22:44:15 -04:00
e4b3c19d00 yarn: drop GE-Proton compat-tool pin from steam-config-nix
nixpkgs' proton-ge-bin (the package wired into programs.steam.extra-
CompatPackages via modules/desktop-steam.nix) registers in Steam's
compat-tool list under its versioned id, currently GE-Proton10-34.
steam-config-nix's README example uses the unversioned string
"GE-Proton", which on a fresh boot wrote that literal value into
localconfig.vdf — Steam resolved it to no installed tool and silently
fell back to bundled Proton 10. FH5 then launched on stock Proton,
which doesn't pick up PROTON_FSR4_UPGRADE the way GE does.

Drop both `compatTool` (per-app) and `defaultCompatTool` (global).
The wrapper-based launchOptions.env path is unaffected — env vars
still pass through to whatever Proton Steam ends up using. Tool
selection goes back to manual Steam UI > Properties > Compatibility.

A versioned pin (`compatTool = "GE-Proton10-34";`) would work but
couples the host config to whatever the proton-ge-bin nixpkgs entry
ships this week; not worth the maintenance.
2026-05-03 22:44:14 -04:00
2404792b61 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 22:44:14 -04:00
2680b85d77 game-mods: restore BACKUP_SUFFIX, doc launchOptions, fix blank lines
Three small follow-ups to 1751603:

- BACKUP_SUFFIX was lost during the launchOptions refactor. apply_mod
  references it on every non-skip path (new target, drifted bytes, or
  replace mode), so the moment a deployment hit one of those, the
  service would NameError at runtime. The bug was latent on yarn
  because every dropped file's bytes already matched its source, so
  every apply short-circuited at the byte-match check; an empirical
  rm libxell.dll + systemctl start reproduced the NameError before
  the fix and showed a successful recreate after.

- Mention launchOptions in the leading file docstring. The Example
  block already covers file ops; the new option had no entry-level
  doc.

- Normalize blank lines between top-level Python defs in the heredoc
  (PEP-8 wants exactly two: we had four between apply_mod and
  apply_launch_options, zero between apply_launch_options and main).
2026-05-03 22:43:55 -04:00
510d2702b7 yarn: FH5 OptiScaler FSR 4 + VKD3D upload-hvv workaround
Drops OptiScaler v0.9.1 + a FH5-tuned OptiScaler.ini into the FH5
install dir to unlock FSR 4 INT8 on this RDNA 3 (Navi 32) box.
OptiScaler intercepts FH5's DLSS/XeSS calls and reroutes them through
the bundled FFX SDK. Per the OptiScaler FH5 wiki page: rename
OptiScaler.dll to dxgi.dll, set Dxgi=false, DlssReactiveMaskBias=0.65,
and Fsr4Update=true for the INT8 RDNA 3 path.

Sets Steam launch options PROTON_FSR4_UPGRADE=1 and
DXIL_SPIRV_CONFIG=wmma_rdna3_workaround on fh5-optiscaler (the FSR 4
wiki documents both as required for RDNA 3 on Linux).

fh5-vkd3d-no-hvv is its own mod (no files, just one launchOptions
entry for VKD3D_CONFIG=no_upload_hvv) so the upload-hvv workaround
can be removed when a future Proton release fixes the underlying
issue without disturbing the OptiScaler config.

Extends the intro skip stub to cover the hires variant of the
T10/Microsoft Studios splash; the engine picks SD or hires based on
the installed asset profile, so stub both per PCGamingWiki.
2026-05-03 22:43:54 -04:00
4b7f23859e optiscaler: package v0.9.1
stdenvNoCC + p7zip extraction; strips installer scripts and README,
keeps Licenses/. dontFixup since the artifacts are Windows DLLs.
meta.license is unfreeRedistributable to reflect the bundled XeSS
(Intel SLA) alongside the GPL-3.0 source.

Wires lib/overlays.nix into mkDesktopHost (was muffin-only) and adds
"optiscaler" to the unfree allowlist on jovian hosts so yarn can
consume it without flipping the global allowUnfree flag.
2026-05-03 22:43:32 -04:00
713eb5f880 game-mods: list-merged launchOptions, init mode, writable targets
Three additions on top of the file-replacement scaffolding:

- mode = "init": create-on-first-apply, leave-alone-otherwise. For
  files the application writes back to (configs edited in-game, save
  files). Operator pushes a new template by deleting the target.

- chmod 644 after every copy. shutil.copy2 preserved the source's
  /nix/store mode (0o444), which made dropped DLL configs read-only.
  Apps that wrote back (OptiScaler "Save INI") got EACCES, which in
  OptiScaler's case cascaded into CreateSwapChainForHwnd returning
  E_FAIL and crashed FH5 on launch.

- launchOptions = listOf str. Multiple mods targeting the same
  steamAppId have their lists concatenated (mod-name alphabetical),
  joined with spaces, %command% appended once. Written into Steam's
  per-app block in userdata/<id>/config/localconfig.vdf via vdf
  parse + atomic os.replace. Idempotent.

- X-ConfigHash on the systemd unit so switch-to-configuration switch
  re-runs apply when the manifest changes.
2026-05-03 22:43:32 -04:00
21a32b76b7 game-mod: extend module 2026-05-03 22:43:32 -04:00
50568aa01b steamos: disable steam deck cmdlineConfig for non-steamdeck hosts 2026-05-03 22:43:32 -04:00
483961ac1b lact: disable undervolt 2026-05-03 22:43:31 -04:00
a1d2090ff2 game-mods: init
Add override for fh5 startup video
2026-05-03 22:43:30 -04:00
69ac586e98 omp: remove patch 2026-05-03 22:42:43 -04:00
d475e368c2 lact: -130 -> -120 2026-05-03 22:42:43 -04:00
c5eed7679c update 2026-05-03 22:42:43 -04:00
004d5962bb lact: -150 -> -130 2026-05-03 22:42:43 -04:00
975c4f7af1 yarn: declarative lact config 2026-05-03 00:35:48 -04:00
06a192c57f yarn: PROPERLY enable amdgpu overdrive 2026-05-03 00:35:48 -04:00
c7416f114b AGENTS.md: yarn is zen 3, not zen 5
ASUS ROG STRIX B550-I GAMING is AM4 (zen 2/3 only). lspci reports
Matisse/Vermeer data fabric → Vermeer = ryzen 5000 = zen 3.
2026-05-03 00:35:48 -04:00
12b038cba7 yarn: rotate tpm identity after fTPM reset
BIOS 2423→4101 update on yarn required an fTPM reset, which broke the
sealed age identity at /var/lib/agenix/tpm-identity. Bootstrapped a new
identity against the new SRK and rotated yarn's recipient.

age-plugin-tpm 1.0+ emits age1tag1… (p256tag) recipients by default and
refuses to encrypt to legacy age1tpm1… ones, so rotated mreow's recipient
to the same encoding (same key, new bech32 HRP) and added an
age-plugin-tag→age-plugin-tpm symlink in the rage wrapper so rage's
plugin dispatch finds the binary under the new prefix. Stripped the
trailing host labels from the tpm recipient strings — rage's stricter
bech32 parser now rejects the trailing whitespace; labels live in
adjacent Nix comments instead.
2026-05-03 00:35:48 -04:00
394b890008 yarn: add impermanence for bluetooth devices (doesn't forget them now) 2026-05-03 00:35:48 -04:00
5637eccc8d oo7-daemon: cherry-pick PR #443 to use credential on first run
oo7-server 0.6.0 only feeds the systemd / PAM secret to existing
keyrings discovered on disk. On first run no keyring exists yet, the
daemon creates an empty 'Login' collection via LockedKeyring::open,
the credential is silently ignored, and any client Unlock() routes to
a prompt that nothing on a niri desktop can satisfy.

Patches/oo7-server/0001-... is upstream commit cf7b9a9 (PR #443)
regenerated relative to the package's sourceRoot ('server/'). It
switches the auto-created default-keyring path to UnlockedKeyring::open
when a secret is available.

The override threads the patch through pkgs.oo7-server.overrideAttrs
in modules/desktop-oo7-daemon.nix and uses the patched derivation for
both services.dbus.packages and systemd.packages so the user unit and
D-Bus activation file land from the same store path. Cargo.lock is
untouched, so the existing cargoDeps hash stays valid.

Drop the override once nixpkgs ships an oo7-server release that
includes the fix (anything past 0.6.0).
2026-05-03 00:35:47 -04:00
8b2a18c8c0 oo7-daemon: unlock the Login keyring via systemd credential
oo7-daemon was running but its 'Login' keyring stayed locked because
nothing supplied a master password, so libsecret clients (flare in
particular) blocked indefinitely on keyring.unlock().

The upstream user unit declares
  ImportCredential=oo7.keyring-encryption-password
which picks up matching credentials from systemd's per-service
credential machinery. Wire LoadCredential=oo7.keyring-encryption-password
to the agenix-decrypted secret so the daemon unlocks at session start
without any prompt.

The password itself is a fresh 64-byte urandom value encrypted to all
desktop recipients (admin SSH key + mreow + yarn TPM identities); it's
opaque to the user and never typed manually. Owner is primary so the
user-scope unit's LoadCredential read works without elevating.

Verified the activation script chowns the decrypted file primary:users
mode 0400, the user unit override carries the LoadCredential line, and
the resulting drv builds clean.
2026-05-03 00:35:47 -04:00
f96f5ce8fd desktop: add oo7-daemon as the org.freedesktop.secrets provider
Without a secret-service implementation on the bus, libsecret clients
like flare fail at startup with 'The communication with libsecret
failed'. None of the desktop hosts had one wired up.

oo7-daemon is the matching pure-Rust implementation (same project as
the oo7 crate flare uses internally), without the GNOME plumbing that
gnome-keyring would drag in. Register the package's D-Bus service
file and systemd user unit, start the daemon at user login, and alias
the unit as dbus-org.freedesktop.secrets.service so D-Bus
auto-activation also resolves cleanly when the wantedBy start hasn't
fired yet.

Verified the toplevel build and that the resulting system carries the
oo7-daemon user unit, the dbus alias symlink, and the
default.target.wants entry.
2026-05-03 00:35:47 -04:00
bab097da6b flare: add patched flare-signal with five local feature patches
- patches/flare/000{1..5}-*.patch: typing indicators, formatted
  messages, edited messages, multi-select with delete-for-me, and
  in-channel message search. Mirror the matching commits in
  ~/projects/forks/flare and apply cleanly on top of upstream 0.20.4
  (which is what nixpkgs ships).
- home/profiles/gui.nix: include a flare-signal override that appends
  the patches via overrideAttrs. None of them touch Cargo.lock so the
  cargoDeps hash stays valid; signal-desktop stays alongside it.
2026-05-03 00:35:47 -04:00
8768b285df pi: add android skills 2026-04-30 02:15:24 -04:00
47565c9e95 torrent-audit: only filter out complete torrents
All checks were successful
Build and Deploy / mreow (push) Successful in 2m7s
Build and Deploy / yarn (push) Successful in 45s
Build and Deploy / muffin (push) Successful in 1m11s
2026-04-29 14:42:24 -04:00
365efe3482 update
All checks were successful
Build and Deploy / mreow (push) Successful in 11m31s
Build and Deploy / yarn (push) Successful in 1m8s
Build and Deploy / muffin (push) Successful in 1m19s
2026-04-29 12:57:12 -04:00
994f39d308 arr-search: shuffle and do more
Some checks failed
Build and Deploy / mreow (push) Successful in 1m5s
Build and Deploy / yarn (push) Successful in 48s
Build and Deploy / muffin (push) Failing after 33s
2026-04-29 11:36:18 -04:00
a31c82d184 recyclarr: add fallback SD qualities for old shows 2026-04-29 11:35:32 -04:00
c9d0035cc2 update
Some checks failed
Build and Deploy / mreow (push) Successful in 50s
Build and Deploy / yarn (push) Failing after 3h11m19s
Build and Deploy / muffin (push) Successful in 2m59s
2026-04-28 13:36:19 -04:00
6f86827d6c noctalia: change transparency of background
Some checks failed
Build and Deploy / mreow (push) Successful in 1m16s
Build and Deploy / yarn (push) Failing after 14m35s
Build and Deploy / muffin (push) Successful in 1m7s
2026-04-28 01:24:54 -04:00
f0d7da5141 bluez: fix a2dp (cherry-pick patch)
Some checks failed
Build and Deploy / mreow (push) Successful in 56m32s
Build and Deploy / muffin (push) Has been cancelled
Build and Deploy / yarn (push) Has been cancelled
2026-04-28 00:59:05 -04:00
e6d7e1a73a update
All checks were successful
Build and Deploy / mreow (push) Successful in 14m28s
Build and Deploy / yarn (push) Successful in 1m6s
Build and Deploy / muffin (push) Successful in 1m7s
2026-04-27 23:37:17 -04:00
44a5d01960 yarn: mount /var/lib/agenix in initrd
All checks were successful
Build and Deploy / mreow (push) Successful in 2m16s
Build and Deploy / yarn (push) Successful in 1m3s
Build and Deploy / muffin (push) Successful in 1m6s
agenix activation runs from initrd-nixos-activation-start, which fires
right after /sysroot/persistent is mounted but before impermanence's
stage-2 bind mounts. The TPM identity at /var/lib/agenix/tpm-identity
was therefore unreadable at activation time, and every secret silently
failed to decrypt: 'no readable identities found'. Visible downstream
fallout was pull-update-apply hitting HTTP 401 against the binary cache
because nix-cache-netrc was never written to /run/agenix.

Mark /var/lib/agenix as neededForBoot via a bare fileSystems entry,
mirroring the existing /home/${username} bind. Drop the now-redundant
environment.persistence directory entry to avoid two competing units.
2026-04-27 17:42:40 -04:00
9cf4ba928a ghostty: fix ssh 2026-04-27 17:39:14 -04:00
59e6f7b3b9 doom: disable workspaces 2026-04-27 12:39:29 -04:00
4f98023203 update
All checks were successful
Build and Deploy / mreow (push) Successful in 4m2s
Build and Deploy / yarn (push) Successful in 1m4s
Build and Deploy / muffin (push) Successful in 1m11s
2026-04-27 11:40:09 -04:00
bbdc478e84 omp: update patches
All checks were successful
Build and Deploy / mreow (push) Successful in 13m8s
Build and Deploy / yarn (push) Successful in 1m11s
Build and Deploy / muffin (push) Successful in 7m15s
2026-04-27 01:36:08 -04:00
675fc7f805 update
Some checks failed
Build and Deploy / mreow (push) Failing after 5m10s
Build and Deploy / yarn (push) Failing after 1m1s
Build and Deploy / muffin (push) Has been cancelled
2026-04-27 01:27:13 -04:00
141754ca39 ghostty: fix???
All checks were successful
Build and Deploy / mreow (push) Successful in 1m20s
Build and Deploy / yarn (push) Successful in 54s
Build and Deploy / muffin (push) Successful in 1m14s
2026-04-26 01:11:09 -04:00