plugins/hunk: init

Add support for [hunk.nvim][1], a plugin for splitting diffs.

Also add myself as a maintainer for it.

[1]: https://github.com/julienvincent/hunk.nvim
This commit is contained in:
Jalil David Salamé Messina 2025-05-06 23:11:05 +02:00
parent b505a2aebd
commit 69266437be
No known key found for this signature in database
GPG key ID: F016B9E770737A0B
2 changed files with 144 additions and 0 deletions

View file

@ -0,0 +1,50 @@
{
lib,
helpers,
config,
...
}:
lib.nixvim.plugins.mkNeovimPlugin {
name = "hunk";
packPathName = "hunk.nvim";
package = "hunk-nvim";
description = ''
A tool for splitting diffs in Neovim.
If you wish to display icons in the file tree you should enable either
`plugins.web-devicons` or `plugins.mini`. If using `plugins.mini`, you
must enable the `icons` module.
'';
maintainers = [ lib.maintainers.jalil-salame ];
extraConfig.plugins.nui.enable = lib.mkDefault true; # required dependency
settingsExample = {
keys.global.quit = [ "x" ];
ui = {
tree = {
mode = "flat";
width = 40;
};
layout = "horizontal";
};
hooks = {
on_tree_mount =
lib.nixvim.nestedLiteralLua # lua
''
---@param _context { buf: number, tree: NuiTree, opts: table }
function(_context) end
'';
on_diff_mount =
lib.nixvim.nestedLiteralLua # lua
''
---@param _context { buf: number, win: number }
function(_context) end
'';
};
};
}

View file

@ -0,0 +1,94 @@
{
empty = {
plugins.hunk.enable = true;
};
with-web-devicons = {
plugins.hunk.enable = true;
plugins.web-devicons.enable = true;
};
with-mini = {
plugins.hunk.enable = true;
plugins.mini = {
enable = true;
modules.icons = { };
};
};
example.plugins.hunk = {
enable = true;
settings = {
keys.global.quit = [ "x" ];
ui = {
tree = {
mode = "flat";
width = 40;
};
layout = "horizontal";
};
hooks = {
on_tree_mount.__raw = "function(_context) end";
on_diff_mount.__raw = "function(_context) end";
};
};
};
# Taken directly from the plugin docs: https://github.com/julienvincent/hunk.nvim#configuration
defaults.plugins.hunk = {
enable = true;
settings = {
keys = {
global = {
quit = [ "q" ];
accept = [ "<leader><Cr>" ];
focus_tree = [ "<leader>e" ];
};
tree = {
expand_node = [
"l"
"<Right>"
];
collapse_node = [
"h"
"<Left>"
];
open_file = [ "<Cr>" ];
toggle_file = [ "a" ];
};
diff = {
toggle_line = [ "a" ];
toggle_hunk = [ "A" ];
};
};
ui = {
tree = {
mode = "nested";
width = 35;
};
layout = "vertical";
};
icons = {
selected = "󰡖";
deselected = "";
partially_selected = "󰛲";
folder_open = "";
folder_closed = "";
};
hooks = {
on_tree_mount.__raw = "function(_context) end";
on_diff_mount.__raw = "function(_context) end";
};
};
};
}