about summary refs log tree commit diff stats
path: root/flake/packages/merge.nix
diff options
context:
space:
mode:
authorSoispha <soispha@vhack.eu>2023-08-22 15:23:42 +0200
committerSoispha <soispha@vhack.eu>2023-08-22 15:23:42 +0200
commitdcc9461cc55e1936f2546ac2ac7da243eb48306f (patch)
tree5e662c8f09579a7ce8a9f2401b93063185371cb7 /flake/packages/merge.nix
parentBuild(flake): Update (diff)
downloadnixos-config-dcc9461cc55e1936f2546ac2ac7da243eb48306f.tar.gz
nixos-config-dcc9461cc55e1936f2546ac2ac7da243eb48306f.zip
Feat(flake): Provide the neovim config as a package
Diffstat (limited to '')
-rw-r--r--flake/packages/merge.nix86
1 files changed, 86 insertions, 0 deletions
diff --git a/flake/packages/merge.nix b/flake/packages/merge.nix
new file mode 100644
index 00000000..8c8ed134
--- /dev/null
+++ b/flake/packages/merge.nix
@@ -0,0 +1,86 @@
+{lib, ...}: let
+  merge = merge_list: let
+    head_of_merge = builtins.head merge_list;
+  in
+    if builtins.isAttrs head_of_merge
+    then
+      builtins.zipAttrsWith (
+        name: values: let
+          head_value = builtins.head values;
+        in
+          if builtins.isString head_value
+          then builtins.concatStringsSep "" values
+          else if builtins.isList head_value
+          then builtins.concatLists values
+          else if builtins.isAttrs head_value
+          then merge values
+          else builtins.head values
+      )
+      merge_list
+    else if builtins.isString head_of_merge
+    then builtins.concatStringsSep "" merge_list
+    else if builtins.isList head_of_merge
+    then builtins.concatLists merge_list
+    else builtins.head merge_list;
+
+  # Tests
+  ## Strings
+  a = {
+    a = ''
+      This is some
+    '';
+  };
+  b = {
+    a = ''
+      example text
+    '';
+  };
+  c = {
+    a = "(which is nice)";
+  };
+  ## Lists
+  d = {
+    a = ["element1" "element2"];
+  };
+  e = {
+    a = [["elment3" "elemnt4"]];
+  };
+  f = {
+    a = ["elemnt5"];
+  };
+  ## Pure strings
+  g = "This";
+  h = "is";
+  i = "some example text";
+  j = ''
+    (with a newline)
+  '';
+  ## Pure lists
+  k = ["element1"];
+  l = ["element2" "element3"];
+  m = ["element4"];
+
+  ## Prepared tests
+  tests = {
+    tests = []; # Uncomment to actually run the tests
+    test_strings = {
+      expr = merge [a b c];
+      expected = {a = "This is some\nexample text\n(which is nice)";};
+    };
+    test_lists = {
+      expr = merge [d e f];
+      expected = {a = ["element1" "element2" ["elment3" "elemnt4"] "elemnt5"];};
+    };
+    test_pure_strings = {
+      expr = merge [g h i j];
+      expected = "Thisissome example text(with a newline)\n";
+    };
+    test_pure_lists = {
+      expr = merge [k l m];
+      expected = ["element1" "element2" "element3" "element4"];
+    };
+  };
+in {
+  inherit merge;
+  result = lib.debug.runTests tests;
+}