Files
dashboard/README.md
Francisco 7b2949e739 Initial commit: conky dashboard + DogeBot
Three conky panels (main, dayz, doge) plus all widgets, NUT config templates,
and the systemd timer that drives the qwen2.5:1.5b vibe report on maeth-storage.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-12 01:16:54 -04:00

4.0 KiB

maeth-dashboard

Conky-based desktop dashboard for the homelab. Three transparent panels:

  • Main (top-left): Home Assistant energy, UDM router throughput/clients, local machine (CPU/mem/GPUs/UPS), maeth-storage (CPU/mem/disks/GPU), k8s cluster.
  • DAYZ (top-right): live A2S query against the personal DayZ server.
  • DogeBot (right of main): qwen2.5:1.5b running on maeth-storage commentates on the homelab + Jellyfin activity + time-of-day with rotating mood prompts. Refreshes every 3 min.

Smart-home / green-tech aesthetic — emerald accents, Inter for UI, Adwaita Mono for numbers, Twemoji Mozilla for emoji glyphs that work under Xft.

Layout

conky/                       conky panel configs (→ ~/.config/conky/)
  home-assistant-energy.conf
  dayz.conf
  doge.conf

widgets/                     scripts called via ${execpi} from conky
  ha-energy-widget.py        Home Assistant power/voltage/current
  router-widget.py           UDM-SE WAN throughput + speedtest + clients
  system-widget.sh           local CPU/mem + nvidia-smi + UPS (NUT)
  storage-widget.sh          ssh to maeth-storage for cpu/mem/disks/GPU
  k8s-widget.sh              kubectl nodes/pods + top memory
  dayz-widget.py             A2S query (Source Engine)
  gpu-widget.sh              local nvidia-smi (legacy; merged into system)
  vibe-collector.py          metrics → ollama qwen → 3-line vibe report
  vibe-widget.sh             renders the cached report with emoji-aware font runs
  start-widget.sh            launcher for all three conky instances
  setup-ups.sh               one-shot NUT install/configure for Hikvision UPS
  nut/                       NUT config templates

systemd/user/                vibe-report timer (every 60s)
  vibe-report.service
  vibe-report.timer

External dependencies

  • conky ≥ 1.18 with Xft + Cairo
  • python ≥ 3.11
  • python-pillow, python-dbus, python-gobject (the last two only if you bring back screen capture)
  • nvidia-smi (NVIDIA GPUs) — optional, widget falls back if missing
  • kubectl with a working kubeconfig — optional
  • nut (upsc client) — optional, for Hikvision UPS
  • Fonts: Inter, Adwaita Mono, Twemoji Mozilla
    • Twemoji Mozilla: curl -fsSL -o ~/.local/share/fonts/Twemoji.Mozilla.ttf https://github.com/mozilla/twemoji-colr/releases/download/v0.7.0/Twemoji.Mozilla.ttf && fc-cache -f

Install

git clone git@github.com:dezmaeth/maeth-dashboard.git ~/code/maeth-dashboard
cd ~/code/maeth-dashboard
cp widgets/env.example ~/.config/home-assistant-energy-widget/env  # fill in HA url + token
# (optional) drop UDM creds at ~/.udm:
#   username=<udm-local-admin>
#   password=<...>
./install.sh

install.sh symlinks every file under conky/, widgets/, and systemd/user/ into the matching ~/.config/... location, backing up any pre-existing file as <path>.bak.

After install:

systemctl --user enable --now vibe-report.timer
conky -c ~/.config/conky/home-assistant-energy.conf -d
conky -c ~/.config/conky/dayz.conf -d
conky -c ~/.config/conky/doge.conf -d

For autostart, hook widgets/start-widget.sh into your session (GNOME → Tweaks → Startup Applications, or a .desktop in ~/.config/autostart/).

NUT / UPS

Edit widgets/nut/* first (password in upsd.users + upsmon.conf), then:

sudo bash widgets/setup-ups.sh

The Hikvision UPS at vendor 0665:5161 auto-detects the Megatec/Voltronic-QS subdriver. After install:

sudo systemctl enable --now nut.target
upsc hikvision@localhost

Secrets

widgets/env (HA url+token) and ~/.udm (UDM admin creds) are gitignored — keep them outside the repo.

Remote services referenced

  • Home Assistant — URL in widgets/env
  • UDM-SE — 192.168.1.1 (creds in ~/.udm)
  • maeth-storage.local — SSH for storage stats / ollama / jellyfin
  • dezmaeth.root.sx:27016 — public DayZ A2S query
  • Jellyfin on maeth-storage:8096 — token bootstrapped from its sqlite DB

If you install this on a machine outside the LAN, you'll need Tailscale (or similar) so those hostnames resolve from the road.