jj.nvim

⚠️ WORK IN PROGRESS ⚠️

A Neovim plugin for Jujutsu (jj) version control system.

About

This plugin aims to be something like vim-fugitive but for piloting the jj-vcs CLI. The goal is to eventually provide features similar to git status, diffs, and pickers for managing Jujutsu repositories directly from Neovim.

https://github.com/nicolasgb/assets/demo.mp4

Current Features

  • Basic jj command execution through :J command
  • Terminal-based output display for jj commands
  • Support jj subcommands including your aliases through the cmdline.
  • First class citizens with ui integration
    • describe - Set change descriptions
    • status / st - Show repository status
    • log - Display log history with configurable options
    • diff - Show changes
    • new - Create a new change
    • edit - Edit a change
    • squash - Squash the current diff to it's parent

Installation

Using lazy.nvim:

{
  "nicolasgb/jj.nvim",
  config = function()
    require("jj").setup({})
  end,
}

Cmdline Usage

The plugin provides a :J command that accepts jj subcommands:

:J status
:J log
:J describe "Your change description"
:J new
:J # This will use your defined default command
:J <your-alias>

Example config

{
  "nicolasgb/jj.nvim",
  config = function()
    require("jj").setup({})
    local cmd = require "jj.cmd"
    vim.keymap.set("n", "<leader>jd", cmd.describe, { desc = "JJ describe" })
    vim.keymap.set("n", "<leader>jl", cmd.log, { desc = "JJ log" })
    vim.keymap.set("n", "<leader>je", cmd.edit, { desc = "JJ edit" })
    vim.keymap.set("n", "<leader>jn", cmd.new, { desc = "JJ new" })
    vim.keymap.set("n", "<leader>js", cmd.status, { desc = "JJ status" })
    vim.keymap.set("n", "<leader>dj", cmd.diff, { desc = "JJ diff" })
    vim.keymap.set("n", "<leader>sj", cmd.squash, { desc = "JJ squash" })

    -- Some functions like `describe` or `log` can take parameters
    vim.keymap.set("n", "<leader>jl", function()
      cmd.log {
        revisions = "all()",
      }
    end, { desc = "JJ log" })

    -- This is an alias i use for moving bookmarks its so good
    vim.keymap.set("n", "<leader>jt", function()
      cmd.j "tug"
      cmd.log {}
    end, { desc = "JJ tug" })
  end,
}

Requirements

  • Jujutsu installed and available in PATH

Contributing

This is an early-stage project. Contributions are welcome, but please be aware that the API and features are likely to change significantly.

License

MIT

S
Description
🥋 Drive Jujutsu (jj) VCS from Neovim like a pro
Readme
45 MiB
Languages
Lua 100%