diff --git a/docs/release-notes/rl-0.7.md b/docs/release-notes/rl-0.7.md index 2ec691b..bb9f3d3 100644 --- a/docs/release-notes/rl-0.7.md +++ b/docs/release-notes/rl-0.7.md @@ -150,6 +150,8 @@ everyone. - Replace `vim.lsp.nvimCodeActionMenu` with `vim.ui.fastaction`, see the breaking changes section above for more details +- Add a `setupOpts` option to nvim-surround, which allows modifying options that aren't defined in nvf. Move the alternate nvim-surround keybinds to use `setupOpts`. + [Neovim documentation on `vim.cmd`]: https://neovim.io/doc/user/lua.html#vim.cmd() - Make Neovim's configuration file entirely Lua based. This comes with a few diff --git a/modules/plugins/utility/surround/config.nix b/modules/plugins/utility/surround/config.nix index 824b8c9..4c98c86 100644 --- a/modules/plugins/utility/surround/config.nix +++ b/modules/plugins/utility/surround/config.nix @@ -3,42 +3,29 @@ lib, ... }: let - inherit (lib.modules) mkIf mkMerge; - inherit (lib.nvim.binds) addDescriptionsToMappings mkSetBinding; + inherit (lib.modules) mkIf; inherit (lib.nvim.dag) entryAnywhere; + inherit (lib.nvim.lua) toLuaObject; cfg = config.vim.utility.surround; - self = import ./surround.nix {inherit lib config;}; - mappingDefinitions = self.options.vim.utility.surround.mappings; - mappings = addDescriptionsToMappings cfg.mappings mappingDefinitions; in { config = mkIf cfg.enable { vim = { - startPlugins = [ - "nvim-surround" - ]; + startPlugins = ["nvim-surround"]; + pluginRC.surround = entryAnywhere "require('nvim-surround').setup(${toLuaObject cfg.setupOpts})"; - pluginRC.surround = entryAnywhere '' - require('nvim-surround').setup() - ''; - - maps = { - insert = mkMerge [ - (mkIf (mappings.insert != null) (mkSetBinding mappings.insert "(nvim-surround-insert)")) - (mkIf (mappings.insertLine != null) (mkSetBinding mappings.insertLine "(nvim-surround-insert-line)")) - ]; - normal = mkMerge [ - (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 [ - (mkIf (mappings.visual != null) (mkSetBinding mappings.visual "(nvim-surround-visual)")) - (mkIf (mappings.visualLine != null) (mkSetBinding mappings.visualLine "(nvim-surround-visual-line)")) - ]; + utility.surround.setupOpts.keymaps = mkIf cfg.useVendoredKeybindings { + insert = "z"; + insert_line = "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"; }; }; }; diff --git a/modules/plugins/utility/surround/surround.nix b/modules/plugins/utility/surround/surround.nix index 8024c9b..7d00638 100644 --- a/modules/plugins/utility/surround/surround.nix +++ b/modules/plugins/utility/surround/surround.nix @@ -1,90 +1,24 @@ -{ - lib, - config, - ... -}: let - inherit (lib.modules) mkIf mkDefault; +{lib, ...}: let inherit (lib.options) mkOption; - inherit (lib.types) bool nullOr str; + inherit (lib.types) bool; + inherit (lib.nvim.types) mkPluginSetupOption; 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."; + 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. + ''; }; + setupOpts = mkPluginSetupOption "nvim-surround" {}; + 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 = "z"; - description = "Add surround character around the cursor"; - }; - insertLine = mkOption { - type = nullOr str; - default = "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; - }); }; }