diff --git a/.config/nvim/lazyvim.json b/.config/nvim/lazyvim.json index fe4cf93b..166ef4d5 100644 --- a/.config/nvim/lazyvim.json +++ b/.config/nvim/lazyvim.json @@ -59,6 +59,7 @@ "plugins.extras.test.vitest-test", "plugins.extras.ui.alpha", "plugins.extras.ui.block", + "plugins.extras.ui.edgy", "plugins.extras.ui.highlight-undo", "plugins.extras.ui.modes", "plugins.extras.ui.number-toggle", diff --git a/.config/nvim/lua/plugins/extras/lsp/neodim.lua b/.config/nvim/lua/plugins/extras/lsp/neodim.lua new file mode 100644 index 00000000..8271f7ea --- /dev/null +++ b/.config/nvim/lua/plugins/extras/lsp/neodim.lua @@ -0,0 +1,7 @@ +return { + "zbirenbaum/neodim", + event = "LspAttach", + opts = { + alpha = 0.60, + }, +} diff --git a/.config/nvim/lua/plugins/extras/ui/edgy.lua b/.config/nvim/lua/plugins/extras/ui/edgy.lua new file mode 100644 index 00000000..b258058e --- /dev/null +++ b/.config/nvim/lua/plugins/extras/ui/edgy.lua @@ -0,0 +1,168 @@ +return { + -- edgy + { + "folke/edgy.nvim", + event = "VeryLazy", + keys = { + { + "uE", + function() + require("edgy").select() + end, + desc = "Edgy Select Window", + }, + }, + opts = function() + local opts = { + bottom = { + { + ft = "floaterm", + title = "Floaterm", + 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 = "trouble", + filter = function(buf, win) + return vim.api.nvim_win_get_config(win).relative == "" + end, + }, + { 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 = "Neo-Tree", + ft = "neo-tree", + filter = function(buf) + return vim.b[buf].neo_tree_source == "filesystem" + end, + pinned = true, + open = function() + vim.api.nvim_input("e") + end, + size = { height = 0.5 }, + }, + { title = "Neotest Summary", ft = "neotest-summary" }, + { + title = "Neo-Tree Git", + ft = "neo-tree", + filter = function(buf) + return vim.b[buf].neo_tree_source == "git_status" + end, + pinned = true, + 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, + open = "Neotree position=top buffers", + }, + "neo-tree", + }, + animate = { + enabled = false, + }, + 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, + }, + } + return opts + end, + }, + + -- use edgy's selection window + { + "nvim-telescope/telescope.nvim", + optional = true, + opts = { + defaults = { + get_selection_window = function() + require("edgy").goto_main() + return 0 + end, + }, + }, + }, + + -- prevent neo-tree from opening files in edgy windows + { + "nvim-neo-tree/neo-tree.nvim", + optional = true, + opts = function(_, opts) + opts.open_files_do_not_replace_types = opts.open_files_do_not_replace_types + or { "terminal", "Trouble", "qf", "Outline", "trouble" } + table.insert(opts.open_files_do_not_replace_types, "edgy") + end, + }, + + -- Fix bufferline offsets when edgy is loaded + { + "akinsho/bufferline.nvim", + optional = true, + opts = function() + local Offset = require("bufferline.offset") + if not Offset.edgy then + local get = Offset.get + Offset.get = function() + if package.loaded.edgy then + local layout = require("edgy.config").layout + local ret = { left = "", left_size = 0, right = "", right_size = 0 } + for _, pos in ipairs({ "left", "right" }) do + local sb = layout[pos] + if sb and #sb.wins > 0 then + local title = " Sidebar" .. string.rep(" ", sb.bounds.width - 8) + ret[pos] = "%#EdgyTitle#" .. title .. "%*" .. "%#WinSeparator#│%*" + ret[pos .. "_size"] = sb.bounds.width + end + end + ret.total_size = ret.left_size + ret.right_size + if ret.total_size > 0 then + return ret + end + end + return get() + end + Offset.edgy = true + end + end, + }, +}