vimPlugins.avante-nvim: 2024-10-18 -> 2024-11-04
[NixPkgs.git] / pkgs / applications / editors / vim / plugins / overrides.nix
blobc67bda1897dc18d10357fcdf42c74f8311131e54
2   lib,
3   stdenv,
4   # nixpkgs functions
5   buildGoModule,
6   buildVimPlugin,
7   fetchFromGitHub,
8   fetchFromSourcehut,
9   fetchpatch,
10   fetchurl,
11   neovimUtils,
12   substituteAll,
13   # Language dependencies
14   fetchYarnDeps,
15   mkYarnModules,
16   python3,
17   rustPlatform,
18   # Misc dependencies
19   arrow-cpp,
20   Cocoa,
21   coc-clangd,
22   coc-css,
23   coc-diagnostic,
24   coc-pyright,
25   code-minimap,
26   dasht,
27   deno,
28   direnv,
29   duckdb,
30   fish,
31   fzf,
32   gawk,
33   git,
34   himalaya,
35   htop,
36   jq,
37   khard,
38   languagetool,
39   llvmPackages,
40   meson,
41   neovim-unwrapped,
42   nim1,
43   nodePackages,
44   openscad,
45   pandoc,
46   parinfer-rust,
47   phpactor,
48   ranger,
49   ripgrep,
50   skim,
51   sqlite,
52   statix,
53   stylish-haskell,
54   tabnine,
55   taskwarrior2,
56   taskwarrior3,
57   tmux,
58   tup,
59   vim,
60   which,
61   xkb-switch,
62   ycmd,
63   zoxide,
64   nodejs,
65   xdotool,
66   xorg,
67   xxd,
68   zathura,
69   zenity,
70   zsh,
71   # codeium-nvim dependencies
72   codeium,
73   # codesnap-nvim dependencies
74   clang,
75   libuv,
76   # command-t dependencies
77   getconf,
78   ruby,
79   # cornelis dependencies
80   cornelis,
81   # cpsm dependencies
82   boost,
83   cmake,
84   icu,
85   ncurses,
86   # LanguageClient-neovim dependencies
87   CoreFoundation,
88   CoreServices,
89   # nvim-treesitter dependencies
90   callPackage,
91   # Preview-nvim dependencies
92   md-tui,
93   # sg.nvim dependencies
94   darwin,
95   # sved dependencies
96   glib,
97   gobject-introspection,
98   wrapGAppsHook3,
99   writeText,
100   # sniprun dependencies
101   bashInteractive,
102   coreutils,
103   curl,
104   gnugrep,
105   gnused,
106   makeWrapper,
107   procps,
108   # sg-nvim dependencies
109   openssl,
110   pkg-config,
111   # vim-agda dependencies
112   agda,
113   # vim-go dependencies
114   asmfmt,
115   delve,
116   errcheck,
117   go-motion,
118   go-tools,
119   gocode-gomod,
120   godef,
121   gogetdoc,
122   golangci-lint,
123   golint,
124   gomodifytags,
125   gopls,
126   gotags,
127   gotools,
128   iferr,
129   impl,
130   reftools,
131   revive,
132   # hurl dependencies
133   hurl,
134   # must be lua51Packages
135   luajitPackages,
136   aider-chat,
137   # typst-preview dependencies
138   tinymist,
139   websocat,
141 self: super:
143   luaPackages = neovim-unwrapped.lua.pkgs;
146   alpha-nvim = super.alpha-nvim.overrideAttrs {
147     nvimRequireCheck = "alpha";
148   };
150   advanced-git-search-nvim = super.advanced-git-search-nvim.overrideAttrs {
151     dependencies = with super; [
152       telescope-nvim
153       vim-fugitive
154       vim-rhubarb
155     ];
156     nvimRequireCheck = "advanced_git_search.utils";
157   };
159   animation-nvim = super.animation-nvim.overrideAttrs {
160     dependencies = with self; [ middleclass ];
161     nvimRequireCheck = "animation";
162   };
164   autosave-nvim = super.autosave-nvim.overrideAttrs {
165     dependencies = with super; [ plenary-nvim ];
166     nvimRequireCheck = "autosave";
167   };
169   avante-nvim = super.avante-nvim.overrideAttrs (
170     oldAttrs:
171     let
172       avante-nvim-lib = rustPlatform.buildRustPackage {
173         pname = "avante-nvim-lib";
174         inherit (oldAttrs) version src;
176         cargoHash = "sha256-Hh7qAmGtxfWtkBBsNq0iVTruUSe0duE4tXaajDIt8zQ=";
178         nativeBuildInputs = [
179           pkg-config
180         ];
182         buildInputs = [
183           openssl
184         ];
186         buildFeatures = [ "luajit" ];
188         checkFlags = [
189           # Disabled because they access the network.
190           "--skip=test_hf"
191           "--skip=test_public_url"
192           "--skip=test_roundtrip"
193         ];
194       };
195     in
196     {
197       dependencies = with self; [
198         dressing-nvim
199         nui-nvim
200         nvim-treesitter
201         plenary-nvim
202       ];
204       postInstall =
205         let
206           ext = stdenv.hostPlatform.extensions.sharedLibrary;
207         in
208         ''
209           mkdir -p $out/build
210           ln -s ${avante-nvim-lib}/lib/libavante_repo_map${ext} $out/build/avante_repo_map${ext}
211           ln -s ${avante-nvim-lib}/lib/libavante_templates${ext} $out/build/avante_templates${ext}
212           ln -s ${avante-nvim-lib}/lib/libavante_tokenizers${ext} $out/build/avante_tokenizers${ext}
213         '';
215       doInstallCheck = true;
216       nvimRequireCheck = "avante";
218       meta = {
219         description = "Neovim plugin designed to emulate the behaviour of the Cursor AI IDE";
220         homepage = "https://github.com/yetone/avante.nvim";
221         license = lib.licenses.asl20;
222         maintainers = with lib.maintainers; [
223           ttrei
224           aarnphm
225         ];
226       };
227     }
228   );
230   barbecue-nvim = super.barbecue-nvim.overrideAttrs {
231     dependencies = with self; [
232       nvim-lspconfig
233       nvim-navic
234     ];
235     meta = {
236       description = "VS Code like winbar for Neovim";
237       homepage = "https://github.com/utilyre/barbecue.nvim";
238       license = lib.licenses.mit;
239       maintainers = with lib.maintainers; [ lightquantum ];
240     };
241     nvimRequireCheck = "barbecue";
242   };
244   # The GitHub repository returns 404, which breaks the update script
245   bitbake-vim = buildVimPlugin {
246     pname = "bitbake.vim";
247     version = "2021-02-06";
248     src = fetchFromGitHub {
249       owner = "sblumentritt";
250       repo = "bitbake.vim";
251       rev = "faddca1e8768b10c80ee85221fb51a560df5ba45";
252       sha256 = "1hfly2vxhhvjdiwgfz58hr3523kf9z71i78vk168n3kdqp5vkwrp";
253     };
254     meta.homepage = "https://github.com/sblumentritt/bitbake.vim/";
255   };
257   blink-cmp = callPackage ./blink-cmp { };
259   chadtree = super.chadtree.overrideAttrs {
260     buildInputs = [
261       python3
262     ];
263     passthru.python3Dependencies =
264       ps: with ps; [
265         pynvim-pp
266         pyyaml
267         std2
268       ];
270     # We need some patches so it stops complaining about not being in a venv
271     patches = [ ./patches/chadtree/emulate-venv.patch ];
272     nvimRequireCheck = "chadtree";
273   };
275   ChatGPT-nvim = super.ChatGPT-nvim.overrideAttrs {
276     dependencies = with self; [
277       nui-nvim
278       plenary-nvim
279       telescope-nvim
280     ];
281     nvimRequireCheck = "chatgpt";
282   };
284   clang_complete = super.clang_complete.overrideAttrs {
285     # In addition to the arguments you pass to your compiler, you also need to
286     # specify the path of the C++ std header (if you are using C++).
287     # These usually implicitly set by cc-wrapper around clang (pkgs/build-support/cc-wrapper).
288     # The linked ruby code shows generates the required '.clang_complete' for cmake based projects
289     # https://gist.github.com/Mic92/135e83803ed29162817fce4098dec144
290     preFixup =
291       ''
292         substituteInPlace "$out"/plugin/clang_complete.vim \
293           --replace "let g:clang_library_path = ''
294       + "''"
295       + ''
296         " "let g:clang_library_path='${llvmPackages.libclang.lib}/lib/libclang.so'"
298               substituteInPlace "$out"/plugin/libclang.py \
299                 --replace "/usr/lib/clang" "${llvmPackages.clang.cc}/lib/clang"
300       '';
301   };
303   clighter8 = super.clighter8.overrideAttrs {
304     preFixup = ''
305       sed "/^let g:clighter8_libclang_path/s|')$|${llvmPackages.clang.cc.lib}/lib/libclang.so')|" \
306         -i "$out"/plugin/clighter8.vim
307     '';
308   };
310   clipboard-image-nvim = super.clipboard-image-nvim.overrideAttrs {
311     postPatch = ''
312       sed -i -e 's/require "health"/vim.health/' lua/clipboard-image/health.lua
313     '';
314     nvimRequireCheck = "clipboard-image";
315   };
317   cmake-tools-nvim = super.cmake-tools-nvim.overrideAttrs {
318     dependencies = with self; [ plenary-nvim ];
319     nvimRequireCheck = "cmake-tools";
320   };
322   cmp-ai = super.cmp-ai.overrideAttrs {
323     dependencies = with self; [
324       nvim-cmp
325       plenary-nvim
326     ];
327     nvimRequireCheck = "cmp_ai";
328   };
330   cmp-clippy = super.cmp-clippy.overrideAttrs {
331     dependencies = with self; [
332       nvim-cmp
333       plenary-nvim
334     ];
335     nvimRequireCheck = "cmp_clippy";
336   };
338   cmp-copilot = super.cmp-copilot.overrideAttrs {
339     dependencies = with self; [
340       nvim-cmp
341       copilot-vim
342     ];
343     nvimRequireCheck = "cmp_copilot";
344   };
346   cmp-ctags = super.cmp-ctags.overrideAttrs {
347     dependencies = with self; [ nvim-cmp ];
348     nvimRequireCheck = "cmp_ctags";
349   };
351   cmp-dap = super.cmp-dap.overrideAttrs {
352     dependencies = with self; [
353       nvim-cmp
354       nvim-dap
355     ];
356     nvimRequireCheck = "cmp_dap";
357   };
359   cmp-dictionary = super.cmp-dictionary.overrideAttrs {
360     dependencies = with self; [ nvim-cmp ];
361     nvimRequireCheck = "cmp_dictionary";
362   };
364   cmp-digraphs = super.cmp-digraphs.overrideAttrs {
365     dependencies = with self; [ nvim-cmp ];
366     nvimRequireCheck = "cmp_digraphs";
367   };
369   cmp-fish = super.cmp-fish.overrideAttrs {
370     dependencies = with self; [ nvim-cmp ];
371     nvimRequireCheck = "cmp_fish";
372   };
374   cmp-fuzzy-buffer = super.cmp-fuzzy-buffer.overrideAttrs {
375     dependencies = with self; [
376       nvim-cmp
377       fuzzy-nvim
378     ];
379     nvimRequireCheck = "cmp_fuzzy_buffer";
380   };
382   cmp-fuzzy-path = super.cmp-fuzzy-path.overrideAttrs {
383     dependencies = with self; [
384       nvim-cmp
385       fuzzy-nvim
386     ];
387     nvimRequireCheck = "cmp_fuzzy_path";
388   };
390   cmp-git = super.cmp-git.overrideAttrs {
391     dependencies = with self; [
392       nvim-cmp
393       plenary-nvim
394     ];
395     nvimRequireCheck = "cmp_git";
396   };
398   cmp-greek = super.cmp-greek.overrideAttrs {
399     dependencies = with self; [ nvim-cmp ];
400     nvimRequireCheck = "cmp_greek";
401   };
403   cmp-look = super.cmp-look.overrideAttrs {
404     dependencies = with self; [ nvim-cmp ];
405     nvimRequireCheck = "cmp_look";
406   };
408   cmp-neosnippet = super.cmp-neosnippet.overrideAttrs {
409     dependencies = with self; [
410       nvim-cmp
411       neosnippet-vim
412     ];
413     nvimRequireCheck = "cmp_neosnippet";
414   };
416   cmp-nixpkgs-maintainers = super.cmp-nixpkgs-maintainers.overrideAttrs {
417     dependencies = with self; [ nvim-cmp ];
418     nvimRequireCheck = "cmp_nixpkgs_maintainers";
419   };
421   cmp-npm = super.cmp-npm.overrideAttrs {
422     dependencies = with self; [
423       nvim-cmp
424       plenary-nvim
425     ];
426     nvimRequireCheck = "cmp-npm";
427   };
429   cmp-nvim-lsp-signature-help = super.cmp-nvim-lsp-signature-help.overrideAttrs {
430     dependencies = with self; [ nvim-cmp ];
431     nvimRequireCheck = "cmp_nvim_lsp_signature_help";
432   };
434   cmp-nvim-tags = super.cmp-nvim-tags.overrideAttrs {
435     dependencies = with self; [ nvim-cmp ];
436     nvimRequireCheck = "cmp_nvim_tags";
437   };
439   cmp-pandoc-nvim = super.cmp-pandoc-nvim.overrideAttrs {
440     dependencies = with self; [
441       nvim-cmp
442       plenary-nvim
443     ];
444     nvimRequireCheck = "cmp_pandoc";
445   };
447   cmp-rg = super.cmp-rg.overrideAttrs {
448     dependencies = with self; [ nvim-cmp ];
449     nvimRequireCheck = "cmp-rg";
450   };
452   cmp-snippy = super.cmp-snippy.overrideAttrs {
453     dependencies = with self; [
454       nvim-cmp
455       nvim-snippy
456     ];
457     nvimRequireCheck = "cmp_snippy";
458   };
460   cmp-tabby = super.cmp-tabby.overrideAttrs {
461     dependencies = with self; [ nvim-cmp ];
462     nvimRequireCheck = "cmp_tabby";
463   };
465   cmp-tabnine = super.cmp-tabnine.overrideAttrs {
466     buildInputs = [ tabnine ];
467     dependencies = with self; [ nvim-cmp ];
469     postFixup = ''
470       mkdir -p $target/binaries/${tabnine.version}
471       ln -s ${tabnine}/bin/ $target/binaries/${tabnine.version}/${tabnine.passthru.platform}
472     '';
473     nvimRequireCheck = "cmp_tabnine";
474   };
476   cmp-tmux = super.cmp-tmux.overrideAttrs {
477     dependencies = with self; [
478       nvim-cmp
479       tmux
480     ];
481     nvimRequireCheck = "cmp_tmux";
482   };
484   cmp-vim-lsp = super.cmp-vim-lsp.overrideAttrs {
485     dependencies = with self; [
486       nvim-cmp
487       vim-lsp
488     ];
489   };
491   cmp-vimwiki-tags = super.cmp-vimwiki-tags.overrideAttrs {
492     dependencies = with self; [
493       nvim-cmp
494       vimwiki
495     ];
496     nvimRequireCheck = "cmp_vimwiki_tags";
497   };
499   cmp-zsh = super.cmp-zsh.overrideAttrs {
500     dependencies = with self; [
501       nvim-cmp
502       zsh
503     ];
504     nvimRequireCheck = "cmp_zsh";
505   };
507   coc-clangd = buildVimPlugin {
508     inherit (coc-clangd) pname version meta;
509     src = "${coc-clangd}/lib/node_modules/coc-clangd";
510   };
512   coc-css = buildVimPlugin {
513     inherit (coc-css) pname version meta;
514     src = "${coc-css}/lib/node_modules/coc-css";
515   };
517   coc-diagnostic = buildVimPlugin {
518     inherit (coc-diagnostic) pname version meta;
519     src = "${coc-diagnostic}/lib/node_modules/coc-diagnostic";
520   };
522   coc-pyright = buildVimPlugin {
523     pname = "coc-pyright";
524     inherit (coc-pyright) version meta;
525     src = "${coc-pyright}/lib/node_modules/coc-pyright";
526   };
528   coc-nginx = buildVimPlugin {
529     pname = "coc-nginx";
530     inherit (nodePackages."@yaegassy/coc-nginx") version meta;
531     src = "${nodePackages."@yaegassy/coc-nginx"}/lib/node_modules/@yaegassy/coc-nginx";
532   };
534   codeium-nvim =
535     let
536       # Update according to https://github.com/Exafunction/codeium.nvim/blob/main/lua/codeium/versions.json
537       codeiumVersion = "1.20.9";
538       codeiumHashes = {
539         x86_64-linux = "sha256-IeNK7UQtOhqC/eQv7MAya4jB1WIGykSR7IgutZatmHM=";
540         aarch64-linux = "sha256-ujTFki/3V79El2WCkG0PJhbaMT0knC9mrS9E7Uv9HD4=";
541         x86_64-darwin = "sha256-r2KloEQsUku9sk8h76kwyQuMTHcq/vwfTSK2dkiXDzE=";
542         aarch64-darwin = "sha256-1jNH0Up8mAahDgvPF6g42LV+RVDVsPqDM54lE2KYY48=";
543       };
545       codeium' = codeium.overrideAttrs rec {
546         version = codeiumVersion;
548         src =
549           let
550             inherit (stdenv.hostPlatform) system;
551             throwSystem = throw "Unsupported system: ${system}";
553             platform =
554               {
555                 x86_64-linux = "linux_x64";
556                 aarch64-linux = "linux_arm";
557                 x86_64-darwin = "macos_x64";
558                 aarch64-darwin = "macos_arm";
559               }
560               .${system} or throwSystem;
562             hash = codeiumHashes.${system} or throwSystem;
563           in
564           fetchurl {
565             name = "codeium-${version}.gz";
566             url = "https://github.com/Exafunction/codeium/releases/download/language-server-v${version}/language_server_${platform}.gz";
567             inherit hash;
568           };
569       };
571     in
572     super.codeium-nvim.overrideAttrs {
573       dependencies = with self; [
574         nvim-cmp
575         plenary-nvim
576       ];
577       buildPhase = ''
578         cat << EOF > lua/codeium/installation_defaults.lua
579         return {
580           tools = {
581             language_server = "${codeium'}/bin/codeium_language_server"
582           };
583         };
584         EOF
585       '';
587       doCheck = true;
588       checkInputs = [ jq ];
589       checkPhase = ''
590         runHook preCheck
592         expected_codeium_version=$(jq -r '.version' lua/codeium/versions.json)
593         actual_codeium_version=$(${codeium'}/bin/codeium_language_server --version)
595         expected_codeium_stamp=$(jq -r '.stamp' lua/codeium/versions.json)
596         actual_codeium_stamp=$(${codeium'}/bin/codeium_language_server --stamp | grep STABLE_BUILD_SCM_REVISION | cut -d' ' -f2)
598         if [ "$actual_codeium_stamp" != "$expected_codeium_stamp" ]; then
599           echo "
600         The version of codeium patched in vimPlugins.codeium-nvim is incorrect.
601         Expected stamp: $expected_codeium_stamp
602         Actual stamp: $actual_codeium_stamp
604         Expected codeium version: $expected_codeium_version
605         Actual codeium version: $actual_codeium_version
607         Please, update 'codeiumVersion' in pkgs/applications/editors/vim/plugins/overrides.nix accordingly to:
608         https://github.com/Exafunction/codeium.nvim/blob/main/lua/codeium/versions.json
609           "
610           exit 1
611         fi
613         runHook postCheck
614       '';
615       nvimRequireCheck = "codeium";
616     };
618   codesnap-nvim =
619     let
620       version = "1.6.1";
621       src = fetchFromGitHub {
622         owner = "mistricky";
623         repo = "codesnap.nvim";
624         rev = "refs/tags/v${version}";
625         hash = "sha256-OmSgrTYDtNb2plMyzjVvxGrfXB/lGKDpUQhpRqKfAMA=";
626       };
627       codesnap-lib = rustPlatform.buildRustPackage {
628         pname = "codesnap-lib";
629         inherit version src;
631         sourceRoot = "${src.name}/generator";
633         cargoHash = "sha256-6n37n8oHIHrz3S1+40nuD0Ud3l0iNgXig1ZwrgsnYTI=";
635         nativeBuildInputs = [
636           pkg-config
637           rustPlatform.bindgenHook
638         ];
640         buildInputs =
641           [
642             libuv.dev
643           ]
644           ++ lib.optionals stdenv.hostPlatform.isDarwin [
645             darwin.apple_sdk.frameworks.AppKit
646           ];
647       };
648     in
649     buildVimPlugin {
650       pname = "codesnap.nvim";
651       inherit version src;
653       # - Remove the shipped pre-built binaries
654       # - Copy the resulting binary from the codesnap-lib derivation
655       # Note: the destination should be generator.so, even on darwin
656       # https://github.com/mistricky/codesnap.nvim/blob/main/scripts/build_generator.sh
657       postInstall =
658         let
659           extension = if stdenv.hostPlatform.isDarwin then "dylib" else "so";
660         in
661         ''
662           rm -r $out/lua/*.so
663           cp ${codesnap-lib}/lib/libgenerator.${extension} $out/lua/generator.so
664         '';
666       doInstallCheck = true;
667       nvimRequireCheck = "codesnap";
669       meta = {
670         homepage = "https://github.com/mistricky/codesnap.nvim/";
671         changelog = "https://github.com/mistricky/codesnap.nvim/releases/tag/v${version}";
672       };
673     };
675   command-t = super.command-t.overrideAttrs {
676     nativeBuildInputs = [
677       getconf
678       ruby
679     ];
680     buildPhase = ''
681       substituteInPlace lua/wincent/commandt/lib/Makefile \
682         --replace '/bin/bash' 'bash' \
683         --replace xcrun ""
684       make build
685       rm ruby/command-t/ext/command-t/*.o
686     '';
687     nvimRequireCheck = "wincent.commandt";
688   };
690   competitest-nvim = super.competitest-nvim.overrideAttrs {
691     dependencies = [ self.nui-nvim ];
693     doInstallCheck = true;
694     nvimRequireCheck = "competitest";
695   };
697   compe-tabnine = super.compe-tabnine.overrideAttrs {
698     buildInputs = [ tabnine ];
700     postFixup = ''
701       mkdir -p $target/binaries/${tabnine.version}
702       ln -s ${tabnine}/bin/ $target/binaries/${tabnine.version}/${tabnine.passthru.platform}
703     '';
704   };
706   compiler-explorer-nvim = super.compiler-explorer-nvim.overrideAttrs {
707     dependencies = with self; [ plenary-nvim ];
708     nvimRequireCheck = "compiler-explorer";
709   };
711   compiler-nvim = super.compiler-nvim.overrideAttrs {
712     dependencies = [ self.overseer-nvim ];
713     nvimRequireCheck = "compiler";
714   };
716   completion-buffers = super.completion-buffers.overrideAttrs {
717     dependencies = with self; [ completion-nvim ];
718     nvimRequireCheck = "completion_buffers";
719   };
721   completion-tabnine = super.completion-tabnine.overrideAttrs {
722     dependencies = with self; [ completion-nvim ];
723     buildInputs = [ tabnine ];
724     postFixup = ''
725       mkdir -p $target/binaries
726       ln -s ${tabnine}/bin/TabNine $target/binaries/TabNine_$(uname -s)
727     '';
728   };
730   completion-treesitter = super.completion-treesitter.overrideAttrs {
731     dependencies = with self; [
732       completion-nvim
733       nvim-treesitter
734     ];
735   };
737   CopilotChat-nvim = super.CopilotChat-nvim.overrideAttrs {
738     dependencies = with self; [
739       copilot-lua
740       plenary-nvim
741     ];
742     nvimRequireCheck = "CopilotChat";
743   };
745   copilot-lualine = super.copilot-lualine.overrideAttrs {
746     dependencies = with self; [
747       copilot-lua
748       lualine-nvim
749     ];
750     doInstallCheck = true;
751     nvimRequireCheck = "copilot-lualine";
752   };
754   copilot-vim = super.copilot-vim.overrideAttrs (old: {
755     postInstall = ''
756       substituteInPlace $out/autoload/copilot/client.vim \
757         --replace "  let node = get(g:, 'copilot_node_command', ''\'''\')" \
758                   "  let node = get(g:, 'copilot_node_command', '${nodejs}/bin/node')"
759     '';
761     meta = old.meta // {
762       license = lib.licenses.unfree;
763     };
764   });
766   coq_nvim = super.coq_nvim.overrideAttrs {
767     passthru.python3Dependencies =
768       ps: with ps; [
769         pynvim-pp
770         pyyaml
771         std2
772       ];
774     # We need some patches so it stops complaining about not being in a venv
775     patches = [ ./patches/coq_nvim/emulate-venv.patch ];
776     nvimRequireCheck = "coq";
777   };
779   cord-nvim =
780     let
781       version = "0-unstable-2024-09-26";
782       src = fetchFromGitHub {
783         owner = "vyfor";
784         repo = "cord.nvim";
785         rev = "a26b00d58c42174aadf975917b49cec67650545f";
786         hash = "sha256-jUxBvWnj0+axuw2SZ2zLzlhZS0tu+Bk8+wHtXENofkw=";
787       };
788       extension = if stdenv.hostPlatform.isDarwin then "dylib" else "so";
789       rustPackage = rustPlatform.buildRustPackage {
790         pname = "cord.nvim-rust";
791         inherit version src;
793         cargoHash = "sha256-M5mTdBACTaUVZhPpMOf1KQ3BcQpEoD2isAKRn+iAWjc=";
795         installPhase =
796           let
797             cargoTarget = stdenv.hostPlatform.rust.cargoShortTarget;
798           in
799           ''
800             install -D target/${cargoTarget}/release/libcord.${extension} $out/lib/cord.${extension}
801           '';
802       };
803     in
804     buildVimPlugin {
805       pname = "cord.nvim";
806       inherit version src;
808       nativeBuildInputs = [
809         rustPackage
810       ];
812       buildPhase = ''
813         install -D ${rustPackage}/lib/cord.${extension} cord.${extension}
814       '';
816       installPhase = ''
817         install -D cord $out/lua/cord.${extension}
818       '';
820       doInstallCheck = true;
821       nvimRequireCheck = "cord";
823       meta = {
824         homepage = "https://github.com/vyfor/cord.nvim";
825       };
826     };
828   cornelis = super.cornelis.overrideAttrs {
829     dependencies = with self; [ vim-textobj-user ];
830     opt = with self; [ vim-which-key ];
831     # Unconditionally use the cornelis binary provided by the top-level package:
832     patches = [ ./patches/cornelis/0001-Unconditionally-use-global-binary.patch ];
833     postInstall = ''
834       substituteInPlace $out/ftplugin/agda.vim \
835         --subst-var-by CORNELIS "${lib.getBin cornelis}/bin/cornelis"
836     '';
837   };
839   cpsm = super.cpsm.overrideAttrs {
840     nativeBuildInputs = [ cmake ];
841     buildInputs = [
842       python3
843       boost
844       icu
845       ncurses
846     ];
847     buildPhase = ''
848       patchShebangs .
849       export PY3=ON
850       ./install.sh
851     '';
852   };
854   crates-nvim = super.crates-nvim.overrideAttrs {
855     dependencies = with self; [ plenary-nvim ];
856     nvimRequireCheck = "crates";
857   };
859   ctrlp-cmatcher = super.ctrlp-cmatcher.overrideAttrs {
860     # drop Python 2 patches
861     # https://github.com/JazzCore/ctrlp-cmatcher/pull/44
862     patches = [
863       (fetchpatch {
864         name = "drop_python2_pt1.patch";
865         url = "https://github.com/JazzCore/ctrlp-cmatcher/commit/3abad6ea155a7f6e138e1de3ac5428177bfb0254.patch";
866         sha256 = "sha256-fn2puqYeJdPTdlTT4JjwVz7b3A+Xcuj/xtP6TETlB1U=";
867       })
868       (fetchpatch {
869         name = "drop_python2_pt2.patch";
870         url = "https://github.com/JazzCore/ctrlp-cmatcher/commit/385c8d02398dbb328b1a943a94e7109fe6473a08.patch";
871         sha256 = "sha256-yXKCq8sqO0Db/sZREuSeqKwKO71cmTsAvWftoOQehZo=";
872       })
873     ];
874     buildInputs = with python3.pkgs; [
875       python3
876       setuptools
877     ];
878     buildPhase = ''
879       patchShebangs .
880       ./install.sh
881     '';
882   };
884   ddc-filter-matcher_head = super.ddc-filter-matcher_head.overrideAttrs {
885     dependencies = with self; [ ddc-vim ];
886   };
888   ddc-source-lsp = super.ddc-source-lsp.overrideAttrs {
889     dependencies = with self; [ ddc-vim ];
890     nvimRequireCheck = "ddc_source_lsp";
891   };
893   ddc-vim = super.ddc-vim.overrideAttrs {
894     dependencies = with self; [ denops-vim ];
895   };
897   ddc-filter-sorter_rank = super.ddc-filter-sorter_rank.overrideAttrs {
898     dependencies = with self; [ ddc-vim ];
899   };
901   ddc-ui-native = super.ddc-ui-native.overrideAttrs {
902     dependencies = with self; [ ddc-vim ];
903   };
905   ddc-ui-pum = super.ddc-ui-pum.overrideAttrs {
906     dependencies = with self; [
907       ddc-vim
908       pum-vim
909     ];
910   };
912   defx-nvim = super.defx-nvim.overrideAttrs {
913     dependencies = with self; [ nvim-yarp ];
914   };
916   denops-vim = super.denops-vim.overrideAttrs {
917     postPatch = ''
918       # Use Nix's Deno instead of an arbitrary install
919       substituteInPlace ./autoload/denops.vim --replace "call denops#_internal#conf#define('denops#deno', 'deno')" "call denops#_internal#conf#define('denops#deno', '${deno}/bin/deno')"
920     '';
921   };
923   deoplete-fish = super.deoplete-fish.overrideAttrs {
924     dependencies = with self; [
925       deoplete-nvim
926       vim-fish
927     ];
928   };
930   deoplete-go = super.deoplete-go.overrideAttrs {
931     nativeBuildInputs = [ (python3.withPackages (ps: with ps; [ setuptools ])) ];
932     buildPhase = ''
933       pushd ./rplugin/python3/deoplete/ujson
934       python3 setup.py build --build-base=$PWD/build --build-lib=$PWD/build
935       popd
936       find ./rplugin/ -name "ujson*.so" -exec mv -v {} ./rplugin/python3/ \;
937     '';
938   };
940   deoplete-khard = super.deoplete-khard.overrideAttrs {
941     dependencies = with self; [ deoplete-nvim ];
942     passthru.python3Dependencies = ps: [ (ps.toPythonModule khard) ];
943     meta = {
944       description = "Address-completion for khard via deoplete";
945       homepage = "https://github.com/nicoe/deoplete-khard";
946       license = lib.licenses.mit;
947       maintainers = with lib.maintainers; [ jorsn ];
948     };
949   };
951   diagram-nvim = super.diagram-nvim.overrideAttrs {
952     dependencies = with self; [ image-nvim ];
953     nvimRequireCheck = "diagram";
954   };
956   diffview-nvim = super.diffview-nvim.overrideAttrs {
957     dependencies = with self; [ plenary-nvim ];
959     doInstallCheck = true;
960     nvimRequireCheck = "diffview";
961   };
963   direnv-vim = super.direnv-vim.overrideAttrs (old: {
964     preFixup =
965       old.preFixup or ""
966       + ''
967         substituteInPlace $out/autoload/direnv.vim \
968           --replace "let s:direnv_cmd = get(g:, 'direnv_cmd', 'direnv')" \
969             "let s:direnv_cmd = get(g:, 'direnv_cmd', '${lib.getBin direnv}/bin/direnv')"
970       '';
971   });
973   elixir-tools-nvim = super.elixir-tools-nvim.overrideAttrs {
974     dependencies = with self; [ plenary-nvim ];
975     fixupPhase = ''
976       patchShebangs $(find $out/bin/ -type f -not -name credo-language-server)
977     '';
978     nvimRequireCheck = "elixir";
979   };
981   executor-nvim = super.executor-nvim.overrideAttrs {
982     dependencies = with self; [ nui-nvim ];
983     nvimRequireCheck = "executor";
984   };
986   fcitx-vim = super.fcitx-vim.overrideAttrs {
987     passthru.python3Dependencies = ps: with ps; [ dbus-python ];
988     meta = {
989       description = "Keep and restore fcitx state when leaving/re-entering insert mode or search mode";
990       license = lib.licenses.mit;
991     };
992   };
994   flit-nvim = super.flit-nvim.overrideAttrs {
995     dependencies = with self; [ leap-nvim ];
996     nvimRequireCheck = "flit";
997   };
999   forms = super.forms.overrideAttrs {
1000     dependencies = [ self.self ];
1001   };
1003   fruzzy =
1004     let
1005       # until https://github.com/NixOS/nixpkgs/pull/67878 is merged, there's no better way to install nim libraries with nix
1006       nimpy = fetchFromGitHub {
1007         owner = "yglukhov";
1008         repo = "nimpy";
1009         rev = "4840d1e438985af759ddf0923e7a9250fd8ea0da";
1010         sha256 = "0qqklvaajjqnlqm3rkk36pwwnn7x942mbca7nf2cvryh36yg4q5k";
1011       };
1012       binaryheap = fetchFromGitHub {
1013         owner = "bluenote10";
1014         repo = "nim-heap";
1015         rev = "c38039309cb11391112571aa332df9c55f625b54";
1016         sha256 = "05xdy13vm5n8dw2i366ppbznc4cfhq23rdcklisbaklz2jhdx352";
1017       };
1018     in
1019     super.fruzzy.overrideAttrs (old: {
1020       buildInputs = [ nim1 ];
1021       patches = [
1022         (substituteAll {
1023           src = ./patches/fruzzy/get_version.patch;
1024           inherit (old) version;
1025         })
1026       ];
1027       configurePhase = ''
1028         substituteInPlace Makefile \
1029           --replace \
1030             "nim c" \
1031             "nim c --nimcache:$TMP --path:${nimpy} --path:${binaryheap}"
1032       '';
1033       buildPhase = ''
1034         make build
1035       '';
1036     });
1038   fuzzy-nvim = super.fuzzy-nvim.overrideAttrs {
1039     dependencies = with self; [ telescope-fzf-native-nvim ];
1040     nvimRequireCheck = "fuzzy_nvim";
1041   };
1043   fzf-checkout-vim = super.fzf-checkout-vim.overrideAttrs {
1044     # The plugin has a makefile which tries to run tests in a docker container.
1045     # This prevents it.
1046     prePatch = ''
1047       rm Makefile
1048     '';
1049   };
1051   fzf-hoogle-vim = super.fzf-hoogle-vim.overrideAttrs (oa: {
1052     # add this to your lua config to prevent the plugin from trying to write in the
1053     # nix store:
1054     # vim.g.hoogle_fzf_cache_file = vim.fn.stdpath('cache')..'/hoogle_cache.json'
1055     propagatedBuildInputs = [
1056       jq
1057       gawk
1058     ];
1059     dependencies = with self; [ fzf-vim ];
1060     passthru = oa.passthru // {
1062       initLua = "vim.g.hoogle_fzf_cache_file = vim.fn.stdpath('cache')..'/hoogle_cache.json";
1063     };
1064   });
1066   fzf-lua = super.fzf-lua.overrideAttrs {
1067     propagatedBuildInputs = [ fzf ];
1068     # FIXME: address already in use
1069     # nvimRequireCheck = "fzf-lua";
1070   };
1072   fzf-vim = super.fzf-vim.overrideAttrs {
1073     dependencies = with self; [ fzfWrapper ];
1074   };
1076   # Mainly used as a dependency for fzf-vim. Wraps the fzf program as a vim
1077   # plugin, since part of the fzf vim plugin is included in the main fzf
1078   # program.
1079   fzfWrapper = buildVimPlugin {
1080     inherit (fzf) src version;
1081     pname = "fzf";
1082     postInstall = ''
1083       ln -s ${fzf}/bin/fzf $target/bin/fzf
1084     '';
1085   };
1087   ghcid = super.ghcid.overrideAttrs {
1088     configurePhase = "cd plugins/nvim";
1089   };
1091   gitlinker-nvim = super.gitlinker-nvim.overrideAttrs {
1092     dependencies = with self; [ plenary-nvim ];
1093     nvimRequireCheck = "gitlinker";
1094   };
1096   gitsigns-nvim = super.gitsigns-nvim.overrideAttrs {
1097     dependencies = with self; [ plenary-nvim ];
1098     nvimRequireCheck = "gitsigns";
1099   };
1101   git-worktree-nvim = super.git-worktree-nvim.overrideAttrs {
1102     dependencies = with super; [ plenary-nvim ];
1103     nvimRequireCheck = "git-worktree";
1104   };
1106   guard-nvim = super.guard-nvim.overrideAttrs {
1107     dependencies = with self; [ guard-collection ];
1108     nvimRequireCheck = "guard";
1109   };
1111   hardhat-nvim = super.hardhat-nvim.overrideAttrs {
1112     dependencies = with self; [
1113       overseer-nvim
1114       plenary-nvim
1115     ];
1117     doInstallCheck = true;
1118     nvimRequireCheck = "hardhat";
1119   };
1121   harpoon = super.harpoon.overrideAttrs {
1122     dependencies = with self; [ plenary-nvim ];
1123     nvimRequireCheck = "harpoon";
1124   };
1126   harpoon2 = super.harpoon2.overrideAttrs {
1127     dependencies = with self; [ plenary-nvim ];
1128     nvimRequireCheck = "harpoon";
1129   };
1131   haskell-snippets-nvim = super.haskell-snippets-nvim.overrideAttrs {
1132     dependencies = [ self.luasnip ];
1133     nvimRequireCheck = "haskell-snippets";
1134   };
1136   haskell-scope-highlighting-nvim = super.haskell-scope-highlighting-nvim.overrideAttrs {
1137     dependencies = with self; [ nvim-treesitter ];
1138     nvimRequireCheck = "haskell-scope-highlighting";
1139   };
1141   haskell-tools-nvim = neovimUtils.buildNeovimPlugin {
1142     luaAttr = luaPackages.haskell-tools-nvim;
1143     nvimRequireCheck = "haskell-tools";
1144   };
1146   hex-nvim = super.hex-nvim.overrideAttrs {
1147     postPatch = ''
1148       substituteInPlace lua/hex.lua --replace xxd ${xxd}/bin/xxd
1149     '';
1150     nvimRequireCheck = "hex";
1151   };
1153   himalaya-vim = super.himalaya-vim.overrideAttrs {
1154     buildInputs = [ himalaya ];
1155     src = fetchFromSourcehut {
1156       owner = "~soywod";
1157       repo = "himalaya-vim";
1158       rev = "v${himalaya.version}";
1159       sha256 = "W+91hnNeS6WkDiR9r1s7xPTK9JlCWiVkI/nXVYbepY0=";
1160     };
1161   };
1163   hunk-nvim = super.hunk-nvim.overrideAttrs {
1164     dependencies = with self; [ nui-nvim ];
1165     nvimRequireCheck = "hunk";
1166   };
1168   # https://hurl.dev/
1169   hurl = buildVimPlugin {
1170     pname = "hurl";
1171     version = hurl.version;
1172     # dontUnpack = true;
1174     src = "${hurl.src}/contrib/vim";
1175   };
1177   idris2-nvim = super.idris2-nvim.overrideAttrs {
1178     dependencies = with self; [
1179       nui-nvim
1180       nvim-lspconfig
1181     ];
1183     doInstallCheck = true;
1184     nvimRequireCheck = "idris2";
1185   };
1187   image-nvim = super.image-nvim.overrideAttrs {
1188     dependencies = with self; [
1189       nvim-treesitter
1190       nvim-treesitter-parsers.markdown_inline
1191       nvim-treesitter-parsers.norg
1192     ];
1194     # Add magick to package.path
1195     patches = [ ./patches/image-nvim/magick.patch ];
1197     postPatch = ''
1198       substituteInPlace lua/image/magick.lua \
1199         --replace @nix_magick@ ${luajitPackages.magick}
1200     '';
1202     nvimRequireCheck = "image";
1203   };
1205   jedi-vim = super.jedi-vim.overrideAttrs {
1206     # checking for python3 support in vim would be neat, too, but nobody else seems to care
1207     buildInputs = [ python3.pkgs.jedi ];
1208     meta = {
1209       description = "code-completion for python using python-jedi";
1210       license = lib.licenses.mit;
1211     };
1212   };
1214   jellybeans-nvim = super.jellybeans-nvim.overrideAttrs {
1215     dependencies = with self; [ lush-nvim ];
1216   };
1218   jupytext-nvim = super.jupytext-nvim.overrideAttrs {
1219     passthru.python3Dependencies = ps: [ ps.jupytext ];
1220     nvimRequireCheck = "jupytext";
1221   };
1223   kulala-nvim = super.kulala-nvim.overrideAttrs {
1224     dependencies = with self; [
1225       nvim-treesitter
1226       nvim-treesitter-parsers.http
1227     ];
1228     buildInputs = [ curl ];
1229     postPatch = ''
1230       substituteInPlace lua/kulala/config/init.lua \
1231         --replace 'curl_path = "curl"' 'curl_path = "${lib.getExe curl}"'
1232     '';
1233     nvimRequireCheck = "kulala";
1234   };
1236   LanguageClient-neovim =
1237     let
1238       version = "0.1.161";
1239       LanguageClient-neovim-src = fetchFromGitHub {
1240         owner = "autozimu";
1241         repo = "LanguageClient-neovim";
1242         rev = version;
1243         sha256 = "Z9S2ie9RxJCIbmjSV/Tto4lK04cZfWmK3IAy8YaySVI=";
1244       };
1245       LanguageClient-neovim-bin = rustPlatform.buildRustPackage {
1246         pname = "LanguageClient-neovim-bin";
1247         inherit version;
1248         src = LanguageClient-neovim-src;
1250         cargoHash = "sha256-H34UqJ6JOwuSABdOup5yKeIwFrGc83TUnw1ggJEx9o4=";
1251         buildInputs = lib.optionals stdenv.hostPlatform.isDarwin [ CoreServices ];
1253         # FIXME: Use impure version of CoreFoundation because of missing symbols.
1254         #   Undefined symbols for architecture x86_64: "_CFURLResourceIsReachable"
1255         preConfigure = lib.optionalString stdenv.hostPlatform.isDarwin ''
1256           export NIX_LDFLAGS="-F${CoreFoundation}/Library/Frameworks -framework CoreFoundation $NIX_LDFLAGS"
1257         '';
1258       };
1259     in
1260     buildVimPlugin {
1261       pname = "LanguageClient-neovim";
1262       inherit version;
1263       src = LanguageClient-neovim-src;
1265       propagatedBuildInputs = [ LanguageClient-neovim-bin ];
1267       preFixup = ''
1268         substituteInPlace "$out"/autoload/LanguageClient.vim \
1269           --replace "let l:path = s:root . '/bin/'" "let l:path = '${LanguageClient-neovim-bin}' . '/bin/'"
1270       '';
1271     };
1273   lazy-lsp-nvim = super.lazy-lsp-nvim.overrideAttrs {
1274     dependencies = with self; [ nvim-lspconfig ];
1275     nvimRequireCheck = "lazy-lsp";
1276   };
1278   lazy-nvim = super.lazy-nvim.overrideAttrs {
1279     patches = [ ./patches/lazy-nvim/no-helptags.patch ];
1280     nvimRequireCheck = "lazy";
1281   };
1283   lean-nvim = super.lean-nvim.overrideAttrs {
1284     dependencies = with self; [
1285       nvim-lspconfig
1286       plenary-nvim
1287     ];
1288     nvimRequireCheck = "lean";
1289   };
1291   LeaderF = super.LeaderF.overrideAttrs {
1292     nativeBuildInputs = [ python3.pkgs.setuptools ];
1293     buildInputs = [ python3 ];
1294     # rm */build/ to prevent dependencies on gcc
1295     # strip the *.so to keep files small
1296     buildPhase = ''
1297       patchShebangs .
1298       ./install.sh
1299       rm autoload/leaderf/fuzzyMatch_C/build/ -r
1300     '';
1301     stripDebugList = [ "autoload/leaderf/python" ];
1302   };
1304   leap-ast-nvim = super.leap-ast-nvim.overrideAttrs {
1305     dependencies = with self; [
1306       leap-nvim
1307       nvim-treesitter
1308     ];
1309     nvimRequireCheck = "leap-ast";
1310   };
1312   leetcode-nvim = super.leetcode-nvim.overrideAttrs {
1313     dependencies = with self; [
1314       nui-nvim
1315       plenary-nvim
1316       telescope-nvim
1317     ];
1319     doInstallCheck = true;
1320     nvimRequireCheck = "leetcode";
1321   };
1323   lens-vim = super.lens-vim.overrideAttrs {
1324     # remove duplicate g:lens#animate in doc/lens.txt
1325     # https://github.com/NixOS/nixpkgs/pull/105810#issuecomment-740007985
1326     # https://github.com/camspiers/lens.vim/pull/40/files
1327     patches = [
1328       (substituteAll {
1329         src = ./patches/lens-vim/remove_duplicate_g_lens_animate.patch;
1330         inherit languagetool;
1331       })
1332     ];
1333   };
1335   lf-vim = super.lf-vim.overrideAttrs {
1336     dependencies = with self; [ vim-floaterm ];
1337   };
1339   lir-nvim = super.lir-nvim.overrideAttrs {
1340     dependencies = with self; [ plenary-nvim ];
1341     nvimRequireCheck = "lir";
1342   };
1344   lsp-progress-nvim = neovimUtils.buildNeovimPlugin {
1345     luaAttr = luaPackages.lsp-progress-nvim;
1346     nvimRequireCheck = "lsp-progress";
1347   };
1349   luasnip = super.luasnip.overrideAttrs {
1350     dependencies = [ luaPackages.jsregexp ];
1351     nvimRequireCheck = "luasnip";
1352   };
1354   lz-n = neovimUtils.buildNeovimPlugin {
1355     luaAttr = luaPackages.lz-n;
1356     nvimRequireCheck = "lz.n";
1357   };
1359   lze = neovimUtils.buildNeovimPlugin {
1360     luaAttr = luaPackages.lze;
1361     nvimRequireCheck = "lze";
1362   };
1364   lzn-auto-require = neovimUtils.buildNeovimPlugin {
1365     luaAttr = luaPackages.lzn-auto-require;
1366     nvimRequireCheck = "lzn-auto-require.loader";
1367   };
1369   magma-nvim = super.magma-nvim.overrideAttrs {
1370     passthru.python3Dependencies =
1371       ps: with ps; [
1372         pynvim
1373         jupyter-client
1374         ueberzug
1375         pillow
1376         cairosvg
1377         plotly
1378         ipykernel
1379         pyperclip
1380         pnglatex
1381       ];
1382   };
1384   markdown-preview-nvim =
1385     let
1386       # We only need its dependencies `node-modules`.
1387       nodeDep = mkYarnModules rec {
1388         inherit (super.markdown-preview-nvim) pname version;
1389         packageJSON = ./markdown-preview-nvim/package.json;
1390         yarnLock = "${super.markdown-preview-nvim.src}/yarn.lock";
1391         offlineCache = fetchYarnDeps {
1392           inherit yarnLock;
1393           hash = "sha256-kzc9jm6d9PJ07yiWfIOwqxOTAAydTpaLXVK6sEWM8gg=";
1394         };
1395       };
1396     in
1397     super.markdown-preview-nvim.overrideAttrs {
1398       patches = [
1399         (substituteAll {
1400           src = ./markdown-preview-nvim/fix-node-paths.patch;
1401           node = "${nodejs}/bin/node";
1402         })
1403       ];
1404       postInstall = ''
1405         ln -s ${nodeDep}/node_modules $out/app
1406       '';
1408       nativeBuildInputs = [ nodejs ];
1409       doInstallCheck = true;
1410       installCheckPhase = ''
1411         node $out/app/index.js --version
1412       '';
1413     };
1415   mason-lspconfig-nvim = super.mason-lspconfig-nvim.overrideAttrs {
1416     dependencies = with self; [
1417       mason-nvim
1418       nvim-lspconfig
1419     ];
1420     nvimRequireCheck = "mason-lspconfig";
1421   };
1423   mason-tool-installer-nvim = super.mason-tool-installer-nvim.overrideAttrs {
1424     dependencies = with self; [ mason-nvim ];
1425     nvimRequireCheck = "mason-tool-installer";
1426   };
1428   meson = buildVimPlugin {
1429     inherit (meson) pname version src;
1430     preInstall = "cd data/syntax-highlighting/vim";
1431     meta.maintainers = with lib.maintainers; [ vcunat ];
1432   };
1434   middleclass = neovimUtils.buildNeovimPlugin {
1435     luaAttr = luaPackages.middleclass;
1436     nvimRequireCheck = "middleclass";
1437   };
1439   minimap-vim = super.minimap-vim.overrideAttrs {
1440     preFixup = ''
1441       substituteInPlace $out/plugin/minimap.vim \
1442         --replace "code-minimap" "${code-minimap}/bin/code-minimap"
1443       substituteInPlace $out/bin/minimap_generator.sh \
1444         --replace "code-minimap" "${code-minimap}/bin/code-minimap"
1445     '';
1447     doInstallCheck = true;
1448     vimCommandCheck = "MinimapToggle";
1449   };
1451   minsnip-nvim = buildVimPlugin {
1452     pname = "minsnip.nvim";
1453     version = "2022-01-04";
1454     src = fetchFromGitHub {
1455       owner = "jose-elias-alvarez";
1456       repo = "minsnip.nvim";
1457       rev = "6ae2f3247b3a2acde540ccef2e843fdfcdfebcee";
1458       sha256 = "1db5az5civ2bnqg7v3g937mn150ys52258c3glpvdvyyasxb4iih";
1459     };
1460     meta.homepage = "https://github.com/jose-elias-alvarez/minsnip.nvim/";
1461   };
1463   moveline-nvim =
1464     let
1465       version = "2024-07-25";
1466       src = fetchFromGitHub {
1467         owner = "willothy";
1468         repo = "moveline.nvim";
1469         rev = "9f67f4b9e752a87eea8205f0279f261a16c733d8";
1470         sha256 = "sha256-B4t5+Q4Urx5bGm8glNpYkHhpp/rAhz+lDd2EpWFUYoY=";
1471       };
1472       moveline-lib = rustPlatform.buildRustPackage {
1473         inherit src version;
1474         pname = "moveline-lib";
1475         cargoHash = "sha256-e9QB4Rfm+tFNrLAHN/nYUQ5PiTET8knQQIQkMH3UFkU=";
1476       };
1477     in
1478     buildVimPlugin {
1479       inherit src version;
1480       pname = "moveline-nvim";
1481       preInstall = ''
1482         mkdir -p lua
1483         ln -s ${moveline-lib}/lib/libmoveline.so lua/moveline.so
1484       '';
1485       meta = {
1486         description = "Neovim plugin for moving lines up and down";
1487         homepage = "https://github.com/willothy/moveline.nvim";
1488         license = lib.licenses.mit;
1489         maintainers = with lib.maintainers; [ redxtech ];
1490         badPlatforms = [
1491           "aarch64-darwin"
1492           "x86_64-darwin"
1493         ];
1494       };
1495       nvimRequireCheck = "moveline";
1496     };
1498   multicursors-nvim = super.multicursors-nvim.overrideAttrs {
1499     dependencies = with self; [
1500       nvim-treesitter
1501       hydra-nvim
1502     ];
1503     nvimRequireCheck = "multicursors";
1504   };
1506   ncm2 = super.ncm2.overrideAttrs {
1507     dependencies = with self; [ nvim-yarp ];
1508     nvimRequireCheck = "ncm2";
1509   };
1511   ncm2-jedi = super.ncm2-jedi.overrideAttrs {
1512     dependencies = with self; [
1513       nvim-yarp
1514       ncm2
1515     ];
1516     passthru.python3Dependencies = ps: with ps; [ jedi ];
1517   };
1519   ncm2-neoinclude = super.ncm2-neoinclude.overrideAttrs {
1520     dependencies = with self; [ neoinclude-vim ];
1521   };
1523   ncm2-neosnippet = super.ncm2-neosnippet.overrideAttrs {
1524     dependencies = with self; [ neosnippet-vim ];
1525   };
1527   ncm2-syntax = super.ncm2-syntax.overrideAttrs {
1528     dependencies = with self; [ neco-syntax ];
1529   };
1531   ncm2-ultisnips = super.ncm2-ultisnips.overrideAttrs {
1532     dependencies = with self; [ ultisnips ];
1533   };
1535   neogit = super.neogit.overrideAttrs {
1536     dependencies = with self; [ plenary-nvim ];
1537     nvimRequireCheck = "neogit";
1538   };
1540   neorg = neovimUtils.buildNeovimPlugin {
1541     luaAttr = luaPackages.neorg;
1543     doInstallCheck = true;
1544     nvimRequireCheck = "neorg";
1545   };
1547   neotest = super.neotest.overrideAttrs {
1548     dependencies = with self; [
1549       nvim-nio
1550       plenary-nvim
1551     ];
1552     nvimRequirecheck = "neotest";
1553   };
1555   neotest-gradle = super.neotest-gradle.overrideAttrs {
1556     dependencies = with self; [ plenary-nvim ];
1557     nvimRequirecheck = "neotest-gradle";
1558   };
1560   neotest-gtest = super.neotest-gtest.overrideAttrs {
1561     dependencies = [ self.plenary-nvim ];
1562     nvimRequirecheck = "neotest-gtest";
1563   };
1565   neotest-playwright = super.neotest-playwright.overrideAttrs {
1566     dependencies = [ self.telescope-nvim ];
1567     nvimRequirecheck = "neotest-playwright";
1568   };
1570   neotest-golang = super.neotest-golang.overrideAttrs {
1571     dependencies = [ self.nvim-dap-go ];
1572     nvimRequirecheck = "neotest-golang";
1573   };
1575   neo-tree-nvim = super.neo-tree-nvim.overrideAttrs {
1576     dependencies = with self; [
1577       plenary-nvim
1578       nui-nvim
1579     ];
1580     nvimRequirecheck = "neo-tree";
1581   };
1583   noice-nvim = super.noice-nvim.overrideAttrs {
1584     dependencies = with self; [ nui-nvim ];
1585     nvimRequirecheck = "noice";
1586   };
1588   none-ls-nvim = super.none-ls-nvim.overrideAttrs {
1589     dependencies = [ self.plenary-nvim ];
1590     nvimRequireCheck = "null-ls";
1591   };
1593   NotebookNavigator-nvim = super.NotebookNavigator-nvim.overrideAttrs {
1594     nvimRequireCheck = "notebook-navigator";
1595   };
1597   null-ls-nvim = super.null-ls-nvim.overrideAttrs {
1598     dependencies = with self; [ plenary-nvim ];
1599     nvimRequireCheck = "null-ls";
1600   };
1602   nvim-coverage = super.nvim-coverage.overrideAttrs {
1603     dependencies = with self; [ plenary-nvim ];
1604     nvimRequireCheck = "coverage";
1605   };
1607   nvim-dap-python = super.nvim-dap-python.overrideAttrs {
1608     dependencies = with self; [ nvim-dap ];
1609     nvimRequireCheck = "dap-python";
1610   };
1612   nvim-dap-rego = super.nvim-dap-rego.overrideAttrs {
1613     dependencies = with self; [ nvim-dap ];
1614     nvimRequireCheck = "dap-rego";
1615   };
1617   nvim-dap-ui = super.nvim-dap-ui.overrideAttrs {
1618     dependencies = with self; [
1619       nvim-dap
1620       nvim-nio
1621     ];
1623     doInstallCheck = true;
1624     nvimRequireCheck = "dapui";
1625   };
1627   nvim-dap-rr = super.nvim-dap-rr.overrideAttrs {
1628     dependencies = [ self.nvim-dap ];
1629     nvimRequireCheck = "nvim-dap-rr";
1630   };
1632   nvim-genghis = super.nvim-genghis.overrideAttrs {
1633     dependencies = [ self.dressing-nvim ];
1635     doInstallCheck = true;
1636     nvimRequireCheck = "genghis";
1637   };
1639   nvim-lsputils = super.nvim-lsputils.overrideAttrs {
1640     dependencies = with self; [ popfix ];
1641     nvimRequireCheck = "lsputil.codeAction";
1642   };
1644   nvim-metals = super.nvim-metals.overrideAttrs {
1645     dependencies = with self; [ plenary-nvim ];
1646     dontBuild = true;
1647     nvimRequireCheck = "metals";
1648   };
1650   nvim-navbuddy = super.nvim-navbuddy.overrideAttrs {
1651     dependencies = with self; [
1652       nui-nvim
1653       nvim-lspconfig
1654       nvim-navic
1655     ];
1656     nvimRequireCheck = "nvim-navbuddy";
1657   };
1659   vim-mediawiki-editor = super.vim-mediawiki-editor.overrideAttrs {
1660     passthru.python3Dependencies = [ python3.pkgs.mwclient ];
1661   };
1663   nvim-dbee = super.nvim-dbee.overrideAttrs (
1664     oa:
1665     let
1666       dbee-go = buildGoModule {
1667         name = "nvim-dbee";
1668         src = "${oa.src}/dbee";
1669         vendorHash = "sha256-U/3WZJ/+Bm0ghjeNUILsnlZnjIwk3ySaX3Rd4L9Z62A=";
1670         buildInputs = [
1671           arrow-cpp
1672           duckdb
1673         ];
1674       };
1675     in
1676     {
1677       dependencies = [ self.nui-nvim ];
1679       # nvim-dbee looks for the go binary in paths returned bu M.dir() and M.bin() defined in lua/dbee/install/init.lua
1680       postPatch = ''
1681         substituteInPlace lua/dbee/install/init.lua \
1682           --replace-fail 'return vim.fn.stdpath("data") .. "/dbee/bin"' 'return "${dbee-go}/bin"'
1683       '';
1685       preFixup = ''
1686         mkdir $target/bin
1687         ln -s ${dbee-go}/bin/dbee $target/bin/dbee
1688       '';
1690       meta.platforms = lib.platforms.linux;
1691       nvimRequireCheck = "dbee";
1692     }
1693   );
1695   nvim-navic = super.nvim-navic.overrideAttrs {
1696     dependencies = [ self.nvim-lspconfig ];
1697     nvimRequireCheck = "nvim-navic";
1698   };
1700   nvim-spectre = super.nvim-spectre.overrideAttrs (
1701     old:
1702     let
1703       spectre_oxi = rustPlatform.buildRustPackage {
1704         pname = "spectre_oxi";
1705         inherit (old) version src;
1706         sourceRoot = "${old.src.name}/spectre_oxi";
1708         cargoHash = "sha256-yYUbfqkICsGDKexYjfhXfpIoT1+QrZQJPpKzk+gwm+s=";
1710         preCheck = ''
1711           mkdir tests/tmp/
1712         '';
1714         checkFlags = [
1715           # Flaky test (https://github.com/nvim-pack/nvim-spectre/issues/244)
1716           "--skip=tests::test_replace_simple"
1717         ];
1718       };
1719     in
1720     {
1721       dependencies = with self; [ plenary-nvim ];
1722       postInstall = ''
1723         ln -s ${spectre_oxi}/lib/libspectre_oxi.* $out/lua/spectre_oxi.so
1724       '';
1725       nvimRequireCheck = "spectre";
1726     }
1727   );
1729   nvim-scissors = super.nvim-scissors.overrideAttrs {
1730     nvimRequireCheck = "scissors";
1731   };
1733   nvim-teal-maker = super.nvim-teal-maker.overrideAttrs {
1734     postPatch = ''
1735       substituteInPlace lua/tealmaker/init.lua \
1736         --replace cyan ${luaPackages.cyan}/bin/cyan
1737     '';
1738     vimCommandCheck = "TealBuild";
1739   };
1741   nvim-treesitter = super.nvim-treesitter.overrideAttrs (
1742     callPackage ./nvim-treesitter/overrides.nix { } self super
1743   );
1745   nvim-treesitter-parsers = lib.recurseIntoAttrs self.nvim-treesitter.grammarPlugins;
1747   nvim-treesitter-sexp = super.nvim-treesitter-sexp.overrideAttrs {
1748     nvimRequireCheck = "treesitter-sexp";
1749   };
1751   nvim-ufo = super.nvim-ufo.overrideAttrs {
1752     dependencies = with self; [ promise-async ];
1753     nvimRequireCheck = "ufo";
1754   };
1756   obsidian-nvim = super.obsidian-nvim.overrideAttrs {
1757     dependencies = with self; [ plenary-nvim ];
1758     nvimRequireCheck = "obsidian";
1759   };
1761   octo-nvim = super.octo-nvim.overrideAttrs {
1762     dependencies = with self; [
1763       telescope-nvim
1764       plenary-nvim
1765     ];
1766     nvimRequireCheck = "octo";
1767   };
1769   ollama-nvim = super.ollama-nvim.overrideAttrs {
1770     dependencies = [ self.plenary-nvim ];
1771     nvimRequireCheck = "ollama";
1772   };
1774   onehalf = super.onehalf.overrideAttrs {
1775     configurePhase = "cd vim";
1776   };
1778   # The plugin depends on either skim-vim or fzf-vim, but we don't want to force the user so we
1779   # avoid choosing one of them and leave it to the user
1780   openscad-nvim = super.openscad-nvim.overrideAttrs {
1781     buildInputs = [
1782       zathura
1783       htop
1784       openscad
1785     ];
1787     # FIXME: cant find plugin root dir
1788     # nvimRequireCheck = "openscad";
1789     patches = [
1790       (substituteAll {
1791         src = ./patches/openscad.nvim/program_paths.patch;
1792         htop = lib.getExe htop;
1793         openscad = lib.getExe openscad;
1794         zathura = lib.getExe zathura;
1795       })
1796     ];
1797   };
1799   orgmode = super.orgmode.overrideAttrs {
1800     dependencies = with self; [ (nvim-treesitter.withPlugins (p: [ p.org ])) ];
1801     nvimRequireCheck = "orgmode";
1802   };
1804   otter-nvim = super.otter-nvim.overrideAttrs {
1805     dependencies = [ self.nvim-lspconfig ];
1806     nvimRequirecheck = "otter";
1807   };
1809   overseer-nvim = super.overseer-nvim.overrideAttrs {
1810     doCheck = true;
1811     checkPhase = ''
1812       runHook preCheck
1814       plugins=.testenv/data/nvim/site/pack/plugins/start
1815       mkdir -p "$plugins"
1816       ln -s ${self.plenary-nvim} "$plugins/plenary.nvim"
1817       bash run_tests.sh
1818       rm -r .testenv
1820       runHook postCheck
1821     '';
1822     nvimRequireCheck = "overseer";
1823   };
1825   inherit parinfer-rust;
1827   phpactor = buildVimPlugin {
1828     inherit (phpactor)
1829       pname
1830       src
1831       meta
1832       version
1833       ;
1834     postPatch = ''
1835       substituteInPlace plugin/phpactor.vim \
1836         --replace "g:phpactorpath = expand('<sfile>:p:h') . '/..'" "g:phpactorpath = '${phpactor}'"
1837     '';
1838   };
1840   playground = super.playground.overrideAttrs {
1841     dependencies = with self; [
1842       # we need the 'query' grammer to make
1843       (nvim-treesitter.withPlugins (p: [ p.query ]))
1844     ];
1845     nvimRequireCheck = "nvim-treesitter-playground";
1846   };
1848   plenary-nvim = super.plenary-nvim.overrideAttrs {
1849     postPatch = ''
1850       sed -Ei lua/plenary/curl.lua \
1851           -e 's@(command\s*=\s*")curl(")@\1${curl}/bin/curl\2@'
1852     '';
1854     doInstallCheck = true;
1855     nvimRequireCheck = "plenary";
1856   };
1858   Preview-nvim = super.Preview-nvim.overrideAttrs {
1859     patches = [
1860       (substituteAll {
1861         src = ./patches/preview-nvim/hardcode-mdt-binary-path.patch;
1862         mdt = lib.getExe md-tui;
1863       })
1864     ];
1865   };
1867   range-highlight-nvim = super.range-highlight-nvim.overrideAttrs {
1868     dependencies = with self; [ cmd-parser-nvim ];
1869     nvimRequireCheck = "range-highlight";
1870   };
1872   ranger-nvim = super.ranger-nvim.overrideAttrs {
1873     patches = [ ./patches/ranger.nvim/fix-paths.patch ];
1875     postPatch = ''
1876       substituteInPlace lua/ranger-nvim.lua --replace '@ranger@' ${ranger}/bin/ranger
1877     '';
1878     nvimRequireCheck = "ranger-nvim";
1879   };
1881   aider-nvim = super.aider-nvim.overrideAttrs {
1882     patches = [ ./patches/aider.nvim/fix-paths.patch ];
1884     postPatch = ''
1885       substituteInPlace lua/aider.lua --replace '@aider@' ${aider-chat}/bin/aider
1886       substituteInPlace lua/helpers.lua --replace '@aider@' ${aider-chat}/bin/aider
1887     '';
1888     nvimRequireCheck = "aider";
1889   };
1891   refactoring-nvim = super.refactoring-nvim.overrideAttrs {
1892     dependencies = with self; [
1893       nvim-treesitter
1894       plenary-nvim
1895     ];
1896     nvimRequireCheck = "refactoring";
1897   };
1899   # needs  "http" and "json" treesitter grammars too
1900   rest-nvim = super.rest-nvim.overrideAttrs {
1901     dependencies = with self; [
1902       plenary-nvim
1903       (nvim-treesitter.withPlugins (p: [
1904         p.http
1905         p.json
1906       ]))
1907     ];
1908     nvimRequireCheck = "rest-nvim";
1909   };
1911   rocks-nvim = neovimUtils.buildNeovimPlugin {
1912     luaAttr = luaPackages.rocks-nvim;
1913     nvimRequireCheck = "rocks";
1914   };
1916   rocks-config-nvim = neovimUtils.buildNeovimPlugin {
1917     luaAttr = luaPackages.rocks-config-nvim;
1918     nvimRequireCheck = "rocks-config";
1919   };
1921   roslyn-nvim = super.roslyn-nvim.overrideAttrs {
1922     dependencies = with self; [ nvim-lspconfig ];
1923     nvimRequireCheck = "roslyn";
1924   };
1926   rtp-nvim = neovimUtils.buildNeovimPlugin {
1927     luaAttr = luaPackages.rtp-nvim;
1928     nvimRequireCheck = "rtp_nvim";
1929   };
1931   rustaceanvim = neovimUtils.buildNeovimPlugin {
1932     luaAttr = luaPackages.rustaceanvim;
1933     nvimRequireCheck = "rustaceanvim";
1934   };
1936   scretch-nvim = super.scretch-nvim.overrideAttrs {
1937     nvimRequireCheck = "scretch";
1938   };
1940   sg-nvim = super.sg-nvim.overrideAttrs (
1941     old:
1942     let
1943       sg-nvim-rust = rustPlatform.buildRustPackage {
1944         pname = "sg-nvim-rust";
1945         inherit (old) version src;
1947         cargoHash = "sha256-7Bo0DSRqxA7kgNuyuWw24r3PsP92y9h98SHFtIhG+Gs=";
1949         nativeBuildInputs = [ pkg-config ];
1951         buildInputs =
1952           [ openssl ]
1953           ++ lib.optionals stdenv.hostPlatform.isDarwin [
1954             darwin.apple_sdk.frameworks.Security
1955             darwin.apple_sdk.frameworks.SystemConfiguration
1956           ];
1958         prePatch = ''
1959           rm .cargo/config.toml
1960         '';
1962         env.OPENSSL_NO_VENDOR = true;
1964         cargoBuildFlags = [ "--workspace" ];
1966         # tests are broken
1967         doCheck = false;
1968       };
1969     in
1970     {
1971       dependencies = with self; [ plenary-nvim ];
1972       postInstall = ''
1973         mkdir -p $out/target/debug
1974         ln -s ${sg-nvim-rust}/{bin,lib}/* $out/target/debug
1975       '';
1976       nvimRequireCheck = "sg";
1977     }
1978   );
1980   skim = buildVimPlugin {
1981     pname = "skim";
1982     inherit (skim) version;
1983     src = skim.vim;
1984   };
1986   skim-vim = super.skim-vim.overrideAttrs {
1987     dependencies = [ self.skim ];
1988   };
1990   smart-open-nvim = super.smart-open-nvim.overrideAttrs {
1991     dependencies = with self; [
1992       telescope-nvim
1993       sqlite-lua
1994     ];
1995   };
1997   sniprun =
1998     let
1999       version = "1.3.16";
2000       src = fetchFromGitHub {
2001         owner = "michaelb";
2002         repo = "sniprun";
2003         rev = "refs/tags/v${version}";
2004         hash = "sha256-2rVeBUkdLXUiHkd8slyiLTYQBKwgMQvIi/uyCToVBYA=";
2005       };
2006       sniprun-bin = rustPlatform.buildRustPackage {
2007         pname = "sniprun-bin";
2008         inherit version src;
2010         buildInputs = lib.optionals stdenv.hostPlatform.isDarwin [
2011           darwin.apple_sdk.frameworks.Security
2012         ];
2014         cargoHash = "sha256-eZcWS+DWec0V9G6hBnZRUNcb3uZeSiBhn4Ed9KodFV8=";
2016         nativeBuildInputs = [ makeWrapper ];
2018         postInstall = ''
2019           wrapProgram $out/bin/sniprun \
2020             --prefix PATH ${
2021               lib.makeBinPath [
2022                 bashInteractive
2023                 coreutils
2024                 curl
2025                 gnugrep
2026                 gnused
2027                 procps
2028               ]
2029             }
2030         '';
2032         doCheck = false;
2033       };
2034     in
2035     buildVimPlugin {
2036       pname = "sniprun";
2037       inherit version src;
2039       patches = [ ./patches/sniprun/fix-paths.patch ];
2040       postPatch = ''
2041         substituteInPlace lua/sniprun.lua --replace '@sniprun_bin@' ${sniprun-bin}
2042       '';
2044       propagatedBuildInputs = [ sniprun-bin ];
2046       meta = {
2047         homepage = "https://github.com/michaelb/sniprun/";
2048         changelog = "https://github.com/michaelb/sniprun/blob/v${version}/CHANGELOG.md";
2049         maintainers = with lib.maintainers; [ GaetanLepage ];
2050       };
2051       nvimRequireCheck = "sniprun";
2052     };
2054   # The GitHub repository returns 404, which breaks the update script
2055   Spacegray-vim = buildVimPlugin {
2056     pname = "Spacegray.vim";
2057     version = "2021-07-06";
2058     src = fetchFromGitHub {
2059       owner = "ackyshake";
2060       repo = "Spacegray.vim";
2061       rev = "c699ca10ed421c462bd1c87a158faaa570dc8e28";
2062       sha256 = "0ma8w6p5jh6llka49x5j5ql8fmhv0bx5hhsn5b2phak79yqg1k61";
2063     };
2064     meta.homepage = "https://github.com/ackyshake/Spacegray.vim/";
2065   };
2067   sqlite-lua = super.sqlite-lua.overrideAttrs (
2068     oa:
2069     let
2070       libsqlite = "${sqlite.out}/lib/libsqlite3${stdenv.hostPlatform.extensions.sharedLibrary}";
2071     in
2072     {
2073       postPatch = ''
2074         substituteInPlace lua/sqlite/defs.lua \
2075           --replace-fail "path = vim.g.sqlite_clib_path" "path = vim.g.sqlite_clib_path or '${lib.escapeShellArg libsqlite}'"
2076       '';
2078       passthru = oa.passthru // {
2079         initLua = ''vim.g.sqlite_clib_path = "${libsqlite}"'';
2080       };
2081       nvimRequireCheck = "sqlite";
2082     }
2083   );
2085   ssr = super.ssr-nvim.overrideAttrs {
2086     dependencies = with self; [ nvim-treesitter ];
2087     nvimRequireCheck = "ssr";
2088   };
2090   startup-nvim = super.startup-nvim.overrideAttrs {
2091     dependencies = with super; [ plenary-nvim ];
2092     nvimRequireCheck = "startup";
2093   };
2095   statix = buildVimPlugin rec {
2096     inherit (statix) pname src meta;
2097     version = "0.1.0";
2098     postPatch = ''
2099       # check that version is up to date
2100       grep 'pname = "statix-vim"' -A 1 flake.nix \
2101         | grep -F 'version = "${version}"'
2103       cd vim-plugin
2104       substituteInPlace ftplugin/nix.vim --replace statix ${statix}/bin/statix
2105       substituteInPlace plugin/statix.vim --replace statix ${statix}/bin/statix
2106     '';
2107   };
2109   stylish-nvim = super.stylish-nvim.overrideAttrs {
2110     postPatch = ''
2111       substituteInPlace lua/stylish/common/mouse_hover_handler.lua --replace xdotool ${xdotool}/bin/xdotool
2112       substituteInPlace lua/stylish/components/menu.lua --replace xdotool ${xdotool}/bin/xdotool
2113       substituteInPlace lua/stylish/components/menu.lua --replace xwininfo ${xorg.xwininfo}/bin/xwininfo
2114     '';
2115     nvimRequireCheck = "stylish";
2116   };
2118   sved =
2119     let
2120       # we put the script in its own derivation to benefit the magic of wrapGAppsHook3
2121       svedbackend = stdenv.mkDerivation {
2122         name = "svedbackend-${super.sved.name}";
2123         inherit (super.sved) src;
2124         nativeBuildInputs = [
2125           wrapGAppsHook3
2126           gobject-introspection
2127         ];
2128         buildInputs = [
2129           glib
2130           (python3.withPackages (
2131             ps: with ps; [
2132               pygobject3
2133               pynvim
2134               dbus-python
2135             ]
2136           ))
2137         ];
2138         preferLocalBuild = true;
2139         installPhase = ''
2140           install -Dt $out/bin ftplugin/evinceSync.py
2141         '';
2142       };
2143       # the vim plugin expects evinceSync.py to be a python file, but it is a C wrapper
2144       pythonWrapper =
2145         writeText "evinceSync-wrapper.py" # python
2146           ''
2147             #!${python3}/bin/python3
2148             import os
2149             import sys
2150             os.execv("${svedbackend}/bin/evinceSync.py", sys.argv)
2151           '';
2152     in
2153     super.sved.overrideAttrs {
2154       preferLocalBuild = true;
2155       postPatch = ''
2156         rm ftplugin/evinceSync.py
2157         install -m 544 ${pythonWrapper} ftplugin/evinceSync.py
2158       '';
2159       meta = {
2160         description = "synctex support between vim/neovim and evince";
2161       };
2162     };
2164   syntax-tree-surfer = super.syntax-tree-surfer.overrideAttrs {
2165     dependencies = with self; [ nvim-treesitter ];
2166     meta.maintainers = with lib.maintainers; [ callumio ];
2167     nvimRequireCheck = "syntax-tree-surfer";
2168   };
2170   taskwarrior3 = buildVimPlugin {
2171     inherit (taskwarrior3) version pname;
2172     src = "${taskwarrior3.src}/scripts/vim";
2173   };
2175   taskwarrior2 = buildVimPlugin {
2176     inherit (taskwarrior2) version pname;
2177     src = "${taskwarrior2.src}/scripts/vim";
2178   };
2180   telekasten-nvim = super.telekasten-nvim.overrideAttrs {
2181     dependencies = with self; [
2182       plenary-nvim
2183       telescope-nvim
2184     ];
2185     nvimRequireCheck = "telekasten";
2186   };
2188   telescope-cheat-nvim = super.telescope-cheat-nvim.overrideAttrs {
2189     dependencies = with self; [
2190       sqlite-lua
2191       telescope-nvim
2192     ];
2193   };
2195   telescope-frecency-nvim = super.telescope-frecency-nvim.overrideAttrs {
2196     dependencies = with self; [
2197       sqlite-lua
2198       telescope-nvim
2199     ];
2200   };
2202   telescope-fzf-native-nvim = super.telescope-fzf-native-nvim.overrideAttrs {
2203     dependencies = with self; [ telescope-nvim ];
2204     buildPhase = "make";
2205     meta.platforms = lib.platforms.all;
2206   };
2208   telescope-fzf-writer-nvim = super.telescope-fzf-writer-nvim.overrideAttrs {
2209     dependencies = with self; [ telescope-nvim ];
2210   };
2212   telescope-fzy-native-nvim = super.telescope-fzy-native-nvim.overrideAttrs (old: {
2213     dependencies = with self; [ telescope-nvim ];
2214     preFixup =
2215       let
2216         fzy-lua-native-path = "deps/fzy-lua-native";
2217         fzy-lua-native = stdenv.mkDerivation {
2218           name = "fzy-lua-native";
2219           src = "${old.src}/${fzy-lua-native-path}";
2220           # remove pre-compiled binaries
2221           preBuild = "rm -rf static/*";
2222           installPhase = ''
2223             install -Dm 444 -t $out/static static/*
2224             install -Dm 444 -t $out/lua lua/*
2225           '';
2226         };
2227       in
2228       ''
2229         rm -rf $target/${fzy-lua-native-path}/*
2230         ln -s ${fzy-lua-native}/static $target/${fzy-lua-native-path}/static
2231         ln -s ${fzy-lua-native}/lua $target/${fzy-lua-native-path}/lua
2232       '';
2233     meta.platforms = lib.platforms.all;
2234   });
2236   telescope-git-conflicts-nvim = super.telescope-git-conflicts-nvim.overrideAttrs {
2237     dependencies = with self; [ telescope-nvim ];
2238   };
2240   telescope-media-files-nvim = super.telescope-media-files-nvim.overrideAttrs {
2241     dependencies = with self; [
2242       telescope-nvim
2243       popup-nvim
2244       plenary-nvim
2245     ];
2246   };
2248   telescope-nvim = super.telescope-nvim.overrideAttrs {
2249     dependencies = with self; [ plenary-nvim ];
2250   };
2252   telescope-symbols-nvim = super.telescope-symbols-nvim.overrideAttrs {
2253     dependencies = with self; [ telescope-nvim ];
2254   };
2256   telescope-undo-nvim = super.telescope-undo-nvim.overrideAttrs {
2257     dependencies = with self; [ telescope-nvim ];
2258   };
2260   telescope-z-nvim = super.telescope-z-nvim.overrideAttrs {
2261     dependencies = with self; [ telescope-nvim ];
2262   };
2264   telescope-zoxide = super.telescope-zoxide.overrideAttrs {
2265     dependencies = with self; [ telescope-nvim ];
2267     buildInputs = [ zoxide ];
2269     postPatch = ''
2270       substituteInPlace lua/telescope/_extensions/zoxide/config.lua \
2271         --replace "zoxide query -ls" "${zoxide}/bin/zoxide query -ls"
2272     '';
2273   };
2275   todo-comments-nvim = super.todo-comments-nvim.overrideAttrs {
2276     dependencies = [ self.plenary-nvim ];
2277     nvimRequireCheck = "todo-comments";
2278   };
2280   tssorter-nvim = super.tssorter-nvim.overrideAttrs {
2281     dependencies = with self; [ nvim-treesitter ];
2282     nvimRequireCheck = "tssorter";
2283   };
2285   tup =
2286     let
2287       # Based on the comment at the top of https://github.com/gittup/tup/blob/master/contrib/syntax/tup.vim
2288       ftdetect = builtins.toFile "tup.vim" ''
2289         au BufNewFile,BufRead Tupfile,*.tup setf tup
2290       '';
2291     in
2292     buildVimPlugin {
2293       inherit (tup) pname version src;
2294       preInstall = ''
2295         mkdir -p vim-plugin/syntax vim-plugin/ftdetect
2296         cp contrib/syntax/tup.vim vim-plugin/syntax/tup.vim
2297         cp "${ftdetect}" vim-plugin/ftdetect/tup.vim
2298         cd vim-plugin
2299       '';
2300       meta.maintainers = with lib.maintainers; [ enderger ];
2301     };
2303   typescript-tools-nvim = super.typescript-tools-nvim.overrideAttrs {
2304     dependencies = with self; [
2305       nvim-lspconfig
2306       plenary-nvim
2307     ];
2308     nvimRequireCheck = "typescript-tools";
2309   };
2311   unicode-vim =
2312     let
2313       unicode-data = fetchurl {
2314         url = "http://www.unicode.org/Public/UNIDATA/UnicodeData.txt";
2315         sha256 = "16b0jzvvzarnlxdvs2izd5ia0ipbd87md143dc6lv6xpdqcs75s9";
2316       };
2317     in
2318     super.unicode-vim.overrideAttrs (oa: {
2319       # redirect to /dev/null else changes terminal color
2320       buildPhase = ''
2321         cp "${unicode-data}" autoload/unicode/UnicodeData.txt
2322         echo "Building unicode cache"
2323         ${vim}/bin/vim --cmd ":set rtp^=$PWD" -c 'ru plugin/unicode.vim' -c 'UnicodeCache' -c ':echohl Normal' -c ':q' > /dev/null
2324       '';
2326       passthru = oa.passthru // {
2328         initLua = ''vim.g.Unicode_data_directory="${self.unicode-vim}/autoload/unicode"'';
2329       };
2330     });
2332   unison = super.unison.overrideAttrs {
2333     # Editor stuff isn't at top level
2334     postPatch = "cd editor-support/vim";
2335   };
2337   vCoolor-vim = super.vCoolor-vim.overrideAttrs {
2338     # on linux can use either Zenity or Yad.
2339     propagatedBuildInputs = [ zenity ];
2340     meta = {
2341       description = "Simple color selector/picker plugin";
2342       license = lib.licenses.publicDomain;
2343     };
2344   };
2346   vim-addon-actions = super.vim-addon-actions.overrideAttrs {
2347     dependencies = with self; [
2348       vim-addon-mw-utils
2349       tlib_vim
2350     ];
2351   };
2353   vim-addon-async = super.vim-addon-async.overrideAttrs {
2354     dependencies = with self; [ vim-addon-signs ];
2355   };
2357   vim-addon-background-cmd = super.vim-addon-background-cmd.overrideAttrs {
2358     dependencies = with self; [ vim-addon-mw-utils ];
2359   };
2361   vim-addon-completion = super.vim-addon-completion.overrideAttrs {
2362     dependencies = with self; [ tlib_vim ];
2363   };
2365   vim-addon-goto-thing-at-cursor = super.vim-addon-goto-thing-at-cursor.overrideAttrs {
2366     dependencies = with self; [ tlib_vim ];
2367   };
2369   vim-addon-manager = super.vim-addon-manager.overrideAttrs {
2370     buildInputs = lib.optional stdenv.hostPlatform.isDarwin Cocoa;
2371   };
2373   vim-addon-mru = super.vim-addon-mru.overrideAttrs {
2374     dependencies = with self; [
2375       vim-addon-other
2376       vim-addon-mw-utils
2377     ];
2378   };
2380   vim-addon-nix = super.vim-addon-nix.overrideAttrs {
2381     dependencies = with self; [
2382       vim-addon-completion
2383       vim-addon-goto-thing-at-cursor
2384       vim-addon-errorformats
2385       vim-addon-actions
2386       vim-addon-mw-utils
2387       tlib_vim
2388     ];
2389   };
2391   vim-addon-sql = super.vim-addon-sql.overrideAttrs {
2392     dependencies = with self; [
2393       vim-addon-completion
2394       vim-addon-background-cmd
2395       tlib_vim
2396     ];
2397   };
2399   vim-addon-syntax-checker = super.vim-addon-syntax-checker.overrideAttrs {
2400     dependencies = with self; [
2401       vim-addon-mw-utils
2402       tlib_vim
2403     ];
2404   };
2406   vim-addon-toggle-buffer = super.vim-addon-toggle-buffer.overrideAttrs {
2407     dependencies = with self; [
2408       vim-addon-mw-utils
2409       tlib_vim
2410     ];
2411   };
2413   vim-addon-xdebug = super.vim-addon-xdebug.overrideAttrs {
2414     dependencies = with self; [
2415       webapi-vim
2416       vim-addon-mw-utils
2417       vim-addon-signs
2418       vim-addon-async
2419     ];
2420   };
2422   vim-agda = super.vim-agda.overrideAttrs {
2423     preFixup = ''
2424       substituteInPlace "$out"/autoload/agda.vim \
2425         --replace "jobstart(['agda'" "jobstart(['${agda}/bin/agda'"
2426     '';
2427   };
2429   vim-bazel = super.vim-bazel.overrideAttrs {
2430     dependencies = with self; [ vim-maktaba ];
2431   };
2433   vim-beancount = super.vim-beancount.overrideAttrs {
2434     passthru.python3Dependencies = ps: with ps; [ beancount ];
2435   };
2437   vim-clap = callPackage ./vim-clap { };
2439   vim-codefmt = super.vim-codefmt.overrideAttrs {
2440     dependencies = with self; [ vim-maktaba ];
2441   };
2443   # Due to case-sensitivety issues, the hash differs on Darwin systems, see:
2444   # https://github.com/NixOS/nixpkgs/issues/157609
2445   vim-colorschemes = super.vim-colorschemes.overrideAttrs (old: {
2446     src = old.src.overrideAttrs (srcOld: {
2447       postFetch =
2448         (srcOld.postFetch or "")
2449         + lib.optionalString (!stdenv.hostPlatform.isDarwin) ''
2450           rm $out/colors/darkBlue.vim
2451         '';
2452     });
2453   });
2455   vim-dadbod-ui = super.vim-dadbod-ui.overrideAttrs {
2456     dependencies = with self; [ vim-dadbod ];
2457   };
2459   vim-dasht = super.vim-dasht.overrideAttrs {
2460     preFixup = ''
2461       substituteInPlace $out/autoload/dasht.vim \
2462         --replace "['dasht']" "['${dasht}/bin/dasht']"
2463     '';
2464   };
2466   vim-easytags = super.vim-easytags.overrideAttrs {
2467     dependencies = with self; [ vim-misc ];
2468     patches = [
2469       (fetchpatch {
2470         # https://github.com/xolox/vim-easytags/pull/170 fix version detection for universal-ctags
2471         url = "https://github.com/xolox/vim-easytags/commit/46e4709500ba3b8e6cf3e90aeb95736b19e49be9.patch";
2472         sha256 = "0x0xabb56xkgdqrg1mpvhbi3yw4d829n73lsnnyj5yrxjffy4ax4";
2473       })
2474     ];
2475   };
2477   vim-fzf-coauthorship = super.vim-fzf-coauthorship.overrideAttrs {
2478     dependencies = with self; [ fzf-vim ];
2479   };
2481   # change the go_bin_path to point to a path in the nix store. See the code in
2482   # fatih/vim-go here
2483   # https://github.com/fatih/vim-go/blob/155836d47052ea9c9bac81ba3e937f6f22c8e384/autoload/go/path.vim#L154-L159
2484   vim-go =
2485     let
2486       binPath = lib.makeBinPath [
2487         asmfmt
2488         delve
2489         errcheck
2490         go-motion
2491         go-tools # contains staticcheck, keyify
2492         gocode-gomod
2493         godef
2494         gogetdoc
2495         golint
2496         golangci-lint
2497         gomodifytags
2498         gopls
2499         gotags
2500         gotools # contains guru, gorename
2501         iferr
2502         impl
2503         reftools
2504         revive
2505       ];
2506     in
2507     super.vim-go.overrideAttrs {
2508       postPatch = ''
2509         sed -i autoload/go/config.vim -Ee 's@"go_bin_path", ""@"go_bin_path", "${binPath}"@g'
2510       '';
2511     };
2513   vim-gist = super.vim-gist.overrideAttrs {
2514     dependencies = with self; [ webapi-vim ];
2515   };
2517   vim-grammarous = super.vim-grammarous.overrideAttrs {
2518     # use `:GrammarousCheck` to initialize checking
2519     # In neovim, you also want to use set
2520     #   let g:grammarous#show_first_error = 1
2521     # see https://github.com/rhysd/vim-grammarous/issues/39
2522     patches = [
2523       (substituteAll {
2524         src = ./patches/vim-grammarous/set_default_languagetool.patch;
2525         inherit languagetool;
2526       })
2527     ];
2528   };
2530   vim-hexokinase = super.vim-hexokinase.overrideAttrs (old: {
2531     preFixup =
2532       let
2533         hexokinase = buildGoModule {
2534           name = "hexokinase";
2535           src = old.src + "/hexokinase";
2536           vendorHash = null;
2537         };
2538       in
2539       ''
2540         ln -s ${hexokinase}/bin/hexokinase $target/hexokinase/hexokinase
2541       '';
2543     meta.platforms = lib.platforms.all;
2544   });
2546   vim-hier = super.vim-hier.overrideAttrs {
2547     buildInputs = [ vim ];
2548   };
2550   vim-isort = super.vim-isort.overrideAttrs {
2551     postPatch = ''
2552       substituteInPlace ftplugin/python_vimisort.vim \
2553         --replace 'import vim' 'import vim; import sys; sys.path.append("${python3.pkgs.isort}/${python3.sitePackages}")'
2554     '';
2555   };
2557   vim-markdown-composer =
2558     let
2559       vim-markdown-composer-bin = rustPlatform.buildRustPackage {
2560         pname = "vim-markdown-composer-bin";
2561         inherit (super.vim-markdown-composer) src version;
2562         cargoHash = "sha256-Vie8vLTplhaVU4E9IohvxERfz3eBpd62m8/1Ukzk8e4=";
2563         # tests require network access
2564         doCheck = false;
2565       };
2566     in
2567     super.vim-markdown-composer.overrideAttrs {
2568       preFixup = ''
2569         substituteInPlace "$out"/after/ftplugin/markdown/composer.vim \
2570           --replace "s:plugin_root . '/target/release/markdown-composer'" \
2571           "'${vim-markdown-composer-bin}/bin/markdown-composer'"
2572       '';
2573     };
2575   vim-metamath = super.vim-metamath.overrideAttrs {
2576     preInstall = "cd vim";
2577   };
2579   vim-pluto = super.vim-pluto.overrideAttrs {
2580     dependencies = with self; [ denops-vim ];
2581   };
2583   # The GitHub repository returns 404, which breaks the update script
2584   vim-pony = buildVimPlugin {
2585     pname = "vim-pony";
2586     version = "2018-07-27";
2587     src = fetchFromGitHub {
2588       owner = "jakwings";
2589       repo = "vim-pony";
2590       rev = "b26f01a869000b73b80dceabd725d91bfe175b75";
2591       sha256 = "0if8g94m3xmpda80byfxs649w2is9ah1k8v3028nblan73zlc8x8";
2592     };
2593     meta.homepage = "https://github.com/jakwings/vim-pony/";
2594   };
2596   vim-sensible = super.vim-sensible.overrideAttrs {
2597     patches = [ ./patches/vim-sensible/fix-nix-store-path-regex.patch ];
2598   };
2600   vim-snipmate = super.vim-snipmate.overrideAttrs {
2601     dependencies = with self; [
2602       vim-addon-mw-utils
2603       tlib_vim
2604     ];
2605   };
2607   vim-speeddating = super.vim-speeddating.overrideAttrs {
2608     dependencies = with self; [ vim-repeat ];
2609   };
2611   vim-stylish-haskell = super.vim-stylish-haskell.overrideAttrs (old: {
2612     postPatch =
2613       old.postPatch or ""
2614       + ''
2615         substituteInPlace ftplugin/haskell/stylish-haskell.vim --replace \
2616           'g:stylish_haskell_command = "stylish-haskell"' \
2617           'g:stylish_haskell_command = "${stylish-haskell}/bin/stylish-haskell"'
2618       '';
2619   });
2621   vim-surround = super.vim-surround.overrideAttrs {
2622     dependencies = with self; [ vim-repeat ];
2623   };
2625   vim-tabby = super.vim-tabby.overrideAttrs {
2626     nvimRequirecheck = "tabby";
2627   };
2629   vim-textobj-entire = super.vim-textobj-entire.overrideAttrs {
2630     dependencies = with self; [ vim-textobj-user ];
2631     meta.maintainers = with lib.maintainers; [ farlion ];
2632   };
2634   vim-unimpaired = super.vim-unimpaired.overrideAttrs {
2635     dependencies = with self; [ vim-repeat ];
2636   };
2638   vim-wakatime = super.vim-wakatime.overrideAttrs {
2639     buildInputs = [ python3 ];
2640     patchPhase = ''
2641       substituteInPlace plugin/wakatime.vim \
2642         --replace 'autocmd BufEnter,VimEnter' \
2643                   'autocmd VimEnter' \
2644         --replace 'autocmd CursorMoved,CursorMovedI' \
2645                   'autocmd CursorMoved,CursorMovedI,BufEnter'
2646     '';
2647   };
2649   vim-xdebug = super.vim-xdebug.overrideAttrs {
2650     postInstall = null;
2651   };
2653   vim-xkbswitch = super.vim-xkbswitch.overrideAttrs {
2654     patchPhase = ''
2655       substituteInPlace plugin/xkbswitch.vim \
2656         --replace /usr/local/lib/libxkbswitch.so ${xkb-switch}/lib/libxkbswitch.so
2657     '';
2658     buildInputs = [ xkb-switch ];
2659   };
2661   vim-yapf = super.vim-yapf.overrideAttrs {
2662     buildPhase = ''
2663       substituteInPlace ftplugin/python_yapf.vim \
2664         --replace '"yapf"' '"${python3.pkgs.yapf}/bin/yapf"'
2665     '';
2666   };
2668   vim2nix = buildVimPlugin {
2669     pname = "vim2nix";
2670     version = "1.0";
2671     src = ./vim2nix;
2672     dependencies = with self; [ vim-addon-manager ];
2673   };
2675   vimacs = super.vimacs.overrideAttrs {
2676     buildPhase = ''
2677       substituteInPlace bin/vim \
2678         --replace '/usr/bin/vim' 'vim' \
2679         --replace '/usr/bin/gvim' 'gvim'
2680       # remove unnecessary duplicated bin wrapper script
2681       rm -r plugin/vimacs
2682     '';
2683     meta = with lib; {
2684       description = "Vim-Improved eMACS: Emacs emulation plugin for Vim";
2685       homepage = "http://algorithm.com.au/code/vimacs";
2686       license = licenses.gpl2Plus;
2687       maintainers = with lib.maintainers; [ millerjason ];
2688     };
2689   };
2691   # The GitHub repository returns 404, which breaks the update script
2692   VimCompletesMe = buildVimPlugin {
2693     pname = "VimCompletesMe";
2694     version = "2022-02-18";
2695     src = fetchFromGitHub {
2696       owner = "ackyshake";
2697       repo = "VimCompletesMe";
2698       rev = "9adf692d7ae6424038458a89d4a411f0a27d1388";
2699       sha256 = "1sndgb3291dyifaa8adri2mb8cgbinbar3nw1fnf67k9ahwycaz0";
2700     };
2701     meta.homepage = "https://github.com/ackyshake/VimCompletesMe/";
2702   };
2704   vimsence = super.vimsence.overrideAttrs {
2705     meta = with lib; {
2706       description = "Discord rich presence for Vim";
2707       homepage = "https://github.com/hugolgst/vimsence";
2708       maintainers = with lib.maintainers; [ hugolgst ];
2709     };
2710   };
2712   vimproc-vim = super.vimproc-vim.overrideAttrs {
2713     buildInputs = [ which ];
2715     buildPhase = ''
2716       substituteInPlace autoload/vimproc.vim \
2717         --replace vimproc_mac.so vimproc_unix.so \
2718         --replace vimproc_linux64.so vimproc_unix.so \
2719         --replace vimproc_linux32.so vimproc_unix.so
2720       make -f make_unix.mak
2721     '';
2722   };
2724   vimshell-vim = super.vimshell-vim.overrideAttrs {
2725     dependencies = with self; [ vimproc-vim ];
2726   };
2728   vim-zettel = super.vim-zettel.overrideAttrs {
2729     dependencies = with self; [
2730       vimwiki
2731       fzf-vim
2732     ];
2733   };
2735   windows-nvim = super.windows-nvim.overrideAttrs {
2736     dependencies = with self; [
2737       middleclass
2738       animation-nvim
2739     ];
2740     nvimRequireCheck = "windows";
2741   };
2743   wtf-nvim = super.wtf-nvim.overrideAttrs {
2744     dependencies = with self; [ nui-nvim ];
2745     nvimRequireCheck = "wtf";
2746   };
2748   YankRing-vim = super.YankRing-vim.overrideAttrs {
2749     sourceRoot = ".";
2750   };
2752   yazi-nvim = super.yazi-nvim.overrideAttrs {
2753     dependencies = with self; [ plenary-nvim ];
2754     nvimRequireCheck = "yazi";
2755   };
2757   YouCompleteMe = super.YouCompleteMe.overrideAttrs {
2758     buildPhase = ''
2759       substituteInPlace plugin/youcompleteme.vim \
2760         --replace "'ycm_path_to_python_interpreter', '''" \
2761         "'ycm_path_to_python_interpreter', '${python3}/bin/python3'"
2763       rm -r third_party/ycmd
2764       ln -s ${ycmd}/lib/ycmd third_party
2765     '';
2767     meta = with lib; {
2768       description = "Code-completion engine for Vim";
2769       homepage = "https://github.com/Valloric/YouCompleteMe";
2770       license = licenses.gpl3;
2771       maintainers = with maintainers; [
2772         marcweber
2773         jagajaga
2774       ];
2775       platforms = platforms.unix;
2776     };
2777   };
2779   zoxide-vim = super.zoxide-vim.overrideAttrs {
2780     buildInputs = [ zoxide ];
2782     postPatch = ''
2783       substituteInPlace autoload/zoxide.vim \
2784         --replace "'zoxide_executable', 'zoxide'" "'zoxide_executable', '${zoxide}/bin/zoxide'"
2785     '';
2786   };
2788   typst-preview-nvim = super.typst-preview-nvim.overrideAttrs {
2789     postPatch = ''
2790       substituteInPlace lua/typst-preview/config.lua \
2791        --replace-fail "['tinymist'] = nil," "tinymist = '${lib.getExe tinymist}'," \
2792        --replace-fail "['websocat'] = nil," "websocat = '${lib.getExe websocat}',"
2793     '';
2795     nvimRequireCheck = "typst-preview";
2796   };
2798 // (
2799   let
2800     nodePackageNames = [
2801       "coc-cmake"
2802       "coc-docker"
2803       "coc-emmet"
2804       "coc-eslint"
2805       "coc-explorer"
2806       "coc-flutter"
2807       "coc-git"
2808       "coc-go"
2809       "coc-haxe"
2810       "coc-highlight"
2811       "coc-html"
2812       "coc-java"
2813       "coc-jest"
2814       "coc-json"
2815       "coc-lists"
2816       "coc-ltex"
2817       "coc-markdownlint"
2818       "coc-pairs"
2819       "coc-prettier"
2820       "coc-r-lsp"
2821       "coc-rls"
2822       "coc-rust-analyzer"
2823       "coc-sh"
2824       "coc-smartf"
2825       "coc-snippets"
2826       "coc-solargraph"
2827       "coc-spell-checker"
2828       "coc-sqlfluff"
2829       "coc-stylelint"
2830       "coc-sumneko-lua"
2831       "coc-tabnine"
2832       "coc-texlab"
2833       "coc-toml"
2834       "coc-tsserver"
2835       "coc-ultisnips"
2836       "coc-vetur"
2837       "coc-vimlsp"
2838       "coc-vimtex"
2839       "coc-wxml"
2840       "coc-yaml"
2841       "coc-yank"
2842     ];
2843     nodePackage2VimPackage =
2844       name:
2845       buildVimPlugin {
2846         pname = name;
2847         inherit (nodePackages.${name}) version meta;
2848         src = "${nodePackages.${name}}/lib/node_modules/${name}";
2849       };
2850   in
2851   lib.genAttrs nodePackageNames nodePackage2VimPackage