From 188e0483fc946b4166d552a97a95510b9e127bd6 Mon Sep 17 00:00:00 2001
From: Mora Unie Youer <mora_unie_youer@riseup.net>
Date: Sat, 29 Mar 2025 16:10:19 +0300
Subject: feat: add `mini-diff`

---
 flake.nix                    |  2 +-
 lua/config/plugins/extra.lua |  1 +
 lua/config/plugins/mini.lua  | 35 ++++++++++++++++++++++++++++-------
 3 files changed, 30 insertions(+), 8 deletions(-)

diff --git a/flake.nix b/flake.nix
index fd85727..2ddc528 100644
--- a/flake.nix
+++ b/flake.nix
@@ -145,7 +145,7 @@
           # NOTE: On NeoVim 0.11+ nvim-lspconfig is not required due to native API
           lsp = [];
 
-          mini = [ mini-ai mini-align mini-move mini-pairs mini-surround ];
+          mini = [ mini-ai mini-align mini-diff mini-move mini-pairs mini-surround ];
 
           ui = [
             noice-nvim
diff --git a/lua/config/plugins/extra.lua b/lua/config/plugins/extra.lua
index df8b0a3..5f137ef 100644
--- a/lua/config/plugins/extra.lua
+++ b/lua/config/plugins/extra.lua
@@ -6,6 +6,7 @@ return {
       require("which-key").setup()
 
       require("which-key").add({
+        { "<leader>h", group = "hunk" },
         { "<leader>s", group = "search" },
         { "<leader>S", group = "surround" },
       })
diff --git a/lua/config/plugins/mini.lua b/lua/config/plugins/mini.lua
index a2e9b1d..e842fa3 100644
--- a/lua/config/plugins/mini.lua
+++ b/lua/config/plugins/mini.lua
@@ -13,6 +13,27 @@ return {
       require("mini.align").setup()
     end,
   },
+  {
+    "mini.diff",
+    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" },
+    },
+    after = function (_)
+      require("mini.diff").setup({
+        mappings = {
+          apply = "<leader>ha",
+          reset = "<leader>hr",
+          textobject = "<leader>ha",
+          goto_first = "[H",
+          goto_prev = "[h",
+          goto_next = "]h",
+          goto_last = "]H",
+        },
+      })
+    end
+  },
   {
     "mini.move",
     event = "DeferredUIEnter",
@@ -33,13 +54,13 @@ return {
     after = function(_)
       require("mini.surround").setup({
         mappings = {
-          add = '<leader>Sa',
-          delete = '<leader>Sd',
-          find = '<leader>Sf',
-          find_left = '<leader>SF',
-          highlight = '<leader>Sh',
-          replace = '<leader>Sr',
-          update_n_lines = '<leader>Sn',
+          add = "<leader>Sa",
+          delete = "<leader>Sd",
+          find = "<leader>Sf",
+          find_left = "<leader>SF",
+          highlight = "<leader>Sh",
+          replace = "<leader>Sr",
+          update_n_lines = "<leader>Sn",
         },
       })
     end,
-- 
cgit v1.2.3-70-g09d2