aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-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))