Name of the webapp dir to create in /run/current-system
'';
};
- webappDirsPath = mkOption {
- type = str;
- readOnly = true;
- description = ''
- Full path of the webapp dir
- '';
- default = "/run/current-system/${cfg.webappDirsName}";
- };
env = mkOption {
default = {};
description = "Each type of website to enable will target a distinct httpd server";
};
};
};
+ vhostNoSSLConfs = mkOption {
+ default = {};
+ description = "List of no ssl vhosts to define for Apache";
+ type = attrsOf (submodule {
+ options = {
+ hosts = mkOption { type = listOf string; };
+ root = mkOption { type = nullOr path; };
+ extraConfig = mkOption { type = listOf lines; default = []; };
+ };
+ });
+ };
vhostConfs = mkOption {
default = {};
description = "List of vhosts to define for Apache";
};
});
};
+ # Readonly variables
+ webappDirsPaths = mkOption {
+ type = attrsOf path;
+ readOnly = true;
+ description = ''
+ Full paths of the webapp dir
+ '';
+ default = attrsets.mapAttrs' (name: icfg: attrsets.nameValuePair
+ name "/run/current-system/${cfg.webappDirsName}/${name}"
+ ) cfg.webappDirs;
+ };
};
config.services.httpd = let
documentRoot = vhostConf.root;
extraConfig = builtins.concatStringsSep "\n" vhostConf.extraConfig;
};
+ toVhostNoSSL = ips: vhostConf: {
+ enableSSL = false;
+ logFormat = "combinedVhost";
+ listen = map (ip: { inherit ip; port = 80; }) ips;
+ hostName = builtins.head vhostConf.hosts;
+ serverAliases = builtins.tail vhostConf.hosts or [];
+ documentRoot = vhostConf.root;
+ extraConfig = builtins.concatStringsSep "\n" vhostConf.extraConfig;
+ };
in attrsets.mapAttrs' (name: icfg: attrsets.nameValuePair
icfg.httpdName (mkIf icfg.enable {
enable = true;
extraConfig = builtins.concatStringsSep "\n" icfg.extraConfig;
virtualHosts = [ (toVhost icfg.ips icfg.fallbackVhost) ]
++ optionals (icfg.nosslVhost.enable) [ (nosslVhost icfg.ips icfg.nosslVhost) ]
+ ++ (attrsets.mapAttrsToList (n: v: toVhostNoSSL icfg.ips v) icfg.vhostNoSSLConfs)
++ (attrsets.mapAttrsToList (n: v: toVhost icfg.ips v) icfg.vhostConfs)
++ [ (redirectVhost icfg.ips) ];
})