【问题标题】:Custom Nix derivation for vim plugin failsvim 插件的自定义 Nix 派生失败
【发布时间】:2023-03-26 03:13:01
【问题描述】:

编辑:将此作为其他搜索类似问题的历史记录其中一些已解决,但最后一个问题仍未解决请参阅 ==== 行之后。

我正在使用家庭管理器,我将其设置为为我提供包含一些插件的 neovim。不幸的是 coc-nvim 插件不再是最新的所以现在我想从 github 打包它然后导入。 我是 nixos 的新手,所以我仍然想念很多东西,我相信。

到目前为止,我的幼稚做法是: .../neovim/default.nix

with import <nixpkgs> {};

let coc = callPackage ./coc-new.nix;
in
{
  enable = true;
  viAlias = true;
  vimAlias = true;
  withNodeJs = false;
  plugins = with pkgs.vimPlugins; [
    coc
    fzf-vim
    fzfWrapper
    haskell-vim
    some-more-plugins
  ];
  extraConfig = ''
    unlet! skip_defaults_vim
    " some more vimrc stuff
  '';
}

然后.../neovim/coc-new.nix

{ stdenv, fetchFromGithub, lib, config, options }:

stdenv.mkDerivation rec {
 name = "new-coc-${version}";
  version = "v0.80";

  src = fetchFromGithub {
    owner = "neoclide";
    repo = "coc.nvim";
    rev = "ce448a6945d90609bc5c063577e12b859de0834b";
#    sha256 = " ???";
  };

  installPhase = ''
    export PATH="''\${bash}/bin/bash"
    mkdir -p $out
    cp -r ./ $out
  '';
}

错误告诉我导入的不是某种“包”类型:

error: The option `programs.neovim.plugins.[definition 1-entry 1].__ignoreNulls' defined in `/home/chai/.config/nixpkgs/role/laptop-old/index.nix' does not exist.

所以请帮帮我:

  1. 我是否正确,它现在正在定义一个包但实际上并未构建它?我该如何解决这个问题?
  2. rev 的值:...我将其设置为在 github 上的 coc repo 中找到的提交哈希,对吗?
  3. sha 值.. 我从哪里得到它?

感谢您帮助一位新用户来到这里!

================================================ =============================

编辑:在评论和对man nix-has 的一些阅读的帮助下,我设法让哈希和构建工作。 我按照 ...neovim/default.nix 中的建议添加了 {} 参数,我现在有了

let coc = callPackage ./coc-new.nix {};

.../neovim/coc-new.nix 现在改为:

{ stdenv, fetchFromGitHub }:

stdenv.mkDerivation rec {
  pname = "coc-nvim";
  version = "v0.80";

  src = fetchFromGitHub {
    owner = "neoclide";
    repo = "coc.nvim";
    rev = "v0.0.80";
    sha256 = "1c2spdx4jvv7j52f37lxk64m3rx7003whjnra3y1c7m2d7ljs6rb";
  };
  dontBuild = true;
  installPhase = ''
    mkdir -p $out
    cp -r ./ $out
  '';

}

这一切都运行了,但是......新创建的派生没有被拾取。我的 vim 包目录中没有任何内容。为什么 ? 我在 (home-manager/neovim.nix)[https://github.com/nix-community/home-manager/blob/master/modules/programs/neovim.nix] 中看到:


      plugins = mkOption {
        type = with types; listOf (either package pluginWithConfigType);
        default = [ ];
        example = literalExample ''
          with pkgs.vimPlugins; [
            yankring
            vim-nix
            { plugin = vim-startify;
              config = "let g:startify_change_to_vcs_root = 0";
            }
          ]
        '';

【问题讨论】:

  • 尝试添加{},这样你就有了callPackage ./coc-new.nix {};
  • 啊,是的,这很有意义!现在我收到有关哈希的错误。我想我不明白这些哈希到底是什么或在哪里获取/生成它们
  • 这些通常是来自 github 的 tarball 的哈希值。通常,您可以将源代码中的内容替换为 Nix 从下载中获取的内容。目前 Nix 正在切换到 SRI(sha256-&lt;base64&gt; 等而不是 sha256:&lt;base32&gt; 或只是 &lt;base32&gt;)哈希表示法,这意味着您可能需要进行一些转换才能在源文件中找到要替换的哈希。见nix to-base32nix to-srinix --help
  • 嗯,谢谢提醒。我使用 prefetch-url 和一些试验和错误找到了它们:)

标签: nix nixos nixpkgs


【解决方案1】:

好的,我终于设法让它工作了。 经过更多的搜索和迷路后,原来nix有pkgs.vimUtils.buildVimPlugin 这解决了我的问题。我的文件现在是:

{ pkgs, fetchFromGitHub }:

pkgs.vimUtils.buildVimPlugin {
  pname = "coc-nvim";
  version = "v0.80";

  src = fetchFromGitHub {
    owner = "neoclide";
    repo = "coc.nvim";
    rev = "v0.0.80";
    sha256 = "1c2spdx4jvv7j52f37lxk64m3rx7003whjnra3y1c7m2d7ljs6rb";
  };
}

还有……

with import <nixpkgs> {};
let coc = callPackage ./coc-plugin.nix { };
in
{
  enable = true;
  viAlias = true;
  vimAlias = true;
  withNodeJs = false;
  plugins =  with pkgs.vimPlugins;[
    coc
    fzf-vim
    more-plugins
  ];
  extraConfig = ''
    unlet! skip_defaults_vim
    " ... more config
  '';
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-06-15
    • 2011-12-06
    • 2017-02-24
    • 2018-09-14
    • 2021-10-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多