aboutsummaryrefslogtreecommitdiff
path: root/tools/gridss-configFile.nix
blob: d6b600e1f4e86a94f62cf8bd5c50316f542e6629 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
{bionix}:

with bionix;
with lib;

let
    attrsToGridssConfigString = attrsToGridssConfigStringPrepend "";

    attrsToGridssConfigStringPrepend = prepend: attrs:
        concatStringsSep "\n" (
            attrValues (
                mapAttrs
                    (name: attr: prepend + (iniLine name attr))
                    attrs));

    iniLine = name: attr:
        let attrType = builtins.typeOf attr;
        in
            if (iniLineByAttrType ? ${attrType})
            then (iniLineByAttrType.${attrType} name attr)
            else builtins.throw (
               "`gridssConfig` cannot convert attribute of type \"" + attrType + "\".");

    iniLineByAttrType = {
        string = name: attr: name + " = " + attr;
        int    = name: attr: name + " = " + builtins.toString attr;
        float  = name: attr: name + " = " + (
                    builtins.head (
                        builtins.match "([0-9]+\.0?[1-9]*)0+" (builtins.toString attr)));
        bool   = name: attr: name + " = " + (if attr == true then "true" else "false");
        set    = name: attr: attrsToGridssConfigStringPrepend (name + ".") attr;
        # Allows for repeated fields (e.g. for adapters):
        list   = name: attr: concatStringsSep "\n" (map (x: iniLine name x) attr);
    };
in configAttrs: (pkgs.writeText
        "gridss.properties.override"
        ((attrsToGridssConfigString configAttrs) + "\n"))