Enabled back Dashy
This commit is contained in:
parent
8b2e73192d
commit
266b891598
3 changed files with 266 additions and 39 deletions
|
|
@ -12,6 +12,7 @@ in
|
||||||
oidc = {
|
oidc = {
|
||||||
clientId = "FiIJTqBIlMKmeSBjznUFgXIJadt71av8dfICvZvf";
|
clientId = "FiIJTqBIlMKmeSBjznUFgXIJadt71av8dfICvZvf";
|
||||||
endpoint = "https://auth.pasetto.me/application/o/dashy/";
|
endpoint = "https://auth.pasetto.me/application/o/dashy/";
|
||||||
|
scope = ["openid" "profile" "email"];
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
webSearch = {
|
webSearch = {
|
||||||
|
|
@ -28,7 +29,7 @@ in
|
||||||
title = "Home";
|
title = "Home";
|
||||||
}
|
}
|
||||||
{
|
{
|
||||||
path = "https://gitlab.com/pazpi/nix";
|
path = "https://git.${p.domains.public}/pazpi/nix";
|
||||||
title = "Source Code";
|
title = "Source Code";
|
||||||
}
|
}
|
||||||
];
|
];
|
||||||
|
|
@ -36,8 +37,11 @@ in
|
||||||
};
|
};
|
||||||
|
|
||||||
sections = [
|
sections = [
|
||||||
|
# ══════════════════════════════════════════════════════════════════════════
|
||||||
|
# Widgets Section
|
||||||
|
# ══════════════════════════════════════════════════════════════════════════
|
||||||
{
|
{
|
||||||
name = "Widget";
|
name = "Dashboard";
|
||||||
displayData = {
|
displayData = {
|
||||||
cols = 3;
|
cols = 3;
|
||||||
collapsed = false;
|
collapsed = false;
|
||||||
|
|
@ -51,16 +55,16 @@ in
|
||||||
customCityName = "Borgo Valsugana";
|
customCityName = "Borgo Valsugana";
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
{ type = "public-ip"; }
|
{
|
||||||
# {
|
type = "uptime-kuma";
|
||||||
# type = "HealthChecks";
|
options = {
|
||||||
# apiKey = "";
|
hostname = "https://up.${p.domains.public}";
|
||||||
# }
|
};
|
||||||
# { type = "system-info"; }
|
}
|
||||||
{
|
{
|
||||||
type = "proxmox-lists";
|
type = "proxmox-lists";
|
||||||
options = {
|
options = {
|
||||||
cluster_url = "https://bacco.${p.domains.public}";
|
cluster_url = "https://bacco.ts.${p.domains.public}";
|
||||||
user_name = "root@pam";
|
user_name = "root@pam";
|
||||||
token_name = "dashy2";
|
token_name = "dashy2";
|
||||||
token_uuid = "2e63b0df-6be7-46b4-be13-6558ad0be647";
|
token_uuid = "2e63b0df-6be7-46b4-be13-6558ad0be647";
|
||||||
|
|
@ -68,8 +72,12 @@ in
|
||||||
}
|
}
|
||||||
];
|
];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
# ══════════════════════════════════════════════════════════════════════════
|
||||||
|
# Core Services
|
||||||
|
# ══════════════════════════════════════════════════════════════════════════
|
||||||
{
|
{
|
||||||
name = "Public Services";
|
name = "Core Services";
|
||||||
displayData = {
|
displayData = {
|
||||||
cols = 1;
|
cols = 1;
|
||||||
collapsed = false;
|
collapsed = false;
|
||||||
|
|
@ -77,61 +85,209 @@ in
|
||||||
items = [
|
items = [
|
||||||
{
|
{
|
||||||
title = "Authentik";
|
title = "Authentik";
|
||||||
|
description = "Identity Provider";
|
||||||
url = "https://auth.${p.domains.public}";
|
url = "https://auth.${p.domains.public}";
|
||||||
icon = "hl-authentik";
|
icon = "hl-authentik";
|
||||||
}
|
}
|
||||||
{
|
{
|
||||||
title = "Nextcloud";
|
title = "Nextcloud";
|
||||||
|
description = "Cloud Storage";
|
||||||
url = "https://cloud.${p.domains.public}";
|
url = "https://cloud.${p.domains.public}";
|
||||||
icon = "hl-nextcloud";
|
icon = "hl-nextcloud";
|
||||||
}
|
}
|
||||||
{
|
{
|
||||||
title = "Vaultwarden";
|
title = "Vaultwarden";
|
||||||
|
description = "Password Manager";
|
||||||
url = "https://vault.${p.domains.public}";
|
url = "https://vault.${p.domains.public}";
|
||||||
icon = "hl-vaultwarden";
|
icon = "hl-vaultwarden";
|
||||||
}
|
}
|
||||||
];
|
|
||||||
}
|
|
||||||
{
|
{
|
||||||
name = "Private Services";
|
title = "SearXNG";
|
||||||
displayData = {
|
description = "Private Search";
|
||||||
cols = 1;
|
|
||||||
collapsed = false;
|
|
||||||
};
|
|
||||||
items = [
|
|
||||||
{
|
|
||||||
title = "Searx";
|
|
||||||
url = "https://search.${p.domains.public}";
|
url = "https://search.${p.domains.public}";
|
||||||
icon = "hl-searxng";
|
icon = "hl-searxng";
|
||||||
}
|
}
|
||||||
{
|
|
||||||
title = "Portainer";
|
|
||||||
url = "https://portainer.${p.domains.public}";
|
|
||||||
icon = "hl-portainer";
|
|
||||||
}
|
|
||||||
];
|
];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
# ══════════════════════════════════════════════════════════════════════════
|
||||||
|
# Home Automation
|
||||||
|
# ══════════════════════════════════════════════════════════════════════════
|
||||||
{
|
{
|
||||||
name = "Network Services";
|
name = "Home Automation";
|
||||||
displayData = {
|
displayData = {
|
||||||
cols = 1;
|
cols = 1;
|
||||||
collapsed = false;
|
collapsed = false;
|
||||||
};
|
};
|
||||||
items = [
|
items = [
|
||||||
{
|
{
|
||||||
title = "Primary DNS";
|
title = "Home Assistant";
|
||||||
url = "https://${p.hosts.dns01}";
|
description = "Smart Home Hub";
|
||||||
icon = "hl-technitium";
|
url = "https://h.${p.domains.public}";
|
||||||
|
icon = "hl-home-assistant";
|
||||||
}
|
}
|
||||||
{
|
{
|
||||||
title = "Seconday DNS";
|
title = "Zigbee2MQTT";
|
||||||
url = "https://${p.hosts.dns02}";
|
description = "Zigbee Bridge";
|
||||||
icon = "hl-technitium";
|
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 = {
|
displayData = {
|
||||||
cols = 1;
|
cols = 1;
|
||||||
collapsed = false;
|
collapsed = false;
|
||||||
|
|
@ -139,34 +295,97 @@ in
|
||||||
items = [
|
items = [
|
||||||
{
|
{
|
||||||
title = "Grafana";
|
title = "Grafana";
|
||||||
|
description = "Dashboards";
|
||||||
url = "https://grafana.${p.domains.public}";
|
url = "https://grafana.${p.domains.public}";
|
||||||
icon = "hl-grafana";
|
icon = "hl-grafana";
|
||||||
}
|
}
|
||||||
{
|
{
|
||||||
title = "Prometheus";
|
title = "Prometheus";
|
||||||
|
description = "Metrics";
|
||||||
url = "https://prometheus.ts.${p.domains.public}";
|
url = "https://prometheus.ts.${p.domains.public}";
|
||||||
icon = "hl-prometheus";
|
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 = {
|
displayData = {
|
||||||
cols = 1;
|
cols = 1;
|
||||||
collapsed = false;
|
collapsed = false;
|
||||||
};
|
};
|
||||||
items = [
|
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";
|
title = "Bacco";
|
||||||
url = "https://bacco.internal:8006";
|
description = "Proxmox Node";
|
||||||
|
url = "https://bacco.${p.domains.public}:8006";
|
||||||
icon = "hl-proxmox";
|
icon = "hl-proxmox";
|
||||||
}
|
}
|
||||||
{
|
{
|
||||||
title = "Node";
|
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";
|
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";
|
||||||
|
}
|
||||||
|
];
|
||||||
|
}
|
||||||
];
|
];
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -35,10 +35,10 @@ in
|
||||||
};
|
};
|
||||||
|
|
||||||
dashy = {
|
dashy = {
|
||||||
enable = false;
|
enable = true;
|
||||||
settings = import ./dashy-settings.nix;
|
settings = import ./dashy-settings.nix;
|
||||||
proxy = {
|
proxy = {
|
||||||
enable = false;
|
enable = true;
|
||||||
domain = p.domains.public;
|
domain = p.domains.public;
|
||||||
host = p.hosts.caddy;
|
host = p.hosts.caddy;
|
||||||
};
|
};
|
||||||
|
|
|
||||||
|
|
@ -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 {
|
(lib.mkIf cfg.proxy.enable {
|
||||||
services.caddy = with cfg.proxy; {
|
services.caddy = with cfg.proxy; {
|
||||||
virtualHosts."home.${domain}".extraConfig = ''
|
virtualHosts."${subdomain}.${domain}".extraConfig = ''
|
||||||
root * ${config.services.dashy.finalDrv}
|
root * ${config.services.dashy.finalDrv}
|
||||||
file_server
|
file_server
|
||||||
import cloudflare_${domain}
|
import cloudflare_${domain}
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue