mirror of
https://github.com/nix-community/nixvim.git
synced 2025-06-21 08:35:43 +02:00
docs: document how to install custom tree-sitter grammars
This commit is contained in:
parent
1181535e34
commit
f4dd8924b1
1 changed files with 92 additions and 0 deletions
|
@ -12,6 +12,98 @@ helpers.neovim-plugin.mkNeovimPlugin config {
|
||||||
luaName = "nvim-treesitter.configs";
|
luaName = "nvim-treesitter.configs";
|
||||||
defaultPackage = pkgs.vimPlugins.nvim-treesitter;
|
defaultPackage = pkgs.vimPlugins.nvim-treesitter;
|
||||||
|
|
||||||
|
description = ''
|
||||||
|
Provides an interface to [tree-sitter]
|
||||||
|
|
||||||
|
### 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:
|
||||||
|
|
||||||
|
```nix
|
||||||
|
{ 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
|
||||||
|
];
|
||||||
|
};
|
||||||
|
|
||||||
|
extraConfigLua =
|
||||||
|
'''
|
||||||
|
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: ```nix
|
||||||
|
(
|
||||||
|
(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`.
|
||||||
|
|
||||||
|
[tree-sitter]: https://github.com/tree-sitter/tree-sitter
|
||||||
|
'';
|
||||||
|
|
||||||
maintainers = [ lib.maintainers.khaneliman ];
|
maintainers = [ lib.maintainers.khaneliman ];
|
||||||
|
|
||||||
# TODO introduced 2024-07-06: remove after 24.11
|
# TODO introduced 2024-07-06: remove after 24.11
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue