From 2d43ed36ea4eab6217fa4d1f7fbc1b5eac2c2854 Mon Sep 17 00:00:00 2001 From: marthsincemelee Date: Mon, 20 Apr 2026 16:34:27 +0200 Subject: [PATCH 1/2] feat: add homepage icons and Home Assistant entry --- modules/environments/actual/default.nix | 1 + modules/environments/audiobookshelf/default.nix | 1 + modules/environments/home-assistant/default.nix | 11 +++++++++++ modules/environments/homepage/default.nix | 13 +++++++++++-- modules/environments/jellyfin/default.nix | 1 + modules/environments/jellyseerr/default.nix | 1 + modules/environments/paperless/default.nix | 1 + modules/environments/prowlarr/default.nix | 1 + modules/environments/radarr/default.nix | 1 + modules/environments/readarr/default.nix | 1 + modules/environments/sonarr/default.nix | 1 + modules/services/webserver/default.nix | 8 ++++++++ 12 files changed, 39 insertions(+), 2 deletions(-) diff --git a/modules/environments/actual/default.nix b/modules/environments/actual/default.nix index 04d9759..7a2b9bf 100644 --- a/modules/environments/actual/default.nix +++ b/modules/environments/actual/default.nix @@ -36,6 +36,7 @@ in name = "Actual"; description = "Budgeting"; href = "http://${hostName}:${toString port}"; + icon = "mdi-cash"; } ]; diff --git a/modules/environments/audiobookshelf/default.nix b/modules/environments/audiobookshelf/default.nix index dd18837..80f511c 100644 --- a/modules/environments/audiobookshelf/default.nix +++ b/modules/environments/audiobookshelf/default.nix @@ -33,6 +33,7 @@ in name = "Audiobookshelf"; description = "Audiobooks and podcasts"; href = "http://${hostName}:63834"; + icon = "audiobookshelf.png"; } ]; diff --git a/modules/environments/home-assistant/default.nix b/modules/environments/home-assistant/default.nix index 231b0ed..7e6259f 100644 --- a/modules/environments/home-assistant/default.nix +++ b/modules/environments/home-assistant/default.nix @@ -7,6 +7,7 @@ }: let cfg = config.my.profiles.home-assistant; + hostName = config.networking.hostName; in { options.my.profiles.home-assistant = with lib; { @@ -25,5 +26,15 @@ in name = "Home - Rechberg"; unit_system = "metric"; }; + + my.homepage.services = [ + { + group = "Home"; + name = "Home Assistant"; + description = "Home automation"; + href = "http://${hostName}:8123"; + icon = "si-homeassistant"; + } + ]; }; } diff --git a/modules/environments/homepage/default.nix b/modules/environments/homepage/default.nix index 2d0a762..9ceba2c 100644 --- a/modules/environments/homepage/default.nix +++ b/modules/environments/homepage/default.nix @@ -27,11 +27,14 @@ let { ${group} = map ( entry: - { - ${entry.name} = builtins.removeAttrs entry [ + let + service = builtins.removeAttrs entry [ "group" "name" ]; + in + { + ${entry.name} = lib.filterAttrs (_: value: value != null) service; } ) entries; } @@ -62,6 +65,12 @@ in type = types.str; description = "Homepage service URL"; }; + + icon = mkOption { + type = types.nullOr types.str; + default = null; + description = "Optional Homepage service icon"; + }; }; } ); diff --git a/modules/environments/jellyfin/default.nix b/modules/environments/jellyfin/default.nix index b1989c2..f0d7646 100644 --- a/modules/environments/jellyfin/default.nix +++ b/modules/environments/jellyfin/default.nix @@ -28,6 +28,7 @@ in name = "Jellyfin"; description = "Media server"; href = "http://${hostName}:${toString port}"; + icon = "jellyfin.png"; } ]; diff --git a/modules/environments/jellyseerr/default.nix b/modules/environments/jellyseerr/default.nix index bbc96b6..2e783d3 100644 --- a/modules/environments/jellyseerr/default.nix +++ b/modules/environments/jellyseerr/default.nix @@ -22,6 +22,7 @@ in name = "Jellyseerr"; description = "Media requests"; href = "http://${hostName}:${toString port}"; + icon = "mdi-television-guide"; } ]; diff --git a/modules/environments/paperless/default.nix b/modules/environments/paperless/default.nix index 3a16110..f25a453 100644 --- a/modules/environments/paperless/default.nix +++ b/modules/environments/paperless/default.nix @@ -39,6 +39,7 @@ in name = "Paperless"; description = "Document management"; href = "http://${hostName}:${toString cfg.port}"; + icon = "paperless-ngx.png"; } ]; diff --git a/modules/environments/prowlarr/default.nix b/modules/environments/prowlarr/default.nix index 6b1f876..7e25462 100644 --- a/modules/environments/prowlarr/default.nix +++ b/modules/environments/prowlarr/default.nix @@ -29,6 +29,7 @@ in name = "Prowlarr"; description = "Indexer manager"; href = "http://${hostName}:${toString port}"; + icon = "prowlarr.png"; } ]; diff --git a/modules/environments/radarr/default.nix b/modules/environments/radarr/default.nix index c7a5cb6..36d2052 100644 --- a/modules/environments/radarr/default.nix +++ b/modules/environments/radarr/default.nix @@ -30,6 +30,7 @@ in name = "Radarr"; description = "Movie management"; href = "http://${hostName}:${toString port}"; + icon = "radarr.png"; } ]; diff --git a/modules/environments/readarr/default.nix b/modules/environments/readarr/default.nix index 33c20c1..f932fb5 100644 --- a/modules/environments/readarr/default.nix +++ b/modules/environments/readarr/default.nix @@ -30,6 +30,7 @@ in name = "Readarr"; description = "Book management"; href = "http://${hostName}:${toString port}"; + icon = "readarr.png"; } ]; diff --git a/modules/environments/sonarr/default.nix b/modules/environments/sonarr/default.nix index 1d2d6bf..b159b47 100644 --- a/modules/environments/sonarr/default.nix +++ b/modules/environments/sonarr/default.nix @@ -28,6 +28,7 @@ in name = "Sonarr"; description = "Series management"; href = "http://${hostName}:${toString port}"; + icon = "sonarr.png"; } ]; diff --git a/modules/services/webserver/default.nix b/modules/services/webserver/default.nix index 1d91bf9..5c92e42 100644 --- a/modules/services/webserver/default.nix +++ b/modules/services/webserver/default.nix @@ -48,6 +48,13 @@ let Optional homepage-dashboard description for this virtual host. ''; }; + icon = lib.mkOption { + type = lib.types.nullOr lib.types.str; + default = null; + description = '' + Optional homepage-dashboard icon for this virtual host. + ''; + }; }; port = lib.mkOption { type = with lib.types; nullOr port; @@ -158,6 +165,7 @@ in else "Web service"; href = "https://${vhost.subdomain}.${domain}"; + icon = vhost.homepage.icon; } ) (builtins.filter (vhost: vhost.homepage.enable) cfg.virtualHosts); From 9342809975868df2f6924af1dc552306b5796c1e Mon Sep 17 00:00:00 2001 From: marthsincemelee Date: Mon, 20 Apr 2026 18:19:49 +0200 Subject: [PATCH 2/2] feat: add manual homepage services file --- modules/environments/homepage/default.nix | 3 ++- modules/environments/homepage/manual-services.nix | 14 ++++++++++++++ 2 files changed, 16 insertions(+), 1 deletion(-) create mode 100644 modules/environments/homepage/manual-services.nix diff --git a/modules/environments/homepage/default.nix b/modules/environments/homepage/default.nix index 9ceba2c..b64dbcc 100644 --- a/modules/environments/homepage/default.nix +++ b/modules/environments/homepage/default.nix @@ -9,6 +9,7 @@ let dashboardPort = 8082; dashboardHost = config.networking.hostName; dashboardUrl = "http://${dashboardHost}:${toString dashboardPort}"; + manualServices = import ./manual-services.nix; groupedServices = lib.foldl' @@ -88,7 +89,7 @@ in listenPort = dashboardPort; allowedHosts = "${dashboardHost}:${toString dashboardPort},localhost:${toString dashboardPort},127.0.0.1:${toString dashboardPort},jupiter.solar.internal:${toString dashboardPort}"; bookmarks = import ./bookmarks.nix; - services = homepageServices; + services = homepageServices ++ manualServices; }; users.users.finn.packages = with pkgs; [ diff --git a/modules/environments/homepage/manual-services.nix b/modules/environments/homepage/manual-services.nix new file mode 100644 index 0000000..42c66de --- /dev/null +++ b/modules/environments/homepage/manual-services.nix @@ -0,0 +1,14 @@ +[ + # Example: + # { + # "Infrastructure" = [ + # { + # "Proxmox" = { + # href = "https://proxmox.example.local"; + # description = "Virtualization host"; + # icon = "proxmox.png"; + # }; + # } + # ]; + # } +]