mirror of
https://github.com/nix-community/nixvim.git
synced 2025-06-26 18:58:43 +02:00
223 lines
6.1 KiB
Nix
223 lines
6.1 KiB
Nix
|
{
|
||
|
pkgs,
|
||
|
lib,
|
||
|
config,
|
||
|
...
|
||
|
}:
|
||
|
with lib; let
|
||
|
helpers = import ../../helpers.nix {inherit lib;};
|
||
|
in {
|
||
|
# TODO those warnings have been added XX/XX/2023
|
||
|
# -> Remove them in ~ 1 month (oct. 2023)
|
||
|
imports =
|
||
|
mapAttrsToList
|
||
|
(
|
||
|
old: new:
|
||
|
mkRenamedOptionModule
|
||
|
["plugins" "treesitter-rainbow" old]
|
||
|
["plugins" "rainbow-delimiters" new]
|
||
|
)
|
||
|
{
|
||
|
enable = "enable";
|
||
|
package = "package";
|
||
|
strategy = "strategy";
|
||
|
query = "query";
|
||
|
disable = "blacklist";
|
||
|
hlgroups = "highlight";
|
||
|
};
|
||
|
|
||
|
options.plugins.rainbow-delimiters =
|
||
|
helpers.extraOptionsOptions
|
||
|
// {
|
||
|
enable = mkEnableOption "rainbow-delimiters.nvim";
|
||
|
|
||
|
package =
|
||
|
helpers.mkPackageOption
|
||
|
"rainbow-delimiters.nvim"
|
||
|
pkgs.vimPlugins.rainbow-delimiters-nvim;
|
||
|
|
||
|
strategy =
|
||
|
helpers.defaultNullOpts.mkNullable
|
||
|
(
|
||
|
with types;
|
||
|
attrsOf (
|
||
|
either
|
||
|
helpers.rawType
|
||
|
(enum ["global" "local" "noop"])
|
||
|
)
|
||
|
)
|
||
|
''
|
||
|
{
|
||
|
default = "global";
|
||
|
}
|
||
|
''
|
||
|
''
|
||
|
Attrs mapping Tree-sitter language names to strategies.
|
||
|
See `|rb-delimiters-strategy|` for more information about strategies.
|
||
|
|
||
|
Example:
|
||
|
```nix
|
||
|
{
|
||
|
# Use global strategy by default
|
||
|
default = "global";
|
||
|
|
||
|
# Use local for HTML
|
||
|
html = "local";
|
||
|
|
||
|
# Pick the strategy for LaTeX dynamically based on the buffer size
|
||
|
latex.__raw = \'\'
|
||
|
function()
|
||
|
-- Disabled for very large files, global strategy for large files,
|
||
|
-- local strategy otherwise
|
||
|
if vim.fn.line('$') > 10000 then
|
||
|
return nil
|
||
|
elseif vim.fn.line('$') > 1000 then
|
||
|
return require 'rainbow-delimiters'.strategy['global']
|
||
|
end
|
||
|
return require 'rainbow-delimiters'.strategy['local']
|
||
|
end
|
||
|
\'\';
|
||
|
}
|
||
|
```
|
||
|
'';
|
||
|
|
||
|
query =
|
||
|
helpers.defaultNullOpts.mkNullable
|
||
|
(with types; attrsOf str)
|
||
|
''
|
||
|
{
|
||
|
default = "rainbow-delimiters";
|
||
|
lua = "rainbow-blocks";
|
||
|
}
|
||
|
''
|
||
|
''
|
||
|
Attrs mapping Tree-sitter language names to queries.
|
||
|
See `|rb-delimiters-query|` for more information about queries.
|
||
|
'';
|
||
|
|
||
|
highlight =
|
||
|
helpers.defaultNullOpts.mkNullable (with types; listOf str)
|
||
|
''
|
||
|
[
|
||
|
"RainbowDelimiterRed"
|
||
|
"RainbowDelimiterYellow"
|
||
|
"RainbowDelimiterBlue"
|
||
|
"RainbowDelimiterOrange"
|
||
|
"RainbowDelimiterGreen"
|
||
|
"RainbowDelimiterViolet"
|
||
|
"RainbowDelimiterCyan"
|
||
|
]
|
||
|
''
|
||
|
''
|
||
|
List of names of the highlight groups to use for highlighting, for more information see
|
||
|
`|rb-delimiters-colors|`.
|
||
|
'';
|
||
|
|
||
|
whitelist = helpers.mkNullOrOption (with types; listOf str) ''
|
||
|
List of Tree-sitter languages for which to enable rainbow delimiters.
|
||
|
Rainbow delimiters will be disabled for all other languages.
|
||
|
'';
|
||
|
|
||
|
blacklist = helpers.mkNullOrOption (with types; listOf str) ''
|
||
|
List of Tree-sitter languages for which to disable rainbow delimiters.
|
||
|
Rainbow delimiters will be enabled for all other languages.
|
||
|
'';
|
||
|
|
||
|
log = {
|
||
|
file =
|
||
|
helpers.defaultNullOpts.mkNullable
|
||
|
(with types; either str helpers.rawType)
|
||
|
''
|
||
|
{
|
||
|
__raw = "vim.fn.stdpath('log') .. '/rainbow-delimiters.log'";
|
||
|
}
|
||
|
''
|
||
|
''
|
||
|
Path to the log file, default is `rainbow-delimiters.log` in your standard log path
|
||
|
(see `|standard-path|`).
|
||
|
'';
|
||
|
|
||
|
level =
|
||
|
helpers.defaultNullOpts.mkEnum
|
||
|
["debug" "error" "info" "trace" "warn" "off"]
|
||
|
"warn"
|
||
|
''
|
||
|
Only messages equal to or above this value will be logged.
|
||
|
The default is to log warnings or above.
|
||
|
See `|log_levels|` for possible values.
|
||
|
'';
|
||
|
};
|
||
|
};
|
||
|
|
||
|
config = let
|
||
|
cfg = config.plugins.rainbow-delimiters;
|
||
|
in
|
||
|
mkIf cfg.enable {
|
||
|
warnings =
|
||
|
optional
|
||
|
(!config.plugins.treesitter.enable)
|
||
|
"Nixvim: treesitter-rainbow needs treesitter to function as intended";
|
||
|
assertions = [
|
||
|
{
|
||
|
assertion = (cfg.whitelist == null) || (cfg.blacklist == null);
|
||
|
message = ''
|
||
|
Both `rainbow-delimiters.whitelist` and `rainbow-delimiters.blacklist` should not be
|
||
|
set simultaneously.
|
||
|
Please remove one of them.
|
||
|
'';
|
||
|
}
|
||
|
];
|
||
|
|
||
|
extraPlugins = [cfg.package];
|
||
|
|
||
|
globals.rainbow_delimiters = with cfg;
|
||
|
{
|
||
|
strategy =
|
||
|
helpers.ifNonNull' strategy
|
||
|
(
|
||
|
mapAttrs'
|
||
|
(
|
||
|
name: value: {
|
||
|
name =
|
||
|
if name == "default"
|
||
|
then "__emptyString"
|
||
|
else name;
|
||
|
value =
|
||
|
if isString value
|
||
|
then helpers.mkRaw "require 'rainbow-delimiters'.strategy['${value}']"
|
||
|
else value;
|
||
|
}
|
||
|
)
|
||
|
strategy
|
||
|
);
|
||
|
query =
|
||
|
helpers.ifNonNull' query
|
||
|
(
|
||
|
mapAttrs'
|
||
|
(
|
||
|
name: value: {
|
||
|
name =
|
||
|
if name == "default"
|
||
|
then "__emptyString"
|
||
|
else name;
|
||
|
inherit value;
|
||
|
}
|
||
|
)
|
||
|
query
|
||
|
);
|
||
|
inherit
|
||
|
highlight
|
||
|
whitelist
|
||
|
blacklist
|
||
|
;
|
||
|
log = with log; {
|
||
|
inherit file;
|
||
|
level =
|
||
|
helpers.ifNonNull' level
|
||
|
(helpers.mkRaw "vim.log.levels.${strings.toUpper level}");
|
||
|
};
|
||
|
}
|
||
|
// cfg.extraOptions;
|
||
|
};
|
||
|
}
|