--[[ This directory is the luaUtils template. You can choose what things from it that you would like to use. And then delete the rest. Everything in this directory is optional. --]] local M = {} -- NOTE: If you don't use lazy.nvim, you don't need this file. ---lazy.nvim wrapper ---@overload fun(nixLazyPath: string|nil, lazySpec: any, opts: table) ---@overload fun(nixLazyPath: string|nil, opts: table) function M.setup(nixLazyPath, lazySpec, opts) local lazySpecs = nil local lazyCFG = nil if opts == nil and type(lazySpec) == "table" and lazySpec.spec then lazyCFG = lazySpec else lazySpecs = lazySpec lazyCFG = opts end local function regularLazyDownload() local lazypath = vim.fn.stdpath("data") .. "/lazy/lazy.nvim" if not vim.loop.fs_stat(lazypath) then vim.fn.system { 'git', 'clone', '--filter=blob:none', 'https://github.com/folke/lazy.nvim.git', '--branch=stable', -- latest stable release lazypath, } end return lazypath end local isNixCats = vim.g[ [[nixCats-special-rtp-entry-nixCats]] ] ~= nil local lazypath if not isNixCats then -- No nixCats? Not nix. Do it normally lazypath = regularLazyDownload() vim.opt.rtp:prepend(lazypath) else local nixCats = require('nixCats') -- Else, its nix, so we wrap lazy with a few extra config options lazypath = nixLazyPath -- and also we probably dont have to download lazy either if lazypath == nil then lazypath = regularLazyDownload() end local oldPath local lazypatterns local fallback if type(lazyCFG) == "table" and type(lazyCFG.dev) == "table" then lazypatterns = lazyCFG.dev.patterns fallback = lazyCFG.dev.fallback oldPath = lazyCFG.dev.path end local myNeovimPackages = nixCats.vimPackDir .. "/pack/myNeovimPackages" local newLazyOpts = { performance = { rtp = { reset = false, }, }, dev = { path = function(plugin) local path = nil if type(oldPath) == "string" and vim.fn.isdirectory(oldPath .. "/" .. plugin.name) == 1 then path = oldPath .. "/" .. plugin.name elseif type(oldPath) == "function" then path = oldPath(plugin) if type(path) ~= "string" then path = nil end end if path == nil then if vim.fn.isdirectory(myNeovimPackages .. "/start/" .. plugin.name) == 1 then path = myNeovimPackages .. "/start/" .. plugin.name elseif vim.fn.isdirectory(myNeovimPackages .. "/opt/" .. plugin.name) == 1 then path = myNeovimPackages .. "/opt/" .. plugin.name else path = "~/projects/" .. plugin.name end end return path end, patterns = lazypatterns or { "" }, fallback = fallback == nil and true or fallback, } } lazyCFG = vim.tbl_deep_extend("force", lazyCFG or {}, newLazyOpts) -- do the reset we disabled without removing important stuff local cfgdir = nixCats.configDir vim.opt.rtp = { cfgdir, nixCats.nixCatsPath, nixCats.pawsible.allPlugins.ts_grammar_path, vim.fn.stdpath("data") .. "/site", lazypath, vim.env.VIMRUNTIME, vim.fn.fnamemodify(vim.v.progpath, ":p:h:h") .. "/lib/nvim", cfgdir .. "/after", } end if lazySpecs then require('lazy').setup(lazySpecs, lazyCFG) else require('lazy').setup(lazyCFG) end end return M