bfd0ea7dcd
* [feat] Make gitsigns init function async This function is running git and also initializing a shell, which can be a relatively slow operation. By leveraging the jobs api, we run the command in background, reducing the time it takes for the buffer to be available to the user. It also uses the list format for the job, which allow us to bypass the shell entirely. * performance: use uv.cwd() instead of fn.expand benchmarked luv's cwd and it seems to be 20x faster than the expand function --------- Co-authored-by: Sidhanth Rathod <siduck@tutanota.com>
273 lines
7.3 KiB
Lua
273 lines
7.3 KiB
Lua
-- All plugins have lazy=true by default,to load a plugin on startup just lazy=false
|
|
-- List of all default plugins & their definitions
|
|
local default_plugins = {
|
|
|
|
"nvim-lua/plenary.nvim",
|
|
|
|
{
|
|
"NvChad/base46",
|
|
branch = "v3.0",
|
|
build = function()
|
|
require("base46").load_all_highlights()
|
|
end,
|
|
},
|
|
|
|
{
|
|
"NvChad/ui",
|
|
branch = "v3.0",
|
|
lazy = false,
|
|
config = function()
|
|
require "nvchad"
|
|
end,
|
|
},
|
|
|
|
{
|
|
"NvChad/nvim-colorizer.lua",
|
|
init = function()
|
|
require("core.utils").lazy_load "nvim-colorizer.lua"
|
|
end,
|
|
config = function(_, opts)
|
|
require("colorizer").setup(opts)
|
|
|
|
-- execute colorizer as soon as possible
|
|
vim.defer_fn(function()
|
|
require("colorizer").attach_to_buffer(0)
|
|
end, 0)
|
|
end,
|
|
},
|
|
|
|
{
|
|
"nvim-tree/nvim-web-devicons",
|
|
opts = function()
|
|
return { override = require "nvchad.icons.devicons" }
|
|
end,
|
|
config = function(_, opts)
|
|
dofile(vim.g.base46_cache .. "devicons")
|
|
require("nvim-web-devicons").setup(opts)
|
|
end,
|
|
},
|
|
|
|
{
|
|
"lukas-reineke/indent-blankline.nvim",
|
|
init = function()
|
|
require("core.utils").lazy_load "indent-blankline.nvim"
|
|
end,
|
|
opts = function()
|
|
return require("plugins.configs.others").blankline
|
|
end,
|
|
config = function(_, opts)
|
|
require("core.utils").load_mappings "blankline"
|
|
dofile(vim.g.base46_cache .. "blankline")
|
|
|
|
local hooks = require "ibl.hooks"
|
|
hooks.register(hooks.type.WHITESPACE, hooks.builtin.hide_first_space_indent_level)
|
|
require("ibl").setup(opts)
|
|
end,
|
|
},
|
|
|
|
{
|
|
"nvim-treesitter/nvim-treesitter",
|
|
init = function()
|
|
require("core.utils").lazy_load "nvim-treesitter"
|
|
end,
|
|
cmd = { "TSInstall", "TSBufEnable", "TSBufDisable", "TSModuleInfo" },
|
|
build = ":TSUpdate",
|
|
opts = function()
|
|
return require "plugins.configs.treesitter"
|
|
end,
|
|
config = function(_, opts)
|
|
dofile(vim.g.base46_cache .. "syntax")
|
|
dofile(vim.g.base46_cache .. "treesitter")
|
|
require("nvim-treesitter.configs").setup(opts)
|
|
end,
|
|
},
|
|
|
|
-- git stuff
|
|
{
|
|
"lewis6991/gitsigns.nvim",
|
|
ft = { "gitcommit", "diff" },
|
|
init = function()
|
|
-- load gitsigns only when a git file is opened
|
|
vim.api.nvim_create_autocmd({ "BufRead" }, {
|
|
group = vim.api.nvim_create_augroup("GitSignsLazyLoad", { clear = true }),
|
|
callback = function()
|
|
vim.fn.jobstart({"git", "-C", vim.loop.cwd(), "rev-parse"},
|
|
{
|
|
on_exit = function(_, return_code)
|
|
if return_code == 0 then
|
|
vim.api.nvim_del_augroup_by_name "GitSignsLazyLoad"
|
|
vim.schedule(function()
|
|
require("lazy").load { plugins = { "gitsigns.nvim" } }
|
|
end)
|
|
end
|
|
end
|
|
}
|
|
)
|
|
end,
|
|
})
|
|
end,
|
|
opts = function()
|
|
return require("plugins.configs.others").gitsigns
|
|
end,
|
|
config = function(_, opts)
|
|
dofile(vim.g.base46_cache .. "git")
|
|
require("gitsigns").setup(opts)
|
|
end,
|
|
},
|
|
|
|
-- lsp stuff
|
|
{
|
|
"williamboman/mason.nvim",
|
|
cmd = { "Mason", "MasonInstall", "MasonInstallAll", "MasonUpdate" },
|
|
opts = function()
|
|
return require "plugins.configs.mason"
|
|
end,
|
|
config = function(_, opts)
|
|
dofile(vim.g.base46_cache .. "mason")
|
|
require("mason").setup(opts)
|
|
|
|
-- custom nvchad cmd to install all mason binaries listed
|
|
vim.api.nvim_create_user_command("MasonInstallAll", function()
|
|
vim.cmd("MasonInstall " .. table.concat(opts.ensure_installed, " "))
|
|
end, {})
|
|
|
|
vim.g.mason_binaries_list = opts.ensure_installed
|
|
end,
|
|
},
|
|
|
|
{
|
|
"neovim/nvim-lspconfig",
|
|
init = function()
|
|
require("core.utils").lazy_load "nvim-lspconfig"
|
|
end,
|
|
config = function()
|
|
require("plugins.configs.lspconfig").defaults()
|
|
end,
|
|
},
|
|
|
|
-- load luasnips + cmp related in insert mode only
|
|
{
|
|
"hrsh7th/nvim-cmp",
|
|
event = "InsertEnter",
|
|
dependencies = {
|
|
{
|
|
-- snippet plugin
|
|
"L3MON4D3/LuaSnip",
|
|
dependencies = "rafamadriz/friendly-snippets",
|
|
opts = { history = true, updateevents = "TextChanged,TextChangedI" },
|
|
config = function(_, opts)
|
|
require("plugins.configs.others").luasnip(opts)
|
|
end,
|
|
},
|
|
|
|
-- autopairing of (){}[] etc
|
|
{
|
|
"windwp/nvim-autopairs",
|
|
opts = {
|
|
fast_wrap = {},
|
|
disable_filetype = { "TelescopePrompt", "vim" },
|
|
},
|
|
config = function(_, opts)
|
|
require("nvim-autopairs").setup(opts)
|
|
|
|
-- setup cmp for autopairs
|
|
local cmp_autopairs = require "nvim-autopairs.completion.cmp"
|
|
require("cmp").event:on("confirm_done", cmp_autopairs.on_confirm_done())
|
|
end,
|
|
},
|
|
|
|
-- cmp sources plugins
|
|
{
|
|
"saadparwaiz1/cmp_luasnip",
|
|
"hrsh7th/cmp-nvim-lua",
|
|
"hrsh7th/cmp-nvim-lsp",
|
|
"hrsh7th/cmp-buffer",
|
|
"hrsh7th/cmp-path",
|
|
},
|
|
},
|
|
opts = function()
|
|
return require "plugins.configs.cmp"
|
|
end,
|
|
config = function(_, opts)
|
|
require("cmp").setup(opts)
|
|
end,
|
|
},
|
|
|
|
{
|
|
"numToStr/Comment.nvim",
|
|
keys = {
|
|
{ "gcc", mode = "n", desc = "Comment toggle current line" },
|
|
{ "gc", mode = { "n", "o" }, desc = "Comment toggle linewise" },
|
|
{ "gc", mode = "x", desc = "Comment toggle linewise (visual)" },
|
|
{ "gbc", mode = "n", desc = "Comment toggle current block" },
|
|
{ "gb", mode = { "n", "o" }, desc = "Comment toggle blockwise" },
|
|
{ "gb", mode = "x", desc = "Comment toggle blockwise (visual)" },
|
|
},
|
|
init = function()
|
|
require("core.utils").load_mappings "comment"
|
|
end,
|
|
config = function(_, opts)
|
|
require("Comment").setup(opts)
|
|
end,
|
|
},
|
|
|
|
-- file managing , picker etc
|
|
{
|
|
"nvim-tree/nvim-tree.lua",
|
|
cmd = { "NvimTreeToggle", "NvimTreeFocus" },
|
|
init = function()
|
|
require("core.utils").load_mappings "nvimtree"
|
|
end,
|
|
opts = function()
|
|
return require "plugins.configs.nvimtree"
|
|
end,
|
|
config = function(_, opts)
|
|
dofile(vim.g.base46_cache .. "nvimtree")
|
|
require("nvim-tree").setup(opts)
|
|
end,
|
|
},
|
|
|
|
{
|
|
"nvim-telescope/telescope.nvim",
|
|
dependencies = { "nvim-treesitter/nvim-treesitter", { "nvim-telescope/telescope-fzf-native.nvim", build = "make" } },
|
|
cmd = "Telescope",
|
|
init = function()
|
|
require("core.utils").load_mappings "telescope"
|
|
end,
|
|
opts = function()
|
|
return require "plugins.configs.telescope"
|
|
end,
|
|
config = function(_, opts)
|
|
dofile(vim.g.base46_cache .. "telescope")
|
|
local telescope = require "telescope"
|
|
telescope.setup(opts)
|
|
|
|
-- load extensions
|
|
for _, ext in ipairs(opts.extensions_list) do
|
|
telescope.load_extension(ext)
|
|
end
|
|
end,
|
|
},
|
|
|
|
-- Only load whichkey after all the gui
|
|
{
|
|
"folke/which-key.nvim",
|
|
keys = { "<leader>", "<c-r>", "<c-w>", '"', "'", "`", "c", "v", "g" },
|
|
init = function()
|
|
require("core.utils").load_mappings "whichkey"
|
|
end,
|
|
cmd = "WhichKey",
|
|
config = function(_, opts)
|
|
dofile(vim.g.base46_cache .. "whichkey")
|
|
require("which-key").setup(opts)
|
|
end,
|
|
},
|
|
}
|
|
|
|
local config = require "nvconfig"
|
|
|
|
if #config.plugins > 0 then
|
|
table.insert(default_plugins, { import = config.plugins })
|
|
end
|
|
|
|
require("lazy").setup(default_plugins, config.lazy_nvim)
|