feat: Add custom scripts and hook based setup
This commit introduces a hook system that allows the user to add custom modules which can use these hooks to invoke function af specific NvChad events to allow for extending og functionality
This commit is contained in:
parent
ca1ad15ad2
commit
bfc10e6034
6 changed files with 71 additions and 1 deletions
22
lua/core/custom.lua
Normal file
22
lua/core/custom.lua
Normal file
|
@ -0,0 +1,22 @@
|
|||
local function isModuleAvailable(name)
|
||||
if package.loaded[name] then
|
||||
return true
|
||||
else
|
||||
for _, searcher in ipairs(package.searchers or package.loaders) do
|
||||
local loader = searcher(name)
|
||||
if type(loader) == 'function' then
|
||||
package.preload[name] = loader
|
||||
return true
|
||||
end
|
||||
end
|
||||
return false
|
||||
end
|
||||
end
|
||||
|
||||
local loadIfExists = function (module)
|
||||
if isModuleAvailable(module) then
|
||||
require(module)
|
||||
end
|
||||
end
|
||||
|
||||
loadIfExists('custom')
|
38
lua/core/hooks.lua
Normal file
38
lua/core/hooks.lua
Normal file
|
@ -0,0 +1,38 @@
|
|||
local hooks, M = {}, {};
|
||||
local allowed_hooks = {
|
||||
"install_plugins",
|
||||
"setup_mappings",
|
||||
"ready",
|
||||
}
|
||||
|
||||
local function has_value (tab, val)
|
||||
for _, value in ipairs(tab) do
|
||||
if value == val then
|
||||
return true
|
||||
end
|
||||
end
|
||||
|
||||
return false
|
||||
end
|
||||
|
||||
M.add = function(name, fn)
|
||||
if not(has_value(allowed_hooks, name)) then
|
||||
error("Custom lua uses unallowed hook " .. name)
|
||||
end
|
||||
if hooks[name] == nil then
|
||||
hooks[name] = {}
|
||||
end
|
||||
table.insert(hooks[name], fn);
|
||||
end
|
||||
|
||||
M.run = function(name, args)
|
||||
if hooks[name] == nil then
|
||||
return;
|
||||
end
|
||||
|
||||
for _, hook in pairs(hooks[name]) do
|
||||
hook(args)
|
||||
end
|
||||
end
|
||||
|
||||
return M;
|
|
@ -1,9 +1,12 @@
|
|||
local core_modules = {
|
||||
"core.custom",
|
||||
"core.options",
|
||||
"core.autocmds",
|
||||
"core.mappings",
|
||||
}
|
||||
|
||||
local hooks = require('core.hooks');
|
||||
|
||||
for _, module in ipairs(core_modules) do
|
||||
local ok, err = pcall(require, module)
|
||||
if not ok then
|
||||
|
@ -13,3 +16,5 @@ end
|
|||
|
||||
-- set all the non plugin mappings
|
||||
require("core.mappings").misc()
|
||||
|
||||
hooks.run("ready")
|
||||
|
|
|
@ -1,8 +1,8 @@
|
|||
local utils = require "core.utils"
|
||||
local hooks = require "core.hooks"
|
||||
|
||||
local config = utils.load_config()
|
||||
local map = utils.map
|
||||
|
||||
local maps = config.mappings
|
||||
local plugin_maps = maps.plugin
|
||||
|
||||
|
@ -116,6 +116,7 @@ M.misc = function()
|
|||
optional_mappings()
|
||||
required_mappings()
|
||||
user_config_mappings()
|
||||
hooks.run("setup_mappings", map)
|
||||
end
|
||||
|
||||
-- below are all plugin related mappings
|
||||
|
|
2
lua/custom/init.lua
Normal file
2
lua/custom/init.lua
Normal file
|
@ -0,0 +1,2 @@
|
|||
-- This is where you custom modules and plugins goes.
|
||||
-- See the wiki for a guide on how to extend NvChad
|
|
@ -337,4 +337,6 @@ return packer.startup(function()
|
|||
require("core.mappings").vim_fugitive()
|
||||
end,
|
||||
}
|
||||
|
||||
require("core.hooks").run("install_plugins", use)
|
||||
end)
|
||||
|
|
Loading…
Reference in a new issue