Commit graph

775 commits

Author SHA1 Message Date
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
9e212934dd feat(nix): remove wezterm from system packages
- Disabled `wezterm` in the list of default system packages.
- Streamlines the configuration by focusing on existing terminal tools.
2026-03-30 08:45:08 +02:00
ffc5947bec feat(nix): update apps, tools, and system packages
- Added `blackhole-2ch` to casks and `darktable` to system packages.
- Disabled `wezterm` and kept `direnv` and `alacritty` enabled in tools.
- Improves utility and functionality by refining the configuration.
2026-03-30 08:45:08 +02:00
Harald Hoyer
58d84ce88b feat(rialo): add sox 2026-03-27 11:28:19 +01:00
c986fa7808 fix(attic): fix nginx proxy cache bypass and add cache lock
Replace broken proxy_cache_bypass (was bypassing every request) with
proxy_cache_lock to coalesce concurrent requests for the same path.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-25 13:38:32 +01:00
13a386fe98 feat(attic): add daily garbage collection timer
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-25 12:07:44 +01:00
510e3505a8 feat(attic): add nginx proxy cache to reduce S3 egress
Caches GET/HEAD responses up to 10 GB on disk with 30-day eviction.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-25 12:06:13 +01:00
f2afa78817 fix(attic): correct S3 bucket name to teepot-attic
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-25 11:56:07 +01:00
f039e4af1b feat(attic): enable HTTPS and configure Nginx with ACME
- Allow TCP ports 80 and 443 in the firewall for HTTP and HTTPS traffic.
- Enable Nginx with ACME integration for automatic SSL certificate management.
- Configure a virtual host with proxy settings and support for WebSocket traffic.
2026-03-25 11:18:02 +01:00
51398185e7 fix(nixos): conditionally apply onFailure units
- Wrap `config.onFailure` in `mkIf cfg.enable` to ensure units are conditionally applied based on the service's `enable` configuration.
- Prevents unnecessary configuration of failure units when the service is disabled.
2026-03-25 11:11:00 +01:00