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:
parent
26950332c7
commit
faa87743e5
|
@ -9,7 +9,7 @@ let
|
|||
root = "/var/www/${subdomain}";
|
||||
};
|
||||
|
||||
hostsInfo = map makeHostInfo [ "cv" "dev" "key" ];
|
||||
hostsInfo = lib.flip lib.genAttrs makeHostInfo [ "cv" "dev" "key" ];
|
||||
in
|
||||
{
|
||||
options.my.services.blog = {
|
||||
|
|
|
@ -40,12 +40,12 @@ in
|
|||
# Set-up media group
|
||||
users.groups.media = { };
|
||||
|
||||
my.services.nginx.virtualHosts = [
|
||||
{
|
||||
my.services.nginx.virtualHosts = {
|
||||
library = {
|
||||
subdomain = "library";
|
||||
inherit (cfg) port;
|
||||
}
|
||||
];
|
||||
};
|
||||
};
|
||||
|
||||
my.services.backup = {
|
||||
paths = [
|
||||
|
|
|
@ -45,11 +45,11 @@ in
|
|||
}];
|
||||
};
|
||||
|
||||
my.services.nginx.virtualHosts = [
|
||||
{
|
||||
my.services.nginx.virtualHosts = {
|
||||
drone = {
|
||||
subdomain = "drone";
|
||||
inherit (cfg) port;
|
||||
}
|
||||
];
|
||||
};
|
||||
};
|
||||
};
|
||||
}
|
||||
|
|
|
@ -40,11 +40,11 @@ in
|
|||
};
|
||||
};
|
||||
|
||||
my.services.nginx.virtualHosts = [
|
||||
{
|
||||
my.services.nginx.virtualHosts = {
|
||||
flood = {
|
||||
subdomain = "flood";
|
||||
inherit (cfg) port;
|
||||
}
|
||||
];
|
||||
};
|
||||
};
|
||||
};
|
||||
}
|
||||
|
|
|
@ -116,18 +116,18 @@ in
|
|||
};
|
||||
users.groups.git = { };
|
||||
|
||||
my.services.nginx.virtualHosts = [
|
||||
my.services.nginx.virtualHosts = {
|
||||
# Proxy to Gitea
|
||||
{
|
||||
git = {
|
||||
subdomain = "git";
|
||||
inherit (cfg) port;
|
||||
}
|
||||
};
|
||||
# Redirect `gitea.` to actual forge subdomain
|
||||
{
|
||||
gitea = {
|
||||
subdomain = "gitea";
|
||||
redirect = config.services.gitea.settings.server.ROOT_URL;
|
||||
}
|
||||
];
|
||||
};
|
||||
};
|
||||
|
||||
my.services.backup = {
|
||||
paths = [
|
||||
|
|
|
@ -28,12 +28,12 @@ in
|
|||
};
|
||||
};
|
||||
|
||||
my.services.nginx.virtualHosts = [
|
||||
{
|
||||
my.services.nginx.virtualHosts = {
|
||||
jackett = {
|
||||
subdomain = "jackett";
|
||||
port = jackettPort;
|
||||
}
|
||||
];
|
||||
};
|
||||
};
|
||||
})
|
||||
|
||||
(lib.mkIf cfg.nzbhydra.enable {
|
||||
|
@ -41,12 +41,12 @@ in
|
|||
enable = true;
|
||||
};
|
||||
|
||||
my.services.nginx.virtualHosts = [
|
||||
{
|
||||
my.services.nginx.virtualHosts = {
|
||||
nzbhydra = {
|
||||
subdomain = "nzbhydra";
|
||||
port = nzbhydraPort;
|
||||
}
|
||||
];
|
||||
};
|
||||
};
|
||||
})
|
||||
|
||||
(lib.mkIf cfg.prowlarr.enable {
|
||||
|
@ -54,12 +54,12 @@ in
|
|||
enable = true;
|
||||
};
|
||||
|
||||
my.services.nginx.virtualHosts = [
|
||||
{
|
||||
my.services.nginx.virtualHosts = {
|
||||
prowlarr = {
|
||||
subdomain = "prowlarr";
|
||||
port = prowlarrPort;
|
||||
}
|
||||
];
|
||||
};
|
||||
};
|
||||
|
||||
services.fail2ban.jails = {
|
||||
prowlarr = ''
|
||||
|
|
|
@ -17,8 +17,8 @@ in
|
|||
# Set-up media group
|
||||
users.groups.media = { };
|
||||
|
||||
my.services.nginx.virtualHosts = [
|
||||
{
|
||||
my.services.nginx.virtualHosts = {
|
||||
jellyfin = {
|
||||
subdomain = "jellyfin";
|
||||
port = 8096;
|
||||
extraConfig = {
|
||||
|
@ -33,7 +33,7 @@ in
|
|||
proxyWebsockets = true;
|
||||
};
|
||||
};
|
||||
}
|
||||
];
|
||||
};
|
||||
};
|
||||
};
|
||||
}
|
||||
|
|
|
@ -98,11 +98,11 @@ in
|
|||
};
|
||||
users.groups.lohr = { };
|
||||
|
||||
my.services.nginx.virtualHosts = [
|
||||
{
|
||||
my.services.nginx.virtualHosts = {
|
||||
lohr = {
|
||||
subdomain = "lohr";
|
||||
inherit (cfg) port;
|
||||
}
|
||||
];
|
||||
};
|
||||
};
|
||||
};
|
||||
}
|
||||
|
|
|
@ -117,9 +117,9 @@ in
|
|||
};
|
||||
};
|
||||
|
||||
my.services.nginx.virtualHosts = [
|
||||
my.services.nginx.virtualHosts = {
|
||||
# Element Web app deployment
|
||||
{
|
||||
chat = {
|
||||
subdomain = "chat";
|
||||
root = pkgs.element-web.override {
|
||||
conf = {
|
||||
|
@ -145,22 +145,22 @@ in
|
|||
};
|
||||
};
|
||||
};
|
||||
}
|
||||
};
|
||||
# Dummy VHosts for port collision detection
|
||||
{
|
||||
matrix-federation = {
|
||||
subdomain = "matrix-federation";
|
||||
port = federationPort.private;
|
||||
}
|
||||
{
|
||||
};
|
||||
matrix-client = {
|
||||
subdomain = "matrix-client";
|
||||
port = clientPort.private;
|
||||
}
|
||||
};
|
||||
# Sliding sync
|
||||
{
|
||||
matrix-sync = {
|
||||
subdomain = "matrix-sync";
|
||||
inherit (cfg.slidingSync) port;
|
||||
}
|
||||
];
|
||||
};
|
||||
};
|
||||
|
||||
# Those are too complicated to use my wrapper...
|
||||
services.nginx.virtualHosts = {
|
||||
|
|
|
@ -43,11 +43,11 @@ in
|
|||
};
|
||||
};
|
||||
|
||||
my.services.nginx.virtualHosts = [
|
||||
{
|
||||
my.services.nginx.virtualHosts = {
|
||||
reader = {
|
||||
subdomain = "reader";
|
||||
inherit (cfg) port;
|
||||
}
|
||||
];
|
||||
};
|
||||
};
|
||||
};
|
||||
}
|
||||
|
|
|
@ -125,11 +125,11 @@ in
|
|||
];
|
||||
};
|
||||
|
||||
my.services.nginx.virtualHosts = [
|
||||
{
|
||||
my.services.nginx.virtualHosts = {
|
||||
monitoring = {
|
||||
subdomain = "monitoring";
|
||||
inherit (cfg.grafana) port;
|
||||
}
|
||||
];
|
||||
};
|
||||
};
|
||||
};
|
||||
}
|
||||
|
|
|
@ -47,11 +47,11 @@ in
|
|||
};
|
||||
};
|
||||
|
||||
my.services.nginx.virtualHosts = [
|
||||
{
|
||||
my.services.nginx.virtualHosts = {
|
||||
music = {
|
||||
subdomain = "music";
|
||||
inherit (cfg) port;
|
||||
}
|
||||
];
|
||||
};
|
||||
};
|
||||
};
|
||||
}
|
||||
|
|
|
@ -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 ];
|
||||
|
||||
|
|
|
@ -43,11 +43,11 @@ in
|
|||
signKeyPath = cfg.secretKeyFile;
|
||||
};
|
||||
|
||||
my.services.nginx.virtualHosts = [
|
||||
{
|
||||
my.services.nginx.virtualHosts = {
|
||||
cache = {
|
||||
subdomain = "cache";
|
||||
inherit (cfg) port;
|
||||
}
|
||||
];
|
||||
};
|
||||
};
|
||||
};
|
||||
}
|
||||
|
|
|
@ -143,8 +143,8 @@ in
|
|||
extraGroups = [ "media" ];
|
||||
};
|
||||
|
||||
my.services.nginx.virtualHosts = [
|
||||
{
|
||||
my.services.nginx.virtualHosts = {
|
||||
paperless = {
|
||||
subdomain = "paperless";
|
||||
inherit (cfg) port;
|
||||
sso = {
|
||||
|
@ -155,8 +155,8 @@ in
|
|||
extraConfig = {
|
||||
locations."/".proxyWebsockets = true;
|
||||
};
|
||||
}
|
||||
];
|
||||
};
|
||||
};
|
||||
|
||||
my.services.backup = {
|
||||
paths = [
|
||||
|
|
|
@ -21,12 +21,12 @@ let
|
|||
};
|
||||
|
||||
mkRedirection = service: {
|
||||
my.services.nginx.virtualHosts = [
|
||||
{
|
||||
my.services.nginx.virtualHosts = {
|
||||
${service} = {
|
||||
subdomain = service;
|
||||
port = ports.${service};
|
||||
}
|
||||
];
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
mkFail2Ban = service: lib.mkIf cfg.${service}.enable {
|
||||
|
|
|
@ -31,11 +31,11 @@ in
|
|||
inherit (cfg) passwordFile port;
|
||||
};
|
||||
|
||||
my.services.nginx.virtualHosts = [
|
||||
{
|
||||
my.services.nginx.virtualHosts = {
|
||||
podgrab = {
|
||||
subdomain = "podgrab";
|
||||
inherit (cfg) port;
|
||||
}
|
||||
];
|
||||
};
|
||||
};
|
||||
};
|
||||
}
|
||||
|
|
|
@ -18,12 +18,12 @@ in
|
|||
# Set-up media group
|
||||
users.groups.media = { };
|
||||
|
||||
my.services.nginx.virtualHosts = [
|
||||
{
|
||||
my.services.nginx.virtualHosts = {
|
||||
sabnzbd = {
|
||||
subdomain = "sabnzbd";
|
||||
inherit port;
|
||||
}
|
||||
];
|
||||
};
|
||||
};
|
||||
|
||||
services.fail2ban.jails = {
|
||||
sabnzbd = ''
|
||||
|
|
|
@ -70,11 +70,11 @@ in
|
|||
];
|
||||
};
|
||||
|
||||
my.services.nginx.virtualHosts = [
|
||||
{
|
||||
my.services.nginx.virtualHosts = {
|
||||
recipes = {
|
||||
subdomain = "recipes";
|
||||
inherit (cfg) port;
|
||||
}
|
||||
];
|
||||
};
|
||||
};
|
||||
};
|
||||
}
|
||||
|
|
|
@ -80,12 +80,12 @@ in
|
|||
|
||||
# Default transmission webui, I prefer combustion but its development
|
||||
# seems to have stalled
|
||||
my.services.nginx.virtualHosts = [
|
||||
{
|
||||
my.services.nginx.virtualHosts = {
|
||||
transmission = {
|
||||
subdomain = "transmission";
|
||||
inherit (cfg) port;
|
||||
}
|
||||
];
|
||||
};
|
||||
};
|
||||
|
||||
networking.firewall = {
|
||||
allowedTCPPorts = [ cfg.peerPort ];
|
||||
|
|
|
@ -59,8 +59,8 @@ in
|
|||
};
|
||||
|
||||
# This is a weird setup
|
||||
my.services.nginx.virtualHosts = [
|
||||
{
|
||||
my.services.nginx.virtualHosts = {
|
||||
vikunja = {
|
||||
inherit subdomain;
|
||||
# Serve the root for the web-ui
|
||||
root = config.services.vikunja.package-frontend;
|
||||
|
@ -80,8 +80,8 @@ in
|
|||
};
|
||||
};
|
||||
};
|
||||
}
|
||||
];
|
||||
};
|
||||
};
|
||||
|
||||
systemd.services.vikunja-api = {
|
||||
serviceConfig = {
|
||||
|
|
|
@ -52,16 +52,16 @@ in
|
|||
}];
|
||||
};
|
||||
|
||||
my.services.nginx.virtualHosts = [
|
||||
{
|
||||
my.services.nginx.virtualHosts = {
|
||||
woodpecker = {
|
||||
subdomain = "woodpecker";
|
||||
inherit (cfg) port;
|
||||
}
|
||||
};
|
||||
# I might want to be able to RPC from other hosts in the future
|
||||
{
|
||||
woodpecker-rpc = {
|
||||
subdomain = "woodpecker-rpc";
|
||||
port = cfg.rpcPort;
|
||||
}
|
||||
];
|
||||
};
|
||||
};
|
||||
};
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue