2021-02-10 20:56:21 +00:00
|
|
|
|
{
|
2023-02-20 11:42:13 +01:00
|
|
|
|
lib,
|
2023-11-06 15:04:08 +01:00
|
|
|
|
helpers,
|
2023-02-20 11:42:13 +01:00
|
|
|
|
config,
|
2023-11-06 15:04:08 +01:00
|
|
|
|
pkgs,
|
2023-02-20 11:42:13 +01:00
|
|
|
|
...
|
|
|
|
|
}:
|
2024-05-05 19:39:35 +02:00
|
|
|
|
with lib;
|
|
|
|
|
let
|
2023-02-20 11:42:13 +01:00
|
|
|
|
cfg = config.plugins.lspsaga;
|
2023-08-10 18:35:32 +02:00
|
|
|
|
|
2024-05-05 19:39:35 +02:00
|
|
|
|
mkKeymapOption =
|
|
|
|
|
default:
|
|
|
|
|
helpers.defaultNullOpts.mkNullable (with types; either str (listOf str)) (
|
|
|
|
|
if isString default then default else "[${concatStringsSep " " default}]"
|
2023-08-10 18:35:32 +02:00
|
|
|
|
);
|
2024-05-05 19:39:35 +02:00
|
|
|
|
in
|
|
|
|
|
{
|
|
|
|
|
imports =
|
|
|
|
|
let
|
|
|
|
|
basePluginPath = [
|
|
|
|
|
"plugins"
|
|
|
|
|
"lspsaga"
|
|
|
|
|
];
|
|
|
|
|
in
|
2023-08-10 18:35:32 +02:00
|
|
|
|
map
|
2024-05-05 19:39:35 +02:00
|
|
|
|
(
|
|
|
|
|
optionName:
|
|
|
|
|
# See https://github.com/NixOS/nixpkgs/pull/247916
|
|
|
|
|
# TODO remove those warnings in ~2 months (October 2023)
|
|
|
|
|
mkRemovedOptionModule (basePluginPath ++ [ optionName ]) ''
|
2023-08-10 18:35:32 +02:00
|
|
|
|
The `lspsaga` plugin used by default in Nixvim has changed to https://github.com/nvimdev/lspsaga.nvim.
|
|
|
|
|
Please, adapt your config to the new options.
|
|
|
|
|
Documentation available at https://nix-community.github.io/nixvim/plugins/lspsaga/index.html.
|
|
|
|
|
''
|
2024-05-05 19:39:35 +02:00
|
|
|
|
)
|
|
|
|
|
[
|
|
|
|
|
"signs"
|
|
|
|
|
"headers"
|
|
|
|
|
"maxDialogWidth"
|
|
|
|
|
"icons"
|
|
|
|
|
"maxFinderPreviewLines"
|
|
|
|
|
"keys"
|
|
|
|
|
"borderStyle"
|
|
|
|
|
"renamePromptPrefix"
|
|
|
|
|
];
|
2023-08-10 18:35:32 +02:00
|
|
|
|
|
2021-02-10 20:56:21 +00:00
|
|
|
|
options = {
|
2024-05-05 19:39:35 +02:00
|
|
|
|
plugins.lspsaga = helpers.neovim-plugin.extraOptionsOptions // {
|
|
|
|
|
enable = mkEnableOption "lspsaga.nvim";
|
2021-02-10 20:56:21 +00:00
|
|
|
|
|
2024-05-17 14:09:20 +02:00
|
|
|
|
package = helpers.mkPluginPackageOption "lspsaga" pkgs.vimPlugins.lspsaga-nvim;
|
2023-01-19 10:45:15 +00:00
|
|
|
|
|
2024-05-05 19:39:35 +02:00
|
|
|
|
ui = {
|
|
|
|
|
border = helpers.defaultNullOpts.mkBorder "single" "lspsaga" "";
|
2021-02-10 20:56:21 +00:00
|
|
|
|
|
2024-05-05 19:39:35 +02:00
|
|
|
|
devicon = helpers.defaultNullOpts.mkBool true "Whether to use nvim-web-devicons.";
|
2021-02-10 20:56:21 +00:00
|
|
|
|
|
2024-05-05 19:39:35 +02:00
|
|
|
|
title = helpers.defaultNullOpts.mkBool true "Show title in some float window.";
|
2023-08-10 18:35:32 +02:00
|
|
|
|
|
2024-05-05 19:39:35 +02:00
|
|
|
|
expand = helpers.defaultNullOpts.mkStr "⊞" "Expand icon.";
|
2023-08-10 18:35:32 +02:00
|
|
|
|
|
2024-05-05 19:39:35 +02:00
|
|
|
|
collapse = helpers.defaultNullOpts.mkStr "⊟" "Collapse icon.";
|
2023-08-10 18:35:32 +02:00
|
|
|
|
|
2024-05-05 19:39:35 +02:00
|
|
|
|
codeAction = helpers.defaultNullOpts.mkStr "💡" "Code action icon.";
|
2021-02-10 20:56:21 +00:00
|
|
|
|
|
2024-05-05 19:39:35 +02:00
|
|
|
|
actionfix = helpers.defaultNullOpts.mkStr "" "Action fix icon.";
|
2023-08-10 18:35:32 +02:00
|
|
|
|
|
2024-05-05 19:39:35 +02:00
|
|
|
|
lines = helpers.defaultNullOpts.mkNullable (
|
|
|
|
|
with types; listOf str
|
|
|
|
|
) ''["┗" "┣" "┃" "━" "┏"]'' "Symbols used in virtual text connect.";
|
2023-08-10 18:35:32 +02:00
|
|
|
|
|
2024-05-05 19:39:35 +02:00
|
|
|
|
kind = helpers.defaultNullOpts.mkNullable types.attrs "{}" "LSP kind custom table.";
|
2023-08-10 18:35:32 +02:00
|
|
|
|
|
2024-05-05 19:39:35 +02:00
|
|
|
|
impSign = helpers.defaultNullOpts.mkStr " " "Implement icon.";
|
|
|
|
|
};
|
2023-08-10 18:35:32 +02:00
|
|
|
|
|
2024-05-05 19:39:35 +02:00
|
|
|
|
hover = {
|
|
|
|
|
maxWidth = helpers.defaultNullOpts.mkNullable (types.numbers.between 0.0 1.0) "0.9" ''
|
|
|
|
|
Defines float window width.
|
|
|
|
|
'';
|
2023-08-10 18:35:32 +02:00
|
|
|
|
|
2024-05-05 19:39:35 +02:00
|
|
|
|
maxHeight = helpers.defaultNullOpts.mkNullable (types.numbers.between 0.0 1.0) "0.8" ''
|
|
|
|
|
Defines float window height.
|
|
|
|
|
'';
|
2023-08-10 18:35:32 +02:00
|
|
|
|
|
2024-05-05 19:39:35 +02:00
|
|
|
|
openLink = helpers.defaultNullOpts.mkStr "gx" "Key for opening links.";
|
2021-02-10 20:56:21 +00:00
|
|
|
|
|
2024-05-05 19:39:35 +02:00
|
|
|
|
openCmd = helpers.defaultNullOpts.mkStr "!chrome" "cmd for opening links.";
|
|
|
|
|
};
|
2023-08-10 18:35:32 +02:00
|
|
|
|
|
2024-05-05 19:39:35 +02:00
|
|
|
|
diagnostic = {
|
|
|
|
|
showCodeAction = helpers.defaultNullOpts.mkBool true ''
|
|
|
|
|
Show code action in diagnostic jump window.
|
|
|
|
|
It’s useful. Suggested to set to `true`.
|
|
|
|
|
'';
|
2023-08-10 18:35:32 +02:00
|
|
|
|
|
2024-05-05 19:39:35 +02:00
|
|
|
|
showLayout = helpers.defaultNullOpts.mkStr "float" ''
|
|
|
|
|
Config layout of diagnostic window not jump window.
|
|
|
|
|
'';
|
2023-08-10 18:35:32 +02:00
|
|
|
|
|
2024-05-05 19:39:35 +02:00
|
|
|
|
showNormalHeight = helpers.defaultNullOpts.mkInt 10 ''
|
|
|
|
|
Show window height when diagnostic show window layout is normal.
|
|
|
|
|
'';
|
2023-08-10 18:35:32 +02:00
|
|
|
|
|
2024-05-05 19:39:35 +02:00
|
|
|
|
jumpNumShortcut = helpers.defaultNullOpts.mkBool true ''
|
|
|
|
|
Enable number shortcuts to execute code action quickly.
|
|
|
|
|
'';
|
2023-08-10 18:35:32 +02:00
|
|
|
|
|
2024-05-05 19:39:35 +02:00
|
|
|
|
maxWidth = helpers.defaultNullOpts.mkNullable (types.numbers.between 0.0 1.0) "0.8" ''
|
|
|
|
|
Diagnostic jump window max width.
|
|
|
|
|
'';
|
2023-08-10 18:35:32 +02:00
|
|
|
|
|
2024-05-05 19:39:35 +02:00
|
|
|
|
maxHeight = helpers.defaultNullOpts.mkNullable (types.numbers.between 0.0 1.0) "0.6" ''
|
|
|
|
|
Diagnostic jump window max height.
|
|
|
|
|
'';
|
2023-08-10 18:35:32 +02:00
|
|
|
|
|
2024-05-05 19:39:35 +02:00
|
|
|
|
maxShowWidth = helpers.defaultNullOpts.mkNullable (types.numbers.between 0.0 1.0) "0.9" ''
|
|
|
|
|
Show window max width when layout is float.
|
|
|
|
|
'';
|
2023-08-10 18:35:32 +02:00
|
|
|
|
|
2024-05-05 19:39:35 +02:00
|
|
|
|
maxShowHeight = helpers.defaultNullOpts.mkNullable (types.numbers.between 0.0 1.0) "0.6" ''
|
|
|
|
|
Show window max height when layout is float.
|
|
|
|
|
'';
|
2023-08-10 18:35:32 +02:00
|
|
|
|
|
2024-05-05 19:39:35 +02:00
|
|
|
|
textHlFollow = helpers.defaultNullOpts.mkBool true ''
|
|
|
|
|
Diagnostic jump window text highlight follow diagnostic type.
|
|
|
|
|
'';
|
2023-08-10 18:35:32 +02:00
|
|
|
|
|
2024-05-05 19:39:35 +02:00
|
|
|
|
borderFollow = helpers.defaultNullOpts.mkBool true ''
|
|
|
|
|
Diagnostic jump window border follow diagnostic type.
|
|
|
|
|
'';
|
2023-08-10 18:35:32 +02:00
|
|
|
|
|
2024-05-05 19:39:35 +02:00
|
|
|
|
extendRelatedInformation = helpers.defaultNullOpts.mkBool false ''
|
|
|
|
|
When have `relatedInformation`, diagnostic message is extended to show it.
|
|
|
|
|
'';
|
2023-08-10 18:35:32 +02:00
|
|
|
|
|
2024-05-05 19:39:35 +02:00
|
|
|
|
diagnosticOnlyCurrent = helpers.defaultNullOpts.mkBool false ''
|
|
|
|
|
Only show diagnostic virtual text on the current line.
|
|
|
|
|
'';
|
2023-08-10 18:35:32 +02:00
|
|
|
|
|
2024-05-05 19:39:35 +02:00
|
|
|
|
keys = {
|
|
|
|
|
execAction = mkKeymapOption "o" "Execute action (in jump window).";
|
2023-08-10 18:35:32 +02:00
|
|
|
|
|
2024-05-05 19:39:35 +02:00
|
|
|
|
quit = mkKeymapOption "q" "Quit key for the jump window.";
|
2023-08-10 18:35:32 +02:00
|
|
|
|
|
2024-05-05 19:39:35 +02:00
|
|
|
|
toggleOrJump = mkKeymapOption "<CR>" ''
|
|
|
|
|
Toggle or jump to position when in `diagnostic_show` window.
|
2023-08-10 18:35:32 +02:00
|
|
|
|
'';
|
|
|
|
|
|
2024-05-05 19:39:35 +02:00
|
|
|
|
quitInShow =
|
|
|
|
|
mkKeymapOption
|
|
|
|
|
[
|
|
|
|
|
"q"
|
|
|
|
|
"<ESC>"
|
|
|
|
|
]
|
|
|
|
|
''
|
|
|
|
|
Quit key for the diagnostic_show window.
|
|
|
|
|
'';
|
2021-02-10 20:56:21 +00:00
|
|
|
|
};
|
2024-05-05 19:39:35 +02:00
|
|
|
|
};
|
2021-02-10 20:56:21 +00:00
|
|
|
|
|
2024-05-05 19:39:35 +02:00
|
|
|
|
codeAction = {
|
|
|
|
|
numShortcut = helpers.defaultNullOpts.mkBool true ''
|
|
|
|
|
Whether number shortcut for code actions are enabled.
|
|
|
|
|
'';
|
2023-08-10 18:35:32 +02:00
|
|
|
|
|
2024-05-05 19:39:35 +02:00
|
|
|
|
showServerName = helpers.defaultNullOpts.mkBool false ''
|
|
|
|
|
Show language server name.
|
|
|
|
|
'';
|
2023-08-10 18:35:32 +02:00
|
|
|
|
|
2024-05-05 19:39:35 +02:00
|
|
|
|
extendGitSigns = helpers.defaultNullOpts.mkBool false ''
|
|
|
|
|
Extend gitsigns plugin diff action.
|
|
|
|
|
'';
|
2023-08-10 18:35:32 +02:00
|
|
|
|
|
2024-05-05 19:39:35 +02:00
|
|
|
|
onlyInCursor = helpers.defaultNullOpts.mkBool true "";
|
2021-02-10 20:56:21 +00:00
|
|
|
|
|
2024-05-05 19:39:35 +02:00
|
|
|
|
keys = {
|
|
|
|
|
quit = mkKeymapOption "q" "Quit the float window.";
|
2023-08-10 18:35:32 +02:00
|
|
|
|
|
2024-05-05 19:39:35 +02:00
|
|
|
|
exec = mkKeymapOption "<CR>" "Execute action.";
|
2021-02-10 20:56:21 +00:00
|
|
|
|
};
|
2024-05-05 19:39:35 +02:00
|
|
|
|
};
|
2021-02-10 20:56:21 +00:00
|
|
|
|
|
2024-05-05 19:39:35 +02:00
|
|
|
|
lightbulb = {
|
|
|
|
|
enable = helpers.defaultNullOpts.mkBool true "Enable lightbulb.";
|
2023-08-10 18:35:32 +02:00
|
|
|
|
|
2024-05-05 19:39:35 +02:00
|
|
|
|
sign = helpers.defaultNullOpts.mkBool true "Show sign in status column.";
|
2023-08-10 18:35:32 +02:00
|
|
|
|
|
2024-05-05 19:39:35 +02:00
|
|
|
|
debounce = helpers.defaultNullOpts.mkInt 10 "Timer debounce.";
|
2023-08-10 18:35:32 +02:00
|
|
|
|
|
2024-05-05 19:39:35 +02:00
|
|
|
|
signPriority = helpers.defaultNullOpts.mkInt 40 "Sign priority.";
|
2023-08-10 18:35:32 +02:00
|
|
|
|
|
2024-05-05 19:39:35 +02:00
|
|
|
|
virtualText = helpers.defaultNullOpts.mkBool true "Show virtual text at the end of line.";
|
|
|
|
|
};
|
2021-02-10 20:56:21 +00:00
|
|
|
|
|
2024-05-05 19:39:35 +02:00
|
|
|
|
scrollPreview = {
|
|
|
|
|
scrollDown = mkKeymapOption "<C-f>" "Scroll down.";
|
2023-08-10 18:35:32 +02:00
|
|
|
|
|
2024-05-05 19:39:35 +02:00
|
|
|
|
scrollUp = mkKeymapOption "<C-b>" "Scroll up.";
|
|
|
|
|
};
|
2023-08-10 18:35:32 +02:00
|
|
|
|
|
2024-05-05 19:39:35 +02:00
|
|
|
|
finder = {
|
|
|
|
|
maxHeight = helpers.defaultNullOpts.mkNullable (types.numbers.between 0.0 1.0) "0.5" ''
|
|
|
|
|
`max_height` of the finder window (float layout).
|
|
|
|
|
'';
|
|
|
|
|
|
|
|
|
|
leftWidth = helpers.defaultNullOpts.mkNullable (types.numbers.between 0.0 1.0) "0.3" ''
|
|
|
|
|
Width of the left finder window (float layout).
|
|
|
|
|
'';
|
|
|
|
|
|
|
|
|
|
rightWidth = helpers.defaultNullOpts.mkNullable (types.numbers.between 0.0 1.0) "0.3" ''
|
|
|
|
|
Width of the right finder window (float layout).
|
|
|
|
|
'';
|
|
|
|
|
|
|
|
|
|
methods = helpers.defaultNullOpts.mkNullable (with types; attrsOf str) "{}" ''
|
|
|
|
|
Keys are alias of LSP methods.
|
|
|
|
|
Values are LSP methods, which you want show in finder.
|
|
|
|
|
|
|
|
|
|
Example:
|
|
|
|
|
```nix
|
|
|
|
|
{
|
|
|
|
|
tyd = "textDocument/typeDefinition";
|
|
|
|
|
}
|
|
|
|
|
```
|
|
|
|
|
'';
|
|
|
|
|
|
|
|
|
|
default = helpers.defaultNullOpts.mkStr "ref+imp" ''
|
|
|
|
|
Default search results shown, `ref` for "references" and `imp` for "implementation".
|
|
|
|
|
'';
|
|
|
|
|
|
|
|
|
|
layout =
|
|
|
|
|
helpers.defaultNullOpts.mkEnumFirstDefault
|
|
|
|
|
[
|
|
|
|
|
"float"
|
|
|
|
|
"normal"
|
|
|
|
|
]
|
|
|
|
|
''
|
|
|
|
|
`normal` will use the normal layout window priority is lower than command layout.
|
|
|
|
|
'';
|
2023-08-10 18:35:32 +02:00
|
|
|
|
|
2024-05-05 19:39:35 +02:00
|
|
|
|
silent = helpers.defaultNullOpts.mkBool false ''
|
|
|
|
|
If it’s true, it will disable show the no response message.
|
|
|
|
|
'';
|
2023-08-10 18:35:32 +02:00
|
|
|
|
|
2024-05-05 19:39:35 +02:00
|
|
|
|
filter = helpers.defaultNullOpts.mkNullable (with types; attrsOf str) "{}" ''
|
|
|
|
|
Keys are LSP methods.
|
|
|
|
|
Values are a filter handler.
|
|
|
|
|
Function parameter are `client_id` and `result`.
|
|
|
|
|
'';
|
2023-08-10 18:35:32 +02:00
|
|
|
|
|
2024-05-05 19:39:35 +02:00
|
|
|
|
keys = {
|
|
|
|
|
shuttle = mkKeymapOption "[w" "Shuttle between the finder layout window.";
|
2023-08-10 18:35:32 +02:00
|
|
|
|
|
2024-05-05 19:39:35 +02:00
|
|
|
|
toggleOrOpen = mkKeymapOption "o" "Toggle expand or open.";
|
2023-08-10 18:35:32 +02:00
|
|
|
|
|
2024-05-05 19:39:35 +02:00
|
|
|
|
vsplit = mkKeymapOption "s" "Open in vsplit.";
|
2023-08-10 18:35:32 +02:00
|
|
|
|
|
2024-05-05 19:39:35 +02:00
|
|
|
|
split = mkKeymapOption "i" "Open in split.";
|
2023-08-10 18:35:32 +02:00
|
|
|
|
|
2024-05-05 19:39:35 +02:00
|
|
|
|
tabe = mkKeymapOption "t" "Open in tabe.";
|
2023-08-10 18:35:32 +02:00
|
|
|
|
|
2024-05-05 19:39:35 +02:00
|
|
|
|
tabnew = mkKeymapOption "r" "Open in new tab.";
|
2023-08-10 18:35:32 +02:00
|
|
|
|
|
2024-05-05 19:39:35 +02:00
|
|
|
|
quit = mkKeymapOption "q" "Quit the finder, only works in layout left window.";
|
|
|
|
|
|
|
|
|
|
close = mkKeymapOption "<C-c>k" "Close finder.";
|
2021-02-10 20:56:21 +00:00
|
|
|
|
};
|
2024-05-05 19:39:35 +02:00
|
|
|
|
};
|
2021-02-10 20:56:21 +00:00
|
|
|
|
|
2024-05-05 19:39:35 +02:00
|
|
|
|
definition = {
|
|
|
|
|
width = helpers.defaultNullOpts.mkNullable (types.numbers.between 0.0 1.0) "0.6" ''
|
|
|
|
|
Defines float window width.
|
|
|
|
|
'';
|
2023-08-10 18:35:32 +02:00
|
|
|
|
|
2024-05-05 19:39:35 +02:00
|
|
|
|
height = helpers.defaultNullOpts.mkNullable (types.numbers.between 0.0 1.0) "0.5" ''
|
|
|
|
|
Defines float window height.
|
|
|
|
|
'';
|
2023-08-10 18:35:32 +02:00
|
|
|
|
|
2024-05-05 19:39:35 +02:00
|
|
|
|
keys = {
|
|
|
|
|
edit = mkKeymapOption "<C-c>o" "edit";
|
2023-08-10 18:35:32 +02:00
|
|
|
|
|
2024-05-05 19:39:35 +02:00
|
|
|
|
vsplit = mkKeymapOption "<C-c>v" "vsplit";
|
2023-08-10 18:35:32 +02:00
|
|
|
|
|
2024-05-05 19:39:35 +02:00
|
|
|
|
split = mkKeymapOption "<C-c>i" "split";
|
2023-08-10 18:35:32 +02:00
|
|
|
|
|
2024-05-05 19:39:35 +02:00
|
|
|
|
tabe = mkKeymapOption "<C-c>t" "tabe";
|
2023-08-10 18:35:32 +02:00
|
|
|
|
|
2024-05-05 19:39:35 +02:00
|
|
|
|
quit = mkKeymapOption "q" "quit";
|
2023-08-10 18:35:32 +02:00
|
|
|
|
|
2024-05-05 19:39:35 +02:00
|
|
|
|
close = mkKeymapOption "<C-c>k" "close";
|
2021-02-10 20:56:21 +00:00
|
|
|
|
};
|
2024-05-05 19:39:35 +02:00
|
|
|
|
};
|
2021-02-10 20:56:21 +00:00
|
|
|
|
|
2024-05-05 19:39:35 +02:00
|
|
|
|
rename = {
|
|
|
|
|
inSelect = helpers.defaultNullOpts.mkBool true ''
|
|
|
|
|
Default is `true`.
|
|
|
|
|
Whether the name is selected when the float opens.
|
2023-08-10 18:35:32 +02:00
|
|
|
|
|
2024-05-05 19:39:35 +02:00
|
|
|
|
In some situation, just like want to change one or less characters, `inSelect` is not so
|
|
|
|
|
useful.
|
|
|
|
|
You can tell the Lspsaga to start in normal mode using an extra argument like
|
|
|
|
|
`:Lspsaga lsp_rename mode=n`.
|
|
|
|
|
'';
|
2023-08-10 18:35:32 +02:00
|
|
|
|
|
2024-05-05 19:39:35 +02:00
|
|
|
|
autoSave = helpers.defaultNullOpts.mkBool false ''
|
|
|
|
|
Auto save file when the rename is done.
|
|
|
|
|
'';
|
2023-08-10 18:35:32 +02:00
|
|
|
|
|
2024-05-05 19:39:35 +02:00
|
|
|
|
projectMaxWidth = helpers.defaultNullOpts.mkNullable (types.numbers.between 0.0
|
|
|
|
|
1.0
|
|
|
|
|
) "0.5" "Width for the `project_replace` float window.";
|
2023-08-10 18:35:32 +02:00
|
|
|
|
|
2024-05-05 19:39:35 +02:00
|
|
|
|
projectMaxHeight = helpers.defaultNullOpts.mkNullable (types.numbers.between 0.0
|
|
|
|
|
1.0
|
|
|
|
|
) "0.5" "Height for the `project_replace` float window.";
|
2023-08-10 18:35:32 +02:00
|
|
|
|
|
2024-05-05 19:39:35 +02:00
|
|
|
|
keys = {
|
|
|
|
|
quit = mkKeymapOption "<C-k>" "Quit rename window or `project_replace` window.";
|
2023-08-10 18:35:32 +02:00
|
|
|
|
|
2024-05-05 19:39:35 +02:00
|
|
|
|
exec = mkKeymapOption "<CR>" ''
|
|
|
|
|
Execute rename in `rename` window or execute replace in `project_replace` window.
|
|
|
|
|
'';
|
2023-08-10 18:35:32 +02:00
|
|
|
|
|
2024-05-05 19:39:35 +02:00
|
|
|
|
select = mkKeymapOption "x" ''
|
|
|
|
|
Select or cancel select item in `project_replace` float window.
|
|
|
|
|
'';
|
2021-02-10 20:56:21 +00:00
|
|
|
|
};
|
2024-05-05 19:39:35 +02:00
|
|
|
|
};
|
2021-02-10 20:56:21 +00:00
|
|
|
|
|
2024-05-05 19:39:35 +02:00
|
|
|
|
symbolInWinbar = {
|
|
|
|
|
enable = helpers.defaultNullOpts.mkBool true "Enable.";
|
2023-08-10 18:35:32 +02:00
|
|
|
|
|
2024-05-05 19:39:35 +02:00
|
|
|
|
separator = helpers.defaultNullOpts.mkStr " › " "Separator character.";
|
2023-08-10 18:35:32 +02:00
|
|
|
|
|
2024-05-05 19:39:35 +02:00
|
|
|
|
hideKeyword = helpers.defaultNullOpts.mkBool false "Hide keyword.";
|
2023-08-10 18:35:32 +02:00
|
|
|
|
|
2024-05-05 19:39:35 +02:00
|
|
|
|
showFile = helpers.defaultNullOpts.mkBool true "Show file.";
|
2023-08-10 18:35:32 +02:00
|
|
|
|
|
2024-05-05 19:39:35 +02:00
|
|
|
|
folderLevel = helpers.defaultNullOpts.mkInt 1 "Folder level.";
|
2023-08-10 18:35:32 +02:00
|
|
|
|
|
2024-05-05 19:39:35 +02:00
|
|
|
|
colorMode = helpers.defaultNullOpts.mkBool true "Color mode.";
|
2023-08-10 18:35:32 +02:00
|
|
|
|
|
2024-05-05 19:39:35 +02:00
|
|
|
|
delay = helpers.defaultNullOpts.mkInt 300 "Delay.";
|
|
|
|
|
};
|
2021-02-10 20:56:21 +00:00
|
|
|
|
|
2024-05-05 19:39:35 +02:00
|
|
|
|
outline = {
|
|
|
|
|
winPosition = helpers.defaultNullOpts.mkStr "right" "`right` window position.";
|
2023-08-10 18:35:32 +02:00
|
|
|
|
|
2024-05-05 19:39:35 +02:00
|
|
|
|
winWidth = helpers.defaultNullOpts.mkInt 30 "Window width.";
|
2023-08-10 18:35:32 +02:00
|
|
|
|
|
2024-05-05 19:39:35 +02:00
|
|
|
|
autoPreview = helpers.defaultNullOpts.mkBool true ''
|
|
|
|
|
Auto preview when cursor moved in outline window.
|
|
|
|
|
'';
|
2023-08-10 18:35:32 +02:00
|
|
|
|
|
2024-05-05 19:39:35 +02:00
|
|
|
|
detail = helpers.defaultNullOpts.mkBool true "Show detail.";
|
2023-08-10 18:35:32 +02:00
|
|
|
|
|
2024-05-05 19:39:35 +02:00
|
|
|
|
autoClose = helpers.defaultNullOpts.mkBool true ''
|
|
|
|
|
Auto close itself when outline window is last window.
|
|
|
|
|
'';
|
2023-08-10 18:35:32 +02:00
|
|
|
|
|
2024-05-05 19:39:35 +02:00
|
|
|
|
closeAfterJump = helpers.defaultNullOpts.mkBool false "Close after jump.";
|
2021-02-10 20:56:21 +00:00
|
|
|
|
|
2024-05-05 19:39:35 +02:00
|
|
|
|
layout =
|
|
|
|
|
helpers.defaultNullOpts.mkEnumFirstDefault
|
|
|
|
|
[
|
|
|
|
|
"normal"
|
|
|
|
|
"float"
|
|
|
|
|
]
|
|
|
|
|
''
|
|
|
|
|
`float` or `normal`.
|
|
|
|
|
Default is normal.
|
|
|
|
|
If set to float, above options will ignored.
|
|
|
|
|
'';
|
2023-08-10 18:35:32 +02:00
|
|
|
|
|
2024-05-05 19:39:35 +02:00
|
|
|
|
maxHeight = helpers.defaultNullOpts.mkNullable (types.numbers.between 0.0 1.0) "0.5" ''
|
|
|
|
|
Height of outline float layout.
|
|
|
|
|
'';
|
2023-08-10 18:35:32 +02:00
|
|
|
|
|
2024-05-05 19:39:35 +02:00
|
|
|
|
leftWidth = helpers.defaultNullOpts.mkNullable (types.numbers.between 0.0 1.0) "0.3" ''
|
|
|
|
|
Width of outline float layout left window.
|
|
|
|
|
'';
|
2023-08-10 18:35:32 +02:00
|
|
|
|
|
2024-05-05 19:39:35 +02:00
|
|
|
|
keys = {
|
|
|
|
|
toggleOrJump = mkKeymapOption "o" "Toggle or jump.";
|
2023-08-10 18:35:32 +02:00
|
|
|
|
|
2024-05-05 19:39:35 +02:00
|
|
|
|
quit = mkKeymapOption "q" "Quit outline window.";
|
2023-08-10 18:35:32 +02:00
|
|
|
|
|
2024-05-05 19:39:35 +02:00
|
|
|
|
jump = mkKeymapOption "e" "Jump to pos even on a expand/collapse node.";
|
2023-02-20 11:42:13 +01:00
|
|
|
|
};
|
2024-05-05 19:39:35 +02:00
|
|
|
|
};
|
2023-01-22 03:32:08 +00:00
|
|
|
|
|
2024-05-05 19:39:35 +02:00
|
|
|
|
callhierarchy = {
|
|
|
|
|
layout =
|
|
|
|
|
helpers.defaultNullOpts.mkEnumFirstDefault
|
|
|
|
|
[
|
|
|
|
|
"float"
|
|
|
|
|
"normal"
|
|
|
|
|
]
|
|
|
|
|
''
|
|
|
|
|
- Layout `normal` and `float`.
|
|
|
|
|
- Or you can pass in an extra argument like `:Lspsaga incoming_calls ++normal`, which
|
|
|
|
|
overrides this option.
|
|
|
|
|
'';
|
2023-08-10 18:35:32 +02:00
|
|
|
|
|
2024-05-05 19:39:35 +02:00
|
|
|
|
keys = {
|
|
|
|
|
edit = mkKeymapOption "e" "Edit (open) file.";
|
2023-08-10 18:35:32 +02:00
|
|
|
|
|
2024-05-05 19:39:35 +02:00
|
|
|
|
vsplit = mkKeymapOption "s" "vsplit";
|
2023-08-10 18:35:32 +02:00
|
|
|
|
|
2024-05-05 19:39:35 +02:00
|
|
|
|
split = mkKeymapOption "i" "split";
|
2023-08-10 18:35:32 +02:00
|
|
|
|
|
2024-05-05 19:39:35 +02:00
|
|
|
|
tabe = mkKeymapOption "t" "Open in new tab.";
|
2023-08-10 18:35:32 +02:00
|
|
|
|
|
2024-05-05 19:39:35 +02:00
|
|
|
|
close = mkKeymapOption "<C-c>k" "Close layout.";
|
2023-08-10 18:35:32 +02:00
|
|
|
|
|
2024-05-05 19:39:35 +02:00
|
|
|
|
quit = mkKeymapOption "q" "Quit layout.";
|
2023-08-10 18:35:32 +02:00
|
|
|
|
|
2024-05-05 19:39:35 +02:00
|
|
|
|
shuttle = mkKeymapOption "[w" "Shuttle between the layout left and right.";
|
2023-08-10 18:35:32 +02:00
|
|
|
|
|
2024-05-05 19:39:35 +02:00
|
|
|
|
toggleOrReq = mkKeymapOption "u" "Toggle or do request.";
|
2021-02-10 20:56:21 +00:00
|
|
|
|
};
|
2024-05-05 19:39:35 +02:00
|
|
|
|
};
|
2021-02-10 20:56:21 +00:00
|
|
|
|
|
2024-05-05 19:39:35 +02:00
|
|
|
|
implement = {
|
|
|
|
|
enable = helpers.defaultNullOpts.mkBool true ''
|
|
|
|
|
When buffer has instances of the interface type, Lspsaga will show extra information for
|
|
|
|
|
it.
|
|
|
|
|
'';
|
2021-02-10 20:56:21 +00:00
|
|
|
|
|
2024-05-05 19:39:35 +02:00
|
|
|
|
sign = helpers.defaultNullOpts.mkBool true "Show sign in status column.";
|
2023-08-10 18:35:32 +02:00
|
|
|
|
|
2024-05-05 19:39:35 +02:00
|
|
|
|
virtualText = helpers.defaultNullOpts.mkBool true "Show virtual text at the end of line.";
|
2021-02-10 20:56:21 +00:00
|
|
|
|
|
2024-05-05 19:39:35 +02:00
|
|
|
|
priority = helpers.defaultNullOpts.mkInt 100 "Sign priority.";
|
|
|
|
|
};
|
2023-01-21 18:12:09 +01:00
|
|
|
|
|
2024-05-05 19:39:35 +02:00
|
|
|
|
beacon = {
|
|
|
|
|
enable = helpers.defaultNullOpts.mkBool true ''
|
|
|
|
|
In Lspsaga, some commands jump around in buffer(s).
|
|
|
|
|
With beacon enabled, it will show a beacon to tell you where the cursor is.
|
|
|
|
|
'';
|
2023-08-10 18:35:32 +02:00
|
|
|
|
|
2024-05-05 19:39:35 +02:00
|
|
|
|
frequency = helpers.defaultNullOpts.mkInt 7 "Frequency.";
|
2023-08-10 18:35:32 +02:00
|
|
|
|
};
|
2024-05-05 19:39:35 +02:00
|
|
|
|
};
|
2023-08-10 18:35:32 +02:00
|
|
|
|
};
|
2023-01-21 18:12:09 +01:00
|
|
|
|
|
2023-08-10 18:35:32 +02:00
|
|
|
|
config = mkIf cfg.enable {
|
2024-05-05 19:39:35 +02:00
|
|
|
|
extraPlugins = [
|
|
|
|
|
cfg.package
|
|
|
|
|
] ++ (optional (cfg.ui.devicon == null || cfg.ui.devicon) pkgs.vimPlugins.nvim-web-devicons);
|
|
|
|
|
|
|
|
|
|
warnings = mkIf (
|
|
|
|
|
# https://nvimdev.github.io/lspsaga/implement/#default-options
|
|
|
|
|
(isBool cfg.implement.enable && cfg.implement.enable)
|
|
|
|
|
&& (isBool cfg.symbolInWinbar.enable && !cfg.symbolInWinbar.enable)
|
|
|
|
|
) [ "You have enabled the `implement` module but it requires `symbolInWinbar` to be enabled." ];
|
|
|
|
|
|
|
|
|
|
extraConfigLua =
|
|
|
|
|
let
|
|
|
|
|
setupOptions =
|
|
|
|
|
with cfg;
|
|
|
|
|
{
|
|
|
|
|
ui = with ui; {
|
2023-08-10 18:35:32 +02:00
|
|
|
|
inherit
|
2024-05-05 19:39:35 +02:00
|
|
|
|
border
|
|
|
|
|
devicon
|
|
|
|
|
title
|
|
|
|
|
expand
|
|
|
|
|
collapse
|
2023-08-10 18:35:32 +02:00
|
|
|
|
;
|
2024-05-05 19:39:35 +02:00
|
|
|
|
code_action = codeAction;
|
|
|
|
|
inherit actionfix lines kind;
|
|
|
|
|
imp_sign = impSign;
|
2023-08-10 18:35:32 +02:00
|
|
|
|
};
|
2024-05-05 19:39:35 +02:00
|
|
|
|
hover = with hover; {
|
|
|
|
|
max_width = maxWidth;
|
|
|
|
|
max_height = maxHeight;
|
|
|
|
|
open_link = openLink;
|
|
|
|
|
open_cmd = openCmd;
|
2023-08-10 18:35:32 +02:00
|
|
|
|
};
|
2024-05-05 19:39:35 +02:00
|
|
|
|
diagnostic = with diagnostic; {
|
|
|
|
|
show_code_action = showCodeAction;
|
|
|
|
|
show_layout = showLayout;
|
|
|
|
|
show_normal_height = showNormalHeight;
|
|
|
|
|
jump_num_shortcut = jumpNumShortcut;
|
|
|
|
|
max_width = maxWidth;
|
|
|
|
|
max_height = maxHeight;
|
|
|
|
|
max_show_width = maxShowWidth;
|
|
|
|
|
max_show_height = maxShowHeight;
|
|
|
|
|
text_hl_follow = textHlFollow;
|
|
|
|
|
border_follow = borderFollow;
|
|
|
|
|
extend_relatedInformation = extendRelatedInformation;
|
|
|
|
|
diagnostic_only_current = diagnosticOnlyCurrent;
|
|
|
|
|
keys = with keys; {
|
|
|
|
|
exec_action = execAction;
|
|
|
|
|
inherit quit;
|
|
|
|
|
toggle_or_jump = toggleOrJump;
|
|
|
|
|
quit_in_show = quitInShow;
|
|
|
|
|
};
|
2023-08-10 18:35:32 +02:00
|
|
|
|
};
|
2024-05-05 19:39:35 +02:00
|
|
|
|
code_action = with codeAction; {
|
|
|
|
|
num_shortcut = numShortcut;
|
|
|
|
|
show_server_name = showServerName;
|
|
|
|
|
extend_gitsigns = extendGitSigns;
|
|
|
|
|
only_in_cursor = onlyInCursor;
|
|
|
|
|
keys = with keys; {
|
|
|
|
|
inherit quit exec;
|
|
|
|
|
};
|
|
|
|
|
};
|
|
|
|
|
lightbulb = with lightbulb; {
|
|
|
|
|
inherit enable sign debounce;
|
|
|
|
|
sign_priority = signPriority;
|
|
|
|
|
virtual_text = virtualText;
|
2023-08-10 18:35:32 +02:00
|
|
|
|
};
|
2024-05-05 19:39:35 +02:00
|
|
|
|
scroll_preview = with scrollPreview; {
|
|
|
|
|
scroll_down = scrollDown;
|
|
|
|
|
scroll_up = scrollUp;
|
|
|
|
|
};
|
|
|
|
|
finder = with finder; {
|
|
|
|
|
max_height = maxHeight;
|
|
|
|
|
left_width = leftWidth;
|
|
|
|
|
right_width = rightWidth;
|
2023-08-10 18:35:32 +02:00
|
|
|
|
inherit
|
2024-05-05 19:39:35 +02:00
|
|
|
|
methods
|
|
|
|
|
default
|
|
|
|
|
layout
|
|
|
|
|
silent
|
2023-08-10 18:35:32 +02:00
|
|
|
|
;
|
2024-05-05 19:39:35 +02:00
|
|
|
|
# Keys are LSP methods. Values are a filter handler.
|
|
|
|
|
filter = helpers.ifNonNull' filter (mapAttrs (n: helpers.mkRaw) filter);
|
|
|
|
|
keys = with keys; {
|
|
|
|
|
inherit shuttle;
|
|
|
|
|
toggle_or_open = toggleOrOpen;
|
|
|
|
|
inherit
|
|
|
|
|
vsplit
|
|
|
|
|
split
|
|
|
|
|
tabe
|
|
|
|
|
tabnew
|
|
|
|
|
quit
|
|
|
|
|
close
|
|
|
|
|
;
|
|
|
|
|
};
|
|
|
|
|
};
|
|
|
|
|
definition = with definition; {
|
|
|
|
|
inherit width height;
|
|
|
|
|
keys = with keys; {
|
|
|
|
|
inherit
|
|
|
|
|
edit
|
|
|
|
|
vsplit
|
|
|
|
|
split
|
|
|
|
|
tabe
|
|
|
|
|
quit
|
|
|
|
|
close
|
|
|
|
|
;
|
|
|
|
|
};
|
|
|
|
|
};
|
|
|
|
|
rename = with rename; {
|
|
|
|
|
in_select = inSelect;
|
|
|
|
|
auto_save = autoSave;
|
|
|
|
|
project_max_width = projectMaxWidth;
|
|
|
|
|
project_max_height = projectMaxHeight;
|
|
|
|
|
keys = with keys; {
|
|
|
|
|
inherit quit exec select;
|
|
|
|
|
};
|
|
|
|
|
};
|
|
|
|
|
symbol_in_winbar = with symbolInWinbar; {
|
|
|
|
|
inherit enable separator;
|
|
|
|
|
hide_keyword = hideKeyword;
|
|
|
|
|
show_file = showFile;
|
|
|
|
|
folder_level = folderLevel;
|
|
|
|
|
color_mode = colorMode;
|
|
|
|
|
dely = delay;
|
|
|
|
|
};
|
|
|
|
|
outline = with outline; {
|
|
|
|
|
win_position = winPosition;
|
|
|
|
|
win_width = winWidth;
|
|
|
|
|
auto_preview = autoPreview;
|
|
|
|
|
inherit detail;
|
|
|
|
|
auto_close = autoClose;
|
|
|
|
|
close_after_jump = closeAfterJump;
|
|
|
|
|
inherit layout;
|
|
|
|
|
max_height = maxHeight;
|
|
|
|
|
left_width = leftWidth;
|
|
|
|
|
keys = with keys; {
|
|
|
|
|
toggle_or_jump = toggleOrJump;
|
|
|
|
|
inherit quit jump;
|
|
|
|
|
};
|
|
|
|
|
};
|
|
|
|
|
callhierarchy = with callhierarchy; {
|
|
|
|
|
inherit layout;
|
|
|
|
|
keys = with keys; {
|
|
|
|
|
inherit
|
|
|
|
|
edit
|
|
|
|
|
vsplit
|
|
|
|
|
split
|
|
|
|
|
tabe
|
|
|
|
|
close
|
|
|
|
|
quit
|
|
|
|
|
shuttle
|
|
|
|
|
;
|
|
|
|
|
toggle_or_req = toggleOrReq;
|
|
|
|
|
};
|
|
|
|
|
};
|
|
|
|
|
implement = with implement; {
|
|
|
|
|
inherit enable sign;
|
|
|
|
|
virtual_text = virtualText;
|
|
|
|
|
inherit priority;
|
|
|
|
|
};
|
|
|
|
|
beacon = with beacon; {
|
|
|
|
|
inherit enable frequency;
|
2023-08-10 18:35:32 +02:00
|
|
|
|
};
|
2024-05-05 19:39:35 +02:00
|
|
|
|
}
|
|
|
|
|
// cfg.extraOptions;
|
|
|
|
|
in
|
|
|
|
|
''
|
|
|
|
|
require('lspsaga').setup(${helpers.toLuaObject setupOptions})
|
|
|
|
|
'';
|
2023-08-10 18:35:32 +02:00
|
|
|
|
};
|
2021-02-10 20:56:21 +00:00
|
|
|
|
}
|