mirror of
https://github.com/gensokyo-zone/infrastructure.git
synced 2026-02-09 20:39:18 -08:00
94 lines
2.7 KiB
Nix
94 lines
2.7 KiB
Nix
let
|
|
locationModule = {
|
|
config,
|
|
virtualHost,
|
|
nixosConfig,
|
|
xvars,
|
|
gensokyo-zone,
|
|
lib,
|
|
...
|
|
}: let
|
|
inherit (gensokyo-zone.lib) mapOptionDefaults mkAlmostBefore mkJustAfter mkAlmostOptionDefault;
|
|
inherit (lib.options) mkOption mkEnableOption;
|
|
inherit (lib.modules) mkIf mkMerge;
|
|
inherit (lib.attrsets) attrNames filterAttrs mapAttrsToList;
|
|
inherit (lib.trivial) id;
|
|
inherit (nixosConfig.services) nginx;
|
|
cfg = config.fastcgi;
|
|
passHeaders = attrNames (filterAttrs (_: id) cfg.passHeaders);
|
|
params = filterAttrs (_: value: value != null) cfg.params;
|
|
in {
|
|
options.fastcgi = with lib.types; {
|
|
enable = mkEnableOption "fastcgi_pass";
|
|
phpfpmPool = mkOption {
|
|
type = nullOr str;
|
|
default = null;
|
|
};
|
|
includeDefaults = mkOption {
|
|
type = bool;
|
|
default = true;
|
|
};
|
|
passHeaders = mkOption {
|
|
type = attrsOf bool;
|
|
default = { };
|
|
description = "fastcgi_pass_header";
|
|
};
|
|
socket = mkOption {
|
|
type = nullOr path;
|
|
};
|
|
params = mkOption {
|
|
type = attrsOf (nullOr str);
|
|
};
|
|
};
|
|
|
|
config = {
|
|
fastcgi = {
|
|
socket = mkIf (cfg.phpfpmPool != null) (mkAlmostOptionDefault
|
|
nixosConfig.services.phpfpm.pools.${cfg.phpfpmPool}.socket
|
|
);
|
|
params = mapOptionDefaults {
|
|
HTTPS = "${xvars.get.https} if_not_empty";
|
|
REQUEST_SCHEME = xvars.get.scheme;
|
|
HTTP_HOST = xvars.get.host;
|
|
HTTP_REFERER = "${xvars.get.referer} if_not_empty";
|
|
REMOTE_ADDR = xvars.get.remote_addr;
|
|
# TODO: SERVER_ADDR
|
|
# TODO: SERVER_PORT
|
|
# TODO: SERVER_NAME?
|
|
};
|
|
};
|
|
extraConfig = let
|
|
passHeadersConfig = map (header: "fastcgi_pass_header ${xvars.escapeString header};") passHeaders;
|
|
paramsConfig = mapAttrsToList (param: value: mkJustAfter "fastcgi_param ${param} ${xvars.escapeString value};") params;
|
|
in mkIf cfg.enable (mkMerge ([
|
|
(mkIf cfg.includeDefaults (mkAlmostBefore ''
|
|
include ${nginx.package}/conf/fastcgi.conf;
|
|
''))
|
|
(mkIf (cfg.socket != null) (mkJustAfter ''
|
|
fastcgi_pass unix:${cfg.socket};
|
|
''))
|
|
] ++ passHeadersConfig
|
|
++ paramsConfig));
|
|
};
|
|
};
|
|
hostModule = {config, lib, ...}: let
|
|
inherit (lib.options) mkOption;
|
|
in {
|
|
options = with lib.types; {
|
|
locations = mkOption {
|
|
type = attrsOf (submodule [locationModule]);
|
|
};
|
|
};
|
|
};
|
|
in {
|
|
lib,
|
|
...
|
|
}: let
|
|
inherit (lib.options) mkOption;
|
|
in {
|
|
options = with lib.types; {
|
|
services.nginx.virtualHosts = mkOption {
|
|
type = attrsOf (submodule [hostModule]);
|
|
};
|
|
};
|
|
}
|