diff --git a/extra.nix b/extra.nix index 26a96ef1..2875a1c9 100644 --- a/extra.nix +++ b/extra.nix @@ -147,6 +147,7 @@ inputs: let obsidian.enable = false; # FIXME neovim fails to build if obsidian is enabled orgmode.enable = false; mind-nvim.enable = true; + todo-comments.enable = true; }; vim.terminal = { diff --git a/lib/types-plugin.nix b/lib/types-plugin.nix index aa060f4d..edbaff11 100644 --- a/lib/types-plugin.nix +++ b/lib/types-plugin.nix @@ -71,6 +71,7 @@ with lib; let "mind-nvim" "fidget-nvim" "diffview-nvim" + "todo-comments" ]; # You can either use the name of the plugin or a package. pluginsType = with types; listOf (nullOr (either (enum availablePlugins) package)); diff --git a/modules/notes/default.nix b/modules/notes/default.nix index b8c2059e..eaf247fc 100644 --- a/modules/notes/default.nix +++ b/modules/notes/default.nix @@ -3,5 +3,6 @@ _: { ./obsidian ./orgmode ./mind-nvim + ./todo-comments ]; } diff --git a/modules/notes/todo-comments/config.nix b/modules/notes/todo-comments/config.nix new file mode 100644 index 00000000..c04aa8dc --- /dev/null +++ b/modules/notes/todo-comments/config.nix @@ -0,0 +1,47 @@ +{ + pkgs, + config, + lib, + ... +}: +with lib; +with builtins; let + cfg = config.vim.notes.todo-comments; +in { + config = mkIf (cfg.enable) { + vim.startPlugins = [ + "todo-comments" + ]; + + vim.nnoremap = { + "tdq" = ":TodoQuickFix"; + "tds" = ":TodoTelescope"; + "tdt" = ":TodoTrouble"; + }; + + vim.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}, + }, + } + ''; + }; +} diff --git a/modules/notes/todo-comments/default.nix b/modules/notes/todo-comments/default.nix new file mode 100644 index 00000000..ac730fe6 --- /dev/null +++ b/modules/notes/todo-comments/default.nix @@ -0,0 +1,6 @@ +_: { + imports = [ + ./todo-comments.nix + ./config.nix + ]; +} diff --git a/modules/notes/todo-comments/todo-comments.nix b/modules/notes/todo-comments/todo-comments.nix new file mode 100644 index 00000000..ec445eb4 --- /dev/null +++ b/modules/notes/todo-comments/todo-comments.nix @@ -0,0 +1,28 @@ +{ + pkgs, + config, + lib, + ... +}: +with lib; +with builtins; let + cfg = config.vim.notes.todo-comments; +in { + options.vim.notes.todo-comments = { + enable = mkEnableOption "todo-comments"; + + patterns = { + highlight = mkOption { + type = types.str; + default = ''[[.*<(KEYWORDS)(\([^\)]*\))?:]]''; + description = "vim regex pattern used for highlighting comments"; + }; + + search = mkOption { + type = types.str; + default = ''[[\b(KEYWORDS)(\([^\)]*\))?:]]''; + description = "ripgrep regex pattern used for searching comments"; + }; + }; + }; +}