{ pkgs, ... }: let treesitter-blade-grammar = pkgs.tree-sitter.buildGrammar { language = "blade"; version = "v0.11.0"; src = (pkgs.fetchFromGitHub { owner = "EmranMR"; repo = "tree-sitter-blade"; rev = "a9997ceb8d2e0cd902fe649a33b476d37a0d6042"; hash = "sha256-PTGdsXlLoE+xlU0uWOU6LQalX4fhJ/qhpyEKmTAazLU="; }).overrideAttrs (drv: { fixupPhase = '' mkdir -p $out/queries/blade mv $out/queries/*.scm $out/queries/blade/ ''; }); meta.homepage = "https://github.com/EmranMR/tree-sitter-blade/"; }; in { programs.nixvim = { plugins.treesitter = { enable = true; nixGrammars = true; settings = { indent.enable = true; highlight.enable = true; }; grammarPackages = pkgs.vimPlugins.nvim-treesitter.passthru.allGrammars ++ [ treesitter-blade-grammar ]; luaConfig.post = '' do local parser_config = require("nvim-treesitter.parsers").get_parser_configs() -- change the following as needed parser_config.blade = { install_info = { url = "${treesitter-blade-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 = "blade", -- if filetype does not match the parser name } end ''; }; extraPlugins = [ treesitter-blade-grammar ]; }; }