todo-comments: init plugin (#232)

This commit is contained in:
Shayan Rashid 2023-03-09 22:00:04 -05:00 committed by GitHub
parent 1a110b71d4
commit a16d862de4
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
2 changed files with 193 additions and 0 deletions

View file

@ -73,6 +73,7 @@
./utils/specs.nix
./utils/startify.nix
./utils/surround.nix
./utils/todo-comments.nix
./utils/undotree.nix
./utils/vim-matchup.nix
./utils/dashboard.nix

View file

@ -0,0 +1,192 @@
{
config,
pkgs,
lib,
...
}:
with lib; let
cfg = config.plugins.todo-comments;
helpers = import ../helpers.nix {inherit lib;};
in {
options = {
plugins.todo-comments =
helpers.extraOptionsOptions
// {
enable = mkEnableOption "Enable todo-comments.";
package =
helpers.mkPackageOption
"todo-comments"
pkgs.vimPlugins.todo-comments-nvim;
signs = helpers.defaultNullOpts.mkBool true ''
Show icons in the signs column.
'';
signPriority = helpers.defaultNullOpts.mkInt 8 "Sign priority.";
keywords = helpers.mkNullOrOption (types.nullOr types.attrs) ''
Configurations for keywords to be recognized as todo comments.
Default:
```
{
FIX = {
icon = " "; # Icon used for the sign, and in search results.
color = "error"; # Can be a hex color, or a named color.
alt = [ "FIXME" "BUG" "FIXIT" "ISSUE" ]; # A set of other keywords that all map to this FIX keywords.
};
TODO = { icon = " "; color = "info"; };
HACK = { icon = " "; color = "warning"; };
WARN = { icon = " "; color = "warning"; alt = [ "WARNING" "XXX" ]; };
PERF = { icon = " "; alt = [ "OPTIM" "PERFORMANCE" "OPTIMIZE" ]; };
NOTE = { icon = " "; color = "hint"; alt = [ "INFO" ]; };
TEST = { icon = " "; color = "test"; alt = [ "TESTING" "PASSED" "FAILED" ]; };
};
```
'';
guiStyle = mkOption {
description = "The gui style for highlight groups.";
default = null;
type = types.nullOr (types.submodule ({...}: {
options = {
fg = helpers.defaultNullOpts.mkStr "NONE" ''
The gui style to use for the fg highlight group.
'';
bg = helpers.defaultNullOpts.mkStr "BOLD" ''
The gui style to use for the bg highlight group.
'';
};
}));
};
mergeKeywords = helpers.defaultNullOpts.mkBool true ''
When true, custom keywords will be merged with the default
'';
highlight = mkOption {
description = "Highlight options";
default = null;
type = types.nullOr (types.submodule ({...}: {
options = {
multiline = helpers.defaultNullOpts.mkBool true ''
Enable multiline todo comments.
'';
multilinePattern = helpers.defaultNullOpts.mkStr "^." ''
Lua pattern to match the next multiline from the start of the
matched keyword.
'';
multilineContext = helpers.defaultNullOpts.mkInt 10 ''
Extra lines that will be re-evaluated when changing a line.
'';
before = helpers.defaultNullOpts.mkStr "" ''
"fg" or "bg" or empty.
'';
keyword = helpers.defaultNullOpts.mkStr "wide" ''
"fg", "bg", "wide", "wide_bg", "wide_fg" or empty.
(wide and wide_bg is the same as bg, but will also highlight
surrounding characters, wide_fg acts accordingly but with fg).
'';
after = helpers.defaultNullOpts.mkStr "fg" ''
"fg" or "bg" or empty.
'';
pattern =
helpers.mkNullOrOption
(types.oneOf [types.str (types.listOf types.str)]) ''
Pattern or list of patterns, used for highlighting (vim regex)
'';
commentsOnly = helpers.defaultNullOpts.mkBool true ''
Uses treesitter to match keywords in comments only.
'';
maxLineLen = helpers.defaultNullOpts.mkInt 400 ''
Ignore lines longer than this.
'';
exclude = helpers.mkNullOrOption (types.listOf types.str) ''
List of file types to exclude highlighting.
'';
};
}));
};
colors =
helpers.mkNullOrOption
(types.attrsOf (types.listOf types.str)) ''
List of named colors where we try to extract the guifg from the list
of highlight groups or use the hex color if hl not found as a fallback.
Default:
```
{
error = [ "DiagnosticError" "ErrorMsg" "#DC2626" ];
warning = [ "DiagnosticWarn" "WarningMsg" "#FBBF24" ];
info = [ "DiagnosticInfo" "#2563EB" ];
hint = [ "DiagnosticHint" "#10B981" ];
default = [ "Identifier" "#7C3AED" ];
test = [ "Identifier" "#FF00FF" ];
};
```
'';
search = mkOption {
description = "Search options.";
default = null;
type = types.nullOr (types.submodule ({...}: {
options = {
command = helpers.defaultNullOpts.mkStr "rg" ''
Command to use for searching for keywords.
'';
args = helpers.mkNullOrOption (types.listOf types.str) ''
Arguments to use for the search command in list form.
Default:
```
[
"--color=never"
"--no-heading"
"--with-filename"
"--line-number"
"--column"
];
```
'';
pattern = helpers.defaultNullOpts.mkStr "[[\b(KEYWORDS):]]" ''
Regex that will be used to match keywords.
Don't replace the (KEYWORDS) placeholder.
'';
};
}));
};
};
};
config = let
setupOptions =
{
signs = cfg.signs;
signPriority = cfg.signPriority;
keywords = cfg.keywords;
guiStyle = cfg.guiStyle;
mergeKeywords = cfg.mergeKeywords;
highlight = cfg.highlight;
colors = cfg.colors;
search = cfg.search;
}
// cfg.extraOptions;
in
mkIf cfg.enable {
extraPlugins = [cfg.package];
extraConfigLua = ''
require("todo-comments").setup${helpers.toLuaObject setupOptions}
'';
};
}