mirror of
https://github.com/nix-community/nixvim.git
synced 2025-06-26 18:58:43 +02:00
We used to only think of it as the plugin repo's name, but we have been needing to use it for the name of the plugin's packpath location.
453 lines
14 KiB
Nix
453 lines
14 KiB
Nix
{
|
|
lib,
|
|
...
|
|
}:
|
|
let
|
|
inherit (lib) types;
|
|
inherit (lib.nixvim) defaultNullOpts;
|
|
in
|
|
lib.nixvim.neovim-plugin.mkNeovimPlugin {
|
|
name = "noice";
|
|
packPathName = "noice.nvim";
|
|
package = "noice-nvim";
|
|
|
|
maintainers = [ lib.maintainers.khaneliman ];
|
|
|
|
description = ''
|
|
`noice.nvim`, an experimental Neovim UI.
|
|
|
|
> [!NOTE]
|
|
> If treesitter is enabled you need the following parsers:
|
|
> vim, regex, lua, bash, markdown, markdown_inline
|
|
'';
|
|
|
|
# TODO: added 2024-10-27 remove after 24.11
|
|
deprecateExtraOptions = true;
|
|
optionsRenamedToSettings =
|
|
let
|
|
mkOptionPaths = map (lib.splitString ".");
|
|
in
|
|
mkOptionPaths [
|
|
"cmdline.enabled"
|
|
"cmdline.view"
|
|
"cmdline.opts"
|
|
"cmdline.format"
|
|
"messages.enabled"
|
|
"messages.view"
|
|
"messages.viewError"
|
|
"messages.viewWarn"
|
|
"messages.viewHistory"
|
|
"messages.viewSearch"
|
|
"popupmenu.enabled"
|
|
"popupmenu.backend"
|
|
"popupmenu.kindIcons"
|
|
"redirect"
|
|
"commands"
|
|
"notify.enabled"
|
|
"notify.view"
|
|
"lsp.progress.enabled"
|
|
"lsp.progress.format"
|
|
"lsp.progress.formatDone"
|
|
"lsp.progress.throttle"
|
|
"lsp.progress.view"
|
|
"lsp.override"
|
|
"lsp.hover.enabled"
|
|
"lsp.hover.view"
|
|
"lsp.hover.opts"
|
|
"lsp.signature.enabled"
|
|
"lsp.signature.autoOpen.enabled"
|
|
"lsp.signature.autoOpen.trigger"
|
|
"lsp.signature.autoOpen.luasnip"
|
|
"lsp.signature.autoOpen.throttle"
|
|
"lsp.signature.view"
|
|
"lsp.signature.opts"
|
|
"lsp.message.enabled"
|
|
"lsp.message.view"
|
|
"lsp.message.opts"
|
|
"lsp.documentation.view"
|
|
"lsp.documentation.opts"
|
|
"markdown.hover"
|
|
"markdown.highlights"
|
|
"health.checker"
|
|
"smartMove.enabled"
|
|
"smartMove.excludedFiletypes"
|
|
"presets"
|
|
"throttle"
|
|
"views"
|
|
"routes"
|
|
"status"
|
|
"format"
|
|
];
|
|
|
|
settingsOptions = {
|
|
cmdline = {
|
|
enabled = defaultNullOpts.mkBool true "Enables `Noice` cmdline UI.";
|
|
|
|
view = defaultNullOpts.mkStr "cmdline_popup" ''
|
|
View for rendering the cmdline.
|
|
|
|
Change to `cmdline` to get a classic cmdline at the bottom.
|
|
'';
|
|
|
|
opts = defaultNullOpts.mkAttrsOf types.anything { } ''
|
|
Global options for the cmdline. See section on [views].
|
|
|
|
[views] https://github.com/folke/noice.nvim?tab=readme-ov-file#-views
|
|
'';
|
|
|
|
format =
|
|
defaultNullOpts.mkAttrsOf types.anything
|
|
{
|
|
cmdline = {
|
|
pattern = "^:";
|
|
icon = "";
|
|
lang = "vim";
|
|
};
|
|
search_down = {
|
|
kind = "search";
|
|
pattern = "^/";
|
|
icon = " ";
|
|
lang = "regex";
|
|
};
|
|
search_up = {
|
|
kind = "search";
|
|
pattern = "?%?";
|
|
icon = " ";
|
|
lang = "regex";
|
|
};
|
|
filter = {
|
|
pattern = "^:%s*!";
|
|
icon = "$";
|
|
lang = "bash";
|
|
};
|
|
lua = {
|
|
pattern = "^:%s*lua%s+";
|
|
icon = "";
|
|
lang = "lua";
|
|
};
|
|
help = {
|
|
pattern = "^:%s*he?l?p?%s+";
|
|
icon = "";
|
|
};
|
|
input = { };
|
|
}
|
|
# TODO: cleanup
|
|
''
|
|
conceal: (default=true) This will hide the text in the cmdline that matches the pattern.
|
|
view: (default is cmdline view)
|
|
opts: any options passed to the view
|
|
icon_hl_group: optional hl_group for the icon
|
|
title: set to anything or empty string to hide
|
|
lua = false, to disable a format, set to `false`
|
|
'';
|
|
};
|
|
|
|
messages = {
|
|
enabled = defaultNullOpts.mkBool true ''
|
|
Enables the messages UI.
|
|
|
|
> [!NOTE] If you enable messages, then the cmdline is enabled automatically.
|
|
'';
|
|
|
|
view = defaultNullOpts.mkStr "notify" "Default view for messages.";
|
|
|
|
view_error = defaultNullOpts.mkStr "notify" "Default view for errors.";
|
|
|
|
view_warn = defaultNullOpts.mkStr "notify" "Default view for warnings.";
|
|
|
|
view_history = defaultNullOpts.mkStr "messages" "View for `:messages`.";
|
|
|
|
view_search = defaultNullOpts.mkStr "virtualtext" "View for search count messages.";
|
|
};
|
|
|
|
popupmenu = {
|
|
enabled = defaultNullOpts.mkBool true "Enable the Noice popupmenu UI.";
|
|
backend = defaultNullOpts.mkEnumFirstDefault [
|
|
"nui"
|
|
"cmp"
|
|
] "Backend to use to show regular cmdline completions.";
|
|
kindIcons = defaultNullOpts.mkNullableWithRaw (
|
|
with types; either bool (attrsOf anything)
|
|
) { } "Icons for completion item kinds. Set to `false` to disable icons.";
|
|
};
|
|
|
|
redirect = defaultNullOpts.mkAttrsOf types.anything {
|
|
view = "popup";
|
|
filter = {
|
|
event = "msg_show";
|
|
};
|
|
} "Default options for `require('noice').redirect`.";
|
|
|
|
commands = defaultNullOpts.mkAttrsOf types.anything {
|
|
history = {
|
|
view = "split";
|
|
opts = {
|
|
enter = true;
|
|
format = "details";
|
|
};
|
|
filter = {
|
|
any = [
|
|
{ event = "notify"; }
|
|
{ error = true; }
|
|
{ warning = true; }
|
|
{
|
|
event = "msg_show";
|
|
kind = [ "" ];
|
|
}
|
|
{
|
|
event = "lsp";
|
|
kind = "message";
|
|
}
|
|
];
|
|
};
|
|
};
|
|
last = {
|
|
view = "popup";
|
|
opts = {
|
|
enter = true;
|
|
format = "details";
|
|
};
|
|
filter = {
|
|
any = [
|
|
{ event = "notify"; }
|
|
{ error = true; }
|
|
{ warning = true; }
|
|
{
|
|
event = "msg_show";
|
|
kind = [ "" ];
|
|
}
|
|
{
|
|
event = "lsp";
|
|
kind = "message";
|
|
}
|
|
];
|
|
};
|
|
filter_opts = {
|
|
count = 1;
|
|
};
|
|
};
|
|
errors = {
|
|
view = "popup";
|
|
opts = {
|
|
enter = true;
|
|
format = "details";
|
|
};
|
|
filter = {
|
|
error = true;
|
|
};
|
|
filter_opts = {
|
|
reverse = true;
|
|
};
|
|
};
|
|
} "You can add any custom commands that will be available with `:Noice` command.";
|
|
|
|
notify = {
|
|
enabled = defaultNullOpts.mkBool true ''
|
|
Enable notification handling.
|
|
|
|
Noice can be used as `vim.notify` so you can route any notification like other messages.
|
|
|
|
Notification messages have their level and other properties set.
|
|
event is always "notify" and kind can be any log level as a string.
|
|
|
|
The default routes will forward notifications to nvim-notify.
|
|
Benefit of using Noice for this is the routing and consistent history view.
|
|
'';
|
|
|
|
view = defaultNullOpts.mkStr "notify" "Notify backend to use.";
|
|
};
|
|
|
|
lsp = {
|
|
progress = {
|
|
enabled = defaultNullOpts.mkBool true "Enable LSP progress.";
|
|
|
|
format = defaultNullOpts.mkNullableWithRaw (with types; either str anything) "lsp_progress" ''
|
|
Lsp Progress is formatted using the builtins for lsp_progress.
|
|
'';
|
|
|
|
format_done =
|
|
defaultNullOpts.mkNullableWithRaw (with types; either str anything) "lsp_progress_done"
|
|
''
|
|
Lsp Progress is formatted using the builtins for lsp_progress.
|
|
'';
|
|
|
|
throttle = defaultNullOpts.mkNum (lib.literalExpression "1000 / 30") "Frequency to update lsp progress message.";
|
|
|
|
view = defaultNullOpts.mkStr "mini" "Lsp progress view backend.";
|
|
};
|
|
|
|
override = defaultNullOpts.mkAttrsOf types.bool {
|
|
"vim.lsp.util.convert_input_to_markdown_lines" = false;
|
|
"vim.lsp.util.stylize_markdown" = false;
|
|
"cmp.entry.get_documentation" = false;
|
|
} "Functions to override and use Noice.";
|
|
|
|
hover = {
|
|
enabled = defaultNullOpts.mkBool true "Enable hover UI.";
|
|
|
|
view = defaultNullOpts.mkStr (lib.literalMD "Use defaults from documentation") "When null, use defaults from documentation.";
|
|
|
|
opts =
|
|
defaultNullOpts.mkAttrsOf types.anything { }
|
|
"Options merged with defaults from documentation.";
|
|
};
|
|
|
|
signature = {
|
|
enabled = defaultNullOpts.mkBool true "Enable signature UI.";
|
|
|
|
auto_open = {
|
|
enabled = defaultNullOpts.mkBool true "Enable automatic opening of signature help.";
|
|
|
|
trigger = defaultNullOpts.mkBool true "Automatically show signature help when typing a trigger character from the LSP.";
|
|
|
|
luasnip = defaultNullOpts.mkBool true "Will open signature help when jumping to Luasnip insert nodes.";
|
|
|
|
throttle = defaultNullOpts.mkNum 50 ''
|
|
Debounce lsp signature help request by 50ms.
|
|
'';
|
|
};
|
|
|
|
view = defaultNullOpts.mkStr null "When null, use defaults from documentation.";
|
|
|
|
opts =
|
|
defaultNullOpts.mkAttrsOf types.anything { }
|
|
"Options merged with defaults from documentation.";
|
|
};
|
|
|
|
message = {
|
|
enabled = defaultNullOpts.mkBool true "Enable display of messages.";
|
|
|
|
view = defaultNullOpts.mkStr "notify" "Message backend to use.";
|
|
|
|
opts = defaultNullOpts.mkAttrsOf types.anything { } "Options for message backend.";
|
|
};
|
|
|
|
documentation = {
|
|
view = defaultNullOpts.mkStr "hover" "Documentation backend to use.";
|
|
|
|
opts = defaultNullOpts.mkAttrsOf types.anything {
|
|
lang = "markdown";
|
|
replace = true;
|
|
render = "plain";
|
|
format = [ "{message}" ];
|
|
win_options = {
|
|
concealcursor = "n";
|
|
conceallevel = 3;
|
|
};
|
|
} "Options for documentation backend.";
|
|
};
|
|
};
|
|
|
|
markdown = {
|
|
hover = defaultNullOpts.mkAttrsOf types.str {
|
|
"|(%S-)|".__raw = "vim.cmd.help"; # vim help links
|
|
"%[.-%]%((%S-)%)".__raw = "require('noice.util').open"; # markdown links
|
|
} "Set handlers for hover.";
|
|
|
|
highlights = defaultNullOpts.mkAttrsOf types.str {
|
|
"|%S-|" = "@text.reference";
|
|
"@%S+" = "@parameter";
|
|
"^%s*(Parameters:)" = "@text.title";
|
|
"^%s*(Return:)" = "@text.title";
|
|
"^%s*(See also:)" = "@text.title";
|
|
"{%S-}" = "@parameter";
|
|
} "Set highlight groups.";
|
|
};
|
|
|
|
health = {
|
|
checker = defaultNullOpts.mkBool true "Enables running health checks.";
|
|
};
|
|
|
|
smart_move = {
|
|
enabled = defaultNullOpts.mkBool true ''
|
|
Noice tries to move out of the way of existing floating windows.
|
|
You can disable this behaviour here.
|
|
'';
|
|
|
|
excluded_filetypes =
|
|
defaultNullOpts.mkListOf types.str
|
|
[
|
|
"cmp_menu"
|
|
"cmp_docs"
|
|
"notify"
|
|
]
|
|
''
|
|
Filetypes that shouldn't trigger smart move.
|
|
'';
|
|
};
|
|
|
|
presets =
|
|
defaultNullOpts.mkNullable (with types; either bool anything)
|
|
{
|
|
bottom_search = false;
|
|
command_palette = false;
|
|
long_message_to_split = false;
|
|
inc_rename = false;
|
|
lsp_doc_border = false;
|
|
}
|
|
''
|
|
You can enable a preset by setting it to `true`, or a table that will override
|
|
the preset config.
|
|
|
|
You can also add custom presets that you can enable/disable with `enabled=true`.
|
|
'';
|
|
|
|
throttle = defaultNullOpts.mkNum (lib.literalExpression "1000 / 30") ''
|
|
How frequently does Noice need to check for ui updates?
|
|
|
|
This has no effect when in blocking mode.
|
|
'';
|
|
|
|
views = defaultNullOpts.mkAttrsOf types.anything { } ''
|
|
A view is a combination of a backend and options.
|
|
|
|
Noice comes with the following built-in backends:
|
|
|
|
- `popup`: powered by nui.nvim
|
|
- `split`: powered by nui.nvim
|
|
- `notify`: powered by nvim-notify
|
|
- `virtualtext`: shows the message as virtualtext (for example for search_count)
|
|
- `mini`: similar to notifier.nvim & fidget.nvim
|
|
- `notify_send`: generate a desktop notification
|
|
'';
|
|
|
|
routes = defaultNullOpts.mkListOf (types.attrsOf types.anything) [ ] ''
|
|
Route options can be any of the view options or `skip` or `stop`.
|
|
|
|
A route has a filter, view and optional opts attribute.
|
|
|
|
- `view`: one of the views (built-in or custom)
|
|
- `filter` a filter for messages matching this route
|
|
- `opts`: options for the view and the route
|
|
'';
|
|
|
|
status = defaultNullOpts.mkAttrsOf types.anything { } ''
|
|
Noice comes with the following statusline components:
|
|
|
|
- `ruler`
|
|
- `message`: last line of the last message (event=show_msg)
|
|
- `command`: showcmd
|
|
- `mode`: showmode (@recording messages)
|
|
- `search`: search count messages
|
|
'';
|
|
|
|
format = defaultNullOpts.mkAttrsOf types.anything { } ''
|
|
Formatters are used in format definitions.
|
|
|
|
Noice includes the following formatters:
|
|
|
|
- `level`: message level with optional icon and hl_group per level
|
|
- `text`: any text with optional hl_group
|
|
- `title`: message title with optional hl_group
|
|
- `event`: message event with optional hl_group
|
|
- `kind`: message kind with optional hl_group
|
|
- `date`: formatted date with optional date format string
|
|
- `message`: message content itself with optional hl_group to override message highlights
|
|
- `confirm`: only useful for confirm messages. Will format the choices as buttons.
|
|
- `cmdline`: will render the cmdline in the message that generated the message.
|
|
- `progress`: progress bar used by lsp progress
|
|
- `spinner`: spinners used by lsp progress
|
|
- `data`: render any custom data from Message.opts. Useful in combination with the opts passed to vim.notify
|
|
'';
|
|
};
|
|
}
|