avoid un-needed lazy loading of packer | improve packer bootstrapping

This commit is contained in:
siduck 2022-05-23 12:54:03 +05:30
parent bdf45a447a
commit a2ff5c285e
10 changed files with 116 additions and 214 deletions

6
.github/README.md vendored
View File

@ -130,13 +130,13 @@ Without/with Treesitter:
## History ## History
- I (@siduck i.e creator of NvChad) in my initial days of learning to program wanted a lightweight IDE for writing code, I had a very low end system, which was like 1.4ghz pentium + 4gb ram & HDD. I was into web dev so many suggested vscode but that thing was very heavy on my system, It took more ram than my browser! ( minimal ungoogled chromium ) so I never tried it again, sublime text was nice but the fear of using proprietary software XD for a linux user bugged me a lot. Then I tried doom-emacs which looked pretty but it was slow and emacs was kinda hard, I tried lunarvim but too lazy to read the docs which got me into vim and got into neovim lua stuff real quick. I wanted to make the config ery pretty and fast. - I (@siduck i.e creator of NvChad) in my initial days of learning to program wanted a lightweight IDE for writing code, I had a very low end system which was like 1.4ghz pentium + 4gb ram & HDD. I was into web dev stuff so many suggested me to use vscode but that thing was very heavy on my system, It took more ram than my browser! ( minimal ungoogled chromium ) so I never tried it again, sublime text was nice but the fear of using proprietary software XD for a linux user bugged me a lot. Then I tried doom-emacs which looked pretty but it was slow and I was lost within its docs, I tried lunarvim but too lazy to read the docs. Doom-emacs and lunarvim inspired me to make a config which is the prettiest + very fast and simple.
- I'm decent at ricing i.e customizing system and making it look pretty so I posted my neovim rice on [neovim subreddit](https://www.reddit.com/r/neovim/comments/m3xl4f/neovim_rice/), my neovim-dotfiles github repo blew up and then I had to come up with a name, I was amazed by the chad meme lol so I put NvChad as the name, the chad word in the name doesnt literally mean the chad guy but in the sense such as chad linux vs windows i.e meaning superior,best etc. NvChad was made for my personal use but it gained some popularity which inspired me to make a public config i.e config usable by many and less hassle to update, without the custom config stuff users would have to keep a track of every commit and copy paste git diffs to manually update nvchad. - I'm decent at ricing i.e customizing system and making it look pretty so I posted my neovim rice on [neovim subreddit](https://www.reddit.com/r/neovim/comments/m3xl4f/neovim_rice/), my neovim-dotfiles github repo blew up and then I had to come up with a name, I was amazed by the chad meme lol so I put NvChad as the name, the chad word in here doesnt literally mean the chad guy but in the sense such as chad linux vs windows i.e meaning superior, best etc. NvChad was made for my personal use but it gained some popularity which inspired me to make a public config i.e config usable by many and less hassle to update as everyone's going to use the same base config (NvChad) with their custom modifications (which are gitignored so that wont mess up), without the custom config stuff users would have to keep a track of every commit and copy paste git diffs to manually update nvchad.
## :gift_heart: Support ## :gift_heart: Support
I'm (@siduck) really very sorry to remove the previous charity links but I had to do it for various reasons. A lot has been going here regarding financial issues and I do need some support if it's possible from your end. I haven't graduated yet and it would be great to earn some stuff as that'd help me with daily minor expenses. If you like NvChad and would like to support it via donation then I'll gladly accept it. Dont worry! NvChad will still stay alive & active without your donations! I will remove the sponsor button and re-add the charity links once I get a job, probably a year or two. I'm (@siduck) really very sorry to remove the previous charity links but I had to do it for various reasons. A lot has been going here regarding financial issues and I do need some support if it's possible from your end. I haven't graduated yet and it would be great to earn some stuff as that'd help me with daily minor expenses. If you like NvChad and would like to support & appreciate it via donation then I'll gladly accept it. Dont worry! NvChad will still stay alive & active without your donations! I will remove the sponsor button and re-add the charity links once I get a job, probably a year or two.
[![kofi](https://img.shields.io/badge/Ko--fi-F16061?style=for-the-badge&logo=ko-fi&logoColor=white)](https://ko-fi.com/siduck) [![kofi](https://img.shields.io/badge/Ko--fi-F16061?style=for-the-badge&logo=ko-fi&logoColor=white)](https://ko-fi.com/siduck)
[![paypal](https://img.shields.io/badge/PayPal-00457C?style=for-the-badge&logo=paypal&logoColor=white)](https://paypal.me/siduck76) [![paypal](https://img.shields.io/badge/PayPal-00457C?style=for-the-badge&logo=paypal&logoColor=white)](https://paypal.me/siduck76)

View File

@ -1,5 +1,8 @@
-- Just an example, supposed to be placed in /lua/custom/ -- Just an example, supposed to be placed in /lua/custom/
-- remove this if you dont use custom.init.lua at all
require "custom"
local M = {} local M = {}
-- make sure you maintain the structure of `core/default_config.lua` here, -- make sure you maintain the structure of `core/default_config.lua` here,

View File

@ -4,29 +4,10 @@ if present then
impatient.enable_profile() impatient.enable_profile()
end end
local modules = { require "core"
"utils", require "core.utils"
"options", require "core.options"
"autocmds",
"commands",
}
for _, module in ipairs(modules) do -- setup packer + plugins
local ok, err = pcall(require, "core." .. module) require("core.packer").bootstrap()
require "plugins"
if not ok then
error("Error loading " .. module .. "\n\n" .. err)
end
end
-- check if custom init.lua file exists
if vim.fn.filereadable(vim.fn.stdpath "config" .. "/lua/custom/init.lua") == 1 then
-- try to call custom init, if not successful, show error
local ok, err = pcall(require, "custom")
if not ok then
vim.notify("Error loading custom/init.lua\n\n" .. err)
end
return
end

View File

@ -1,73 +0,0 @@
local autocmd = vim.api.nvim_create_autocmd
-- Disable statusline in dashboard
autocmd("FileType", {
pattern = "alpha",
callback = function()
vim.opt.laststatus = 0
end,
})
autocmd("BufUnload", {
buffer = 0,
callback = function()
vim.opt.laststatus = 3
end,
})
-- open nvim with a dir while still lazy loading nvimtree
-- autocmd("BufEnter", {
-- callback = function()
-- if vim.api.nvim_buf_get_option(0, "buftype") ~= "terminal" then
-- vim.cmd "lcd %:p:h"
-- end
-- end,
-- })
-- Use relative & absolute line numbers in 'n' & 'i' modes respectively
-- autocmd("InsertEnter", {
-- callback = function()
-- vim.opt.relativenumber = false
-- end,
-- })
-- autocmd("InsertLeave", {
-- callback = function()
-- vim.opt.relativenumber = true
-- end,
-- })
-- Open a file from its last left off position
-- autocmd("BufReadPost", {
-- callback = function()
-- if not vim.fn.expand("%:p"):match ".git" and vim.fn.line "'\"" > 1 and vim.fn.line "'\"" <= vim.fn.line "$" then
-- vim.cmd "normal! g'\""
-- vim.cmd "normal zz"
-- end
-- end,
-- })
-- File extension specific tabbing
-- autocmd("Filetype", {
-- pattern = "python",
-- callback = function()
-- vim.opt_local.expandtab = true
-- vim.opt_local.tabstop = 4
-- vim.opt_local.shiftwidth = 4
-- vim.opt_local.softtabstop = 4
-- end,
-- })
-- Highlight yanked text
-- autocmd("TextYankPost", {
-- callback = function()
-- vim.highlight.on_yank { higroup = "Visual", timeout = 200 }
-- end,
-- })
-- Enable spellchecking in markdown, text and gitcommit files
-- autocmd("FileType", {
-- pattern = { "gitcommit", "markdown", "text" },
-- callback = function()
-- vim.opt_local.spell = true
-- end,
-- })

View File

@ -1,37 +0,0 @@
local user_cmd = vim.api.nvim_create_user_command
local cmd = vim.cmd
-- snapshot stuff
user_cmd("PackerSnapshot", function(info)
require "plugins"
require("packer").snapshot(info.args)
end, { nargs = "+" })
user_cmd("PackerSnapshotDelete", function(info)
require "plugins"
require("packer.snapshot").delete(info.args)
end, { nargs = "+" })
user_cmd("PackerSnapshotRollback", function(info)
require "plugins"
require("packer").rollback(info.args)
end, { nargs = "+" })
-- Add Packer commands because we are not loading it at startup
local packer_cmd = function(callback)
return function()
require "plugins"
require("packer")[callback]()
end
end
user_cmd("PackerClean", packer_cmd "clean", {})
user_cmd("PackerCompile", packer_cmd "compile", {})
user_cmd("PackerInstall", packer_cmd "install", {})
user_cmd("PackerStatus", packer_cmd "status", {})
user_cmd("PackerSync", packer_cmd "sync", {})
user_cmd("PackerUpdate", packer_cmd "update", {})
-- add NvChadUpdate command and mapping
cmd "silent! command! NvChadUpdate lua require('nvchad').update_nvchad()"

18
lua/core/init.lua Normal file
View File

@ -0,0 +1,18 @@
vim.cmd "silent! command! NvChadUpdate lua require('nvchad').update_nvchad()"
local autocmd = vim.api.nvim_create_autocmd
-- Disable statusline in dashboard
autocmd("FileType", {
pattern = "alpha",
callback = function()
vim.opt.laststatus = 0
end,
})
autocmd("BufUnload", {
buffer = 0,
callback = function()
vim.opt.laststatus = 3
end,
})

62
lua/core/packer.lua Normal file
View File

@ -0,0 +1,62 @@
local M = {}
M.bootstrap = function()
local fn = vim.fn
local install_path = fn.stdpath "data" .. "/site/pack/packer/start/packer.nvim"
vim.api.nvim_set_hl(0, "NormalFloat", { bg = "#1e222a" })
if fn.empty(fn.glob(install_path)) > 0 then
print "Cloning packer .."
fn.system { "git", "clone", "--depth", "1", "https://github.com/wbthomason/packer.nvim", install_path }
print "Packer cloned successfully!"
-- install plugins + compile their configs
vim.cmd "packadd packer.nvim"
require "plugins"
vim.cmd "PackerSync"
end
end
M.options = {
auto_clean = true,
compile_on_sync = true,
git = { clone_timeout = 6000 },
display = {
working_sym = "",
error_sym = "",
done_sym = "",
removed_sym = "",
moved_sym = "",
open_fn = function()
return require("packer.util").float { border = "single" }
end,
},
}
-- merge overrides if there are any
M.options = nvchad.load_override(M.options, "wbthomason/packer.nvim")
M.run = function(plugins)
local present, packer = pcall(require, "packer")
if not present then
return
end
-- Override with chadrc values
plugins = nvchad.remove_default_plugins(plugins)
plugins = nvchad.merge_plugins(plugins)
packer.init(M.options)
packer.startup(function(use)
for _, v in pairs(plugins) do
use(v)
end
end)
end
return M

View File

@ -28,12 +28,16 @@ nvchad.load_config = function()
-- attempt to load and merge a user config -- attempt to load and merge a user config
local chadrc_exists = vim.fn.filereadable(vim.fn.stdpath "config" .. "/lua/custom/chadrc.lua") == 1 local chadrc_exists = vim.fn.filereadable(vim.fn.stdpath "config" .. "/lua/custom/chadrc.lua") == 1
if chadrc_exists then if chadrc_exists then
-- merge user config if it exists and is a table; otherwise display an error -- merge user config if it exists and is a table; otherwise display an error
local user_config = require "custom.chadrc" local user_config = require "custom.chadrc"
if type(user_config) == "table" then if type(user_config) == "table" then
conf.mappings = conf.mappings and nvchad.prune_key_map(conf.mappings, user_config.mappings, ignore_modes) or {} conf.mappings = conf.mappings and nvchad.prune_key_map(conf.mappings, user_config.mappings, ignore_modes) or {}
user_config.mappings = user_config.mappings and nvchad.prune_key_map(user_config.mappings, "rm_disabled", ignore_modes) or {} user_config.mappings = user_config.mappings
and nvchad.prune_key_map(user_config.mappings, "rm_disabled", ignore_modes)
or {}
conf = vim.tbl_deep_extend("force", conf, user_config) conf = vim.tbl_deep_extend("force", conf, user_config)
else else
error "User config (chadrc.lua) *must* return a table!" error "User config (chadrc.lua) *must* return a table!"
@ -46,6 +50,7 @@ end
-- reduces a given keymap to a table of modes each containing a list of key maps -- reduces a given keymap to a table of modes each containing a list of key maps
nvchad.reduce_key_map = function(key_map, ignore_modes) nvchad.reduce_key_map = function(key_map, ignore_modes)
local prune_keys = {} local prune_keys = {}
for _, modes in pairs(key_map) do for _, modes in pairs(key_map) do
for mode, mappings in pairs(modes) do for mode, mappings in pairs(modes) do
if not vim.tbl_contains(ignore_modes, mode) then if not vim.tbl_contains(ignore_modes, mode) then
@ -60,23 +65,32 @@ end
-- remove disabled mappings from a given key map -- remove disabled mappings from a given key map
nvchad.remove_disabled_mappings = function(key_map) nvchad.remove_disabled_mappings = function(key_map)
local clean_map = {} local clean_map = {}
if key_map == nil or key_map == "" then if key_map == nil or key_map == "" then
return key_map return key_map
end end
if type(key_map) == "table" then if type(key_map) == "table" then
for k, v in pairs(key_map) do for k, v in pairs(key_map) do
if v ~= nil and v ~= "" then clean_map[k] = v end if v ~= nil and v ~= "" then
clean_map[k] = v
end
end end
end end
return clean_map return clean_map
end end
-- prune keys from a key map table by matching against another key map table -- prune keys from a key map table by matching against another key map table
nvchad.prune_key_map = function(key_map, prune_map, ignore_modes) nvchad.prune_key_map = function(key_map, prune_map, ignore_modes)
if not prune_map then return key_map end if not prune_map then
if not key_map then return prune_map end return key_map
end
if not key_map then
return prune_map
end
local prune_keys = type(prune_map) == "table" and nvchad.reduce_key_map(prune_map, ignore_modes) local prune_keys = type(prune_map) == "table" and nvchad.reduce_key_map(prune_map, ignore_modes)
or { n = {}, v = {}, i = {}, t = {} } or { n = {}, v = {}, i = {}, t = {} }
for ext, modes in pairs(key_map) do for ext, modes in pairs(key_map) do
for mode, mappings in pairs(modes) do for mode, mappings in pairs(modes) do
@ -155,7 +169,7 @@ nvchad.remove_default_plugins = function(plugins)
end end
-- merge default/user plugin tables -- merge default/user plugin tables
nvchad.plugin_list = function(default_plugins) nvchad.merge_plugins = function(default_plugins)
local user_plugins = nvchad.load_config().plugins.user local user_plugins = nvchad.load_config().plugins.user
-- merge default + user plugin table -- merge default + user plugin table

View File

@ -1,21 +1,12 @@
local present, packer = pcall(require, "plugins.packerInit")
if not present then
return false
end
local plugins = { local plugins = {
["nvim-lua/plenary.nvim"] = {}, ["nvim-lua/plenary.nvim"] = {},
["lewis6991/impatient.nvim"] = {}, ["lewis6991/impatient.nvim"] = {},
["wbthomason/packer.nvim"] = {},
["wbthomason/packer.nvim"] = {
event = "VimEnter",
},
["NvChad/extensions"] = {}, ["NvChad/extensions"] = {},
["NvChad/base46"] = { ["NvChad/base46"] = {
after = "packer.nvim", after = "plenary.nvim",
config = function() config = function()
local ok, base46 = pcall(require, "base46") local ok, base46 = pcall(require, "base46")
@ -219,13 +210,4 @@ local plugins = {
}, },
} }
plugins = nvchad.remove_default_plugins(plugins) require("core.packer").run(plugins)
-- merge user plugin table & default plugin table
plugins = nvchad.plugin_list(plugins)
return packer.startup(function(use)
for _, v in pairs(plugins) do
use(v)
end
end)

View File

@ -1,48 +0,0 @@
vim.cmd "packadd packer.nvim"
local present, packer = pcall(require, "packer")
if not present then
local packer_path = vim.fn.stdpath "data" .. "/site/pack/packer/opt/packer.nvim"
print "Cloning packer.."
-- remove the dir before cloning
vim.fn.delete(packer_path, "rf")
vim.fn.system {
"git",
"clone",
"https://github.com/wbthomason/packer.nvim",
"--depth",
"20",
packer_path,
}
vim.cmd "packadd packer.nvim"
present, packer = pcall(require, "packer")
if present then
print "Packer cloned successfully."
else
error("Couldn't clone packer !\nPacker path: " .. packer_path .. "\n" .. packer)
end
end
local options = {
display = {
open_fn = function()
return require("packer.util").float { border = "single" }
end,
},
git = {
clone_timeout = 6000, -- seconds
},
auto_clean = true,
compile_on_sync = true,
snapshot = nil,
}
options = nvchad.load_override(options, "wbthomason/packer.nvim")
packer.init(options)
return packer