LSP unable to start in neovim overlay with its own PATH

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.