diff --git a/hosts/manatee/modules/audiobookshelf/default.nix b/hosts/manatee/modules/audiobookshelf/default.nix
index 3a76565..666b7fe 100644
--- a/hosts/manatee/modules/audiobookshelf/default.nix
+++ b/hosts/manatee/modules/audiobookshelf/default.nix
@@ -10,6 +10,12 @@ in
};
config = lib.mkIf enabled {
+ mod.homepage.services = [{
+ name = "Audiobookshelf";
+ port = 8000;
+ description = "Audiobooks & podcasts";
+ }];
+
users.users.audiobookshelf = {
isSystemUser = true;
description = "audiobookshelf";
diff --git a/hosts/manatee/modules/calibre-web/default.nix b/hosts/manatee/modules/calibre-web/default.nix
index 356903c..0cfb8a3 100644
--- a/hosts/manatee/modules/calibre-web/default.nix
+++ b/hosts/manatee/modules/calibre-web/default.nix
@@ -10,6 +10,12 @@ in
};
config = lib.mkIf enabled {
+ mod.homepage.services = [{
+ name = "Calibre-Web";
+ port = 8083;
+ description = "E-book library";
+ }];
+
services = {
calibre-web = {
enable = true;
diff --git a/hosts/manatee/modules/default.nix b/hosts/manatee/modules/default.nix
index 189a7b9..d38ba8b 100644
--- a/hosts/manatee/modules/default.nix
+++ b/hosts/manatee/modules/default.nix
@@ -22,6 +22,7 @@ in
immich.enable = true;
navidrome.enable = true;
komga.enable = true;
+ homepage.enable = true;
};
};
}
diff --git a/hosts/manatee/modules/homepage/default.nix b/hosts/manatee/modules/homepage/default.nix
new file mode 100644
index 0000000..f669b5a
--- /dev/null
+++ b/hosts/manatee/modules/homepage/default.nix
@@ -0,0 +1,109 @@
+{
+ pkgs,
+ lib,
+ config,
+ ...
+}:
+let
+ enabled = config.mod.homepage.enable;
+ nginxEnabled = config.mod.nginx.enable;
+ services = config.mod.homepage.services;
+
+ serviceToCard = svc: ''
+
+ ${svc.name}
+ ${svc.description}
+ :${toString svc.port}
+
+ '';
+
+ page = pkgs.writeTextDir "index.html" ''
+
+
+
+
+
+ manatee
+
+
+
+ manatee
+
+ ${lib.concatMapStrings serviceToCard services}
+
+
+
+ '';
+in
+{
+ options = {
+ mod.homepage = {
+ enable = lib.mkEnableOption "Enable homepage module";
+ services = lib.mkOption {
+ type = lib.types.listOf (lib.types.submodule {
+ options = {
+ name = lib.mkOption { type = lib.types.str; };
+ port = lib.mkOption { type = lib.types.port; };
+ description = lib.mkOption { type = lib.types.str; };
+ };
+ });
+ default = [ ];
+ description = "Services to display on the homepage";
+ };
+ };
+ };
+
+ config = lib.mkIf (enabled && nginxEnabled) {
+ services.nginx.virtualHosts."homepage" = {
+ listen = [
+ {
+ addr = "0.0.0.0";
+ port = 80;
+ }
+ ];
+ root = page;
+ locations."/" = {
+ index = "index.html";
+ };
+ };
+
+ networking.firewall.allowedTCPPorts = [ 80 ];
+ };
+}
diff --git a/hosts/manatee/modules/immich/default.nix b/hosts/manatee/modules/immich/default.nix
index ac7410d..a171237 100644
--- a/hosts/manatee/modules/immich/default.nix
+++ b/hosts/manatee/modules/immich/default.nix
@@ -10,6 +10,12 @@ in
};
config = lib.mkIf enabled {
+ mod.homepage.services = [{
+ name = "Immich";
+ port = 2283;
+ description = "Photo library";
+ }];
+
users.users.immich = {
isSystemUser = true;
group = "storage";
diff --git a/hosts/manatee/modules/jellyfin/default.nix b/hosts/manatee/modules/jellyfin/default.nix
index 6895a72..2ea2097 100644
--- a/hosts/manatee/modules/jellyfin/default.nix
+++ b/hosts/manatee/modules/jellyfin/default.nix
@@ -47,6 +47,12 @@ in
};
};
+ mod.homepage.services = [{
+ name = "Jellyfin";
+ port = 8096;
+ description = "Media streaming";
+ }];
+
networking = {
firewall.allowedTCPPorts = [ 8096 ];
};
diff --git a/hosts/manatee/modules/komga/default.nix b/hosts/manatee/modules/komga/default.nix
index 2488969..c83ad12 100644
--- a/hosts/manatee/modules/komga/default.nix
+++ b/hosts/manatee/modules/komga/default.nix
@@ -19,6 +19,19 @@ in
imports = [ inputs.komga-comictracker.nixosModules.default ];
config = lib.mkIf enabled {
+ mod.homepage.services = [
+ {
+ name = "Komga";
+ port = 8002;
+ description = "Comic library";
+ }
+ {
+ name = "Komga Reader";
+ port = 8888;
+ description = "Comic reader";
+ }
+ ];
+
users.users.komga = {
isSystemUser = true;
group = "storage";
diff --git a/hosts/manatee/modules/navidrome/default.nix b/hosts/manatee/modules/navidrome/default.nix
index d93de23..7cbb113 100644
--- a/hosts/manatee/modules/navidrome/default.nix
+++ b/hosts/manatee/modules/navidrome/default.nix
@@ -15,6 +15,12 @@ in
};
config = {
+ mod.homepage.services = lib.mkIf navidromeEnabled [{
+ name = "Navidrome";
+ port = 4533;
+ description = "Music streaming";
+ }];
+
services = lib.mkIf navidromeEnabled {
navidrome = {
enable = true;
diff --git a/hosts/manatee/modules/syncthing/default.nix b/hosts/manatee/modules/syncthing/default.nix
index 40b6b00..dccdb44 100644
--- a/hosts/manatee/modules/syncthing/default.nix
+++ b/hosts/manatee/modules/syncthing/default.nix
@@ -10,6 +10,12 @@ in
};
config = lib.mkIf enabled {
+ mod.homepage.services = [{
+ name = "Syncthing";
+ port = 8384;
+ description = "File sync";
+ }];
+
services.syncthing = {
enable = true;
diff --git a/hosts/manatee/modules/transmission/default.nix b/hosts/manatee/modules/transmission/default.nix
index 76e50c5..435a11d 100644
--- a/hosts/manatee/modules/transmission/default.nix
+++ b/hosts/manatee/modules/transmission/default.nix
@@ -15,6 +15,12 @@ in
};
config = lib.mkIf enabled {
+ mod.homepage.services = [{
+ name = "Transmission";
+ port = 9091;
+ description = "Torrent client";
+ }];
+
services = {
transmission = {
enable = true;