Hello,
The NixOS community has been great in helping me with my first steps in this distro. So I’ll ask again few neovim-related issues I couldn’t figure out after 3 days of search.
First, let me tell you that I’m trying to import a working neovim setup from another distro. Then let’s see how I’ve configured neovim. I have this in my home.nix file:
programs.neovim = {
enable = true;
withPython3 = true;
extraPython3Packages = (ps: with ps; [
pynvim
unidecode
black
isort
]);
plugins = with pkgs.vimPlugins; [
{ plugin = *plugin_name*;
type = "lua";
config = builtins.readFile *config_file_path*;
}
...
];
};
(my init.lua file is in the $HOME/.config/nvim folder)
With that most of my plugins work. Most because few are troublesome. Let’s focus on three of them:
-
I have pkgs.vimPlugins.nvim-comment installed but neovim reports that the command
CommentToggle
is not an editor command -
I have pkgs.vimPlugins.nvim-treesitter installed but the command
TSInstall markdown
returns “could not create parser dir '/nix/store/…/nvim-treesitter/parser ': Vim:E739: read-only file system '” -
I have pkgs.vimPlugins.mason-nvim and pkgs.vimPlugins.mason-lspconfig-nvim installed but runngin
checkhealth mason
returns few warnings:
- mason.nvim is not the latest version (I use the unstable channel)
- pip: not available spawn: python3 failed with exit code 1 and signal 0. /run/current-system/sw/bin/python3: No module named pip (note that python3_host_prog and python3_host_prog pip are marked “OK”)
Thanks again for your assistance.
Have tried this myself and never had much luck trying to install nvim plugins via nix.
I’ve found the best way is to just use the plugin managers built for neovim, I’m not sure if this applies to all of them but lazy.nvim seems to be fairly declarative anyway, have home-manager map a directory to .config/nvim/ and away you go
As a side note though I think it is rather silly just how many different neovim package managers there are, which at the end of the day all do the same thing in very similar ways
I followed this guide from VimJoyer and it works like a charm. Have been using this approach for quite a while now. It just uses raw nix with homemanager
Here is an alternative Piped link(s):
this
Piped is a privacy-respecting open-source alternative frontend to YouTube.
I’m open-source; check me out at GitHub.
Thanks for the feedback. I’m used to packer but it’s not maintained anymore so may be a good time to switch to lazy.
I’ll see if I can have it work in NixOS.
It worked. Thanks! Just a question though: why is there instructions and all the packages in NixOS if it’s not yet reliable?
I have no idea, from what I gather there aren’t all the packages
I’m not sure what if anything installing them via nix does I’ve just come to the realisation it’s already declarative so why would people bother getting it working under nix
As other comments point out, they are usually not properly packaged through nix.
If you read the
vim/plugins
modules, for most plugins, the derivation just downloads the plugin, puts it tonix-store
, and makes it available to the editor through environment variables. So it’s similar to the binary distributed software. Two most notable restrictions:nix-store
model.So for plugins that don’t have external dependencies (or dependencies other than the “common” ones like python or sh that happen to be available), and that don’t interact with the filesystems, this approach would be fine, but the more complex ones would fail.
In your example,
mason
failed because of 1, home-manager wasn’t aware that thepip
module is a transient dependency of this plugin; andtreesitter
failed because of 2, because it doesn’t know thatnix-store
is read-only and should be managed bynix
.There are no general solutions, but people may have nixified some plugins on a case-by-case basis. If you don’t want to spend a lot of time (and remember that it might be broken by the next plugin upgrade), as others have suggested, take the traditional plugin management approach. (Personally, I use LunarVim which uses
Lazy.nvim
and it’s been working fine.)