{ lib , writeTextFile , neovim , fd , ripgrep , nodePackages , vimPlugins , withPlayground ? false }: let extra-treesitter-textobjects = writeTextFile { name = "extra-treesitter-textobjects"; destination = "/after/queries/javascript/textobjects.scm"; text = '' ; support swapping elements inside arrays too (array "," . (_) @parameter.inner) (array . (_) @parameter.inner ",") ''; }; extraPath = [ fd ripgrep nodePackages.typescript-language-server nodePackages.eslint_d ]; in neovim.override { extraMakeWrapperArgs = "--prefix PATH : ${lib.makeBinPath extraPath}"; configure = { customRC = '' source ${./settings.lua} source ${./plugins.lua} source ${./mappings.lua} source ${./autocmd.lua} source ${./lsp.lua} source ${./theme.lua} '' + lib.optionalString withPlayground '' source ${./playground.lua} ''; packages.myVimPackage = with vimPlugins; { start = [ vim-sensible vim-sleuth vim-fugitive vim-rhubarb vim-surround vim-abolish undotree telescope-nvim telescope-fzf-native-nvim mini-nvim gitsigns-nvim sonokai (nvim-treesitter.withPlugins (p: with p; [ tree-sitter-bash tree-sitter-css tree-sitter-go tree-sitter-javascript tree-sitter-json tree-sitter-lua tree-sitter-nix tree-sitter-ruby tree-sitter-tsx tree-sitter-typescript ] ++ lib.optionals withPlayground [ tree-sitter-query ])) nvim-treesitter-textobjects extra-treesitter-textobjects nvim-lspconfig nvim-lsp-ts-utils null-ls-nvim fidget-nvim ] ++ lib.optionals withPlayground [ playground ]; }; }; }