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
相关产品推荐
相关产品推荐

