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

NixOS下打包GitHub上的Neovim插件modes.nvim遇问题求助

解决modes.nvim在NixOS 22.05 + Home Manager下的构建问题

问题分析

构建失败的直接原因是Nix纯净构建环境中没有git,插件的Makefile尝试用git拉取依赖plenary.nvim,但Nix的构建环境是隔离的,不会继承本地已安装的软件包。另外,通过git动态拉取依赖不符合Nix的可复现性要求,更可靠的方式是手动声明依赖。

解决方案

1. 临时修复:给构建环境添加git

在buildVimPlugin配置中加入nativeBuildInputs,将git纳入构建依赖:

pkgs.vimUtils.buildVimPlugin {
  name = "modes-nvim";
  src = pkgs.fetchFromGitHub {
    owner = "mvllow";
    repo = "modes.nvim";
    rev = "3188692abf02a8838ec75e59d68c2ce3e4323f5c";
    sha256 = "sha256-2QDpwQ9+F5t5gTR1KLVzRrvriwo5JUHatZEJnc0ojV8=";
  };
  # 向构建环境添加git
  nativeBuildInputs = [ pkgs.git ];
}

2. 推荐方案:手动处理依赖,保证可复现性

直接使用Nixpkgs中已收录的plenary.nvim作为依赖,同时禁用插件自带的依赖拉取逻辑:

let
  plenary = pkgs.vimPlugins.plenary-nvim;
in
pkgs.vimUtils.buildVimPlugin {
  name = "modes-nvim";
  src = pkgs.fetchFromGitHub {
    owner = "mvllow";
    repo = "modes.nvim";
    rev = "3188692abf02a8838ec75e59d68c2ce3e4323f5c";
    sha256 = "sha256-2QDpwQ9+F5t5gTR1KLVzRrvriwo5JUHatZEJnc0ojV8=";
  };
  # 删除插件自带的Makefile,避免自动拉取依赖
  postPatch = ''
    rm Makefile
  '';
  # 声明插件依赖,Home Manager会自动处理加载顺序
  dependencies = [ plenary ];
}

关于SHA256格式的疑问

你看到的十六进制SHA256和当前使用的sha256-xxx=格式都是Nix支持的有效格式:

  • 十六进制是原始哈希字符串
  • sha256-xxx=是Nix的base64编码格式,通过nix-prefetch-url或构建错误信息返回的就是这种格式,两者完全等价。

验证

修改配置后执行home-manager switch,构建流程将正常完成,插件会和依赖plenary.nvim一起被正确安装到Neovim环境中。

内容的提问来源于stack exchange,提问作者cameron1024

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.25 23:36:22