mirror of
https://github.com/NotAShelf/nvf.git
synced 2026-04-09 20:16:11 +00:00
Mostly involves filtering keybinds that are null in cases where the keybind is the attrname, and optionalString for manual lua keybind registration.
74 lines
2.1 KiB
Nix
74 lines
2.1 KiB
Nix
{
|
|
lib,
|
|
config,
|
|
...
|
|
}: let
|
|
inherit (lib.options) literalExpression mkOption;
|
|
inherit (lib.types) bool str;
|
|
inherit (lib.nvim.types) mkPluginSetupOption;
|
|
|
|
cfg = config.vim.utility.surround;
|
|
vendoredKeybinds = {
|
|
insert = "<C-g>z";
|
|
insert_line = "<C-g>Z";
|
|
normal = "gz";
|
|
normal_cur = "gZ";
|
|
normal_line = "gzz";
|
|
normal_cur_line = "gZZ";
|
|
visual = "gz";
|
|
visual_line = "gZ";
|
|
delete = "gzd";
|
|
change = "gzr";
|
|
change_line = "gZR";
|
|
};
|
|
|
|
mkKeymapOption = name: default:
|
|
mkOption {
|
|
description = "keymap for ${name}";
|
|
type = str;
|
|
default =
|
|
if cfg.useVendoredKeybindings
|
|
then vendoredKeybinds.${name}
|
|
else default;
|
|
};
|
|
in {
|
|
options.vim.utility.surround = {
|
|
enable = mkOption {
|
|
type = bool;
|
|
default = false;
|
|
description = ''
|
|
Whether to enable nvim-surround, Neovim plugin to add/change/delete
|
|
surrounding delimiter pairs with ease.
|
|
|
|
::: {.note}
|
|
The default mappings deviate from upstream to avoid conflicts with nvim-leap.
|
|
You may change those in your configuration if you do not use nvim-leap
|
|
:::
|
|
'';
|
|
};
|
|
setupOpts = mkPluginSetupOption "nvim-surround" {
|
|
keymaps = {
|
|
insert = mkKeymapOption "insert" "<C-g>s";
|
|
insert_line = mkKeymapOption "insert_line" "<C-g>S";
|
|
normal = mkKeymapOption "normal" "ys";
|
|
normal_cur = mkKeymapOption "normal_cur" "yss";
|
|
normal_line = mkKeymapOption "normal_line" "yS";
|
|
normal_cur_line = mkKeymapOption "normal_cur_line" "ySS";
|
|
visual = mkKeymapOption "visual" "S";
|
|
visual_line = mkKeymapOption "visual_line" "gS";
|
|
delete = mkKeymapOption "delete" "ds";
|
|
change = mkKeymapOption "change" "cs";
|
|
change_line = mkKeymapOption "change_line" "cS";
|
|
};
|
|
};
|
|
|
|
useVendoredKeybindings = mkOption {
|
|
type = bool;
|
|
default = config.vim.vendoredKeymaps;
|
|
defaultText = literalExpression "config.vim.vendoredKeymaps";
|
|
description = ''
|
|
Use alternative set of keybindings that avoids conflicts with other popular plugins, e.g. nvim-leap
|
|
'';
|
|
};
|
|
};
|
|
}
|