diff options
Diffstat (limited to '')
| -rw-r--r-- | flake.nix | 2 | ||||
| -rw-r--r-- | lua/config/plugins/git.lua | 50 | ||||
| -rw-r--r-- | lua/config/plugins/mini.lua | 11 | 
3 files changed, 58 insertions, 5 deletions
| @@ -147,6 +147,8 @@            mini = [ mini-ai mini-align mini-diff mini-move mini-pairs mini-surround ]; +          git = [ gitsigns-nvim ]; +            ui = [              noice-nvim              todo-comments-nvim diff --git a/lua/config/plugins/git.lua b/lua/config/plugins/git.lua new file mode 100644 index 0000000..027aa83 --- /dev/null +++ b/lua/config/plugins/git.lua @@ -0,0 +1,50 @@ +return { +  { +    -- NOTE: we could use mini.diff, but it doesn't show staged hunks +    "gitsigns.nvim", +    event = "DeferredUIEnter", +    after = function(_) +      local gs = require("gitsigns") + +      gs.setup({ +        on_attach = function(bufnr) + +          local function map(mode, l, r, desc, opts) +            opts = opts or {} +            opts.desc = desc +            opts.buffer = bufnr +            vim.keymap.set(mode, l, r, opts) +          end + +          map("n", "[h", function() +            if vim.wo.diff then +              vim.cmd.normal({"[c", bang = true}) +            else +              gs.nav_hunk("prev") +            end +          end, "Prev hunk") + +          map("n", "]h", function() +            if vim.wo.diff then +              vim.cmd.normal({"]c", bang = true}) +            else +              gs.nav_hunk("next") +            end +          end, "Next hunk") + +          map("n", "]H", function() gs.nav_hunk("first") end, "First hunk") +          map("n", "]H", function() gs.nav_hunk("last") end, "Last hunk") + +          map("n", "<leader>ghs", gs.stage_hunk, "Stage hunk") +          map("n", "<leader>ghr", gs.reset_hunk, "Reset hunk") +          map("n", "<leader>ghS", gs.stage_buffer, "Stage buffer") +          map("n", "<leader>ghR", gs.reset_buffer, "Reset buffer") +          map("n", "<leader>ghu", gs.undo_stage_hunk, "Undo stage hunk") + +          -- NOTE: if using <Cmd> here, we don't get full hunk in selection +          map({ "o", "x" }, "ih", ":<C-U>Gitsigns select_hunk<CR>", "Hunk") +        end +      }) +    end +  } +} diff --git a/lua/config/plugins/mini.lua b/lua/config/plugins/mini.lua index e842fa3..65e3f6e 100644 --- a/lua/config/plugins/mini.lua +++ b/lua/config/plugins/mini.lua @@ -15,17 +15,18 @@ return {    },    {      "mini.diff", +    enabled = false, -- NOTE: using gitsigns.nvim due to more features      event = "DeferredUIEnter",      keys = { -      { "<leader>ht", function() require("mini.diff").toggle() end, mode = { "n" }, desc = "Toggle hunk processing" }, -      { "<leader>ho", function() require("mini.diff").toggle_overlay() end, mode = { "n" }, desc = "Toggle hunk overlay" }, +      { "<leader>ght", function() require("mini.diff").toggle() end, mode = { "n" }, desc = "Toggle hunk processing" }, +      { "<leader>gho", function() require("mini.diff").toggle_overlay() end, mode = { "n" }, desc = "Toggle hunk overlay" },      },      after = function (_)        require("mini.diff").setup({          mappings = { -          apply = "<leader>ha", -          reset = "<leader>hr", -          textobject = "<leader>ha", +          apply = "<leader>ghs", +          reset = "<leader>ghr", +          textobject = "<leader>ghs",            goto_first = "[H",            goto_prev = "[h",            goto_next = "]h", | 
