return { "folke/edgy.nvim", event = "VeryLazy", init = function() vim.opt.laststatus = 3 vim.opt.splitkeep = "screen" end, opts = { bottom = { -- toggleterm / lazyterm at the bottom with a height of 40% of the screen { ft = "toggleterm", size = { height = 0.4 }, -- exclude floating windows filter = function(buf, win) return vim.api.nvim_win_get_config(win).relative == "" end, }, { ft = "lazyterm", title = "LazyTerm", size = { height = 0.4 }, filter = function(buf) return not vim.b[buf].lazyterm_cmd end, }, "Trouble", { ft = "qf", title = "QuickFix" }, { ft = "help", size = { height = 20 }, -- only show help buffers filter = function(buf) return vim.bo[buf].buftype == "help" end, }, { ft = "spectre_panel", size = { height = 0.4 } }, }, left = { -- Neo-tree filesystem always takes half the screen height { title = "Neo-Tree", ft = "neo-tree", filter = function(buf) return vim.b[buf].neo_tree_source == "filesystem" end, size = { height = 0.2 }, }, { title = "Neo-Tree Git", ft = "neo-tree", filter = function(buf) return vim.b[buf].neo_tree_source == "git_status" end, pinned = true, collapsed = true, -- show window as closed/collapsed on start open = "Neotree position=right git_status", }, { title = "Neo-Tree Buffers", ft = "neo-tree", filter = function(buf) return vim.b[buf].neo_tree_source == "buffers" end, pinned = true, collapsed = true, -- show window as closed/collapsed on start open = "Neotree position=top buffers", }, { title = function() local buf_name = vim.api.nvim_buf_get_name(0) or "[No Name]" return vim.fn.fnamemodify(buf_name, ":t") end, ft = "Outline", pinned = true, open = "SymbolsOutlineOpen", }, -- any other neo-tree windows "neo-tree", }, options = { left = { size = 25 }, bottom = { size = 10 }, right = { size = 30 }, top = { size = 10 }, }, -- edgebar animations animate = { enabled = true, fps = 100, -- frames per second cps = 120, -- cells per second on_begin = function() vim.g.minianimate_disable = true end, on_end = function() vim.g.minianimate_disable = false end, -- Spinner for pinned views that are loading. -- if you have noice.nvim installed, you can use any spinner from it, like: -- spinner = require("noice.util.spinners").spinners.circleFull, spinner = { frames = { "⠋", "⠙", "⠹", "⠸", "⠼", "⠴", "⠦", "⠧", "⠇", "⠏" }, interval = 80, }, }, -- enable this to exit Neovim when only edgy windows are left exit_when_last = false, -- close edgy when all windows are hidden instead of opening one of them -- disable to always keep at least one edgy split visible in each open section close_when_all_hidden = true, -- global window options for edgebar windows ---@type vim.wo wo = { -- Setting to `true`, will add an edgy winbar. -- Setting to `false`, won't set any winbar. -- Setting to a string, will set the winbar to that string. winbar = true, winfixwidth = true, winfixheight = false, winhighlight = "WinBar:EdgyWinBar,Normal:EdgyNormal", spell = false, signcolumn = "no", }, -- buffer-local keymaps to be added to edgebar buffers. -- Existing buffer-local keymaps will never be overridden. -- Set to false to disable a builtin. ---@type table keys = { -- close window ["q"] = function(win) win:close() end, -- hide window [""] = function(win) win:hide() end, -- close sidebar ["Q"] = function(win) win.view.edgebar:close() end, -- next open window ["]w"] = function(win) win:next({ visible = true, focus = true }) end, -- previous open window ["[w"] = function(win) win:prev({ visible = true, focus = true }) end, -- next loaded window ["]W"] = function(win) win:next({ pinned = false, focus = true }) end, -- prev loaded window ["[W"] = function(win) win:prev({ pinned = false, focus = true }) end, -- 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, -- reset all custom sizing ["="] = function(win) win.view.edgebar:equalize() end, }, icons = { closed = " ", open = " ", }, -- enable this on Neovim <= 0.10.0 to properly fold edgebar windows. -- Not needed on a nightly build >= June 5, 2023. fix_win_height = vim.fn.has("nvim-0.10.0") == 0, }, }