-- Plugins: UI -- https://github.com/plex/vim-config return { ----------------------------------------------------------------------------- { 'nvim-tree/nvim-web-devicons', lazy = false }, { 'MunifTanjim/nui.nvim', lazy = false }, { 'plex/tabstrip.nvim', lazy = false, priority = 98, opts = true }, ----------------------------------------------------------------------------- { 'folke/noice.nvim', event = 'VeryLazy', dependencies = { 'MunifTanjim/nui.nvim', 'rcarriga/nvim-notify', 'nvim-treesitter/nvim-treesitter', }, -- stylua: ignore keys = { { '', function() require('noice').redirect(tostring(vim.fn.getcmdline())) end, mode = 'c', desc = 'Redirect Cmdline' }, { 'snl', function() require('noice').cmd('last') end, desc = 'Noice Last Message' }, { 'snh', function() require('noice').cmd('history') end, desc = 'Noice History' }, { 'sna', function() require('noice').cmd('all') end, desc = 'Noice All' }, { '', function() if not require('noice.lsp').scroll(4) then return '' end end, silent = true, expr = true, desc = 'Scroll forward', mode = {'i', 'n', 's'} }, { '', function() if not require('noice.lsp').scroll(-4) then return '' end end, silent = true, expr = true, desc = 'Scroll backward', mode = {'i', 'n', 's'}}, }, ---@type NoiceConfig opts = { lsp = { override = { ['vim.lsp.util.convert_input_to_markdown_lines'] = true, ['vim.lsp.util.stylize_markdown'] = true, ['cmp.entry.get_documentation'] = true, }, }, messages = { view_search = false, }, routes = { -- See :h ui-messages { filter = { event = 'msg_show', find = '%d+L, %d+B$' }, view = 'mini', }, { filter = { event = 'msg_show', find = '^Hunk %d+ of %d+$' }, view = 'mini', }, { filter = { event = 'notify', find = '^No code actions available$' }, view = 'mini', }, { filter = { event = 'notify', find = '^No information available$' }, opts = { skip = true }, }, { filter = { event = 'msg_show', find = '^%d+ change;' }, opts = { skip = true }, }, { filter = { event = 'msg_show', find = '^%d+ %a+ lines' }, opts = { skip = true }, }, { filter = { event = 'msg_show', find = '^%d+ lines yanked$' }, opts = { skip = true }, }, { filter = { event = 'msg_show', kind = 'emsg', find = 'E490' }, opts = { skip = true }, }, { filter = { event = 'msg_show', kind = 'quickfix' }, view = 'mini', }, { filter = { event = 'msg_show', kind = 'search_count' }, view = 'mini', }, { filter = { event = 'msg_show', kind = 'wmsg' }, view = 'mini', }, }, presets = { bottom_search = true, command_palette = true, long_message_to_split = true, lsp_doc_border = true, }, commands = { all = { view = 'split', opts = { enter = true, format = 'details' }, filter = {}, }, }, ---@type NoiceConfigViews views = { mini = { zindex = 100, win_options = { winblend = 0 }, }, }, }, }, ----------------------------------------------------------------------------- { 'stevearc/dressing.nvim', init = function() ---@diagnostic disable-next-line: duplicate-set-field vim.ui.select = function(...) require('lazy').load({ plugins = { 'dressing.nvim' } }) return vim.ui.select(...) end ---@diagnostic disable-next-line: duplicate-set-field vim.ui.input = function(...) require('lazy').load({ plugins = { 'dressing.nvim' } }) return vim.ui.input(...) end end, }, ----------------------------------------------------------------------------- { 'SmiteshP/nvim-navic', keys = { { 'tf', function() if vim.b.navic_winbar then vim.b.navic_winbar = false vim.opt_local.winbar = '' else vim.b.navic_winbar = true vim.opt_local.winbar = '%#NavicIconsFile# %t %* ' .. "%{%v:lua.require'nvim-navic'.get_location()%}" end end, desc = 'Toggle structure panel', }, }, init = function() vim.g.navic_silence = true ---@param client lsp.Client ---@param buffer integer require('plex.lib.utils').on_attach(function(client, buffer) if client.server_capabilities.documentSymbolProvider then require('nvim-navic').attach(client, buffer) end end) end, opts = function() return { separator = '  ', highlight = true, icons = require('plex.config').icons.kinds, } end, }, ----------------------------------------------------------------------------- { 'rcarriga/nvim-notify', event = 'VeryLazy', keys = { { 'un', function() require('notify').dismiss({ silent = true, pending = true }) end, desc = 'Dismiss all Notifications', }, }, opts = { timeout = 3000, max_height = function() return math.floor(vim.o.lines * 0.75) end, max_width = function() return math.floor(vim.o.columns * 0.75) end, }, init = function() -- When noice is not enabled, install notify on VeryLazy local Util = require('plex.lib.utils') if not Util.has('noice.nvim') then Util.on_very_lazy(function() vim.notify = require('notify') end) end end, }, ----------------------------------------------------------------------------- { 'chentoast/marks.nvim', dependencies = 'lewis6991/gitsigns.nvim', event = 'FileType', keys = { { 'm/', 'MarksListAll', desc = 'Marks from all opened buffers' }, }, opts = { sign_priority = { lower = 10, upper = 15, builtin = 8, bookmark = 20 }, bookmark_1 = { sign = '󰈼' }, -- ⚐ ⚑ 󰈻 󰈼 󰈽 󰈾 󰈿 󰉀 mappings = { annotate = 'm', }, }, }, ----------------------------------------------------------------------------- { 'lukas-reineke/indent-blankline.nvim', event = 'FileType', keys = { { 'ue', 'IndentBlanklineToggle' }, }, opts = { show_trailing_blankline_indent = false, disable_with_nolist = true, show_foldtext = false, char_priority = 100, show_current_context = true, show_current_context_start = false, filetype_exclude = { 'lspinfo', 'checkhealth', 'git', 'gitcommit', 'help', 'man', 'lazy', 'alpha', 'dashboard', 'terminal', 'TelescopePrompt', 'TelescopeResults', 'neo-tree', 'Outline', 'mason', 'Trouble', }, }, }, ----------------------------------------------------------------------------- { 'tenxsoydev/tabs-vs-spaces.nvim', event = { 'BufReadPost', 'BufNewFile' }, config = true, }, ----------------------------------------------------------------------------- { 't9md/vim-quickhl', keys = { { 'mt', '(quickhl-manual-this)', mode = { 'n', 'x' }, desc = 'Highlight word', }, }, }, ----------------------------------------------------------------------------- { 'kevinhwang91/nvim-bqf', ft = 'qf', cmd = 'BqfAutoToggle', event = 'QuickFixCmdPost', opts = { auto_resize_height = false, func_map = { tab = 'st', split = 'sv', vsplit = 'sg', stoggleup = 'K', stoggledown = 'J', stogglevm = '', ptoggleitem = 'p', ptoggleauto = 'P', ptogglemode = 'zp', pscrollup = '', pscrolldown = '', prevfile = 'gk', nextfile = 'gj', prevhist = '', nexthist = '', }, preview = { auto_preview = true, should_preview_cb = function(bufnr) -- file size greater than 100kb can't be previewed automatically local filename = vim.api.nvim_buf_get_name(bufnr) local fsize = vim.fn.getfsize(filename) if fsize > 100 * 1024 then return false end return true end, }, }, }, ----------------------------------------------------------------------------- { 'uga-rosa/ccc.nvim', event = 'FileType', keys = { { 'cp', 'CccPick', desc = 'Color-picker' }, }, opts = { highlighter = { auto_enable = true, lsp = true, excludes = { 'lazy', 'mason', 'help', 'neo-tree' }, }, }, }, ----------------------------------------------------------------------------- { 'itchyny/calendar.vim', cmd = 'Calendar', init = function() vim.g.calendar_google_calendar = 1 vim.g.calendar_google_task = 1 vim.g.calendar_cache_directory = vim.fn.stdpath('data') .. '/calendar' end, }, }