]> Git — Sourcephile - julm/julm-nix.git/blob - home-manager/profiles/nvim/lua/plugins/NicolasGB-jj.lua
maint/remove(vim-ghcid-quickfix): prefer HLS
[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", "Jdiff", "Jvdiff", "Jhdiff" },
6 enabled = false,
7 after = function()
8 require("jj").setup({ ["describe_editor"] = "input" })
9 local jj = require("jj.cmd")
10
11 require("jj").setup({
12 -- Setup snacks as a picker
13 picker = {
14 -- Here you can pass the options as you would for snacks.
15 -- It will be used when using the picker
16 snacks = {},
17 },
18
19 -- Customize syntax highlighting colors for the describe buffer
20 highlights = {
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
27 -- Configure terminal behavior
28 terminal = {
29 -- Cursor render delay in milliseconds (default: 10)
30 -- If cursor column is being reset to 0 when refreshing commands, try increasing this value
31 -- This delay allows the terminal emulator to complete rendering before restoring cursor position
32 cursor_render_delay = 10,
33 },
34
35 -- Configure cmd module (describe editor, keymaps)
36 cmd = {
37 -- Configure describe editor
38 describe = {
39 editor = {
40 -- Choose the editor mode for describe command
41 -- "buffer" - Opens a Git-style commit message buffer with syntax highlighting (default)
42 -- "input" - Uses a simple vim.ui.input prompt
43 type = "buffer",
44 -- Customize keymaps for the describe editor buffer
45 keymaps = {
46 close = { "<Esc>", "<C-c>", "q" }, -- Keys to close editor without saving
47 },
48 },
49 },
50
51 -- Configure log command behavior
52 log = {
53 close_on_edit = false, -- Close log buffer after editing a change
54 },
55
56 -- Configure keymaps for command buffers
57 keymaps = {
58 -- Log buffer keymaps (set to nil to disable)
59 log = {
60 checkout = "<CR>", -- Edit revision under cursor
61 checkout_immutable = "<S-CR>", -- Edit revision (ignore immutability)
62 describe = "d", -- Describe revision under cursor
63 diff = "<S-d>", -- Diff revision under cursor
64 edit = "e", -- Edit revision under cursor
65 new = "n", -- Create new change branching off
66 new_after = "<C-n>", -- Create new change after revision
67 new_after_immutable = "<S-n>", -- Create new change after (ignore immutability)
68 undo = "<S-u>", -- Undo last operation
69 redo = "<S-r>", -- Redo last undone operation
70 abandon = "a", -- Abandon revision under cursor
71 bookmark = "b", -- Create or move bookmark to revision under cursor
72 fetch = "f", -- Fetch from remote
73 push = "p", -- Push bookmark of revision under cursor
74 push_all = "<S-p>", -- Push all changes to remote
75 open_pr = "o", -- Open PR/MR for revision under cursor
76 open_pr_list = "<S-o>", -- Open PR/MR by selecting from all bookmarks
77 },
78 -- Status buffer keymaps (set to nil to disable)
79 status = {
80 open_file = "<CR>", -- Open file under cursor
81 restore_file = "<S-x>", -- Restore file under cursor
82 },
83 -- Close keymaps (shared across all buffers)
84 close = { "q", "<Esc>" },
85 },
86 },
87 })
88
89 vim.keymap.set("n", "<leader>jl", jj.log, { desc = "JJ log" })
90 vim.keymap.set("n", "<leader>jl", jj.log, { desc = "JJ log" })
91 vim.keymap.set("n", "<leader>jd", jj.describe, { desc = "JJ describe" })
92 vim.keymap.set("n", "<leader>je", jj.edit, { desc = "JJ edit" })
93 vim.keymap.set("n", "<leader>jn", jj.new, { desc = "JJ new" })
94 vim.keymap.set("n", "<leader>js", jj.status, { desc = "JJ status" })
95 vim.keymap.set("n", "<leader>dj", jj.diff, { desc = "JJ diff" })
96 vim.keymap.set("n", "<leader>sj", jj.squash, { desc = "JJ squash" })
97
98 -- Pickers
99 local picker = require("jj.picker")
100 vim.keymap.set("n", "<leader>gj", picker.status, { desc = "JJ Picker status" })
101 vim.keymap.set("n", "<leader>gl", picker.file_history, { desc = "JJ Picker file history" })
102
103 -- Some functions like `describe` or `log` can take parameters
104 vim.keymap.set("n", "<leader>jL", function()
105 jj.log({
106 revisions = "'all()'",
107 })
108 end, { desc = "JJ log all" })
109
110 -- tug is an alias to move a bookmark
111 vim.keymap.set("n", "<leader>jt", function()
112 local cmd = require("jj.cmd")
113 cmd.j("tug")
114 cmd.log({})
115 end, { desc = "JJ tug" })
116 end,
117 }