return { { "AstroNvim/astrocore", opts = function(_, opts) local maps = opts.mappings maps.n = maps.n or {} maps.x = maps.x or {} -- Keep g focused on repo UI, while hunk actions stay buffer-local in gitsigns. maps.n["g"] = { desc = "Git" } maps.n["gg"] = false maps.n["gb"] = false maps.n["gc"] = false maps.n["gC"] = false maps.n["gt"] = false maps.n["gT"] = false maps.n["go"] = false maps.x["go"] = false maps.n["gn"] = false maps.n["gnt"] = false maps.n["gnc"] = false maps.n["gnd"] = false maps.n["gnk"] = false maps.n["gnf"] = false maps.n["gnh"] = false maps.n["gnv"] = false end, }, { "NeogitOrg/neogit", keys = { { "gg", "Neogit", desc = "Git status" }, { "gb", "Neogit branch", desc = "Git branches" }, { "gc", "Neogit commit", desc = "Git commit" }, { "gs", "Neogit stash", desc = "Git stash" }, }, opts = function(_, opts) opts.integrations = opts.integrations or {} opts.integrations.diffview = true return opts end, }, { "sindrets/diffview.nvim", cmd = { "DiffviewOpen", "DiffviewClose", "DiffviewFileHistory" }, keys = { { "gd", "DiffviewOpen", desc = "Git diff" }, { "gD", "DiffviewClose", desc = "Git diff close" }, { "gh", "DiffviewFileHistory %", desc = "Git history (file)" }, { "gH", "DiffviewFileHistory", desc = "Git history (repo)" }, }, }, { "lewis6991/gitsigns.nvim", opts = function(_, opts) -- Gitsigns owns only in-buffer hunk work, so its maps stay local and minimal. opts.on_attach = function(bufnr) local gitsigns = require "gitsigns" local map = function(lhs, rhs, desc) vim.keymap.set("n", lhs, rhs, { buffer = bufnr, desc = desc }) end map("gl", gitsigns.blame_line, "View Git blame") map("gp", gitsigns.preview_hunk, "Preview Git hunk") map("]h", function() gitsigns.nav_hunk "next" end, "Next Git hunk") map("[h", function() gitsigns.nav_hunk "prev" end, "Previous Git hunk") end return opts end, }, }