Skip to content
vic

acarapetis/nvim-treesitter-jjconfig

treesitter injections for jj config files in neovim

acarapetis/nvim-treesitter-jjconfig.json
{
"createdAt": "2025-08-09T03:25:38Z",
"defaultBranch": "main",
"description": "treesitter injections for jj config files in neovim",
"fullName": "acarapetis/nvim-treesitter-jjconfig",
"homepage": "",
"language": "Tree-sitter Query",
"name": "nvim-treesitter-jjconfig",
"pushedAt": "2025-11-10T00:45:38Z",
"stargazersCount": 4,
"topics": [
"jj",
"jujutsu",
"neovim",
"neovim-plugin",
"nvim-treesitter",
"treesitter"
],
"updatedAt": "2025-11-16T16:12:59Z",
"url": "https://github.com/acarapetis/nvim-treesitter-jjconfig"
}

This is a neovim plugin providing filetype detection and a treesitter parser for revset expressions and templates inside jj configuration files.

It gives you syntax highlighting and autoindentation for:

  • toml strings containing jj revset expressions:
    • in [revsets]/[revset-aliases] tables
    • in command aliases when immediately following “—revisions”, “—from”, “—to”, etc. (I’ve left out the short forms for now because they seem likely to trigger false positives.)
  • toml strings containing jj templates:
    • in [templates]/[template-aliases] tables
    • in command aliases when immediately following “—template” or “-T”.
  • toml strings containing shell scripts:
    • in command aliases when immediately following the sequence “sh”, “-c” or “bash”, “-c”.

![screenshot]!(./screenshot.png)

For now it applies only when the first line of the file is a jj config-schema declaration, e.g.

"$schema" = "https://jj-vcs.github.io/jj/latest/config-schema.json"

(See ftdetect/jjconfig.lua for the exact pattern if you’re using something different and having trouble.)

Install this neovim plugin in whatever manner you prefer, and somewhere in your setup after setting up nvim-treesitter, call require("nvim-treesitter-jjconfig").config(). You can optionally provide an options table with any of the following options:

OptionTypeEffect
ensure_installedboolautomatically install the jj treesitter parsers at startup
sync_installbooldo the automatic installation synchronously

Example lazy.nvim config:

return {
{
"nvim-treesitter/nvim-treesitter",
lazy = false,
build = ":TSUpdate",
config = function()
require("nvim-treesitter.configs").setup({
-- ...
})
end
},
{
"acarapetis/nvim-treesitter-jjconfig",
dependencies = { "nvim-treesitter/nvim-treesitter" },
lazy = false,
opts = { ensure_installed = true },
}
}

This would not be possible without the jjtemplate and jjrevset parsers by bryceberger.

The syntax highlighting queries for jjtemplate and jjrevset included in this repo were originally written by bryceberger for helix.

Thanks to bryceberger and algmyr for a fruitful conversation on the JJ discord.