diff --git a/modules/utility/surround/config.nix b/modules/utility/surround/config.nix index 8a76c1f..aa7f7bd 100644 --- a/modules/utility/surround/config.nix +++ b/modules/utility/surround/config.nix @@ -6,7 +6,7 @@ with lib; with builtins; let cfg = config.vim.utility.surround; - self = import ./surround.nix {inherit lib;}; + self = import ./surround.nix {inherit lib config;}; mappingDefinitions = self.options.vim.utility.surround.mappings; mappings = addDescriptionsToMappings cfg.mappings mappingDefinitions; in { @@ -22,20 +22,20 @@ in { maps = { insert = mkMerge [ - (mkSetBinding mappings.insert "(nvim-surround-insert)") - (mkSetBinding mappings.insertLine "(nvim-surround-insert-line)") + (mkIf (mappings.insert != null) (mkSetBinding mappings.insert "(nvim-surround-insert)")) + (mkIf (mappings.insertLine != null) (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)") + (mkIf (mappings.normal != null) (mkSetBinding mappings.normal "(nvim-surround-normal)")) + (mkIf (mappings.normalCur != null) (mkSetBinding mappings.normalCur "(nvim-surround-normal-cur)")) + (mkIf (mappings.normalLine != null) (mkSetBinding mappings.normalLine "(nvim-surround-normal-line)")) + (mkIf (mappings.normalCurLine != null) (mkSetBinding mappings.normalCurLine "(nvim-surround-normal-cur-line)")) + (mkIf (mappings.delete != null) (mkSetBinding mappings.delete "(nvim-surround-delete)")) + (mkIf (mappings.change != null) (mkSetBinding mappings.change "(nvim-surround-change)")) ]; visualOnly = mkMerge [ - (mkSetBinding mappings.visual "(nvim-surround-visual)") - (mkSetBinding mappings.visualLine "(nvim-surround-visual-line)") + (mkIf (mappings.visual != null) (mkSetBinding mappings.visual "(nvim-surround-visual)")) + (mkIf (mappings.visualLine != null) (mkSetBinding mappings.visualLine "(nvim-surround-visual-line)")) ]; }; }; diff --git a/modules/utility/surround/surround.nix b/modules/utility/surround/surround.nix index 409b75d..405e3f2 100644 --- a/modules/utility/surround/surround.nix +++ b/modules/utility/surround/surround.nix @@ -1,59 +1,88 @@ -{lib, ...}: +{ + lib, + config, + ... +}: with lib; with builtins; { options.vim.utility.surround = { - enable = mkEnableOption "nvim-surround: add/change/delete surrounding delimiter pairs with ease"; + enable = mkOption { + type = types.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 = types.bool; + default = true; + description = "Use alternative set of keybindings that avoids conflicts with other popular plugins, e.g. nvim-leap"; + }; mappings = { insert = mkOption { type = types.nullOr types.str; - default = "s"; + default = "z"; description = "Add surround character around the cursor"; }; insertLine = mkOption { type = types.nullOr types.str; - default = "S"; + default = "Z"; description = "Add surround character around the cursor on new lines"; }; normal = mkOption { type = types.nullOr types.str; - default = "ys"; + default = "gz"; description = "Surround motion with character"; }; normalCur = mkOption { type = types.nullOr types.str; - default = "yss"; + default = "gZ"; description = "Surround motion with character on new lines"; }; normalLine = mkOption { type = types.nullOr types.str; - default = "yS"; + default = "gzz"; description = "Surround line with character"; }; normalCurLine = mkOption { type = types.nullOr types.str; - default = "ySS"; + default = "gZZ"; description = "Surround line with character on new lines"; }; visual = mkOption { type = types.nullOr types.str; - default = "S"; + default = "gz"; description = "Surround selection with character"; }; visualLine = mkOption { type = types.nullOr types.str; - default = "gS"; + default = "gZ"; description = "Surround selection with character on new lines"; }; delete = mkOption { type = types.nullOr types.str; - default = "ds"; + default = "gzd"; description = "Delete surrounding character"; }; change = mkOption { type = types.nullOr types.str; - default = "cs"; + 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; + }); + }; }