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

如何在Nix配置中覆盖Neovim的pynvim依赖版本?

问题描述

在NixOS stable系统中使用Neovim时,其依赖的pynvim版本过旧,导致copilotchat.nvim插件无法正常工作。需要替换为nixos-unstable中的新版pynvim,但尝试以下overlay配置后仍无法获取新版本,直接使用pkgs.unstable.neovim-unwrapped也未解决问题:

_: pkgs: {
  neovim-unwrapped = pkgs.neovim-unwrapped.overrideAttrs (
    oldAttrs: rec {
      neovim-unwrapped = pkgs.neovim-unwrapped.overrideAttrs {
        extraPython3Packages = [pkgs.unstable.python3Packages.pynvim pkgs.unstable.python3Packages.prompt-toolkit pkgs.unstable.python3Packages.requests];
      };
    }
  );
}

修复方案

1. 修正Overlay配置

原配置的核心问题是嵌套了无效的overrideAttrs调用:在overrideAttrs的回调中不应重新定义neovim-unwrapped,而是直接修改目标属性。正确配置如下:

_: pkgs: {
  neovim-unwrapped = pkgs.neovim-unwrapped.overrideAttrs (oldAttrs: {
    # 追加unstable的Python包到原有依赖中
    extraPython3Packages = ps: oldAttrs.extraPython3Packages ps ++ [
      pkgs.unstable.python3Packages.pynvim
      pkgs.unstable.python3Packages.prompt-toolkit
      pkgs.unstable.python3Packages.requests
    ];
  });
}

如果需要完全替换原有Python依赖(而非追加),可改为:

_: pkgs: {
  neovim-unwrapped = pkgs.neovim-unwrapped.overrideAttrs (oldAttrs: {
    extraPython3Packages = ps: [
      pkgs.unstable.python3Packages.pynvim
      pkgs.unstable.python3Packages.prompt-toolkit
      pkgs.unstable.python3Packages.requests
    ];
  });
}

2. 确保已导入unstable分支

在主配置文件(如configuration.nix)中,必须先导入nixos-unstable的包集合,否则pkgs.unstable无法识别:

let
  unstable = import <nixos-unstable> {
    config = config.nixpkgs.config; # 继承现有nixpkgs配置
  };
in
{
  nixpkgs.overlays = [
    # 引入上述修正后的overlay配置
    (import ./your-overlay-file.nix)
  ];

  # 确保系统使用修改后的Neovim
  environment.systemPackages = with pkgs; [ neovim ];
}

3. 替代方案:直接使用unstable的Neovim

如果上述方法仍有问题,可以直接将Neovim替换为unstable版本,同时保持其他依赖为stable:

let
  unstable = import <nixos-unstable> { config = config.nixpkgs.config; };
in
{
  environment.systemPackages = with pkgs; [
    unstable.neovim
    # 其他stable环境包
  ];
}

验证方法

运行以下命令检查pynvim版本,确认已替换为unstable中的新版本:

nix-shell -p neovim --run "python3 -c 'import pynvim; print(pynvim.__version__)'"

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.29 19:58:34