Commit graph

784 commits

Author SHA1 Message Date
38767905af chore: opencode pw 2026-05-03 14:57:15 +02:00
a63abebda3 feat(home): opencode module — link config/opencode → ~/.config/opencode
Adds metacfg.cli-apps.opencode (default enabled) which mounts the
in-repo opencode config (provider list, web-search skill) via
xdg.configFile, so all hosts pick it up automatically.
2026-05-03 14:30:33 +02:00
c4e6599803 chore: nix flake update 2026-05-03 13:49:14 +02:00
c99ea665d4 feat(sgx): add opencode 2026-05-03 13:47:39 +02:00
b2027bd283 sgx/network: open TCP 8000-8999 in firewall
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-03 13:47:39 +02:00
e96bf83dfd feat(halo): add python313Packages.huggingface-hub 2026-05-03 09:00:13 +02:00
73bf52dbaf sgx/firefly: bump fastcgi_read_timeout + PHP max_execution_time on both vhosts
Bulk imports of 100+ transactions per chunk hit the default 60s
fastcgi timeout on the main Firefly III vhost too — not just the
importer endpoint. The importer's per-transaction API call to Firefly's
/api/v1/transactions can take 20+s on a fresh DB without ANALYZE,
which compounds with the 30s PHP max_execution_time cap.

- nginx fastcgi_read_timeout=600s on both `firefly` and `firefly-import`
  vhosts
- php_admin_value[max_execution_time]=600 + memory_limit=512M on both
  PHP-FPM pools
- VANITY_URL on the importer now points to the main Firefly III URL
  (was wrongly pointing at the importer's own domain, breaking
  clickable transaction-show links in importer log messages)

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-02 16:44:20 +02:00
491a7b38e4 sgx/firefly: switch Firefly III backend from sqlite to postgres
SQLite was slow under btrfs CoW, and the no-CoW migration path turned
out to be fragile (WAL deletion without checkpoint = data loss). Move
to PostgreSQL on Unix-socket peer auth — no password needed for the
local-host setup, NixOS provisions the database+user declaratively.

Drop the now-unused +C tmpfiles rule on the sqlite directory; the
leftover database.sqlite* files at /var/lib/firefly-iii/storage/database/
are harmless and can be removed manually after switch is verified.

Migration of existing Firefly III data is not preserved by this
commit — fresh-start path: re-register admin, re-issue PAT, re-POST
the bulk CSV through the importer.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-01 21:49:08 +02:00
90324605b9 chore: update secret 2026-05-01 21:48:44 +02:00
c1503b56aa sgx/firefly: disable btrfs CoW on Firefly III sqlite directory
Random-write SQLite traffic fragments CoW filesystems quickly. The `h`
tmpfiles directive sets +C on the database directory; new SQLite files
(WAL, SHM, recreated main DB) inherit no-CoW automatically. No-op on
non-btrfs filesystems.

Migration of existing files must be done manually with checkpoint-first:
  systemctl stop phpfpm-firefly-iii.service
  sqlite3 .../database.sqlite 'PRAGMA wal_checkpoint(TRUNCATE);'
  # then recreate main file inside the +C dir
  systemctl start phpfpm-firefly-iii.service

Skipping the wal_checkpoint and naively deleting .sqlite-wal will lose
all writes that haven't been checkpointed (PHP-FPM SIGTERM does not
trigger a checkpoint).

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-01 19:31:24 +02:00
81b9d2208c chore: secret update 2026-05-01 19:30:17 +02:00
e0d2a2f50d feat(sgx): finish firefly-sparda-fetch — headless FinTS import
End-to-end verified: aqbanking-cli fetches Sparda Südwest transactions
via FinTS PIN/TAN + SecureGo+, exports CSV using a custom decimal-amount
profile, POSTs to firefly-iii-data-importer's autoupload endpoint, which
creates transactions in Firefly III via API.

