From 266b8915983a95993b895af37de681988848b124 Mon Sep 17 00:00:00 2001 From: pazpi Date: Tue, 9 Dec 2025 22:30:01 +0100 Subject: [PATCH] Enabled back Dashy --- hosts/caddy/dashy-settings.nix | 291 +++++++++++++++++++++++++++++---- hosts/caddy/default.nix | 4 +- modules/services/dashy.nix | 10 +- 3 files changed, 266 insertions(+), 39 deletions(-) diff --git a/hosts/caddy/dashy-settings.nix b/hosts/caddy/dashy-settings.nix index 6bd12df..c9f265d 100644 --- a/hosts/caddy/dashy-settings.nix +++ b/hosts/caddy/dashy-settings.nix @@ -12,6 +12,7 @@ in oidc = { clientId = "FiIJTqBIlMKmeSBjznUFgXIJadt71av8dfICvZvf"; endpoint = "https://auth.pasetto.me/application/o/dashy/"; + scope = ["openid" "profile" "email"]; }; }; webSearch = { @@ -28,7 +29,7 @@ in title = "Home"; } { - path = "https://gitlab.com/pazpi/nix"; + path = "https://git.${p.domains.public}/pazpi/nix"; title = "Source Code"; } ]; @@ -36,8 +37,11 @@ in }; sections = [ + # ══════════════════════════════════════════════════════════════════════════ + # Widgets Section + # ══════════════════════════════════════════════════════════════════════════ { - name = "Widget"; + name = "Dashboard"; displayData = { cols = 3; collapsed = false; @@ -51,16 +55,16 @@ in customCityName = "Borgo Valsugana"; }; } - { type = "public-ip"; } - # { - # type = "HealthChecks"; - # apiKey = ""; - # } - # { type = "system-info"; } + { + type = "uptime-kuma"; + options = { + hostname = "https://up.${p.domains.public}"; + }; + } { type = "proxmox-lists"; options = { - cluster_url = "https://bacco.${p.domains.public}"; + cluster_url = "https://bacco.ts.${p.domains.public}"; user_name = "root@pam"; token_name = "dashy2"; token_uuid = "2e63b0df-6be7-46b4-be13-6558ad0be647"; @@ -68,8 +72,12 @@ in } ]; } + + # ══════════════════════════════════════════════════════════════════════════ + # Core Services + # ══════════════════════════════════════════════════════════════════════════ { - name = "Public Services"; + name = "Core Services"; displayData = { cols = 1; collapsed = false; @@ -77,61 +85,209 @@ in items = [ { title = "Authentik"; + description = "Identity Provider"; url = "https://auth.${p.domains.public}"; icon = "hl-authentik"; } { title = "Nextcloud"; + description = "Cloud Storage"; url = "https://cloud.${p.domains.public}"; icon = "hl-nextcloud"; } { title = "Vaultwarden"; + description = "Password Manager"; url = "https://vault.${p.domains.public}"; icon = "hl-vaultwarden"; } - ]; - } - { - name = "Private Services"; - displayData = { - cols = 1; - collapsed = false; - }; - items = [ { - title = "Searx"; + title = "SearXNG"; + description = "Private Search"; url = "https://search.${p.domains.public}"; icon = "hl-searxng"; } - { - title = "Portainer"; - url = "https://portainer.${p.domains.public}"; - icon = "hl-portainer"; - } ]; } + + # ══════════════════════════════════════════════════════════════════════════ + # Home Automation + # ══════════════════════════════════════════════════════════════════════════ { - name = "Network Services"; + name = "Home Automation"; displayData = { cols = 1; collapsed = false; }; items = [ { - title = "Primary DNS"; - url = "https://${p.hosts.dns01}"; - icon = "hl-technitium"; + title = "Home Assistant"; + description = "Smart Home Hub"; + url = "https://h.${p.domains.public}"; + icon = "hl-home-assistant"; } { - title = "Seconday DNS"; - url = "https://${p.hosts.dns02}"; - icon = "hl-technitium"; + title = "Zigbee2MQTT"; + description = "Zigbee Bridge"; + url = "https://zigbee.ts.${p.domains.public}"; + icon = "hl-zigbee2mqtt"; } ]; } + + # ══════════════════════════════════════════════════════════════════════════ + # Media Center + # ══════════════════════════════════════════════════════════════════════════ { - name = "Monitoring Services"; + name = "Media Center"; + displayData = { + cols = 1; + collapsed = false; + }; + items = [ + { + title = "Plex"; + description = "Media Server"; + url = "https://app.plex.tv"; + icon = "hl-plex"; + } + { + title = "Jellyseerr"; + description = "Media Requests"; + url = "https://jellyseerr.ts.${p.domains.public}"; + icon = "hl-jellyseerr"; + } + { + title = "qBittorrent"; + description = "Torrent Client"; + url = "https://torrent.ts.${p.domains.public}"; + icon = "hl-qbittorrent"; + } + ]; + } + + # ══════════════════════════════════════════════════════════════════════════ + # Media Management (Arr Stack) + # ══════════════════════════════════════════════════════════════════════════ + { + name = "Media Management"; + displayData = { + cols = 1; + collapsed = false; + }; + items = [ + { + title = "Prowlarr"; + description = "Indexer Manager"; + url = "https://prowlarr.ts.${p.domains.public}"; + icon = "hl-prowlarr"; + } + { + title = "Radarr"; + description = "Movies"; + url = "https://radarr.ts.${p.domains.public}"; + icon = "hl-radarr"; + } + { + title = "Sonarr"; + description = "TV Shows"; + url = "https://sonarr.ts.${p.domains.public}"; + icon = "hl-sonarr"; + } + { + title = "Lidarr"; + description = "Music"; + url = "https://lidarr.ts.${p.domains.public}"; + icon = "hl-lidarr"; + } + { + title = "Readarr"; + description = "E-Books"; + url = "https://readarr.ts.${p.domains.public}"; + icon = "hl-readarr"; + } + { + title = "Bazarr"; + description = "Subtitles"; + url = "https://bazarr.ts.${p.domains.public}"; + icon = "hl-bazarr"; + } + ]; + } + + # ══════════════════════════════════════════════════════════════════════════ + # Productivity + # ══════════════════════════════════════════════════════════════════════════ + { + name = "Productivity"; + displayData = { + cols = 1; + collapsed = false; + }; + items = [ + { + title = "Immich"; + description = "Photo Library"; + url = "https://photos.${p.domains.public}"; + icon = "hl-immich"; + } + { + title = "Paperless"; + description = "Document Manager"; + url = "https://paperless.${p.domains.public}"; + icon = "hl-paperless-ngx"; + } + { + title = "Firefly III"; + description = "Finance Tracker"; + url = "https://firefly.${p.domains.public}"; + icon = "hl-firefly-iii"; + } + { + title = "Keep"; + description = "Notes"; + url = "https://keep.${p.domains.public}"; + icon = "hl-google-keep"; + } + ]; + } + + # ══════════════════════════════════════════════════════════════════════════ + # Development & Automation + # ══════════════════════════════════════════════════════════════════════════ + { + name = "Development & Automation"; + displayData = { + cols = 1; + collapsed = false; + }; + items = [ + { + title = "Forgejo"; + description = "Git Forge"; + url = "https://git.${p.domains.public}"; + icon = "hl-forgejo"; + } + { + title = "n8n"; + description = "Workflow Automation"; + url = "https://n8n.${p.domains.public}"; + icon = "hl-n8n"; + } + { + title = "AI"; + description = "AI Assistant"; + url = "https://ai.${p.domains.public}"; + icon = "hl-ollama"; + } + ]; + } + + # ══════════════════════════════════════════════════════════════════════════ + # Monitoring + # ══════════════════════════════════════════════════════════════════════════ + { + name = "Monitoring"; displayData = { cols = 1; collapsed = false; @@ -139,32 +295,95 @@ in items = [ { title = "Grafana"; + description = "Dashboards"; url = "https://grafana.${p.domains.public}"; icon = "hl-grafana"; } { title = "Prometheus"; + description = "Metrics"; url = "https://prometheus.ts.${p.domains.public}"; icon = "hl-prometheus"; } + { + title = "Uptime Kuma"; + description = "Status Monitor"; + url = "https://up.${p.domains.public}"; + icon = "hl-uptime-kuma"; + } ]; } + + # ══════════════════════════════════════════════════════════════════════════ + # Infrastructure + # ══════════════════════════════════════════════════════════════════════════ { - name = "Devices"; + name = "Infrastructure"; displayData = { cols = 1; collapsed = false; }; items = [ + { + title = "Portainer"; + description = "Container Management"; + url = "https://portainer.${p.domains.public}"; + icon = "hl-portainer"; + } + { + title = "Primary DNS"; + description = "Technitium DNS"; + url = "http://${p.hosts.dns01}:5380"; + icon = "hl-technitium"; + } + { + title = "Secondary DNS"; + description = "Technitium DNS"; + url = "http://${p.hosts.dns02}:5380"; + icon = "hl-technitium"; + } { title = "Bacco"; - url = "https://bacco.internal:8006"; + description = "Proxmox Node"; + url = "https://bacco.${p.domains.public}:8006"; icon = "hl-proxmox"; } { title = "Node"; - url = "https://node.internal:8006"; + description = "Proxmox Node"; + url = "https://node.${p.domains.public}:8006"; icon = "hl-proxmox"; + } + { + title = "Krzo"; + description = "Proxmox Node"; + url = "https://krzo.${p.domains.public}:8006"; + icon = "hl-proxmox"; + } + ]; + } + + # ══════════════════════════════════════════════════════════════════════════ + # Other Services + # ══════════════════════════════════════════════════════════════════════════ + { + name = "Other Services"; + displayData = { + cols = 1; + collapsed = true; + }; + items = [ + { + title = "IL Post Podcast"; + description = "Podcast Feed"; + url = "https://ilpost.${p.domains.public}"; + icon = "hl-podgrab"; + } + { + title = "Maps"; + description = "Self-hosted Maps"; + url = "https://maps.${p.domains.public}"; + icon = "hl-openstreetmap"; } ]; } diff --git a/hosts/caddy/default.nix b/hosts/caddy/default.nix index 9a4ff7e..e33b1da 100644 --- a/hosts/caddy/default.nix +++ b/hosts/caddy/default.nix @@ -35,10 +35,10 @@ in }; dashy = { - enable = false; + enable = true; settings = import ./dashy-settings.nix; proxy = { - enable = false; + enable = true; domain = p.domains.public; host = p.hosts.caddy; }; diff --git a/modules/services/dashy.nix b/modules/services/dashy.nix index ee024f5..ec75ecc 100644 --- a/modules/services/dashy.nix +++ b/modules/services/dashy.nix @@ -39,6 +39,14 @@ in ''; }; + subdomain = lib.mkOption { + default = "casa"; + type = lib.types.str; + description = '' + The subdomain where Dashy is reachable + ''; + }; + }; }; @@ -54,7 +62,7 @@ in (lib.mkIf cfg.proxy.enable { services.caddy = with cfg.proxy; { - virtualHosts."home.${domain}".extraConfig = '' + virtualHosts."${subdomain}.${domain}".extraConfig = '' root * ${config.services.dashy.finalDrv} file_server import cloudflare_${domain}