You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.07 19:04:53