-
v0.1.4
Stablereleased this
2026-03-24 16:46:05 -04:00 | 25 commits to main since this releaseAdded
auth,localDomain,localAuthoptions on all 27 web-exposed services.
Every service with a Caddy reverse proxy now has:auth(bool) — toggle Authelia forward-auth on the public domain (default
truefor most services,falsefor jellyfin, miniflux, forgejo, webhook)localDomain(nullable string) — LAN FQDN for Caddy, automatically excluded
from Cloudflare DNS records and tunnel ingresslocalAuth(bool) — toggle Authelia on the local domain (defaultfalse)
- Smart
localDomainfiltering in cloudflare/dns, cloudflare/tunnel, and
pihole. These modules now collect alllocalDomainvalues from enabled services
and exclude them from public DNS and tunnel ingress, regardless of naming
convention. The.local.heuristic is kept as a fallback for non-module Caddy
hosts. - Flake
checksoutput with module evaluation test — verifies all 48 modules
evaluate without errors. Run withnix flake check. - Forgejo CI workflow (
.forgejo/workflows/check.yml) — runsnix flake check
on every push. - Flake
formatteroutput —alejandraavailable vianix fmt. - Plex media group option —
josephembrey.plex.group(default"media") and
meta.groups = [cfg.group], matching the pattern used by all other media services. - Caddy Authelia assertion — when caddy's
auth.addresspoints to the default
Authelia address (127.0.0.1:9091), an assertion verifies that
josephembrey.autheliais enabled. Prevents silent 502 errors from a missing
auth backend. - Jellyfin backward compatibility shim —
mkRemovedOptionModulefor the old
josephembrey.jellyfin.domainsoption with a migration message pointing to
domain/localDomain.
Changed
- Breaking:
josephembrey.jellyfin.domainsreplaced withdomain/localDomain.
The olddomains(list of strings) option is removed. Usedomainfor the
public FQDN andlocalDomainfor LAN access. Existing configs usingdomains
will get a clear error message with migration instructions. - Media group GID aligned to 1200 across all media services (audiobookshelf,
bazarr, calibre, jellyfin, radarr, sabnzbd, sonarr, plex). Previously services
usedlib.mkDefault 2000while the registry module set 1200 — the registry
always won in practice, but the inconsistency was confusing. All services now
agree on 1200. docs/OPTIONS.mdupdated with the new domain option pattern.CLAUDE.mdkey rules updated to reflect conditional auth.README.mdjellyfin example updated fromdomainstolocalDomain.
Fixed
- Caddy response buffering for media streaming —
flush_interval -1added to
jellyfin, audiobookshelf, and immich reverse proxy blocks. Caddy no longer
buffers response bodies before forwarding, which caused video/audio stutter
especially over higher-latency connections (e.g., WireGuard gateway). - Redundant
cfg.enableremoved from 11 impermanence guards (10 media
services + podman). These guards were insideconfig = lib.mkIf cfg.enable (lib.mkMerge [...])which already gates on enable. Plex correctly retains the
check (different config structure). - Crosswatch caddy port — public domain block now uses the
${port}variable
instead of hardcoded8787, matching the localDomain block. - Cloudflare DNS
.local.filter — the DNS module now excludes.local.
domains from auto-discovered DNS records, matching the existing tunnel filter.
Downloads
-
Source code (ZIP)
3 downloads
-
Source code (TAR.GZ)
3 downloads