Commit graph

104 commits

Author SHA1 Message Date
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
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
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
6d0186eadb chore: statix fix 2026-04-20 10:09:24 +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
04ebe32c3c feat(sgx): add Uptime Kuma to monitor mx services independently
Runs on sgx so alerts (via Gmail) still work even if mx is down.
Available at https://status.hoyer.world behind nginx with ACME cert.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-24 17:06:35 +01:00
04150f10d4 nix fmt 2026-02-24 13:25:42 +01:00
5075593ce0 feat(nix): add supported search formats to Searx config
- Added `html`, `json`, and `rss` to the `search.formats` list in `searx.nix`.
- Enhances flexibility by allowing multiple output formats for search results.
2026-02-06 13:45:18 +01:00
7f802aaca6 feat(nix): refactor Searx configuration into separate module
- Moved Searx-related settings from `default.nix` and `nginx.nix` to a dedicated `searx.nix` module for improved modularity and maintainability.
- Updated references and ACME certificate configuration to align with the new structure.
- Simplifies management of Searx service and its associated secrets.
2026-02-06 13:27:29 +01:00
ba985dc3fd feat(nix): add Sops secret and update Searx configuration
- Added a new Sops secret for `searx/secret_key` with a corresponding configuration path.
- Updated Searx settings to include the `secret_key` reference.
- Ensures secure integration of secret management with Searx service.
2026-02-06 13:09:38 +01:00
6597561ec4 feat(nix): add uwsgi configuration for search.hoyer.world
- Introduced `uwsgiConfig` section in the Searx configuration for `search.hoyer.world`.
- Configures uWSGI to listen on port `8081` for HTTP requests.
2026-02-06 12:55:36 +01:00
437cb4b606 feat(nginx): add new search.hoyer.world virtual host
- Introduced Nginx configuration for the `search.hoyer.world` domain.
- Ensures SSL enforcement and proper proxy settings for the new subdomain.
2026-02-06 12:51:24 +01:00
14c9a4f084 feat(nix): add new domain to ACME certificate
- Added `search.hoyer.world` to the `extraDomainNames` list for the `internal.hoyer.world` ACME certificate.
- Ensures proper SSL configuration for the new subdomain.
2026-02-06 11:43:37 +01:00
958175fb01 feat(nix): enable Searx and configure Nginx for domain
- Added Searx service with Nginx configuration for the domain `search.hoyer.world`.
2026-02-06 11:40:10 +01:00
4622c52d5b refactor(nix): extract common system configs into reusable modules
Create 6 new NixOS modules to reduce duplication across system configs:
- hardware/wooting: Wooting keyboard udev rules and Bluetooth compat
- services/nginx-base: Common nginx server settings
- services/acme-base: ACME certificate defaults
- services/xremap: Key remapping with sensible defaults
- system/no-sleep: Disable sleep/suspend/hibernate targets
- system/kernel-tweaks: PM freeze timeout and zram configuration

