-- This plugin aims to be something like vim-fugitive but for driving the jj-vcs CLI. -- https://github.com/NicolasGB/jj.nvim return { "jj.nvim", cmd = { "J" }, enabled = true, after = function() local jj = require("jj.cmd") require("jj").setup({ -- 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 = {}, }, -- Customize syntax highlighting colors for the describe buffer highlights = { editor = { added = { fg = "#3fb950", ctermfg = "Green" }, -- Added files modified = { fg = "#56d4dd", ctermfg = "Cyan" }, -- Modified files deleted = { fg = "#f85149", ctermfg = "Red" }, -- Deleted files renamed = { fg = "#d29922", ctermfg = "Yellow" }, -- Renamed files }, log = { selected = { bg = "#3d2c52", ctermbg = "DarkMagenta" }, targeted = { fg = "#5a9e6f", ctermfg = "Green" }, }, }, -- Configure terminal behavior terminal = { -- Cursor render delay in milliseconds (default: 10) -- If cursor column is being reset to 0 when refreshing commands, try increasing this value -- This delay allows the terminal emulator to complete rendering before restoring cursor position cursor_render_delay = 10, }, -- Configure diff module diff = { -- Default backend for viewing diffs -- "native" - Built-in split diff using Neovim's diff mode (default) -- "diffview" - Use diffview.nvim plugin (requires diffview.nvim) -- "codediff" - Use codediff.nvim plugin (requires codediff.nvim) -- Or any custom backend name you've registered backend = "diffview", }, -- Configure cmd module (describe editor, keymaps) cmd = { -- Configure describe editor describe = { editor = { -- Choose the editor mode for describe command -- "buffer" - Opens a Git-style commit message buffer with syntax highlighting (default) -- "input" - Uses a simple vim.ui.input prompt type = "buffer", -- Customize keymaps for the describe editor buffer keymaps = { close = { "", "", "q" }, -- Keys to close editor without saving }, }, }, -- Configure log command behavior log = { close_on_edit = false, -- Close log buffer after editing a change }, -- Configure split command split = { width = 0.99, -- Width ratio of the floating terminal (0.1 to 1.0) height = 0.95, -- Height ratio of the floating terminal (0.1 to 1.0) }, -- Configure bookmark command bookmark = { prefix = "", }, -- Configure keymaps for command buffers keymaps = { -- Log buffer keymaps (set to nil to disable) log = { checkout = "", -- Edit revision under cursor checkout_immutable = "", -- Edit revision (ignore immutability) describe = "d", -- Describe revision under cursor diff = "", -- Diff revision under cursor edit = "e", -- Edit revision under cursor new = "n", -- Create new change branching off new_after = "", -- Create new change after revision new_after_immutable = "", -- Create new change after (ignore immutability) undo = "", -- Undo last operation redo = "", -- Redo last undone operation abandon = "a", -- Abandon revision under cursor bookmark = "b", -- Create or move bookmark to revision under cursor fetch = "f", -- Fetch from remote push = "p", -- Push bookmark of revision under cursor push_all = "", -- Push all changes to remote open_pr = "o", -- Open PR/MR for revision under cursor open_pr_list = "", -- Open PR/MR by selecting from all bookmarks rebase = "r", -- Enter rebase mode targeting revision under cursor or selected revisions rebase_mode = { onto = { "", "o" }, -- Select revision under cursor as rebase onto destination after = { "a", "A" }, -- Rebase after revision under cursor before = { "b", "B" }, -- Rebase before revision under cursor onto_immutable = { "", "" }, -- Select revision as a rebase onto destination (ignore immutability) after_immutable = "", -- Rebase after revision under cursor (ignore immutability) before_immutable = "", -- Rebase before revision under cursor (ignore immutability) exit_mode = { "", "" }, -- Exit rebase mode }, squash = "s", -- Enter squash mode targeting revision under cursor or selected revisions squash_mode = { into = "", -- Squash into revision under cursor into_immutable = "", -- Squash into revision under cursor (ignore immutability) exit_mode = { "", "" }, -- Exit squash mode }, quick_squash = "", -- Quick squash revision under cursor into its parent (ignore immutability) split = "", -- Split the revision under cursor tag_create = "", -- Create a tag on the revision under cursor summary = "", -- Show summary tooltip for revision under cursor summary_tooltip = { diff = "", -- Diff file at this revision edit = "", -- Edit revision and open file edit_immutable = "", -- Edit revision (ignore immutability) and open file }, }, -- Status buffer keymaps (set to nil to disable) status = { open_file = "", -- Open file under cursor restore_file = "", -- Restore file under cursor }, -- Close keymaps (shared across all buffers) close = { "q", "" }, }, }, }) vim.keymap.set("n", "jl", jj.log, { desc = "JJ log" }) vim.keymap.set("n", "jl", jj.log, { desc = "JJ log" }) vim.keymap.set("n", "jd", jj.describe, { desc = "JJ describe" }) vim.keymap.set("n", "je", jj.edit, { desc = "JJ edit" }) vim.keymap.set("n", "jn", jj.new, { desc = "JJ new" }) vim.keymap.set("n", "js", jj.status, { desc = "JJ status" }) vim.keymap.set("n", "dj", jj.diff, { desc = "JJ diff" }) vim.keymap.set("n", "sj", jj.squash, { desc = "JJ squash" }) -- Pickers local picker = require("jj.picker") vim.keymap.set("n", "gj", picker.status, { desc = "JJ Picker status" }) vim.keymap.set("n", "gl", picker.file_history, { desc = "JJ Picker file history" }) -- Some functions like `describe` or `log` can take parameters vim.keymap.set("n", "jL", function() jj.log({ revisions = "'all()'", }) end, { desc = "JJ log all" }) -- tug is an alias to move a bookmark vim.keymap.set("n", "jt", function() local cmd = require("jj.cmd") cmd.j("tug") cmd.log({}) end, { desc = "JJ tug" }) end, }