From dcc9461cc55e1936f2546ac2ac7da243eb48306f Mon Sep 17 00:00:00 2001 From: Soispha Date: Tue, 22 Aug 2023 15:23:42 +0200 Subject: Feat(flake): Provide the neovim config as a package --- flake/default.nix | 2 +- flake/packages/default.nix | 44 ++++++++++++++++++++++++ flake/packages/merge.nix | 86 ++++++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 131 insertions(+), 1 deletion(-) create mode 100644 flake/packages/merge.nix (limited to 'flake') diff --git a/flake/default.nix b/flake/default.nix index a8c597e9..63dea536 100644 --- a/flake/default.nix +++ b/flake/default.nix @@ -93,7 +93,7 @@ in { ; }; packages."${system}" = import ./packages { - inherit nixos-generators defaultSpecialArgs defaultModules pkgs sysLib; + inherit nixos-generators defaultSpecialArgs defaultModules pkgs sysLib system nixVim self; inherit (pkgs) lib; }; diff --git a/flake/packages/default.nix b/flake/packages/default.nix index 4ab68775..708852a0 100644 --- a/flake/packages/default.nix +++ b/flake/packages/default.nix @@ -1,12 +1,54 @@ { + self, nixos-generators, defaultSpecialArgs, defaultModules, pkgs, sysLib, + nixVim, + system, ... }: let + inherit (pkgs) lib; + inherit (import ./merge.nix {inherit lib;}) merge; output = import ../../bootstrap {inherit pkgs sysLib;}; + args = { + inherit pkgs; + inherit (pkgs) lib; + }; + nvim = + builtins.mapAttrs ( + name: value: let + nvim_config = + import ../../home-manager/soispha/config/neovim/nixvim/default.nix + args; + build_args = args // {nixosConfig = value.config;}; + + merge_attrs = list_of_attrs: builtins.foldl' (x: y: merge [x y]) {} list_of_attrs; + resolve_imports = attrs: + merge_attrs (builtins.map (v: import v build_args) + attrs.imports); + + resolve_imports' = attrs: + if builtins.any (n: n == "imports") (builtins.attrNames attrs) + then + resolve_imports' (merge_attrs [ + (resolve_imports attrs) + (builtins.removeAttrs + attrs + ["imports"]) + ]) + else attrs; + + complete_config = resolve_imports' nvim_config; + in + nixVim.legacyPackages."${system}".makeNixvim + ( + builtins.removeAttrs + complete_config.programs.nixvim ["enable"] + ) + ) + self.nixosConfigurations; in { install-iso = nixos-generators.nixosGenerate { @@ -27,5 +69,7 @@ in ++ defaultModules; format = "iso"; }; + vim = nvim.tiamat; + inherit nvim; } // output 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; +} -- cgit 1.4.1