aboutsummaryrefslogtreecommitdiff
path: root/tools/gridss-configFile.nix
blob: 3d0d3f8df6a7e579b72dad6689fdf3d4a971cc1b (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
38
39
40
41
{ 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 then "true" else "false");
    set = name: attrsToGridssConfigStringPrepend (name + ".");
    # Allows for repeated fields (e.g. for adapters):
    list = name: attr: concatStringsSep "\n" (map (iniLine name) attr);
  };
in
configAttrs: (pkgs.writeText
  "gridss.properties.override"
  ((attrsToGridssConfigString configAttrs) + "\n"))