summaryrefslogtreecommitdiff
path: root/.config/nvim/lua/plugins/git.lua
diff options
context:
space:
mode:
authorSam Nystrom <sam@samnystrom.dev>2023-07-05 21:26:02 -0400
committerSam Nystrom <sam@samnystrom.dev>2023-07-05 21:26:02 -0400
commite5c8f244466ff4da4b12c1bbfd2292a8408ff1d2 (patch)
tree978e99f5e9fdb7877a15ebe54eaa6d06dee71a92 /.config/nvim/lua/plugins/git.lua
parent22f001c91a158c1bc576a74ecae5a33402f83ab8 (diff)
Add Neovim config
Diffstat (limited to '.config/nvim/lua/plugins/git.lua')
-rw-r--r--.config/nvim/lua/plugins/git.lua92
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,
+ },
+ },
+}