From c971cce93a52a1faf7e9350a37287af5dd8e9827 Mon Sep 17 00:00:00 2001 From: psfloyd Date: Tue, 16 Jul 2024 03:07:39 -0300 Subject: [PATCH] lib/neovim-plugin: add lazyLoad Using mkLazyLoadOption generate lazyLoad option for all plugins generated using mkNeovimPlugin. Plugin maintainers can opt out by setting `allowLazyLoad = false`. Plugin maintainers can provide default vaules by setting option in lazyLoad. --- lib/neovim-plugin.nix | 31 +++++++++++++++++++++++++++++-- 1 file changed, 29 insertions(+), 2 deletions(-) diff --git a/lib/neovim-plugin.nix b/lib/neovim-plugin.nix index 46d7969f96..871de1fe8f 100644 --- a/lib/neovim-plugin.nix +++ b/lib/neovim-plugin.nix @@ -48,9 +48,13 @@ with lib; extraPackages ? [ ], callSetup ? true, installPackage ? true, + # lazyLoad + allowLazyLoad ? true, + lazyLoad ? { }, }: let namespace = if isColorscheme then "colorschemes" else "plugins"; + cfg = config.${namespace}.${name}; in { meta = { @@ -99,21 +103,44 @@ with lib; example = settingsExample; }; } + // optionalAttrs allowLazyLoad { + lazyLoad = nixvimOptions.mkLazyLoadOption { + inherit originalName cfg; + optionsForPlugin = true; + lazyLoad = { + after = optionalString callSetup '' + require('${luaName}')${setup}(${optionalString (cfg ? settings) (toLuaObject cfg.settings)}) + ''; + } // (optionalAttrs (isColorscheme && colorscheme != null) { inherit colorscheme; }) // lazyLoad; + }; + } // extraOptions; config = let - cfg = config.${namespace}.${name}; extraConfigNamespace = if isColorscheme then "extraConfigLuaPre" else "extraConfigLua"; + lazyLoaded = cfg.lazyLoad.enable or false; in mkIf cfg.enable (mkMerge [ { extraPlugins = (optional installPackage cfg.package) ++ extraPlugins; inherit extraPackages; - ${extraConfigNamespace} = optionalString callSetup '' + ${extraConfigNamespace} = optionalString (callSetup && !lazyLoaded) '' require('${luaName}')${setup}(${optionalString (cfg ? settings) (toLuaObject cfg.settings)}) ''; + + plugins.lz-n.plugins = mkIf lazyLoaded [ cfg.lazyLoad ]; + assertions = [ + { + assertion = config.plugins.lz-n.enable || !lazyLoaded; + # TODO: replace with global option after adding backend + message = '' + Nixvim (${namespace}.${name}): You have to enable `plugins.lz-n` for `${namespace}.${name}.lazyLoad` to work. + ''; + } + ]; + } (optionalAttrs (isColorscheme && (colorscheme != null)) { colorscheme = mkDefault colorscheme; }) (extraConfig cfg)