nix/pkgs/python-vars-with-env/default.nix
Jeltz 5d32735063
indico: use systemd-creds
Signed-off-by: Jeltz <jeltz@federez.net>
2025-04-05 21:19:36 +02:00

53 lines
1.2 KiB
Nix

{
lib,
pkgs,
...
}:
rec {
_mkPy = type: value: {
_pyType = type;
_value = value;
};
_isPy = value: lib.isAttrs value && lib.hasAttr "_pyType" value;
_mkValue = value:
if _isPy value then
value
else if lib.isStringLike value then
_mkPy "str" value
else if lib.isInt value then
_mkPy "int" value
else if lib.isBool value then
_mkPy "bool" value
else if value == null then
_mkPy "null" null
else if lib.isList value then
_mkPy "list" (lib.map _mkValue value)
else if lib.isAttrs value then
_mkPy "dict" (lib.mapAttrs (_: _mkValue) value)
else
abort "unsupported type";
_mkVars = lib.mapAttrs (_: _mkValue);
mkReadCred = path:
_mkPy "read-cred" (if lib.isStringLike path then
path
else
abort "invalid path type");
generate = name: value:
pkgs.callPackage ({ runCommand, python3, black }:
runCommand name {
nativeBuildInputs = [ python3 black ];
value = builtins.toJSON (_mkVars value);
codegen = builtins.readFile ./codegen.py;
passAsFile = [ "codegen" "value" ];
preferLocalBuild = true;
} ''
python3 $codegenPath $valuePath > $out
black $out
'') { };
}