aboutsummaryrefslogtreecommitdiff
path: root/tools
diff options
context:
space:
mode:
authorl-d-s <l@sdf.org>2018-11-12 16:54:03 +1100
committerl-d-s <l@sdf.org>2018-11-12 16:54:03 +1100
commitb46138826260f1ed963ffe18fef7ec4ce70b6de8 (patch)
tree1b9df42474555a93cbc3abf8bf14209b811508a6 /tools
parentceb73223717abfb0de1a0905833b0cbac0b3fa23 (diff)
Function to great ini-style gridss config file.
Diffstat (limited to 'tools')
-rw-r--r--tools/gridss-configFile.nix36
1 files changed, 36 insertions, 0 deletions
diff --git a/tools/gridss-configFile.nix b/tools/gridss-configFile.nix
new file mode 100644
index 0000000..838c292
--- /dev/null
+++ b/tools/gridss-configFile.nix
@@ -0,0 +1,36 @@
+{bionix, nixpkgs}:
+
+with nixpkgs;
+
+let
+ attrsToGridssConfigString = attrsToGridssConfigStringPrepend "";
+
+ attrsToGridssConfigStringPrepend = prepend: attrs:
+ lib.concatStringsSep "\n" (
+ lib.attrValues (
+ lib.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");
+ attrs = 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: (writeText
+ "gridss.properties.override"
+ (attrsToGridssConfigString configAttrs))