1{
2 config,
3 lib,
4 ...
5}: let
6 name = "uptime-kuma";
7 cfg = config.myNixOS.services.${name};
8
9 inherit (config.mySnippets) aylac-top;
10 inherit (config.mySnippets) tailnet;
11
12 publicNetwork = aylac-top;
13 privateNetwork = tailnet;
14in {
15 options.myNixOS.services.${name} = {
16 enable = lib.mkEnableOption "${name} server";
17 autoProxy = lib.mkOption {
18 default = true;
19 example = false;
20 description = "${name} auto proxy";
21 type = lib.types.bool;
22 };
23 publicProxy = lib.mkOption {
24 default = "caddy";
25 example = "cf";
26 description = "Public proxy provider for ${name}";
27 type = lib.types.enum ["none" "cf" "caddy"];
28 };
29 };
30
31 config = lib.mkIf cfg.enable {
32 services = {
33 caddy.virtualHosts = {
34 "${privateNetwork.networkMap.${name}.vHost}".extraConfig = lib.mkIf cfg.autoProxy ''
35 bind tailscale/${name}
36 encode zstd gzip
37 reverse_proxy ${privateNetwork.networkMap.${name}.hostName}:${toString privateNetwork.networkMap.${name}.port}
38 '';
39
40 "${publicNetwork.networkMap.${name}.vHost}" = lib.mkIf (cfg.publicProxy == "caddy") {
41 extraConfig = ''
42 encode gzip zstd
43 reverse_proxy ${publicNetwork.networkMap.${name}.hostName}:${toString publicNetwork.networkMap.${name}.port}
44 '';
45 };
46 };
47
48 cloudflared.tunnels."${publicNetwork.cloudflareTunnel}".ingress = lib.mkIf (cfg.publicProxy == "cf") {
49 "${publicNetwork.networkMap.pds.vHost}" = "http://${publicNetwork.networkMap.pds.hostName}";
50 };
51
52 uptime-kuma = {
53 enable = true;
54 appriseSupport = true;
55
56 settings = {
57 PORT = toString publicNetwork.networkMap.${name}.port;
58 HOST = "0.0.0.0";
59 };
60 };
61 };
62 };
63}