From 3c71ea724c54b29a8f62e2b965caafca863fa3a2 Mon Sep 17 00:00:00 2001 From: teto <886074+teto@users.noreply.github.com> Date: Tue, 30 Dec 2025 01:57:12 +0100 Subject: [PATCH] neovim: refactor to use neovimUtils.makeVimPackageInfo --- modules/programs/neovim.nix | 64 ++++++++++++++++--- .../programs/neovim/plugin-config.expected | 3 + 2 files changed, 58 insertions(+), 9 deletions(-) diff --git a/modules/programs/neovim.nix b/modules/programs/neovim.nix index 414d7941..a745c254 100644 --- a/modules/programs/neovim.nix +++ b/modules/programs/neovim.nix @@ -29,6 +29,7 @@ let fileType ; + inherit (pkgs) neovimUtils; jsonFormat = pkgs.formats.json { }; in { @@ -223,6 +224,8 @@ in description = '' Content to be added to {file}`init.lua`. + Automatically contains the [advised plugin config](https://nixos.org/manual/nixpkgs/stable/#neovim-custom-configuration) + To specify the order, use `lib.mkOrder`, `lib.mkBefore`, `lib.mkAfter`. ''; }; @@ -432,12 +435,23 @@ in (concatMapStringsSep ";" luaPackages.getLuaPath resolvedExtraLuaPackages) ]; + vimPackageInfo = neovimUtils.makeVimPackageInfo (map suppressNotVimlConfig pluginsNormalized); + + packpathDirs.hm = vimPackageInfo.vimPackage; + finalPackdir = neovimUtils.packDir packpathDirs; + + packpathWrapperArgs = lib.optionals (packpathDirs.hm.start != [ ] || packpathDirs.hm.opt != [ ]) [ + "--add-flags" + ''--cmd "set packpath^=${finalPackdir}"'' + "--add-flags" + ''--cmd "set rtp^=${finalPackdir}"'' + ]; + wrappedNeovim' = pkgs.wrapNeovimUnstable cfg.package { withNodeJs = cfg.withNodeJs || cfg.coc.enable; - plugins = map suppressNotVimlConfig pluginsNormalized; + plugins = [ ]; inherit (cfg) - extraPython3Packages withPython3 withRuby withPerl @@ -447,9 +461,16 @@ in autowrapRuntimeDeps waylandSupport ; + + extraPython3Packages = + ps: (cfg.extraPython3Packages ps) ++ (lib.concatMap (f: f ps) vimPackageInfo.pluginPython3Packages); neovimRcContent = cfg.extraConfig; wrapperArgs = - cfg.extraWrapperArgs ++ extraMakeWrapperArgs ++ extraMakeWrapperLuaCArgs ++ extraMakeWrapperLuaArgs; + cfg.extraWrapperArgs + ++ extraMakeWrapperArgs + ++ extraMakeWrapperLuaCArgs + ++ extraMakeWrapperLuaArgs + ++ packpathWrapperArgs; wrapRc = false; }; in @@ -478,12 +499,37 @@ in shellAliases = mkIf cfg.vimdiffAlias { vimdiff = "nvim -d"; }; }; - programs.neovim.extraLuaConfig = lib.mkMerge [ - (lib.mkIf (wrappedNeovim'.initRc != "") ( - lib.mkBefore "vim.cmd [[source ${pkgs.writeText "nvim-init-home-manager.vim" wrappedNeovim'.initRc}]]" - )) - (lib.mkIf (lib.hasAttr "lua" cfg.generatedConfigs) (lib.mkAfter cfg.generatedConfigs.lua)) - ]; + programs.neovim.extraConfig = lib.concatStringsSep "\n" vimPackageInfo.userPluginViml; + programs.neovim.extraPackages = mkIf cfg.autowrapRuntimeDeps vimPackageInfo.runtimeDeps; + + programs.neovim.extraLuaConfig = + let + # using default 'foldmarker', to be used with foldmethod=marker + foldedLuaBlock = + title: content: + if (content != "") then + '' + -- ${title} {{{ + ${content} + -- }}} + '' + else + null; + + advisedLua = foldedLuaBlock "home-manager generated: plugin config advised in nixpkgs" ( + lib.concatStringsSep "\n" vimPackageInfo.pluginAdvisedLua + ); + in + + lib.mkMerge [ + (lib.mkIf (advisedLua != null) (lib.mkOrder 510 advisedLua)) + (lib.mkIf (wrappedNeovim'.initRc != "") ( + lib.mkBefore "vim.cmd [[source ${pkgs.writeText "nvim-init-home-manager.vim" wrappedNeovim'.initRc}]]" + )) + (lib.mkIf (lib.hasAttr "lua" cfg.generatedConfigs) ( + lib.mkAfter (foldedLuaBlock "user-associated plugin config" cfg.generatedConfigs.lua) + )) + ]; xdg.configFile = lib.mkMerge ( # writes runtime diff --git a/tests/modules/programs/neovim/plugin-config.expected b/tests/modules/programs/neovim/plugin-config.expected index d53b1870..d6bed070 100644 --- a/tests/modules/programs/neovim/plugin-config.expected +++ b/tests/modules/programs/neovim/plugin-config.expected @@ -1,3 +1,6 @@ vim.cmd [[source /nix/store/00000000000000000000000000000000-nvim-init-home-manager.vim]] +-- user-associated plugin config {{{ function HM_PLUGIN_LUA_CONFIG () end + +-- }}}