Files
nvim/lua/plugins/git.lua
2026-01-26 23:38:15 +01:00

90 lines
3.3 KiB
Lua

-- Git workflow enhancements: diffview, git-blame, and Octo keymaps
return {
-- Diffview: Side-by-side diffs and file history
{
"sindrets/diffview.nvim",
cmd = { "DiffviewOpen", "DiffviewClose", "DiffviewFileHistory", "DiffviewToggleFiles" },
keys = {
{ "<leader>gG", "<cmd>DiffviewOpen<cr>", desc = "Diffview: Open" },
{ "<leader>gD", "<cmd>DiffviewClose<cr>", desc = "Diffview: Close" },
{ "<leader>gf", "<cmd>DiffviewFileHistory %<cr>", desc = "Diffview: File History" },
{ "<leader>gF", "<cmd>DiffviewFileHistory<cr>", desc = "Diffview: Branch History" },
{ "<leader>gm", "<cmd>DiffviewOpen origin/main...HEAD<cr>", desc = "Diffview: Compare to main" },
{ "<leader>gM", "<cmd>DiffviewOpen origin/master...HEAD<cr>", desc = "Diffview: Compare to master" },
},
opts = {
enhanced_diff_hl = true,
view = {
default = {
layout = "diff2_horizontal",
},
merge_tool = {
layout = "diff3_mixed",
},
file_history = {
layout = "diff2_horizontal",
},
},
file_panel = {
win_config = {
position = "left",
width = 35,
},
},
},
},
-- Git blame: Inline blame annotations
{
"f-person/git-blame.nvim",
event = "BufRead",
opts = {
enabled = false, -- Disabled by default, toggle with <leader>gB
date_format = "%r", -- relative time
message_when_not_committed = "Not committed yet",
virtual_text_column = 80,
},
keys = {
{ "<leader>gB", "<cmd>GitBlameToggle<cr>", desc = "Toggle Git Blame" },
{ "<leader>go", "<cmd>GitBlameOpenCommitURL<cr>", desc = "Open Commit in Browser" },
{ "<leader>gy", "<cmd>GitBlameCopyCommitURL<cr>", desc = "Copy Commit URL" },
},
},
-- Octo.nvim keymaps (plugin already installed via lazyvim.plugins.extras.util.octo)
{
"pwntester/octo.nvim",
keys = {
-- PR operations
{ "<leader>gpl", "<cmd>Octo pr list<cr>", desc = "List PRs" },
{ "<leader>gpc", "<cmd>Octo pr create<cr>", desc = "Create PR" },
{ "<leader>gpo", "<cmd>Octo pr checkout<cr>", desc = "Checkout PR" },
{ "<leader>gpb", "<cmd>Octo pr browser<cr>", desc = "Open PR in Browser" },
{ "<leader>gpr", "<cmd>Octo pr ready<cr>", desc = "Mark PR Ready" },
{ "<leader>gpd", "<cmd>Octo pr diff<cr>", desc = "Show PR Diff" },
{ "<leader>gpm", "<cmd>Octo pr merge<cr>", desc = "Merge PR" },
-- Issue operations
{ "<leader>gil", "<cmd>Octo issue list<cr>", desc = "List Issues" },
{ "<leader>gic", "<cmd>Octo issue create<cr>", desc = "Create Issue" },
{ "<leader>gib", "<cmd>Octo issue browser<cr>", desc = "Open Issue in Browser" },
-- Review operations
{ "<leader>grs", "<cmd>Octo review start<cr>", desc = "Start Review" },
{ "<leader>grr", "<cmd>Octo review resume<cr>", desc = "Resume Review" },
{ "<leader>grc", "<cmd>Octo review submit<cr>", desc = "Submit Review" },
{ "<leader>grd", "<cmd>Octo review discard<cr>", desc = "Discard Review" },
},
},
-- Which-key group labels for git
{
"folke/which-key.nvim",
opts = {
spec = {
{ "<leader>gp", group = "pull requests" },
{ "<leader>gi", group = "issues" },
{ "<leader>gr", group = "review" },
},
},
},
}