diff options
feat: use `gitsigns.nvim` instead of `mini.diff`
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", |