let p = import ../parameters.nix; in { appConfig = { enableFontAwesome = true; fontAwesomeKey = "e9076c7025"; theme = "thebe"; statusCheck = true; auth = { enableOidc = true; oidc = { clientId = "FiIJTqBIlMKmeSBjznUFgXIJadt71av8dfICvZvf"; endpoint = "https://auth.pasetto.me/application/o/dashy/"; scope = ["openid" "profile" "email"]; }; }; webSearch = { searchEngine = "custom"; customSearchEngine = "https://search.${p.domains.public}/search?q="; }; }; pageInfo = { description = "Pasetto's Homelab"; navLinks = [ { path = "/"; title = "Home"; } { path = "https://git.${p.domains.public}/pazpi/nix"; title = "Source Code"; } ]; title = "Homelab? Homepage!"; }; sections = [ # ══════════════════════════════════════════════════════════════════════════ # Widgets Section # ══════════════════════════════════════════════════════════════════════════ { name = "Dashboard"; displayData = { cols = 3; collapsed = false; }; widgets = [ { type = "clock"; options = { timeZone = "Europe/Rome"; hideSeconds = true; customCityName = "Borgo Valsugana"; }; } { type = "uptime-kuma"; options = { hostname = "https://up.${p.domains.public}"; }; } { type = "proxmox-lists"; options = { cluster_url = "https://bacco.ts.${p.domains.public}"; user_name = "root@pam"; token_name = "dashy2"; token_uuid = "2e63b0df-6be7-46b4-be13-6558ad0be647"; }; } ]; } # ══════════════════════════════════════════════════════════════════════════ # Core Services # ══════════════════════════════════════════════════════════════════════════ { name = "Core Services"; displayData = { cols = 1; collapsed = false; }; 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"; } { title = "SearXNG"; description = "Private Search"; url = "https://search.${p.domains.public}"; icon = "hl-searxng"; } ]; } # ══════════════════════════════════════════════════════════════════════════ # Home Automation # ══════════════════════════════════════════════════════════════════════════ { name = "Home Automation"; displayData = { cols = 1; collapsed = false; }; items = [ { title = "Home Assistant"; description = "Smart Home Hub"; url = "https://h.${p.domains.public}"; icon = "hl-home-assistant"; } { title = "Zigbee2MQTT"; description = "Zigbee Bridge"; url = "https://zigbee.ts.${p.domains.public}"; icon = "hl-zigbee2mqtt"; } ]; } # ══════════════════════════════════════════════════════════════════════════ # Media Center # ══════════════════════════════════════════════════════════════════════════ { 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; }; 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 = "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"; description = "Proxmox Node"; url = "https://bacco.${p.domains.public}:8006"; icon = "hl-proxmox"; } { title = "Node"; 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"; } ]; } ]; }