nixos: services: nginx: use attrset for vhosts

Attribute sets compose better than lists, it was a mistake to use a list
in the first place...
This commit is contained in:
Bruno BELANYI 2023-12-25 19:25:08 +01:00
parent 26950332c7
commit faa87743e5
22 changed files with 118 additions and 118 deletions

View file

@ -97,19 +97,19 @@ in
};
virtualHosts = mkOption {
type = types.listOf virtualHostOption;
default = [ ];
type = types.attrsOf virtualHostOption;
default = { };
example = litteralExample ''
[
{
subdomain = "gitea";
{
gitea = {
subdomain = "git";
port = 8080;
}
{
};
dev = {
subdomain = "dev";
root = "/var/www/dev";
}
{
};
jellyfin = {
subdomain = "jellyfin";
port = 8096;
extraConfig = {
@ -118,8 +118,8 @@ in
proxyWebsockets = true;
};
};
}
]
};
}
'';
description = ''
List of virtual hosts to set-up using default settings.
@ -190,7 +190,7 @@ in
config = lib.mkIf cfg.enable {
assertions = [ ]
++ (lib.flip builtins.map cfg.virtualHosts ({ subdomain, ... } @ args:
++ (lib.flip lib.mapAttrsToList cfg.virtualHosts (_: { subdomain, ... } @ args:
let
conflicts = [ "port" "root" "socket" "redirect" ];
optionsNotNull = builtins.map (v: args.${v} != null) conflicts;
@ -209,7 +209,7 @@ in
ports = lib.my.mapFilter
(v: v != null)
({ port, ... }: port)
cfg.virtualHosts;
(lib.attrValues cfg.virtualHosts);
portCounts = lib.my.countValues ports;
nonUniquesCounts = lib.filterAttrs (_: v: v != 1) portCounts;
nonUniques = builtins.attrNames nonUniquesCounts;
@ -221,7 +221,7 @@ in
map mkAssertion nonUniques
) ++ (
let
subs = map ({ subdomain, ... }: subdomain) cfg.virtualHosts;
subs = lib.mapAttrsToList (_: { subdomain, ... }: subdomain) cfg.virtualHosts;
subsCounts = lib.my.countValues subs;
nonUniquesCounts = lib.filterAttrs (_: v: v != 1) subsCounts;
nonUniques = builtins.attrNames nonUniquesCounts;
@ -325,7 +325,7 @@ in
])
);
in
lib.my.genAttrs' cfg.virtualHosts mkVHost;
lib.my.genAttrs' (lib.attrValues cfg.virtualHosts) mkVHost;
sso = {
enable = true;
@ -403,12 +403,12 @@ in
};
};
my.services.nginx.virtualHosts = [
{
my.services.nginx.virtualHosts = {
login = {
subdomain = "login";
inherit (cfg.sso) port;
}
];
};
};
networking.firewall.allowedTCPPorts = [ 80 443 ];