From 5e12c2315a688ce5af764ddef8a1c804de4f7f65 Mon Sep 17 00:00:00 2001 From: NotAShelf Date: Tue, 23 Apr 2024 20:20:49 +0300 Subject: [PATCH] plugins/treesitter: allow user to toggle default grammars --- modules/plugins/treesitter/config.nix | 17 +++++++++++-- modules/plugins/treesitter/treesitter.nix | 31 +++++++++++++++-------- 2 files changed, 36 insertions(+), 12 deletions(-) diff --git a/modules/plugins/treesitter/config.nix b/modules/plugins/treesitter/config.nix index 8fee4dc..cf1d595 100644 --- a/modules/plugins/treesitter/config.nix +++ b/modules/plugins/treesitter/config.nix @@ -5,8 +5,9 @@ ... }: let inherit (lib.modules) mkIf mkMerge; - inherit (lib.lists) optional; + inherit (lib.lists) optional optionals; inherit (lib.trivial) boolToString; + inherit (lib.nvim.lists) listContainsValues; inherit (lib.nvim.binds) mkSetBinding addDescriptionsToMappings; inherit (lib.nvim.lua) toLuaObject; inherit (lib.nvim.dag) entryBefore entryAnywhere; @@ -23,6 +24,7 @@ in { startPlugins = ["nvim-treesitter"] ++ optional usingNvimCmp "cmp-treesitter"; autocomplete.sources = {"treesitter" = "[Treesitter]";}; + treesitter.grammars = optionals cfg.addDefaultGrammars cfg.defaultGrammars; maps = { # HACK: Using mkSetLuaBinding and putting the lua code does not work for some reason: It just selects the whole file. @@ -35,6 +37,7 @@ in { (mkSetBinding mappings.incrementalSelection.decrementByNode ":lua require('nvim-treesitter.incremental_selection').node_decremental()") ]; }; + # For some reason treesitter highlighting does not work on start if this is set before syntax on configRC.treesitter-fold = mkIf cfg.fold (entryBefore ["basic"] '' set foldmethod=expr @@ -43,7 +46,7 @@ in { ''); luaConfigRC.treesitter = entryAnywhere '' - require'nvim-treesitter.configs'.setup { + require('nvim-treesitter.configs').setup { -- Disable imperative treesitter options that would attempt to fetch -- grammars into the read-only Nix store. To add additional grammars here -- you must use the `config.vim.treesitter.grammars` option. @@ -51,13 +54,23 @@ in { sync_install = false, ensure_installed = {}, + -- Indentation module for Treesitter + indent = { + enable = true, + disable = {}, + }, + + -- Highlight module for Treesitter highlight = { enable = ${boolToString cfg.highlight.enable}, disable = ${toLuaObject cfg.highlight.disable}, + additional_vim_regex_highlighting = false, }, + -- Indentation module for Treesitter incremental_selection = { enable = true, + disable = {}, keymaps = { init_selection = false, node_incremental = false, diff --git a/modules/plugins/treesitter/treesitter.nix b/modules/plugins/treesitter/treesitter.nix index 74c1b62..1ff4dfe 100644 --- a/modules/plugins/treesitter/treesitter.nix +++ b/modules/plugins/treesitter/treesitter.nix @@ -4,11 +4,9 @@ ... }: let inherit (lib.options) mkOption mkEnableOption literalMD; + inherit (lib.types) listOf package str either bool; inherit (lib.nvim.binds) mkMappingOption; - inherit (lib.types) listOf package str either; - inherit (lib.nvim.types) luaInline; - - inherit (pkgs.vimPlugins.nvim-treesitter) builtGrammars; + inherit (lib.nvim.types) luaInline mkGrammarOption; in { options.vim.treesitter = { enable = mkEnableOption "treesitter, also enabled automatically through language options"; @@ -37,7 +35,7 @@ in { highlight = { enable = mkEnableOption "highlighting with treesitter"; disable = mkOption { - type = either (luaInline (listOf str)); + type = either (listOf str) luaInline; default = []; example = literalMD '' ```lua @@ -69,20 +67,33 @@ in { }; }; + addDefaultGrammars = mkOption { + type = bool; + default = true; + description = '' + Whether to add the default grammars to the list of grammars + to install. + This option is only relevant if treesitter has been enabled. + ''; + }; + defaultGrammars = mkOption { internal = true; readOnly = true; type = listOf package; - default = with builtGrammars; [c lua vim vimdoc query]; + default = with pkgs.vimPlugins.nvim-treesitter.builtGrammars; [c lua vim vimdoc query]; description = '' A list of treesitter grammars that will be installed by default - if treesitter has been enabled. + if treesitter has been enabled and {option}`vim.treeesitter.addDefaultGrammars` + has been set to true. - ::: {.warning} + ::: {.note} Regardless of which language module options you enable, Neovim depends on those grammars to be enabled while treesitter is enabled. - This list cannot be modified, but its contents will only be appended - if the list of grammars does not contain the required grammars. + + This list cannot be modified, but if you would like to bring your own + parsers instead of those provided here, you can set `addDefaultGrammars` + to false ::: ''; };