diff --git a/nvim/lua/plugins/git.lua b/nvim/lua/plugins/git.lua new file mode 100644 index 0000000..a4cf0cc --- /dev/null +++ b/nvim/lua/plugins/git.lua @@ -0,0 +1,62 @@ +return { + { + "gitsigns.nvim", + lazy = false, + load = function() end, + 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", gs.next_hunk, "Next Hunk") + map("n", "[h", gs.prev_hunk, "Prev Hunk") + map({ "n", "v" }, "ga", ":Gitsigns stage_hunk", "Add Hunk") + map({ "n", "v" }, "gr", ":Gitsigns reset_hunk", "Reset Hunk") + map("n", "gu", gs.undo_stage_hunk, "Unstage Hunk") + map("n", "gA", gs.stage_buffer, "Add buffer") + map("n", "gR", gs.reset_buffer, "Reset Buffer") + map("n", "gp", gs.preview_hunk, "Preview Hunk") + map({ "o", "x" }, "ih", ":Gitsigns select_hunk", "Git Select Hunk") + map({ "o", "x" }, "ah", ":Gitsigns select_hunk", "Git Select Hunk") + end, + }, + after = function(plug) + require("gitsigns").setup(plug.opts) + end, + }, + + { + "git-conflict.nvim", + lazy = false, + load = function() end, + keys = { + { "gxo", "(git-conflict-ours)", desc = "Accept ours" }, + { "gxt", "(git-conflict-theirs)", desc = "Accept theirs" }, + { "gxb", "(git-conflict-both)", desc = "Accept both" }, + { "gx0", "(git-conflict-none)", desc = "Accept none" }, + { "[x", "(git-conflict-prev-conflict)", desc = "Previous conflict" }, + { "]x", "(git-conflict-next-conflict)", desc = "Next conflict" }, + }, + opts = { + default_mappings = false, + }, + after = function(plug) + require("git-conflict").setup(plug.opts) + end + }, +}