neovim-confs/lua/plex/plugins/ui.lua

347 lines
8.4 KiB
Lua

-- Plugins: UI
-- https://github.com/rafi/vim-config
return {
-----------------------------------------------------------------------------
{ 'nvim-tree/nvim-web-devicons', lazy = false },
{ 'MunifTanjim/nui.nvim', lazy = false },
{
'akinsho/bufferline.nvim', lazy = false, version = "*",
dependencies = 'nvim-tree/nvim-web-devicons'
},
-----------------------------------------------------------------------------
{
'folke/noice.nvim',
event = 'VeryLazy',
dependencies = {
'MunifTanjim/nui.nvim',
'rcarriga/nvim-notify',
'nvim-treesitter/nvim-treesitter',
},
-- stylua: ignore
keys = {
{ '<S-Enter>', function() require('noice').redirect(tostring(vim.fn.getcmdline())) end, mode = 'c', desc = 'Redirect Cmdline' },
{ '<leader>Snl', function() require('noice').cmd('last') end, desc = 'Noice Last Message' },
{ '<leader>Snh', function() require('noice').cmd('history') end, desc = 'Noice History' },
{ '<leader>Sna', function() require('noice').cmd('all') end, desc = 'Noice All' },
{ '<c-f>', function() if not require('noice.lsp').scroll(4) then return '<c-f>' end end, silent = true, expr = true, desc = 'Scroll forward', mode = {'i', 'n', 's'} },
{ '<c-b>', function() if not require('noice.lsp').scroll(-4) then return '<c-b>' 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 = {
{
'<Leader>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 = {
{
'<leader>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/', '<cmd>MarksListAll<CR>', desc = 'Marks from all opened buffers' },
},
opts = {
sign_priority = { lower = 10, upper = 15, builtin = 8, bookmark = 20 },
bookmark_1 = { sign = '󰈼' }, -- ⚐ ⚑ 󰈻 󰈼 󰈽 󰈾 󰈿 󰉀
mappings = {
annotate = 'm<Space>',
},
},
},
-----------------------------------------------------------------------------
{
'lukas-reineke/indent-blankline.nvim',
event = 'FileType',
keys = {
{ '<Leader>ue', '<cmd>IndentBlanklineToggle<CR>' },
},
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 = {
{
'<Leader>mt',
'<Plug>(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 = '<Space>',
ptoggleitem = 'p',
ptoggleauto = 'P',
ptogglemode = 'zp',
pscrollup = '<C-b>',
pscrolldown = '<C-f>',
prevfile = 'gk',
nextfile = 'gj',
prevhist = '<S-Tab>',
nexthist = '<Tab>',
},
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 = {
{ '<Leader>cp', '<cmd>CccPick<CR>', 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,
},
}