Changes vs. previous WIP commit:
- firefly/access_token sops slot for the importer's Firefly III API auth
  (FIREFLY_III_ACCESS_TOKEN_FILE — was the missing piece causing 401s
  from the API after the autoupload secret authenticated)
- nginx fastcgi_read_timeout=600s on the importer vhost (prevents 504
  while PHP-FPM is still processing the batch)
- PHP-FPM max_execution_time=600s + memory_limit=512M on the importer
  pool (PHP's stock 30s aborts mid-import for batches > ~50 transactions)
- timer re-enabled, wantedBy=[timers.target]

Caveats baked into a code comment:
- Sparda online-banking PIN must be [A-Za-z0-9] only. aqbanking 6.8.2's
  -P pinfile mangles `:`, `+`, `'`, `?`, `@`, `%`, `*`; bank locks the
  access (3 soft / 9 hard strikes) on rejected attempts. Same applies
  whenever the sops secret is rotated.
- Bulk historical imports beyond the PSD2 90-day window need interactive
  SCA approval per ~30-day chunk and cannot run from the timer; the
  daily 35-day rolling window stays inside the no-SCA region.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-01 18:58:45 +02:00
74af9fd5ac wip(sgx): firefly-sparda-fetch service + timer (DISABLED)
End-to-end FinTS pipeline against Sparda Südwest is wired up but
disabled — aqbanking 6.8.2's `-P pinfile` flag does not consume the
file content correctly on this build (verified: pinfile bytes match
the manually-typed PIN exactly, yet the bank receives a wrong PIN).
Three rejected attempts locked the access at Sparda; do not re-arm
the timer until the auth path is replaced (likely python-fints).

What works:
- aqbanking config and FinTS dialog (manual PIN entry)
- getaccsepa workaround for HKCAZ "Mussfeld 9160" rejection
- custom CSV profile (decimal amounts + IBAN columns) wired in
- Firefly importer auto-upload settings + sops secret slot
- inbox + profile-symlink tmpfiles

What's broken:
- Headless PIN delivery via aqbanking-cli -P
- Timer left wantedBy=[] so it cannot fire post-deploy

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-01 08:44:19 +02:00
55bef14076 chore: secret update 2026-05-01 08:43:43 +02:00
a4dd12481e chore: update secret 2026-05-01 08:17:15 +02:00
14933e4e76 chore: claude-code update 2026-05-01 08:15:53 +02:00
9deedfcb51 chore: claude-code update 2026-05-01 08:09:42 +02:00
ad7bd6b2a5 chore: claude-code update 2026-05-01 08:02:14 +02:00
054ed9637d chore: remove duplicates 2026-04-30 10:39:54 +02:00
b3e5a80936 feat(packages): expose geekbench_6 as flake package
Allows running the overlay-pinned 6.7.0 build via `nix run .#geekbench_6`
without needing a host to install it.
2026-04-27 15:46:35 +02:00
Harald Hoyer
853a0642d7 feat(overlays): bump geekbench_6 to 6.7.0
Override the unstable channel's geekbench_6 with version 6.7.0,
updating tarball URLs and hashes for x86_64-linux and aarch64-linux.
2026-04-27 15:21:16 +02:00
Harald Hoyer
ed8b0eb473 chore: remove direnv from unstable 2026-04-27 14:09:12 +02:00
a5472c567a feat(amd): latest kernel ryzen kernel module 2026-04-27 10:40:23 +02:00
9cc17db0d7 chore: flake.lock update 2026-04-27 09:53:52 +02:00
Harald Hoyer
31df523787 refactor(home): extract shared wezterm module
Add a `metacfg.tools.wezterm` home-manager module so wezterm.lua
configuration can be reused across hosts instead of being duplicated
inline. Migrate halo and amd to the new module and enable it on rialo
(font size 14, term = xterm-256color).
2026-04-27 09:47:49 +02:00
e20f5cfe71 chore: firefly secret 2026-04-26 20:12:51 +02:00
06d26311fd feat(sgx): add aqbanking + sparda PIN slot for FinTS bank sync
Lays the groundwork for Sparda-Bank Südwest transaction sync via
direct FinTS (no third-party data proxy). aqbanking-cli in the system
PATH, persistent state at /var/lib/firefly-aqbanking, sops slot for
the online-banking PIN. Initial enrollment must be done interactively
on the host; systemd timer for automated fetches comes in a follow-up.
2026-04-26 16:36:52 +02:00
4833551a3b chor: add firefly secret 2026-04-26 16:28:19 +02:00
f4eb0c5939 feat(sgx): add firefly-iii personal finance manager
Self-hosted Firefly III with data-importer, SQLite backend, behind
nginx with the existing internal.hoyer.world ACME cert.
2026-04-26 14:09:40 +02:00
d56f42820a feat(m4): add opencode 2026-04-25 05:11:39 +02:00
7b8057c51c chore: remove blackhole 2026-04-24 19:43:25 +02:00
2ea188c015 fix: remove zellij 2026-04-24 11:34:56 +02:00
6bfaf7d2ec feat: update claude-code 2026-04-24 11:05:27 +02:00
4045aa1859 refactor(mx): extract disk check services into disk-check.nix
Share the check script via a parameterized mkDiskCheck function over
{ name, mountPoint, label } and iterate an attrset to emit the boot
and root services plus their daily timers.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-04-20 10:28:27 +02:00
6d0186eadb chore: statix fix 2026-04-20 10:09:24 +02:00
Harald Hoyer
8ec7cb7794 chore: add notes about fmt and statix 2026-04-20 10:06:26 +02:00
1650ae7787 fix(m4): remove libvirt 2026-04-17 11:10:53 +02:00
Harald Hoyer
59d83bdeb1 feat(rialo): add openssl@3 to homebrew brews 2026-04-17 09:46:22 +02:00
Harald Hoyer
edcd49ada0 chore: nix flake update 2026-04-17 08:56:34 +02:00
Harald Hoyer
0574576687 feat: update claude-code 2026-04-17 08:55:07 +02:00
81e820e8a9 chore: flake.nix update 2026-04-14 11:19:03 +02:00
1719a00292 feat: update claude-code 2026-04-14 11:07:53 +02:00
Harald Hoyer
bcdaa091eb feat(nix): enhance systemd-email-notify service configuration
- Added `StartLimitIntervalSec` and `StartLimitBurst` for `ntfy-failure@` unit.
- Refactored `ExecStart` into `script` for improved readability.
- Adjusted `scriptArgs` from `%I` to `%i`.
2026-04-07 10:38:16 +02:00
Harald Hoyer
e9bce3fd6a feat(nix): add direnv and enable claude-code in unstable overlay 2026-04-07 10:01:50 +02:00
Harald Hoyer
301d0f7807 refactor(rialo): remove unused packages from systemPackages
- Removed `dnsmasq`, `libvirt`, and `virt-manager` for cleanup.
2026-04-07 09:53:50 +02:00
78210642c0 fix: claude-code manual update 2026-04-03 08:46:06 +02:00
Harald Hoyer
1b4e7003fc feat(rialo): disable wezterm in darwin tools 2026-04-02 10:28:23 +02:00
Harald Hoyer
1c26940340 refactor(nix): remove unused gitbutler from base service packages 2026-04-02 10:28:23 +02:00
60ed46689c fix: use unescaped %I in ntfy failure notification script
%i passes the escaped unit name which systemctl status cannot resolve,
causing "Failed to mangle name" errors.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-01 15:39:08 +02:00
a6736c2ac1 fix(sgx): treat rsync exit code 24 as success in backup
Files vanishing during transfer is expected for mail directories
where messages are constantly moved.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-01 15:39:08 +02:00