123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138 |
- 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
|