mirror of
https://github.com/nix-community/nixvim.git
synced 2025-06-21 16:39:00 +02:00
298 lines
12 KiB
Nix
298 lines
12 KiB
Nix
|
{ lib
|
||
|
, pkgs
|
||
|
, config
|
||
|
, ...
|
||
|
} @ args:
|
||
|
with lib; let
|
||
|
helpers = import ../helpers.nix args;
|
||
|
in
|
||
|
{
|
||
|
options.plugins.indent-blankline = {
|
||
|
enable = helpers.defaultNullOpts.mkBool false "Enable indent-blankline.nvim";
|
||
|
|
||
|
package = helpers.mkPackageOption "indent-blankline" pkgs.vimPlugins.indent-blankline-nvim;
|
||
|
|
||
|
char = helpers.defaultNullOpts.mkStr "│" ''
|
||
|
Specifies the character to be used as indent line. Not used if charList is not empty.
|
||
|
|
||
|
When set explicitly to empty string (""), no indentation character is displayed at all,
|
||
|
even when 'charList' is not empty. This can be useful in combination with
|
||
|
spaceCharHighlightList to only rely on different highlighting of different indentation
|
||
|
levels without needing to show a special character.
|
||
|
'';
|
||
|
|
||
|
charBlankline = helpers.defaultNullOpts.mkStr "" ''
|
||
|
Specifies the character to be used as indent line for blanklines. Not used if
|
||
|
charListBlankline is not empty.
|
||
|
'';
|
||
|
|
||
|
charList = helpers.defaultNullOpts.mkNullable (types.listOf types.str) "[]" ''
|
||
|
Specifies a list of characters to be used as indent line for
|
||
|
each indentation level.
|
||
|
Ignored if the value is an empty list.
|
||
|
'';
|
||
|
|
||
|
charListBlankline = helpers.defaultNullOpts.mkNullable (types.listOf types.str) "[]" ''
|
||
|
Specifies a list of characters to be used as indent line for
|
||
|
each indentation level on blanklines.
|
||
|
Ignored if the value is an empty list.
|
||
|
'';
|
||
|
|
||
|
charHighlightList = helpers.defaultNullOpts.mkNullable (types.listOf types.str) "[]" ''
|
||
|
Specifies the list of character highlights for each indentation level.
|
||
|
Ignored if the value is an empty list.
|
||
|
'';
|
||
|
|
||
|
spaceCharBlankline = helpers.defaultNullOpts.mkStr " " ''
|
||
|
Specifies the character to be used as the space value in between indent
|
||
|
lines when the line is blank.
|
||
|
'';
|
||
|
|
||
|
spaceCharHighlightList = helpers.defaultNullOpts.mkNullable (types.listOf types.str) "[]" ''
|
||
|
Specifies the list of space character highlights for each indentation
|
||
|
level.
|
||
|
Ignored if the value is an empty list.
|
||
|
'';
|
||
|
|
||
|
spaceCharBlanklineHighlightList = helpers.defaultNullOpts.mkNullable (types.listOf types.str) "[]" ''
|
||
|
Specifies the list of space character highlights for each indentation
|
||
|
level when the line is empty.
|
||
|
Ignored if the value is an empty list.
|
||
|
'';
|
||
|
|
||
|
useTreesitter =
|
||
|
helpers.defaultNullOpts.mkBool false
|
||
|
"Use treesitter to calculate indentation when possible.";
|
||
|
|
||
|
indentLevel = helpers.defaultNullOpts.mkInt 10 "Specifies the maximum indent level to display.";
|
||
|
|
||
|
maxIndentIncrease = helpers.defaultNullOpts.mkInt config.plugins.indent-blankline.indentLevel ''
|
||
|
The maximum indent level increase from line to line.
|
||
|
Set this option to 1 to make aligned trailing multiline comments not
|
||
|
create indentation.
|
||
|
'';
|
||
|
|
||
|
showFirstIndentLevel =
|
||
|
helpers.defaultNullOpts.mkBool true "Displays indentation in the first column.";
|
||
|
|
||
|
showTrailingBlanklineIndent = helpers.defaultNullOpts.mkBool true ''
|
||
|
Displays a trailing indentation guide on blank lines, to match the
|
||
|
indentation of surrounding code.
|
||
|
Turn this off if you want to use background highlighting instead of chars.
|
||
|
'';
|
||
|
|
||
|
showEndOfLine = helpers.defaultNullOpts.mkBool false ''
|
||
|
Displays the end of line character set by |listchars| instead of the
|
||
|
indent guide on line returns.
|
||
|
'';
|
||
|
|
||
|
showFoldtext = helpers.defaultNullOpts.mkBool true ''
|
||
|
Displays the full fold text instead of the indent guide on folded lines.
|
||
|
|
||
|
Note: there is no autocommand to subscribe to changes in folding. This
|
||
|
might lead to unexpected results. A possible solution for this is to
|
||
|
remap folding bindings to also call |IndentBlanklineRefresh|
|
||
|
'';
|
||
|
|
||
|
disableWithNolist = helpers.defaultNullOpts.mkBool false ''
|
||
|
When true, automatically turns this plugin off when |nolist| is set.
|
||
|
When false, setting |nolist| will keep displaying indentation guides but
|
||
|
removes whitespace characters set by |listchars|.
|
||
|
'';
|
||
|
|
||
|
filetype = helpers.defaultNullOpts.mkNullable (types.listOf types.str) "[]" ''
|
||
|
Specifies a list of |filetype| values for which this plugin is enabled.
|
||
|
All |filetypes| are enabled if the value is an empty list.
|
||
|
'';
|
||
|
|
||
|
filetypeExclude =
|
||
|
helpers.defaultNullOpts.mkNullable (types.listOf types.str)
|
||
|
''["lspinfo" "packer" "checkhealth" "help" "man" ""]'' ''
|
||
|
Specifies a list of |filetype| values for which this plugin is not enabled.
|
||
|
Ignored if the value is an empty list.
|
||
|
'';
|
||
|
|
||
|
buftypeExclude =
|
||
|
helpers.defaultNullOpts.mkNullable (types.listOf types.str)
|
||
|
''["terminal" "nofile" "quickfix" "prompt"]'' ''
|
||
|
Specifies a list of |buftype| values for which this plugin is not enabled.
|
||
|
Ignored if the value is an empty list.
|
||
|
'';
|
||
|
|
||
|
bufnameExclude = helpers.defaultNullOpts.mkNullable (types.listOf types.str) "[]" ''
|
||
|
Specifies a list of buffer names (file name with full path) for which
|
||
|
this plugin is not enabled.
|
||
|
A name can be regular expression as well.
|
||
|
'';
|
||
|
|
||
|
strictTabs = helpers.defaultNullOpts.mkBool false ''
|
||
|
When on, if there is a single tab in a line, only tabs are used to
|
||
|
calculate the indentation level.
|
||
|
When off, both spaces and tabs are used to calculate the indentation
|
||
|
level.
|
||
|
Only makes a difference if a line has a mix of tabs and spaces for
|
||
|
indentation.
|
||
|
'';
|
||
|
|
||
|
showCurrentContext = helpers.defaultNullOpts.mkBool false ''
|
||
|
When on, use treesitter to determine the current context. Then show the
|
||
|
indent character in a different highlight.
|
||
|
|
||
|
Note: Requires https://github.com/nvim-treesitter/nvim-treesitter to be
|
||
|
installed
|
||
|
|
||
|
Note: With this option enabled, the plugin refreshes on |CursorMoved|,
|
||
|
which might be slower
|
||
|
'';
|
||
|
|
||
|
showCurrentContextStart = helpers.defaultNullOpts.mkBool false ''
|
||
|
Applies the |hl-IndentBlanklineContextStart| highlight group to the first
|
||
|
line of the current context.
|
||
|
By default this will underline.
|
||
|
|
||
|
Note: Requires https://github.com/nvim-treesitter/nvim-treesitter to be
|
||
|
installed
|
||
|
|
||
|
Note: You need to have set |gui-colors| and it depends on your terminal
|
||
|
emulator if this works as expected.
|
||
|
If you are using kitty and tmux, take a look at this article to
|
||
|
make it work
|
||
|
http://evantravers.com/articles/2021/02/05/curly-underlines-in-kitty-tmux-neovim/
|
||
|
'';
|
||
|
|
||
|
showCurrentContextStartOnCurrentLine = helpers.defaultNullOpts.mkBool true ''
|
||
|
Shows showCurrentContextStart even when the cursor is on the same line
|
||
|
'';
|
||
|
|
||
|
contextChar = helpers.defaultNullOpts.mkStr config.plugins.indent-blankline.char ''
|
||
|
Specifies the character to be used for the current context indent line.
|
||
|
Not used if contextCharList is not empty.
|
||
|
|
||
|
Useful to have a greater distinction between the current context indent
|
||
|
line and others.
|
||
|
|
||
|
Also useful in combination with char set to empty string
|
||
|
(""), as this allows only the current context indent line to be shown.
|
||
|
'';
|
||
|
|
||
|
contextCharBlankline = helpers.defaultNullOpts.mkStr "" ''
|
||
|
Equivalent of charBlankline for contextChar.
|
||
|
'';
|
||
|
|
||
|
contextCharList = helpers.defaultNullOpts.mkNullable (types.listOf types.str) "[]" ''
|
||
|
Equivalent of charList for contextChar.
|
||
|
'';
|
||
|
|
||
|
contextCharListBlankline = helpers.defaultNullOpts.mkNullable (types.listOf types.str) "[]" ''
|
||
|
Equivalent of charListBlankline for contextChar.
|
||
|
'';
|
||
|
|
||
|
contextHighlightList = helpers.defaultNullOpts.mkNullable (types.listOf types.str) "[]" ''
|
||
|
Specifies the list of character highlights for the current context at
|
||
|
each indentation level.
|
||
|
Ignored if the value is an empty list.
|
||
|
'';
|
||
|
|
||
|
charPriority = helpers.defaultNullOpts.mkInt 1 "Specifies the |extmarks| priority for chars.";
|
||
|
|
||
|
contextStartPriority =
|
||
|
helpers.defaultNullOpts.mkInt 10000
|
||
|
"Specifies the |extmarks| priority for the context start.";
|
||
|
|
||
|
contextPatterns = helpers.defaultNullOpts.mkNullable (types.listOf types.str) ''
|
||
|
[
|
||
|
"class"
|
||
|
"^func"
|
||
|
"method"
|
||
|
"^if"
|
||
|
"while"
|
||
|
"for"
|
||
|
"with"
|
||
|
"try"
|
||
|
"except"
|
||
|
"arguments"
|
||
|
"argument_list"
|
||
|
"object"
|
||
|
"dictionary"
|
||
|
"element"
|
||
|
"table"
|
||
|
"tuple"
|
||
|
"do_block"
|
||
|
]'' ''
|
||
|
Specifies a list of lua patterns that are used to match against the
|
||
|
treesitter |tsnode:type()| at the cursor position to find the current
|
||
|
context.
|
||
|
|
||
|
To learn more about how lua pattern work, see here:
|
||
|
https://www.lua.org/manual/5.1/manual.html#5.4.1
|
||
|
|
||
|
'';
|
||
|
|
||
|
useTreesitterScope = helpers.defaultNullOpts.mkBool false ''
|
||
|
Instead of using contextPatters use the current scope defined by nvim-treesitter as the
|
||
|
context
|
||
|
'';
|
||
|
|
||
|
contextPatternHighlight = helpers.defaultNullOpts.mkNullable (types.attrsOf types.str) "{}" ''
|
||
|
Specifies a map of patterns set in contextPatterns to highlight groups.
|
||
|
When the current matching context pattern is in the map, the context
|
||
|
will be highlighted with the corresponding highlight group.
|
||
|
'';
|
||
|
|
||
|
viewportBuffer = helpers.defaultNullOpts.mkInt 10 ''
|
||
|
Sets the buffer of extra lines before and after the current viewport that
|
||
|
are considered when generating indentation and the context.
|
||
|
'';
|
||
|
|
||
|
disableWarningMessage =
|
||
|
helpers.defaultNullOpts.mkBool false "Turns deprecation warning messages off.";
|
||
|
};
|
||
|
|
||
|
config =
|
||
|
let
|
||
|
cfg = config.plugins.indent-blankline;
|
||
|
in
|
||
|
mkIf cfg.enable {
|
||
|
extraPlugins = [ cfg.package ];
|
||
|
|
||
|
globals = {
|
||
|
indent_blankline_char = cfg.char;
|
||
|
indent_blankline_char_blankline = cfg.charBlankline;
|
||
|
indent_blankline_char_list = cfg.charList;
|
||
|
indent_blankline_char_list_blankline = cfg.charListBlankline;
|
||
|
indent_blankline_char_highlight_list = cfg.charHighlightList;
|
||
|
indent_blankline_space_char_blankline = cfg.spaceCharBlankline;
|
||
|
indent_blankline_space_char_highlight_list = cfg.spaceCharHighlightList;
|
||
|
indent_blankline_space_char_blankline_highlight_list = cfg.spaceCharBlanklineHighlightList;
|
||
|
indent_blankline_use_treesitter = cfg.useTreesitter;
|
||
|
indent_blankline_indent_level = cfg.indentLevel;
|
||
|
indent_blankline_max_indent_increase = cfg.maxIndentIncrease;
|
||
|
indent_blankline_show_first_indent_level = cfg.showFirstIndentLevel;
|
||
|
indent_blankline_show_trailing_blankline_indent = cfg.showTrailingBlanklineIndent;
|
||
|
indent_blankline_show_end_of_line = cfg.showEndOfLine;
|
||
|
indent_blankline_show_foldtext = cfg.showFoldtext;
|
||
|
indent_blankline_disable_with_nolist = cfg.disableWithNolist;
|
||
|
indent_blankline_filetype = cfg.filetype;
|
||
|
indent_blankline_filetype_exclude = cfg.filetypeExclude;
|
||
|
indent_blankline_buftype_exclude = cfg.buftypeExclude;
|
||
|
indent_blankline_bufname_exclude = cfg.bufnameExclude;
|
||
|
indent_blankline_strict_tabs = cfg.strictTabs;
|
||
|
indent_blankline_show_current_context = cfg.showCurrentContext;
|
||
|
indent_blankline_show_current_context_start = cfg.showCurrentContextStart;
|
||
|
indent_blankline_show_current_context_start_on_current_line = cfg.showCurrentContextStartOnCurrentLine;
|
||
|
indent_blankline_context_char = cfg.contextChar;
|
||
|
indent_blankline_context_char_blankline = cfg.contextCharBlankline;
|
||
|
indent_blankline_context_char_list = cfg.contextCharList;
|
||
|
indent_blankline_context_char_list_blankline = cfg.contextCharListBlankline;
|
||
|
indent_blankline_context_highlight_list = cfg.contextHighlightList;
|
||
|
indent_blankline_char_priority = cfg.charPriority;
|
||
|
indent_blankline_context_start_priority = cfg.contextStartPriority;
|
||
|
indent_blankline_context_patterns = cfg.contextPatterns;
|
||
|
indent_blankline_use_treesitter_scope = cfg.useTreesitterScope;
|
||
|
indent_blankline_context_pattern_highlight = cfg.contextPatternHighlight;
|
||
|
indent_blankline_viewport_buffer = cfg.viewportBuffer;
|
||
|
indent_blankline_disable_warning_message = cfg.disableWarningMessage;
|
||
|
};
|
||
|
};
|
||
|
}
|