Merge branch 'main' of github.com:rasmus-kirk/nixarr
This commit is contained in:
@@ -8,7 +8,57 @@ with lib; let
|
|||||||
cfg = config.nixarr.recyclarr;
|
cfg = config.nixarr.recyclarr;
|
||||||
globals = config.util-nixarr.globals;
|
globals = config.util-nixarr.globals;
|
||||||
nixarr = config.nixarr;
|
nixarr = config.nixarr;
|
||||||
format = pkgs.formats.yaml {};
|
# This is a carbon copy of the yaml implementation in nixpkgs https://github.com/NixOS/nixpkgs/blob/fde6c4aec177afa2d0248b1c5983e2a72a231442/pkgs/pkgs-lib/formats.nix#L210-L231
|
||||||
|
# except we've replaced json2yaml for yq-go to allow it to parse custom yaml tags
|
||||||
|
# ideally this would some day be upstreamed, see https://github.com/NixOS/nix/issues/4910 and https://github.com/rasmus-kirk/nixarr/issues/91
|
||||||
|
yamlGenerator = {preserved-tags ? []}: let
|
||||||
|
selectors =
|
||||||
|
pkgs.lib.strings.concatStringsSep "|"
|
||||||
|
(builtins.map (
|
||||||
|
# this is yq for "for all the scalers, if they match this regex, do a regex substitution and set the tag"
|
||||||
|
x: ''
|
||||||
|
with((.. | select(kind == "scalar") | select(test("^!${x} .*"))); . = sub("!${x} ", "") | . tag="!${x}")
|
||||||
|
''
|
||||||
|
)
|
||||||
|
preserved-tags);
|
||||||
|
in {
|
||||||
|
generate = name: value:
|
||||||
|
pkgs.callPackage (
|
||||||
|
{
|
||||||
|
runCommand,
|
||||||
|
yq-go,
|
||||||
|
}:
|
||||||
|
runCommand name
|
||||||
|
{
|
||||||
|
nativeBuildInputs = [yq-go];
|
||||||
|
value = builtins.toJSON value;
|
||||||
|
passAsFile = ["value"];
|
||||||
|
preferLocalBuild = true;
|
||||||
|
}
|
||||||
|
''
|
||||||
|
yq '${selectors}' "$valuePath" -o yaml > $out
|
||||||
|
''
|
||||||
|
) {};
|
||||||
|
type = let
|
||||||
|
baseType = pkgs.lib.types.oneOf [
|
||||||
|
pkgs.lib.types.bool
|
||||||
|
pkgs.lib.types.int
|
||||||
|
pkgs.lib.types.float
|
||||||
|
pkgs.lib.types.float
|
||||||
|
(pkgs.lib.types.attrsOf valueType)
|
||||||
|
(pkgs.lib.types.listOf valueType)
|
||||||
|
];
|
||||||
|
valueType =
|
||||||
|
(pkgs.lib.types.nullOr baseType)
|
||||||
|
// {
|
||||||
|
description = "Yaml value";
|
||||||
|
};
|
||||||
|
in
|
||||||
|
valueType;
|
||||||
|
};
|
||||||
|
format = yamlGenerator {
|
||||||
|
preserved-tags = ["env_var"];
|
||||||
|
};
|
||||||
|
|
||||||
# Generate configuration file from Nix attribute set if provided
|
# Generate configuration file from Nix attribute set if provided
|
||||||
generatedConfigFile = format.generate "recyclarr-config.yml" cfg.configuration;
|
generatedConfigFile = format.generate "recyclarr-config.yml" cfg.configuration;
|
||||||
|
|||||||
Reference in New Issue
Block a user