1

EDIT: leaving this as some history for other searching similar problems Some of it is solved, but last questions still unresolved See after the ==== line.

I am using home manager and I set it up to provide me with neovim including some plugins. Unfortunately the coc-nvim plugin is no longer up to date so now I would like to package it from github and then import. I am new to nixos so there are many things I still miss, I believe.

My naive approach so far is: .../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
  '';
}

and then .../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
  '';
}

The error tells me that whatever is imported is not of some 'package' type:

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.

So please help me out:

  1. Am I correct that it is now defining a package but not actually building it ? And Hw do I go about fixing that?
  2. the values for rev : ... I set it to the commit hash found in coc repo on github, is that correct?
  3. the sha value.. where do I get that ?

Thanks for helping a new user on his way here!

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

EDIT: With help of the comment and some reading up on man nix-has I managed to get the hashes and the build to work. I added the {} argument as suggested so in ...neovim/default.nix I now have

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

and .../neovim/coc-new.nix now reads:

{ 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
  '';

}

It all runs but... the newly created derivation is not picked up. Nothing in my vim packs directory. Why ? I see in (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";
            }
          ]
        '';
Chai
  • 1,796
  • 2
  • 18
  • 31
  • 1
    Try adding `{}` so you have `callPackage ./coc-new.nix {};` – Robert Hensing Jan 17 '21 at 22:16
  • ah yes, that makes a lot of sense! Now I am getting errors about the hashes. I guess I do not understnd what these hashes really are or where to get/generate them – Chai Jan 17 '21 at 22:54
  • Those are usually hashes of tarballs from github. Usually you can just replace the ones in the source by the ones Nix is getting from the download. Currently Nix is in the process of switching to SRI (`sha256-` etc rather than `sha256:` or just ``) hash notation which means you may have to do some conversions to find the hash to replace in your source file. See `nix to-base32`, `nix to-sri`, `nix --help`. – Robert Hensing Jan 18 '21 at 16:34
  • Ah thx for the heads up then. I found them using the prefetch-url and some trial and error :) – Chai Jan 18 '21 at 16:42

1 Answers1

2

Ok I finally managed to get it working. After more searching and getting lost it turns out nix has pkgs.vimUtils.buildVimPlugin This solved my problem. My files now read:

{ pkgs, fetchFromGitHub }:

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

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

And ...

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
  '';
}

Chai
  • 1,796
  • 2
  • 18
  • 31