2023-11-15 21:37:20 +08:00
|
|
|
inputs:
|
|
|
|
{
|
2023-11-19 02:32:07 +08:00
|
|
|
options.nixos.services.nginx.applications.webdav.instances = let inherit (inputs.lib) mkOption types; in mkOption
|
2023-11-15 21:37:20 +08:00
|
|
|
{
|
2023-11-19 02:32:07 +08:00
|
|
|
type = types.attrsOf (types.submodule (submoduleInputs: { options =
|
|
|
|
{
|
|
|
|
hostname = mkOption { type = types.nonEmptyStr; default = submoduleInputs.config._module.args.name; };
|
|
|
|
path = mkOption { type = types.nonEmptyStr; default = "/srv/webdav"; };
|
|
|
|
users = mkOption { type = types.nonEmptyListOf types.nonEmptyStr; default = [ "chn" ]; };
|
|
|
|
};}));
|
|
|
|
default = {};
|
2023-11-15 21:37:20 +08:00
|
|
|
};
|
|
|
|
config =
|
|
|
|
let
|
2023-11-19 02:32:07 +08:00
|
|
|
inherit (inputs.config.nixos.services.nginx.applications.webdav) instances;
|
2023-11-19 02:35:06 +08:00
|
|
|
inherit (builtins) map listToAttrs attrValues;
|
2023-11-19 02:32:07 +08:00
|
|
|
inherit (inputs.lib) mkMerge;
|
|
|
|
in
|
2023-11-15 21:37:20 +08:00
|
|
|
{
|
2023-11-19 02:32:07 +08:00
|
|
|
nixos.services.nginx.https = listToAttrs (map
|
|
|
|
(site:
|
|
|
|
{
|
|
|
|
name = site.hostname;
|
|
|
|
value.location."/".static =
|
|
|
|
{ root = site.path; index = "auto"; charset = "utf-8"; webdav = true; detectAuth.users = site.users; };
|
|
|
|
})
|
2023-11-19 02:35:06 +08:00
|
|
|
(attrValues instances));
|
2023-11-19 02:32:07 +08:00
|
|
|
systemd = mkMerge (map
|
|
|
|
(site:
|
|
|
|
{
|
|
|
|
tmpfiles.rules = [ "d ${site.path} 0700 nginx nginx" ];
|
|
|
|
services.nginx.serviceConfig.ReadWritePaths = [ site.path ];
|
|
|
|
})
|
2023-11-19 02:35:06 +08:00
|
|
|
(attrValues instances));
|
2023-11-15 21:37:20 +08:00
|
|
|
};
|
|
|
|
}
|