Squashed 'users/configs/system/nvim/nvim/' content from commit e088bce
git-subtree-dir: users/configs/system/nvim/nvim git-subtree-split: e088bce2bd90c0b5c35d13a8615a55455b96294d
This commit is contained in:
132
lua/astronvim/bootstrap.lua
Normal file
132
lua/astronvim/bootstrap.lua
Normal file
@@ -0,0 +1,132 @@
|
||||
--- ### AstroNvim Core Bootstrap
|
||||
--
|
||||
-- This module simply sets up the global `astronvim` module.
|
||||
-- This is automatically loaded and should not be resourced, everything is accessible through the global `astronvim` variable.
|
||||
--
|
||||
-- @module astronvim.bootstrap
|
||||
-- @copyright 2022
|
||||
-- @license GNU General Public License v3.0
|
||||
|
||||
_G.astronvim = {}
|
||||
|
||||
--- installation details from external installers
|
||||
astronvim.install = _G["astronvim_installation"] or { home = vim.fn.stdpath "config" }
|
||||
astronvim.supported_configs = { astronvim.install.home }
|
||||
--- external astronvim configuration folder
|
||||
astronvim.install.config = vim.fn.stdpath("config"):gsub("[^/\\]+$", "astronvim")
|
||||
-- check if they are the same, protects against NVIM_APPNAME use for isolated install
|
||||
if astronvim.install.home ~= astronvim.install.config then
|
||||
vim.opt.rtp:append(astronvim.install.config)
|
||||
--- supported astronvim user conifg folders
|
||||
table.insert(astronvim.supported_configs, astronvim.install.config)
|
||||
end
|
||||
|
||||
--- Looks to see if a module path references a lua file in a configuration folder and tries to load it. If there is an error loading the file, write an error and continue
|
||||
---@param module string The module path to try and load
|
||||
---@return table|nil # The loaded module if successful or nil
|
||||
local function load_module_file(module)
|
||||
-- placeholder for final return value
|
||||
local found_file = nil
|
||||
-- search through each of the supported configuration locations
|
||||
for _, config_path in ipairs(astronvim.supported_configs) do
|
||||
-- convert the module path to a file path (example user.init -> user/init.lua)
|
||||
local module_path = config_path .. "/lua/" .. module:gsub("%.", "/") .. ".lua"
|
||||
-- check if there is a readable file, if so, set it as found
|
||||
if vim.fn.filereadable(module_path) == 1 then found_file = module_path end
|
||||
end
|
||||
-- if we found a readable lua file, try to load it
|
||||
local out = nil
|
||||
if found_file then
|
||||
-- try to load the file
|
||||
local status_ok, loaded_module = pcall(require, module)
|
||||
-- if successful at loading, set the return variable
|
||||
if status_ok then
|
||||
out = loaded_module
|
||||
-- if unsuccessful, throw an error
|
||||
else
|
||||
vim.api.nvim_err_writeln("Error loading file: " .. found_file .. "\n\n" .. loaded_module)
|
||||
end
|
||||
end
|
||||
-- return the loaded module or nil if no file found
|
||||
return out
|
||||
end
|
||||
|
||||
--- Main configuration engine logic for extending a default configuration table with either a function override or a table to merge into the default option
|
||||
-- @param overrides the override definition, either a table or a function that takes a single parameter of the original table
|
||||
-- @param default the default configuration table
|
||||
-- @param extend boolean value to either extend the default or simply overwrite it if an override is provided
|
||||
-- @return the new configuration table
|
||||
local function func_or_extend(overrides, default, extend)
|
||||
-- if we want to extend the default with the provided override
|
||||
if extend then
|
||||
-- if the override is a table, use vim.tbl_deep_extend
|
||||
if type(overrides) == "table" then
|
||||
local opts = overrides or {}
|
||||
default = default and vim.tbl_deep_extend("force", default, opts) or opts
|
||||
-- if the override is a function, call it with the default and overwrite default with the return value
|
||||
elseif type(overrides) == "function" then
|
||||
default = overrides(default)
|
||||
end
|
||||
-- if extend is set to false and we have a provided override, simply override the default
|
||||
elseif overrides ~= nil then
|
||||
default = overrides
|
||||
end
|
||||
-- return the modified default table
|
||||
return default
|
||||
end
|
||||
|
||||
--- user settings from the base `user/init.lua` file
|
||||
local user_settings = load_module_file "user.init"
|
||||
|
||||
--- Search the user settings (user/init.lua table) for a table with a module like path string
|
||||
-- @param module the module path like string to look up in the user settings table
|
||||
-- @return the value of the table entry if exists or nil
|
||||
local function user_setting_table(module)
|
||||
-- get the user settings table
|
||||
local settings = user_settings or {}
|
||||
-- iterate over the path string split by '.' to look up the table value
|
||||
for tbl in string.gmatch(module, "([^%.]+)") do
|
||||
settings = settings[tbl]
|
||||
-- if key doesn't exist, keep the nil value and stop searching
|
||||
if settings == nil then break end
|
||||
end
|
||||
-- return the found settings
|
||||
return settings
|
||||
end
|
||||
|
||||
--- User configuration entry point to override the default options of a configuration table with a user configuration file or table in the user/init.lua user settings
|
||||
---@param module string The module path of the override setting
|
||||
---@param default? any The default value that will be overridden
|
||||
---@param extend? boolean # Whether extend the default settings or overwrite them with the user settings entirely (default: true)
|
||||
---@return any # The new configuration settings with the user overrides applied
|
||||
function astronvim.user_opts(module, default, extend)
|
||||
-- default to extend = true
|
||||
if extend == nil then extend = true end
|
||||
-- if no default table is provided set it to an empty table
|
||||
if default == nil then default = {} end
|
||||
-- try to load a module file if it exists
|
||||
local user_module_settings = load_module_file("user." .. module)
|
||||
-- if no user module file is found, try to load an override from the user settings table from user/init.lua
|
||||
if user_module_settings == nil then user_module_settings = user_setting_table(module) end
|
||||
-- if a user override was found call the configuration engine
|
||||
if user_module_settings ~= nil then default = func_or_extend(user_module_settings, default, extend) end
|
||||
-- return the final configuration table with any overrides applied
|
||||
return default
|
||||
end
|
||||
|
||||
--- Updater settings overridden with any user provided configuration
|
||||
astronvim.updater = {
|
||||
options = astronvim.user_opts("updater", { remote = "origin", channel = "stable" }),
|
||||
snapshot = { module = "lazy_snapshot", path = vim.fn.stdpath "config" .. "/lua/lazy_snapshot.lua" },
|
||||
rollback_file = vim.fn.stdpath "cache" .. "/astronvim_rollback.lua",
|
||||
}
|
||||
local options = astronvim.updater.options
|
||||
if astronvim.install.is_stable ~= nil then options.channel = astronvim.install.is_stable and "stable" or "nightly" end
|
||||
if options.pin_plugins == nil then options.pin_plugins = options.channel == "stable" end
|
||||
|
||||
--- table of user created terminals
|
||||
astronvim.user_terminals = {}
|
||||
--- table of language servers to ignore the setup of, configured through lsp.skip_setup in the user configuration
|
||||
astronvim.lsp = { skip_setup = astronvim.user_opts("lsp.skip_setup", {}), progress = {} }
|
||||
--- the default colorscheme to apply on startup
|
||||
astronvim.default_colorscheme = astronvim.user_opts("colorscheme", "astrotheme", false)
|
||||
Reference in New Issue
Block a user