Hello,
I am trying to create my own neovim configuration. I would like it to be
-
Overlay so
nvim
is the one I configured - Isolated from the rest of the system. I don’t wan’t to have my user’s PATH polluted with stuff nvim plugins need to function
- Self contained so no github repo inputs or similar
- Single file-ish I think some projects in order to solve “problem” of copy pasting one or two lines invent like 20 .nix files of indirection and it makes my head spin
Its one of my first nix code I wrote and not just copy pasted and to my surprise I mostly succeeded except one problem I think might be an indication of some bigger issue.
The weird path fiddling in init.lua
I need to do with lsp plugins so they are able to start their respective servers.
The whole point of nvim-lspconfig
is you just need to do require'lspconfig'.tsserver.setup{}
and you are good to go but maybe in nix its little bit more involved.
Could you please check my code if what I am doing is ok? Any advice is appreciated, thank you.
{ pkgs, lib, ... }: {
home.packages = [
(pkgs.neovim.override {
configure =
let
vimEnvPath = pkgs.symlinkJoin {
name = "nvim-path";
paths = with pkgs;
# Common deps
[ ripgrep fd git ] ++
# Nix
[ rnix-lsp nixfmt ];
# ... omitted ...
};
in
{
viAlias = true;
vimAlias = true;
withPython3 = true;
withNodeJs = true;
withRuby = true;
extraMakeWrapperArgs = with pkgs; "--set PATH '${vimEnvPath}'";
customRC = ''
lua << EOF
vim.g.vimEnvPath = "${vimEnvPath}";
vim.env.PATH = "${vimEnvPath}";
EOF
luafile ${./init.lua}
'';
packages.myNeovimPackages = with pkgs.vimPlugins; {
start =
# Explorer
[ nvim-tree-lua nvim-web-devicons ] ++
# ... omited ...
[ nvim-lspconfig ];
opt = [ ];
};
};
})
];
}
This is its own file just to have syntax highlighting and lua language support in general. I wouldn’t be surprised if theres some nix way how to make lsp servers discoverable to nvim without hardcoding the path as I have to do.
-- init.lua
-- ... omited ...
require'lspconfig'.rnix.setup {
cmd = {
vim.g.vimEnvPath .. '/bin/rnix-lsp',
},
}
require'lspconfig'.tsserver.setup {
cmd = {
vim.g.vimEnvPath .. '/lib/node_modules/.bin/typescript-language-server',
'--stdio',
},
}
-- ... omited ...
/nix/store/x85rn5hsbzarfv05zsmplnif3g8c6viv-nvim-path
├── bin
│ ├── git-upload-archive -> git
│ ├── git-receive-pack -> git
│ ├── git-upload-pack -> git
│ ├── git-http-backend -> ../libexec/git-core/git-http-backend
│ ├── git-jump -> ../share/git/contrib/git-jump/git-jump
│ ├── fd -> /nix/store/wgx85dnnrfj5mkxcscj83hzy2ylap8wr-fd-8.6.0/bin/fd
│ ├── git -> /nix/store/bslw1kzx445wxp08ykq2vdsgnr516vcq-git-2.39.1/bin/git
│ ├── manix -> /nix/store/di6iv34xd90ggl2hw208614bw44yl88f-manix-0.6.3/bin/manix
│ ├── rg -> /nix/store/ki5dcqd1gwakgf3apgslgxnyl6b2xni7-ripgrep-13.0.0/bin/rg
│ ├── scalar -> /nix/store/bslw1kzx445wxp08ykq2vdsgnr516vcq-git-2.39.1/bin/scalar
│ ├── nixfmt -> /nix/store/z2wb4vgnz92jddj05yd2ny3i6bwbd7zm-nixfmt-0.5.0/bin/nixfmt
│ ├── git-shell -> /nix/store/bslw1kzx445wxp08ykq2vdsgnr516vcq-git-2.39.1/bin/git-shell
│ ├── git-cvsserver -> /nix/store/bslw1kzx445wxp08ykq2vdsgnr516vcq-git-2.39.1/bin/git-cvsserver
│ ├── git-credential-netrc -> /nix/store/bslw1kzx445wxp08ykq2vdsgnr516vcq-git-2.39.1/bin/git-credential-netrc
│ ├── rnix-lsp -> /nix/store/ysnmhww6s1w716375iir5k6k96wj5r23-rnix-lsp-unstable-2022-11-27/bin/rnix-lsp
│ └── lua-language-server -> /nix/store/fnjqwqb0wyzn03ygqs8wxph3xhzicdyd-sumneko-lua-language-server-3.6.7/bin/lua-language-server
├── share
│ ├── locale
│ ├── git-core
│ ├── git-gui
│ ├── man
│ ├── git
│ ├── bash-completion
│ ├── gitweb
│ ├── zsh
│ ├── gitk
│ ├── lua-language-server
│ └── fish
├── lib
│ ├── perl5
│ └── node_modules
└── libexec
└── git-core
lib/node_modules/.bin
├── tsc -> ../typescript/bin/tsc
├── tsserver -> ../typescript/bin/tsserver
├── bash-language-server -> ../bash-language-server/out/cli.js
├── typescript-language-server -> ../typescript-language-server/lib/cli.mjs
├── vscode-css-language-server -> ../vscode-langservers-extracted/bin/vscode-css-language-server
├── vscode-json-language-server -> ../vscode-langservers-extracted/bin/vscode-json-language-server
├── vscode-html-language-server -> ../vscode-langservers-extracted/bin/vscode-html-language-server
├── vscode-eslint-language-server -> ../vscode-langservers-extracted/bin/vscode-eslint-language-server
└── vscode-markdown-language-server -> ../vscode-langservers-extracted/bin/vscode-markdown-language-server
The error when opening .nix
file without hardcoded cmd
Spawning Language server with md: 'rnix-Isp' failed. The language server is either not installed, missing from PATH, or not executable.
EDIT:
Another problem I encountered the nvim-tree
cannot find git
executable so it seems its not possible to replace nvim PATH like I am doing
EDIT2:
Doing --prefix PATH : ${lib.makeBinPath [ /* packages */ ]}
fixed most of the problems.