Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
129 changes: 129 additions & 0 deletions plugins/by-name/nvim-surround/default.nix
Original file line number Diff line number Diff line change
@@ -0,0 +1,129 @@
{
lib,
...
}:
let
inherit (lib.nixvim) defaultNullOpts;
inherit (lib) types;
in
lib.nixvim.neovim-plugin.mkNeovimPlugin {
name = "nvim-surround";
originalName = "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.
'';
apply = v: if lib.isString v then lib.nixvim.mkRaw v else v;
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)";
};
};
}
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@
...
}:
helpers.vim-plugin.mkVimPlugin {
name = "surround";
name = "vim-surround";
originalName = "surround.vim";
package = "vim-surround";

Expand Down
32 changes: 25 additions & 7 deletions plugins/deprecation.nix
Original file line number Diff line number Diff line change
Expand Up @@ -10,13 +10,31 @@ let
- `:PreviewQuery` to open the Query Editor (Nvim 0.10+)
'';
};
renamed = {
# Added 2024-09-17
surround = "vim-surround";
};
in
{
imports = lib.mapAttrsToList (
name:
lib.mkRemovedOptionModule [
"plugins"
name
]
) removed;

imports =
(lib.mapAttrsToList (
name:
lib.mkRemovedOptionModule [
"plugins"
name
]
) removed)
++ (lib.mapAttrsToList (
old: new:
lib.mkRenamedOptionModule
[
"plugins"
old
]
[
"plugins"
new
]
) renamed);
}
Loading