local overrides = require "custom.configs.overrides" local utils = require "core.utils" ---@type NvPluginSpec[] local plugins = { -- Override plugin definition options { "neovim/nvim-lspconfig", config = function() require "plugins.configs.lspconfig" require "custom.configs.lspconfig" end, -- Override to setup mason-lspconfig }, -- override plugin configs { "williamboman/mason.nvim", opts = overrides.mason, }, { "nvim-treesitter/nvim-treesitter", opts = overrides.treesitter, }, { "nvim-tree/nvim-tree.lua", opts = overrides.nvimtree, }, -- Install a plugin { "max397574/better-escape.nvim", event = "InsertEnter", config = function() require("better_escape").setup() end, }, { "stevearc/conform.nvim", -- for users those who want auto-save conform + lazyloading! -- event = "BufWritePre" config = function() require "custom.configs.conform" end, }, { "ggandor/leap.nvim", lazy = false, config = function() require("core.utils").load_mappings "leap" end, }, { "ggandor/flit.nvim", lazy = false, config = function() require("flit").setup { keys = { f = "f", F = "F", t = "t", T = "T" }, -- A string like "nv", "nvo", "o", etc. labeled_modes = "v", multiline = true, -- Like `leap`s similar argument (call-specific overrides). -- E.g.: opts = { equivalence_classes = {} } opts = {}, } end, }, { "kdheepak/lazygit.nvim", lazy = false, keys = { "gg" }, cmd = "LazyGit", -- optional for floating window border decoration dependencies = { "nvim-lua/plenary.nvim", }, init = function() require("core.utils").load_mappings "lazygit" end, }, { "folke/which-key.nvim", keys = { "", "", "", "", '"', "'", "`", "c", "v", "g" }, defaults = { mode = { "n", "v" }, [";"] = { name = "+telescope" }, [";f"] = { name = "+find" }, [";d"] = { name = "+lsp/todo" }, ["g"] = { name = "+goto" }, ["]"] = { name = "+next" }, ["["] = { name = "+prev" }, ["x"] = { name = "+diagnostics/quickfix" }, ["c"] = { name = "+code" }, ["g"] = { name = "+git" }, ["t"] = { name = "+toggle/tools" }, ["w"] = { name = "+window/which" }, ["f"] = { name = "+formatting" }, }, }, { "echasnovski/mini.trailspace", lazy = false, event = { "BufReadPost", "BufNewFile" }, opts = {} }, { "RRethy/vim-illuminate", lazy = false, event = { "BufReadPost", "BufNewFile" }, opts = { delay = 200, under_cursor = false, modes_allowlist = { "n", "no", "nt" }, filetypes_denylist = { "DiffviewFileHistory", "DiffviewFiles", "SidebarNvim", "fugitive", "git", "minifiles", "neo-tree", }, }, keys = { { "]]", desc = "Next Reference" }, { "[[", desc = "Prev Reference" }, }, config = function(_, opts) require("illuminate").configure(opts) local function map(key, dir, buffer) vim.keymap.set("n", key, function() require("illuminate")["goto_" .. dir .. "_reference"](false) end, { desc = dir:sub(1, 1):upper() .. dir:sub(2) .. " Reference", buffer = buffer, }) end map("]]", "next") map("[[", "prev") -- also set it after loading ftplugins, since a lot overwrite [[ and ]] vim.api.nvim_create_autocmd("FileType", { group = vim.api.nvim_create_augroup("plex_illuminate", {}), callback = function() local buffer = vim.api.nvim_get_current_buf() map("]]", "next", buffer) map("[[", "prev", buffer) end, }) end, }, { "folke/todo-comments.nvim", lazy = false, dependencies = "nvim-telescope/telescope.nvim", -- stylua: ignore keys = { { ']t', function() require('todo-comments').jump_next() end, desc = 'Next todo comment' }, { '[t', function() require('todo-comments').jump_prev() end, desc = 'Previous todo comment' }, { 'dt', 'TodoTelescope', desc = 'todo' }, { 'xt', 'TodoTrouble', desc = 'Todo (Trouble)' }, { 'xT', 'TodoTrouble keywords=TODO,FIX,FIXME', desc = 'Todo/Fix/Fixme (Trouble)' }, }, opts = { signs = true, keywords = { FIX = { icon = " ", -- icon used for the sign, and in search results color = "error", -- can be a hex color, or a named color (see below) alt = { "FIXME", "BUG", "FIXIT", "ISSUE" }, -- a set of other keywords that all map to this FIX keywords -- signs = false, -- configure signs for some keywords individually }, TODO = { icon = " ", color = "info" }, HACK = { icon = " ", color = "warning" }, SECURITY = { icon = "󰒃 ", color = "warning" }, WARN = { icon = " ", color = "warning", alt = { "WARNING", "XXX" } }, PERF = { icon = " ", alt = { "OPTIM", "PERFORMANCE", "OPTIMIZE" } }, NOTE = { icon = " ", color = "hint", alt = { "INFO" } }, TEST = { icon = "⏲ ", color = "test", alt = { "TESTING", "PASSED", "FAILED" } }, }, }, }, { "folke/trouble.nvim", cmd = { "Trouble", "TroubleToggle" }, opts = { use_diagnostic_signs = true }, -- stylua: ignore keys = { { 'e', 'TroubleToggle document_diagnostics', noremap = true, desc = 'Document Diagnostics' }, { 'r', 'TroubleToggle workspace_diagnostics', noremap = true, desc = 'Workspace Diagnostics' }, { 'xx', 'TroubleToggle document_diagnostics', desc = 'Document Diagnostics (Trouble)' }, { 'xX', 'TroubleToggle workspace_diagnostics', desc = 'Workspace Diagnostics (Trouble)' }, { 'xQ', 'TroubleToggle quickfix', desc = 'Quickfix List (Trouble)' }, { 'xL', 'TroubleToggle loclist', desc = 'Location List (Trouble)' }, { '[q', function() if require('trouble').is_open() then require('trouble').previous({ skip_groups = true, jump = true }) else vim.cmd.cprev() end end, desc = 'Previous trouble/quickfix item', }, { ']q', function() if require('trouble').is_open() then require('trouble').next({ skip_groups = true, jump = true }) else vim.cmd.cnext() end end, desc = 'Next trouble/quickfix item', }, }, }, } return plugins