{ lib, helpers, config, pkgs, ... }: with lib; helpers.neovim-plugin.mkNeovimPlugin config { name = "trouble"; originalName = "trouble-nvim"; defaultPackage = pkgs.vimPlugins.trouble-nvim; extraPlugins = with pkgs.vimPlugins; [ nvim-web-devicons ]; maintainers = [maintainers.loicreynier]; # TODO introduced 2024-03-15: remove 2024-05-15 optionsRenamedToSettings = [ "autoClose" "autoFold" "autoOpen" "autoJump" "autoPreview" "foldClosed" "foldOpen" "group" "height" "icons" "indentLines" "mode" "padding" "position" "width" "useDiagnosticSigns" ["actionKeys" "cancel"] ["actionKeys" "close"] ["actionKeys" "closeFolds"] ["actionKeys" "hover"] ["actionKeys" "jump"] ["actionKeys" "jumpClose"] ["actionKeys" "next"] ["actionKeys" "openFolds"] ["actionKeys" "openSplit"] ["actionKeys" "openTab"] ["actionKeys" "openVsplit"] ["actionKeys" "previous"] ["actionKeys" "refresh"] ["actionKeys" "toggleFold"] ["actionKeys" "toggleMode"] ["actionKeys" "togglePreview"] ["signs" "error"] ["signs" "hint"] ["signs" "other"] ["signs" "warning"] ]; settingsOptions = { position = helpers.defaultNullOpts.mkEnum ["top" "left" "right" "bottom"] "bottom" '' Position of the list. ''; height = helpers.defaultNullOpts.mkInt 10 '' Height of the trouble list when position is top or bottom. ''; width = helpers.defaultNullOpts.mkInt 50 '' Width of the list when position is left or right. ''; icons = helpers.defaultNullOpts.mkBool true "Use devicons for filenames"; mode = helpers.defaultNullOpts.mkEnum [ "workspace_diagnostics" "document_diagnostics" "quickfix" "lsp_references" "loclist" ] "workspace_diagnostics" "Mode for default list"; fold_open = helpers.defaultNullOpts.mkStr "" "Icon used for open folds"; fold_closed = helpers.defaultNullOpts.mkStr "" "Icon used for closed folds"; group = helpers.defaultNullOpts.mkBool true "Group results by file"; padding = helpers.defaultNullOpts.mkBool true "Add an extra new line on top of the list"; cycle_results = helpers.defaultNullOpts.mkBool true "Whether to cycle item list when reaching beginning or end of list"; action_keys = mapAttrs ( action: config: helpers.defaultNullOpts.mkNullable (with types; either str (listOf str)) config.default config.description ) { close = { default = "q"; description = "Close the list"; }; cancel = { default = ""; description = "Cancel the preview and get back to your last window / buffer / cursor"; }; refresh = { default = "r"; description = "Manually refresh"; }; jump = { default = "[ \"\" \"\" ]"; description = "Jump to the diagnostic or open / close folds"; }; open_split = { default = "[ \"\" ]"; description = "Open buffer in new split"; }; open_vsplit = { default = "[ \"\" ]"; description = "Open buffer in new vsplit"; }; open_tab = { default = "[ \"\" ]"; description = "Open buffer in new tab"; }; jump_close = { default = "[ \"o\" ]"; description = "Jump to the diagnostic and close the list"; }; toggle_mode = { default = "m"; description = "toggle between 'workspace' and 'document' diagnostics mode"; }; toggle_preview = { default = "P"; description = "Toggle auto_preview"; }; hover = { default = "K"; description = "Opens a small popup with the full multiline message"; }; preview = { default = "p"; description = "Preview the diagnostic location"; }; close_folds = { default = "[ \"zM\" \"zm\" ]"; description = "Close all folds"; }; open_folds = { default = "[ \"zR\" \"zr\" ]"; description = "Open all folds"; }; toggle_fold = { default = "[ \"zA\" \"za\" ]"; description = "Toggle fold of current file"; }; previous = { default = "k"; description = "Previous item"; }; next = { default = "j"; description = "Next item"; }; }; indent_lines = helpers.defaultNullOpts.mkBool true '' Add an indent guide below the fold icons. ''; win_config = helpers.defaultNullOpts.mkAttrsOf types.anything '' { border = "single"; } '' "Configuration for floating windows. See `|nvim_open_win()|`."; auto_open = helpers.defaultNullOpts.mkBool false '' Automatically open the list when you have diagnostics. ''; auto_close = helpers.defaultNullOpts.mkBool false '' Automatically close the list when you have no diagnostics. ''; auto_preview = helpers.defaultNullOpts.mkBool true '' Automatically preview the location of the diagnostic. to close preview and go back to last window. ''; auto_fold = helpers.defaultNullOpts.mkBool false '' Automatically fold a file trouble list at creation. ''; auto_jump = helpers.defaultNullOpts.mkListOf types.str ''["lsp_definitions"]'' '' For the given modes, automatically jump if there is only a single result. ''; include_declaration = helpers.defaultNullOpts.mkListOf types.str ''["lsp_references" "lsp_implementations" "lsp_definitions"]'' "For the given modes, include the declaration of the current symbol in the results."; signs = mapAttrs ( diagnostic: default: helpers.defaultNullOpts.mkStr default "Icon/text for ${diagnostic} diagnostics." ) { error = ""; warning = ""; hint = ""; information = ""; other = "﫠"; }; use_diagnostic_signs = helpers.defaultNullOpts.mkBool false '' Enabling this will use the signs defined in your lsp client ''; }; }