From 079be99183243262c68f102955b3479e99b74814 Mon Sep 17 00:00:00 2001 From: Emery Hemingway Date: Thu, 2 Sep 2021 22:12:54 +0200 Subject: [PATCH] Add lib.generators.toPreserves --- .gitignore | 2 ++ flake.nix | 6 +++++- lib.nix | 27 +++++++++++++++++++++++++++ 3 files changed, 34 insertions(+), 1 deletion(-) create mode 100644 .gitignore create mode 100644 lib.nix diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..750baeb --- /dev/null +++ b/.gitignore @@ -0,0 +1,2 @@ +result +result-* diff --git a/flake.nix b/flake.nix index 778acac..ea4c054 100644 --- a/flake.nix +++ b/flake.nix @@ -4,11 +4,15 @@ inputs.rust.url = "github:oxalica/rust-overlay"; outputs = { self, nixpkgs, rust }: - let forEachSystem = nixpkgs.lib.genAttrs [ "aarch64-linux" "x86_64-linux" ]; + let + forEachSystem = nixpkgs.lib.genAttrs [ "aarch64-linux" "x86_64-linux" ]; + libOverlay = import ./lib.nix; in { + lib = nixpkgs.lib.extend libOverlay; overlay = final: prev: with final; { + lib = lib.extend libOverlay; syndicate-rs = callPackage ./syndicate-rs { rust = rust-bin.nightly.latest.default; }; diff --git a/lib.nix b/lib.nix new file mode 100644 index 0000000..ef84da4 --- /dev/null +++ b/lib.nix @@ -0,0 +1,27 @@ +final: prev: +let lib = final; +in with lib; { + + generators = with final.generators; + prev.generators // { + toPreserves = { }@args: + v: + let concatItems = lib.strings.concatStringsSep " "; + in if isAttrs v then + "{ ${ + concatItems (lib.attrsets.mapAttrsToList + (key: val: "${key}: ${toPreserves args val}") v) + } }" + else if isList v then + "[ ${concatItems (map (toPreserves args) v)} ]" + else if isBool v then + (if v then "#t" else "#f") + else if isFunction v then + abort "generators.toPreserves: cannot convert a function to Preserves" + else if isNull v then + "null" + else + builtins.toJSON v; + }; + +}