Update system configuration files to use these new modules.

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-30 10:42:09 +01:00
Harald Hoyer
570e7f1bf0 feat(nix): update SGX hardware configuration for x1 11th gen
- Replaced `not-detected.nix` import with `lenovo-thinkpad-x1-11th-gen` module from `nixos-hardware`
- Improved hardware compatibility for the 11th generation Lenovo ThinkPad X1
2025-12-04 11:07:44 +01:00
Harald Hoyer
fcb5e83a63 feat(nix): add obsidian and sync folders to sgx fileserver configuration
- Added "obsidian" folder with path "~/obsidian" and device list
- Added "sync" folder with path "~/sync" and device list
- Both folders configured with same device list: sgx, S25, x1, m4
- Maintains consistent folder configuration pattern in fileserver setup
2025-12-03 17:01:38 +01:00
fc4b2a3e30 fix(nixos): rename gdm.autoSuspend key for display manager
- Corrected `services.xserver.displayManager.gdm.autoSuspend` to `services.displayManager.gdm.autoSuspend` for proper configuration.
-
2025-12-03 10:04:41 +01:00
0ccdd23cba fix(nixos): correct typo in Postfix configuration
- Renamed `setting.main` to `settings.main` in the Postfix module for consistency with configuration standards.
- Ensured proper functionality of service by aligning with expected key structure.
2025-12-03 10:03:29 +01:00
4386027761 refactor(nixos): standardize configuration structures
- Renamed and reorganized configuration keys for consistency (`settings` usage).
- Updated Postfix, systemd, and Syncthing configurations to adhere to the standardized format.
- Improved maintainability and readability of NixOS configurations.
2025-12-03 10:02:15 +01:00
5d7e14e9de nixos-25.11 2025-12-02 19:37:14 +01:00
549b3633d1 nixos-25.11 2025-12-02 18:58:52 +01:00
Harald Hoyer
18871b8617 chore(nix): enable WebSocket proxy in nginx config
- Added `proxyWebsockets = true` to improve WebSocket support.
- Ensures seamless communication for services relying on WebSocket connections.
2025-11-27 16:44:37 +01:00
Harald Hoyer
0fa35124db chore(nix): add home.hoyer.world to ACME extra domains
- Updated `acme.nix` to include `home.hoyer.world` in `extraDomainNames`.
- Ensures ACME generates certificates for the new domain.
2025-11-27 15:42:26 +01:00
Harald Hoyer
6cb03a2c8f chore(nix): add reverse proxy for home.hoyer.world
- Configured reverse proxy in `nginx.nix` for `home.hoyer.world`.
- Disabled ACME and redirected to `internal.hoyer.world` with forced SSL.
2025-11-27 15:30:54 +01:00
Harald Hoyer
40e677ea02 chore(nix): add TCP port 10400 to Wyoming firewall
- Updated `wyoming.nix` to allow traffic on TCP port `10400`.
- Ensures compatibility with services requiring this port.
2025-11-27 15:24:38 +01:00
Harald Hoyer
eb6136a0e0 chore(nix): simplify OpenWakeWord server config
- Removed nesting for `openwakeword` in `wyoming.nix` configuration.
- Preserved service functionality with TCP port `10400` and preloaded models.
2025-11-27 15:22:42 +01:00
Harald Hoyer
45d051924b chore(nix): add OpenWakeWord service to Wyoming config
- Enabled `openwakeword` service in `wyoming.nix` with TCP port `10400`.
- Preloaded model support added for voice commands like "hey_jarvis".
2025-11-27 15:21:39 +01:00
Harald Hoyer
4c641910fd chore(nix): add Wyoming service configuration
- Introduced a new `wyoming.nix` file with service definitions for `faster-whisper` and `piper`.
- Enabled TCP ports `10200` and `10300` in the firewall for service communication.
- Updated SGX configuration to include `wyoming.nix` in system imports.
2025-11-27 15:04:53 +01:00
Harald Hoyer
66022d19c2 chore(nix): enable libvirtd and update user groups
- Enabled `libvirtd` in virtualization settings to allow libvirt usage.
- Added `libvirtd` to `user.extraGroups` for better permissions and management.
2025-11-27 10:37:46 +01:00
Harald Hoyer
7883fe4221 chore(nix): update fileserver configuration
- Reformatted `netatalk` service dependencies for readability.
- Updated `hosts allow` setting to include `100.64.0.` for enhanced network access control.
2025-11-24 16:01:04 +01:00
Harald Hoyer
36f3ebfcb3 chore(nix): enable Tailscale on SGX, MX, and X1 systems
- Added `services.tailscale.enable = true` to the configurations of SGX, MX, and X1 systems for VPN support.
- Improves secure connectivity and simplifies network management across these systems.
2025-11-21 14:54:07 +01:00
5b0cab98d5 feat(systems): enable email notifications on failure
- Added `emailOnFailure.enable` option to metacfg with a default of `false`.
- Enabled email notifications on failure for SGX and MX systems.
- Enhanced `systemd-email-notify` module to support the new configuration.
2025-11-14 07:42:28 +01:00
440cf540eb feat(sgx): adjust tmpfs usage for better configuration
- Set `boot.tmp.useTmpfs` to `false` in `x86_64-linux/sgx/default.nix`.
- Applied `lib.mkDefault` to `boot.tmp.useTmpfs` in `services/base/default.nix` for consistency.
2025-09-28 08:19:45 +02:00
3b0809697d feat(sgx): add claude-code 2025-09-22 16:56:38 +02:00
76ead2d77c feat(sgx): enable nix-ld 2025-09-19 10:24:09 +02:00
Harald Hoyer
8d03b05ffb feat(sgx): add cratedocs-mcp service and update flakes
- Enabled `services.cratedocs-mcp` with firewall access in the SGX module for enhanced functionality.
- Updated multiple Flake lockfile entries to the latest revisions, ensuring access to updated upstream changes.
2025-09-17 15:57:18 +02:00
Harald Hoyer
dc3a536709 feat(sgx): enable GUI in SGX module
- Changed `gui.enable` to `true` in the SGX default configuration.
- Allows GUI support within the SGX environment for improved usability.
2025-09-11 14:31:40 +02:00
d5f4c3035e feat(sgx): update Samba configuration for protocol and macOS
- Set minimum protocol to SMB2 and enabled extended attribute (EA) support in Samba settings.
- Added `fruit:nfs_aces` and `fruit:wipe_intentionally_left_blank_rfork` options for improved macOS compatibility.
2025-07-30 14:16:48 +02:00
f08881f303 feat(sgx): rename Time Machine share key in Samba config
- Changed the `time-machine` key to `TimeMachineBackup` in the Samba share configuration.
- Aligns key naming to standard conventions and improves readability.
2025-07-30 14:00:21 +02:00
1338ced84f feat(sgx): disable Avahi service in fileserver configuration
- Set `services.avahi.enable` to `false` in `fileserver.nix`.
- Ensures Avahi is disabled, aligning with updated system requirements.
2025-07-30 13:56:33 +02:00
959e82bcee feat(sgx): disable Netatalk and enhance Samba configuration
- Disabled Netatalk service by setting `enable` to `false`.
- Improved macOS compatibility in Samba with specific `fruit` and `vfs` options.
- Added a new Time Machine share configuration for backups.
2025-07-30 13:27:03 +02:00
f77bad4bf0 feat(sgx): add support for "m4" configuration
Included "m4" in the list of supported configurations for SGX. This enhances compatibility and enables additional use cases for the fileserver.
2025-05-21 10:00:39 +02:00
5893c5b84c chore(sgx): turn off libvirtd 2025-05-21 09:56:12 +02:00
2e28118edf fix(mail.nix): update virtual alias mappings for root/admin
Adjusted the virtual_alias_maps to properly include both root and admin email forwarding. Removed unused rootAlias line and ensured the configuration aligns with intended email routing behavior.
2025-05-21 09:41:36 +02:00
0a4b80c860 refactor(mail): comment out rootAlias and update alias mapping 2025-05-21 09:33:42 +02:00
ac0eef954d feat(mail): configure Postfix relay with SOPS encrypted secrets
Added configuration for Postfix to use an external SMTP relay with encrypted credentials managed by SOPS. Updated `mail.nix` to include relay settings and linked the secrets file for password storage.
2025-05-21 09:30:30 +02:00
ab30ca1c6d feat(sgx/mail): configure postfix root and admin aliases
Added configuration for postfix rootAlias and extraAliases using metacfg user name. This ensures proper email routing for root and admin users.
2025-05-21 08:45:30 +02:00
018b25ac12 feat(sgx): add mail utilities and enable postfix
Introduce `mail.nix` to configure mail utilities (`mailutils`, `mutt`) and enable Postfix service. Updated `default.nix` to include the new configuration file.
2025-05-21 08:30:39 +02:00