mirror of
https://github.com/zoriya/jj.nvim.git
synced 2026-08-09 20:56:13 +00:00
134 lines
3.5 KiB
Markdown
134 lines
3.5 KiB
Markdown
# jj.nvim
|
|
|
|
⚠️ **WORK IN PROGRESS** ⚠️
|
|
|
|
A Neovim plugin for [Jujutsu (jj)](https://github.com/jj-vcs/jj) version control system.
|
|
|
|
## About
|
|
|
|
This plugin aims to be something like vim-fugitive but for driving 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.
|
|
|
|

|
|
|
|
## 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
|
|
- Picker for for [Snacks.nvim](https://github.com/folke/snacks.nvim)
|
|
- `jj status` Displays the current changes diffs
|
|
- `jj log` Displays a buffer's history changes and allows to edit it's change
|
|
|
|
## Installation
|
|
|
|
Using [lazy.nvim](https://github.com/folke/lazy.nvim):
|
|
|
|
```lua
|
|
{
|
|
"nicolasgb/jj.nvim",
|
|
config = function()
|
|
require("jj").setup({})
|
|
end,
|
|
}
|
|
```
|
|
|
|
## Cmdline Usage
|
|
|
|
The plugin provides a `:J` command that accepts jj subcommands:
|
|
|
|
```sh
|
|
:J status
|
|
:J log
|
|
:J describe "Your change description"
|
|
:J new
|
|
:J # This will use your defined default command
|
|
:J <your-alias>
|
|
```
|
|
|
|
## Setup config
|
|
|
|
```lua
|
|
{
|
|
-- Setup snacks as a picker
|
|
picker = {
|
|
-- Here you can pass the options as you would for snacks.
|
|
-- It will be used when using the picker
|
|
snacks = {
|
|
|
|
}
|
|
}
|
|
}
|
|
|
|
```
|
|
|
|
## Example config
|
|
|
|
```lua
|
|
{
|
|
"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" })
|
|
|
|
-- Pickers
|
|
vim.keymap.set("n", "<leader>gj", function()
|
|
require("jj.picker").status()
|
|
end, { desc = "JJ Picker status" })
|
|
vim.keymap.set("n", "<leader>gl", function()
|
|
require("jj.picker").file_history()
|
|
end, { desc = "JJ Picker file history" })
|
|
|
|
|
|
|
|
-- 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](https://github.com/jj-vcs/jj) 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.
|
|
|
|
## Documentation
|
|
|
|
Once the plugin is more complete i'll write docs for each of the commands.
|
|
|
|
## FAQ
|
|
|
|
- Telescope Suport? Planned but i don't use it, it's already thought of by design, will implement it at some point or if someone submits a PR i'll accept it gladly.
|
|
|
|
## License
|
|
|
|
[MIT](License)
|