return { "glepnir/lspsaga.nvim", event = "BufRead", dependencies = { "nvim-tree/nvim-web-devicons", }, config = function() local colors, kind if os.getenv("GTK_THEME") == "Catppuccin-Frappe-Pink" or os.getenv("GTK_THEME") == "Catppuccin-Latte-Green" then colors = require("catppuccin.groups.integrations.lsp_saga").custom_colors() kind = require("catppuccin.groups.integrations.lsp_saga").custom_kind() else colors = { normal_bg = "#3b4252" } end require("lspsaga").setup({ ui = { colors = colors, kind = kind, border = "single", }, outline = { win_width = 25, }, }) --Switch theme again after lspsaga loaded from if os.getenv("GTK_THEME") == "Nordic" then vim.cmd([[ colorscheme nord ]]) elseif os.getenv("GTK_THEME") == "Catppuccin-Frappe-Pink" then vim.cmd([[colorscheme catppuccin-frappe ]]) else vim.cmd([[colorscheme catppuccin-latte ]]) end local keymap = vim.keymap.set -- Lsp finder find the symbol definition implement reference -- if there is no implement it will hide -- when you use action in finder like open vsplit then you can -- use to jump back keymap("n", "gh", "Lspsaga lsp_finder") -- Code action keymap({ "n", "v" }, "ca", "Lspsaga code_action") -- Rename keymap("n", "gr", "Lspsaga rename") -- Rename word in whole project keymap("n", "gr", "Lspsaga rename ++project") -- Peek Definition -- you can edit the definition file in this float window -- also support open/vsplit/etc operation check definition_action_keys -- support tagstack C-t jump back keymap("n", "gD", "Lspsaga peek_definition") -- Go to Definition keymap("n", "gd", "Lspsaga goto_definition") -- Show line diagnostics you can pass argument ++unfocus to make -- show_line_diagnostics float window unfocus keymap("n", "sl", "Lspsaga show_line_diagnostics") -- Show cursor diagnostic -- also like show_line_diagnostics support pass ++unfocus keymap("n", "sc", "Lspsaga show_cursor_diagnostics") -- Show buffer diagnostic keymap("n", "sb", "Lspsaga show_buf_diagnostics") -- Diagnostic jump can use `` to jump back keymap("n", "[e", "Lspsaga diagnostic_jump_prev") keymap("n", "]e", "Lspsaga diagnostic_jump_next") -- Diagnostic jump with filter like Only jump to error keymap("n", "[E", function() require("lspsaga.diagnostic"):goto_prev({ severity = vim.diagnostic.severity.ERROR }) end) keymap("n", "]E", function() require("lspsaga.diagnostic"):goto_next({ severity = vim.diagnostic.severity.ERROR }) end) -- Toggle Outline keymap("n", "o", "Lspsaga outline") -- Hover Doc -- if there has no hover will have a notify no information available -- to disable it just Lspsaga hover_doc ++quiet -- press twice it will jump into hover window --[[ keymap("n", "K", "Lspsaga hover_doc") ]] -- if you want keep hover window in right top you can use ++keep arg -- notice if you use hover with ++keep you press this keymap it will -- close the hover window .if you want jump to hover window must use -- wincmd command w keymap("n", "K", "Lspsaga hover_doc ++keep") -- Callhierarchy keymap("n", "ci", "Lspsaga incoming_calls") keymap("n", "co", "Lspsaga outgoing_calls") -- Float terminal keymap({ "n", "t" }, "", "Lspsaga term_toggle") end, }