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;