]> Git — Sourcephile - julm/julm-nix.git/blob - home-manager/profiles/nvim/lua/plugins/NicolasGB-jj.lua
use/op(nvim)(jj)(eagle): fix config
[julm/julm-nix.git] / home-manager / profiles / nvim / lua / plugins / NicolasGB-jj.lua
1 -- This plugin aims to be something like vim-fugitive but for driving the jj-vcs CLI.
2 -- https://github.com/NicolasGB/jj.nvim
3 return {
4 "jj.nvim",
5 cmd = { "J" },
6 enabled = true,
7 after = function()
8 local jj = require("jj.cmd")
9
10 require("jj").setup({
11 -- Setup snacks as a picker
12 picker = {
13 -- Here you can pass the options as you would for snacks.
14 -- It will be used when using the picker
15 snacks = {},
16 },
17
18 -- Customize syntax highlighting colors for the describe buffer
19 highlights = {
20 editor = {
21 added = { fg = "#3fb950", ctermfg = "Green" }, -- Added files
22 modified = { fg = "#56d4dd", ctermfg = "Cyan" }, -- Modified files
23 deleted = { fg = "#f85149", ctermfg = "Red" }, -- Deleted files
24 renamed = { fg = "#d29922", ctermfg = "Yellow" }, -- Renamed files
25 },
26 log = {
27 selected = { bg = "#3d2c52", ctermbg = "DarkMagenta" },
28 targeted = { fg = "#5a9e6f", ctermfg = "Green" },
29 },
30 },
31
32 -- Configure terminal behavior
33 terminal = {
34 -- Cursor render delay in milliseconds (default: 10)
35 -- If cursor column is being reset to 0 when refreshing commands, try increasing this value
36 -- This delay allows the terminal emulator to complete rendering before restoring cursor position
37 cursor_render_delay = 10,
38 },
39
40 -- Configure diff module
41 diff = {
42 -- Default backend for viewing diffs
43 -- "native" - Built-in split diff using Neovim's diff mode (default)
44 -- "diffview" - Use diffview.nvim plugin (requires diffview.nvim)
45 -- "codediff" - Use codediff.nvim plugin (requires codediff.nvim)
46 -- Or any custom backend name you've registered
47 backend = "diffview",
48 },
49
50 -- Configure cmd module (describe editor, keymaps)
51 cmd = {
52 -- Configure describe editor
53 describe = {
54 editor = {
55 -- Choose the editor mode for describe command
56 -- "buffer" - Opens a Git-style commit message buffer with syntax highlighting (default)
57 -- "input" - Uses a simple vim.ui.input prompt
58 type = "buffer",
59 -- Customize keymaps for the describe editor buffer
60 keymaps = {
61 close = { "<Esc>", "<C-c>", "q" }, -- Keys to close editor without saving
62 },
63 },
64 },
65
66 -- Configure log command behavior
67 log = {
68 close_on_edit = false, -- Close log buffer after editing a change
69 },
70
71 -- Configure split command
72 split = {
73 width = 0.99, -- Width ratio of the floating terminal (0.1 to 1.0)
74 height = 0.95, -- Height ratio of the floating terminal (0.1 to 1.0)
75 },
76
77 -- Configure bookmark command
78 bookmark = {
79 prefix = "",
80 },
81
82 -- Configure keymaps for command buffers
83 keymaps = {
84 -- Log buffer keymaps (set to nil to disable)
85 log = {
86 checkout = "<CR>", -- Edit revision under cursor
87 checkout_immutable = "<S-CR>", -- Edit revision (ignore immutability)
88 describe = "d", -- Describe revision under cursor
89 diff = "<S-d>", -- Diff revision under cursor
90 edit = "e", -- Edit revision under cursor
91 new = "n", -- Create new change branching off
92 new_after = "<C-n>", -- Create new change after revision
93 new_after_immutable = "<S-n>", -- Create new change after (ignore immutability)
94 undo = "<S-u>", -- Undo last operation
95 redo = "<S-r>", -- Redo last undone operation
96 abandon = "a", -- Abandon revision under cursor
97 bookmark = "b", -- Create or move bookmark to revision under cursor
98 fetch = "f", -- Fetch from remote
99 push = "p", -- Push bookmark of revision under cursor
100 push_all = "<S-p>", -- Push all changes to remote
101 open_pr = "o", -- Open PR/MR for revision under cursor
102 open_pr_list = "<S-o>", -- Open PR/MR by selecting from all bookmarks
103 rebase = "r", -- Enter rebase mode targeting revision under cursor or selected revisions
104 rebase_mode = {
105 onto = { "<CR>", "o" }, -- Select revision under cursor as rebase onto destination
106 after = { "a", "A" }, -- Rebase after revision under cursor
107 before = { "b", "B" }, -- Rebase before revision under cursor
108 onto_immutable = { "<S-CR>", "<S-o>" }, -- Select revision as a rebase onto destination (ignore immutability)
109 after_immutable = "<S-a>", -- Rebase after revision under cursor (ignore immutability)
110 before_immutable = "<S-b>", -- Rebase before revision under cursor (ignore immutability)
111 exit_mode = { "<Esc>", "<C-c>" }, -- Exit rebase mode
112 },
113 squash = "s", -- Enter squash mode targeting revision under cursor or selected revisions
114 squash_mode = {
115 into = "<CR>", -- Squash into revision under cursor
116 into_immutable = "<S-CR>", -- Squash into revision under cursor (ignore immutability)
117 exit_mode = { "<Esc>", "<C-c>" }, -- Exit squash mode
118 },
119 quick_squash = "<S-s>", -- Quick squash revision under cursor into its parent (ignore immutability)
120 split = "<C-s>", -- Split the revision under cursor
121 tag_create = "<S-t>", -- Create a tag on the revision under cursor
122 summary = "<S-k>", -- Show summary tooltip for revision under cursor
123 summary_tooltip = {
124 diff = "<S-d>", -- Diff file at this revision
125 edit = "<CR>", -- Edit revision and open file
126 edit_immutable = "<S-CR>", -- Edit revision (ignore immutability) and open file
127 },
128 },
129 -- Status buffer keymaps (set to nil to disable)
130 status = {
131 open_file = "<CR>", -- Open file under cursor
132 restore_file = "<S-x>", -- Restore file under cursor
133 },
134 -- Close keymaps (shared across all buffers)
135 close = { "q", "<Esc>" },
136 },
137 },
138 })
139
140 vim.keymap.set("n", "<leader>jl", jj.log, { desc = "JJ log" })
141 vim.keymap.set("n", "<leader>jl", jj.log, { desc = "JJ log" })
142 vim.keymap.set("n", "<leader>jd", jj.describe, { desc = "JJ describe" })
143 vim.keymap.set("n", "<leader>je", jj.edit, { desc = "JJ edit" })
144 vim.keymap.set("n", "<leader>jn", jj.new, { desc = "JJ new" })
145 vim.keymap.set("n", "<leader>js", jj.status, { desc = "JJ status" })
146 vim.keymap.set("n", "<leader>dj", jj.diff, { desc = "JJ diff" })
147 vim.keymap.set("n", "<leader>sj", jj.squash, { desc = "JJ squash" })
148
149 -- Pickers
150 local picker = require("jj.picker")
151 vim.keymap.set("n", "<leader>gj", picker.status, { desc = "JJ Picker status" })
152 vim.keymap.set("n", "<leader>gl", picker.file_history, { desc = "JJ Picker file history" })
153
154 -- Some functions like `describe` or `log` can take parameters
155 vim.keymap.set("n", "<leader>jL", function()
156 jj.log({
157 revisions = "'all()'",
158 })
159 end, { desc = "JJ log all" })
160
161 -- tug is an alias to move a bookmark
162 vim.keymap.set("n", "<leader>jt", function()
163 local cmd = require("jj.cmd")
164 cmd.j("tug")
165 cmd.log({})
166 end, { desc = "JJ tug" })
167 end,
168 }