From facaa261bcd97fadacbf2c6715eaebca8a34d37e Mon Sep 17 00:00:00 2001 From: Zuckerberg Date: Thu, 26 Feb 2026 23:41:06 -0800 Subject: [PATCH] Add missing services to Gatus monitoring and Dashy dashboard Gatus: Add Roundcube, Collabora, and all s0 services (Jellyfin, servarr stack, Home Assistant, ESPHome, Zigbee2MQTT, Frigate, Valetudo, Sandman, Vikunja, Actual Budget, Linkwarden, Memos, Outline, LanguageTool, Unifi) in a new "s0" group. Dashy: Add missing public services (ntfy, Librechat, Owncast, Navidrome, Collabora, Gatus) to Services section. Add new Home Automation and Productivity sections. Add Unifi to Network. Remove disabled Jitsi Meet. --- common/server/gatus.nix | 220 +++++++++++++++++++++++++++++++ machines/storage/s0/dashy.nix | 238 +++++++++++++++++++++++++++++++++- 2 files changed, 451 insertions(+), 7 deletions(-) diff --git a/common/server/gatus.nix b/common/server/gatus.nix index 9e83016..8cb097f 100644 --- a/common/server/gatus.nix +++ b/common/server/gatus.nix @@ -130,6 +130,226 @@ in ]; alerts = [{ type = "ntfy"; }]; } + { + name = "Roundcube"; + group = "services"; + url = "https://mail.neet.dev"; + interval = "5m"; + conditions = [ + "[STATUS] == 200" + ]; + alerts = [{ type = "ntfy"; }]; + } + { + name = "Collabora Online"; + group = "services"; + url = "https://collabora.runyan.org"; + interval = "5m"; + conditions = [ + "[STATUS] == 200" + ]; + alerts = [{ type = "ntfy"; }]; + } + { + name = "Jellyfin"; + group = "s0"; + url = "https://jellyfin.s0.neet.dev"; + interval = "5m"; + conditions = [ + "[STATUS] == 200" + ]; + alerts = [{ type = "ntfy"; }]; + } + { + name = "Sonarr"; + group = "s0"; + url = "https://sonarr.s0.neet.dev"; + interval = "5m"; + conditions = [ + "[STATUS] == 200" + ]; + alerts = [{ type = "ntfy"; }]; + } + { + name = "Radarr"; + group = "s0"; + url = "https://radarr.s0.neet.dev"; + interval = "5m"; + conditions = [ + "[STATUS] == 200" + ]; + alerts = [{ type = "ntfy"; }]; + } + { + name = "Lidarr"; + group = "s0"; + url = "https://lidarr.s0.neet.dev"; + interval = "5m"; + conditions = [ + "[STATUS] == 200" + ]; + alerts = [{ type = "ntfy"; }]; + } + { + name = "Prowlarr"; + group = "s0"; + url = "https://prowlarr.s0.neet.dev"; + interval = "5m"; + conditions = [ + "[STATUS] == 200" + ]; + alerts = [{ type = "ntfy"; }]; + } + { + name = "Bazarr"; + group = "s0"; + url = "https://bazarr.s0.neet.dev"; + interval = "5m"; + conditions = [ + "[STATUS] == 200" + ]; + alerts = [{ type = "ntfy"; }]; + } + { + name = "Transmission"; + group = "s0"; + url = "https://transmission.s0.neet.dev"; + interval = "5m"; + conditions = [ + "[STATUS] == 200" + ]; + alerts = [{ type = "ntfy"; }]; + } + { + name = "Home Assistant"; + group = "s0"; + url = "https://ha.s0.neet.dev"; + interval = "5m"; + conditions = [ + "[STATUS] == 200" + ]; + alerts = [{ type = "ntfy"; }]; + } + { + name = "ESPHome"; + group = "s0"; + url = "https://esphome.s0.neet.dev"; + interval = "5m"; + conditions = [ + "[STATUS] == 200" + ]; + alerts = [{ type = "ntfy"; }]; + } + { + name = "Zigbee2MQTT"; + group = "s0"; + url = "https://zigbee.s0.neet.dev"; + interval = "5m"; + conditions = [ + "[STATUS] == 200" + ]; + alerts = [{ type = "ntfy"; }]; + } + { + name = "Frigate"; + group = "s0"; + url = "https://frigate.s0.neet.dev"; + interval = "5m"; + conditions = [ + "[STATUS] == 200" + ]; + alerts = [{ type = "ntfy"; }]; + } + { + name = "Valetudo"; + group = "s0"; + url = "https://vacuum.s0.neet.dev"; + interval = "5m"; + conditions = [ + "[STATUS] == 200" + ]; + alerts = [{ type = "ntfy"; }]; + } + { + name = "Sandman"; + group = "s0"; + url = "https://sandman.s0.neet.dev"; + interval = "5m"; + conditions = [ + "[STATUS] == 200" + ]; + alerts = [{ type = "ntfy"; }]; + } + { + name = "Vikunja"; + group = "s0"; + url = "https://todo.s0.neet.dev"; + interval = "5m"; + conditions = [ + "[STATUS] == 200" + ]; + alerts = [{ type = "ntfy"; }]; + } + { + name = "Actual Budget"; + group = "s0"; + url = "https://budget.s0.neet.dev"; + interval = "5m"; + conditions = [ + "[STATUS] == 200" + ]; + alerts = [{ type = "ntfy"; }]; + } + { + name = "Linkwarden"; + group = "s0"; + url = "https://linkwarden.s0.neet.dev"; + interval = "5m"; + conditions = [ + "[STATUS] == 200" + ]; + alerts = [{ type = "ntfy"; }]; + } + { + name = "Memos"; + group = "s0"; + url = "https://memos.s0.neet.dev"; + interval = "5m"; + conditions = [ + "[STATUS] == 200" + ]; + alerts = [{ type = "ntfy"; }]; + } + { + name = "Outline"; + group = "s0"; + url = "https://outline.s0.neet.dev"; + interval = "5m"; + conditions = [ + "[STATUS] == 200" + ]; + alerts = [{ type = "ntfy"; }]; + } + { + name = "LanguageTool"; + group = "s0"; + url = "https://languagetool.s0.neet.dev"; + interval = "5m"; + conditions = [ + "[STATUS] == 200" + ]; + alerts = [{ type = "ntfy"; }]; + } + { + name = "Unifi"; + group = "s0"; + url = "https://unifi.s0.neet.dev"; + interval = "5m"; + conditions = [ + "[STATUS] == 200" + ]; + alerts = [{ type = "ntfy"; }]; + } ]; }; }; diff --git a/machines/storage/s0/dashy.nix b/machines/storage/s0/dashy.nix index a53e74d..6857332 100644 --- a/machines/storage/s0/dashy.nix +++ b/machines/storage/s0/dashy.nix @@ -181,10 +181,20 @@ statusCheck = true; id = "1_746_wireless"; }; + unifi = { + title = "Unifi"; + description = "unifi.s0.neet.dev"; + icon = "hl-unifi"; + url = "https://unifi.s0.neet.dev"; + target = "sametab"; + statusCheck = false; + id = "2_746_unifi"; + }; }; networkList = [ networkItems.gateway networkItems.wireless + networkItems.unifi ]; in { @@ -259,14 +269,59 @@ statusCheck = true; id = "6_836_roundcube"; }; - jitsimeet = { - title = "Jitsi Meet"; - description = "meet.neet.space"; - icon = "hl-jitsimeet"; - url = "https://meet.neet.space"; + ntfy = { + title = "ntfy"; + description = "ntfy.neet.dev"; + icon = "hl-ntfy"; + url = "https://ntfy.neet.dev"; target = "sametab"; statusCheck = true; - id = "7_836_jitsimeet"; + id = "7_836_ntfy"; + }; + librechat = { + title = "Librechat"; + description = "chat.neet.dev"; + icon = "hl-librechat"; + url = "https://chat.neet.dev"; + target = "sametab"; + statusCheck = true; + id = "8_836_librechat"; + }; + owncast = { + title = "Owncast"; + description = "live.neet.dev"; + icon = "hl-owncast"; + url = "https://live.neet.dev"; + target = "sametab"; + statusCheck = true; + id = "9_836_owncast"; + }; + navidrome-public = { + title = "Navidrome"; + description = "navidrome.neet.cloud"; + icon = "hl-navidrome"; + url = "https://navidrome.neet.cloud"; + target = "sametab"; + statusCheck = true; + id = "10_836_navidrome-public"; + }; + collabora = { + title = "Collabora"; + description = "collabora.runyan.org"; + icon = "hl-collabora"; + url = "https://collabora.runyan.org"; + target = "sametab"; + statusCheck = true; + id = "11_836_collabora"; + }; + gatus = { + title = "Gatus"; + description = "status.neet.dev"; + icon = "hl-gatus"; + url = "https://status.neet.dev"; + target = "sametab"; + statusCheck = true; + id = "12_836_gatus"; }; }; servicesList = [ @@ -276,7 +331,12 @@ servicesItems.git servicesItems.nextcloud servicesItems.roundcube - servicesItems.jitsimeet + servicesItems.ntfy + servicesItems.librechat + servicesItems.owncast + servicesItems.navidrome-public + servicesItems.collabora + servicesItems.gatus ]; in { @@ -293,5 +353,169 @@ }; } ) + + ( + let + haItems = { + home-assistant = { + title = "Home Assistant"; + description = "ha.s0.neet.dev"; + icon = "hl-home-assistant"; + url = "https://ha.s0.neet.dev"; + target = "sametab"; + statusCheck = false; + id = "0_4201_home-assistant"; + }; + esphome = { + title = "ESPHome"; + description = "esphome.s0.neet.dev"; + icon = "hl-esphome"; + url = "https://esphome.s0.neet.dev"; + target = "sametab"; + statusCheck = false; + id = "1_4201_esphome"; + }; + zigbee2mqtt = { + title = "Zigbee2MQTT"; + description = "zigbee.s0.neet.dev"; + icon = "hl-zigbee2mqtt"; + url = "https://zigbee.s0.neet.dev"; + target = "sametab"; + statusCheck = false; + id = "2_4201_zigbee2mqtt"; + }; + frigate = { + title = "Frigate"; + description = "frigate.s0.neet.dev"; + icon = "hl-frigate"; + url = "https://frigate.s0.neet.dev"; + target = "sametab"; + statusCheck = false; + id = "3_4201_frigate"; + }; + valetudo = { + title = "Valetudo"; + description = "vacuum.s0.neet.dev"; + icon = "hl-valetudo"; + url = "https://vacuum.s0.neet.dev"; + target = "sametab"; + statusCheck = false; + id = "4_4201_valetudo"; + }; + sandman = { + title = "Sandman"; + description = "sandman.s0.neet.dev"; + icon = "fas fa-bed"; + url = "https://sandman.s0.neet.dev"; + target = "sametab"; + statusCheck = false; + id = "5_4201_sandman"; + }; + }; + haList = [ + haItems.home-assistant + haItems.esphome + haItems.zigbee2mqtt + haItems.frigate + haItems.valetudo + haItems.sandman + ]; + in + { + name = "Home Automation"; + icon = "fas fa-home"; + items = haList; + filteredItems = haList; + displayData = { + sortBy = "default"; + rows = 1; + cols = 1; + collapsed = false; + hideForGuests = false; + }; + } + ) + + ( + let + prodItems = { + vikunja = { + title = "Vikunja"; + description = "todo.s0.neet.dev"; + icon = "hl-vikunja"; + url = "https://todo.s0.neet.dev"; + target = "sametab"; + statusCheck = false; + id = "0_5301_vikunja"; + }; + actual = { + title = "Actual Budget"; + description = "budget.s0.neet.dev"; + icon = "hl-actual-budget"; + url = "https://budget.s0.neet.dev"; + target = "sametab"; + statusCheck = false; + id = "1_5301_actual"; + }; + linkwarden = { + title = "Linkwarden"; + description = "linkwarden.s0.neet.dev"; + icon = "hl-linkwarden"; + url = "https://linkwarden.s0.neet.dev"; + target = "sametab"; + statusCheck = false; + id = "2_5301_linkwarden"; + }; + memos = { + title = "Memos"; + description = "memos.s0.neet.dev"; + icon = "hl-memos"; + url = "https://memos.s0.neet.dev"; + target = "sametab"; + statusCheck = false; + id = "3_5301_memos"; + }; + outline = { + title = "Outline"; + description = "outline.s0.neet.dev"; + icon = "hl-outline"; + url = "https://outline.s0.neet.dev"; + target = "sametab"; + statusCheck = false; + id = "4_5301_outline"; + }; + languagetool = { + title = "LanguageTool"; + description = "languagetool.s0.neet.dev"; + icon = "hl-languagetool"; + url = "https://languagetool.s0.neet.dev"; + target = "sametab"; + statusCheck = false; + id = "5_5301_languagetool"; + }; + }; + prodList = [ + prodItems.vikunja + prodItems.actual + prodItems.linkwarden + prodItems.memos + prodItems.outline + prodItems.languagetool + ]; + in + { + name = "Productivity"; + icon = "fas fa-tasks"; + items = prodList; + filteredItems = prodList; + displayData = { + sortBy = "default"; + rows = 1; + cols = 1; + collapsed = false; + hideForGuests = false; + }; + } + ) ]; }