diff --git a/modules/programs/neovim.nix b/modules/programs/neovim.nix index 97e84ba88..90d94d916 100644 --- a/modules/programs/neovim.nix +++ b/modules/programs/neovim.nix @@ -16,6 +16,17 @@ let merge = mergeOneOption; }; + # Currently, upstream Neovim is pinned on Lua 5.1 for LuaJIT support. + # This will need to be updated if Neovim ever migrates to a newer + # version of Lua. + extraLua51PackageType = mkOptionType { + name = "extra-lua51-packages"; + description = "lua5.1 packages in lua5_1.withPackages format"; + check = with types; + (x: if isFunction x then isList (x pkgs.lua51Packages) else false); + merge = mergeOneOption; + }; + pluginWithConfigType = types.submodule { options = { config = mkOption { @@ -67,6 +78,16 @@ let extraMakeWrapperArgs = lib.optionalString (cfg.extraPackages != [ ]) ''--suffix PATH : "${lib.makeBinPath cfg.extraPackages}"''; + extraMakeWrapperLuaCArgs = lib.optionalString (cfg.extraLuaPackages != [ ]) '' + --suffix LUA_CPATH ";" "${ + lib.concatMapStringsSep ";" pkgs.lua51Packages.getLuaCPath + cfg.extraLuaPackages + }"''; + extraMakeWrapperLuaArgs = lib.optionalString (cfg.extraLuaPackages != [ ]) '' + --suffix LUA_PATH ";" "${ + lib.concatMapStringsSep ";" pkgs.lua51Packages.getLuaPath + cfg.extraLuaPackages + }"''; in { imports = [ @@ -141,6 +162,17 @@ in { ''; }; + extraLuaPackages = mkOption { + type = with types; either extraLua51PackageType (listOf package); + default = [ ]; + defaultText = "[]"; + example = literalExpression "(ps: with ps; [ luautf8 ])"; + description = '' + A function in lua5_1.withPackages format, which returns a + list of Lua packages required for your plugins to work. + ''; + }; + generatedConfigViml = mkOption { type = types.lines; visible = true; @@ -353,7 +385,8 @@ in { programs.neovim.finalPackage = pkgs.wrapNeovimUnstable cfg.package (neovimConfig // { wrapperArgs = (lib.escapeShellArgs neovimConfig.wrapperArgs) + " " - + extraMakeWrapperArgs; + + extraMakeWrapperArgs + " " + extraMakeWrapperLuaCArgs + " " + + extraMakeWrapperLuaArgs; wrapRc = false; }); diff --git a/tests/modules/programs/neovim/plugin-config.nix b/tests/modules/programs/neovim/plugin-config.nix index f4f81d8d3..5c26abe88 100644 --- a/tests/modules/programs/neovim/plugin-config.nix +++ b/tests/modules/programs/neovim/plugin-config.nix @@ -20,6 +20,7 @@ with lib; ''; } ]; + extraLuaPackages = [ pkgs.lua51Packages.luautf8 ]; }; nmt.script = ''