refactor: centralize host and user metadata
This commit is contained in:
@@ -0,0 +1,89 @@
|
||||
{
|
||||
config,
|
||||
lib,
|
||||
...
|
||||
}:
|
||||
let
|
||||
mkHost =
|
||||
{
|
||||
name,
|
||||
kind,
|
||||
traits ? [ ],
|
||||
displays ? { },
|
||||
users ? { },
|
||||
imports ? [ ],
|
||||
stateVersion ? "24.05",
|
||||
}:
|
||||
{
|
||||
meta.host = {
|
||||
inherit
|
||||
displays
|
||||
kind
|
||||
name
|
||||
traits
|
||||
users
|
||||
;
|
||||
};
|
||||
|
||||
inherit imports;
|
||||
|
||||
networking.hostName = name;
|
||||
system.stateVersion = stateVersion;
|
||||
};
|
||||
|
||||
mkCaddyReverseProxy =
|
||||
{
|
||||
domain,
|
||||
port,
|
||||
extraHeaders ? [ ],
|
||||
extraConfigText ? "",
|
||||
}:
|
||||
let
|
||||
headerLines = map (header: " header_up ${header.name} ${header.value}") extraHeaders;
|
||||
extraConfigLines = map (line: " ${line}") (
|
||||
lib.filter (line: line != "") (lib.splitString "\n" extraConfigText)
|
||||
);
|
||||
bodyLines = headerLines ++ extraConfigLines;
|
||||
body = lib.concatStringsSep "\n" bodyLines;
|
||||
in
|
||||
{
|
||||
services.caddy.virtualHosts.${domain}.extraConfig =
|
||||
if body == "" then
|
||||
"reverse_proxy :${toString port}"
|
||||
else
|
||||
''
|
||||
reverse_proxy :${toString port} {
|
||||
${body}
|
||||
}
|
||||
'';
|
||||
};
|
||||
in
|
||||
{
|
||||
options.meta.lib.mkHost = lib.mkOption {
|
||||
type = lib.types.raw;
|
||||
description = "Internal host constructor shared between flake-parts modules.";
|
||||
internal = true;
|
||||
readOnly = true;
|
||||
};
|
||||
|
||||
options.meta.lib.mkCaddyReverseProxy = lib.mkOption {
|
||||
type = lib.types.raw;
|
||||
description = "Internal Caddy reverse proxy helper shared between flake-parts modules.";
|
||||
internal = true;
|
||||
readOnly = true;
|
||||
};
|
||||
|
||||
options.meta.lib.users = lib.mkOption {
|
||||
type = lib.types.attrs;
|
||||
description = "Canonical user attrsets shared by host definitions.";
|
||||
internal = true;
|
||||
readOnly = true;
|
||||
};
|
||||
|
||||
config.meta.lib = {
|
||||
inherit
|
||||
mkCaddyReverseProxy
|
||||
mkHost
|
||||
;
|
||||
};
|
||||
}
|
||||
Reference in New Issue
Block a user