diff --git a/flake-modules/lib.nix b/flake-modules/lib.nix index 42f83191..c905482b 100644 --- a/flake-modules/lib.nix +++ b/flake-modules/lib.nix @@ -18,6 +18,9 @@ inherit lib; flake = self; }; + overlay = lib.makeOverridable (import ../lib/overlay.nix) { + flake = self; + }; } // lib.genAttrs config.systems ( lib.flip withSystem ( diff --git a/lib/default.nix b/lib/default.nix index a13293b7..aea49891 100644 --- a/lib/default.nix +++ b/lib/default.nix @@ -1,6 +1,7 @@ { lib, - flake ? null, # Optionally, provide the lib with access to the flake + flake, + _isExtended ? false, _nixvimTests ? false, }: lib.makeExtensible ( @@ -9,14 +10,15 @@ lib.makeExtensible ( # Used when importing parts of our lib call = lib.callPackageWith { inherit call self; - lib = self.extendedLib; + # TODO: this would be much simpler if `lib` & `self` were kept explicitly separate + # Doing so should also improve overridability and simplify bootstrapping. + lib = if _isExtended then lib else lib.extend flake.lib.overlay; }; in { autocmd = call ./autocmd-helpers.nix { }; builders = call ./builders.nix { }; deprecation = call ./deprecation.nix { }; - extendedLib = call ./extend-lib.nix { inherit lib; }; keymaps = call ./keymap-helpers.nix { }; lua = call ./to-lua.nix { }; modules = call ./modules.nix { inherit flake; }; @@ -93,6 +95,9 @@ lib.makeExtensible ( toLuaObject = self.lua.toLua; mkLuaInline = self.lua.mkInline; + + # TODO: Removed 2024-12-21 + extendedLib = throw "`extendedLib` has been removed. Use `lib.extend .lib.overlay` instead."; } // # TODO: Removed 2024-09-27; remove after 24.11 diff --git a/lib/extend-lib.nix b/lib/extend-lib.nix deleted file mode 100644 index c7fab063..00000000 --- a/lib/extend-lib.nix +++ /dev/null @@ -1,18 +0,0 @@ -# Extends nixpkg's lib with our functions, as expected by our modules -{ - call, - lib, - self, -}: -lib.extend ( - final: prev: { - # Include our custom lib - nixvim = self; - - # Merge in our maintainers - maintainers = prev.maintainers // import ./maintainers.nix; - - # Merge in our custom types - types = prev.types // call ./types.nix { }; - } -) diff --git a/lib/overlay.nix b/lib/overlay.nix new file mode 100644 index 00000000..18e7825a --- /dev/null +++ b/lib/overlay.nix @@ -0,0 +1,14 @@ +{ flake }: +final: prev: { + # Include our custom lib + nixvim = flake.lib.nixvim.override { + lib = final; + _isExtended = true; + }; + + # Merge in our maintainers + maintainers = prev.maintainers // import ./maintainers.nix; + + # Merge in our custom types + types = prev.types // import ./types.nix { lib = final; }; +} diff --git a/tests/default.nix b/tests/default.nix index 81ad2ef2..ed959647 100644 --- a/tests/default.nix +++ b/tests/default.nix @@ -8,8 +8,6 @@ system ? pkgs.stdenv.hostPlatform.system, }: let - nixvimLib = helpers.extendedLib; - autoArgs = pkgs // { inherit helpers @@ -18,7 +16,7 @@ let system ; nixpkgsLib = lib; - lib = nixvimLib; + lib = lib.extend self.lib.overlay; inherit (self.legacyPackages.${system}) makeNixvimWithModule nixvimConfiguration diff --git a/wrappers/_shared.nix b/wrappers/_shared.nix index 010cc290..3e9c9f39 100644 --- a/wrappers/_shared.nix +++ b/wrappers/_shared.nix @@ -62,7 +62,7 @@ in lib.nixvim = lib.mkDefault self.lib.nixvim; # Make nixvim's "extended" lib available to the host's module args - _module.args.nixvimLib = lib.mkDefault config.lib.nixvim.extendedLib; + _module.args.nixvimLib = lib.mkDefault (lib.extend self.lib.overlay); } # Propagate nixvim's assertions to the host modules