local M = {} function M.signature() require('lsp_signature').setup { bind = true, -- This is mandatory, otherwise border config doesn't work floating_window = true, fix_pos = true, hint_enable = false, hint_prefix = ' ', hint_scheme = 'String', hi_parameter = 'Visual', transparency = 5, handler_opts = {border = 'single'}, zindex = 50, -- set to 200 to make the float window on top of others toggle_key = '' } end function M.saga() require('lspsaga').setup { debug = false, use_saga_diagnostic_sign = true, -- diagnostic sign error_sign = '', warn_sign = '', hint_sign = '', infor_sign = '', dianostic_header_icon = '  ', -- code action title icon code_action_icon = ' ', code_action_prompt = { enable = false, sign = true, sign_priority = 40, virtual_text = true }, finder_definition_icon = ' ', finder_reference_icon = ' ', max_preview_lines = 10, finder_action_keys = { open = 'o', vsplit = 's', split = 'i', quit = 'q', scroll_down = '', scroll_up = '' }, code_action_keys = { quit = 'q', exec = '' }, rename_action_keys = { quit = '', exec = '' }, definition_preview_icon = ' ', border_style = 'single', rename_prompt_prefix = '', server_filetype_map = {}, diagnostic_prefix_format = '%d. ' } end function M.lsp() require('modules.lsp.lspconfig') end function M.null_ls() require('modules.lsp.null_ls') end function M.sqls() require('sqls').setup { picker = 'telescope' } end function M.trouble() require('trouble').setup { mode = 'lsp_workspace_diagnostics', fold_open = ' ', fold_closed = '', action_keys = { open_split = {''}, open_vsplit = {''}, open_tab = {''} }, signs = { error = '', warning = '', information = '', hint = '', other = '' } } end function M.todo_comments() require('todo-comments').setup { signs = false, -- sign_priority = 8, keywords = { FIX = { icon = ' ', -- icon used for the sign, and in search results color = 'error', -- can be a hex color, or a named color (see below) alt = {'FIXME', 'BUG', 'FIXIT', 'ISSUE'}, -- a set of other keywords that all map to this FIX keywords -- signs = false, -- configure signs for some keywords individually }, TODO = {icon = ' ', color = 'info'}, HACK = {icon = ' ', color = 'warning'}, WARN = {icon = ' ', color = 'warning', alt = {'WARNING', 'XXX'}}, PERF = {icon = ' ', alt = {'OPTIM', 'PERFORMANCE', 'OPTIMIZE'}}, NOTE = {icon = ' ', color = 'hint', alt = {'INFO'}}, }, merge_keywords = true, highlight = { before = '', -- 'fg' or 'bg' or empty keyword = 'fg', -- 'fg', 'bg', 'wide' or empty. (wide is the same as bg, but will also highlight surrounding characters) after = '', -- 'fg' or 'bg' or empty pattern = [[.*<(KEYWORDS)\s*:]], -- pattern or table of patterns, used for highlightng (vim regex) comments_only = true, -- uses treesitter to match keywords in comments only max_line_len = 400, -- ignore lines longer than this exclude = {'org'} -- list of file types to exclude highlighting }, colors = { error = {'DiagnosticError', 'TSDanger', '#bf616a', '#e06c75'}, warning = {'DiagnosticWarn', 'TSWarning', '#ebcb8b', '#e5c07b'}, info = {'DiagnosticInfo', 'TSNote', '#81a1c1', '#61afef'}, hint = {'DiagnosticHint', '#88c0d0', '#56b6c2'}, default = {'Normal', '#d8dee9', '#abb2bf'} }, search = { command = 'rg', args = { '--hidden', '--color=never', '--no-heading', '--with-filename', '--line-number', '--column', }, -- regex that will be used to match keywords. -- don't replace the (KEYWORDS) placeholder pattern = [[\b(KEYWORDS):]] -- ripgrep regex -- pattern = [[\b(KEYWORDS)\b]] -- match without the extra colon. You'll likely get false positives } } end function M.symbols_outline() vim.g.symbols_outline = { highlight_hovered_item = false, show_guides = true, auto_preview = true, position = 'right', width = 30, show_numbers = false, show_relative_numbers = false, show_symbol_details = true, preview_bg_highlight = 'NormalFloat', keymaps = { -- Can be string or a table close = {'', 'q'}, goto_location = '', focus_location = 'o', hover_symbol = '', toggle_preview = 'K', rename_symbol = 'r', code_actions = 'a', }, lsp_blacklist = {}, symbol_blacklist = {}, symbols = { File = {icon = '', hl = 'TSURI'}, Module = {icon = '', hl = 'TSNamespace'}, Namespace = {icon = '', hl = 'TSNamespace'}, Package = {icon = '', hl = 'TSNamespace'}, Class = {icon = '𝓒', hl = 'TSType'}, Method = {icon = 'ƒ', hl = 'TSMethod'}, Property = {icon = '', hl = 'TSMethod'}, Field = {icon = '', hl = 'TSField'}, Constructor = {icon = '', hl = 'TSConstructor'}, Enum = {icon = 'ℰ', hl = 'TSType'}, Interface = {icon = 'ﰮ', hl = 'TSType'}, Function = {icon = '', hl = 'TSFunction'}, Variable = {icon = '', hl = 'TSConstant'}, Constant = {icon = '', hl = 'TSConstant'}, String = {icon = '𝓐', hl = 'TSString'}, Number = {icon = '#', hl = 'TSNumber'}, Boolean = {icon = '⊨', hl = 'TSBoolean'}, Array = {icon = '', hl = 'TSConstant'}, Object = {icon = '⦿', hl = 'TSType'}, Key = {icon = '🔐', hl = 'TSType'}, Null = {icon = 'NULL', hl = 'TSType'}, EnumMember = {icon = '', hl = 'TSField'}, Struct = {icon = '𝓢', hl = 'TSType'}, Event = {icon = '🗲', hl = 'TSType'}, Operator = {icon = '+', hl = 'TSOperator'}, TypeParameter = {icon = '𝙏', hl = 'TSParameter'} } } end function M.dap() local dap = require('dap') vim.fn.sign_define('DapBreakpoint', {text='', texthl='DapSignDefault'}) vim.fn.sign_define('DapLogPoint', {text='', texthl='DapSignDefault'}) vim.fn.sign_define('DapStopped', {text='ﱢ', texthl='DapSignDefault'}) vim.fn.sign_define('DapBreakpointRejected', {text='', texthl='DapSignRejected'}) require('mappings').dap() end function M.dapui() local dap, dapui = require('dap'), require('dapui') dap.listeners.after.event_initialized['dapui_config'] = function() dapui.open() end dap.listeners.before.event_terminated['dapui_config'] = function() dapui.close() end dap.listeners.before.event_exited['dapui_config'] = function() dapui.close() end require('dapui').setup { icons = {expanded = '', collapsed = ''}, mappings = { expand = {'', '<2-LeftMouse>'}, open = 'o', remove = 'd', edit = 'e', repl = 'r' }, sidebar = { elements = { -- Provide as ID strings or tables with 'id' and 'size' keys -- 'size' can be float or integer > 1 {id = 'scopes', size = 0.25}, {id = 'breakpoints', size = 0.25}, {id = 'stacks', size = 0.25}, {id = 'watches', size = 0.25}, }, size = 40, position = 'left' }, tray = { elements = {'repl'}, size = 10, position = 'bottom' }, floating = { max_height = nil, -- These can be integers or a float between 0 and 1. max_width = nil, -- Floats will be treated as percentage of your screen. border = 'single', mappings = { close = {'q', ''} } }, windows = {indent = 1} } require('mappings').dapui() end return M