Commit graph

331 commits

Author SHA1 Message Date
1c2f4a1c81 fix(forgejo): set SSH_DOMAIN so the UI's clone URL is actually usable
Forgejo's displayed SSH clone URL comes from SSH_DOMAIN, which defaults
to "localhost" (not DOMAIN) when unset — completely unusable, and
DOMAIN itself would've been wrong anyway since it resolves through
Caddy's wildcard CNAME, which SSH can't traverse. Point it at the
dedicated forgejo.home.brianpooe.com A record instead.
2026-07-19 15:17:25 +02:00
fc116653f7 docs(forgejo): document the forgejo.home.brianpooe.com DNS alias
Added a Technitium A record pointing at the Forgejo LXC directly
(SSH can't go through the Caddy wildcard CNAME), so git-over-SSH URLs
read ssh://git@forgejo.home.brianpooe.com/... instead of the raw IP.
All 5 hosts' remotes/SSH config updated to match.
2026-07-19 15:13:56 +02:00
9dfde294cb feat(forgejo): move git-over-SSH to standard port 22
Relocated LXC 114's own admin sshd to port 2200 (systemd ssh.socket
override) to free port 22 for Forgejo's git-SSH, dropping the ugly
:2222 from every clone URL. Updated the 5 hosts' remotes/SSH config
and the corresponding UniFi rules to match.
2026-07-19 15:09:55 +02:00
0ff2df7033 docs(network): add CADDY/IoT -> Forgejo git-over-SSH rules
Switched all internal hosts from HTTPS+token to SSH for git access to
Forgejo, using a shared deploy key. SSH bypasses Caddy (proxying raw
TCP isn't possible), so raspberrypi and Home Assistant each needed a
direct TRUSTED-zone rule to 10.0.10.18:2222.
2026-07-19 15:00:08 +02:00
a7de8cec3a docs(network): document IoT->Caddy path for HA's Forgejo git access
Home Assistant now pulls homelab-blueprint from Forgejo through Caddy,
which needed both a UniFi zone rule (IoT -> CADDY) and a ufw allow on
the Caddy host itself for the IoT subnet — two independent enforcement
layers, both previously missing/misconfigured.
2026-07-19 14:36:00 +02:00
73ff919b9f feat(forgejo): remove gitea-mirror, all repos now first-class
GitHub mirroring is no longer needed now that Forgejo is the primary
remote. Drops the gitea-mirror service, its volume, env vars, Caddy
site, and firewall rule; docs updated to match.
2026-07-19 13:21:05 +02:00
1549283f19 fix(forgejo): land on login instead of marketing homepage
REQUIRE_SIGNIN_VIEW doesn't affect the anonymous landing page; the actual
control is [server] LANDING_PAGE.
2026-07-18 22:56:07 +02:00
8732da91de feat(forgejo): disable password login, Zitadel OIDC only
ENABLE_INTERNAL_SIGNIN=false hides the password form; ENABLE_BASIC_AUTHENTICATION=false
blocks raw-password basic auth. PATs and SSH keys are unaffected.
2026-07-18 22:50:55 +02:00
0ba3d9c300 fix(forgejo): derive OIDC username from email local-part
Zitadel sends preferred_username == full email when no separate nickname
is set, which fails Forgejo's username validation and crashes before
ACCOUNT_LINKING=auto gets a chance to match the existing local account.
2026-07-18 22:47:13 +02:00
d4d4500c35 docs(network): add Forgejo to Caddy firewall policy table 2026-07-18 22:41:31 +02:00
a261778b05 feat: add Forgejo stack with GitHub mirroring and Zitadel OIDC support
Self-hosted Git service (Postgres-backed) plus gitea-mirror for automatic
GitHub repo mirroring. Storage split follows the Paperless pattern: DB and
app config on local disk, git objects/LFS/attachments/avatars on the UNAS
forgejo_data share. Wired into the Makefile, root README, and UNAS NFS docs;
adds Caddy routes for git.<domain> and git-mirror.<domain>.
2026-07-18 22:39:57 +02:00
Hermes Agent
f3184edd2a chore(homeassistant): disable main bedroom plug schedule 2026-07-15 00:03:27 +02:00
Hermes Agent
67a296fa9c fix(homeassistant): stop resetting bulbs before off 2026-07-12 08:16:42 +02:00
Hermes Agent
de494c253c fix(homeassistant): keep Moirah lamp on overnight 2026-07-12 01:04:56 +02:00
Hermes Agent
4b5eabddc1 feat(homeassistant): schedule main bedroom plug 2026-07-11 19:59:01 +02:00
Hermes Agent
6610740335 fix(homeassistant): sync live configuration cleanup 2026-07-11 19:54:44 +02:00
Hermes Agent
a062254731 fix(homeassistant): correct moirah schedule condition 2026-07-11 19:20:41 +02:00
Hermes Agent
862ac83ce8 fix(homeassistant): enforce moirah schedule 2026-07-11 19:08:14 +02:00
Hermes Agent
11355832f0 fix(homeassistant): rename kids lamp entity ids 2026-07-11 18:16:51 +02:00
44decc4b26 feat: remove Rackula stack 2026-07-11 16:42:28 +02:00
ffb141f1f0 feat: remove SnapOtter stack 2026-07-11 16:24:34 +02:00
Hermes Agent
571b036a7f fix(homeassistant): resync moirah lamp on reconnect 2026-07-09 18:27:31 +02:00
Hermes Agent
413c0213c1 fix(homeassistant): sync live automations 2026-07-08 21:58:08 +02:00
Hermes Agent
73f584dc57 fix(homeassistant): rename kids lamps and moirah lamp 2026-07-08 21:41:42 +02:00
Hermes Agent
c930aedfa6 fix(homeassistant): remove moirah lamp automations 2026-07-08 20:50:29 +02:00
Hermes Agent
6915a82268 feat(homeassistant): set moirah tuya 22 to 5 2026-07-08 20:30:59 +02:00
Hermes Agent
672e2fd7d4 feat(homeassistant): lower moirah 21:00 to 15 2026-07-07 22:52:43 +02:00
Hermes Agent
ad29c4302a feat(homeassistant): lower moirah lamp to 1 2026-07-07 22:49:21 +02:00
Hermes Agent
6005def31f feat(homeassistant): warm moirah lamp from 20:30 2026-07-07 22:38:23 +02:00
Hermes Agent
4d24978f32 feat(homeassistant): dim moirah lamp to 10 2026-07-07 22:25:41 +02:00
Hermes Agent
9de31abc02 feat(homeassistant): schedule moirah lamp 2026-07-07 17:26:09 +02:00
Hermes Agent
c480da26de feat(homeassistant): schedule brian lamp 2026-07-07 17:11:54 +02:00
Hermes Agent
269ee5106a fix(homeassistant): remove kids lamps group 2026-07-07 16:42:02 +02:00
Hermes Agent
1385194cc1 fix(homeassistant): reset lamps before turning off 2026-07-07 15:07:40 +02:00
Brian Pooe
3a314b16d6 feat: add Koffan, Rackula, and SnapOtter stacks; expose Hermes dashboard
- new compose templates + READMEs for the three LXC apps (110-112)
- Makefile deploy targets (rackula pre-owns its data dir for uid 1001)
- Caddy vhosts for all four, incl. Hermes /auth/login redirect workaround
- firewall docs: CADDY->TRUSTED rules for LXCs 110-113
2026-07-06 20:50:34 +02:00
Brian Pooe
c8d43957c1 docs(network): add IT-Tools to public SSO exposure, note host-derived redirect 2026-07-06 19:41:03 +02:00
Brian Pooe
d8f549714e docs(network): document public app exposure with Zitadel SSO via VPS 2026-07-06 19:33:40 +02:00
Brian Pooe
110d17f59f fix(gramps-web): correct container paths in config template and gate OIDC
The official grampsweb image works under /app, not /opt/gramps-web —
media/index/cache paths pointed at unmounted directories. OIDC is now
opt-in via GRAMPS_OIDC_ENABLED and all optional placeholders have
defaults so rendering works without an OIDC/email config.
2026-07-03 19:02:17 +02:00
Brian Pooe
cc6cdebba2 fix(paperless-ngx): keep SQLite database and index on local disk
Only media/consume/export/trash stay on the UNAS share; SQLite over
NFS risks lock contention and corruption.
2026-07-03 18:38:50 +02:00
Brian Pooe
d20500c5be feat(beszel-hub): support SSO-only login via OIDC with PKCE
Add DISABLE_PASSWORD_AUTH and USER_CREATION env toggles and document
the Zitadel PKCE provider setup.
2026-07-03 18:31:11 +02:00
Brian Pooe
5f1e762e03 docs(network): add Caddy firewall rules for the four new LXC apps
Drop the removed Drawio rule from the audit doc and fix the Gramps
upstream port to 80.
2026-07-03 18:17:46 +02:00
Brian Pooe
4eb6d6ee04 feat(paperless-ngx): store documents on the UNAS paperless_data share
Bind data/media/consume/export/trash from PAPERLESS_DATA_ROOT with
create_host_path: false so the stack refuses to start when the NFS
share is not mounted. Wire PAPERLESS_TRASH_DIR.
2026-07-03 18:11:49 +02:00
Brian Pooe
ab6c2b7b54 feat(vaultwarden): add deploy-vaultwarden Makefile target 2026-07-03 17:48:19 +02:00
Brian Pooe
1815beadf4 refactor: restructure docs, sync stacks with Caddyfile, harden compose templates
- Add compose stacks for apps already proxied by Caddy: bento-pdf,
  it-tools, paperless-ngx, and beszel-hub (with Makefile targets)
- Remove the unused Vault stack and the drawio Caddyfile block
- Fix Caddyfile gramps upstream to port 80 to match the compose file
- Bring immich and gramps-web up to the shared template pattern
  (no-new-privileges, log rotation, memory limits, healthchecks)
- Single-quote vaultwarden SSO_AUDIENCE_TRUSTED so regex values like
  ^\d{18}$ render as valid YAML
- Move root docs into kebab-case topic folders, rebuild the docs index
  to cover every doc, and fix all broken links
2026-07-03 17:45:16 +02:00
Brian Pooe
f5a1c53713 chore: track .env.sample files for all stacks
Now that .gitignore allows docker-compose-files/**/.env.sample, add the
existing sample files that were previously untracked.
2026-07-02 22:28:44 +02:00
Brian Pooe
da5652aa10 feat(vaultwarden): add SSO/OIDC support with Zitadel documentation
- Add SSO environment variables to template.yaml (SSO_ENABLED, SSO_ONLY,
  SSO_AUTHORITY, SSO_CLIENT_ID, SSO_CLIENT_SECRET, SSO_SCOPES, SSO_PKCE,
  SSO_AUDIENCE_TRUSTED)
- Add SSO variables to .env.sample with Zitadel audience quirk explained
- Document full Zitadel setup in README: app creation, redirect URI, OIDC
  settings, and the audience fix (SSO_AUDIENCE_TRUSTED=^\d{18}$)
- Update .gitignore to track .env.sample files in docker-compose-files
2026-07-02 22:25:15 +02:00
Brian Pooe
206d83235d fix(caddy): restore vaultwarden hostname and Physical/static devices comment 2026-07-02 18:55:04 +02:00
Brian Pooe
2f2b3a6c6f feat(caddy,vaultwarden): add vaultwarden stack and reorganise Caddyfile by VLAN
- Add docker-compose-files/vaultwarden/ with template.yaml, .env.sample,
  and README (LXC assigned 10.0.10.16, port 8800)
- Reorganise Caddyfile site blocks into VLAN 1 / VLAN 10 / VLAN 30 sections
  matching the TRUSTED / IoT zone layout from docs/network/firewall-rules.md
- Sort VLAN 10 entries by IP; split into physical devices vs LXC Apps sub-sections
- Move zigbee from LAN section to VLAN 30 where it actually lives (10.0.30.5)
2026-07-02 18:53:25 +02:00
Brian Pooe
ab77ce7057 fix(homeassistant): target bulbs individually to fix hloni missing commands
Replaced light.kids_lambs group entity with explicit list of mpho_lamb
and hloni_lamb in sunset and 20:30 automations. Group multicast was
causing hloni to silently miss Zigbee commands; unicast to each bulb
individually ensures reliable delivery.
2026-06-30 21:45:55 +02:00
Brian Pooe
b123c57c4f feat(homeassistant): add 3-retry logic to all kids_lambs automations
Each automation now retries the command 3 times with a 1-minute gap to
handle transient Zigbee timeouts (e.g. hloni_lamb missing sunset trigger).
2026-06-29 18:59:39 +02:00