return { 'bufferline.nvim', event = 'DeferredUIEnter', keys = { { 'bp', 'BufferLineTogglePin', desc = 'Toggle pin' }, { 'bP', 'BufferLineGroupClose ungrouped', desc = 'Delete non-pinned buffers', }, { 'br', 'BufferLineCloseRight', desc = 'Delete buffers to the right', }, { 'bl', 'BufferLineCloseLeft', desc = 'Delete buffers to the left', }, { '', 'BufferLineCyclePrev', desc = 'Previous buffer' }, { '', 'BufferLineCycleNext', desc = 'Next buffer' }, { '[b', 'BufferLineCyclePrev', desc = 'Previous buffer' }, { ']b', 'BufferLineCycleNext', desc = 'Next buffer' }, { '[B', 'BufferLineMovePrev', desc = 'Move buffer left' }, { ']B', 'BufferLineMoveNext', desc = 'Move buffer right' }, }, before = function() require('lz.n').trigger_load('mini.icons') end, after = function() require('bufferline').setup({ options = { always_show_bufferline = true, close_command = function(n) Snacks.bufdelete(n) end, right_mouse_command = function(n) Snacks.bufdelete(n) end, diagnostics = 'nvim_lsp', diagnostics_indicator = function(_, _, diag) local icons = require('icons').diagnostics local ret = (diag.error and icons.Error .. diag.error .. ' ' or '') .. (diag.warning and icons.Warn .. diag.warning or '') return vim.trim(ret) end, offsets = { { filetype = 'neo-tree', text = 'Explorer', highlight = 'Directory', text_align = 'center', }, }, get_element_icon = function(elem) local icon, hl, _ = require('mini.icons').get('filetype', elem.filetype) return icon, hl end, }, }) vim.api.nvim_create_autocmd({ 'BufAdd', 'BufDelete' }, { desc = 'Fix bufferline when restoring a session', callback = function() vim.schedule(function() pcall(nvim_bufferline) end) end, }) end, }