neovim-flake/modules/plugins/ui/noice/noice.nix

143 lines
3.9 KiB
Nix

{
lib,
config,
...
}: let
inherit (lib.options) mkEnableOption mkOption;
inherit (lib.types) anything nullOr listOf submodule str;
inherit (lib.nvim.types) mkPluginSetupOption;
inherit (lib.nvim.config) mkBool;
in {
options.vim.ui.noice = {
enable = mkEnableOption "noice.nvim UI modification library";
setupOpts = mkPluginSetupOption "noice.nvim" {
lsp = {
override = {
"vim.lsp.util.convert_input_to_markdown_lines" =
mkBool true "override the default lsp markdown formatter with Noice";
"vim.lsp.util.stylize_markdown" =
mkBool true "override the lsp markdown formatter with Noice";
"cmp.entry.get_documentation" =
mkBool (config.vim.autocomplete.type == "nvim-cmp") "override cmp documentation with Noice";
};
signature = {
enabled = mkEnableOption "signature help";
};
};
presets = {
bottom_search = mkBool true "use a classic bottom cmdline for search";
command_palette = mkBool true "position the cmdline and popupmenu together";
long_message_to_split = mkBool true "long messages will be sent to a split";
inc_rename = mkBool false "enables an input dialog for inc-rename.nvim";
lsp_doc_border =
mkBool config.vim.ui.borders.enable "add a border to hover docs and signature help";
};
# TODO: is it possible to write a submodule for this?
format = {
cmdline = mkOption {
description = "formatting options for the cmdline";
type = nullOr anything;
default = {
pattern = "^:";
icon = "";
lang = "vim";
};
};
search_down = mkOption {
description = "formatting options for search_down";
type = nullOr anything;
default = {
kind = "search";
pattern = "^/";
icon = " ";
lang = "regex";
};
};
search_up = mkOption {
description = "formatting options for search_up";
type = nullOr anything;
default = {
kind = "search";
pattern = "^%?";
icon = " ";
lang = "regex";
};
};
filter = mkOption {
description = "formatting options for filter";
type = nullOr anything;
default = {
pattern = "^:%s*!";
icon = "";
lang = "bash";
};
};
lua = mkOption {
description = "formatting options for lua";
type = nullOr anything;
default = {
pattern = "^:%s*lua%s+";
icon = "";
lang = "lua";
};
};
help = mkOption {
description = "formatting options for help";
type = nullOr anything;
default = {
pattern = "^:%s*he?l?p?%s+";
icon = "󰋖";
};
};
};
routes = mkOption {
description = "How to route messages";
type = listOf (submodule {
options = {
view = mkOption {
description = "how this route is viewed";
type = nullOr str;
default = null;
};
filter = mkOption {
description = "a filter for messages matching this route";
type = anything;
};
opts = mkOption {
description = "options for the view and the route";
type = nullOr anything;
default = null;
};
};
});
default = [
{
filter = {
event = "msg_show";
kind = "";
find = "written";
};
opts = {skip = true;};
}
];
defaultText = "Hide written messages";
};
};
};
}