mirror of
https://github.com/NotAShelf/neovim-flake.git
synced 2024-11-15 07:45:59 +01:00
90 lines
2.5 KiB
Nix
90 lines
2.5 KiB
Nix
{
|
|
lib,
|
|
config,
|
|
...
|
|
}: let
|
|
inherit (lib.modules) mkIf mkDefault;
|
|
inherit (lib.options) mkOption;
|
|
inherit (lib.types) bool nullOr str;
|
|
in {
|
|
options.vim.utility.surround = {
|
|
enable = mkOption {
|
|
type = bool;
|
|
default = false;
|
|
description = "nvim-surround: add/change/delete surrounding delimiter pairs with ease. Note that the default mappings deviate from upstreeam to avoid conflicts with nvim-leap.";
|
|
};
|
|
useVendoredKeybindings = mkOption {
|
|
type = bool;
|
|
default = true;
|
|
description = "Use alternative set of keybindings that avoids conflicts with other popular plugins, e.g. nvim-leap";
|
|
};
|
|
mappings = {
|
|
insert = mkOption {
|
|
type = nullOr str;
|
|
default = "<C-g>z";
|
|
description = "Add surround character around the cursor";
|
|
};
|
|
insertLine = mkOption {
|
|
type = nullOr str;
|
|
default = "<C-g>Z";
|
|
description = "Add surround character around the cursor on new lines";
|
|
};
|
|
normal = mkOption {
|
|
type = nullOr str;
|
|
default = "gz";
|
|
description = "Surround motion with character";
|
|
};
|
|
normalCur = mkOption {
|
|
type = nullOr str;
|
|
default = "gZ";
|
|
description = "Surround motion with character on new lines";
|
|
};
|
|
normalLine = mkOption {
|
|
type = nullOr str;
|
|
default = "gzz";
|
|
description = "Surround line with character";
|
|
};
|
|
normalCurLine = mkOption {
|
|
type = nullOr str;
|
|
default = "gZZ";
|
|
description = "Surround line with character on new lines";
|
|
};
|
|
visual = mkOption {
|
|
type = nullOr str;
|
|
default = "gz";
|
|
description = "Surround selection with character";
|
|
};
|
|
visualLine = mkOption {
|
|
type = nullOr str;
|
|
default = "gZ";
|
|
description = "Surround selection with character on new lines";
|
|
};
|
|
delete = mkOption {
|
|
type = nullOr str;
|
|
default = "gzd";
|
|
description = "Delete surrounding character";
|
|
};
|
|
change = mkOption {
|
|
type = nullOr str;
|
|
default = "gzr";
|
|
description = "Change surrounding character";
|
|
};
|
|
};
|
|
};
|
|
config.vim.utility.surround = let
|
|
cfg = config.vim.utility.surround;
|
|
in {
|
|
mappings = mkIf (! cfg.useVendoredKeybindings) (mkDefault {
|
|
insert = null;
|
|
insertLine = null;
|
|
normal = null;
|
|
normalCur = null;
|
|
normalLine = null;
|
|
normalCurLine = null;
|
|
visual = null;
|
|
visualLine = null;
|
|
delete = null;
|
|
change = null;
|
|
});
|
|
};
|
|
}
|