Hybrid cloud cluster monorepo with Ansible, K8s, NixOS, and Terraform. cute.haus
ansible terraform nix k8s
1

Configure Feed

Select the types of activity you want to include in your feed.

remove networkmap

Aly Raffauf (May 8, 2026, 11:07 PM EDT) bc48d9e9 54f53ca5

+101 -125
+1 -1
hosts/celestic/anubis.nix
··· 10 10 11 11 instances = { 12 12 # forgejo.settings = { 13 - # TARGET = "http://${config.mySnippets.cute-haus.networkMap.forgejo.hostName}:${toString config.mySnippets.cute-haus.networkMap.forgejo.port}"; 13 + # TARGET = "http://solaceon:3001"; 14 14 # BIND = ":60123"; 15 15 # BIND_NETWORK = "tcp"; 16 16 # METRICS_BIND = "0.0.0.0:20123";
+1 -2
hosts/celestic/default.nix
··· 1 1 { 2 - config, 3 2 modulesPath, 4 3 pkgs, 5 4 self, ··· 40 39 after = ["network.target"]; 41 40 42 41 serviceConfig = { 43 - ExecStart = "${pkgs.socat}/bin/socat TCP-LISTEN:23,fork,reuseaddr TCP:${config.mySnippets.cute-haus.networkMap.atbbs.hostName}:2323"; 42 + ExecStart = "${pkgs.socat}/bin/socat TCP-LISTEN:23,fork,reuseaddr TCP:eterna:2323"; 44 43 Restart = "always"; 45 44 }; 46 45 };
+2 -2
hosts/celestic/proxy.nix
··· 1 - {config, ...}: { 1 + _: { 2 2 security.acme = { 3 3 acceptTerms = true; 4 4 defaults.email = "alyraffauf@fastmail.com"; ··· 12 12 "morsels.blue" = { 13 13 extraConfig = '' 14 14 encode gzip zstd 15 - reverse_proxy ${config.mySnippets.cute-haus.networkMap.morsels.hostName}:${toString config.mySnippets.cute-haus.networkMap.morsels.port} 15 + reverse_proxy eterna:8484 16 16 ''; 17 17 18 18 serverAliases = ["www.morsels.blue"];
+7 -7
hosts/eterna/grafana.nix
··· 1 - {config, ...}: { 1 + _: { 2 2 services = { 3 3 grafana = { 4 4 enable = true; ··· 6 6 settings = { 7 7 server = { 8 8 http_addr = "0.0.0.0"; 9 - http_port = config.mySnippets.tailnet.networkMap.grafana.port; 10 - domain = config.mySnippets.tailnet.networkMap.grafana.vHost; 9 + http_port = 3010; 10 + domain = "grafana.narwhal-snapper.ts.net"; 11 11 }; 12 12 }; 13 13 ··· 19 19 name = "Prometheus"; 20 20 type = "prometheus"; 21 21 access = "proxy"; 22 - url = "https://${config.mySnippets.tailnet.networkMap.prometheus.vHost}"; 22 + url = "https://prometheus.narwhal-snapper.ts.net"; 23 23 } 24 24 { 25 25 name = "Loki"; 26 26 type = "loki"; 27 27 access = "proxy"; 28 - url = "https://${config.mySnippets.tailnet.networkMap.loki.vHost}"; 28 + url = "https://loki.narwhal-snapper.ts.net"; 29 29 } 30 30 ]; 31 31 }; ··· 38 38 auth_enabled = false; 39 39 40 40 server = { 41 - http_listen_port = config.mySnippets.tailnet.networkMap.loki.port; 41 + http_listen_port = 3030; 42 42 grpc_listen_port = 0; 43 43 }; 44 44 ··· 112 112 prometheus = { 113 113 enable = true; 114 114 globalConfig.scrape_interval = "10s"; 115 - inherit (config.mySnippets.tailnet.networkMap.prometheus) port; 115 + port = 3020; 116 116 117 117 scrapeConfigs = [ 118 118 {
+20 -24
hosts/eterna/services.nix
··· 1 - {config, ...}: { 1 + _: let 2 + tnet = "narwhal-snapper.ts.net"; 3 + in { 2 4 networking = { 3 5 firewall.allowedTCPPorts = [80 443 2379 2380 3000 6443 61208]; 4 6 firewall.allowedUDPPorts = [8472]; ··· 19 21 caddy = { 20 22 email = "alyraffauf@fastmail.com"; 21 23 virtualHosts = { 22 - "${config.mySnippets.tailnet.networkMap.grafana.vHost}" = { 23 - extraConfig = '' 24 - bind tailscale/grafana 25 - encode zstd gzip 26 - reverse_proxy ${config.mySnippets.tailnet.networkMap.grafana.hostName}:${toString config.mySnippets.tailnet.networkMap.grafana.port} 27 - ''; 28 - }; 24 + "grafana.${tnet}".extraConfig = '' 25 + bind tailscale/grafana 26 + encode zstd gzip 27 + reverse_proxy eterna:3010 28 + ''; 29 29 30 - "${config.mySnippets.tailnet.networkMap.loki.vHost}" = { 31 - extraConfig = '' 32 - bind tailscale/loki 33 - encode zstd gzip 34 - reverse_proxy ${config.mySnippets.tailnet.networkMap.loki.hostName}:${toString config.mySnippets.tailnet.networkMap.loki.port} 35 - ''; 36 - }; 30 + "loki.${tnet}".extraConfig = '' 31 + bind tailscale/loki 32 + encode zstd gzip 33 + reverse_proxy eterna:3030 34 + ''; 37 35 38 - "${config.mySnippets.tailnet.networkMap.prometheus.vHost}" = { 39 - extraConfig = '' 40 - bind tailscale/prometheus 41 - encode zstd gzip 42 - reverse_proxy ${config.mySnippets.tailnet.networkMap.prometheus.hostName}:${toString config.mySnippets.tailnet.networkMap.prometheus.port} 43 - ''; 44 - }; 36 + "prometheus.${tnet}".extraConfig = '' 37 + bind tailscale/prometheus 38 + encode zstd gzip 39 + reverse_proxy eterna:3020 40 + ''; 45 41 }; 46 42 }; 47 43 ··· 58 54 INFERENCE_JOB_TIMEOUT_SEC = "600"; 59 55 INFERENCE_LANG = "english"; 60 56 INFERENCE_TEXT_MODEL = INFERENCE_IMAGE_MODEL; 61 - NEXTAUTH_URL = "https://${config.mySnippets.cute-haus.networkMap.karakeep.vHost}"; 62 - OLLAMA_BASE_URL = "https://ollama.${config.mySnippets.tailnet.name}"; 57 + NEXTAUTH_URL = "https://karakeep.cute.haus"; 58 + OLLAMA_BASE_URL = "https://ollama.${tnet}"; 63 59 OLLAMA_KEEP_ALIVE = "5m"; 64 60 PORT = "7020"; 65 61 };
+1 -1
hosts/jubilife/default.nix
··· 126 126 promtail.enable = true; 127 127 128 128 qbittorrent = { 129 - inherit (config.mySnippets.tailnet.networkMap.qbittorrent) port; 129 + port = 8080; 130 130 enable = true; 131 131 }; 132 132
+5 -5
hosts/jubilife/prometheus.nix
··· 4 4 enable = true; 5 5 apiKeyFile = config.sops.secrets.bazarrApiKey.path; 6 6 port = 9708; 7 - url = "https://${config.mySnippets.tailnet.networkMap.bazarr.vHost}"; 7 + url = "https://bazarr.narwhal-snapper.ts.net"; 8 8 }; 9 9 10 10 exportarr-lidarr = { 11 11 enable = true; 12 12 apiKeyFile = config.sops.secrets.lidarrApiKey.path; 13 13 port = 9709; 14 - url = "https://${config.mySnippets.tailnet.networkMap.lidarr.vHost}"; 14 + url = "https://lidarr.narwhal-snapper.ts.net"; 15 15 }; 16 16 17 17 exportarr-prowlarr = { 18 18 enable = true; 19 19 apiKeyFile = config.sops.secrets.prowlarrApiKey.path; 20 20 port = 9710; 21 - url = "https://${config.mySnippets.tailnet.networkMap.prowlarr.vHost}"; 21 + url = "https://prowlarr.narwhal-snapper.ts.net"; 22 22 }; 23 23 24 24 exportarr-radarr = { 25 25 enable = true; 26 26 apiKeyFile = config.sops.secrets.radarrApiKey.path; 27 27 port = 9711; 28 - url = "https://${config.mySnippets.tailnet.networkMap.radarr.vHost}"; 28 + url = "https://radarr.narwhal-snapper.ts.net"; 29 29 }; 30 30 31 31 exportarr-sonarr = { 32 32 enable = true; 33 33 apiKeyFile = config.sops.secrets.sonarrApiKey.path; 34 34 port = 9712; 35 - url = "https://${config.mySnippets.tailnet.networkMap.sonarr.vHost}"; 35 + url = "https://sonarr.narwhal-snapper.ts.net"; 36 36 }; 37 37 38 38 smartctl.enable = true;
+50 -67
hosts/jubilife/services.nix
··· 1 1 {config, ...}: let 2 2 dataDirectory = "/mnt/Data"; 3 + tnet = "narwhal-snapper.ts.net"; 3 4 in { 4 5 networking.firewall.allowedTCPPorts = [6881]; 5 6 6 7 services = { 7 8 caddy.virtualHosts = { 8 - "${config.mySnippets.tailnet.networkMap.bazarr.vHost}" = { 9 - extraConfig = '' 10 - bind tailscale/bazarr 11 - encode zstd gzip 12 - reverse_proxy ${config.mySnippets.tailnet.networkMap.bazarr.hostName}:${toString config.mySnippets.tailnet.networkMap.bazarr.port} 13 - ''; 14 - }; 9 + "bazarr.${tnet}".extraConfig = '' 10 + bind tailscale/bazarr 11 + encode zstd gzip 12 + reverse_proxy jubilife:6767 13 + ''; 15 14 16 - "${config.mySnippets.tailnet.networkMap.jellyfin.vHost}" = { 17 - extraConfig = '' 18 - bind tailscale/jellyfin 19 - encode zstd gzip 20 - reverse_proxy ${config.mySnippets.tailnet.networkMap.jellyfin.hostName}:${toString config.mySnippets.tailnet.networkMap.jellyfin.port} { 21 - flush_interval -1 22 - } 23 - ''; 24 - }; 15 + "jellyfin.${tnet}".extraConfig = '' 16 + bind tailscale/jellyfin 17 + encode zstd gzip 18 + reverse_proxy jubilife:8096 { 19 + flush_interval -1 20 + } 21 + ''; 25 22 26 - "${config.mySnippets.tailnet.networkMap.lidarr.vHost}" = { 27 - extraConfig = '' 28 - bind tailscale/lidarr 29 - encode zstd gzip 30 - reverse_proxy ${config.mySnippets.tailnet.networkMap.lidarr.hostName}:${toString config.mySnippets.tailnet.networkMap.lidarr.port} 31 - ''; 32 - }; 23 + "lidarr.${tnet}".extraConfig = '' 24 + bind tailscale/lidarr 25 + encode zstd gzip 26 + reverse_proxy jubilife:8686 27 + ''; 33 28 34 - "${config.mySnippets.tailnet.networkMap.ollama.vHost}" = { 35 - extraConfig = '' 36 - bind tailscale/ollama 37 - encode zstd gzip 38 - reverse_proxy ${config.mySnippets.tailnet.networkMap.ollama.hostName}:${toString config.mySnippets.tailnet.networkMap.ollama.port} 39 - ''; 40 - }; 29 + "ollama.${tnet}".extraConfig = '' 30 + bind tailscale/ollama 31 + encode zstd gzip 32 + reverse_proxy jubilife:11434 33 + ''; 41 34 42 - "${config.mySnippets.tailnet.networkMap.prowlarr.vHost}" = { 43 - extraConfig = '' 44 - bind tailscale/prowlarr 45 - encode zstd gzip 46 - reverse_proxy ${config.mySnippets.tailnet.networkMap.prowlarr.hostName}:${toString config.mySnippets.tailnet.networkMap.prowlarr.port} 47 - ''; 48 - }; 35 + "prowlarr.${tnet}".extraConfig = '' 36 + bind tailscale/prowlarr 37 + encode zstd gzip 38 + reverse_proxy jubilife:9696 39 + ''; 49 40 50 - "${config.mySnippets.tailnet.networkMap.qbittorrent.vHost}" = { 51 - extraConfig = '' 52 - bind tailscale/qbittorrent 53 - encode zstd gzip 54 - reverse_proxy ${config.mySnippets.tailnet.networkMap.qbittorrent.hostName}:${toString config.mySnippets.tailnet.networkMap.qbittorrent.port} 55 - ''; 56 - }; 41 + "qbittorrent.${tnet}".extraConfig = '' 42 + bind tailscale/qbittorrent 43 + encode zstd gzip 44 + reverse_proxy jubilife:8080 45 + ''; 57 46 58 - "${config.mySnippets.tailnet.networkMap.radarr.vHost}" = { 59 - extraConfig = '' 60 - bind tailscale/radarr 61 - encode zstd gzip 62 - reverse_proxy ${config.mySnippets.tailnet.networkMap.radarr.hostName}:${toString config.mySnippets.tailnet.networkMap.radarr.port} 63 - ''; 64 - }; 47 + "radarr.${tnet}".extraConfig = '' 48 + bind tailscale/radarr 49 + encode zstd gzip 50 + reverse_proxy jubilife:7878 51 + ''; 65 52 66 - "${config.mySnippets.tailnet.networkMap.sonarr.vHost}" = { 67 - extraConfig = '' 68 - bind tailscale/sonarr 69 - encode zstd gzip 70 - reverse_proxy ${config.mySnippets.tailnet.networkMap.sonarr.hostName}:${toString config.mySnippets.tailnet.networkMap.sonarr.port} 71 - ''; 72 - }; 53 + "sonarr.${tnet}".extraConfig = '' 54 + bind tailscale/sonarr 55 + encode zstd gzip 56 + reverse_proxy jubilife:8989 57 + ''; 73 58 74 - "${config.mySnippets.tailnet.networkMap.tautulli.vHost}" = { 75 - extraConfig = '' 76 - bind tailscale/tautulli 77 - encode zstd gzip 78 - reverse_proxy ${config.mySnippets.tailnet.networkMap.tautulli.hostName}:${toString config.mySnippets.tailnet.networkMap.tautulli.port} 79 - ''; 80 - }; 59 + "tautulli.${tnet}".extraConfig = '' 60 + bind tailscale/tautulli 61 + encode zstd gzip 62 + reverse_proxy jubilife:8181 63 + ''; 81 64 }; 82 65 83 66 immich = { ··· 85 68 host = "0.0.0.0"; 86 69 mediaLocation = "${dataDirectory}/immich"; 87 70 openFirewall = true; 88 - inherit (config.mySnippets.cute-haus.networkMap.immich) port; 71 + port = 2283; 89 72 }; 90 73 91 74 jellyfin = { ··· 116 99 }; 117 100 118 101 ombi = { 119 - inherit (config.mySnippets.cute-haus.networkMap.ombi) port; 120 102 enable = true; 103 + port = 5000; 121 104 dataDir = "/mnt/Data/ombi"; 122 105 openFirewall = true; 123 106 };
+1 -1
hosts/snowpoint/default.nix
··· 97 97 Address = "0.0.0.0"; 98 98 DefaultTheme = "Auto"; 99 99 MusicFolder = "/mnt/Media/Music"; 100 - Port = config.mySnippets.tailnet.networkMap.navidrome.port; 100 + Port = 4533; 101 101 SubsonicArtistParticipations = true; 102 102 UIWelcomeMessage = "Welcome to Navidrome @ ${config.networking.hostName}"; 103 103 };
+13 -15
hosts/snowpoint/proxy.nix
··· 1 - {config, ...}: { 1 + _: let 2 + tnet = "narwhal-snapper.ts.net"; 3 + in { 2 4 services = { 3 5 caddy = { 4 6 email = "alyraffauf@fastmail.com"; 5 7 6 8 virtualHosts = { 7 - "${config.mySnippets.tailnet.networkMap.navidrome.vHost}" = { 8 - extraConfig = '' 9 - bind tailscale/navidrome 10 - encode zstd gzip 11 - reverse_proxy ${config.mySnippets.tailnet.networkMap.navidrome.hostName}:${toString config.mySnippets.tailnet.networkMap.navidrome.port} 12 - ''; 13 - }; 9 + "navidrome.${tnet}".extraConfig = '' 10 + bind tailscale/navidrome 11 + encode zstd gzip 12 + reverse_proxy snowpoint:4533 13 + ''; 14 14 15 - "${config.mySnippets.tailnet.networkMap.photoprism.vHost}" = { 16 - extraConfig = '' 17 - bind tailscale/photoprism 18 - encode zstd gzip 19 - reverse_proxy ${config.mySnippets.tailnet.networkMap.photoprism.hostName}:${toString config.mySnippets.tailnet.networkMap.photoprism.port} 20 - ''; 21 - }; 15 + "photoprism.${tnet}".extraConfig = '' 16 + bind tailscale/photoprism 17 + encode zstd gzip 18 + reverse_proxy jubilife:2342 19 + ''; 22 20 }; 23 21 }; 24 22 };