-- 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" }) 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') end, "Next Hunk") map('n', '[h', function() gs.nav_hunk('prev') 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, }, { "git-conflict.nvim", -- load on enter to detect + highlight conflicts -- lazy loading make it not work, idk why -- event = { "BufReadPost", "BufWritePost", "BufNewFile" }, opts = { default_mappings = { ours = 'c<', theirs = 'c>', none = 'cd', both = 'c=', next = ']x', prev = '[x', }, }, after = function(plug) require("git-conflict").setup(plug.opts) end }, }