From e781c4f540b04f047691242cdb2e2e7a5720c823 Mon Sep 17 00:00:00 2001 From: Builditluc <37375448+Builditluc@users.noreply.github.com> Date: Tue, 23 Nov 2021 19:01:10 +0100 Subject: [PATCH] comment-nvim: add comment-nvim plugin --- plugins/default.nix | 1 + plugins/utils/comment-nvim.nix | 106 +++++++++++++++++++++++++++++++++ 2 files changed, 107 insertions(+) create mode 100644 plugins/utils/comment-nvim.nix diff --git a/plugins/default.nix b/plugins/default.nix index aef71746..6d7aab31 100644 --- a/plugins/default.nix +++ b/plugins/default.nix @@ -19,6 +19,7 @@ ./utils/undotree.nix ./utils/commentary.nix + ./utils/comment-nvim.nix ./utils/startify.nix ./utils/goyo.nix ./utils/endwise.nix diff --git a/plugins/utils/comment-nvim.nix b/plugins/utils/comment-nvim.nix new file mode 100644 index 00000000..60ce9619 --- /dev/null +++ b/plugins/utils/comment-nvim.nix @@ -0,0 +1,106 @@ +{ config, pkgs, lib, ... }: +with lib; +let + cfg = config.programs.nixvim.plugins.comment-nvim; + helpers = import ../helpers.nix { inherit lib; }; +in +{ + options = { + programs.nixvim.plugins.comment-nvim = { + enable = mkEnableOption "Enable comment-nvim"; + padding = mkOption { + type = types.bool; + description = "Add a space b/w comment and the line"; + default = true; + }; + sticky = mkOption { + type = types.bool; + description = "Whether the cursor should stay at its position"; + default = true; + }; + ignore = mkOption { + type = types.nullOr types.str; + description = "Lines to be ignored while comment/uncomment"; + default = null; + }; + toggler = mkOption { + type = types.submodule { + options = { + line = mkOption { + type = types.str; + description = "line-comment keymap"; + default = "gcc"; + }; + block = mkOption { + type = types.str; + description = "block-comment keymap"; + default = "gbc"; + }; + }; + }; + description = "LHS of toggle mappings in NORMAL + VISUAL mode"; + default = {}; + }; + opleader = mkOption { + type = types.submodule { + options = { + line = mkOption { + type = types.str; + description = "line-comment keymap"; + default = "gc"; + }; + block = mkOption { + type = types.str; + description = "block-comment keymap"; + default = "gb"; + }; + }; + }; + description = "LHS of operator-pending mappings in NORMAL + VISUAL mode"; + default = {}; + }; + mappings = mkOption { + type = types.submodule { + options = { + basic = mkOption { + type = types.bool; + description = "operator-pending mapping. Includes 'gcc', 'gcb', 'gc[count]{motion}' + and 'gb[count]{motion}'"; + default = true; + }; + extra = mkOption { + type = types.bool; + description = "extra mapping. Includes 'gco', 'gc0', 'gcA'"; + default = true; + }; + extended = mkOption { + type = types.bool; + description = "extended mapping. Includes 'g>', 'g<', 'g>[count]{motion}' and + 'g<[count]{motion}'"; + default = false; + }; + }; + }; + description = "Create basic (operator-pending) and extended mappings for NORMAL + VISUAL mode"; + default = {}; + }; + }; + }; + + config = let + setupOptions = { + padding = cfg.padding; + sticky = cfg.sticky; + ignore = cfg.ignore; + toggler = cfg.toggler; + opleader = cfg.opleader; + mappings = cfg.mappings; + }; + in mkIf cfg.enable { + programs.nixvim = { + extraPlugins = [ pkgs.vimPlugins.comment-nvim ]; + extraConfigLua = + ''require("Comment").setup${helpers.toLuaObject setupOptions}''; + }; + }; +}