-- luacheck: globals vim return { -- The theme of choise, catppuccin -- https://github.com/catppuccin/nvim { "catppuccin/nvim", name = "catppuccin", priority = 1000, enabled = true, config = function() vim.cmd.colorscheme("catppuccin") end, opts = { flavour = "mocha", }, }, -- Remove all background colors to make nvim transparent -- https://github.com/xiyaowong/transparent.nvim { "xiyaowong/transparent.nvim", lazy = false, enabled = true, config = function() vim.g.transparent_groups = vim.list_extend( vim.g.transparent_groups or {}, vim.tbl_map(function(v) return v.hl_group end, vim.tbl_values(require("bufferline.config").highlights)) ) end, }, -- A fancy, configurable, notification manager for NeoVim -- https://github.com/rcarriga/nvim-notify { "rcarriga/nvim-notify", opts = { -- Set background color to black so transparent doesn't mess stuff up background_colour = "#000000", }, }, -- Not UFO in the sky, but an ultra fold in Neovim. -- https://github.com/kevinhwang91/nvim-ufo/ { "kevinhwang91/nvim-ufo", lazy = false, enabled = true, dependencies = { "kevinhwang91/promise-async", { "nvim-treesitter/nvim-treesitter", run = ":TSUpdate" }, }, init = function() vim.o.fillchars = [[eob: ,fold: ,foldopen:,foldsep: ,foldclose:]] vim.o.foldcolumn = "1" -- '0' is not bad vim.o.foldlevel = 99 -- Using ufo provider need a large value, feel free to decrease the value vim.o.foldlevelstart = 99 vim.o.foldenable = true end, opts = { open_fold_hl_timeout = 150, close_fold_kinds = { "imports", "comment" }, preview = { win_config = { border = { "", "─", "", "", "", "─", "", "" }, winhighlight = "Normal:Folded", winblend = 0, }, mappings = { scrollU = "", scrollD = "", jumpTop = "[", jumpBot = "]", }, }, provider_selector = function(bufnr, filetype, buftype) return { "treesitter", "indent" } end, fold_virt_text_handler = function(virtText, lnum, endLnum, width, truncate) local newVirtText = {} local suffix = (" 󰁂 %d "):format(endLnum - lnum) local sufWidth = vim.fn.strdisplaywidth(suffix) local targetWidth = width - sufWidth local curWidth = 0 for _, chunk in ipairs(virtText) do local chunkText = chunk[1] local chunkWidth = vim.fn.strdisplaywidth(chunkText) if targetWidth > curWidth + chunkWidth then table.insert(newVirtText, chunk) else chunkText = truncate(chunkText, targetWidth - curWidth) local hlGroup = chunk[2] table.insert(newVirtText, { chunkText, hlGroup }) chunkWidth = vim.fn.strdisplaywidth(chunkText) -- str width returned from truncate() may less than 2nd argument, need padding if curWidth + chunkWidth < targetWidth then suffix = suffix .. (" "):rep(targetWidth - curWidth - chunkWidth) end break end curWidth = curWidth + chunkWidth end table.insert(newVirtText, { suffix, "MoreMsg" }) return newVirtText end, }, }, -- Indent guides for Neovim -- https://github.com/lukas-reineke/indent-blankline.nvim { "lukas-reineke/indent-blankline.nvim" }, -- Git integration for buffers -- https://github.com/lewis6991/gitsigns.nvim { "lewis6991/gitsigns.nvim" }, -- Getting you where you want with the fewest keystrokes. -- https://github.com/ThePrimeagen/harpoon { "ThePrimeagen/harpoon" }, -- Close buffer without messing up with the window. -- https://github.com/famiu/bufdelete.nvim { "famiu/bufdelete.nvim" }, -- Neovim plugin for locking a buffer to a window -- https://github.com/stevearc/stickybuf.nvim { "stevearc/stickybuf.nvim", opts = {} }, -- Automatically expand width of the current window. -- Maximizes and restore it. And all this with nice animations! -- https://github.com/anuvyklack/windows.nvim { "anuvyklack/windows.nvim", dependencies = { "anuvyklack/middleclass", "anuvyklack/animation.nvim", }, config = function() vim.o.winwidth = 15 vim.o.winminwidth = 10 vim.o.equalalways = false require("windows").setup() end, }, }