Files
nixos/hosts/alt/caddy.nix
Alexander Wainwright 497ab9a82a Update caddy
2025-09-30 21:29:57 +10:00

45 lines
1.4 KiB
Nix

{ config, pkgs, inputs, lib, ... }:
let
# String = simple site, Attrset = custom site.
sites = {
"analytics.figtree.dev" = "http://192.168.80.1:3300";
"figtree.dev" = "http://192.168.1.63:8080";
"files.figtree.dev" = "http://192.168.80.4:8080";
"git.figtree.dev" = "http://192.168.80.2:3000";
"nc.figtree.dev" = "http://192.168.1.62:11000";
"paperless.figtree.dev" = "http://192.168.1.63:8010";
"photos.figtree.dev" = "http://192.168.80.1:2283";
"shiori.figtree.dev" = "http://192.168.80.4:8234";
"tasks.figtree.dev" = "http://192.168.80.7:3456";
"www.figtree.dev" = "http://192.168.1.63:8080";
"ha.figtree.dev" = "http://192.168.1.50:8123";
# "budget.figtree.dev" = "http://192.168.80.1:5006";
# Only this one needs extra top-level Caddyfile lines:
"budget.box" = {
backend = "http://192.168.80.1:5006";
extraBefore = ''
tls internal
'';
};
};
# Turn strings into { backend = "..."; }
normalizedSites = lib.mapAttrs (_: v: if lib.isString v then { backend = v; } else v) sites;
# Render each vhost
mkVHost = cfg: {
extraConfig = ''
${lib.optionalString (cfg ? extraBefore) cfg.extraBefore}
reverse_proxy ${cfg.backend}
${lib.optionalString (cfg ? extra) cfg.extra}
'';
};
in
{
services.caddy = {
enable = true;
virtualHosts = lib.mapAttrs (_domain: cfg: mkVHost cfg) normalizedSites;
};
}