ops: glance dashboard v2 - split config, stack widgets, releases page
- Config per $include aufgeteilt (glance.yml -> pages/home/infrastructure/ops, containers-map zentral) - Neue Widgets: Komodo Stacks, Gitea GitOps, Paperless, Mealie, Scrutiny Disk Health, Wetter, To-do - Neue Seite Ops und Releases (releases-Widget fuer gepinnte Images, RSS, Commit-Log) - Homelab-Status in Tab-Gruppen Core/Apps/Ops, Speedtest-Widget mit ehrlichem Leerzustand - Theme-Presets (Catppuccin, Gruvbox, Light) + custom.css via Assets-Mount - Compose: 5 neue read-only Token-ENVs, Doku in SECRETS_MAP/MASTER_TODO nachgezogen Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
@@ -24,6 +24,7 @@ Host-Reports (`/mnt/user/backups/restore-reports/`) und in der Git-Historie.
|
|||||||
| Restore-Test Unraid OS Flash (Stick-Boot) | Operator | Artefakt-Validierung 2026-06-05 erledigt (`ops/maintenance/check-unraid-flash-backup.sh`). **Verbleibt:** physischer Ersatzstick-Boot-Test, wenn ein Wegwerf-Stick bereitliegt | `ops/restore-tests/unraid-flash-runbook.md` |
|
| Restore-Test Unraid OS Flash (Stick-Boot) | Operator | Artefakt-Validierung 2026-06-05 erledigt (`ops/maintenance/check-unraid-flash-backup.sh`). **Verbleibt:** physischer Ersatzstick-Boot-Test, wenn ein Wegwerf-Stick bereitliegt | `ops/restore-tests/unraid-flash-runbook.md` |
|
||||||
| Restore-Test Tailscale | Operator | State-Validierung + Reconnect nur auf Wegwerf-Host/VM, danach Geraet in Tailscale-Admin entfernen | `ops/restore-tests/tailscale-runbook.md` |
|
| Restore-Test Tailscale | Operator | State-Validierung + Reconnect nur auf Wegwerf-Host/VM, danach Geraet in Tailscale-Admin entfernen | `ops/restore-tests/tailscale-runbook.md` |
|
||||||
| Authelia OIDC fuer Apps | Operator/Claude | Live: Grafana + Mealie (verifiziert), Paperless deployed (Login-Test offen). Immich + Nextcloud bewusst geparkt bis Family-Onboarding (siehe `docs/DECISIONS.md` 2026-06-06) | `docs/AUTHELIA_OIDC_PLAN.md` |
|
| Authelia OIDC fuer Apps | Operator/Claude | Live: Grafana + Mealie (verifiziert), Paperless deployed (Login-Test offen). Immich + Nextcloud bewusst geparkt bis Family-Onboarding (siehe `docs/DECISIONS.md` 2026-06-06) | `docs/AUTHELIA_OIDC_PLAN.md` |
|
||||||
|
| Glance-v2-Widgets: Tokens setzen | Operator | In Komodo Stack-ENV fuer `ops-glance` setzen: `GLANCE_KOMODO_API_KEY`/`_SECRET` (Komodo read-only API-Key), `GLANCE_GITEA_TOKEN` (read-only, scope `read:repository`), `GLANCE_PAPERLESS_TOKEN`, `GLANCE_MEALIE_TOKEN`; bis dahin zeigen die neuen Widgets Fehler/leer. Speedtest-Widget: falls weiter 0.0, API-Response pruefen | `ops/glance/config/` |
|
||||||
| Audit-PDF aus `docs/` entfernen | Operator | `docs/KalliLab_CORE_Audit_2026-06-06.pdf` (untracked) extern ablegen (H:/ oder Documents-Share) und lokal loeschen; Binaerdateien gehoeren nicht ins GitOps-Repo | Doku-Regeln `docs/REPO_MAP.md` |
|
| Audit-PDF aus `docs/` entfernen | Operator | `docs/KalliLab_CORE_Audit_2026-06-06.pdf` (untracked) extern ablegen (H:/ oder Documents-Share) und lokal loeschen; Binaerdateien gehoeren nicht ins GitOps-Repo | Doku-Regeln `docs/REPO_MAP.md` |
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|||||||
+2
-2
@@ -40,7 +40,7 @@ Dieses Dokument listet sensible Daten, deren Ablageorte und die vorgesehene Einb
|
|||||||
| Komodo Mongo | Root Password | `/mnt/user/appdata/secrets/komodo_mongo_password.txt` -> `MONGO_INITDB_ROOT_PASSWORD_FILE` | aktiv |
|
| Komodo Mongo | Root Password | `/mnt/user/appdata/secrets/komodo_mongo_password.txt` -> `MONGO_INITDB_ROOT_PASSWORD_FILE` | aktiv |
|
||||||
| Komodo Core | App Secrets | Stack ENV `${KOMODO_SECRET_KEY}`, `${KOMODO_WEBHOOK_SECRET}`, `${KOMODO_JWT_SECRET}`, `${KOMODO_MONGO_PASSWORD}`, `${KOMODO_PERIPHERY_PASSKEY}` | aktiv |
|
| Komodo Core | App Secrets | Stack ENV `${KOMODO_SECRET_KEY}`, `${KOMODO_WEBHOOK_SECRET}`, `${KOMODO_JWT_SECRET}`, `${KOMODO_MONGO_PASSWORD}`, `${KOMODO_PERIPHERY_PASSKEY}` | aktiv |
|
||||||
| Gitea Push Mirror | GitHub fine-grained PAT fuer `michaelkaleschke-spec/homelab-infra` | Gitea Repository Mirror Settings, persistent in `/mnt/user/services/gitea/data`; kein Datei-Secret im Repo | aktiv |
|
| Gitea Push Mirror | GitHub fine-grained PAT fuer `michaelkaleschke-spec/homelab-infra` | Gitea Repository Mirror Settings, persistent in `/mnt/user/services/gitea/data`; kein Datei-Secret im Repo | aktiv |
|
||||||
| Glance | Community Widget API Tokens | Stack ENV `${GLANCE_IMMICH_API_KEY}`, `${GLANCE_ADGUARD_USERNAME}`, `${GLANCE_ADGUARD_PASSWORD}`, `${GLANCE_SPEEDTEST_API_KEY}` | aktiv |
|
| Glance | Community Widget API Tokens | Stack ENV `${GLANCE_IMMICH_API_KEY}`, `${GLANCE_ADGUARD_USERNAME}`, `${GLANCE_ADGUARD_PASSWORD}`, `${GLANCE_SPEEDTEST_API_KEY}`, `${GLANCE_KOMODO_API_KEY}`, `${GLANCE_KOMODO_API_SECRET}`, `${GLANCE_GITEA_TOKEN}`, `${GLANCE_PAPERLESS_TOKEN}`, `${GLANCE_MEALIE_TOKEN}` (alle read-only anlegen) | aktiv |
|
||||||
| speedtest-tracker | App Key / Admin-Zugang | Stack ENV `${APP_KEY}`, `${ADMIN_PASSWORD}` | aktiv |
|
| speedtest-tracker | App Key / Admin-Zugang | Stack ENV `${APP_KEY}`, `${ADMIN_PASSWORD}` | aktiv |
|
||||||
| Nextcloud | Admin User | `/mnt/user/appdata/secrets/nextcloud_admin_user.txt` -> `NEXTCLOUD_ADMIN_USER_FILE` | neu |
|
| Nextcloud | Admin User | `/mnt/user/appdata/secrets/nextcloud_admin_user.txt` -> `NEXTCLOUD_ADMIN_USER_FILE` | neu |
|
||||||
| Nextcloud | Admin Password | `/mnt/user/appdata/secrets/nextcloud_admin_password.txt` -> `NEXTCLOUD_ADMIN_PASSWORD_FILE` | neu |
|
| Nextcloud | Admin Password | `/mnt/user/appdata/secrets/nextcloud_admin_password.txt` -> `NEXTCLOUD_ADMIN_PASSWORD_FILE` | neu |
|
||||||
@@ -141,7 +141,7 @@ Einige Secrets liegen bewusst nur als Komodo Stack Environment Variables vor, we
|
|||||||
| `speedtest-tracker` | `APP_KEY`, `ADMIN_PASSWORD` | Komodo-Mongo-Dump -> Vaultwarden -> externe Notiz | `APP_KEY` ist verschluesselungsrelevant; bei echtem Verlust App-State frisch initialisieren |
|
| `speedtest-tracker` | `APP_KEY`, `ADMIN_PASSWORD` | Komodo-Mongo-Dump -> Vaultwarden -> externe Notiz | `APP_KEY` ist verschluesselungsrelevant; bei echtem Verlust App-State frisch initialisieren |
|
||||||
| `komodo-core` | `KOMODO_SECRET_KEY`, `KOMODO_WEBHOOK_SECRET`, `KOMODO_JWT_SECRET`, `KOMODO_MONGO_PASSWORD`, `KOMODO_PERIPHERY_PASSKEY` | Vaultwarden -> externe Notiz (Henne-Ei: Komodo-Mongo-Dump ist hier **nicht** Restore-Quelle, weil Komodo dafuer schon laufen muesste) | siehe `docs/SERVICES_RECOVERY.md` Komodo-Bootstrap; ohne diese Werte ist der Self-Stack nicht reproduzierbar |
|
| `komodo-core` | `KOMODO_SECRET_KEY`, `KOMODO_WEBHOOK_SECRET`, `KOMODO_JWT_SECRET`, `KOMODO_MONGO_PASSWORD`, `KOMODO_PERIPHERY_PASSKEY` | Vaultwarden -> externe Notiz (Henne-Ei: Komodo-Mongo-Dump ist hier **nicht** Restore-Quelle, weil Komodo dafuer schon laufen muesste) | siehe `docs/SERVICES_RECOVERY.md` Komodo-Bootstrap; ohne diese Werte ist der Self-Stack nicht reproduzierbar |
|
||||||
| `hermes-agent` | `HERMES_DASHBOARD_HOST` plus Provider-/API-/Home-Assistant-Tokens in Host-`.env` | Vaultwarden -> externe Notiz | Stack ist aktuell geparkt (Review 2026-07-25); ohne Werte bleibt der Stack deaktiviert, kein Schaden am Rest |
|
| `hermes-agent` | `HERMES_DASHBOARD_HOST` plus Provider-/API-/Home-Assistant-Tokens in Host-`.env` | Vaultwarden -> externe Notiz | Stack ist aktuell geparkt (Review 2026-07-25); ohne Werte bleibt der Stack deaktiviert, kein Schaden am Rest |
|
||||||
| `glance` | `GLANCE_IMMICH_API_KEY`, `GLANCE_ADGUARD_USERNAME`, `GLANCE_ADGUARD_PASSWORD`, `GLANCE_SPEEDTEST_API_KEY` | Provider-UIs (Immich, AdGuard, Speedtest-Tracker) neu erzeugen | rebuildbar; Widgets bleiben leer bis Tokens neu erzeugt sind, kein kritischer Datentopf |
|
| `glance` | `GLANCE_IMMICH_API_KEY`, `GLANCE_ADGUARD_USERNAME`, `GLANCE_ADGUARD_PASSWORD`, `GLANCE_SPEEDTEST_API_KEY`, `GLANCE_KOMODO_API_KEY`, `GLANCE_KOMODO_API_SECRET`, `GLANCE_GITEA_TOKEN`, `GLANCE_PAPERLESS_TOKEN`, `GLANCE_MEALIE_TOKEN` | Provider-UIs (Immich, AdGuard, Speedtest-Tracker, Komodo, Gitea, Paperless, Mealie) neu erzeugen | rebuildbar; alle read-only; Widgets bleiben leer bis Tokens neu erzeugt sind, kein kritischer Datentopf |
|
||||||
| `n8n` | `N8N_ENCRYPTION_KEY` | Host-Secret-Datei `/mnt/user/appdata/secrets/n8n_encryption_key.txt` -> Komodo-Mongo-Dump -> Vaultwarden -> externe Notiz | Bei Verlust aller Quellen: n8n startet, aber **alle gespeicherten Credentials sind unbrauchbar** (Re-Eingabe noetig: GMX IMAP, OpenAI, Gitea PAT). Workflows bleiben strukturell erhalten. |
|
| `n8n` | `N8N_ENCRYPTION_KEY` | Host-Secret-Datei `/mnt/user/appdata/secrets/n8n_encryption_key.txt` -> Komodo-Mongo-Dump -> Vaultwarden -> externe Notiz | Bei Verlust aller Quellen: n8n startet, aber **alle gespeicherten Credentials sind unbrauchbar** (Re-Eingabe noetig: GMX IMAP, OpenAI, Gitea PAT). Workflows bleiben strukturell erhalten. |
|
||||||
|
|
||||||
### Komodo-Sonderfall
|
### Komodo-Sonderfall
|
||||||
|
|||||||
@@ -0,0 +1,17 @@
|
|||||||
|
/* KalliLab Feinschliff - bewusst minimal, Theme bleibt in glance.yml */
|
||||||
|
|
||||||
|
::selection {
|
||||||
|
background: hsl(212, 100%, 50%, 0.35);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Karten leicht abheben beim Hover, ohne Layout-Shift */
|
||||||
|
.widget-content {
|
||||||
|
transition: opacity 0.15s ease;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Grosse Zahlen etwas ruhiger setzen */
|
||||||
|
.size-h1,
|
||||||
|
.size-h2,
|
||||||
|
.size-h3 {
|
||||||
|
letter-spacing: 0.01em;
|
||||||
|
}
|
||||||
@@ -0,0 +1,287 @@
|
|||||||
|
traefik:
|
||||||
|
name: Traefik
|
||||||
|
icon: https://cdn.jsdelivr.net/gh/homarr-labs/dashboard-icons/svg/traefik.svg
|
||||||
|
url: https://traefik.kaleschke.info
|
||||||
|
description: Reverse Proxy
|
||||||
|
category: core
|
||||||
|
hide: false
|
||||||
|
gitea:
|
||||||
|
name: Gitea
|
||||||
|
icon: https://cdn.jsdelivr.net/gh/homarr-labs/dashboard-icons/svg/gitea.svg
|
||||||
|
url: https://git.kaleschke.info
|
||||||
|
description: GitOps Origin
|
||||||
|
category: core
|
||||||
|
hide: false
|
||||||
|
authelia:
|
||||||
|
name: Authelia
|
||||||
|
icon: https://cdn.jsdelivr.net/gh/homarr-labs/dashboard-icons/svg/authelia.svg
|
||||||
|
url: https://auth.kaleschke.info
|
||||||
|
description: ForwardAuth
|
||||||
|
category: core
|
||||||
|
hide: false
|
||||||
|
vaultwarden:
|
||||||
|
name: Vaultwarden
|
||||||
|
icon: https://cdn.jsdelivr.net/gh/homarr-labs/dashboard-icons/svg/vaultwarden.svg
|
||||||
|
url: https://vault.kaleschke.info
|
||||||
|
description: Password Vault
|
||||||
|
category: core
|
||||||
|
hide: false
|
||||||
|
postgresql17:
|
||||||
|
name: PostgreSQL 18
|
||||||
|
icon: si:postgresql
|
||||||
|
description: Shared DB
|
||||||
|
category: core
|
||||||
|
hide: false
|
||||||
|
Redis:
|
||||||
|
name: Redis
|
||||||
|
icon: si:redis
|
||||||
|
description: Shared Cache
|
||||||
|
category: core
|
||||||
|
hide: false
|
||||||
|
adguard:
|
||||||
|
name: AdGuard
|
||||||
|
icon: https://cdn.jsdelivr.net/gh/homarr-labs/dashboard-icons/svg/adguard-home.svg
|
||||||
|
url: http://192.168.178.58:8082
|
||||||
|
description: DNS Filter
|
||||||
|
category: network
|
||||||
|
hide: false
|
||||||
|
unbound:
|
||||||
|
name: Unbound
|
||||||
|
icon: mdi:dns
|
||||||
|
description: Upstream Resolver
|
||||||
|
category: network
|
||||||
|
hide: false
|
||||||
|
ddns-updater:
|
||||||
|
name: DDNS Updater
|
||||||
|
icon: mdi:cloud-sync
|
||||||
|
description: Cloudflare DNS
|
||||||
|
category: network
|
||||||
|
hide: false
|
||||||
|
paperless-ngx:
|
||||||
|
name: Paperless-ngx
|
||||||
|
icon: https://cdn.jsdelivr.net/gh/homarr-labs/dashboard-icons/svg/paperless-ngx.svg
|
||||||
|
url: https://paperless.kaleschke.info
|
||||||
|
description: Dokumente
|
||||||
|
category: apps
|
||||||
|
hide: false
|
||||||
|
paperless-gpt:
|
||||||
|
name: Paperless-GPT
|
||||||
|
icon: mdi:robot
|
||||||
|
url: https://paperless-gpt.kaleschke.info
|
||||||
|
description: Dokumenten-KI
|
||||||
|
category: apps
|
||||||
|
hide: false
|
||||||
|
immich_server:
|
||||||
|
name: Immich
|
||||||
|
icon: https://cdn.jsdelivr.net/gh/homarr-labs/dashboard-icons/svg/immich.svg
|
||||||
|
url: https://immich.kaleschke.info
|
||||||
|
description: Fotos und Videos
|
||||||
|
category: apps
|
||||||
|
id: immich
|
||||||
|
hide: false
|
||||||
|
immich_postgres:
|
||||||
|
name: DB
|
||||||
|
parent: immich
|
||||||
|
category: apps
|
||||||
|
hide: false
|
||||||
|
immich_redis:
|
||||||
|
name: Redis
|
||||||
|
parent: immich
|
||||||
|
category: apps
|
||||||
|
hide: false
|
||||||
|
immich_machine_learning:
|
||||||
|
name: ML
|
||||||
|
parent: immich
|
||||||
|
category: apps
|
||||||
|
hide: false
|
||||||
|
mealie:
|
||||||
|
name: Mealie
|
||||||
|
icon: https://cdn.jsdelivr.net/gh/homarr-labs/dashboard-icons/svg/mealie.svg
|
||||||
|
url: https://mealie.kaleschke.info
|
||||||
|
description: Rezepte
|
||||||
|
category: apps
|
||||||
|
id: mealie
|
||||||
|
hide: false
|
||||||
|
mealie-postgres:
|
||||||
|
name: DB
|
||||||
|
parent: mealie
|
||||||
|
category: apps
|
||||||
|
hide: false
|
||||||
|
nextcloud:
|
||||||
|
name: Nextcloud
|
||||||
|
icon: https://cdn.jsdelivr.net/gh/homarr-labs/dashboard-icons/svg/nextcloud.svg
|
||||||
|
url: https://cloud.kaleschke.info
|
||||||
|
description: Dateien und Sync
|
||||||
|
category: apps
|
||||||
|
id: nextcloud
|
||||||
|
hide: false
|
||||||
|
nextcloud-postgres:
|
||||||
|
name: DB
|
||||||
|
parent: nextcloud
|
||||||
|
category: apps
|
||||||
|
hide: false
|
||||||
|
nextcloud-redis:
|
||||||
|
name: Redis
|
||||||
|
parent: nextcloud
|
||||||
|
category: apps
|
||||||
|
hide: false
|
||||||
|
mail-archiver:
|
||||||
|
name: Mail Archiver
|
||||||
|
icon: https://cdn.jsdelivr.net/gh/homarr-labs/dashboard-icons/svg/mailcow.svg
|
||||||
|
url: https://mail.kaleschke.info
|
||||||
|
description: Mail-Archiv
|
||||||
|
category: apps
|
||||||
|
hide: false
|
||||||
|
ntfy:
|
||||||
|
name: ntfy
|
||||||
|
icon: https://cdn.jsdelivr.net/gh/homarr-labs/dashboard-icons/svg/ntfy.svg
|
||||||
|
url: https://ntfy.kaleschke.info
|
||||||
|
description: Push Alerts
|
||||||
|
category: apps
|
||||||
|
hide: false
|
||||||
|
bentopdf:
|
||||||
|
name: BentoPDF
|
||||||
|
icon: mdi:file-pdf-box
|
||||||
|
url: https://pdf.kaleschke.info
|
||||||
|
description: PDF Tools
|
||||||
|
category: apps
|
||||||
|
hide: false
|
||||||
|
glance:
|
||||||
|
name: Glance
|
||||||
|
icon: https://cdn.jsdelivr.net/gh/homarr-labs/dashboard-icons/svg/glance.svg
|
||||||
|
url: https://glance.kaleschke.info
|
||||||
|
description: Homelab Uebersicht
|
||||||
|
category: ops
|
||||||
|
hide: false
|
||||||
|
glance-docker-socket-proxy:
|
||||||
|
name: Glance Socket Proxy
|
||||||
|
icon: si:docker
|
||||||
|
description: Read-only Docker API
|
||||||
|
category: ops
|
||||||
|
hide: false
|
||||||
|
monitoring-grafana:
|
||||||
|
name: Monitoring Grafana
|
||||||
|
icon: https://cdn.jsdelivr.net/gh/homarr-labs/dashboard-icons/svg/grafana.svg
|
||||||
|
url: https://monitoring.kaleschke.info
|
||||||
|
description: Observability UI
|
||||||
|
category: ops
|
||||||
|
id: monitoring
|
||||||
|
hide: false
|
||||||
|
monitoring-prometheus:
|
||||||
|
name: Prometheus
|
||||||
|
parent: monitoring
|
||||||
|
category: ops
|
||||||
|
hide: false
|
||||||
|
monitoring-loki:
|
||||||
|
name: Loki
|
||||||
|
parent: monitoring
|
||||||
|
category: ops
|
||||||
|
hide: false
|
||||||
|
monitoring-promtail:
|
||||||
|
name: Promtail
|
||||||
|
parent: monitoring
|
||||||
|
category: ops
|
||||||
|
hide: false
|
||||||
|
monitoring-alertmanager:
|
||||||
|
name: Alertmanager
|
||||||
|
parent: monitoring
|
||||||
|
category: ops
|
||||||
|
hide: false
|
||||||
|
monitoring-alertmanager-ntfy-bridge:
|
||||||
|
name: ntfy Bridge
|
||||||
|
parent: monitoring
|
||||||
|
category: ops
|
||||||
|
hide: false
|
||||||
|
monitoring-blackbox-exporter:
|
||||||
|
name: Blackbox
|
||||||
|
parent: monitoring
|
||||||
|
category: ops
|
||||||
|
hide: false
|
||||||
|
monitoring-node-exporter:
|
||||||
|
name: Node Exporter
|
||||||
|
parent: monitoring
|
||||||
|
category: ops
|
||||||
|
hide: false
|
||||||
|
monitoring-cadvisor:
|
||||||
|
name: cAdvisor
|
||||||
|
parent: monitoring
|
||||||
|
category: ops
|
||||||
|
hide: false
|
||||||
|
monitoring-influxdb3-core:
|
||||||
|
name: InfluxDB 3
|
||||||
|
parent: monitoring
|
||||||
|
category: ops
|
||||||
|
hide: false
|
||||||
|
glances:
|
||||||
|
name: Glances
|
||||||
|
icon: https://cdn.jsdelivr.net/gh/homarr-labs/dashboard-icons/svg/glances.svg
|
||||||
|
url: https://glances.kaleschke.info
|
||||||
|
description: Host-Monitoring
|
||||||
|
category: ops
|
||||||
|
hide: false
|
||||||
|
scrutiny:
|
||||||
|
name: Scrutiny
|
||||||
|
icon: https://cdn.jsdelivr.net/gh/homarr-labs/dashboard-icons/svg/scrutiny.svg
|
||||||
|
url: https://scrutiny.kaleschke.info
|
||||||
|
description: SMART
|
||||||
|
category: ops
|
||||||
|
hide: false
|
||||||
|
speedtest-tracker:
|
||||||
|
name: Speedtest
|
||||||
|
icon: https://cdn.jsdelivr.net/gh/homarr-labs/dashboard-icons/png/speedtest-tracker.png
|
||||||
|
url: https://speedtest.kaleschke.info
|
||||||
|
description: WAN-Messung
|
||||||
|
category: ops
|
||||||
|
hide: false
|
||||||
|
filebrowser:
|
||||||
|
name: Filebrowser
|
||||||
|
icon: https://cdn.jsdelivr.net/gh/homarr-labs/dashboard-icons/svg/filebrowser.svg
|
||||||
|
url: https://files.kaleschke.info
|
||||||
|
description: Dateizugriff
|
||||||
|
category: ops
|
||||||
|
hide: false
|
||||||
|
code-server:
|
||||||
|
name: code-server
|
||||||
|
icon: https://cdn.jsdelivr.net/gh/homarr-labs/dashboard-icons/svg/vscode.svg
|
||||||
|
url: https://code.kaleschke.info
|
||||||
|
description: Web IDE
|
||||||
|
category: ops
|
||||||
|
hide: false
|
||||||
|
borg-ui:
|
||||||
|
name: Borg UI
|
||||||
|
icon: mdi:archive-sync
|
||||||
|
url: https://borg.kaleschke.info
|
||||||
|
description: Backup und Restore
|
||||||
|
category: ops
|
||||||
|
hide: false
|
||||||
|
hermes-dashboard:
|
||||||
|
name: Hermes
|
||||||
|
icon: mdi:shield-sparkles
|
||||||
|
url: https://hermes.kaleschke.info
|
||||||
|
description: Ops Agent UI
|
||||||
|
category: ops
|
||||||
|
id: hermes
|
||||||
|
hide: false
|
||||||
|
hermes-gateway:
|
||||||
|
name: Gateway
|
||||||
|
parent: hermes
|
||||||
|
category: ops
|
||||||
|
hide: false
|
||||||
|
komodo-core:
|
||||||
|
name: Komodo
|
||||||
|
icon: sh:komodo
|
||||||
|
url: https://komodo.kaleschke.info
|
||||||
|
description: Stack Manager
|
||||||
|
category: ops
|
||||||
|
id: komodo
|
||||||
|
hide: false
|
||||||
|
komodo-mongo:
|
||||||
|
name: Mongo
|
||||||
|
parent: komodo
|
||||||
|
category: ops
|
||||||
|
hide: false
|
||||||
|
komodo-periphery:
|
||||||
|
name: Periphery
|
||||||
|
parent: komodo
|
||||||
|
category: ops
|
||||||
|
hide: false
|
||||||
+21
-855
@@ -1,5 +1,6 @@
|
|||||||
server:
|
server:
|
||||||
proxied: true
|
proxied: true
|
||||||
|
assets-path: /app/assets
|
||||||
|
|
||||||
branding:
|
branding:
|
||||||
app-name: KalliLab Dashboard
|
app-name: KalliLab Dashboard
|
||||||
@@ -14,860 +15,25 @@ theme:
|
|||||||
contrast-multiplier: 1.25
|
contrast-multiplier: 1.25
|
||||||
text-saturation-multiplier: 0.9
|
text-saturation-multiplier: 0.9
|
||||||
disable-picker: false
|
disable-picker: false
|
||||||
|
custom-css-file: /assets/custom.css
|
||||||
|
presets:
|
||||||
|
catppuccin-mocha:
|
||||||
|
background-color: 240 21 15
|
||||||
|
primary-color: 217 92 83
|
||||||
|
positive-color: 115 54 76
|
||||||
|
negative-color: 347 70 65
|
||||||
|
contrast-multiplier: 1.2
|
||||||
|
gruvbox-dark:
|
||||||
|
background-color: 0 0 16
|
||||||
|
primary-color: 43 59 81
|
||||||
|
positive-color: 61 66 44
|
||||||
|
negative-color: 6 96 59
|
||||||
|
kallilab-light:
|
||||||
|
light: true
|
||||||
|
background-color: 220 23 95
|
||||||
|
primary-color: 212 100 35
|
||||||
|
positive-color: 140 70 30
|
||||||
|
negative-color: 0 70 45
|
||||||
|
|
||||||
pages:
|
pages:
|
||||||
- name: Home
|
$include: pages.yml
|
||||||
slug: home
|
|
||||||
width: wide
|
|
||||||
head-widgets:
|
|
||||||
- type: search
|
|
||||||
search-engine: duckduckgo
|
|
||||||
new-tab: true
|
|
||||||
autofocus: true
|
|
||||||
placeholder: Suche im Web oder springe per Bang...
|
|
||||||
bangs:
|
|
||||||
- title: Gitea
|
|
||||||
shortcut: "!git"
|
|
||||||
url: https://git.kaleschke.info/explore/repos?q={QUERY}
|
|
||||||
- title: Paperless
|
|
||||||
shortcut: "!doc"
|
|
||||||
url: https://paperless.kaleschke.info/documents?query={QUERY}
|
|
||||||
- title: Nextcloud
|
|
||||||
shortcut: "!cloud"
|
|
||||||
url: https://cloud.kaleschke.info/apps/files/?dir=/{QUERY}
|
|
||||||
- title: Komodo
|
|
||||||
shortcut: "!komodo"
|
|
||||||
url: https://komodo.kaleschke.info
|
|
||||||
columns:
|
|
||||||
- size: small
|
|
||||||
widgets:
|
|
||||||
- type: group
|
|
||||||
widgets:
|
|
||||||
- type: custom-api
|
|
||||||
title: Day
|
|
||||||
body-type: string
|
|
||||||
skip-json-validation: true
|
|
||||||
cache: 1s
|
|
||||||
template: |
|
|
||||||
{{ $localTime := now }}
|
|
||||||
{{ $elapsedSeconds := add (mul $localTime.Hour 3600) (mul $localTime.Minute 60) | add $localTime.Second }}
|
|
||||||
{{ $dayProgress := div (mul $elapsedSeconds 100.0) 86400.0 }}
|
|
||||||
{{ $gradient := "#70a1ff" }}
|
|
||||||
{{ if gt $dayProgress 25.0 }}{{ $gradient = "#ff6b6b, #70a1ff" }}{{ end }}
|
|
||||||
{{ if gt $dayProgress 50.0 }}{{ $gradient = "#ff6b6b, #f8e71c, #7ed6df" }}{{ end }}
|
|
||||||
{{ if gt $dayProgress 75.0 }}{{ $gradient = "#ff6b6b, #f8e71c, #7ed6df, #70a1ff" }}{{ end }}
|
|
||||||
<div style="text-align: center;">
|
|
||||||
<div style="width: 100%; height: 12px; background: #23262f; border: 1px solid color-mix(in srgb, var(--color-text-subdue) 55%, transparent); border-radius: 10px; overflow: hidden;">
|
|
||||||
<div style="height: 100%; width: {{ $dayProgress }}%; background: linear-gradient(90deg, {{ $gradient }});"></div>
|
|
||||||
</div>
|
|
||||||
<div class="size-h1" style="margin-top: 6px;">{{ printf "%.2f" $dayProgress }}% des Tages sind vorbei</div>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
- type: custom-api
|
|
||||||
title: Month
|
|
||||||
body-type: string
|
|
||||||
skip-json-validation: true
|
|
||||||
cache: 1s
|
|
||||||
template: |
|
|
||||||
{{ $localTime := now }}
|
|
||||||
{{ $month := $localTime.Month }}
|
|
||||||
{{ $daysInMonth := 31 }}
|
|
||||||
{{ if eq $month 2 }}{{ $daysInMonth = 28 }}{{ end }}
|
|
||||||
{{ if or (eq $month 4) (eq $month 6) (eq $month 9) (eq $month 11) }}{{ $daysInMonth = 30 }}{{ end }}
|
|
||||||
{{ $secondsToday := add (mul $localTime.Hour 3600) (mul $localTime.Minute 60) | add $localTime.Second }}
|
|
||||||
{{ $daysElapsed := add (sub $localTime.Day 1) (div $secondsToday 86400.0) }}
|
|
||||||
{{ $monthProgress := mul (div $daysElapsed $daysInMonth) 100.0 }}
|
|
||||||
{{ $gradient := "#70a1ff" }}
|
|
||||||
{{ if gt $monthProgress 25.0 }}{{ $gradient = "#ff6b6b, #70a1ff" }}{{ end }}
|
|
||||||
{{ if gt $monthProgress 50.0 }}{{ $gradient = "#ff6b6b, #f8e71c, #7ed6df" }}{{ end }}
|
|
||||||
{{ if gt $monthProgress 75.0 }}{{ $gradient = "#ff6b6b, #f8e71c, #7ed6df, #70a1ff" }}{{ end }}
|
|
||||||
<div style="text-align: center;">
|
|
||||||
<div style="width: 100%; height: 12px; background: #23262f; border: 1px solid color-mix(in srgb, var(--color-text-subdue) 55%, transparent); border-radius: 10px; overflow: hidden;">
|
|
||||||
<div style="height: 100%; width: {{ $monthProgress }}%; background: linear-gradient(90deg, {{ $gradient }});"></div>
|
|
||||||
</div>
|
|
||||||
<div class="size-h1" style="margin-top: 6px;">{{ printf "%.2f" $monthProgress }}% des Monats sind vorbei</div>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
- type: custom-api
|
|
||||||
title: Year
|
|
||||||
body-type: string
|
|
||||||
skip-json-validation: true
|
|
||||||
cache: 1s
|
|
||||||
template: |
|
|
||||||
{{ $localTime := now }}
|
|
||||||
{{ $secondsToday := add (mul $localTime.Hour 3600) (mul $localTime.Minute 60) | add $localTime.Second }}
|
|
||||||
{{ $secondsElapsed := add (mul (sub $localTime.YearDay 1) 86400) $secondsToday }}
|
|
||||||
{{ $yearProgress := div (mul $secondsElapsed 100.0) (mul 365 86400) }}
|
|
||||||
{{ $gradient := "#70a1ff" }}
|
|
||||||
{{ if gt $yearProgress 25.0 }}{{ $gradient = "#ff6b6b, #70a1ff" }}{{ end }}
|
|
||||||
{{ if gt $yearProgress 50.0 }}{{ $gradient = "#ff6b6b, #f8e71c, #7ed6df" }}{{ end }}
|
|
||||||
{{ if gt $yearProgress 75.0 }}{{ $gradient = "#ff6b6b, #f8e71c, #7ed6df, #70a1ff" }}{{ end }}
|
|
||||||
<div style="text-align: center;">
|
|
||||||
<div style="width: 100%; height: 12px; background: #23262f; border: 1px solid color-mix(in srgb, var(--color-text-subdue) 55%, transparent); border-radius: 10px; overflow: hidden;">
|
|
||||||
<div style="height: 100%; width: {{ $yearProgress }}%; background: linear-gradient(90deg, {{ $gradient }});"></div>
|
|
||||||
</div>
|
|
||||||
<div class="size-h1" style="margin-top: 6px;">{{ printf "%.2f" $yearProgress }}% des Jahres sind vorbei</div>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
- type: clock
|
|
||||||
hour-format: 24h
|
|
||||||
show-progress: true
|
|
||||||
timezones:
|
|
||||||
- timezone: Europe/Berlin
|
|
||||||
label: Berlin
|
|
||||||
- timezone: UTC
|
|
||||||
label: UTC
|
|
||||||
|
|
||||||
- type: calendar
|
|
||||||
first-day-of-week: monday
|
|
||||||
|
|
||||||
- type: bookmarks
|
|
||||||
title: Direkte Einstiege
|
|
||||||
groups:
|
|
||||||
- title: Core
|
|
||||||
color: 212 100 50
|
|
||||||
links:
|
|
||||||
- title: Komodo
|
|
||||||
url: https://komodo.kaleschke.info
|
|
||||||
icon: sh:komodo
|
|
||||||
- title: Gitea
|
|
||||||
url: https://git.kaleschke.info
|
|
||||||
icon: si:gitea
|
|
||||||
- title: Monitoring
|
|
||||||
url: https://monitoring.kaleschke.info
|
|
||||||
icon: si:grafana
|
|
||||||
- title: Ops
|
|
||||||
color: 45 70 55
|
|
||||||
links:
|
|
||||||
- title: Borg
|
|
||||||
url: https://borg.kaleschke.info
|
|
||||||
icon: mdi:archive
|
|
||||||
- title: Glances
|
|
||||||
url: https://glances.kaleschke.info
|
|
||||||
icon: sh:glances
|
|
||||||
- title: Scrutiny
|
|
||||||
url: https://scrutiny.kaleschke.info
|
|
||||||
icon: sh:scrutiny
|
|
||||||
|
|
||||||
- size: full
|
|
||||||
widgets:
|
|
||||||
- type: server-stats
|
|
||||||
title: Server Stats
|
|
||||||
servers:
|
|
||||||
- type: local
|
|
||||||
name: Kallilabcore
|
|
||||||
hide-mountpoints-by-default: false
|
|
||||||
|
|
||||||
- type: group
|
|
||||||
widgets:
|
|
||||||
- type: custom-api
|
|
||||||
title: Immich
|
|
||||||
title-url: https://immich.kaleschke.info
|
|
||||||
cache: 10m
|
|
||||||
url: http://immich_server:2283/api/server/statistics
|
|
||||||
headers:
|
|
||||||
x-api-key: ${GLANCE_IMMICH_API_KEY}
|
|
||||||
subrequests:
|
|
||||||
storage:
|
|
||||||
url: http://immich_server:2283/api/server/storage
|
|
||||||
headers:
|
|
||||||
x-api-key: ${GLANCE_IMMICH_API_KEY}
|
|
||||||
template: |
|
|
||||||
{{ $photos := .JSON.Int "photos" }}
|
|
||||||
{{ $videos := .JSON.Int "videos" }}
|
|
||||||
{{ $usageGiB := div (toFloat (.JSON.Int "usage")) 1073741824.0 }}
|
|
||||||
{{ $storage := .Subrequest "storage" }}
|
|
||||||
{{ $storageOK := and (ge $storage.Response.StatusCode 200) (le $storage.Response.StatusCode 299) }}
|
|
||||||
{{ $percentage := 0.0 }}
|
|
||||||
{{ if $storageOK }}{{ $percentage = $storage.JSON.Float "diskUsagePercentage" }}{{ end }}
|
|
||||||
<div class="flex justify-between text-center">
|
|
||||||
<div>
|
|
||||||
<div class="color-highlight size-h3">{{ $photos | formatNumber }}</div>
|
|
||||||
<div class="size-h6 uppercase">Fotos</div>
|
|
||||||
</div>
|
|
||||||
<div>
|
|
||||||
<div class="color-highlight size-h3">{{ $videos | formatNumber }}</div>
|
|
||||||
<div class="size-h6 uppercase">Videos</div>
|
|
||||||
</div>
|
|
||||||
<div>
|
|
||||||
<div class="color-highlight size-h3">{{ printf "%.0f" $usageGiB }} GiB</div>
|
|
||||||
<div class="size-h6 uppercase">Medien</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<div style="height: 8px; margin-top: 14px; border-radius: 999px; overflow: hidden; background: color-mix(in srgb, var(--color-text-subdue) 22%, transparent);">
|
|
||||||
<div style="height: 100%; width: {{ if $storageOK }}{{ printf "%.1f" $percentage }}%{{ else }}0%{{ end }}; border-radius: 999px; background: var(--color-primary);"></div>
|
|
||||||
</div>
|
|
||||||
<div class="size-h6 color-subdue" style="margin-top: 8px;">{{ if $storageOK }}{{ printf "%.1f" $percentage }}% Speicher belegt{{ else }}Speicher API nicht verfuegbar{{ end }}</div>
|
|
||||||
|
|
||||||
- type: monitor
|
|
||||||
title: Homelab Status
|
|
||||||
cache: 1m
|
|
||||||
sites:
|
|
||||||
- title: AdGuard Home
|
|
||||||
url: http://192.168.178.58:8082
|
|
||||||
check-url: http://adguard
|
|
||||||
icon: https://cdn.jsdelivr.net/gh/homarr-labs/dashboard-icons/svg/adguard-home.svg
|
|
||||||
timeout: 5s
|
|
||||||
alt-status-codes: [200, 302, 401, 403]
|
|
||||||
- title: Authelia
|
|
||||||
url: https://auth.kaleschke.info
|
|
||||||
check-url: http://authelia:9091/api/health
|
|
||||||
icon: https://cdn.jsdelivr.net/gh/homarr-labs/dashboard-icons/svg/authelia.svg
|
|
||||||
timeout: 5s
|
|
||||||
alt-status-codes: [200, 302, 401, 403]
|
|
||||||
- title: Gitea
|
|
||||||
url: https://git.kaleschke.info
|
|
||||||
check-url: http://gitea:3000/api/healthz
|
|
||||||
icon: https://cdn.jsdelivr.net/gh/homarr-labs/dashboard-icons/svg/gitea.svg
|
|
||||||
timeout: 5s
|
|
||||||
alt-status-codes: [200, 302, 401, 403]
|
|
||||||
- title: Traefik
|
|
||||||
url: https://traefik.kaleschke.info
|
|
||||||
check-url: http://traefik:8082/metrics
|
|
||||||
icon: https://cdn.jsdelivr.net/gh/homarr-labs/dashboard-icons/svg/traefik.svg
|
|
||||||
timeout: 5s
|
|
||||||
alt-status-codes: [200, 302, 401, 403]
|
|
||||||
- title: Vaultwarden
|
|
||||||
url: https://vault.kaleschke.info
|
|
||||||
check-url: http://vaultwarden/alive
|
|
||||||
icon: https://cdn.jsdelivr.net/gh/homarr-labs/dashboard-icons/svg/vaultwarden.svg
|
|
||||||
timeout: 5s
|
|
||||||
alt-status-codes: [200, 302, 401, 403]
|
|
||||||
- title: Komodo
|
|
||||||
url: https://komodo.kaleschke.info
|
|
||||||
check-url: http://komodo-core:9120
|
|
||||||
icon: https://cdn.jsdelivr.net/gh/homarr-labs/dashboard-icons/svg/komodo.svg
|
|
||||||
timeout: 5s
|
|
||||||
alt-status-codes: [200, 302, 401, 403]
|
|
||||||
- title: Paperless-ngx
|
|
||||||
url: https://paperless.kaleschke.info
|
|
||||||
check-url: http://paperless-ngx:8000
|
|
||||||
icon: https://cdn.jsdelivr.net/gh/homarr-labs/dashboard-icons/svg/paperless-ngx.svg
|
|
||||||
timeout: 5s
|
|
||||||
alt-status-codes: [200, 302, 401, 403]
|
|
||||||
- title: Paperless-GPT
|
|
||||||
url: https://paperless-gpt.kaleschke.info
|
|
||||||
check-url: http://paperless-gpt:8080
|
|
||||||
icon: mdi:robot
|
|
||||||
timeout: 5s
|
|
||||||
alt-status-codes: [200, 302, 401, 403]
|
|
||||||
- title: Immich
|
|
||||||
url: https://immich.kaleschke.info
|
|
||||||
check-url: http://immich_server:2283/api/server/ping
|
|
||||||
icon: https://cdn.jsdelivr.net/gh/homarr-labs/dashboard-icons/svg/immich.svg
|
|
||||||
timeout: 5s
|
|
||||||
alt-status-codes: [200, 302, 401, 403]
|
|
||||||
- title: Mealie
|
|
||||||
url: https://mealie.kaleschke.info
|
|
||||||
check-url: http://mealie:9000
|
|
||||||
icon: https://cdn.jsdelivr.net/gh/homarr-labs/dashboard-icons/svg/mealie.svg
|
|
||||||
timeout: 5s
|
|
||||||
alt-status-codes: [200, 302, 401, 403]
|
|
||||||
- title: Nextcloud
|
|
||||||
url: https://cloud.kaleschke.info
|
|
||||||
check-url: http://nextcloud/status.php
|
|
||||||
icon: https://cdn.jsdelivr.net/gh/homarr-labs/dashboard-icons/svg/nextcloud.svg
|
|
||||||
timeout: 5s
|
|
||||||
alt-status-codes: [200, 302, 401, 403]
|
|
||||||
- title: ntfy
|
|
||||||
url: https://ntfy.kaleschke.info
|
|
||||||
check-url: http://ntfy/v1/health
|
|
||||||
icon: https://cdn.jsdelivr.net/gh/homarr-labs/dashboard-icons/svg/ntfy.svg
|
|
||||||
timeout: 5s
|
|
||||||
alt-status-codes: [200, 302, 401, 403]
|
|
||||||
- title: Mail Archiver
|
|
||||||
url: https://mail.kaleschke.info
|
|
||||||
check-url: http://mail-archiver:5000
|
|
||||||
icon: https://cdn.jsdelivr.net/gh/homarr-labs/dashboard-icons/svg/mailcow.svg
|
|
||||||
timeout: 5s
|
|
||||||
alt-status-codes: [200, 302, 401, 403]
|
|
||||||
- title: BentoPDF
|
|
||||||
url: https://pdf.kaleschke.info
|
|
||||||
check-url: http://bentopdf:8080
|
|
||||||
icon: mdi:file-pdf-box
|
|
||||||
timeout: 5s
|
|
||||||
alt-status-codes: [200, 302, 401, 403]
|
|
||||||
- title: Glance
|
|
||||||
url: https://glance.kaleschke.info
|
|
||||||
check-url: http://glance:8080
|
|
||||||
icon: https://cdn.jsdelivr.net/gh/homarr-labs/dashboard-icons/svg/glance.svg
|
|
||||||
timeout: 5s
|
|
||||||
alt-status-codes: [200, 302, 401, 403]
|
|
||||||
- title: Monitoring Grafana
|
|
||||||
url: https://monitoring.kaleschke.info
|
|
||||||
check-url: http://monitoring-grafana:3000/api/health
|
|
||||||
icon: https://cdn.jsdelivr.net/gh/homarr-labs/dashboard-icons/svg/grafana.svg
|
|
||||||
timeout: 5s
|
|
||||||
alt-status-codes: [200, 302, 401, 403]
|
|
||||||
- title: Glances
|
|
||||||
url: https://glances.kaleschke.info
|
|
||||||
check-url: http://glances:61208
|
|
||||||
icon: https://cdn.jsdelivr.net/gh/homarr-labs/dashboard-icons/svg/glances.svg
|
|
||||||
timeout: 5s
|
|
||||||
alt-status-codes: [200, 302, 401, 403]
|
|
||||||
- title: Scrutiny
|
|
||||||
url: https://scrutiny.kaleschke.info
|
|
||||||
check-url: http://scrutiny:8080
|
|
||||||
icon: https://cdn.jsdelivr.net/gh/homarr-labs/dashboard-icons/svg/scrutiny.svg
|
|
||||||
timeout: 5s
|
|
||||||
alt-status-codes: [200, 302, 401, 403]
|
|
||||||
- title: Speedtest Tracker
|
|
||||||
url: https://speedtest.kaleschke.info
|
|
||||||
check-url: http://speedtest-tracker
|
|
||||||
icon: https://cdn.jsdelivr.net/gh/homarr-labs/dashboard-icons/png/speedtest-tracker.png
|
|
||||||
timeout: 5s
|
|
||||||
alt-status-codes: [200, 302, 401, 403]
|
|
||||||
- title: Filebrowser
|
|
||||||
url: https://files.kaleschke.info
|
|
||||||
check-url: http://filebrowser
|
|
||||||
icon: https://cdn.jsdelivr.net/gh/homarr-labs/dashboard-icons/svg/filebrowser.svg
|
|
||||||
timeout: 5s
|
|
||||||
alt-status-codes: [200, 302, 401, 403]
|
|
||||||
- title: code-server
|
|
||||||
url: https://code.kaleschke.info
|
|
||||||
check-url: http://code-server:8443
|
|
||||||
icon: https://cdn.jsdelivr.net/gh/homarr-labs/dashboard-icons/svg/vscode.svg
|
|
||||||
timeout: 5s
|
|
||||||
alt-status-codes: [200, 302, 401, 403]
|
|
||||||
- title: Borg UI
|
|
||||||
url: https://borg.kaleschke.info
|
|
||||||
check-url: http://borg-ui:8081
|
|
||||||
icon: mdi:archive-sync
|
|
||||||
timeout: 5s
|
|
||||||
alt-status-codes: [200, 302, 401, 403]
|
|
||||||
|
|
||||||
- size: small
|
|
||||||
widgets:
|
|
||||||
- type: custom-api
|
|
||||||
title: Internet
|
|
||||||
title-url: https://speedtest.kaleschke.info
|
|
||||||
cache: 1h
|
|
||||||
url: http://speedtest-tracker/api/v1/results/latest
|
|
||||||
headers:
|
|
||||||
Authorization: Bearer ${GLANCE_SPEEDTEST_API_KEY}
|
|
||||||
Accept: application/json
|
|
||||||
template: |
|
|
||||||
{{ $ip := .JSON.String "external_ip" }}
|
|
||||||
{{ if eq $ip "" }}{{ $ip = .JSON.String "data.interface.externalIp" }}{{ end }}
|
|
||||||
{{ $isp := .JSON.String "isp" }}
|
|
||||||
{{ if eq $isp "" }}{{ $isp = .JSON.String "data.isp" }}{{ end }}
|
|
||||||
{{ $server := .JSON.String "server_name" }}
|
|
||||||
{{ if eq $server "" }}{{ $server = .JSON.String "data.server_name" }}{{ end }}
|
|
||||||
<div style="display: flex; flex-direction: column; align-items: center; gap: 6px; text-align: center;">
|
|
||||||
<div class="color-primary size-h2" style="font-weight: 700;">{{ if ne $ip "" }}{{ $ip }}{{ else }}WAN online{{ end }}</div>
|
|
||||||
<div class="size-h5 color-highlight">Speedtest Tracker</div>
|
|
||||||
<div class="size-h6 color-subdue" style="font-style: italic;">{{ if ne $isp "" }}{{ $isp }}{{ else }}{{ $server }}{{ end }}</div>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
- type: custom-api
|
|
||||||
title: Internet Speed
|
|
||||||
title-url: https://speedtest.kaleschke.info
|
|
||||||
cache: 1h
|
|
||||||
url: http://speedtest-tracker/api/v1/results/latest
|
|
||||||
headers:
|
|
||||||
Authorization: Bearer ${GLANCE_SPEEDTEST_API_KEY}
|
|
||||||
Accept: application/json
|
|
||||||
subrequests:
|
|
||||||
stats:
|
|
||||||
url: http://speedtest-tracker/api/v1/stats
|
|
||||||
headers:
|
|
||||||
Authorization: Bearer ${GLANCE_SPEEDTEST_API_KEY}
|
|
||||||
Accept: application/json
|
|
||||||
template: |
|
|
||||||
{{ $stats := .Subrequest "stats" }}
|
|
||||||
{{ $download := .JSON.Float "download" }}
|
|
||||||
{{ if eq $download 0.0 }}{{ $download = .JSON.Float "data.download" }}{{ end }}
|
|
||||||
{{ if eq $download 0.0 }}{{ $download = div (.JSON.Float "download_bits") 1000000.0 }}{{ end }}
|
|
||||||
{{ if eq $download 0.0 }}{{ $download = div (.JSON.Float "data.download_bits") 1000000.0 }}{{ end }}
|
|
||||||
{{ $upload := .JSON.Float "upload" }}
|
|
||||||
{{ if eq $upload 0.0 }}{{ $upload = .JSON.Float "data.upload" }}{{ end }}
|
|
||||||
{{ if eq $upload 0.0 }}{{ $upload = div (.JSON.Float "upload_bits") 1000000.0 }}{{ end }}
|
|
||||||
{{ if eq $upload 0.0 }}{{ $upload = div (.JSON.Float "data.upload_bits") 1000000.0 }}{{ end }}
|
|
||||||
{{ $ping := .JSON.Float "ping" }}
|
|
||||||
{{ if eq $ping 0.0 }}{{ $ping = .JSON.Float "data.ping" }}{{ end }}
|
|
||||||
{{ $downloadAvg := $stats.JSON.Float "avg_download" }}
|
|
||||||
{{ if eq $downloadAvg 0.0 }}{{ $downloadAvg = $stats.JSON.Float "data.download.avg" }}{{ end }}
|
|
||||||
{{ if eq $downloadAvg 0.0 }}{{ $downloadAvg = div ($stats.JSON.Float "data.download.avg_bits") 1000000.0 }}{{ end }}
|
|
||||||
{{ $uploadAvg := $stats.JSON.Float "avg_upload" }}
|
|
||||||
{{ if eq $uploadAvg 0.0 }}{{ $uploadAvg = $stats.JSON.Float "data.upload.avg" }}{{ end }}
|
|
||||||
{{ if eq $uploadAvg 0.0 }}{{ $uploadAvg = div ($stats.JSON.Float "data.upload.avg_bits") 1000000.0 }}{{ end }}
|
|
||||||
{{ $pingAvg := $stats.JSON.Float "avg_ping" }}
|
|
||||||
{{ if eq $pingAvg 0.0 }}{{ $pingAvg = $stats.JSON.Float "data.ping.avg" }}{{ end }}
|
|
||||||
{{ $downloadChange := percentChange $downloadAvg $download }}
|
|
||||||
{{ $uploadChange := percentChange $uploadAvg $upload }}
|
|
||||||
{{ $pingChange := percentChange $pingAvg $ping }}
|
|
||||||
<div class="flex justify-between text-center margin-block-3">
|
|
||||||
<div>
|
|
||||||
<div class="size-small {{ if lt $downloadChange 0.0 }}color-negative{{ else }}color-positive{{ end }}">{{ printf "%+.1f%%" $downloadChange }}</div>
|
|
||||||
<div class="color-highlight size-h3">{{ printf "%.1f" $download }}</div>
|
|
||||||
<div class="size-h6 color-subdue">DOWNLOAD</div>
|
|
||||||
</div>
|
|
||||||
<div>
|
|
||||||
<div class="size-small {{ if lt $uploadChange 0.0 }}color-negative{{ else }}color-positive{{ end }}">{{ printf "%+.1f%%" $uploadChange }}</div>
|
|
||||||
<div class="color-highlight size-h3">{{ printf "%.1f" $upload }}</div>
|
|
||||||
<div class="size-h6 color-subdue">UPLOAD</div>
|
|
||||||
</div>
|
|
||||||
<div>
|
|
||||||
<div class="size-small {{ if gt $pingChange 0.0 }}color-negative{{ else }}color-positive{{ end }}">{{ printf "%+.1f%%" $pingChange }}</div>
|
|
||||||
<div class="color-highlight size-h3">{{ printf "%.0f ms" $ping }}</div>
|
|
||||||
<div class="size-h6 color-subdue">PING</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
- type: dns-stats
|
|
||||||
title: DNS Stats
|
|
||||||
service: adguard
|
|
||||||
url: http://adguard
|
|
||||||
username: ${GLANCE_ADGUARD_USERNAME}
|
|
||||||
password: ${GLANCE_ADGUARD_PASSWORD}
|
|
||||||
|
|
||||||
- type: monitor
|
|
||||||
title: DNS und VPN
|
|
||||||
cache: 1m
|
|
||||||
sites:
|
|
||||||
- title: AdGuard Home
|
|
||||||
url: http://192.168.178.58:8082
|
|
||||||
check-url: http://adguard
|
|
||||||
icon: https://cdn.jsdelivr.net/gh/homarr-labs/dashboard-icons/svg/adguard-home.svg
|
|
||||||
timeout: 5s
|
|
||||||
alt-status-codes: [200, 302, 401, 403]
|
|
||||||
- title: Traefik
|
|
||||||
url: https://traefik.kaleschke.info
|
|
||||||
check-url: http://traefik:8082/metrics
|
|
||||||
icon: https://cdn.jsdelivr.net/gh/homarr-labs/dashboard-icons/svg/traefik.svg
|
|
||||||
timeout: 5s
|
|
||||||
alt-status-codes: [200, 302, 401, 403]
|
|
||||||
|
|
||||||
- type: docker-containers
|
|
||||||
title: Network Container
|
|
||||||
category: network
|
|
||||||
hide-by-default: true
|
|
||||||
sock-path: tcp://glance-docker-socket-proxy:2375
|
|
||||||
containers: &containers
|
|
||||||
traefik:
|
|
||||||
name: Traefik
|
|
||||||
icon: https://cdn.jsdelivr.net/gh/homarr-labs/dashboard-icons/svg/traefik.svg
|
|
||||||
url: https://traefik.kaleschke.info
|
|
||||||
description: Reverse Proxy
|
|
||||||
category: core
|
|
||||||
hide: false
|
|
||||||
gitea:
|
|
||||||
name: Gitea
|
|
||||||
icon: https://cdn.jsdelivr.net/gh/homarr-labs/dashboard-icons/svg/gitea.svg
|
|
||||||
url: https://git.kaleschke.info
|
|
||||||
description: GitOps Origin
|
|
||||||
category: core
|
|
||||||
hide: false
|
|
||||||
authelia:
|
|
||||||
name: Authelia
|
|
||||||
icon: https://cdn.jsdelivr.net/gh/homarr-labs/dashboard-icons/svg/authelia.svg
|
|
||||||
url: https://auth.kaleschke.info
|
|
||||||
description: ForwardAuth
|
|
||||||
category: core
|
|
||||||
hide: false
|
|
||||||
vaultwarden:
|
|
||||||
name: Vaultwarden
|
|
||||||
icon: https://cdn.jsdelivr.net/gh/homarr-labs/dashboard-icons/svg/vaultwarden.svg
|
|
||||||
url: https://vault.kaleschke.info
|
|
||||||
description: Password Vault
|
|
||||||
category: core
|
|
||||||
hide: false
|
|
||||||
postgresql17:
|
|
||||||
name: PostgreSQL 18
|
|
||||||
icon: si:postgresql
|
|
||||||
description: Shared DB
|
|
||||||
category: core
|
|
||||||
hide: false
|
|
||||||
Redis:
|
|
||||||
name: Redis
|
|
||||||
icon: si:redis
|
|
||||||
description: Shared Cache
|
|
||||||
category: core
|
|
||||||
hide: false
|
|
||||||
adguard:
|
|
||||||
name: AdGuard
|
|
||||||
icon: https://cdn.jsdelivr.net/gh/homarr-labs/dashboard-icons/svg/adguard-home.svg
|
|
||||||
url: http://192.168.178.58:8082
|
|
||||||
description: DNS Filter
|
|
||||||
category: network
|
|
||||||
hide: false
|
|
||||||
unbound:
|
|
||||||
name: Unbound
|
|
||||||
icon: mdi:dns
|
|
||||||
description: Upstream Resolver
|
|
||||||
category: network
|
|
||||||
hide: false
|
|
||||||
ddns-updater:
|
|
||||||
name: DDNS Updater
|
|
||||||
icon: mdi:cloud-sync
|
|
||||||
description: Cloudflare DNS
|
|
||||||
category: network
|
|
||||||
hide: false
|
|
||||||
paperless-ngx:
|
|
||||||
name: Paperless-ngx
|
|
||||||
icon: https://cdn.jsdelivr.net/gh/homarr-labs/dashboard-icons/svg/paperless-ngx.svg
|
|
||||||
url: https://paperless.kaleschke.info
|
|
||||||
description: Dokumente
|
|
||||||
category: apps
|
|
||||||
hide: false
|
|
||||||
paperless-gpt:
|
|
||||||
name: Paperless-GPT
|
|
||||||
icon: mdi:robot
|
|
||||||
url: https://paperless-gpt.kaleschke.info
|
|
||||||
description: Dokumenten-KI
|
|
||||||
category: apps
|
|
||||||
hide: false
|
|
||||||
immich_server:
|
|
||||||
name: Immich
|
|
||||||
icon: https://cdn.jsdelivr.net/gh/homarr-labs/dashboard-icons/svg/immich.svg
|
|
||||||
url: https://immich.kaleschke.info
|
|
||||||
description: Fotos und Videos
|
|
||||||
category: apps
|
|
||||||
id: immich
|
|
||||||
hide: false
|
|
||||||
immich_postgres:
|
|
||||||
name: DB
|
|
||||||
parent: immich
|
|
||||||
category: apps
|
|
||||||
hide: false
|
|
||||||
immich_redis:
|
|
||||||
name: Redis
|
|
||||||
parent: immich
|
|
||||||
category: apps
|
|
||||||
hide: false
|
|
||||||
immich_machine_learning:
|
|
||||||
name: ML
|
|
||||||
parent: immich
|
|
||||||
category: apps
|
|
||||||
hide: false
|
|
||||||
mealie:
|
|
||||||
name: Mealie
|
|
||||||
icon: https://cdn.jsdelivr.net/gh/homarr-labs/dashboard-icons/svg/mealie.svg
|
|
||||||
url: https://mealie.kaleschke.info
|
|
||||||
description: Rezepte
|
|
||||||
category: apps
|
|
||||||
id: mealie
|
|
||||||
hide: false
|
|
||||||
mealie-postgres:
|
|
||||||
name: DB
|
|
||||||
parent: mealie
|
|
||||||
category: apps
|
|
||||||
hide: false
|
|
||||||
nextcloud:
|
|
||||||
name: Nextcloud
|
|
||||||
icon: https://cdn.jsdelivr.net/gh/homarr-labs/dashboard-icons/svg/nextcloud.svg
|
|
||||||
url: https://cloud.kaleschke.info
|
|
||||||
description: Dateien und Sync
|
|
||||||
category: apps
|
|
||||||
id: nextcloud
|
|
||||||
hide: false
|
|
||||||
nextcloud-postgres:
|
|
||||||
name: DB
|
|
||||||
parent: nextcloud
|
|
||||||
category: apps
|
|
||||||
hide: false
|
|
||||||
nextcloud-redis:
|
|
||||||
name: Redis
|
|
||||||
parent: nextcloud
|
|
||||||
category: apps
|
|
||||||
hide: false
|
|
||||||
mail-archiver:
|
|
||||||
name: Mail Archiver
|
|
||||||
icon: https://cdn.jsdelivr.net/gh/homarr-labs/dashboard-icons/svg/mailcow.svg
|
|
||||||
url: https://mail.kaleschke.info
|
|
||||||
description: Mail-Archiv
|
|
||||||
category: apps
|
|
||||||
hide: false
|
|
||||||
ntfy:
|
|
||||||
name: ntfy
|
|
||||||
icon: https://cdn.jsdelivr.net/gh/homarr-labs/dashboard-icons/svg/ntfy.svg
|
|
||||||
url: https://ntfy.kaleschke.info
|
|
||||||
description: Push Alerts
|
|
||||||
category: apps
|
|
||||||
hide: false
|
|
||||||
bentopdf:
|
|
||||||
name: BentoPDF
|
|
||||||
icon: mdi:file-pdf-box
|
|
||||||
url: https://pdf.kaleschke.info
|
|
||||||
description: PDF Tools
|
|
||||||
category: apps
|
|
||||||
hide: false
|
|
||||||
glance:
|
|
||||||
name: Glance
|
|
||||||
icon: https://cdn.jsdelivr.net/gh/homarr-labs/dashboard-icons/svg/glance.svg
|
|
||||||
url: https://glance.kaleschke.info
|
|
||||||
description: Homelab Uebersicht
|
|
||||||
category: ops
|
|
||||||
hide: false
|
|
||||||
glance-docker-socket-proxy:
|
|
||||||
name: Glance Socket Proxy
|
|
||||||
icon: si:docker
|
|
||||||
description: Read-only Docker API
|
|
||||||
category: ops
|
|
||||||
hide: false
|
|
||||||
monitoring-grafana:
|
|
||||||
name: Monitoring Grafana
|
|
||||||
icon: https://cdn.jsdelivr.net/gh/homarr-labs/dashboard-icons/svg/grafana.svg
|
|
||||||
url: https://monitoring.kaleschke.info
|
|
||||||
description: Observability UI
|
|
||||||
category: ops
|
|
||||||
id: monitoring
|
|
||||||
hide: false
|
|
||||||
monitoring-prometheus:
|
|
||||||
name: Prometheus
|
|
||||||
parent: monitoring
|
|
||||||
category: ops
|
|
||||||
hide: false
|
|
||||||
monitoring-loki:
|
|
||||||
name: Loki
|
|
||||||
parent: monitoring
|
|
||||||
category: ops
|
|
||||||
hide: false
|
|
||||||
monitoring-promtail:
|
|
||||||
name: Promtail
|
|
||||||
parent: monitoring
|
|
||||||
category: ops
|
|
||||||
hide: false
|
|
||||||
monitoring-alertmanager:
|
|
||||||
name: Alertmanager
|
|
||||||
parent: monitoring
|
|
||||||
category: ops
|
|
||||||
hide: false
|
|
||||||
monitoring-alertmanager-ntfy-bridge:
|
|
||||||
name: ntfy Bridge
|
|
||||||
parent: monitoring
|
|
||||||
category: ops
|
|
||||||
hide: false
|
|
||||||
monitoring-blackbox-exporter:
|
|
||||||
name: Blackbox
|
|
||||||
parent: monitoring
|
|
||||||
category: ops
|
|
||||||
hide: false
|
|
||||||
monitoring-node-exporter:
|
|
||||||
name: Node Exporter
|
|
||||||
parent: monitoring
|
|
||||||
category: ops
|
|
||||||
hide: false
|
|
||||||
monitoring-cadvisor:
|
|
||||||
name: cAdvisor
|
|
||||||
parent: monitoring
|
|
||||||
category: ops
|
|
||||||
hide: false
|
|
||||||
monitoring-influxdb3-core:
|
|
||||||
name: InfluxDB 3
|
|
||||||
parent: monitoring
|
|
||||||
category: ops
|
|
||||||
hide: false
|
|
||||||
glances:
|
|
||||||
name: Glances
|
|
||||||
icon: https://cdn.jsdelivr.net/gh/homarr-labs/dashboard-icons/svg/glances.svg
|
|
||||||
url: https://glances.kaleschke.info
|
|
||||||
description: Host-Monitoring
|
|
||||||
category: ops
|
|
||||||
hide: false
|
|
||||||
scrutiny:
|
|
||||||
name: Scrutiny
|
|
||||||
icon: https://cdn.jsdelivr.net/gh/homarr-labs/dashboard-icons/svg/scrutiny.svg
|
|
||||||
url: https://scrutiny.kaleschke.info
|
|
||||||
description: SMART
|
|
||||||
category: ops
|
|
||||||
hide: false
|
|
||||||
speedtest-tracker:
|
|
||||||
name: Speedtest
|
|
||||||
icon: https://cdn.jsdelivr.net/gh/homarr-labs/dashboard-icons/png/speedtest-tracker.png
|
|
||||||
url: https://speedtest.kaleschke.info
|
|
||||||
description: WAN-Messung
|
|
||||||
category: ops
|
|
||||||
hide: false
|
|
||||||
filebrowser:
|
|
||||||
name: Filebrowser
|
|
||||||
icon: https://cdn.jsdelivr.net/gh/homarr-labs/dashboard-icons/svg/filebrowser.svg
|
|
||||||
url: https://files.kaleschke.info
|
|
||||||
description: Dateizugriff
|
|
||||||
category: ops
|
|
||||||
hide: false
|
|
||||||
code-server:
|
|
||||||
name: code-server
|
|
||||||
icon: https://cdn.jsdelivr.net/gh/homarr-labs/dashboard-icons/svg/vscode.svg
|
|
||||||
url: https://code.kaleschke.info
|
|
||||||
description: Web IDE
|
|
||||||
category: ops
|
|
||||||
hide: false
|
|
||||||
borg-ui:
|
|
||||||
name: Borg UI
|
|
||||||
icon: mdi:archive-sync
|
|
||||||
url: https://borg.kaleschke.info
|
|
||||||
description: Backup und Restore
|
|
||||||
category: ops
|
|
||||||
hide: false
|
|
||||||
hermes-dashboard:
|
|
||||||
name: Hermes
|
|
||||||
icon: mdi:shield-sparkles
|
|
||||||
url: https://hermes.kaleschke.info
|
|
||||||
description: Ops Agent UI
|
|
||||||
category: ops
|
|
||||||
id: hermes
|
|
||||||
hide: false
|
|
||||||
hermes-gateway:
|
|
||||||
name: Gateway
|
|
||||||
parent: hermes
|
|
||||||
category: ops
|
|
||||||
hide: false
|
|
||||||
komodo-core:
|
|
||||||
name: Komodo
|
|
||||||
icon: sh:komodo
|
|
||||||
url: https://komodo.kaleschke.info
|
|
||||||
description: Stack Manager
|
|
||||||
category: ops
|
|
||||||
id: komodo
|
|
||||||
hide: false
|
|
||||||
komodo-mongo:
|
|
||||||
name: Mongo
|
|
||||||
parent: komodo
|
|
||||||
category: ops
|
|
||||||
hide: false
|
|
||||||
komodo-periphery:
|
|
||||||
name: Periphery
|
|
||||||
parent: komodo
|
|
||||||
category: ops
|
|
||||||
hide: false
|
|
||||||
|
|
||||||
- type: docker-containers
|
|
||||||
title: App Container
|
|
||||||
category: apps
|
|
||||||
hide-by-default: true
|
|
||||||
sock-path: tcp://glance-docker-socket-proxy:2375
|
|
||||||
containers: *containers
|
|
||||||
|
|
||||||
- type: docker-containers
|
|
||||||
title: Ops Container
|
|
||||||
category: ops
|
|
||||||
hide-by-default: true
|
|
||||||
sock-path: tcp://glance-docker-socket-proxy:2375
|
|
||||||
containers: *containers
|
|
||||||
|
|
||||||
- name: Infrastructure and Media
|
|
||||||
slug: infrastructure
|
|
||||||
width: wide
|
|
||||||
columns:
|
|
||||||
- size: small
|
|
||||||
widgets:
|
|
||||||
- type: bookmarks
|
|
||||||
title: Core
|
|
||||||
groups:
|
|
||||||
- title: Control Plane
|
|
||||||
color: 212 100 50
|
|
||||||
links:
|
|
||||||
- title: Komodo
|
|
||||||
url: https://komodo.kaleschke.info
|
|
||||||
icon: https://cdn.jsdelivr.net/gh/homarr-labs/dashboard-icons/svg/komodo.svg
|
|
||||||
- title: Gitea
|
|
||||||
url: https://git.kaleschke.info
|
|
||||||
icon: https://cdn.jsdelivr.net/gh/homarr-labs/dashboard-icons/svg/gitea.svg
|
|
||||||
- title: Traefik
|
|
||||||
url: https://traefik.kaleschke.info
|
|
||||||
icon: https://cdn.jsdelivr.net/gh/homarr-labs/dashboard-icons/svg/traefik.svg
|
|
||||||
- title: Authelia
|
|
||||||
url: https://auth.kaleschke.info
|
|
||||||
icon: https://cdn.jsdelivr.net/gh/homarr-labs/dashboard-icons/svg/authelia.svg
|
|
||||||
|
|
||||||
- type: bookmarks
|
|
||||||
title: Media und Apps
|
|
||||||
groups:
|
|
||||||
- title: Apps
|
|
||||||
color: 140 70 40
|
|
||||||
links:
|
|
||||||
- title: Immich
|
|
||||||
url: https://immich.kaleschke.info
|
|
||||||
icon: https://cdn.jsdelivr.net/gh/homarr-labs/dashboard-icons/svg/immich.svg
|
|
||||||
- title: Paperless
|
|
||||||
url: https://paperless.kaleschke.info
|
|
||||||
icon: https://cdn.jsdelivr.net/gh/homarr-labs/dashboard-icons/svg/paperless-ngx.svg
|
|
||||||
- title: Nextcloud
|
|
||||||
url: https://cloud.kaleschke.info
|
|
||||||
icon: https://cdn.jsdelivr.net/gh/homarr-labs/dashboard-icons/svg/nextcloud.svg
|
|
||||||
- title: Mealie
|
|
||||||
url: https://mealie.kaleschke.info
|
|
||||||
icon: https://cdn.jsdelivr.net/gh/homarr-labs/dashboard-icons/svg/mealie.svg
|
|
||||||
|
|
||||||
- size: full
|
|
||||||
widgets:
|
|
||||||
- type: monitor
|
|
||||||
title: Platform Checks
|
|
||||||
cache: 1m
|
|
||||||
sites:
|
|
||||||
- title: Gitea
|
|
||||||
url: https://git.kaleschke.info
|
|
||||||
check-url: http://gitea:3000/api/healthz
|
|
||||||
icon: https://cdn.jsdelivr.net/gh/homarr-labs/dashboard-icons/svg/gitea.svg
|
|
||||||
timeout: 5s
|
|
||||||
alt-status-codes: [200, 302, 401, 403]
|
|
||||||
- title: Monitoring Grafana
|
|
||||||
url: https://monitoring.kaleschke.info
|
|
||||||
check-url: http://monitoring-grafana:3000/api/health
|
|
||||||
icon: https://cdn.jsdelivr.net/gh/homarr-labs/dashboard-icons/svg/grafana.svg
|
|
||||||
timeout: 5s
|
|
||||||
alt-status-codes: [200, 302, 401, 403]
|
|
||||||
- title: Glance
|
|
||||||
url: https://glance.kaleschke.info
|
|
||||||
check-url: http://glance:8080
|
|
||||||
icon: https://cdn.jsdelivr.net/gh/homarr-labs/dashboard-icons/svg/glance.svg
|
|
||||||
timeout: 5s
|
|
||||||
alt-status-codes: [200, 302, 401, 403]
|
|
||||||
- title: Immich
|
|
||||||
url: https://immich.kaleschke.info
|
|
||||||
check-url: http://immich_server:2283/api/server/ping
|
|
||||||
icon: https://cdn.jsdelivr.net/gh/homarr-labs/dashboard-icons/svg/immich.svg
|
|
||||||
timeout: 5s
|
|
||||||
alt-status-codes: [200, 302, 401, 403]
|
|
||||||
- title: Paperless-ngx
|
|
||||||
url: https://paperless.kaleschke.info
|
|
||||||
check-url: http://paperless-ngx:8000
|
|
||||||
icon: https://cdn.jsdelivr.net/gh/homarr-labs/dashboard-icons/svg/paperless-ngx.svg
|
|
||||||
timeout: 5s
|
|
||||||
alt-status-codes: [200, 302, 401, 403]
|
|
||||||
- title: Nextcloud
|
|
||||||
url: https://cloud.kaleschke.info
|
|
||||||
check-url: http://nextcloud/status.php
|
|
||||||
icon: https://cdn.jsdelivr.net/gh/homarr-labs/dashboard-icons/svg/nextcloud.svg
|
|
||||||
timeout: 5s
|
|
||||||
alt-status-codes: [200, 302, 401, 403]
|
|
||||||
|
|
||||||
- type: docker-containers
|
|
||||||
title: Core Container
|
|
||||||
category: core
|
|
||||||
hide-by-default: true
|
|
||||||
sock-path: tcp://glance-docker-socket-proxy:2375
|
|
||||||
containers: *containers
|
|
||||||
|
|
||||||
- type: docker-containers
|
|
||||||
title: App Container
|
|
||||||
category: apps
|
|
||||||
hide-by-default: true
|
|
||||||
sock-path: tcp://glance-docker-socket-proxy:2375
|
|
||||||
containers: *containers
|
|
||||||
|
|
||||||
- type: docker-containers
|
|
||||||
title: Ops Container
|
|
||||||
category: ops
|
|
||||||
hide-by-default: true
|
|
||||||
sock-path: tcp://glance-docker-socket-proxy:2375
|
|
||||||
containers: *containers
|
|
||||||
|
|
||||||
- size: small
|
|
||||||
widgets:
|
|
||||||
- type: bookmarks
|
|
||||||
title: Ops
|
|
||||||
groups:
|
|
||||||
- title: Tools
|
|
||||||
color: 4 78 57
|
|
||||||
links:
|
|
||||||
- title: Glances
|
|
||||||
url: https://glances.kaleschke.info
|
|
||||||
icon: https://cdn.jsdelivr.net/gh/homarr-labs/dashboard-icons/svg/glances.svg
|
|
||||||
- title: Scrutiny
|
|
||||||
url: https://scrutiny.kaleschke.info
|
|
||||||
icon: https://cdn.jsdelivr.net/gh/homarr-labs/dashboard-icons/svg/scrutiny.svg
|
|
||||||
- title: Speedtest
|
|
||||||
url: https://speedtest.kaleschke.info
|
|
||||||
icon: https://cdn.jsdelivr.net/gh/homarr-labs/dashboard-icons/png/speedtest-tracker.png
|
|
||||||
|
|||||||
@@ -0,0 +1,520 @@
|
|||||||
|
- name: Home
|
||||||
|
slug: home
|
||||||
|
width: wide
|
||||||
|
head-widgets:
|
||||||
|
- type: search
|
||||||
|
search-engine: duckduckgo
|
||||||
|
new-tab: true
|
||||||
|
autofocus: true
|
||||||
|
placeholder: Suche im Web oder springe per Bang...
|
||||||
|
bangs:
|
||||||
|
- title: Gitea
|
||||||
|
shortcut: "!git"
|
||||||
|
url: https://git.kaleschke.info/explore/repos?q={QUERY}
|
||||||
|
- title: Paperless
|
||||||
|
shortcut: "!doc"
|
||||||
|
url: https://paperless.kaleschke.info/documents?query={QUERY}
|
||||||
|
- title: Nextcloud
|
||||||
|
shortcut: "!cloud"
|
||||||
|
url: https://cloud.kaleschke.info/apps/files/?dir=/{QUERY}
|
||||||
|
- title: Komodo
|
||||||
|
shortcut: "!komodo"
|
||||||
|
url: https://komodo.kaleschke.info
|
||||||
|
- title: Immich
|
||||||
|
shortcut: "!foto"
|
||||||
|
url: https://immich.kaleschke.info/search?query={QUERY}
|
||||||
|
- title: Mealie
|
||||||
|
shortcut: "!rezept"
|
||||||
|
url: https://mealie.kaleschke.info/g/home/?search={QUERY}
|
||||||
|
columns:
|
||||||
|
- size: small
|
||||||
|
widgets:
|
||||||
|
- type: group
|
||||||
|
widgets:
|
||||||
|
- type: custom-api
|
||||||
|
title: Day
|
||||||
|
body-type: string
|
||||||
|
skip-json-validation: true
|
||||||
|
cache: 1s
|
||||||
|
template: |
|
||||||
|
{{ $localTime := now }}
|
||||||
|
{{ $elapsedSeconds := add (mul $localTime.Hour 3600) (mul $localTime.Minute 60) | add $localTime.Second }}
|
||||||
|
{{ $dayProgress := div (mul $elapsedSeconds 100.0) 86400.0 }}
|
||||||
|
{{ $gradient := "#70a1ff" }}
|
||||||
|
{{ if gt $dayProgress 25.0 }}{{ $gradient = "#ff6b6b, #70a1ff" }}{{ end }}
|
||||||
|
{{ if gt $dayProgress 50.0 }}{{ $gradient = "#ff6b6b, #f8e71c, #7ed6df" }}{{ end }}
|
||||||
|
{{ if gt $dayProgress 75.0 }}{{ $gradient = "#ff6b6b, #f8e71c, #7ed6df, #70a1ff" }}{{ end }}
|
||||||
|
<div style="text-align: center;">
|
||||||
|
<div style="width: 100%; height: 12px; background: #23262f; border: 1px solid color-mix(in srgb, var(--color-text-subdue) 55%, transparent); border-radius: 10px; overflow: hidden;">
|
||||||
|
<div style="height: 100%; width: {{ $dayProgress }}%; background: linear-gradient(90deg, {{ $gradient }});"></div>
|
||||||
|
</div>
|
||||||
|
<div class="size-h1" style="margin-top: 6px;">{{ printf "%.2f" $dayProgress }}% des Tages sind vorbei</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
- type: custom-api
|
||||||
|
title: Month
|
||||||
|
body-type: string
|
||||||
|
skip-json-validation: true
|
||||||
|
cache: 1s
|
||||||
|
template: |
|
||||||
|
{{ $localTime := now }}
|
||||||
|
{{ $month := $localTime.Month }}
|
||||||
|
{{ $daysInMonth := 31 }}
|
||||||
|
{{ if eq $month 2 }}{{ $daysInMonth = 28 }}{{ end }}
|
||||||
|
{{ if or (eq $month 4) (eq $month 6) (eq $month 9) (eq $month 11) }}{{ $daysInMonth = 30 }}{{ end }}
|
||||||
|
{{ $secondsToday := add (mul $localTime.Hour 3600) (mul $localTime.Minute 60) | add $localTime.Second }}
|
||||||
|
{{ $daysElapsed := add (sub $localTime.Day 1) (div $secondsToday 86400.0) }}
|
||||||
|
{{ $monthProgress := mul (div $daysElapsed $daysInMonth) 100.0 }}
|
||||||
|
{{ $gradient := "#70a1ff" }}
|
||||||
|
{{ if gt $monthProgress 25.0 }}{{ $gradient = "#ff6b6b, #70a1ff" }}{{ end }}
|
||||||
|
{{ if gt $monthProgress 50.0 }}{{ $gradient = "#ff6b6b, #f8e71c, #7ed6df" }}{{ end }}
|
||||||
|
{{ if gt $monthProgress 75.0 }}{{ $gradient = "#ff6b6b, #f8e71c, #7ed6df, #70a1ff" }}{{ end }}
|
||||||
|
<div style="text-align: center;">
|
||||||
|
<div style="width: 100%; height: 12px; background: #23262f; border: 1px solid color-mix(in srgb, var(--color-text-subdue) 55%, transparent); border-radius: 10px; overflow: hidden;">
|
||||||
|
<div style="height: 100%; width: {{ $monthProgress }}%; background: linear-gradient(90deg, {{ $gradient }});"></div>
|
||||||
|
</div>
|
||||||
|
<div class="size-h1" style="margin-top: 6px;">{{ printf "%.2f" $monthProgress }}% des Monats sind vorbei</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
- type: custom-api
|
||||||
|
title: Year
|
||||||
|
body-type: string
|
||||||
|
skip-json-validation: true
|
||||||
|
cache: 1s
|
||||||
|
template: |
|
||||||
|
{{ $localTime := now }}
|
||||||
|
{{ $secondsToday := add (mul $localTime.Hour 3600) (mul $localTime.Minute 60) | add $localTime.Second }}
|
||||||
|
{{ $secondsElapsed := add (mul (sub $localTime.YearDay 1) 86400) $secondsToday }}
|
||||||
|
{{ $yearProgress := div (mul $secondsElapsed 100.0) (mul 365 86400) }}
|
||||||
|
{{ $gradient := "#70a1ff" }}
|
||||||
|
{{ if gt $yearProgress 25.0 }}{{ $gradient = "#ff6b6b, #70a1ff" }}{{ end }}
|
||||||
|
{{ if gt $yearProgress 50.0 }}{{ $gradient = "#ff6b6b, #f8e71c, #7ed6df" }}{{ end }}
|
||||||
|
{{ if gt $yearProgress 75.0 }}{{ $gradient = "#ff6b6b, #f8e71c, #7ed6df, #70a1ff" }}{{ end }}
|
||||||
|
<div style="text-align: center;">
|
||||||
|
<div style="width: 100%; height: 12px; background: #23262f; border: 1px solid color-mix(in srgb, var(--color-text-subdue) 55%, transparent); border-radius: 10px; overflow: hidden;">
|
||||||
|
<div style="height: 100%; width: {{ $yearProgress }}%; background: linear-gradient(90deg, {{ $gradient }});"></div>
|
||||||
|
</div>
|
||||||
|
<div class="size-h1" style="margin-top: 6px;">{{ printf "%.2f" $yearProgress }}% des Jahres sind vorbei</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
- type: clock
|
||||||
|
hour-format: 24h
|
||||||
|
show-progress: true
|
||||||
|
timezones:
|
||||||
|
- timezone: Europe/Berlin
|
||||||
|
label: Berlin
|
||||||
|
- timezone: UTC
|
||||||
|
label: UTC
|
||||||
|
|
||||||
|
- type: weather
|
||||||
|
location: Berlin, Germany
|
||||||
|
units: metric
|
||||||
|
hour-format: 24h
|
||||||
|
|
||||||
|
- type: calendar
|
||||||
|
first-day-of-week: monday
|
||||||
|
|
||||||
|
- type: to-do
|
||||||
|
title: Operator-Notizen
|
||||||
|
|
||||||
|
- type: bookmarks
|
||||||
|
title: Direkte Einstiege
|
||||||
|
groups:
|
||||||
|
- title: Core
|
||||||
|
color: 212 100 50
|
||||||
|
links:
|
||||||
|
- title: Komodo
|
||||||
|
url: https://komodo.kaleschke.info
|
||||||
|
icon: sh:komodo
|
||||||
|
- title: Gitea
|
||||||
|
url: https://git.kaleschke.info
|
||||||
|
icon: si:gitea
|
||||||
|
- title: Monitoring
|
||||||
|
url: https://monitoring.kaleschke.info
|
||||||
|
icon: si:grafana
|
||||||
|
- title: Ops
|
||||||
|
color: 45 70 55
|
||||||
|
links:
|
||||||
|
- title: Borg
|
||||||
|
url: https://borg.kaleschke.info
|
||||||
|
icon: mdi:archive
|
||||||
|
- title: Glances
|
||||||
|
url: https://glances.kaleschke.info
|
||||||
|
icon: sh:glances
|
||||||
|
- title: Scrutiny
|
||||||
|
url: https://scrutiny.kaleschke.info
|
||||||
|
icon: sh:scrutiny
|
||||||
|
|
||||||
|
- size: full
|
||||||
|
widgets:
|
||||||
|
- type: server-stats
|
||||||
|
title: Server Stats
|
||||||
|
servers:
|
||||||
|
- type: local
|
||||||
|
name: Kallilabcore
|
||||||
|
hide-mountpoints-by-default: false
|
||||||
|
|
||||||
|
- type: custom-api
|
||||||
|
title: Komodo Stacks
|
||||||
|
title-url: https://komodo.kaleschke.info
|
||||||
|
cache: 2m
|
||||||
|
url: http://komodo-core:9120/read
|
||||||
|
method: POST
|
||||||
|
body-type: json
|
||||||
|
body:
|
||||||
|
type: ListStacks
|
||||||
|
params: {}
|
||||||
|
headers:
|
||||||
|
X-Api-Key: ${GLANCE_KOMODO_API_KEY}
|
||||||
|
X-Api-Secret: ${GLANCE_KOMODO_API_SECRET}
|
||||||
|
Content-Type: application/json
|
||||||
|
template: |
|
||||||
|
{{ $stacks := .JSON.Array "@this" }}
|
||||||
|
{{ $total := len $stacks }}
|
||||||
|
{{ $running := 0 }}
|
||||||
|
{{ range $stacks }}{{ if eq (.String "info.state") "running" }}{{ $running = add $running 1 }}{{ end }}{{ end }}
|
||||||
|
{{ $problems := sub $total $running }}
|
||||||
|
<div class="flex justify-between text-center">
|
||||||
|
<div>
|
||||||
|
<div class="color-highlight size-h3">{{ $total }}</div>
|
||||||
|
<div class="size-h6 uppercase">Stacks</div>
|
||||||
|
</div>
|
||||||
|
<div>
|
||||||
|
<div class="color-positive size-h3">{{ $running }}</div>
|
||||||
|
<div class="size-h6 uppercase">Running</div>
|
||||||
|
</div>
|
||||||
|
<div>
|
||||||
|
<div class="{{ if gt $problems 0 }}color-negative{{ else }}color-subdue{{ end }} size-h3">{{ $problems }}</div>
|
||||||
|
<div class="size-h6 uppercase">Auffaellig</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
{{ if gt $problems 0 }}
|
||||||
|
<ul class="list list-gap-4" style="margin-top: 12px;">
|
||||||
|
{{ range $stacks }}
|
||||||
|
{{ if ne (.String "info.state") "running" }}
|
||||||
|
<li class="flex justify-between">
|
||||||
|
<div class="color-highlight">{{ .String "name" }}</div>
|
||||||
|
<div class="color-negative size-h6 uppercase">{{ .String "info.state" }}</div>
|
||||||
|
</li>
|
||||||
|
{{ end }}
|
||||||
|
{{ end }}
|
||||||
|
</ul>
|
||||||
|
{{ end }}
|
||||||
|
|
||||||
|
- type: custom-api
|
||||||
|
title: Immich
|
||||||
|
title-url: https://immich.kaleschke.info
|
||||||
|
cache: 10m
|
||||||
|
url: http://immich_server:2283/api/server/statistics
|
||||||
|
headers:
|
||||||
|
x-api-key: ${GLANCE_IMMICH_API_KEY}
|
||||||
|
subrequests:
|
||||||
|
storage:
|
||||||
|
url: http://immich_server:2283/api/server/storage
|
||||||
|
headers:
|
||||||
|
x-api-key: ${GLANCE_IMMICH_API_KEY}
|
||||||
|
template: |
|
||||||
|
{{ $photos := .JSON.Int "photos" }}
|
||||||
|
{{ $videos := .JSON.Int "videos" }}
|
||||||
|
{{ $usageGiB := div (toFloat (.JSON.Int "usage")) 1073741824.0 }}
|
||||||
|
{{ $storage := .Subrequest "storage" }}
|
||||||
|
{{ $storageOK := and (ge $storage.Response.StatusCode 200) (le $storage.Response.StatusCode 299) }}
|
||||||
|
{{ $percentage := 0.0 }}
|
||||||
|
{{ if $storageOK }}{{ $percentage = $storage.JSON.Float "diskUsagePercentage" }}{{ end }}
|
||||||
|
<div class="flex justify-between text-center">
|
||||||
|
<div>
|
||||||
|
<div class="color-highlight size-h3">{{ $photos | formatNumber }}</div>
|
||||||
|
<div class="size-h6 uppercase">Fotos</div>
|
||||||
|
</div>
|
||||||
|
<div>
|
||||||
|
<div class="color-highlight size-h3">{{ $videos | formatNumber }}</div>
|
||||||
|
<div class="size-h6 uppercase">Videos</div>
|
||||||
|
</div>
|
||||||
|
<div>
|
||||||
|
<div class="color-highlight size-h3">{{ printf "%.0f" $usageGiB }} GiB</div>
|
||||||
|
<div class="size-h6 uppercase">Medien</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div style="height: 8px; margin-top: 14px; border-radius: 999px; overflow: hidden; background: color-mix(in srgb, var(--color-text-subdue) 22%, transparent);">
|
||||||
|
<div style="height: 100%; width: {{ if $storageOK }}{{ printf "%.1f" $percentage }}%{{ else }}0%{{ end }}; border-radius: 999px; background: var(--color-primary);"></div>
|
||||||
|
</div>
|
||||||
|
<div class="size-h6 color-subdue" style="margin-top: 8px;">{{ if $storageOK }}{{ printf "%.1f" $percentage }}% Speicher belegt{{ else }}Speicher API nicht verfuegbar{{ end }}</div>
|
||||||
|
|
||||||
|
- type: group
|
||||||
|
widgets:
|
||||||
|
- type: monitor
|
||||||
|
title: Core
|
||||||
|
cache: 1m
|
||||||
|
sites:
|
||||||
|
- title: AdGuard Home
|
||||||
|
url: http://192.168.178.58:8082
|
||||||
|
check-url: http://adguard
|
||||||
|
icon: https://cdn.jsdelivr.net/gh/homarr-labs/dashboard-icons/svg/adguard-home.svg
|
||||||
|
timeout: 5s
|
||||||
|
alt-status-codes: [200, 302, 401, 403]
|
||||||
|
- title: Authelia
|
||||||
|
url: https://auth.kaleschke.info
|
||||||
|
check-url: http://authelia:9091/api/health
|
||||||
|
icon: https://cdn.jsdelivr.net/gh/homarr-labs/dashboard-icons/svg/authelia.svg
|
||||||
|
timeout: 5s
|
||||||
|
alt-status-codes: [200, 302, 401, 403]
|
||||||
|
- title: Gitea
|
||||||
|
url: https://git.kaleschke.info
|
||||||
|
check-url: http://gitea:3000/api/healthz
|
||||||
|
icon: https://cdn.jsdelivr.net/gh/homarr-labs/dashboard-icons/svg/gitea.svg
|
||||||
|
timeout: 5s
|
||||||
|
alt-status-codes: [200, 302, 401, 403]
|
||||||
|
- title: Traefik
|
||||||
|
url: https://traefik.kaleschke.info
|
||||||
|
check-url: http://traefik:8082/metrics
|
||||||
|
icon: https://cdn.jsdelivr.net/gh/homarr-labs/dashboard-icons/svg/traefik.svg
|
||||||
|
timeout: 5s
|
||||||
|
alt-status-codes: [200, 302, 401, 403]
|
||||||
|
- title: Vaultwarden
|
||||||
|
url: https://vault.kaleschke.info
|
||||||
|
check-url: http://vaultwarden/alive
|
||||||
|
icon: https://cdn.jsdelivr.net/gh/homarr-labs/dashboard-icons/svg/vaultwarden.svg
|
||||||
|
timeout: 5s
|
||||||
|
alt-status-codes: [200, 302, 401, 403]
|
||||||
|
- title: Komodo
|
||||||
|
url: https://komodo.kaleschke.info
|
||||||
|
check-url: http://komodo-core:9120
|
||||||
|
icon: https://cdn.jsdelivr.net/gh/homarr-labs/dashboard-icons/svg/komodo.svg
|
||||||
|
timeout: 5s
|
||||||
|
alt-status-codes: [200, 302, 401, 403]
|
||||||
|
- title: Glance
|
||||||
|
url: https://glance.kaleschke.info
|
||||||
|
check-url: http://glance:8080
|
||||||
|
icon: https://cdn.jsdelivr.net/gh/homarr-labs/dashboard-icons/svg/glance.svg
|
||||||
|
timeout: 5s
|
||||||
|
alt-status-codes: [200, 302, 401, 403]
|
||||||
|
|
||||||
|
- type: monitor
|
||||||
|
title: Apps
|
||||||
|
cache: 1m
|
||||||
|
sites:
|
||||||
|
- title: Paperless-ngx
|
||||||
|
url: https://paperless.kaleschke.info
|
||||||
|
check-url: http://paperless-ngx:8000
|
||||||
|
icon: https://cdn.jsdelivr.net/gh/homarr-labs/dashboard-icons/svg/paperless-ngx.svg
|
||||||
|
timeout: 5s
|
||||||
|
alt-status-codes: [200, 302, 401, 403]
|
||||||
|
- title: Paperless-GPT
|
||||||
|
url: https://paperless-gpt.kaleschke.info
|
||||||
|
check-url: http://paperless-gpt:8080
|
||||||
|
icon: mdi:robot
|
||||||
|
timeout: 5s
|
||||||
|
alt-status-codes: [200, 302, 401, 403]
|
||||||
|
- title: Immich
|
||||||
|
url: https://immich.kaleschke.info
|
||||||
|
check-url: http://immich_server:2283/api/server/ping
|
||||||
|
icon: https://cdn.jsdelivr.net/gh/homarr-labs/dashboard-icons/svg/immich.svg
|
||||||
|
timeout: 5s
|
||||||
|
alt-status-codes: [200, 302, 401, 403]
|
||||||
|
- title: Mealie
|
||||||
|
url: https://mealie.kaleschke.info
|
||||||
|
check-url: http://mealie:9000
|
||||||
|
icon: https://cdn.jsdelivr.net/gh/homarr-labs/dashboard-icons/svg/mealie.svg
|
||||||
|
timeout: 5s
|
||||||
|
alt-status-codes: [200, 302, 401, 403]
|
||||||
|
- title: Nextcloud
|
||||||
|
url: https://cloud.kaleschke.info
|
||||||
|
check-url: http://nextcloud/status.php
|
||||||
|
icon: https://cdn.jsdelivr.net/gh/homarr-labs/dashboard-icons/svg/nextcloud.svg
|
||||||
|
timeout: 5s
|
||||||
|
alt-status-codes: [200, 302, 401, 403]
|
||||||
|
- title: ntfy
|
||||||
|
url: https://ntfy.kaleschke.info
|
||||||
|
check-url: http://ntfy/v1/health
|
||||||
|
icon: https://cdn.jsdelivr.net/gh/homarr-labs/dashboard-icons/svg/ntfy.svg
|
||||||
|
timeout: 5s
|
||||||
|
alt-status-codes: [200, 302, 401, 403]
|
||||||
|
- title: Mail Archiver
|
||||||
|
url: https://mail.kaleschke.info
|
||||||
|
check-url: http://mail-archiver:5000
|
||||||
|
icon: https://cdn.jsdelivr.net/gh/homarr-labs/dashboard-icons/svg/mailcow.svg
|
||||||
|
timeout: 5s
|
||||||
|
alt-status-codes: [200, 302, 401, 403]
|
||||||
|
- title: BentoPDF
|
||||||
|
url: https://pdf.kaleschke.info
|
||||||
|
check-url: http://bentopdf:8080
|
||||||
|
icon: mdi:file-pdf-box
|
||||||
|
timeout: 5s
|
||||||
|
alt-status-codes: [200, 302, 401, 403]
|
||||||
|
|
||||||
|
- type: monitor
|
||||||
|
title: Ops
|
||||||
|
cache: 1m
|
||||||
|
sites:
|
||||||
|
- title: Monitoring Grafana
|
||||||
|
url: https://monitoring.kaleschke.info
|
||||||
|
check-url: http://monitoring-grafana:3000/api/health
|
||||||
|
icon: https://cdn.jsdelivr.net/gh/homarr-labs/dashboard-icons/svg/grafana.svg
|
||||||
|
timeout: 5s
|
||||||
|
alt-status-codes: [200, 302, 401, 403]
|
||||||
|
- title: Glances
|
||||||
|
url: https://glances.kaleschke.info
|
||||||
|
check-url: http://glances:61208
|
||||||
|
icon: https://cdn.jsdelivr.net/gh/homarr-labs/dashboard-icons/svg/glances.svg
|
||||||
|
timeout: 5s
|
||||||
|
alt-status-codes: [200, 302, 401, 403]
|
||||||
|
- title: Scrutiny
|
||||||
|
url: https://scrutiny.kaleschke.info
|
||||||
|
check-url: http://scrutiny:8080
|
||||||
|
icon: https://cdn.jsdelivr.net/gh/homarr-labs/dashboard-icons/svg/scrutiny.svg
|
||||||
|
timeout: 5s
|
||||||
|
alt-status-codes: [200, 302, 401, 403]
|
||||||
|
- title: Speedtest Tracker
|
||||||
|
url: https://speedtest.kaleschke.info
|
||||||
|
check-url: http://speedtest-tracker
|
||||||
|
icon: https://cdn.jsdelivr.net/gh/homarr-labs/dashboard-icons/png/speedtest-tracker.png
|
||||||
|
timeout: 5s
|
||||||
|
alt-status-codes: [200, 302, 401, 403]
|
||||||
|
- title: Filebrowser
|
||||||
|
url: https://files.kaleschke.info
|
||||||
|
check-url: http://filebrowser
|
||||||
|
icon: https://cdn.jsdelivr.net/gh/homarr-labs/dashboard-icons/svg/filebrowser.svg
|
||||||
|
timeout: 5s
|
||||||
|
alt-status-codes: [200, 302, 401, 403]
|
||||||
|
- title: code-server
|
||||||
|
url: https://code.kaleschke.info
|
||||||
|
check-url: http://code-server:8443
|
||||||
|
icon: https://cdn.jsdelivr.net/gh/homarr-labs/dashboard-icons/svg/vscode.svg
|
||||||
|
timeout: 5s
|
||||||
|
alt-status-codes: [200, 302, 401, 403]
|
||||||
|
- title: Borg UI
|
||||||
|
url: https://borg.kaleschke.info
|
||||||
|
check-url: http://borg-ui:8081
|
||||||
|
icon: mdi:archive-sync
|
||||||
|
timeout: 5s
|
||||||
|
alt-status-codes: [200, 302, 401, 403]
|
||||||
|
|
||||||
|
- size: small
|
||||||
|
widgets:
|
||||||
|
- type: custom-api
|
||||||
|
title: Internet
|
||||||
|
title-url: https://speedtest.kaleschke.info
|
||||||
|
cache: 1h
|
||||||
|
url: http://speedtest-tracker/api/v1/results/latest
|
||||||
|
headers:
|
||||||
|
Authorization: Bearer ${GLANCE_SPEEDTEST_API_KEY}
|
||||||
|
Accept: application/json
|
||||||
|
template: |
|
||||||
|
{{ $ip := .JSON.String "external_ip" }}
|
||||||
|
{{ if eq $ip "" }}{{ $ip = .JSON.String "data.interface.externalIp" }}{{ end }}
|
||||||
|
{{ $isp := .JSON.String "isp" }}
|
||||||
|
{{ if eq $isp "" }}{{ $isp = .JSON.String "data.isp" }}{{ end }}
|
||||||
|
{{ $server := .JSON.String "server_name" }}
|
||||||
|
{{ if eq $server "" }}{{ $server = .JSON.String "data.server_name" }}{{ end }}
|
||||||
|
<div style="display: flex; flex-direction: column; align-items: center; gap: 6px; text-align: center;">
|
||||||
|
<div class="color-primary size-h2" style="font-weight: 700;">{{ if ne $ip "" }}{{ $ip }}{{ else }}WAN online{{ end }}</div>
|
||||||
|
<div class="size-h5 color-highlight">Speedtest Tracker</div>
|
||||||
|
<div class="size-h6 color-subdue" style="font-style: italic;">{{ if ne $isp "" }}{{ $isp }}{{ else }}{{ $server }}{{ end }}</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
- type: custom-api
|
||||||
|
title: Internet Speed
|
||||||
|
title-url: https://speedtest.kaleschke.info
|
||||||
|
cache: 1h
|
||||||
|
url: http://speedtest-tracker/api/v1/results/latest
|
||||||
|
headers:
|
||||||
|
Authorization: Bearer ${GLANCE_SPEEDTEST_API_KEY}
|
||||||
|
Accept: application/json
|
||||||
|
subrequests:
|
||||||
|
stats:
|
||||||
|
url: http://speedtest-tracker/api/v1/stats
|
||||||
|
headers:
|
||||||
|
Authorization: Bearer ${GLANCE_SPEEDTEST_API_KEY}
|
||||||
|
Accept: application/json
|
||||||
|
template: |
|
||||||
|
{{ $stats := .Subrequest "stats" }}
|
||||||
|
{{ $download := .JSON.Float "download" }}
|
||||||
|
{{ if eq $download 0.0 }}{{ $download = .JSON.Float "data.download" }}{{ end }}
|
||||||
|
{{ if eq $download 0.0 }}{{ $download = div (.JSON.Float "download_bits") 1000000.0 }}{{ end }}
|
||||||
|
{{ if eq $download 0.0 }}{{ $download = div (.JSON.Float "data.download_bits") 1000000.0 }}{{ end }}
|
||||||
|
{{ $upload := .JSON.Float "upload" }}
|
||||||
|
{{ if eq $upload 0.0 }}{{ $upload = .JSON.Float "data.upload" }}{{ end }}
|
||||||
|
{{ if eq $upload 0.0 }}{{ $upload = div (.JSON.Float "upload_bits") 1000000.0 }}{{ end }}
|
||||||
|
{{ if eq $upload 0.0 }}{{ $upload = div (.JSON.Float "data.upload_bits") 1000000.0 }}{{ end }}
|
||||||
|
{{ $ping := .JSON.Float "ping" }}
|
||||||
|
{{ if eq $ping 0.0 }}{{ $ping = .JSON.Float "data.ping" }}{{ end }}
|
||||||
|
{{ if and (eq $download 0.0) (eq $upload 0.0) }}
|
||||||
|
<div class="text-center color-subdue">Keine aktuellen Messdaten.<br>API-Token oder Antwortformat pruefen.</div>
|
||||||
|
{{ else }}
|
||||||
|
{{ $downloadAvg := $stats.JSON.Float "avg_download" }}
|
||||||
|
{{ if eq $downloadAvg 0.0 }}{{ $downloadAvg = $stats.JSON.Float "data.download.avg" }}{{ end }}
|
||||||
|
{{ if eq $downloadAvg 0.0 }}{{ $downloadAvg = div ($stats.JSON.Float "data.download.avg_bits") 1000000.0 }}{{ end }}
|
||||||
|
{{ $uploadAvg := $stats.JSON.Float "avg_upload" }}
|
||||||
|
{{ if eq $uploadAvg 0.0 }}{{ $uploadAvg = $stats.JSON.Float "data.upload.avg" }}{{ end }}
|
||||||
|
{{ if eq $uploadAvg 0.0 }}{{ $uploadAvg = div ($stats.JSON.Float "data.upload.avg_bits") 1000000.0 }}{{ end }}
|
||||||
|
{{ $pingAvg := $stats.JSON.Float "avg_ping" }}
|
||||||
|
{{ if eq $pingAvg 0.0 }}{{ $pingAvg = $stats.JSON.Float "data.ping.avg" }}{{ end }}
|
||||||
|
{{ $downloadChange := percentChange $downloadAvg $download }}
|
||||||
|
{{ $uploadChange := percentChange $uploadAvg $upload }}
|
||||||
|
{{ $pingChange := percentChange $pingAvg $ping }}
|
||||||
|
<div class="flex justify-between text-center margin-block-3">
|
||||||
|
<div>
|
||||||
|
<div class="size-small {{ if lt $downloadChange 0.0 }}color-negative{{ else }}color-positive{{ end }}">{{ printf "%+.1f%%" $downloadChange }}</div>
|
||||||
|
<div class="color-highlight size-h3">{{ printf "%.1f" $download }}</div>
|
||||||
|
<div class="size-h6 color-subdue">DOWNLOAD</div>
|
||||||
|
</div>
|
||||||
|
<div>
|
||||||
|
<div class="size-small {{ if lt $uploadChange 0.0 }}color-negative{{ else }}color-positive{{ end }}">{{ printf "%+.1f%%" $uploadChange }}</div>
|
||||||
|
<div class="color-highlight size-h3">{{ printf "%.1f" $upload }}</div>
|
||||||
|
<div class="size-h6 color-subdue">UPLOAD</div>
|
||||||
|
</div>
|
||||||
|
<div>
|
||||||
|
<div class="size-small {{ if gt $pingChange 0.0 }}color-negative{{ else }}color-positive{{ end }}">{{ printf "%+.1f%%" $pingChange }}</div>
|
||||||
|
<div class="color-highlight size-h3">{{ printf "%.0f ms" $ping }}</div>
|
||||||
|
<div class="size-h6 color-subdue">PING</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
{{ end }}
|
||||||
|
|
||||||
|
- type: dns-stats
|
||||||
|
title: DNS Stats
|
||||||
|
service: adguard
|
||||||
|
url: http://adguard
|
||||||
|
username: ${GLANCE_ADGUARD_USERNAME}
|
||||||
|
password: ${GLANCE_ADGUARD_PASSWORD}
|
||||||
|
|
||||||
|
- type: monitor
|
||||||
|
title: DNS und VPN
|
||||||
|
cache: 1m
|
||||||
|
sites:
|
||||||
|
- title: AdGuard Home
|
||||||
|
url: http://192.168.178.58:8082
|
||||||
|
check-url: http://adguard
|
||||||
|
icon: https://cdn.jsdelivr.net/gh/homarr-labs/dashboard-icons/svg/adguard-home.svg
|
||||||
|
timeout: 5s
|
||||||
|
alt-status-codes: [200, 302, 401, 403]
|
||||||
|
- title: Traefik
|
||||||
|
url: https://traefik.kaleschke.info
|
||||||
|
check-url: http://traefik:8082/metrics
|
||||||
|
icon: https://cdn.jsdelivr.net/gh/homarr-labs/dashboard-icons/svg/traefik.svg
|
||||||
|
timeout: 5s
|
||||||
|
alt-status-codes: [200, 302, 401, 403]
|
||||||
|
|
||||||
|
- type: docker-containers
|
||||||
|
title: Network Container
|
||||||
|
category: network
|
||||||
|
hide-by-default: true
|
||||||
|
sock-path: tcp://glance-docker-socket-proxy:2375
|
||||||
|
containers:
|
||||||
|
$include: containers-map.yml
|
||||||
|
|
||||||
|
- type: docker-containers
|
||||||
|
title: App Container
|
||||||
|
category: apps
|
||||||
|
hide-by-default: true
|
||||||
|
sock-path: tcp://glance-docker-socket-proxy:2375
|
||||||
|
containers:
|
||||||
|
$include: containers-map.yml
|
||||||
|
|
||||||
|
- type: docker-containers
|
||||||
|
title: Ops Container
|
||||||
|
category: ops
|
||||||
|
hide-by-default: true
|
||||||
|
sock-path: tcp://glance-docker-socket-proxy:2375
|
||||||
|
containers:
|
||||||
|
$include: containers-map.yml
|
||||||
@@ -0,0 +1,242 @@
|
|||||||
|
- name: Infrastructure and Media
|
||||||
|
slug: infrastructure
|
||||||
|
width: wide
|
||||||
|
columns:
|
||||||
|
- size: small
|
||||||
|
widgets:
|
||||||
|
- type: bookmarks
|
||||||
|
title: Core
|
||||||
|
groups:
|
||||||
|
- title: Control Plane
|
||||||
|
color: 212 100 50
|
||||||
|
links:
|
||||||
|
- title: Komodo
|
||||||
|
url: https://komodo.kaleschke.info
|
||||||
|
icon: https://cdn.jsdelivr.net/gh/homarr-labs/dashboard-icons/svg/komodo.svg
|
||||||
|
- title: Gitea
|
||||||
|
url: https://git.kaleschke.info
|
||||||
|
icon: https://cdn.jsdelivr.net/gh/homarr-labs/dashboard-icons/svg/gitea.svg
|
||||||
|
- title: Traefik
|
||||||
|
url: https://traefik.kaleschke.info
|
||||||
|
icon: https://cdn.jsdelivr.net/gh/homarr-labs/dashboard-icons/svg/traefik.svg
|
||||||
|
- title: Authelia
|
||||||
|
url: https://auth.kaleschke.info
|
||||||
|
icon: https://cdn.jsdelivr.net/gh/homarr-labs/dashboard-icons/svg/authelia.svg
|
||||||
|
|
||||||
|
- type: bookmarks
|
||||||
|
title: Media und Apps
|
||||||
|
groups:
|
||||||
|
- title: Apps
|
||||||
|
color: 140 70 40
|
||||||
|
links:
|
||||||
|
- title: Immich
|
||||||
|
url: https://immich.kaleschke.info
|
||||||
|
icon: https://cdn.jsdelivr.net/gh/homarr-labs/dashboard-icons/svg/immich.svg
|
||||||
|
- title: Paperless
|
||||||
|
url: https://paperless.kaleschke.info
|
||||||
|
icon: https://cdn.jsdelivr.net/gh/homarr-labs/dashboard-icons/svg/paperless-ngx.svg
|
||||||
|
- title: Nextcloud
|
||||||
|
url: https://cloud.kaleschke.info
|
||||||
|
icon: https://cdn.jsdelivr.net/gh/homarr-labs/dashboard-icons/svg/nextcloud.svg
|
||||||
|
- title: Mealie
|
||||||
|
url: https://mealie.kaleschke.info
|
||||||
|
icon: https://cdn.jsdelivr.net/gh/homarr-labs/dashboard-icons/svg/mealie.svg
|
||||||
|
|
||||||
|
- type: custom-api
|
||||||
|
title: Scrutiny Disk Health
|
||||||
|
title-url: https://scrutiny.kaleschke.info
|
||||||
|
cache: 30m
|
||||||
|
url: http://scrutiny:8080/api/summary
|
||||||
|
template: |
|
||||||
|
{{ $disks := .JSON.Array "data.summary.@values" }}
|
||||||
|
{{ if eq (len $disks) 0 }}
|
||||||
|
<div class="text-center color-subdue">Keine Disks gemeldet.</div>
|
||||||
|
{{ else }}
|
||||||
|
<ul class="list list-gap-4">
|
||||||
|
{{ range $disks }}
|
||||||
|
{{ $status := .Int "device.device_status" }}
|
||||||
|
<li class="flex justify-between">
|
||||||
|
<div class="color-highlight">{{ .String "device.device_name" }}</div>
|
||||||
|
<div class="size-h6 uppercase {{ if eq $status 0 }}color-positive{{ else }}color-negative{{ end }}">
|
||||||
|
{{ if eq $status 0 }}OK{{ else }}FAILED{{ end }}
|
||||||
|
</div>
|
||||||
|
</li>
|
||||||
|
{{ end }}
|
||||||
|
</ul>
|
||||||
|
{{ end }}
|
||||||
|
|
||||||
|
- size: full
|
||||||
|
widgets:
|
||||||
|
- type: custom-api
|
||||||
|
title: GitOps - homelab-infra
|
||||||
|
title-url: https://git.kaleschke.info/Micha/homelab-infra
|
||||||
|
cache: 5m
|
||||||
|
url: http://gitea:3000/api/v1/repos/Micha/homelab-infra/commits?limit=5&stat=false
|
||||||
|
headers:
|
||||||
|
Authorization: token ${GLANCE_GITEA_TOKEN}
|
||||||
|
Accept: application/json
|
||||||
|
subrequests:
|
||||||
|
repo:
|
||||||
|
url: http://gitea:3000/api/v1/repos/Micha/homelab-infra
|
||||||
|
headers:
|
||||||
|
Authorization: token ${GLANCE_GITEA_TOKEN}
|
||||||
|
Accept: application/json
|
||||||
|
template: |
|
||||||
|
{{ $repo := .Subrequest "repo" }}
|
||||||
|
{{ $repoOK := and (ge $repo.Response.StatusCode 200) (le $repo.Response.StatusCode 299) }}
|
||||||
|
{{ if $repoOK }}
|
||||||
|
<div class="flex justify-between text-center" style="margin-bottom: 12px;">
|
||||||
|
<div>
|
||||||
|
<div class="color-highlight size-h3">{{ $repo.JSON.Int "open_issues_count" }}</div>
|
||||||
|
<div class="size-h6 uppercase">Issues</div>
|
||||||
|
</div>
|
||||||
|
<div>
|
||||||
|
<div class="color-highlight size-h3">{{ $repo.JSON.Int "open_pr_counter" }}</div>
|
||||||
|
<div class="size-h6 uppercase">PRs</div>
|
||||||
|
</div>
|
||||||
|
<div>
|
||||||
|
<div class="color-highlight size-h3">{{ $repo.JSON.String "default_branch" }}</div>
|
||||||
|
<div class="size-h6 uppercase">Branch</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
{{ end }}
|
||||||
|
<ul class="list list-gap-6">
|
||||||
|
{{ range .JSON.Array "@this" }}
|
||||||
|
<li>
|
||||||
|
<div class="flex justify-between">
|
||||||
|
<div class="color-highlight text-truncate" style="max-width: 75%;">{{ .String "commit.message" }}</div>
|
||||||
|
<div class="size-h6 color-subdue">{{ slice (.String "sha") 0 7 }}</div>
|
||||||
|
</div>
|
||||||
|
<div class="size-h6 color-subdue">{{ .String "commit.author.name" }} · {{ .String "commit.author.date" | parseTime "rfc3339" | toRelativeTime }}</div>
|
||||||
|
</li>
|
||||||
|
{{ end }}
|
||||||
|
</ul>
|
||||||
|
|
||||||
|
- type: monitor
|
||||||
|
title: Platform Checks
|
||||||
|
cache: 1m
|
||||||
|
sites:
|
||||||
|
- title: Gitea
|
||||||
|
url: https://git.kaleschke.info
|
||||||
|
check-url: http://gitea:3000/api/healthz
|
||||||
|
icon: https://cdn.jsdelivr.net/gh/homarr-labs/dashboard-icons/svg/gitea.svg
|
||||||
|
timeout: 5s
|
||||||
|
alt-status-codes: [200, 302, 401, 403]
|
||||||
|
- title: Monitoring Grafana
|
||||||
|
url: https://monitoring.kaleschke.info
|
||||||
|
check-url: http://monitoring-grafana:3000/api/health
|
||||||
|
icon: https://cdn.jsdelivr.net/gh/homarr-labs/dashboard-icons/svg/grafana.svg
|
||||||
|
timeout: 5s
|
||||||
|
alt-status-codes: [200, 302, 401, 403]
|
||||||
|
- title: Glance
|
||||||
|
url: https://glance.kaleschke.info
|
||||||
|
check-url: http://glance:8080
|
||||||
|
icon: https://cdn.jsdelivr.net/gh/homarr-labs/dashboard-icons/svg/glance.svg
|
||||||
|
timeout: 5s
|
||||||
|
alt-status-codes: [200, 302, 401, 403]
|
||||||
|
- title: Immich
|
||||||
|
url: https://immich.kaleschke.info
|
||||||
|
check-url: http://immich_server:2283/api/server/ping
|
||||||
|
icon: https://cdn.jsdelivr.net/gh/homarr-labs/dashboard-icons/svg/immich.svg
|
||||||
|
timeout: 5s
|
||||||
|
alt-status-codes: [200, 302, 401, 403]
|
||||||
|
- title: Paperless-ngx
|
||||||
|
url: https://paperless.kaleschke.info
|
||||||
|
check-url: http://paperless-ngx:8000
|
||||||
|
icon: https://cdn.jsdelivr.net/gh/homarr-labs/dashboard-icons/svg/paperless-ngx.svg
|
||||||
|
timeout: 5s
|
||||||
|
alt-status-codes: [200, 302, 401, 403]
|
||||||
|
- title: Nextcloud
|
||||||
|
url: https://cloud.kaleschke.info
|
||||||
|
check-url: http://nextcloud/status.php
|
||||||
|
icon: https://cdn.jsdelivr.net/gh/homarr-labs/dashboard-icons/svg/nextcloud.svg
|
||||||
|
timeout: 5s
|
||||||
|
alt-status-codes: [200, 302, 401, 403]
|
||||||
|
|
||||||
|
- type: docker-containers
|
||||||
|
title: Core Container
|
||||||
|
category: core
|
||||||
|
hide-by-default: true
|
||||||
|
sock-path: tcp://glance-docker-socket-proxy:2375
|
||||||
|
containers:
|
||||||
|
$include: containers-map.yml
|
||||||
|
|
||||||
|
- type: docker-containers
|
||||||
|
title: App Container
|
||||||
|
category: apps
|
||||||
|
hide-by-default: true
|
||||||
|
sock-path: tcp://glance-docker-socket-proxy:2375
|
||||||
|
containers:
|
||||||
|
$include: containers-map.yml
|
||||||
|
|
||||||
|
- type: docker-containers
|
||||||
|
title: Ops Container
|
||||||
|
category: ops
|
||||||
|
hide-by-default: true
|
||||||
|
sock-path: tcp://glance-docker-socket-proxy:2375
|
||||||
|
containers:
|
||||||
|
$include: containers-map.yml
|
||||||
|
|
||||||
|
- size: small
|
||||||
|
widgets:
|
||||||
|
- type: custom-api
|
||||||
|
title: Paperless-ngx
|
||||||
|
title-url: https://paperless.kaleschke.info
|
||||||
|
cache: 15m
|
||||||
|
url: http://paperless-ngx:8000/api/statistics/
|
||||||
|
headers:
|
||||||
|
Authorization: Token ${GLANCE_PAPERLESS_TOKEN}
|
||||||
|
Accept: application/json
|
||||||
|
template: |
|
||||||
|
{{ $total := .JSON.Int "documents_total" }}
|
||||||
|
{{ $inbox := .JSON.Int "documents_inbox" }}
|
||||||
|
<div class="flex justify-between text-center">
|
||||||
|
<div>
|
||||||
|
<div class="color-highlight size-h3">{{ $total | formatNumber }}</div>
|
||||||
|
<div class="size-h6 uppercase">Dokumente</div>
|
||||||
|
</div>
|
||||||
|
<div>
|
||||||
|
<div class="size-h3 {{ if gt $inbox 0 }}color-negative{{ else }}color-positive{{ end }}">{{ $inbox }}</div>
|
||||||
|
<div class="size-h6 uppercase">Inbox</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
- type: custom-api
|
||||||
|
title: Mealie
|
||||||
|
title-url: https://mealie.kaleschke.info
|
||||||
|
cache: 1h
|
||||||
|
url: http://mealie:9000/api/app/about/statistics
|
||||||
|
headers:
|
||||||
|
Authorization: Bearer ${GLANCE_MEALIE_TOKEN}
|
||||||
|
Accept: application/json
|
||||||
|
template: |
|
||||||
|
<div class="flex justify-between text-center">
|
||||||
|
<div>
|
||||||
|
<div class="color-highlight size-h3">{{ .JSON.Int "totalRecipes" | formatNumber }}</div>
|
||||||
|
<div class="size-h6 uppercase">Rezepte</div>
|
||||||
|
</div>
|
||||||
|
<div>
|
||||||
|
<div class="color-highlight size-h3">{{ .JSON.Int "totalCategories" }}</div>
|
||||||
|
<div class="size-h6 uppercase">Kategorien</div>
|
||||||
|
</div>
|
||||||
|
<div>
|
||||||
|
<div class="color-highlight size-h3">{{ .JSON.Int "totalUsers" }}</div>
|
||||||
|
<div class="size-h6 uppercase">Nutzer</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
- type: bookmarks
|
||||||
|
title: Ops
|
||||||
|
groups:
|
||||||
|
- title: Tools
|
||||||
|
color: 4 78 57
|
||||||
|
links:
|
||||||
|
- title: Glances
|
||||||
|
url: https://glances.kaleschke.info
|
||||||
|
icon: https://cdn.jsdelivr.net/gh/homarr-labs/dashboard-icons/svg/glances.svg
|
||||||
|
- title: Scrutiny
|
||||||
|
url: https://scrutiny.kaleschke.info
|
||||||
|
icon: https://cdn.jsdelivr.net/gh/homarr-labs/dashboard-icons/svg/scrutiny.svg
|
||||||
|
- title: Speedtest
|
||||||
|
url: https://speedtest.kaleschke.info
|
||||||
|
icon: https://cdn.jsdelivr.net/gh/homarr-labs/dashboard-icons/png/speedtest-tracker.png
|
||||||
@@ -0,0 +1,80 @@
|
|||||||
|
- name: Ops und Releases
|
||||||
|
slug: ops
|
||||||
|
width: wide
|
||||||
|
columns:
|
||||||
|
- size: small
|
||||||
|
widgets:
|
||||||
|
- type: rss
|
||||||
|
title: Selfhosted News
|
||||||
|
style: vertical-list
|
||||||
|
limit: 12
|
||||||
|
collapse-after: 6
|
||||||
|
cache: 6h
|
||||||
|
feeds:
|
||||||
|
- url: https://selfh.st/rss/
|
||||||
|
title: selfh.st
|
||||||
|
- url: https://tailscale.com/blog/index.xml
|
||||||
|
title: Tailscale Blog
|
||||||
|
|
||||||
|
- size: full
|
||||||
|
widgets:
|
||||||
|
- type: releases
|
||||||
|
title: Image Releases
|
||||||
|
cache: 12h
|
||||||
|
show-source-icon: true
|
||||||
|
collapse-after: 15
|
||||||
|
repositories:
|
||||||
|
- glanceapp/glance
|
||||||
|
- traefik/traefik
|
||||||
|
- go-gitea/gitea
|
||||||
|
- moghtech/komodo
|
||||||
|
- immich-app/immich
|
||||||
|
- paperless-ngx/paperless-ngx
|
||||||
|
- AdguardTeam/AdGuardHome
|
||||||
|
- dani-garcia/vaultwarden
|
||||||
|
- authelia/authelia
|
||||||
|
- mealie-recipes/mealie
|
||||||
|
- nextcloud/server
|
||||||
|
- AnalogJ/scrutiny
|
||||||
|
- alexjustesen/speedtest-tracker
|
||||||
|
- binwiederhier/ntfy
|
||||||
|
- filebrowser/filebrowser
|
||||||
|
- coder/code-server
|
||||||
|
- qdm12/ddns-updater
|
||||||
|
- nicolargo/glances
|
||||||
|
|
||||||
|
- size: small
|
||||||
|
widgets:
|
||||||
|
- type: custom-api
|
||||||
|
title: Letzte Commits
|
||||||
|
title-url: https://git.kaleschke.info/Micha/homelab-infra/commits/branch/master
|
||||||
|
cache: 5m
|
||||||
|
url: http://gitea:3000/api/v1/repos/Micha/homelab-infra/commits?limit=8&stat=false
|
||||||
|
headers:
|
||||||
|
Authorization: token ${GLANCE_GITEA_TOKEN}
|
||||||
|
Accept: application/json
|
||||||
|
template: |
|
||||||
|
<ul class="list list-gap-6 collapsible-container" data-collapse-after="5">
|
||||||
|
{{ range .JSON.Array "@this" }}
|
||||||
|
<li>
|
||||||
|
<div class="color-highlight text-truncate">{{ .String "commit.message" }}</div>
|
||||||
|
<div class="size-h6 color-subdue">{{ slice (.String "sha") 0 7 }} · {{ .String "commit.author.date" | parseTime "rfc3339" | toRelativeTime }}</div>
|
||||||
|
</li>
|
||||||
|
{{ end }}
|
||||||
|
</ul>
|
||||||
|
|
||||||
|
- type: bookmarks
|
||||||
|
title: Deploy-Kette
|
||||||
|
groups:
|
||||||
|
- title: GitOps
|
||||||
|
color: 212 100 50
|
||||||
|
links:
|
||||||
|
- title: Gitea Repo
|
||||||
|
url: https://git.kaleschke.info/Micha/homelab-infra
|
||||||
|
icon: si:gitea
|
||||||
|
- title: Komodo Stacks
|
||||||
|
url: https://komodo.kaleschke.info
|
||||||
|
icon: sh:komodo
|
||||||
|
- title: Grafana
|
||||||
|
url: https://monitoring.kaleschke.info
|
||||||
|
icon: si:grafana
|
||||||
@@ -0,0 +1,3 @@
|
|||||||
|
$include: home.yml
|
||||||
|
$include: infrastructure.yml
|
||||||
|
$include: ops.yml
|
||||||
@@ -9,8 +9,14 @@ services:
|
|||||||
GLANCE_ADGUARD_USERNAME: ${GLANCE_ADGUARD_USERNAME:-}
|
GLANCE_ADGUARD_USERNAME: ${GLANCE_ADGUARD_USERNAME:-}
|
||||||
GLANCE_ADGUARD_PASSWORD: ${GLANCE_ADGUARD_PASSWORD:-}
|
GLANCE_ADGUARD_PASSWORD: ${GLANCE_ADGUARD_PASSWORD:-}
|
||||||
GLANCE_SPEEDTEST_API_KEY: ${GLANCE_SPEEDTEST_API_KEY:-}
|
GLANCE_SPEEDTEST_API_KEY: ${GLANCE_SPEEDTEST_API_KEY:-}
|
||||||
|
GLANCE_KOMODO_API_KEY: ${GLANCE_KOMODO_API_KEY:-}
|
||||||
|
GLANCE_KOMODO_API_SECRET: ${GLANCE_KOMODO_API_SECRET:-}
|
||||||
|
GLANCE_GITEA_TOKEN: ${GLANCE_GITEA_TOKEN:-}
|
||||||
|
GLANCE_PAPERLESS_TOKEN: ${GLANCE_PAPERLESS_TOKEN:-}
|
||||||
|
GLANCE_MEALIE_TOKEN: ${GLANCE_MEALIE_TOKEN:-}
|
||||||
volumes:
|
volumes:
|
||||||
- ./config:/app/config:ro
|
- ./config:/app/config:ro
|
||||||
|
- ./assets:/app/assets:ro
|
||||||
networks:
|
networks:
|
||||||
- frontend_net
|
- frontend_net
|
||||||
- glance_socket_net
|
- glance_socket_net
|
||||||
|
|||||||
Reference in New Issue
Block a user