1
0
Fork 0
mirror of https://github.com/nix-community/home-manager.git synced 2025-12-15 05:21:06 +01:00

podman: use type in attr name of built quadlets

This commit is contained in:
Nicholas Hassan 2025-03-18 14:55:36 +10:30 committed by Austin Horstman
parent 8bb071912b
commit bb72d79f5d
6 changed files with 43 additions and 37 deletions

View file

@ -9,11 +9,17 @@ let
createQuadletSource = name: containerDef:
let
dependencyBySuffix = type: name:
if (hasInfix ".${type}" name) then
let baseName = elemAt (splitString ".${type}" name) 0;
in if (hasAttr baseName cfg.internal.builtQuadlets) then
[ (cfg.internal.builtQuadlets.${baseName}) ]
extractQuadletReference = type: value:
let
regex = "([a-zA-Z0-9_-]+\\." + type + ").*";
parts = builtins.match regex value;
in if parts == null then value else builtins.elemAt parts 0;
dependencyBySuffix = type: value:
if (hasInfix ".${type}" value) then
let name = extractQuadletReference type value;
in if (hasAttr name cfg.internal.builtQuadlets) then
[ (cfg.internal.builtQuadlets.${name}) ]
else
[ ]
else
@ -32,28 +38,27 @@ let
++ (withResolverFor "volume" containerDef.volumes);
checkQuadletReference = types: value:
let baseName = t: elemAt (splitString ".${t}" value) 0;
in if builtins.isList value then
if builtins.isList value then
builtins.concatLists (map (checkQuadletReference types) value)
else
let type = findFirst (t: hasInfix ".${t}" value) null types;
in if (type != null) then
let
quadletBaseName = baseName type;
quadletName = extractQuadletReference type value;
quadletsOfType =
filterAttrs (n: v: v.quadletData.resourceType == type)
cfg.internal.builtQuadlets;
in if (hasAttr quadletBaseName quadletsOfType) then
in if (hasAttr quadletName quadletsOfType) then
[
(replaceStrings [ quadletBaseName ]
[ "podman-${quadletBaseName}" ] value)
(replaceStrings [ quadletName ] [ "podman-${quadletName}" ]
value)
]
else
[ value ]
else if ((hasInfix "/nix/store" value) == false
&& hasAttr value cfg.internal.builtQuadlets) then
lib.warn ''
A value for Podman container '${name}' might use a reference to another quadlet: ${value}.
A value for Podman container '${name}' might use a reference to another quadlet: ${value}.
Append the type '.${
cfg.internal.builtQuadlets.${value}.quadletData.resourceType
}' to '${baseName value}' if this is intended.