nvim/.config/nvim/lua/plugins/editor/telescope.lua

-- nvim/.config/nvim/lua/plugins/editor/telescope.lua

return {
  "nvim-telescope/telescope.nvim",
  cmd = "Telescope",
  version = false,
  dependencies = {
    "nvim-lua/plenary.nvim",
    {
      "nvim-telescope/telescope-fzf-native.nvim",
      build = "make",
      enabled = vim.fn.executable("make") == 1,
    },
    "nvim-telescope/telescope-ui-select.nvim",
  },
  keys = {
    { "<leader>f",  "<cmd>Telescope find_files<cr>",     desc = "find files" },
    { "<leader>/",  "<cmd>Telescope live_grep<cr>",      desc = "live grep" },
    { "<leader>b",  "<cmd>Telescope buffers<cr>",        desc = "buffers" },
    { "<leader>H",  "<cmd>Telescope help_tags<cr>",      desc = "help" },
    { "<leader>gs", "<cmd>Telescope git_status<cr>",     desc = "git status" },
    { "<leader>gc", "<cmd>Telescope git_commits<cr>",    desc = "git commits" },
    { "<leader>r",  "<cmd>Telescope oldfiles<cr>",       desc = "recent files" },
    { "<leader>sd", "<cmd>Telescope diagnostics<cr>",    desc = "diagnostics" },
    { "<leader>ss", "<cmd>Telescope lsp_document_symbols<cr>", desc = "symbols" },
    { "<leader>sw", "<cmd>Telescope grep_string<cr>",    desc = "grep word" },
    { "<leader>'",  "<cmd>Telescope resume<cr>",         desc = "resume" },
  },
  opts = function()
    local actions = require("telescope.actions")
    return {
      defaults = {
        prompt_prefix  = "  ",
        selection_caret = " ",
        path_display   = { "truncate" },
        sorting_strategy = "ascending",
        layout_config = {
          horizontal = { prompt_position = "top", preview_width = 0.55 },
          vertical   = { mirror = false },
          width = 0.87, height = 0.8, preview_cutoff = 120,
        },
        file_ignore_patterns = { "%.git/", "node_modules/", "target/", "dist/", "%.o$" },
        mappings = {
          i = {
            ["<C-j>"]     = actions.move_selection_next,
            ["<C-k>"]     = actions.move_selection_previous,
            ["<C-q>"]     = actions.send_to_qflist + actions.open_qflist,
            ["<C-c>"]     = actions.close,
            ["<esc>"]     = actions.close,
          },
        },
      },
      pickers = {
        find_files = { hidden = true, follow = true },
        live_grep  = { additional_args = function() return { "--hidden" } end },
        buffers    = { sort_mru = true, ignore_current_buffer = true },
      },
      extensions = {
        ["ui-select"] = { require("telescope.themes").get_dropdown({}) },
      },
    }
  end,
  config = function(_, opts)
    local t = require("telescope")
    t.setup(opts)
    pcall(t.load_extension, "fzf")
    pcall(t.load_extension, "ui-select")
  end,
}