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…
	
	Add table
		Add a link
		
	
		Reference in a new issue