summaryrefslogtreecommitdiff
path: root/mac/.config/LunarVim/lua/lvim/plugin-loader.lua
diff options
context:
space:
mode:
authorTheSiahxyz <164138827+TheSiahxyz@users.noreply.github.com>2025-08-23 12:42:37 +0900
committerTheSiahxyz <164138827+TheSiahxyz@users.noreply.github.com>2025-08-23 12:42:37 +0900
commit07d294425a98ee5d1e22d03e2b24ae2c76e487c0 (patch)
treea6818f0d64438c5fdb88b00a35d944f80c056213 /mac/.config/LunarVim/lua/lvim/plugin-loader.lua
parent6fc28cdb3529ca8ee864cb5c41674cb0a4af72a1 (diff)
updates
Diffstat (limited to 'mac/.config/LunarVim/lua/lvim/plugin-loader.lua')
-rw-r--r--mac/.config/LunarVim/lua/lvim/plugin-loader.lua138
1 files changed, 138 insertions, 0 deletions
diff --git a/mac/.config/LunarVim/lua/lvim/plugin-loader.lua b/mac/.config/LunarVim/lua/lvim/plugin-loader.lua
new file mode 100644
index 0000000..485b8b3
--- /dev/null
+++ b/mac/.config/LunarVim/lua/lvim/plugin-loader.lua
@@ -0,0 +1,138 @@
+local plugin_loader = {}
+
+local utils = require "lvim.utils"
+local Log = require "lvim.core.log"
+local join_paths = utils.join_paths
+
+local plugins_dir = join_paths(get_runtime_dir(), "site", "pack", "lazy", "opt")
+
+function plugin_loader.init(opts)
+ opts = opts or {}
+
+ local lazy_install_dir = opts.install_path
+ or join_paths(vim.fn.stdpath "data", "site", "pack", "lazy", "opt", "lazy.nvim")
+
+ if not utils.is_directory(lazy_install_dir) then
+ print "Initializing first time setup"
+ local core_plugins_dir = join_paths(get_lvim_base_dir(), "plugins")
+ if utils.is_directory(core_plugins_dir) then
+ vim.fn.mkdir(plugins_dir, "p")
+ vim.fn.delete(plugins_dir, "rf")
+ require("lvim.utils").fs_copy(core_plugins_dir, plugins_dir)
+ else
+ vim.fn.system {
+ "git",
+ "clone",
+ "--branch=stable",
+ "https://github.com/folke/lazy.nvim.git",
+ lazy_install_dir,
+ }
+
+ local default_snapshot_path = join_paths(get_lvim_base_dir(), "snapshots", "default.json")
+ local snapshot = assert(vim.fn.json_decode(vim.fn.readfile(default_snapshot_path)))
+ vim.fn.system {
+ "git",
+ "-C",
+ lazy_install_dir,
+ "checkout",
+ snapshot["lazy.nvim"].commit,
+ }
+ end
+
+ vim.api.nvim_create_autocmd("User", { pattern = "LazyDone", callback = require("lvim.lsp").setup })
+ end
+
+ local rtp = vim.opt.rtp:get()
+ local base_dir = (vim.env.LUNARVIM_BASE_DIR or get_runtime_dir() .. "/lvim"):gsub("\\", "/")
+ local idx_base = #rtp + 1
+ for i, path in ipairs(rtp) do
+ path = path:gsub("\\", "/")
+ if path == base_dir then
+ idx_base = i + 1
+ break
+ end
+ end
+ table.insert(rtp, idx_base, lazy_install_dir)
+ table.insert(rtp, idx_base + 1, join_paths(plugins_dir, "*"))
+ vim.opt.rtp = rtp
+
+ pcall(function()
+ -- set a custom path for lazy's cache
+ local lazy_cache = require "lazy.core.cache"
+ lazy_cache.path = join_paths(get_cache_dir(), "lazy", "luac")
+ end)
+end
+
+function plugin_loader.reload(spec)
+ local Config = require "lazy.core.config"
+ local lazy = require "lazy"
+
+ -- TODO: reset cache? and unload plugins?
+
+ Config.spec = spec
+
+ require("lazy.core.plugin").load(true)
+ require("lazy.core.plugin").update_state()
+
+ local not_installed_plugins = vim.tbl_filter(function(plugin)
+ return not plugin._.installed
+ end, Config.plugins)
+
+ require("lazy.manage").clear()
+
+ if #not_installed_plugins > 0 then
+ lazy.install { wait = true }
+ end
+
+ if #Config.to_clean > 0 then
+ -- TODO: set show to true when lazy shows something useful on clean
+ lazy.clean { wait = true, show = false }
+ end
+end
+
+function plugin_loader.load(configurations)
+ Log:debug "loading plugins configuration"
+ local lazy_available, lazy = pcall(require, "lazy")
+ if not lazy_available then
+ Log:warn "skipping loading plugins until lazy.nvim is installed"
+ return
+ end
+
+ -- remove plugins from rtp before loading lazy, so that all plugins won't be loaded on startup
+ vim.opt.runtimepath:remove(join_paths(plugins_dir, "*"))
+
+ local status_ok = xpcall(function()
+ table.insert(lvim.lazy.opts.install.colorscheme, 1, lvim.colorscheme)
+ lazy.setup(configurations, lvim.lazy.opts)
+ end, debug.traceback)
+
+ if not status_ok then
+ Log:warn "problems detected while loading plugins' configurations"
+ Log:trace(debug.traceback())
+ end
+end
+
+function plugin_loader.get_core_plugins()
+ local names = {}
+ local plugins = require "lvim.plugins"
+ local get_name = require("lazy.core.plugin").Spec.get_name
+ for _, spec in pairs(plugins) do
+ if spec.enabled == true or spec.enabled == nil then
+ table.insert(names, get_name(spec[1]))
+ end
+ end
+ return names
+end
+
+function plugin_loader.sync_core_plugins()
+ local core_plugins = plugin_loader.get_core_plugins()
+ Log:trace(string.format("Syncing core plugins: [%q]", table.concat(core_plugins, ", ")))
+ require("lazy").update { wait = true, plugins = core_plugins }
+end
+
+function plugin_loader.ensure_plugins()
+ Log:debug "calling lazy.install()"
+ require("lazy").install { wait = true }
+end
+
+return plugin_loader