summaryrefslogtreecommitdiff
path: root/.config/nvim/lua/plugins/git.lua
blob: d94893d0054ac280a68ffc0e129026061780bcb2 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
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,
    },
  },
}