{ lib, config, ... }: let services = import ./homepage/services.nix { inherit config lib; }; cfg = config.my.servers.homepage; setup = import ./setup.nix { inherit lib config; }; 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 = let bookmarkFiles = builtins.filter (file: builtins.match ".*\\.nix" file != null) ( builtins.attrNames (builtins.readDir ./homepage/bookmarks) ); in map (file: import ./homepage/bookmarks/${file}) bookmarkFiles; }; nginx.virtualHosts."${cfg.host}" = lib.mkIf cfg.enableProxy ( setup.proxyReverse cfg.hostName cfg.port // { } ); }; }; }