return { { 'folke/tokyonight.nvim', lazy = false, priority = 1000, opts = {}, }, { 'HiPhish/rainbow-delimiters.nvim', name = 'rainbow-delimiters', }, { 'nvzone/volt', lazy = true }, { 'nvzone/minty', cmd = { 'Shades', 'Huefy' }, }, { 'mrjones2014/smart-splits.nvim', keys = { -- Resizing splits { '', function() require('smart-splits').resize_left() end, desc = 'Resize split left', }, { '', function() require('smart-splits').resize_down() end, desc = 'Resize split down', }, { '', function() require('smart-splits').resize_up() end, desc = 'Resize split up', }, { '', function() require('smart-splits').resize_right() end, desc = 'Resize split right', }, -- Moving between splits { '', function() require('smart-splits').move_cursor_left() end, desc = 'Move to left split', }, { '', function() require('smart-splits').move_cursor_down() end, desc = 'Move to split below', }, { '', function() require('smart-splits').move_cursor_up() end, desc = 'Move to split above', }, { '', function() require('smart-splits').move_cursor_right() end, desc = 'Move to right split', }, { '', function() require('smart-splits').move_cursor_previous() end, desc = 'Move to previous split', }, -- Swapping buffers between windows { 'h', function() require('smart-splits').swap_buf_left() end, desc = 'Swap buffer left', }, { 'j', function() require('smart-splits').swap_buf_down() end, desc = 'Swap buffer down', }, { 'k', function() require('smart-splits').swap_buf_up() end, desc = 'Swap buffer up', }, { 'l', function() require('smart-splits').swap_buf_right() end, desc = 'Swap buffer right', }, }, }, { 'folke/noice.nvim', event = 'VeryLazy', opts = { lsp = { override = { ['vim.lsp.util.convert_input_to_markdown_lines'] = true, ['vim.lsp.util.stylize_markdown'] = true, ['cmp.entry.get_documentation'] = true, }, }, routes = { { filter = { event = 'msg_show', any = { { find = '%d+L, %d+B' }, { find = '; after #%d+' }, { find = '; before #%d+' }, }, }, view = 'mini', }, }, presets = { bottom_search = false, command_palette = true, long_message_to_split = true, inc_rename = true, }, }, -- stylua: ignore keys = { { "sn", "", desc = "+noice"}, { "", function() require("noice").redirect(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" }, { "snd", function() require("noice").cmd("dismiss") end, desc = "Dismiss All" }, { "snt", function() require("noice").cmd("pick") end, desc = "Noice Picker (Telescope/FzfLua)" }, { "", 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"}}, }, config = function(_, opts) -- HACK: noice shows messages from before it was enabled, -- but this is not ideal when Lazy is installing plugins, -- so clear the messages in this case. if vim.o.filetype == 'lazy' then vim.cmd [[messages clear]] end require('noice').setup(opts) end, }, { 'folke/edgy.nvim', event = 'VeryLazy', keys = { { 'ue', function() require('edgy').toggle() end, desc = 'Edgy Toggle', }, -- stylua: ignore { "uE", function() require("edgy").select() end, desc = "Edgy Select Window" }, }, opts = function() local opts = { bottom = { { ft = 'toggleterm', size = { height = 0.4 }, filter = function(buf, win) return vim.api.nvim_win_get_config(win).relative == '' end, }, { ft = 'noice', size = { height = 0.4 }, filter = function(buf, win) return vim.api.nvim_win_get_config(win).relative == '' end, }, 'Trouble', { ft = 'qf', title = 'QuickFix' }, { ft = 'help', size = { height = 20 }, -- don't open help files in edgy that we're editing filter = function(buf) return vim.bo[buf].buftype == 'help' end, }, { title = 'Spectre', ft = 'spectre_panel', size = { height = 0.4 } }, { title = 'Neotest Output', ft = 'neotest-output-panel', size = { height = 15 } }, }, left = { { title = 'Neotest Summary', ft = 'neotest-summary' }, -- "neo-tree", }, right = { { title = 'Grug Far', ft = 'grug-far', size = { width = 0.4 } }, }, keys = { -- increase width [''] = function(win) win:resize('width', 2) end, -- decrease width [''] = function(win) win:resize('width', -2) end, -- increase height [''] = function(win) win:resize('height', 2) end, -- decrease height [''] = function(win) win:resize('height', -2) end, }, } local pos = { filesystem = 'left', buffers = 'top', git_status = 'right', document_symbols = 'bottom', diagnostics = 'bottom', } -- trouble for _, pos in ipairs { 'top', 'bottom', 'left', 'right' } do opts[pos] = opts[pos] or {} table.insert(opts[pos], { ft = 'trouble', filter = function(_buf, win) return vim.w[win].trouble and vim.w[win].trouble.position == pos and vim.w[win].trouble.type == 'split' and vim.w[win].trouble.relative == 'editor' and not vim.w[win].trouble_preview end, }) end -- snacks terminal for _, pos in ipairs { 'top', 'bottom', 'left', 'right' } do opts[pos] = opts[pos] or {} table.insert(opts[pos], { ft = 'snacks_terminal', size = { height = 0.4 }, title = '%{b:snacks_terminal.id}: %{b:term_title}', filter = function(_buf, win) return vim.w[win].snacks_win and vim.w[win].snacks_win.position == pos and vim.w[win].snacks_win.relative == 'editor' and not vim.w[win].trouble_preview end, }) end return opts end, }, }