treesitter
URL: https://github.com/nvim-treesitter/nvim-treesitter/
Maintainers: Austin Horstman
Provides an interface to tree-sitter
note
This plugin defaults to all functionality disabled.
Please explicitly enable the features you would like to use in plugins.treesitter.settings
.
For example, to enable syntax highlighting use the plugins.treesitter.settings.highlight.enable
option.
Installing tree-sitter grammars from Nixpkgs
By default, all available grammars packaged in the nvim-treesitter
package are installed.
If you'd like more control, you could instead specify which packages to install. For example:
plugins.treesitter = {
enable = true;
grammarPackages = with pkgs.vimPlugins.nvim-treesitter.builtGrammars; [
bash
json
lua
make
markdown
nix
regex
toml
vim
vimdoc
xml
yaml
];
};
Installing tree-sitter grammars from nvim-treesitter
The default behavior is not to install any grammars through the plugin. We usually recommend installing grammars through nixpkgs instead (see above).
If you'd like to install a grammar through nvim-treesitter, you can run :TSInstall <grammar>
within vim
or use the plugins.treesitter.settings.ensure_installed
option to specify grammars you want the plugin to fetch and install.
plugins.treesitter = {
enable = true;
settings = {
# NOTE: You can set whether `nvim-treesitter` should automatically install the grammars.
auto_install = false;
ensure_installed = [
"git_config"
"git_rebase"
"gitattributes"
"gitcommit"
"gitignore"
];
};
};
NOTE: You can combine the functionality of plugins.treesitter.nixGrammars
and plugins.treesitter.settings.ensure_installed
.
This may be useful if a grammar isn't available from nixpkgs or you prefer to have specific grammars managed by nvim-treesitter.
Installing Your Own Grammars with Nixvim
The grammars you want will usually be included in nixGrammars
by default.
But, in the rare case it isn't, you can build your own and use it with Nixvim like so:
{ pkgs, ... }:
let
# Example of building your own grammar
treesitter-nu-grammar = pkgs.tree-sitter.buildGrammar {
language = "nu";
version = "0.0.0+rev=0bb9a60";
src = pkgs.fetchFromGitHub {
owner = "nushell";
repo = "tree-sitter-nu";
rev = "0bb9a602d9bc94b66fab96ce51d46a5a227ab76c";
hash = "sha256-A5GiOpITOv3H0wytCv6t43buQ8IzxEXrk3gTlOrO0K0=";
};
meta.homepage = "https://github.com/nushell/tree-sitter-nu";
};
# or you can yoink any grammars in tree-sitter.grammars.${grammar-name}
# treesitter-nu-grammar = pkgs.tree-sitter-grammars.tree-sitter-nu;
in
{
programs.nixvim = {
plugins = {
treesitter = {
enable = true;
settings.indent.enable = true;
grammarPackages = pkgs.vimPlugins.nvim-treesitter.passthru.allGrammars ++ [
treesitter-nu-grammar
];
luaConfig.post=
''
do
local parser_config = require("nvim-treesitter.parsers").get_parser_configs()
-- change the following as needed
parser_config.nu = {
install_info = {
url = "${treesitter-nu-grammar}", -- local path or git repo
files = {"src/parser.c"}, -- note that some parsers also require src/scanner.c or src/scanner.cc
-- optional entries:
-- branch = "main", -- default branch in case of git repo if different from master
-- generate_requires_npm = false, -- if stand-alone parser without npm dependencies
-- requires_generate_from_grammar = false, -- if folder contains pre-generated src/parser.c
},
filetype = "nu", -- if filetype does not match the parser name
}
end
'';
};
};
# Add as extra plugins so that their `queries/{language}/*.scm` get
# installed and can be picked up by `tree-sitter`
extraPlugins = [
treesitter-nu-grammar
];
};
}
The queries for the grammar should be added to one of the runtime directories under queries/{language}
but sometimes plugins do not conform to this structure.
In such cases, you can override the source derivation (or the grammar derivation) to move the queries to the appropriate folder:
(
(pkgs.fetchFromGitLab {
owner = "joncoole";
repo = "tree-sitter-nginx";
rev = "b4b61db443602b69410ab469c122c01b1e685aa0";
hash = "sha256-Sa7audtwH8EgrHJ5XIUKTdveZU2pDPoUq70InQ6qcKA=";
}).overrideAttrs
(drv: {
fixupPhase = ''
mkdir -p $out/queries/nginx
mv $out/queries/*.scm $out/queries/nginx/
'';
})
)
Verify if the queries were picked up by running :TSModuleInfo
.
plugins.treesitter.enable
Whether to enable nvim-treesitter.
Type: boolean
Default:
false
Example:
true
Declared by:
plugins.treesitter.package
The nvim-treesitter package to use.
Type: package
Default:
pkgs.vimPlugins.nvim-treesitter
Declared by:
plugins.treesitter.folding
Whether to enable tree-sitter based folding.
Type: boolean
Default:
false
Example:
true
Declared by:
plugins.treesitter.gccPackage
The gcc package to use. This is required to build grammars if you are not using nixGrammars
.
Type: null or package
Default:
pkgs.gcc
Example:
pkgs.gcc14
Declared by:
plugins.treesitter.grammarPackages
Grammar packages to install
Type: list of package
Default:
config.plugins.treesitter.package.passthru.allGrammars
Example:
pkgs.vimPlugins.nvim-treesitter.passthru.allGrammars
Declared by:
plugins.treesitter.languageRegister
This is a wrapping of the vim.treesitter.language.register
function.
Register specific parsers to one or several filetypes.
The keys are the parser names and the values are either one or several filetypes.
Type: attribute set of ((list of string) or string convertible to it)
Default:
{ }
Example:
{
cpp = "onelab";
python = [
"foo"
"bar"
];
}
Declared by:
plugins.treesitter.nixGrammars
Whether to install grammars defined in grammarPackages
.
Type: boolean
Default:
true
Example:
false
Declared by:
plugins.treesitter.nixvimInjections
Whether to enable Nixvim injections, e.g. highlighting extraConfigLua
as lua.
Type: boolean
Default:
true
Example:
false
Declared by:
plugins.treesitter.nodejsPackage
The nodejs package to use. This is required to build grammars if you are not using nixGrammars
.
Type: null or package
Default:
pkgs.nodejs
Example:
pkgs.nodejs_22
Declared by:
plugins.treesitter.treesitterPackage
The tree-sitter package to use. This is required to build grammars if you are not using nixGrammars
.
Type: null or package
Default:
pkgs.tree-sitter
Declared by: