From 1ad3516705412f10d76308008a5810d80b499818 Mon Sep 17 00:00:00 2001 From: Tim Keller Date: Wed, 3 Jun 2026 21:59:21 -0500 Subject: update nvim configs and add projects dir --- home-manager/neovim.nix | 47 +++++++++++++++++++++++++++++++++++------------ users/timmy/home.nix | 13 +++++-------- 2 files changed, 40 insertions(+), 20 deletions(-) diff --git a/home-manager/neovim.nix b/home-manager/neovim.nix index 60608f6..5b8447d 100644 --- a/home-manager/neovim.nix +++ b/home-manager/neovim.nix @@ -1,13 +1,13 @@ { lib, config, pkgs, ... }: let cfg = config.programs._neovim; - extraPlugins = cfg.plugins.packages // { - start = (cfg.plugins.packages.start or []) - ++ lib.optionals cfg.plugins.lsp.enable [ cfg.plugins.lsp.pluginPackage ] - ++ lib.optionals cfg.plugins.treesitter.enable [ cfg.plugins.treesitter.pluginPackage ] - ++ lib.optionals cfg.plugins.treesitter.enable cfg.plugins.treesitter.parsers.packages; - }; - pluginDir = pkgs.linkFarm "nvim-site" + pluginDir = let + extraPlugins = cfg.plugins.packages // { + start = (cfg.plugins.packages.start or []) + ++ lib.optionals (cfg.plugins.lsp.enable && cfg.plugins.lsp.lspconfig.enable) [ cfg.plugins.lsp.lspconfig.pluginPackage ] + ++ lib.optionals cfg.plugins.treesitter.enable [ cfg.plugins.treesitter.pluginPackage ]; + }; + in pkgs.linkFarm "nvim-site" (lib.concatLists (lib.mapAttrsToList (stage: plugins: map (plugin: { name = "share/nvim/site/pack/plugins/${stage}/${plugin.name}"; @@ -15,8 +15,19 @@ }) plugins ) extraPlugins)); - extraPackages = cfg.extraPackages - ++ lib.optionals cfg.plugins.lsp.enable cfg.plugins.lsp.languageServers.packages; + extraPackages = pkgs.symlinkJoin { + name = "nvim-extra-packages"; + paths = cfg.extraPackages + ++ lib.optionals cfg.plugins.lsp.enable cfg.plugins.lsp.languageServers.packages; + }; + + parserDir = let + allTSParserPackages = builtins.filter lib.isDerivation + (builtins.attrValues config.plugins.treesitter.parsers.installAllFrom); + in pkgs.symlinkJoin { + name = "nvim-treesitter-parsers"; + paths = if cfg.plugins.treesitter.parsers.installAll then cfg.plugins.treesitter.parsers.packages else allTSParserPackages; + }; finalPackage = pkgs.symlinkJoin { name = "neovim-not-wrapped"; @@ -24,8 +35,13 @@ nativeBuildInputs = [ pkgs.makeWrapper ]; postBuild = '' wrapProgram $out/bin/nvim \ - --prefix PATH : ${pkgs.lib.makeBinPath extraPackages} \ - --prefix XDG_DATA_DIRS : ${pluginDir}/share + --prefix PATH : ${extraPackages} \ + --prefix XDG_DATA_DIRS : ${pluginDir}/share \ + '' + lib.optionalString cfg.plugins.treesitter.enable '' + --add-flags '--cmd "set rtp^=${parserDir}"' \ + --add-flags '--cmd "set rtp^=${cfg.plugins.treesitter.pluginPackage}/runtime"' \ + '' + '' + # blank line here to terminate multiline command string '' + lib.optionalString cfg.viAlias '' ln -s $out/bin/nvim $out/bin/vi '' + lib.optionalString cfg.vimAlias '' @@ -41,7 +57,10 @@ in { plugins = { lsp = { enable = lib.mkEnableOption "install defined language servers into nvim path"; - pluginPackage = lib.mkPackageOption pkgs.vimPlugins "nvim-lspconfig" {}; + lspconfig = { + enable = lib.mkEnableOption "install plugin `lspconfig.pluginPackage`"; + pluginPackage = lib.mkPackageOption pkgs.vimPlugins "nvim-lspconfig" {}; + }; languageServers.packages = lib.mkOption { type = lib.types.listOf lib.types.package; default = [ ]; @@ -51,6 +70,10 @@ in { treesitter = { enable = lib.mkEnableOption "install treesitter and parsers as nvim plugins"; pluginPackage = lib.mkPackageOption pkgs.vimPlugins "nvim-treesitter" {}; + parsers.installAll = lib.mkEnableOption "install all available parsers. overrides `parsers.packages`"; + parsers.installAllFrom = lib.mkPackageOption pkgs.vimPlugins "nvim-treesitter-parsers" { + extraDescription = "parent package from which to install all treesitter parsers"; + }; parsers.packages = lib.mkOption { type = lib.types.listOf lib.types.package; default = [ ]; diff --git a/users/timmy/home.nix b/users/timmy/home.nix index 77934bc..958c8e7 100644 --- a/users/timmy/home.nix +++ b/users/timmy/home.nix @@ -9,12 +9,12 @@ download = "${home}/dls"; documents = "${home}/docs"; pictures = "${home}/pics"; + projects = "${home}/docs/src"; # Set these as null so they're not created music = null; publicShare = null; templates = null; videos = null; - #projects = "${home}/docs/src" }; in { options._users.${username}.home = { @@ -68,12 +68,12 @@ in { # Setup neovim programs._neovim = { enable = true; - package = pkgs.unstable.neovim; viAlias = true; vimAlias = true; plugins = { lsp = { enable = lib.mkDefault true; + lspconfig.enable = true; languageServers.packages = with pkgs; [ python313Packages.python-lsp-server svelte-language-server @@ -82,12 +82,9 @@ in { vscode-langservers-extracted ]; }; - treesitter = let - allTSParserPackages = builtins.filter lib.isDerivation - (builtins.attrValues pkgs.vimPlugins.nvim-treesitter-parsers); - in { + treesitter = { enable = lib.mkDefault true; - parsers.packages = allTSParserPackages; + parsers.installAll = lib.mkDefault true; }; packages.start = with pkgs.vimPlugins; [ autoclose-nvim @@ -96,7 +93,7 @@ in { minitab-nvim nvim-colorizer-lua nvim-ts-autotag # depends on treesitter - pkgs.unstable.vimPlugins.rainbow-delimiters-nvim # depends on treesitter + rainbow-delimiters-nvim # depends on treesitter snacks-nvim ]; }; -- cgit v1.2.3