Commit Graph

1723 Commits

Author SHA1 Message Date
52e902c23c update
Some checks failed
Build and Deploy / mreow (push) Successful in 1h48m22s
Build and Deploy / yarn (push) Failing after 3h23m42s
Build and Deploy / muffin (push) Successful in 2m51s
2026-05-05 17:34:54 -04:00
3da843c3ff fix secrets
Some checks failed
Build and Deploy / mreow (push) Successful in 56s
Build and Deploy / yarn (push) Successful in 53s
Build and Deploy / muffin (push) Failing after 33s
2026-05-05 12:40:11 -04:00
92d49571b9 pi: fix python env
Some checks failed
Build and Deploy / mreow (push) Successful in 1m14s
Build and Deploy / yarn (push) Successful in 57s
Build and Deploy / muffin (push) Failing after 32s
2026-05-05 03:22:22 -04:00
c1f1959aa1 firefly-iii-data-importer: fix allowlist
All checks were successful
Build and Deploy / mreow (push) Successful in 1m14s
Build and Deploy / yarn (push) Successful in 56s
Build and Deploy / muffin (push) Successful in 1m13s
2026-05-05 02:21:31 -04:00
4c45874401 firefly-iii-data-importer: rotate PAT
All checks were successful
Build and Deploy / mreow (push) Successful in 49s
Build and Deploy / yarn (push) Successful in 54s
Build and Deploy / muffin (push) Successful in 1m8s
2026-05-05 02:07:54 -04:00
8ba6decc1f firefly-iii-data-importer: init
All checks were successful
Build and Deploy / mreow (push) Successful in 1m38s
Build and Deploy / yarn (push) Successful in 55s
Build and Deploy / muffin (push) Successful in 1m40s
2026-05-05 02:05:16 -04:00
82213c2917 firefly-iii: init
All checks were successful
Build and Deploy / mreow (push) Successful in 1m14s
Build and Deploy / yarn (push) Successful in 55s
Build and Deploy / muffin (push) Successful in 1m58s
2026-05-05 01:40:29 -04:00
b248f3592f pi: drop redundant pkgs.ghidra from home.packages
All checks were successful
Build and Deploy / mreow (push) Successful in 2m58s
Build and Deploy / yarn (push) Successful in 1m3s
Build and Deploy / muffin (push) Successful in 1m5s
The pyghidra-mcp wrapper bakes in GHIDRA_INSTALL_DIR via makeWrapperArgs
referencing pkgs.ghidra, which makes ghidra a runtime closure dep.
Adding pkgs.ghidra explicitly to home.packages caused buildEnv to merge
*two* ghidra-12.0.4 store paths (one from pyghidra's propagatedBuildInputs,
one from the explicit list) and fail with a path collision on
GPL/DMG/LICENSE.txt.

Drop the explicit add. The agent-driven workflow doesn't need the GUI;
manual exploration via 'nix run nixpkgs#ghidra' is one command away if
ever wanted.
2026-05-04 20:36:24 -04:00
ea6ef4a446 arr: more things
Some checks failed
Build and Deploy / mreow (push) Failing after 2m59s
Build and Deploy / muffin (push) Has been cancelled
Build and Deploy / yarn (push) Has been cancelled
2026-05-04 20:33:27 -04:00
05b2741ec0 pi: generic-ize ghidra skill (drop game-specific examples) 2026-05-04 20:33:14 -04:00
feae0f8002 pi: package pyghidra-mcp + wire as OMP MCP server
Adds two inline Python derivations to home/progs/pi.nix:

  - ghidrecomp 0.5.9 (clearbluejar/ghidrecomp) — required by pyghidra-mcp,
    not in nixpkgs.
  - pyghidra-mcp 0.2.2 (clearbluejar/pyghidra-mcp) — headless MCP server
    that exposes Ghidra's analysis primitives (decompile, disassemble,
    list_strings, get_xrefs_to, etc.) over Model Context Protocol stdio.

The wrapper bakes in GHIDRA_INSTALL_DIR=${pkgs.ghidra}/lib/ghidra so
pyghidra discovers the Ghidra install at runtime without env munging.

Wires into OMP via:
  - home.packages: pyghidra-mcp + pkgs.ghidra (GUI for occasional manual
    exploration alongside the agent-driven flow).
  - ~/.omp/agent/mcp.json: registers a 'ghidra' MCP server that spawns
    pyghidra-mcp on stdio when any of its tools are invoked.
  - ~/.omp/agent/skills/ghidra/SKILL.md: tells the agent when to reach
    for Ghidra (static binary RE) vs. usbmon (dynamic capture) vs. the
    built-in tools, and gives the canonical exploration workflow.

Replaces the previously-recommended LaurieWired/GhidraMCP, which has
been stale since June 2025. clearbluejar/pyghidra-mcp is actively
maintained (last commit 3 days ago), pure-Python via pyghidra+jpype, and
multi-binary capable in a single session.

Verified: pi.nix parses, the yarn NixOS closure evaluates, both
derivations build, and the wrapped binary's --help works (Ghidra runtime
discovered correctly via GHIDRA_INSTALL_DIR).
2026-05-04 20:28:13 -04:00
9ef9389672 *arr: fix (?)
All checks were successful
Build and Deploy / mreow (push) Successful in 1m7s
Build and Deploy / yarn (push) Successful in 52s
Build and Deploy / muffin (push) Successful in 1m16s
2026-05-04 20:25:04 -04:00
a95f614dd9 qbt: adjust settings
All checks were successful
Build and Deploy / mreow (push) Successful in 1m11s
Build and Deploy / yarn (push) Successful in 51s
Build and Deploy / muffin (push) Successful in 1m8s
2026-05-04 15:09:52 -04:00
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