diff --git a/modules/programs/neovim.nix b/modules/programs/neovim.nix index e5b2c0c51e8a..357c83cf9f4f 100644 --- a/modules/programs/neovim.nix +++ b/modules/programs/neovim.nix @@ -22,6 +22,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 { @@ -65,6 +76,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 { options = { @@ -152,6 +173,17 @@ in { ''; }; + extraLuaPackages = mkOption { + type = with types; either extraLua51PackageType (listOf package); + default = [ ]; + defaultText = "[]"; + example = literalExample "(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. + ''; + }; + package = mkOption { type = types.package; default = pkgs.neovim-unwrapped; @@ -267,7 +299,8 @@ in { programs.neovim.finalPackage = pkgs.wrapNeovimUnstable cfg.package (neovimConfig // { wrapperArgs = (lib.escapeShellArgs neovimConfig.wrapperArgs) + " " - + extraMakeWrapperArgs; + + extraMakeWrapperArgs + " " + extraMakeWrapperLuaCArgs + " " + + extraMakeWrapperLuaArgs; }); programs.bash.shellAliases = mkIf cfg.vimdiffAlias { vimdiff = "nvim -d"; }; diff --git a/tests/modules/programs/neovim/plugin-config.nix b/tests/modules/programs/neovim/plugin-config.nix index 4c96fa78470a..9e9bccbcd7cf 100644 --- a/tests/modules/programs/neovim/plugin-config.nix +++ b/tests/modules/programs/neovim/plugin-config.nix @@ -20,6 +20,9 @@ with lib; ''; } ]; + extraLuaPackages = [ + pkgs.lua51Packages.luautf8 + ]; }; nmt.script = ''