From 7eefcfa5eebf2daaad100b05b7356e4ebe77e212 Mon Sep 17 00:00:00 2001 From: garaiza-93 <57430880+garaiza-93@users.noreply.github.com> Date: Sat, 3 Feb 2024 05:33:10 -0600 Subject: [PATCH] plugins/autoclose: init + tests (#994) --- plugins/default.nix | 9 +-- plugins/utils/autoclose.nix | 72 +++++++++++++++++++ .../plugins/utils/autoclose-nvim.nix | 71 ++++++++++++++++++ 3 files changed, 148 insertions(+), 4 deletions(-) create mode 100644 plugins/utils/autoclose.nix create mode 100644 tests/test-sources/plugins/utils/autoclose-nvim.nix diff --git a/plugins/default.nix b/plugins/default.nix index d7996f9a..1cad2154 100644 --- a/plugins/default.nix +++ b/plugins/default.nix @@ -108,6 +108,7 @@ ./utils/alpha.nix ./utils/auto-save.nix ./utils/auto-session.nix + ./utils/autoclose.nix ./utils/better-escape.nix ./utils/clipboard-image.nix ./utils/comment-nvim.nix @@ -138,11 +139,11 @@ ./utils/molten.nix ./utils/multicursors.nix ./utils/navbuddy.nix - ./utils/neorg.nix ./utils/neogen.nix - ./utils/notify.nix + ./utils/neorg.nix ./utils/netman.nix ./utils/nix-develop.nix + ./utils/notify.nix ./utils/nvim-autopairs.nix ./utils/nvim-bqf.nix ./utils/nvim-colorizer.nix @@ -152,11 +153,11 @@ ./utils/oil.nix ./utils/ollama.nix ./utils/persistence.nix + ./utils/presence-nvim.nix ./utils/project-nvim.nix + ./utils/quickmath.nix ./utils/refactoring.nix ./utils/rest.nix - ./utils/presence-nvim.nix - ./utils/quickmath.nix ./utils/specs.nix ./utils/spider.nix ./utils/startify.nix diff --git a/plugins/utils/autoclose.nix b/plugins/utils/autoclose.nix new file mode 100644 index 00000000..35622c15 --- /dev/null +++ b/plugins/utils/autoclose.nix @@ -0,0 +1,72 @@ +{ + lib, + helpers, + config, + pkgs, + ... +}: +with lib; let + cfg = config.plugins.autoclose; +in { + options.plugins.autoclose = { + enable = mkEnableOption "autoclose"; + package = helpers.mkPackageOption "autoclose" pkgs.vimPlugins.autoclose-nvim; + + keys = mkOption { + type = with types; nullOr (attrsOf anything); + default = null; + description = "Configures various options, such as shortcuts for pairs, what pair of characters to use in the shortcut, etc. See the plugin's [README](https://github.com/m4xshen/autoclose.nvim?tab=readme-ov-file#-configuration) for more info."; + example = '' + keys = { + "(" = { escape = false, close = true, pair = "()" }, + "[" = { escape = false, close = true, pair = "[]" }, + "{" = { escape = false, close = true, pair = "{}" }, + }; + ''; + }; + + options = { + disabledFiletypes = helpers.defaultNullOpts.mkListOf types.str ''["text"]'' '' + The plugin will be disabled under the filetypes in this table. + ''; + + disableWhenTouch = + helpers.defaultNullOpts.mkBool false + "Set this to true will disable the auto-close function when the cursor touches character that matches touch_regex."; + + touchRegex = + helpers.defaultNullOpts.mkStr "[%w(%[{]" + "See [README](https://github.com/m4xshen/autoclose.nvim?tab=readme-ov-file#options)"; + + pairSpaces = + helpers.defaultNullOpts.mkBool false + "Pair the spaces when cursor is inside a pair of keys. See [README](https://github.com/m4xshen/autoclose.nvim?tab=readme-ov-file#options)"; + + autoIndent = + helpers.defaultNullOpts.mkBool true "Enable auto-indent feature"; + + disableCommandMode = + helpers.defaultNullOpts.mkBool false + "Disable autoclose for command mode globally"; + }; + }; + + config = with cfg; let + options' = { + inherit keys; + options = with options; { + disabled_filetypes = disabledFiletypes; + disable_when_touch = disableWhenTouch; + touch_regex = touchRegex; + pair_spaces = pairSpaces; + auto_indent = autoIndent; + disable_command_mode = disableCommandMode; + }; + }; + in { + extraPlugins = [cfg.package]; + extraConfigLua = '' + require('autoclose').setup(${helpers.toLuaObject options'}) + ''; + }; +} diff --git a/tests/test-sources/plugins/utils/autoclose-nvim.nix b/tests/test-sources/plugins/utils/autoclose-nvim.nix new file mode 100644 index 00000000..effd2d0b --- /dev/null +++ b/tests/test-sources/plugins/utils/autoclose-nvim.nix @@ -0,0 +1,71 @@ +{ + empty = {plugins.autoclose.enable = true;}; + + defaults = { + plugins.autoclose.enable = true; + plugins.autoclose = { + keys = { + "(" = { + escape = false; + close = true; + pair = "()"; + }; + "[" = { + escape = false; + close = true; + pair = "[]"; + }; + "{" = { + escape = false; + close = true; + pair = "{}"; + }; + + ">" = { + escape = true; + close = false; + pair = "<>"; + }; + ")" = { + escape = true; + close = false; + pair = "()"; + }; + "]" = { + escape = true; + close = false; + pair = "[]"; + }; + "}" = { + escape = true; + close = false; + pair = "{}"; + }; + "\"" = { + escape = true; + close = true; + pair = ''""''; + }; + "'" = { + escape = true; + close = true; + pair = "''"; + }; + "`" = { + escape = true; + close = true; + pair = "``"; + }; + }; + + options = { + disabledFiletypes = ["text"]; + disableWhenTouch = false; + touchRegex = "[%w(%[{]"; + pairSpaces = false; + autoIndent = true; + disableCommandMode = false; + }; + }; + }; +}