59 lines
1.4 KiB
Nix
59 lines
1.4 KiB
Nix
{ lib, ... }:
|
|
let
|
|
inherit (builtins) toString;
|
|
inherit (lib)
|
|
mkMerge
|
|
mkEnableOption
|
|
singleton
|
|
mkIf
|
|
;
|
|
inherit (lib.pantheon) mkRootDomain mkPortOption mkStrOption;
|
|
networkingConfig =
|
|
{
|
|
config,
|
|
cfg,
|
|
name,
|
|
}:
|
|
mkIf (cfg.domain != "") {
|
|
assertions = singleton {
|
|
assertion = config.server.web-servers.nginx.enable;
|
|
message = "You must enable a web server if you want to set server.web-apps.${name}.domain.";
|
|
};
|
|
server.networking.ddns.domains = singleton (mkRootDomain cfg.domain);
|
|
server.web-servers.nginx.proxies = singleton {
|
|
source = cfg.domain;
|
|
target = "http://${config.system.hostname}:${toString cfg.port}";
|
|
};
|
|
};
|
|
in
|
|
{
|
|
modules.mkWebApp =
|
|
{
|
|
config,
|
|
name,
|
|
defaultPort,
|
|
persistDirs ? [ ],
|
|
extraOptions ? { },
|
|
extraConfig ? { },
|
|
}:
|
|
let
|
|
cfg = config.server.web-apps.${name};
|
|
in
|
|
{
|
|
options.server.web-apps.${name} = {
|
|
enable = mkEnableOption "";
|
|
port = mkPortOption defaultPort;
|
|
domain = mkStrOption;
|
|
openFirewall = mkEnableOption "";
|
|
} // extraOptions;
|
|
|
|
config = mkIf cfg.enable (mkMerge [
|
|
{
|
|
inherit persistDirs;
|
|
networking.firewall = mkIf cfg.openFirewall { allowedTCPPorts = singleton cfg.port; };
|
|
}
|
|
(networkingConfig { inherit config cfg name; })
|
|
extraConfig
|
|
]);
|
|
};
|
|
}
|