-- fugitive keybinds vim.keymap.set("n", "gA", "Git add -A", { desc = "Git add all" }) vim.keymap.set("n", "gc", "Git commit", { desc = "Git commit" }) vim.keymap.set("n", "gC", "Git commit --amend", { desc = "Git commit amend" }) vim.keymap.set("n", "gp", "Git! push", { desc = "Git push" }) vim.keymap.set("n", "gP", "Git! push --force-with-lease --force-if-includes", { desc = "Git push force" }) vim.keymap.set("n", "gb", "Git blame", { desc = "Git fugitive status" }) vim.keymap.set("n", "gg", vim.cmd.Git, { desc = "Git fugitive status" }) vim.api.nvim_create_autocmd("FileType", { desc = "Fix fold method", group = vim.api.nvim_create_augroup("git-fold-method", { clear = true }), callback = function(evt) -- this seems to trigger a bit late & we need to :e to make it work. idk why if evt.match == "git" then vim.wo.foldmethod = "syntax" else vim.wo.foldmethod = "expr" end end, }) return { { "gitsigns.nvim", event = { "BufReadPost", "BufWritePost", "BufNewFile" }, opts = { signs = { add = { text = "▕" }, change = { text = "▕" }, changedelete = { text = "▕" }, untracked = { text = "▕" }, }, signs_staged = { add = { text = "▕" }, change = { text = "▕" }, changedelete = { text = "▕" }, untracked = { text = "▕" }, }, on_attach = function(buffer) local gs = require("gitsigns") local function map(mode, l, r, desc) vim.keymap.set(mode, l, r, { buffer = buffer, desc = desc }) end map('n', ']h', function() gs.nav_hunk("next", { target = "all" }) end, "Next Hunk") map('n', '[h', function() gs.nav_hunk("prev", { target = "all" }) end, "Prev Hunk") map({ "n", "v" }, "ha", gs.stage_hunk, "Add Hunk") map({ "n", "v" }, "hr", gs.reset_hunk, "Reset Hunk") map("n", "hp", gs.preview_hunk, "Preview Hunk") map("n", "ga", gs.stage_buffer, "Add buffer") map("n", "gR", gs.reset_buffer, "Reset Buffer") map({ "o", "x" }, "ih", gs.select_hunk, "Git Select Hunk") map({ "o", "x" }, "ah", gs.select_hunk, "Git Select Hunk") end, }, after = function(plug) require("gitsigns").setup(plug.opts) end, }, { "unclash.nvim", -- load on enter to detect + highlight conflicts opts = {}, after = function(plug) require("unclash").setup(plug.opts) local unclash = require("unclash") vim.keymap.set("n", "]x", unclash.next_conflict, { desc = "Next Conflict" }) vim.keymap.set("n", "[x", unclash.prev_conflict, { desc = "Prev Conflict" }) vim.keymap.set("n", "co", unclash.open_merge_editor, { desc = "Open Merge Editor" }) vim.keymap.set("n", "c<", unclash.accept_current, { desc = "Accept Current" }) vim.keymap.set("n", "c>", unclash.accept_incoming, { desc = "Accept Incoming" }) vim.keymap.set("n", "c=", unclash.accept_both, { desc = "Accept Both" }) vim.keymap.set("n", "x", "UnclashQf", { desc = "Add conflicts in qf" }) end }, { "jj", event = "DeferredUIEnter", opts = {}, after = function(plug) require("jj").setup(plug.opt) local cmd = require("jj.cmd") vim.keymap.set("n", "jd", cmd.describe, { desc = "JJ describe" }) vim.keymap.set("n", "jc", cmd.commit, { desc = "JJ commit" }) vim.keymap.set("n", "jjl", cmd.log, { desc = "jj log " }) vim.keymap.set("n", "jL", function() cmd.log({ revisions = "'all()'" }) end, { desc = "jj log all" }) vim.keymap.set("n", "je", cmd.edit, { desc = "JJ edit" }) vim.keymap.set("n", "jn", cmd.new, { desc = "JJ new" }) vim.keymap.set("n", "jq", cmd.squash, { desc = "JJ squash" }) vim.keymap.set("n", "ju", cmd.undo, { desc = "JJ undo" }) vim.keymap.set("n", "jy", cmd.redo, { desc = "JJ redo" }) vim.keymap.set("n", "jr", cmd.rebase, { desc = "JJ rebase" }) vim.keymap.set("n", "jbc", cmd.bookmark_create, { desc = "JJ bookmark create" }) vim.keymap.set("n", "jbd", cmd.bookmark_delete, { desc = "JJ bookmark delete" }) vim.keymap.set("n", "jbm", cmd.bookmark_move, { desc = "JJ bookmark move" }) vim.keymap.set("n", "ja", cmd.abandon, { desc = "JJ abandon" }) vim.keymap.set("n", "jf", cmd.fetch, { desc = "JJ fetch" }) vim.keymap.set("n", "jp", cmd.push, { desc = "JJ push" }) vim.keymap.set("n", "jpr", cmd.open_pr, { desc = "JJ PR" }) vim.keymap.set("n", "jpl", function() cmd.open_pr({ list_bookmarks = true }) end, { desc = "JJ PR list" }) vim.keymap.set("n", "jt", function() cmd.j("tug") end, { desc = "JJ tug" }) end }, }