{ config, lib, ... }: with lib; let cfg = config.nixfiles.modules.hydra; in { options.nixfiles.modules.hydra = { enable = mkEnableOption "Hydra"; domain = mkOption { description = "Domain name sans protocol scheme."; type = with types; str; default = "hydra.${config.networking.domain}"; }; port = mkOption { description = "Port."; type = with types; port; default = 7754; }; }; config = mkIf cfg.enable { nixfiles.modules = { nginx = { enable = true; upstreams.hydra.servers."127.0.0.1:${toString cfg.port}" = {}; virtualHosts.${cfg.domain}.locations."/".proxyPass = "http://hydra"; }; postgresql.enable = true; }; services = let db = "hydra"; in { hydra = { enable = true; listenHost = "127.0.0.1"; inherit (cfg) port; dbi = "dbi:Pg:dbname=${db};user=${db}"; hydraURL = cfg.domain; }; postgresql = { ensureDatabases = [db]; ensureUsers = [ { name = db; ensurePermissions."DATABASE \"${db}\"" = "ALL"; } ]; }; }; }; }