From 59c23f28555e67e2c5dc083ef7fb8a282a34283a Mon Sep 17 00:00:00 2001 From: Kalle Jepsen Date: Mon, 16 Oct 2023 11:04:47 +0200 Subject: [PATCH] utility/surround: Add mappings for nvim-surround The default mappings for nvim-leap and nvim-surround conflict (i.e. nvim-surround uses `S` in visual mode). This change adds options to adapt the mappings for nvim-surround directly from the surround-module. --- modules/utility/surround/config.nix | 38 +++++++++++++++---- modules/utility/surround/surround.nix | 53 +++++++++++++++++++++++++++ 2 files changed, 84 insertions(+), 7 deletions(-) diff --git a/modules/utility/surround/config.nix b/modules/utility/surround/config.nix index bcd1f51..8a76c1f 100644 --- a/modules/utility/surround/config.nix +++ b/modules/utility/surround/config.nix @@ -6,14 +6,38 @@ with lib; with builtins; let cfg = config.vim.utility.surround; + self = import ./surround.nix {inherit lib;}; + mappingDefinitions = self.options.vim.utility.surround.mappings; + mappings = addDescriptionsToMappings cfg.mappings mappingDefinitions; in { - config = mkIf (cfg.enable) { - vim.startPlugins = [ - "nvim-surround" - ]; + config = mkIf cfg.enable { + vim = { + startPlugins = [ + "nvim-surround" + ]; - vim.luaConfigRC.surround = nvim.dag.entryAnywhere '' - require('nvim-surround').setup() - ''; + luaConfigRC.surround = nvim.dag.entryAnywhere '' + require('nvim-surround').setup() + ''; + + maps = { + insert = mkMerge [ + (mkSetBinding mappings.insert "(nvim-surround-insert)") + (mkSetBinding mappings.insertLine "(nvim-surround-insert-line)") + ]; + normal = mkMerge [ + (mkSetBinding mappings.normal "(nvim-surround-normal)") + (mkSetBinding mappings.normalCur "(nvim-surround-normal-cur)") + (mkSetBinding mappings.normalLine "(nvim-surround-normal-line)") + (mkSetBinding mappings.normalCurLine "(nvim-surround-normal-cur-line)") + (mkSetBinding mappings.delete "(nvim-surround-delete)") + (mkSetBinding mappings.change "(nvim-surround-change)") + ]; + visualOnly = mkMerge [ + (mkSetBinding mappings.visual "(nvim-surround-visual)") + (mkSetBinding mappings.visualLine "(nvim-surround-visual-line)") + ]; + }; + }; }; } diff --git a/modules/utility/surround/surround.nix b/modules/utility/surround/surround.nix index a29b19b..3d085e3 100644 --- a/modules/utility/surround/surround.nix +++ b/modules/utility/surround/surround.nix @@ -3,5 +3,58 @@ with lib; with builtins; { options.vim.utility.surround = { enable = mkEnableOption "nvim-surround: add/change/delete surrounding delimiter pairs with ease"; + mappings = { + insert = mkOption { + type = types.nullOr types.str; + default = "s"; + description = "Add surround character around the cursor"; + }; + insertLine = mkOption { + type = types.nullOr types.str; + default = "S"; + description = "Add surround character around the cursor on new lines"; + }; + normal = mkOption { + type = types.nullOr types.str; + default = "ys"; + description = "Surround motion with character"; + }; + normalCur = mkOption { + type = types.nullOr types.str; + default = "yss"; + description = "Surround motion with character on new lines"; + }; + normalLine = mkOption { + type = types.nullOr types.str; + default = "yS"; + description = "Surround line with character"; + }; + normalCurLine = mkOption { + type = types.nullOr types.str; + default = "ySS"; + description = "Surround line with character on new lines"; + }; + visual = mkOption { + type = types.nullOr types.str; + default = "S"; + description = "Surround selection with character"; + }; + visualLine = mkOption { + type = types.nullOr types.str; + default = "gS"; + description = "Surround selection with character on new lines"; + }; + delete = mkOption { + type = types.nullOr types.str; + default = "ds"; + description = "Delete surrounding character"; + }; + change = mkOption { + type = types.nullOr types.str; + default = "cs"; + description = "Change surrounding character"; + }; + + }; }; }