diff --git a/modules/notes/todo-comments/config.nix b/modules/notes/todo-comments/config.nix index 8db653fb..1fa5dde2 100644 --- a/modules/notes/todo-comments/config.nix +++ b/modules/notes/todo-comments/config.nix @@ -4,11 +4,11 @@ lib, ... }: let - inherit (lib.modules) mkIf mkMerge; - inherit (lib.nvim.binds) mkBinding; + inherit (lib) mkMerge mkBinding mkIf; + inherit (lib.nvim.lua) toLuaObject; cfg = config.vim.notes.todo-comments; - self = import ./todo-comments.nix {inherit lib;}; + self = import ./todo-comments.nix {inherit pkgs lib;}; inherit (self.options.vim.notes.todo-comments) mappings; in { config = mkIf cfg.enable { @@ -24,28 +24,7 @@ in { ]; luaConfigRC.todo-comments = '' - require('todo-comments').setup { - highlight = { - before = "", -- "fg" or "bg" or empty - keyword = "bg", -- "fg", "bg", "wide" or empty - after = "fg", -- "fg" or "bg" or empty - pattern = ${cfg.patterns.highlight}, - comments_only = true, -- uses treesitter to match keywords in comments only - max_line_len = 400, -- ignore lines longer than this - exclude = {}, -- list of file types to exclude highlighting - }, - search = { - command = "${pkgs.ripgrep}/bin/rg", - args = { - "--color=never", - "--no-heading", - "--with-filename", - "--line-number", - "--column", - }, - pattern = ${cfg.patterns.search}, - }, - } + require('todo-comments').setup(${toLuaObject cfg.setupOpts}) ''; }; }; diff --git a/modules/notes/todo-comments/todo-comments.nix b/modules/notes/todo-comments/todo-comments.nix index ca4e4be1..f92af7af 100644 --- a/modules/notes/todo-comments/todo-comments.nix +++ b/modules/notes/todo-comments/todo-comments.nix @@ -1,22 +1,50 @@ -{lib, ...}: let - inherit (lib.options) mkOption mkEnableOption; - inherit (lib.types) str; - inherit (lib.nvim.binds) mkMappingOption; +{ + pkgs, + lib, + ... +}: let + inherit (lib) mkEnableOption mkOption types mkMappingOption mkRenamedOptionModule; in { + imports = let + renamedSetupOption = oldPath: newPath: + mkRenamedOptionModule + (["vim" "notes" "todo-comments"] ++ oldPath) + (["vim" "notes" "todo-comments" "setupOpts"] ++ newPath); + in [ + (renamedSetupOption ["patterns" "highlight"] ["highlight" "pattern"]) + (renamedSetupOption ["patterns" "search"] ["search" "pattern"]) + ]; + options.vim.notes.todo-comments = { enable = mkEnableOption "todo-comments: highlight and search for todo comments like TODO, HACK, BUG in your code base"; - patterns = { - highlight = mkOption { - type = str; - default = ''[[.*<(KEYWORDS)(\([^\)]*\))?:]]''; - description = "vim regex pattern used for highlighting comments"; + setupOpts = lib.nvim.types.mkPluginSetupOption "todo-comments.nvim" { + highlight = { + pattern = mkOption { + type = types.str; + default = ''.*<(KEYWORDS)(\([^\)]*\))?:''; + description = "vim regex pattern used for highlighting comments"; + }; }; - search = mkOption { - type = str; - default = ''[[\b(KEYWORDS)(\([^\)]*\))?:]]''; - description = "ripgrep regex pattern used for searching comments"; + search = { + pattern = mkOption { + type = types.str; + default = ''\b(KEYWORDS)(\([^\)]*\))?:''; + description = "ripgrep regex pattern used for searching comments"; + }; + + command = mkOption { + type = types.str; + default = "${pkgs.ripgrep}/bin/rg"; + description = "search command"; + }; + + args = mkOption { + type = types.listOf types.str; + default = ["--color=never" "--no-heading" "--with-filename" "--line-number" "--column"]; + description = "arguments to pass to the search command"; + }; }; };