mirror of
https://github.com/nix-community/nixvim.git
synced 2025-06-26 10:48:35 +02:00
We used to only think of it as the plugin repo's name, but we have been needing to use it for the name of the plugin's packpath location.
128 lines
4.3 KiB
Nix
128 lines
4.3 KiB
Nix
{
|
|
lib,
|
|
...
|
|
}:
|
|
let
|
|
inherit (lib.nixvim) defaultNullOpts;
|
|
inherit (lib) types;
|
|
in
|
|
lib.nixvim.neovim-plugin.mkNeovimPlugin {
|
|
name = "nvim-surround";
|
|
packPathName = "nvim-surround";
|
|
package = "nvim-surround";
|
|
|
|
maintainers = with lib.maintainers; [
|
|
khaneliman
|
|
AndresBermeoMarinelli
|
|
];
|
|
|
|
settingsOptions = {
|
|
keymaps = defaultNullOpts.mkAttrsOf types.str ''
|
|
{
|
|
insert = "<C-g>s";
|
|
insert_line = "<C-g>S";
|
|
normal = "ys";
|
|
normal_cur = "yss";
|
|
normal_line = "yS";
|
|
normal_cur_line = "ySS";
|
|
visual = "S";
|
|
visual_line = "gS";
|
|
delete = "ds";
|
|
change = "cs";
|
|
change_line = "cS";
|
|
}
|
|
'' "Defines the keymaps used to perform surround actions.";
|
|
|
|
aliases = defaultNullOpts.mkAttrsOf (with types; either str (listOf str)) ''
|
|
{
|
|
"a" = ">";
|
|
"b" = ")";
|
|
"B" = "}";
|
|
"r" = "]";
|
|
"q" = [ "\"" "'" "`" ];
|
|
"s" = [ "}" "]" ")" ">" "\"" "'" "`" ];
|
|
}
|
|
'' "Maps characters to other characters, or lists of characters.";
|
|
|
|
surrounds =
|
|
let
|
|
surroundType = types.submodule {
|
|
options = {
|
|
add = lib.mkOption {
|
|
type = with types; either strLuaFn (listOf str);
|
|
description = ''
|
|
A function that returns the delimiter pair to be added to the buffer.
|
|
For "static" delimiter pairs it can be a list of strings representing the value
|
|
of the delimiter pair.
|
|
'';
|
|
example = [
|
|
"( "
|
|
" )"
|
|
];
|
|
};
|
|
find = lib.mkOption {
|
|
type = with types; maybeRaw str;
|
|
description = ''
|
|
A function that returns the "parent selection" for a surrounding pair.
|
|
It can also be string which is interpreted as a Lua pattern that represents the
|
|
selection.
|
|
'';
|
|
example.__raw = ''
|
|
function()
|
|
return M.get_selection({ motion = "a(" })
|
|
end
|
|
'';
|
|
};
|
|
delete = lib.mkOption {
|
|
type = with types; maybeRaw str;
|
|
description = ''
|
|
A function that returns the pair of selections to remove from the buffer when
|
|
deleting the surrounding pair.
|
|
It can also be string which is interpreted as a Lua pattern whose match groups
|
|
represent the left/right delimiter pair.
|
|
'';
|
|
example = "^(. ?)().-( ?.)()$";
|
|
};
|
|
|
|
change = lib.nixvim.mkNullOrOption (types.submodule {
|
|
options = {
|
|
target = lib.mkOption {
|
|
type = with types; maybeRaw str;
|
|
description = ''
|
|
A function that returns the pair of selections to be replaced in the buffer
|
|
when changing the surrounding pair.
|
|
It can also be a string which is interpreted as a Lua pattern whose match
|
|
groups represent the left/right delimiter pair.
|
|
'';
|
|
example = "^<([^>]*)().-([^%/]*)()>$";
|
|
};
|
|
replacement = lib.mkOption {
|
|
type = types.rawLua;
|
|
description = ''
|
|
A function that returns the surrounding pair to replace the target
|
|
selections.
|
|
'';
|
|
example.__raw = ''
|
|
function()
|
|
local result = M.get_input("Enter the function name: ")
|
|
if result then
|
|
return { { result }, { "" } }
|
|
end
|
|
end
|
|
'';
|
|
};
|
|
};
|
|
}) "An attribute set with two keys: `target` and `replacement`.";
|
|
};
|
|
};
|
|
in
|
|
lib.nixvim.mkNullOrOption' {
|
|
type = with types; attrsOf (maybeRaw surroundType);
|
|
description = ''
|
|
Associates each key with a "surround". The attribute set contains
|
|
the 'add', 'find', 'delete', and 'change' keys.
|
|
'';
|
|
pluginDefault = lib.literalMD "See [upstream default configuration](https://github.com/kylechui/nvim-surround/blob/main/lua/nvim-surround/config.lua)";
|
|
};
|
|
};
|
|
}
|