{ lib, config, proxyReverse, setup, ... }: let services = import ./homepage/services.nix { inherit config lib; }; cfg = config.my.servers.homepage; in { options.my.servers.homepage = setup.mkOptions "homepage" "home" 8082; config = { networking.firewall.allowedTCPPorts = lib.mkIf (!cfg.isLocal) [ cfg.port ]; sops.secrets = lib.mkIf cfg.enable { homepage.sopsFile = ../../secrets/homepage.yaml; }; services = { homepage-dashboard = lib.mkIf cfg.enable { enable = true; listenPort = cfg.port; environmentFile = config.sops.secrets.homepage.path; settings = { layout = { stash = { header = false; tab = "secret"; style = "row"; }; multimedia = { header = false; tab = "servers"; style = "row"; columns = 4; }; piracy = { header = false; tab = "servers"; style = "row"; columns = 4; }; main = { header = false; tab = "servers"; style = "row"; columns = 3; }; "server bookmarks" = { header = false; tab = "servers"; style = "row"; columns = 3; }; art.tab = "bookmarks"; entertainment.tab = "bookmarks"; torrents.tab = "bookmarks"; shopping.tab = "bookmarks"; social.tab = "bookmarks"; development.tab = "bookmarks"; "secret art".tab = "secret"; "secret media".tab = "secret"; "secret social".tab = "secret"; }; }; widgets = [ { resources = { cpu = true; cputemp = true; units = "metric"; disk = "/"; memory = true; }; } { search = { provider = [ "brave" "bing" "google" ]; target = "_blank"; showSearchSuggestions = true; }; } ]; services = [ { "stash" = [ { inherit (services) stash; } ]; } { "multimedia" = [ { inherit (services) jellyfin; } { inherit (services) "now playing"; } { inherit (services) audiobookshelf; } { inherit (services) kavita; } ]; } { "piracy" = [ { inherit (services) sonarr; } { inherit (services) radarr; } { inherit (services) lidarr; } { inherit (services) bazarr; } { inherit (services) prowlarr; } { inherit (services) sabnzbd; } { inherit (services) "qbittorrent server"; } { inherit (services) "qbittorrent miniserver"; } ]; } { "main" = [ { inherit (services) nextcloud; } { inherit (services) mealie; } { inherit (services) paperless; } ]; } ]; bookmarks = [ (import ./homepage/bookmarks/servers.nix) (import ./homepage/bookmarks/art.nix) (import ./homepage/bookmarks/entertainment.nix) (import ./homepage/bookmarks/torrents.nix) (import ./homepage/bookmarks/shopping.nix) (import ./homepage/bookmarks/social.nix) (import ./homepage/bookmarks/development.nix) (import ./homepage/bookmarks/secret-art.nix) (import ./homepage/bookmarks/secret-media.nix) (import ./homepage/bookmarks/secret-social.nix) ]; }; nginx.virtualHosts."${cfg.host}" = lib.mkIf cfg.enableProxy ( proxyReverse cfg.hostName cfg.port // { } ); }; }; }