diff --git a/hosts/srv-public/default.nix b/hosts/srv-public/default.nix index 94b64fd..b8c9654 100644 --- a/hosts/srv-public/default.nix +++ b/hosts/srv-public/default.nix @@ -86,34 +86,6 @@ enable = true; domain = "alloy-${config.networking.hostName}.${config.custom.services.tailscale.domain}"; }; - - caddy.virtualHosts = - let - inherit (config.custom) services; - in - { - personal-blog = { - inherit (services.personal-blog) domain port; - }; - forgejo = { - inherit (services.forgejo) domain port; - }; - outline = { - inherit (services.outline) domain port; - }; - it-tools = { - inherit (services.it-tools) domain port; - }; - stirling-pdf = { - inherit (services.stirling-pdf) domain port; - }; - privatebin = { - inherit (services.privatebin) domain port; - }; - alloy = { - inherit (services.alloy) domain port; - }; - }; }; }; } diff --git a/hosts/vps-monitor/default.nix b/hosts/vps-monitor/default.nix index 68d2110..c5cfbbe 100644 --- a/hosts/vps-monitor/default.nix +++ b/hosts/vps-monitor/default.nix @@ -85,31 +85,6 @@ enable = true; domain = "alloy-${config.networking.hostName}.${tailscaleDomain}"; }; - - caddy.virtualHosts = - let - inherit (config.custom) services; - in - { - gatus = { - inherit (services.gatus) domain port; - }; - ntfy = { - inherit (services.ntfy) domain port; - }; - grafana = { - inherit (services.grafana) domain port; - }; - victoriametrics = { - inherit (services.victoriametrics) domain port; - }; - victorialogs = { - inherit (services.victorialogs) domain port; - }; - alloy = { - inherit (services.alloy) domain port; - }; - }; }; }; } diff --git a/hosts/vps-private/default.nix b/hosts/vps-private/default.nix index c0593a5..32604b5 100644 --- a/hosts/vps-private/default.nix +++ b/hosts/vps-private/default.nix @@ -76,34 +76,6 @@ enable = true; domain = "alloy-${config.networking.hostName}.${tailscaleDomain}"; }; - - caddy.virtualHosts = - let - inherit (config.custom) services; - in - { - syncthing-gui = { - inherit (services.syncthing.gui) domain port; - }; - filebrowser = { - inherit (services.filebrowser) domain port; - }; - radicale = { - inherit (services.radicale) domain port; - }; - memos = { - inherit (services.memos) domain port; - }; - actualbudget = { - inherit (services.actualbudget) domain port; - }; - freshrss = { - inherit (services.freshrss) domain port; - }; - alloy = { - inherit (services.alloy) domain port; - }; - }; }; }; } diff --git a/modules/system/services/syncthing.nix b/modules/system/services/syncthing.nix index 531f1d1..99546b1 100644 --- a/modules/system/services/syncthing.nix +++ b/modules/system/services/syncthing.nix @@ -133,9 +133,13 @@ in }; custom = { - services.restic.backups.syncthing = lib.mkIf cfg.doBackups { - conflictingService = "syncthing.service"; - paths = [ dataDir ]; + services = { + caddy.virtualHosts.${cfg.gui.domain}.port = lib.mkIf (cfg.gui.domain != null) cfg.gui.port; + + restic.backups.syncthing = lib.mkIf cfg.doBackups { + conflictingService = "syncthing.service"; + paths = [ dataDir ]; + }; }; persist.directories = [ dataDir ]; diff --git a/modules/system/web-services/actualbudget.nix b/modules/system/web-services/actualbudget.nix index 41f4aca..4d87fbe 100644 --- a/modules/system/web-services/actualbudget.nix +++ b/modules/system/web-services/actualbudget.nix @@ -47,9 +47,13 @@ in }; custom = { - services.restic.backups.actual = lib.mkIf cfg.doBackups { - conflictingService = "actual.service"; - paths = [ dataDir ]; + services = { + caddy.virtualHosts.${cfg.domain}.port = cfg.port; + + restic.backups.actual = lib.mkIf cfg.doBackups { + conflictingService = "actual.service"; + paths = [ dataDir ]; + }; }; persist.directories = [ dataDir ]; diff --git a/modules/system/web-services/alloy.nix b/modules/system/web-services/alloy.nix index 9694795..edbd69b 100644 --- a/modules/system/web-services/alloy.nix +++ b/modules/system/web-services/alloy.nix @@ -168,5 +168,7 @@ in ''; }; }; + + custom.services.caddy.virtualHosts.${cfg.domain}.port = cfg.port; }; } diff --git a/modules/system/web-services/filebrowser.nix b/modules/system/web-services/filebrowser.nix index 69d7ce1..b0edc4c 100644 --- a/modules/system/web-services/filebrowser.nix +++ b/modules/system/web-services/filebrowser.nix @@ -53,9 +53,13 @@ in }; custom = { - services.restic.backups.filebrowser = lib.mkIf cfg.doBackups { - conflictingService = "filebrowser.service"; - paths = [ dataDir ]; + services = { + caddy.virtualHosts.${cfg.domain}.port = cfg.port; + + restic.backups.filebrowser = lib.mkIf cfg.doBackups { + conflictingService = "filebrowser.service"; + paths = [ dataDir ]; + }; }; persist.directories = [ dataDir ]; diff --git a/modules/system/web-services/forgejo/default.nix b/modules/system/web-services/forgejo/default.nix index 00425f6..b8c6df6 100644 --- a/modules/system/web-services/forgejo/default.nix +++ b/modules/system/web-services/forgejo/default.nix @@ -119,9 +119,13 @@ in ''; custom = { - services.restic.backups.forgejo = lib.mkIf cfg.doBackups { - conflictingService = "forgejo.service"; - paths = [ config.services.forgejo.stateDir ]; + services = { + caddy.virtualHosts.${cfg.domain}.port = cfg.port; + + restic.backups.forgejo = lib.mkIf cfg.doBackups { + conflictingService = "forgejo.service"; + paths = [ config.services.forgejo.stateDir ]; + }; }; persist.directories = [ config.services.forgejo.stateDir ]; diff --git a/modules/system/web-services/freshrss.nix b/modules/system/web-services/freshrss.nix index de1fc4f..f7dc010 100644 --- a/modules/system/web-services/freshrss.nix +++ b/modules/system/web-services/freshrss.nix @@ -44,9 +44,13 @@ in }; custom = { - services.restic.backups.freshrss = lib.mkIf cfg.doBackups { - conflictingService = "freshrss-updater.service"; - paths = [ dataDir ]; + services = { + caddy.virtualHosts.${cfg.domain}.port = cfg.port; + + restic.backups.freshrss = lib.mkIf cfg.doBackups { + conflictingService = "freshrss-updater.service"; + paths = [ dataDir ]; + }; }; persist.directories = [ dataDir ]; diff --git a/modules/system/web-services/gatus.nix b/modules/system/web-services/gatus.nix index 91691b3..8e63742 100644 --- a/modules/system/web-services/gatus.nix +++ b/modules/system/web-services/gatus.nix @@ -103,37 +103,6 @@ in RemoveIPC = true; }; - custom.services.gatus.endpoints = - let - defaultEndpoints = - self.nixosConfigurations - |> lib.mapAttrs (_: value: value.config.meta.domains.list) - |> lib.concatMapAttrs ( - hostName: domains: - domains - |> lib.filter (domain: domain != cfg.domain) - |> lib.map ( - domain: - lib.nameValuePair (lib'.subdomainOf domain) { - inherit domain; - group = hostName; - } - ) - |> lib.listToAttrs - ); - in - lib.mkIf cfg.generateDefaultEndpoints ( - defaultEndpoints - // { - "healthchecks.io" = { - group = "external"; - domain = "hc-ping.com"; - path = "/\${HEALTHCHECKS_PING_KEY}/${config.networking.hostName}-gatus-uptime?create=1"; - interval = "2h"; - }; - } - ); - services.gatus = { enable = true; package = pkgs-unstable.gatus; # Unstable for the new UI @@ -206,6 +175,43 @@ in systemd.services.gatus.environment.GATUS_DELAY_START_SECONDS = "5"; - custom.persist.directories = [ dataDir ]; + custom = { + services = { + gatus.endpoints = + let + defaultEndpoints = + self.nixosConfigurations + |> lib.mapAttrs (_: value: value.config.meta.domains.list) + |> lib.concatMapAttrs ( + hostName: domains: + domains + |> lib.filter (domain: domain != cfg.domain) + |> lib.map ( + domain: + lib.nameValuePair (lib'.subdomainOf domain) { + inherit domain; + group = hostName; + } + ) + |> lib.listToAttrs + ); + in + lib.mkIf cfg.generateDefaultEndpoints ( + defaultEndpoints + // { + "healthchecks.io" = { + group = "external"; + domain = "hc-ping.com"; + path = "/\${HEALTHCHECKS_PING_KEY}/${config.networking.hostName}-gatus-uptime?create=1"; + interval = "2h"; + }; + } + ); + + caddy.virtualHosts.${cfg.domain}.port = cfg.port; + }; + + persist.directories = [ dataDir ]; + }; }; } diff --git a/modules/system/web-services/grafana.nix b/modules/system/web-services/grafana.nix index 142ee17..6d18eef 100644 --- a/modules/system/web-services/grafana.nix +++ b/modules/system/web-services/grafana.nix @@ -170,5 +170,7 @@ in ); }; }; + + custom.services.caddy.virtualHosts.${cfg.domain}.port = cfg.port; }; } diff --git a/modules/system/web-services/it-tools.nix b/modules/system/web-services/it-tools.nix index ab38c23..c738d91 100644 --- a/modules/system/web-services/it-tools.nix +++ b/modules/system/web-services/it-tools.nix @@ -14,23 +14,11 @@ in type = lib.types.nonEmptyStr; default = ""; }; - port = lib.mkOption { - type = lib.types.port; - default = 8787; - }; }; config = lib.mkIf cfg.enable { - meta = { - domains.list = [ cfg.domain ]; - ports.tcp.list = [ cfg.port ]; - }; + meta.domains.list = [ cfg.domain ]; - services.static-web-server = { - enable = true; - listen = "[::]:${toString cfg.port}"; - root = "${pkgs.it-tools}/lib"; - configuration.general.health = true; - }; + custom.services.caddy.virtualHosts.${cfg.domain}.files = "${pkgs.it-tools}/lib"; }; } diff --git a/modules/system/web-services/memos.nix b/modules/system/web-services/memos.nix index b9368d4..f190142 100644 --- a/modules/system/web-services/memos.nix +++ b/modules/system/web-services/memos.nix @@ -55,9 +55,13 @@ in }; custom = { - services.restic.backups.memos = lib.mkIf cfg.doBackups { - conflictingService = "memos.service"; - paths = [ dataDir ]; + services = { + caddy.virtualHosts.${cfg.domain}.port = cfg.port; + + restic.backups.memos = lib.mkIf cfg.doBackups { + conflictingService = "memos.service"; + paths = [ dataDir ]; + }; }; persist.directories = [ dataDir ]; diff --git a/modules/system/web-services/ntfy.nix b/modules/system/web-services/ntfy.nix index 29aca35..f4f1f5f 100644 --- a/modules/system/web-services/ntfy.nix +++ b/modules/system/web-services/ntfy.nix @@ -30,5 +30,7 @@ in web-root = "disable"; }; }; + + custom.services.caddy.virtualHosts.${cfg.domain}.port = cfg.port; }; } diff --git a/modules/system/web-services/openspeedtest.nix b/modules/system/web-services/openspeedtest.nix index 186140e..a5ba3d2 100644 --- a/modules/system/web-services/openspeedtest.nix +++ b/modules/system/web-services/openspeedtest.nix @@ -26,5 +26,7 @@ in ports = [ "127.0.0.1:${toString cfg.port}:3000" ]; pull = "newer"; }; + + custom.services.caddy.virtualHosts.${cfg.domain}.port = cfg.port; }; } diff --git a/modules/system/web-services/outline.nix b/modules/system/web-services/outline.nix index 4607344..e0e9c02 100644 --- a/modules/system/web-services/outline.nix +++ b/modules/system/web-services/outline.nix @@ -73,13 +73,17 @@ in inherit (config.services.outline) user; in { - services.restic.backups.outline = lib.mkIf cfg.doBackups { - conflictingService = "outline.service"; - paths = [ dataDir ]; - extraConfig.backupPrepareCommand = '' - ${lib.getExe pkgs.sudo} --user=${user} ${lib.getExe' config.services.postgresql.package "pg_dump"} outline --format=custom --file=${dataDir}/db.dump - ''; - restoreCommand.postRestore = "sudo --user=${user} pg_restore --clean --if-exists --dbname outline ${dataDir}/db.dump"; + services = { + caddy.virtualHosts.${cfg.domain}.port = cfg.port; + + restic.backups.outline = lib.mkIf cfg.doBackups { + conflictingService = "outline.service"; + paths = [ dataDir ]; + extraConfig.backupPrepareCommand = '' + ${lib.getExe pkgs.sudo} --user=${user} ${lib.getExe' config.services.postgresql.package "pg_dump"} outline --format=custom --file=${dataDir}/db.dump + ''; + restoreCommand.postRestore = "sudo --user=${user} pg_restore --clean --if-exists --dbname outline ${dataDir}/db.dump"; + }; }; persist.directories = [ diff --git a/modules/system/web-services/personal-blog.nix b/modules/system/web-services/personal-blog.nix index c743c29..8e2fad7 100644 --- a/modules/system/web-services/personal-blog.nix +++ b/modules/system/web-services/personal-blog.nix @@ -16,17 +16,10 @@ in type = lib.types.nonEmptyStr; default = ""; }; - port = lib.mkOption { - type = lib.types.port; - default = 3890; - }; }; config = lib.mkIf cfg.enable { - meta = { - domains.list = [ cfg.domain ]; - ports.tcp.list = [ cfg.port ]; - }; + meta.domains.list = [ cfg.domain ]; systemd.services.generate-blog = { serviceConfig.Type = "oneshot"; @@ -36,9 +29,6 @@ in script = "nix build github:SebastianStork/blog --out-link ${dataDir} --refresh"; }; - services.caddy.virtualHosts.":${toString cfg.port}".extraConfig = '' - root * ${dataDir} - file_server - ''; + custom.services.caddy.virtualHosts.${cfg.domain}.files = dataDir; }; } diff --git a/modules/system/web-services/privatebin.nix b/modules/system/web-services/privatebin.nix index ca64805..d7ebc50 100644 --- a/modules/system/web-services/privatebin.nix +++ b/modules/system/web-services/privatebin.nix @@ -52,5 +52,7 @@ in inherit (cfg) port; }; }; + + custom.services.caddy.virtualHosts.${cfg.domain}.port = cfg.port; }; } diff --git a/modules/system/web-services/radicale.nix b/modules/system/web-services/radicale.nix index 91382ef..3cf0811 100644 --- a/modules/system/web-services/radicale.nix +++ b/modules/system/web-services/radicale.nix @@ -107,10 +107,15 @@ in ); custom = { - services.restic.backups.radicale = lib.mkIf cfg.doBackups { - conflictingService = "radicale.service"; - paths = [ dataDir ]; + services = { + caddy.virtualHosts.${cfg.domain}.port = cfg.port; + + restic.backups.radicale = lib.mkIf cfg.doBackups { + conflictingService = "radicale.service"; + paths = [ dataDir ]; + }; }; + persist.directories = [ dataDir ]; }; }; diff --git a/modules/system/web-services/stirling-pdf.nix b/modules/system/web-services/stirling-pdf.nix index db05ace..6f1b653 100644 --- a/modules/system/web-services/stirling-pdf.nix +++ b/modules/system/web-services/stirling-pdf.nix @@ -44,5 +44,7 @@ in UI_HOMEDESCRIPTION = cfg.branding.description; }; }; + + custom.services.caddy.virtualHosts.${cfg.domain}.port = cfg.port; }; } diff --git a/modules/system/web-services/uptime-kuma.nix b/modules/system/web-services/uptime-kuma.nix index bcc18f7..3d095f0 100644 --- a/modules/system/web-services/uptime-kuma.nix +++ b/modules/system/web-services/uptime-kuma.nix @@ -26,6 +26,10 @@ in settings.PORT = toString cfg.port; }; - custom.persist.directories = [ config.services.uptime-kuma.settings.DATA_DIR ]; + custom = { + services.caddy.virtualHosts.${cfg.domain}.port = cfg.port; + + persist.directories = [ config.services.uptime-kuma.settings.DATA_DIR ]; + }; }; } diff --git a/modules/system/web-services/victorialogs.nix b/modules/system/web-services/victorialogs.nix index 9e2de16..1319a5a 100644 --- a/modules/system/web-services/victorialogs.nix +++ b/modules/system/web-services/victorialogs.nix @@ -57,6 +57,10 @@ in listenAddress = "localhost:${toString cfg.port}"; }; - custom.persist.directories = [ "/var/lib/${config.services.victorialogs.stateDir}" ]; + custom = { + services.caddy.virtualHosts.${cfg.domain}.port = cfg.port; + + persist.directories = [ "/var/lib/${config.services.victorialogs.stateDir}" ]; + }; }; } diff --git a/modules/system/web-services/victoriametrics.nix b/modules/system/web-services/victoriametrics.nix index e64232b..2f33361 100644 --- a/modules/system/web-services/victoriametrics.nix +++ b/modules/system/web-services/victoriametrics.nix @@ -62,6 +62,10 @@ in ]; }; - custom.persist.directories = [ "/var/lib/${config.services.victoriametrics.stateDir}" ]; + custom = { + services.caddy.virtualHosts.${cfg.domain}.port = cfg.port; + + persist.directories = [ "/var/lib/${config.services.victoriametrics.stateDir}" ]; + }; }; }