---@class lazyvim.util.pick ---@overload fun(command:string, opts?:lazyvim.util.pick.Opts): fun() local M = setmetatable({}, { __call = function(m, ...) return m.wrap(...) end, }) ---@class lazyvim.util.pick.Opts: table ---@field root? boolean ---@field cwd? string ---@field buf? number ---@field show_untracked? boolean ---@type table M.commands = { files = "find_files", } ---@param command? string ---@param opts? lazyvim.util.pick.Opts function M.open(command, opts) command = command or "auto" opts = opts or {} opts = vim.deepcopy(opts) if type(opts.cwd) == "boolean" then LazyVim.warn("LazyVim.pick: opts.cwd should be a string or nil") opts.cwd = nil end if not opts.cwd and opts.root ~= false then opts.cwd = LazyVim.root({ buf = opts.buf }) end local cwd = opts.cwd or vim.uv.cwd() if command == "auto" then command = "files" if vim.uv.fs_stat(cwd .. "/.git") and not vim.uv.fs_stat(cwd .. "/.ignore") and not vim.uv.fs_stat(cwd .. "/.rgignore") then command = "git_files" opts.show_untracked = opts.show_untracked ~= false end end command = M.commands[command] or command M._open(command, opts) end ---@param command? string ---@param opts? lazyvim.util.pick.Opts function M.wrap(command, opts) opts = opts or {} return function() M.open(command, vim.deepcopy(opts)) end end ---@param command string ---@param opts? lazyvim.util.pick.Opts function M._open(command, opts) return LazyVim.telescope.open(command, opts) end function M.config_files() return M.wrap("files", { cwd = vim.fn.stdpath("config") }) end return M