{ config, pkgs, lib, ... }: let treesitterParsers = pkgs.symlinkJoin { name = "treesitter-parsers"; paths = builtins.attrValues pkgs.vimPlugins.nvim-treesitter.passthru.grammarPlugins; }; in { programs.neovim = { enable = true; defaultEditor = true; viAlias = true; vimAlias = true; withNodeJs = true; withPython3 = true; extraPackages = with pkgs; [ # Native compilation tools & Treesitter CLI gcc clang gnumake cmake tree-sitter # Search & Fuzzy Finding ripgrep fd fzf # Archive and Network Utilities git curl unzip gnutar gzip # Language Servers, Linters & Formatters (Declarative, no Mason needed) # Nix nil nixfmt statix # Lua lua-language-server stylua # C / C++ llvmPackages_latest.clang-tools llvmPackages_latest.lldb # Rust rust-analyzer # Python pyright ruff # Web / TypeScript / JavaScript / HTML / CSS / JSON vtsls vscode-langservers-extracted prettier # Shell shfmt shellcheck ]; extraWrapperArgs = [ "--set" "NVIM_TREESITTER_PARSERS" "${treesitterParsers}" ]; }; # Symlink LazyVim configuration to ~/.config/nvim recursively xdg.configFile."nvim" = { source = ./config; recursive = true; }; # Symlink precompiled Treesitter parsers directly into ~/.config/nvim/parser xdg.configFile."nvim/parser".source = "${treesitterParsers}/parser"; }