vim 插件的自定义 Nix 派生失败
Custom Nix derivation for vim plugin fails
编辑:将此作为其他搜索类似问题的一些历史记录其中一些已解决,但最后的问题仍未解决请参阅 ==== 行之后。
我正在使用家庭管理器,我将其设置为向我提供包含一些插件的 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
'';
}
错误告诉我导入的内容不是某种 'package' 类型:
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.
所以请帮帮我:
- 我说的对吗,它现在定义了一个包,但实际上并没有构建它?我该如何解决这个问题?
- rev 的值:...我将其设置为在 github 上的 coc repo 中找到的提交哈希,是否正确?
- 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";
}
]
'';
好的,我终于成功了。
经过更多的搜索和迷路后发现 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
'';
}
编辑:将此作为其他搜索类似问题的一些历史记录其中一些已解决,但最后的问题仍未解决请参阅 ==== 行之后。
我正在使用家庭管理器,我将其设置为向我提供包含一些插件的 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
'';
}
错误告诉我导入的内容不是某种 'package' 类型:
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.
所以请帮帮我:
- 我说的对吗,它现在定义了一个包,但实际上并没有构建它?我该如何解决这个问题?
- rev 的值:...我将其设置为在 github 上的 coc repo 中找到的提交哈希,是否正确?
- 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";
}
]
'';
好的,我终于成功了。
经过更多的搜索和迷路后发现 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
'';
}