I’m trying to package GitHub - ms-jpq/coq_nvim: Fast as FUCK nvim completion. SQLite, concurrent scheduler, hundreds of hours of optimization.
The python package lists a few requirements, which can be installed imperatively through a Neovim command :COQDeps
but I’d like to make things more Nix-y and have Nix handle the python requirements.
Important disclaimer: I’m not the author of the plugin and I know nothing about Python in general.
Here’s what I tried so far: GitHub - cideM/coq-nvim-nix
Since the flake is still fairly small, I’ll copy the code verbatim:
{
description = "A very basic flake";
inputs = {
coq.url = "github:ms-jpq/coq_nvim";
coq.flake = false;
nixpkgs.url = "github:NixOS/nixpkgs/nixpkgs-unstable";
flake-utils.url = "github:numtide/flake-utils";
mach-nix.url = "github:DavHau/mach-nix";
};
outputs = { self, nixpkgs, coq, flake-utils, mach-nix }:
flake-utils.lib.eachSystem ["x86_64-linux"] (system:
let
pkgs = import nixpkgs { inherit system; };
machNix = import mach-nix { inherit pkgs; };
in
rec {
packages = flake-utils.lib.flattenTree ({
coq = machNix.mkPython {
requirements = ''
pynvim==0.4.3
PyYAML==5.4.1
'';
packagesExtra = [
"https://github.com/ms-jpq/std2/archive/4a7eec16d03c6a6510a604cf6caea69aaffa8c51.tar.gz"
"https://github.com/ms-jpq/pynvim_pp/archive/db2a630b4d98ee626b16bf9450c9a48f954aa11f.tar.gz"
];
};
coqNeovimPlugin = pkgs.vimUtils.buildVimPluginFrom2Nix {
name = "coq-nvim";
version = "latest";
src = coq;
passthru.python3Dependencies = ps: [ packages.coq ];
};
});
defaultPackage = packages.coq;
}
);
}
If I change
passthru.python3Dependencies = ps: [ packages.coq ];
to
passthru.python3Dependencies = ps: [ (ps.toPythonModule packages.coq) ];
and try to include this in my Neovim configuration I get
$ sudo nixos-rebuild switch --flake .
warning: Git tree '/home/tifa/dotfiles' is dirty
building the system configuration...
warning: Git tree '/home/tifa/dotfiles' is dirty
error: in pure evaluation mode, 'fetchTarball' requires a 'sha256' argument
(use '--show-trace' to show detailed location information)
The fact that I don’t get this error without the toPythonModule
makes me wonder if, without toPythonModule
, packages.coq
isn’t actually evaluated as much as it should be.
In general though, I don’t really understand how any of this works. I got toPythonModule
and the passthru
thing from pkgs/misc/vim-plugins/overrides.nix
in Nixpkgs and I more or less tried some random functions from mach-nix
.
My theory is this:
- Adding the Neovim code from the plugin is easy and straight forward. It’s not the first Neovim plugin I’ve packaged
- The Python source code doesn’t need any special treatment, so that too should be taken care of by just using
buildVimPluginFrom2Nix
- The Python dependencies on the other hand need to be made available to the Python package set and interpreter that Neovim is using
The third point is what I’m struggling with. I was hoping that mkPython
would generate a folder where those dependencies can be found and that the passthru
attribute would magically make things work.
I also tried using buildPythonApplication
instead of mkPython
but the source doesn’t include a setup.py
so that doesn’t work.