Files
neovim-dots/lua/plugins/git.lua

76 lines
2.4 KiB
Lua

return {
{
"AstroNvim/astrocore",
opts = function(_, opts)
local maps = opts.mappings
maps.n = maps.n or {}
maps.x = maps.x or {}
-- Keep <leader>g focused on repo UI, while hunk actions stay buffer-local in gitsigns.
maps.n["<Leader>g"] = { desc = "Git" }
maps.n["<Leader>gg"] = false
maps.n["<Leader>gb"] = false
maps.n["<Leader>gc"] = false
maps.n["<Leader>gC"] = false
maps.n["<Leader>gt"] = false
maps.n["<Leader>gT"] = false
maps.n["<Leader>go"] = false
maps.x["<Leader>go"] = false
maps.n["<Leader>gn"] = false
maps.n["<Leader>gnt"] = false
maps.n["<Leader>gnc"] = false
maps.n["<Leader>gnd"] = false
maps.n["<Leader>gnk"] = false
maps.n["<Leader>gnf"] = false
maps.n["<Leader>gnh"] = false
maps.n["<Leader>gnv"] = false
end,
},
{
"NeogitOrg/neogit",
keys = {
{ "<leader>gg", "<Cmd>Neogit<CR>", desc = "Git status" },
{ "<leader>gb", "<Cmd>Neogit branch<CR>", desc = "Git branches" },
{ "<leader>gc", "<Cmd>Neogit commit<CR>", desc = "Git commit" },
{ "<leader>gs", "<Cmd>Neogit stash<CR>", 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 = {
{ "<leader>gd", "<Cmd>DiffviewOpen<CR>", desc = "Git diff" },
{ "<leader>gD", "<Cmd>DiffviewClose<CR>", desc = "Git diff close" },
{ "<leader>gh", "<Cmd>DiffviewFileHistory %<CR>", desc = "Git history (file)" },
{ "<leader>gH", "<Cmd>DiffviewFileHistory<CR>", 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("<Leader>gl", gitsigns.blame_line, "View Git blame")
map("<Leader>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,
},
}