local plugin_loader = {} function plugin_loader:init(opts) opts = opts or {} local install_path = opts.install_path or vim.fn.stdpath "data" .. "/site/pack/packer/start/packer.nvim" local package_root = opts.package_root or vim.fn.stdpath "data" .. "/site/pack" local compile_path = opts.compile_path or vim.fn.stdpath "config" .. "/plugin/packer_compile.lua" if vim.fn.empty(vim.fn.glob(install_path)) > 0 then vim.fn.system { "git", "clone", "--depth", "1", "https://github.com/wbthomason/packer.nvim", install_path } vim.cmd "packadd packer.nvim" end local packer_ok, packer = pcall(require, "packer") if not packer_ok then return end packer.init { package_root = package_root, compile_path = compile_path, git = { clone_timeout = 300 }, display = { open_fn = function() return require("packer.util").float { border = "rounded" } end, }, } self.packer = packer return self end function plugin_loader:load(configurations) return self.packer.startup(function(use) for _, plugins in ipairs(configurations) do for _, plugin in ipairs(plugins) do use(plugin) end end end) end return plugin_loader