{ lib, config, pkgs, ... }: let serviceBase = { enable = true; group = "piracy"; }; proxy = locations: { inherit locations; forceSSL = true; enableACME = true; http2 = true; }; proxyReverse = port: proxy { "/".proxyPass = "http://${config.my.servers.settings.localhost}:${toString port}/"; }; proxyReverseArr = port: proxy port // { extraConfig = '' proxy_set_header Host $host; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Host $host; proxy_set_header X-Forwarded-Proto $scheme; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection $http_connection; proxy_redirect off; proxy_http_version 1.1; ''; }; enableDocker = lib.any (opt: opt) [ config.my.servers.collabora.enable config.my.servers.go-vod.enable ]; in { imports = [ (import ./servers/jellyfin.nix { inherit lib config pkgs serviceBase; }) (import ./servers/nextcloud.nix { inherit lib config pkgs serviceBase; }) (import ./servers/microbin.nix { inherit lib config proxyReverse; }) ]; options.my.servers.settings = { localhost = lib.mkOption { type = lib.types.str; default = "127.0.0.1"; description = "The localhost address."; }; domain = lib.mkOption { type = lib.types.str; default = "servidos.lat"; description = "The domain name."; }; postgresSocket = lib.mkOption { type = lib.types.str; default = "/run/postgresql"; description = "The PostgreSQL socket path."; }; }; config = { my.servers = { jellyfin = { enable = lib.mkDefault false; enableCron = lib.mkDefault false; }; nextcloud = { enable = lib.mkDefault false; enableCron = lib.mkDefault false; }; collabora.enable = lib.mkDefault false; go-vod.enable = lib.mkDefault false; microbin.enable = lib.mkDefault false; }; virtualisation.docker = lib.mkIf enableDocker { enable = true; enableNvidia = true; autoPrune = { enable = true; flags = [ "--all" ]; dates = "weekly"; }; }; }; }