diff options
Diffstat (limited to '.config/nvim/lua/plugins/git.lua')
| -rw-r--r-- | .config/nvim/lua/plugins/git.lua | 92 |
1 files changed, 92 insertions, 0 deletions
diff --git a/.config/nvim/lua/plugins/git.lua b/.config/nvim/lua/plugins/git.lua new file mode 100644 index 0000000..d94893d --- /dev/null +++ b/.config/nvim/lua/plugins/git.lua @@ -0,0 +1,92 @@ +return { + { + "sindrets/diffview.nvim", + cmd = { + "DiffviewLog", + "DiffviewOpen", + "DiffviewClose", + "DiffviewRefresh", + "DiffviewFocusFiles", + "DiffviewFileHistory", + "DiffviewToggleFiles", + }, + }, + { + "NeogitOrg/neogit", + dependencies = { + "nvim-lua/plenary.nvim", + "sindrets/diffview.nvim", + }, + cmd = "Neogit", + opts = { + integrations = { + diffview = true, + }, + }, + }, + { + "lewis6991/gitsigns.nvim", + dependencies = { "folke/which-key.nvim" }, + event = { "BufReadPre", "BufNewFile" }, + opts = { + on_attach = function(bufnr) + local gs = require("gitsigns") + local wk = require("which-key") + + wk.register({ + ["]c"] = { + function() + if vim.wo.diff then return "]c" end + vim.schedule(gs.next_hunk) + return "<Ignore>" + end, + "Next hunk", + }, + ["[c"] = { + function() + if vim.wo.diff then return "[c" end + vim.schedule(gs.prev_hunk) + return "<Ignore>" + end, + "Previous hunk", + }, + }, {expr=true}) + + wk.register({ + ["<leader>h"] = { + name = "+Gitsigns", + s = { gs.stage_hunk, "Stage hunk" }, + r = { gs.reset_hunk, "Reset hunk" }, + S = { gs.stage_buffer, "Stage buffer" }, + u = { gs.undo_stage_hunk, "Undo stage hunk" }, + R = { gs.reset_buffer, "Reset buffer" }, + p = { gs.preview_hunk, "Preview hunk" }, + b = { function() gs.blame_line({full=true}) end, "Blame line" }, + B = { gs.toggle_current_line_blame, "Toggle current line blame" }, + d = { gs.diffthis, "Diff current buffer" }, + D = { function() gs.diffthis("~") end, "TODO" }, + x = { gs.toggle_deleted, "Toggle deleted" }, + }, + }) + + wk.register({ + ["<leader>h"] = { + name = "+Gitsigns", + s = { + function() gs.stage_hunk({vim.fn.line("."), vim.fn.line("v")}) end, + "Stage selected lines", + }, + r = { + function() gs.reset_hunk({vim.fn.line("."), vim.fn.line("v")}) end, + "Reset selected lines", + }, + }, + }, {mode="v"}) + + wk.register({ + ["ih"] = { ":<C-U>Gitsigns select_hunk<CR>", "Select hunk" }, + }, {mode={ "o", "x" }}) + end, + }, + }, +} |
