From 1c80dbef8b69edcdf20a18a0f21434d17416cef5 Mon Sep 17 00:00:00 2001 From: SebastianStork Date: Tue, 10 Mar 2026 15:28:35 +0100 Subject: [PATCH 1/2] glance: Group sites more sensibly --- modules/nixos/meta/services.nix | 8 +++- modules/nixos/web-services/glance.nix | 64 ++++++++++++++++++++------- 2 files changed, 55 insertions(+), 17 deletions(-) diff --git a/modules/nixos/meta/services.nix b/modules/nixos/meta/services.nix index fee970a..d8d6b8a 100644 --- a/modules/nixos/meta/services.nix +++ b/modules/nixos/meta/services.nix @@ -3,16 +3,20 @@ options.custom.meta.services = lib.mkOption { type = lib.types.attrsOf ( lib.types.submodule ( - { name, ... }: + { name, config, ... }: { options = { title = lib.mkOption { type = lib.types.nonEmptyStr; default = name; }; + domain = lib.mkOption { + type = lib.types.nonEmptyStr; + default = name; + }; url = lib.mkOption { type = lib.types.nonEmptyStr; - default = "https://${name}"; + default = "https://${config.domain}"; }; icon = lib.mkOption { type = lib.types.nonEmptyStr; diff --git a/modules/nixos/web-services/glance.nix b/modules/nixos/web-services/glance.nix index 498e91c..c5dbd18 100644 --- a/modules/nixos/web-services/glance.nix +++ b/modules/nixos/web-services/glance.nix @@ -1,5 +1,6 @@ { config, + self, lib, allHosts, ... @@ -7,23 +8,55 @@ let cfg = config.custom.web-services.glance; - servicesWidgets = - allHosts - |> lib.attrValues - |> lib.map (host: { - hostName = host.config.networking.hostName; - services = host.config.custom.meta.services |> lib.attrValues; - }) - |> lib.filter ({ services, ... }: services != [ ]) - |> lib.map ( - { hostName, services }: - { + observabilityTitles = [ + "Alloy" + "Prometheus" + "Alertmanager" + ]; + + hosts = allHosts |> lib.attrValues; + + applicationSites = + hosts + |> lib.concatMap (host: host.config.custom.meta.services |> lib.attrValues) + |> lib.filter (service: !lib.elem service.title observabilityTitles) + |> lib.groupBy ( + service: + service.domain |> self.lib.isPrivateDomain |> (isPrivate: if isPrivate then "Private" else "Public") + ) + |> lib.mapAttrsToList ( + name: value: { type = "monitor"; cache = "1m"; - title = "Services - ${hostName}"; - sites = services; + title = "${name} Services"; + sites = value; } - ); + ) + |> (widgets: { + type = "split-column"; + max-columns = 2; + inherit widgets; + }) + |> lib.singleton; + + observabilitySites = + hosts + |> lib.map (host: { + type = "monitor"; + cache = "1m"; + title = host.config.networking.hostName; + sites = + host.config.custom.meta.services + |> lib.attrValues + |> lib.filter (service: lib.elem service.title observabilityTitles); + }) + |> lib.filter ({ sites, ... }: sites != [ ]) + |> (widgets: { + type = "split-column"; + max-columns = widgets |> lib.length; + inherit widgets; + }) + |> lib.singleton; in { options.custom.web-services.glance = { @@ -57,7 +90,8 @@ in search-engine = "google"; autofocus = true; } - ++ servicesWidgets; + ++ applicationSites + ++ observabilitySites; }; }; }; From 19548f848609a923c59b434b9cb49b855a35e831 Mon Sep 17 00:00:00 2001 From: SebastianStork Date: Tue, 10 Mar 2026 15:36:37 +0100 Subject: [PATCH 2/2] meta/sites: Rename from `meta.services` --- modules/nixos/meta/{services.nix => sites.nix} | 2 +- modules/nixos/services/alertmanager.nix | 2 +- modules/nixos/services/alloy.nix | 2 +- modules/nixos/services/prometheus.nix | 2 +- modules/nixos/services/syncthing.nix | 2 +- modules/nixos/web-services/actualbudget.nix | 2 +- modules/nixos/web-services/atuin.nix | 2 +- modules/nixos/web-services/filebrowser.nix | 2 +- modules/nixos/web-services/forgejo.nix | 2 +- modules/nixos/web-services/freshrss.nix | 2 +- modules/nixos/web-services/gatus.nix | 2 +- modules/nixos/web-services/glance.nix | 4 ++-- modules/nixos/web-services/grafana.nix | 2 +- modules/nixos/web-services/it-tools.nix | 2 +- modules/nixos/web-services/karakeep.nix | 2 +- modules/nixos/web-services/networking-toolbox.nix | 2 +- modules/nixos/web-services/ntfy.nix | 2 +- modules/nixos/web-services/outline.nix | 2 +- modules/nixos/web-services/personal-blog.nix | 2 +- modules/nixos/web-services/privatebin.nix | 2 +- modules/nixos/web-services/radicale.nix | 2 +- modules/nixos/web-services/screego.nix | 2 +- modules/nixos/web-services/stirling-pdf.nix | 2 +- 23 files changed, 24 insertions(+), 24 deletions(-) rename modules/nixos/meta/{services.nix => sites.nix} (93%) diff --git a/modules/nixos/meta/services.nix b/modules/nixos/meta/sites.nix similarity index 93% rename from modules/nixos/meta/services.nix rename to modules/nixos/meta/sites.nix index d8d6b8a..8f34e21 100644 --- a/modules/nixos/meta/services.nix +++ b/modules/nixos/meta/sites.nix @@ -1,6 +1,6 @@ { lib, ... }: { - options.custom.meta.services = lib.mkOption { + options.custom.meta.sites = lib.mkOption { type = lib.types.attrsOf ( lib.types.submodule ( { name, config, ... }: diff --git a/modules/nixos/services/alertmanager.nix b/modules/nixos/services/alertmanager.nix index 977b3a5..88bb9b7 100644 --- a/modules/nixos/services/alertmanager.nix +++ b/modules/nixos/services/alertmanager.nix @@ -101,7 +101,7 @@ in custom = { services.caddy.virtualHosts.${cfg.domain}.port = cfg.port; - meta.services.${cfg.domain} = { + meta.sites.${cfg.domain} = { title = "Alertmanager"; icon = "sh:prometheus"; }; diff --git a/modules/nixos/services/alloy.nix b/modules/nixos/services/alloy.nix index 24543d4..9445f85 100644 --- a/modules/nixos/services/alloy.nix +++ b/modules/nixos/services/alloy.nix @@ -131,7 +131,7 @@ in custom = { services.caddy.virtualHosts.${cfg.domain}.port = lib.mkIf (cfg.domain != null) cfg.port; - meta.services.${cfg.domain} = lib.mkIf (cfg.domain != null) { + meta.sites.${cfg.domain} = lib.mkIf (cfg.domain != null) { title = "Alloy"; icon = "sh:grafana-alloy"; }; diff --git a/modules/nixos/services/prometheus.nix b/modules/nixos/services/prometheus.nix index 5139fe8..ef20489 100644 --- a/modules/nixos/services/prometheus.nix +++ b/modules/nixos/services/prometheus.nix @@ -126,7 +126,7 @@ in persistence.directories = [ "/var/lib/${config.services.prometheus.stateDir}" ]; - meta.services.${cfg.domain} = { + meta.sites.${cfg.domain} = { title = "Prometheus"; icon = "sh:prometheus"; }; diff --git a/modules/nixos/services/syncthing.nix b/modules/nixos/services/syncthing.nix index 27703c0..1505b3f 100644 --- a/modules/nixos/services/syncthing.nix +++ b/modules/nixos/services/syncthing.nix @@ -171,7 +171,7 @@ in persistence.directories = [ dataDir ]; - meta.services.${cfg.gui.domain} = lib.mkIf (cfg.gui.domain != null) { + meta.sites.${cfg.gui.domain} = lib.mkIf (cfg.gui.domain != null) { title = "Syncthing"; icon = "sh:syncthing"; }; diff --git a/modules/nixos/web-services/actualbudget.nix b/modules/nixos/web-services/actualbudget.nix index ec1a616..6b6b59b 100644 --- a/modules/nixos/web-services/actualbudget.nix +++ b/modules/nixos/web-services/actualbudget.nix @@ -53,7 +53,7 @@ in persistence.directories = [ dataDir ]; - meta.services.${cfg.domain} = { + meta.sites.${cfg.domain} = { title = "Actual Budget"; icon = "sh:actual-budget"; }; diff --git a/modules/nixos/web-services/atuin.nix b/modules/nixos/web-services/atuin.nix index f655aae..73fcca4 100644 --- a/modules/nixos/web-services/atuin.nix +++ b/modules/nixos/web-services/atuin.nix @@ -48,7 +48,7 @@ in persistence.directories = [ dataDir ]; - meta.services.${cfg.domain} = { + meta.sites.${cfg.domain} = { title = "Atuin"; icon = "sh:atuin"; }; diff --git a/modules/nixos/web-services/filebrowser.nix b/modules/nixos/web-services/filebrowser.nix index 0683e7c..b0d5b7b 100644 --- a/modules/nixos/web-services/filebrowser.nix +++ b/modules/nixos/web-services/filebrowser.nix @@ -49,7 +49,7 @@ in persistence.directories = [ dataDir ]; - meta.services.${cfg.domain} = { + meta.sites.${cfg.domain} = { title = "File Browser"; icon = "sh:file-browser"; }; diff --git a/modules/nixos/web-services/forgejo.nix b/modules/nixos/web-services/forgejo.nix index 4a2083a..2c7859a 100644 --- a/modules/nixos/web-services/forgejo.nix +++ b/modules/nixos/web-services/forgejo.nix @@ -84,7 +84,7 @@ in persistence.directories = [ config.services.forgejo.stateDir ]; - meta.services.${cfg.domain} = { + meta.sites.${cfg.domain} = { title = "Forgejo"; icon = "sh:forgejo"; }; diff --git a/modules/nixos/web-services/freshrss.nix b/modules/nixos/web-services/freshrss.nix index bb749e6..5b73c1f 100644 --- a/modules/nixos/web-services/freshrss.nix +++ b/modules/nixos/web-services/freshrss.nix @@ -50,7 +50,7 @@ in persistence.directories = [ dataDir ]; - meta.services.${cfg.domain} = { + meta.sites.${cfg.domain} = { title = "FreshRSS"; icon = "sh:freshrss"; }; diff --git a/modules/nixos/web-services/gatus.nix b/modules/nixos/web-services/gatus.nix index c1e049e..1779501 100644 --- a/modules/nixos/web-services/gatus.nix +++ b/modules/nixos/web-services/gatus.nix @@ -211,7 +211,7 @@ in persistence.directories = [ dataDir ]; - meta.services.${cfg.domain} = { + meta.sites.${cfg.domain} = { title = "Gatus"; icon = "sh:gatus"; }; diff --git a/modules/nixos/web-services/glance.nix b/modules/nixos/web-services/glance.nix index c5dbd18..a3f2e13 100644 --- a/modules/nixos/web-services/glance.nix +++ b/modules/nixos/web-services/glance.nix @@ -18,7 +18,7 @@ let applicationSites = hosts - |> lib.concatMap (host: host.config.custom.meta.services |> lib.attrValues) + |> lib.concatMap (host: host.config.custom.meta.sites |> lib.attrValues) |> lib.filter (service: !lib.elem service.title observabilityTitles) |> lib.groupBy ( service: @@ -46,7 +46,7 @@ let cache = "1m"; title = host.config.networking.hostName; sites = - host.config.custom.meta.services + host.config.custom.meta.sites |> lib.attrValues |> lib.filter (service: lib.elem service.title observabilityTitles); }) diff --git a/modules/nixos/web-services/grafana.nix b/modules/nixos/web-services/grafana.nix index e3c3909..7f77d36 100644 --- a/modules/nixos/web-services/grafana.nix +++ b/modules/nixos/web-services/grafana.nix @@ -88,7 +88,7 @@ in custom = { services.caddy.virtualHosts.${cfg.domain}.port = cfg.port; - meta.services.${cfg.domain} = { + meta.sites.${cfg.domain} = { title = "Grafana"; icon = "sh:grafana"; }; diff --git a/modules/nixos/web-services/it-tools.nix b/modules/nixos/web-services/it-tools.nix index 6ad12a2..eaf4a56 100644 --- a/modules/nixos/web-services/it-tools.nix +++ b/modules/nixos/web-services/it-tools.nix @@ -20,7 +20,7 @@ in custom = { services.caddy.virtualHosts.${cfg.domain}.files = "${pkgs.it-tools}/lib"; - meta.services.${cfg.domain} = { + meta.sites.${cfg.domain} = { title = "IT-Tools"; icon = "sh:it-tools"; }; diff --git a/modules/nixos/web-services/karakeep.nix b/modules/nixos/web-services/karakeep.nix index a796faf..645a309 100644 --- a/modules/nixos/web-services/karakeep.nix +++ b/modules/nixos/web-services/karakeep.nix @@ -58,7 +58,7 @@ in "/var/lib/meilisearch" ]; - meta.services.${cfg.domain} = { + meta.sites.${cfg.domain} = { title = "Karakeep"; icon = "sh:karakeep"; }; diff --git a/modules/nixos/web-services/networking-toolbox.nix b/modules/nixos/web-services/networking-toolbox.nix index fee4ba3..571d4fe 100644 --- a/modules/nixos/web-services/networking-toolbox.nix +++ b/modules/nixos/web-services/networking-toolbox.nix @@ -25,7 +25,7 @@ in custom = { services.caddy.virtualHosts.${cfg.domain}.port = cfg.port; - meta.services.${cfg.domain} = { + meta.sites.${cfg.domain} = { title = "Networking Toolbox"; icon = "sh:networking-toolbox"; }; diff --git a/modules/nixos/web-services/ntfy.nix b/modules/nixos/web-services/ntfy.nix index 5067d4f..9020244 100644 --- a/modules/nixos/web-services/ntfy.nix +++ b/modules/nixos/web-services/ntfy.nix @@ -29,7 +29,7 @@ in custom = { services.caddy.virtualHosts.${cfg.domain}.port = cfg.port; - meta.services.${cfg.domain} = { + meta.sites.${cfg.domain} = { title = "ntfy"; icon = "sh:ntfy"; }; diff --git a/modules/nixos/web-services/outline.nix b/modules/nixos/web-services/outline.nix index 767c0e5..b87f5a3 100644 --- a/modules/nixos/web-services/outline.nix +++ b/modules/nixos/web-services/outline.nix @@ -86,7 +86,7 @@ in config.services.postgresql.dataDir ]; - meta.services.${cfg.domain} = { + meta.sites.${cfg.domain} = { title = "Outline"; icon = "sh:outline"; }; diff --git a/modules/nixos/web-services/personal-blog.nix b/modules/nixos/web-services/personal-blog.nix index 18e37b8..aa6ad14 100644 --- a/modules/nixos/web-services/personal-blog.nix +++ b/modules/nixos/web-services/personal-blog.nix @@ -30,7 +30,7 @@ in custom = { services.caddy.virtualHosts.${cfg.domain}.files = dataDir; - meta.services.${cfg.domain} = { + meta.sites.${cfg.domain} = { title = "Blog"; icon = "sh:hugo"; }; diff --git a/modules/nixos/web-services/privatebin.nix b/modules/nixos/web-services/privatebin.nix index a708bb6..bac9069 100644 --- a/modules/nixos/web-services/privatebin.nix +++ b/modules/nixos/web-services/privatebin.nix @@ -40,7 +40,7 @@ in custom = { services.caddy.virtualHosts.${cfg.domain}.port = cfg.port; - meta.services.${cfg.domain} = { + meta.sites.${cfg.domain} = { title = "PrivateBin"; icon = "sh:privatebin"; }; diff --git a/modules/nixos/web-services/radicale.nix b/modules/nixos/web-services/radicale.nix index ab87975..5b7af72 100644 --- a/modules/nixos/web-services/radicale.nix +++ b/modules/nixos/web-services/radicale.nix @@ -110,7 +110,7 @@ in persistence.directories = [ dataDir ]; - meta.services.${cfg.domain} = { + meta.sites.${cfg.domain} = { title = "Radicale"; icon = "sh:radicale"; }; diff --git a/modules/nixos/web-services/screego.nix b/modules/nixos/web-services/screego.nix index 1f8d820..3f38bb6 100644 --- a/modules/nixos/web-services/screego.nix +++ b/modules/nixos/web-services/screego.nix @@ -29,7 +29,7 @@ in custom = { services.caddy.virtualHosts.${cfg.domain}.port = cfg.port; - meta.services.${cfg.domain} = { + meta.sites.${cfg.domain} = { title = "Screego"; icon = "mdi:projector-screen-outline"; }; diff --git a/modules/nixos/web-services/stirling-pdf.nix b/modules/nixos/web-services/stirling-pdf.nix index 97382e4..269e6e1 100644 --- a/modules/nixos/web-services/stirling-pdf.nix +++ b/modules/nixos/web-services/stirling-pdf.nix @@ -43,7 +43,7 @@ in custom = { services.caddy.virtualHosts.${cfg.domain}.port = cfg.port; - meta.services.${cfg.domain} = { + meta.sites.${cfg.domain} = { title = "Stirling PDF"; icon = "sh:stirling-pdf"; };