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"))
|