在Nix的shell.nix中配置NVChad时core模块缺失问题求助
Nix Shell中使用NvChad时core模块缺失的原因及解决办法
问题描述
配置的shell.nix如下:
{ pkgs ? import <nixpkgs> {} }: let nvchad = pkgs.fetchgit { url = "https://github.com/NvChad/NvChad.git"; sha256 = "sha256-7GfprTjfCrXzFiZOVw/tCB9bhA9sbNY7AicmbLXzICs="; }; in pkgs.mkShell { buildInputs = [ pkgs.tmux pkgs.python3 pkgs.neovim pkgs.neofetch pkgs.git pkgs.bat nvchad ]; shellHook = '' export VIMINIT='source ${nvchad}/init.lua' tmux ''; }
启动Neovim时出现错误:
E5113: Error while calling lua chunk: /nix/store/h4mw9z5s0wmlbvnhifiwajysqbx12bwj-NvChad/init.lua:1: module 'core' not found: no field package.preload['core'] no file '/nix/store/0qxy26q82jq09wjnj8ik291i6gi1y6wd-luajit-2.1.1693350652-env/share/lua/5.1/core.lua' no file '/nix/store/0qxy26q82jq09wjnj8ik291i6gi1y6wd-luajit-2.1.1693350652-env/share/lua/5.1/core/init.lua' no file '/nix/store/0qxy26q82jq09wjnj8ik291i6gi1y6wd-luajit-2.1.1693350652-env/lib/lua/5.1/core.so' stack traceback: [C]: in function 'require' /nix/store/h4mw9z5s0wmlbvnhifiwajysqbx12bwj-NvChad/init.lua:1: in main chunk
原因分析
NvChad的core模块存放在其仓库自身的目录结构中,但当前配置仅将NvChad的源码包加入了buildInputs,并未将其目录添加到Lua的模块搜索路径中。Neovim使用的Lua默认只会去系统预设的路径查找模块,无法定位到Nix Store里NvChad目录下的core模块,因此触发了找不到模块的错误。
解决办法
方法1:手动添加Lua模块路径
修改shellHook,将NvChad的目录加入LUA_PATH环境变量,让Lua能找到NvChad的内部模块:
{ pkgs ? import <nixpkgs> {} }: let nvchad = pkgs.fetchgit { url = "https://github.com/NvChad/NvChad.git"; sha256 = "sha256-7GfprTjfCrXzFiZOVw/tCB9bhA9sbNY7AicmbLXzICs="; }; in pkgs.mkShell { buildInputs = [ pkgs.tmux pkgs.python3 pkgs.neovim pkgs.neofetch pkgs.git pkgs.bat nvchad ]; shellHook = '' export LUA_PATH="${nvchad}/?.lua;${nvchad}/?/init.lua;$LUA_PATH" export VIMINIT='source ${nvchad}/init.lua' tmux ''; }
方法2:使用Nix的Neovim插件包装器(推荐)
利用Nix提供的neovim.withPlugins函数,自动处理插件的路径配置,无需手动设置环境变量:
{ pkgs ? import <nixpkgs> {} }: let nvchad = pkgs.vimUtils.buildVimPlugin { pname = "NvChad"; version = "unstable"; src = pkgs.fetchgit { url = "https://github.com/NvChad/NvChad.git"; sha256 = "sha256-7GfprTjfCrXzFiZOVw/tCB9bhA9sbNY7AicmbLXzICs="; }; }; in pkgs.mkShell { buildInputs = [ pkgs.tmux pkgs.python3 (pkgs.neovim.withPlugins (plugins: [ nvchad ])) pkgs.neofetch pkgs.git pkgs.bat ]; shellHook = '' tmux ''; }
这种方式下,Nix会自动将NvChad注册为Neovim的插件,启动Neovim时会自动加载NvChad,无需手动设置VIMINIT。
内容的提问来源于stack exchange,提问作者Prakhar Mishra
相关产品推荐
相关产品推荐

