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);