local M = {} function M.config() -- Define this minimal config so that it's available if telescope is not yet available. options.builtin.telescope = { ---@usage disable telescope completely [not recommeded] active = true, on_config_done = nil, } local status_ok, actions = pcall(require, "telescope.actions") if not status_ok then return end options.builtin.telescope = vim.tbl_extend("force", options.builtin.telescope, { defaults = { prompt_prefix = " ", selection_caret = " ", entry_prefix = " ", initial_mode = "insert", selection_strategy = "reset", sorting_strategy = "ascending", layout_strategy = "horizontal", layout_config = { width = 0.75, prompt_position = "top", preview_cutoff = 120, horizontal = { mirror = false }, vertical = { mirror = false }, }, vimgrep_arguments = { "rg", "--color=never", "--no-heading", "--with-filename", "--line-number", "--column", "--smart-case", "--hidden", }, mappings = { i = { [""] = actions.move_selection_next, [""] = actions.move_selection_previous, [""] = actions.close, [""] = actions.cycle_history_next, [""] = actions.cycle_history_prev, [""] = actions.smart_send_to_qflist + actions.open_qflist, [""] = actions.select_default + actions.center, }, n = { [""] = actions.move_selection_next, [""] = actions.move_selection_previous, [""] = actions.smart_send_to_qflist + actions.open_qflist, }, }, file_ignore_patterns = {}, path_display = { shorten = 5 }, winblend = 0, border = {}, borderchars = { "─", "│", "─", "│", "╭", "╮", "╯", "╰" }, color_devicons = true, set_env = { ["COLORTERM"] = "truecolor" }, -- default = nil, pickers = { find_files = { find_command = { "fd", "--type=file", "--hidden", "--smart-case" }, }, live_grep = { --@usage don't include the filename in the search results only_sort_text = true, }, }, }, extensions = { fzf = { fuzzy = true, -- false will only do exact matching override_generic_sorter = true, -- override the generic sorter override_file_sorter = true, -- override the file sorter case_mode = "smart_case", -- or "ignore_case" or "respect_case" }, }, }) end function M.code_actions() local opts = { winblend = 15, layout_config = { prompt_position = "top", width = 80, height = 12, }, borderchars = { prompt = { "─", "│", " ", "│", "╭", "╮", "│", "│" }, results = { "─", "│", "─", "│", "├", "┤", "╯", "╰" }, preview = { "─", "│", "─", "│", "╭", "╮", "╯", "╰" }, }, border = {}, previewer = false, shorten_path = false, } require("telescope.builtin").lsp_code_actions( require("telescope.themes").get_dropdown(opts) ) end function M.setup() local previewers = require "telescope.previewers" local sorters = require "telescope.sorters" local actions = require "telescope.actions" options.builtin.telescope = vim.tbl_extend("keep", { file_previewer = previewers.vim_buffer_cat.new, grep_previewer = previewers.vim_buffer_vimgrep.new, qflist_previewer = previewers.vim_buffer_qflist.new, file_sorter = sorters.get_fuzzy_file, generic_sorter = sorters.get_generic_fuzzy_sorter, ---@usage Mappings are fully customizable. Many familiar mapping patterns are setup as defaults. mappings = { i = { [""] = actions.move_selection_next, [""] = actions.move_selection_previous, [""] = actions.close, [""] = actions.cycle_history_next, [""] = actions.cycle_history_prev, [""] = actions.smart_send_to_qflist + actions.open_qflist, [""] = actions.select_default + actions.center, }, n = { [""] = actions.move_selection_next, [""] = actions.move_selection_previous, [""] = actions.smart_send_to_qflist + actions.open_qflist, }, }, }, options.builtin.telescope) local telescope = require "telescope" telescope.setup(options.builtin.telescope) if options.builtin.project.active then pcall(function() require("telescope").load_extension "projects" end) end if options.builtin.telescope.on_config_done then options.builtin.telescope.on_config_done(telescope) end if options.builtin.telescope.extensions and options.builtin.telescope.extensions.fzf then require("telescope").load_extension "fzf" end end return M