summaryrefslogtreecommitdiff
path: root/ar/.config/TheSiahxyz/lua/thesiahxyz/plugins/telescope.lua
diff options
context:
space:
mode:
Diffstat (limited to 'ar/.config/TheSiahxyz/lua/thesiahxyz/plugins/telescope.lua')
-rw-r--r--ar/.config/TheSiahxyz/lua/thesiahxyz/plugins/telescope.lua1041
1 files changed, 1041 insertions, 0 deletions
diff --git a/ar/.config/TheSiahxyz/lua/thesiahxyz/plugins/telescope.lua b/ar/.config/TheSiahxyz/lua/thesiahxyz/plugins/telescope.lua
new file mode 100644
index 0000000..ceb6872
--- /dev/null
+++ b/ar/.config/TheSiahxyz/lua/thesiahxyz/plugins/telescope.lua
@@ -0,0 +1,1041 @@
+local have_make = vim.fn.executable("make") == 1
+local have_cmake = vim.fn.executable("cmake") == 1
+
+function vim.live_grep_from_project_git_root()
+ local function get_git_toplevel()
+ local path = vim.fn.system("git rev-parse --show-toplevel")
+ if vim.v.shell_error then
+ return nil
+ end
+ return path
+ end
+
+ local opts = { cwd = get_git_toplevel() }
+
+ require("telescope.builtin").live_grep(opts)
+end
+
+local function find_nvim_plugin_files(prompt_bufnr)
+ local actions = require("telescope.actions")
+ local action_state = require("telescope.actions.state")
+
+ actions.close(prompt_bufnr)
+
+ local selection = action_state.get_selected_entry()
+ if selection and selection.value then
+ -- Construct the full path
+ local base_path = vim.fn.stdpath("data")
+ local full_path = vim.fn.resolve(base_path .. "/" .. selection.value)
+
+ require("mini.files").open(full_path, true)
+ end
+end
+
+return {
+ {
+ "nvim-telescope/telescope-file-browser.nvim",
+ dependencies = {
+ "nvim-lua/plenary.nvim",
+ "nvim-telescope/telescope.nvim",
+ },
+ -- init = function()
+ -- vim.api.nvim_create_autocmd("VimEnter", {
+ -- group = vim.api.nvim_create_augroup("TelescopeFileBrowserStartDirectory", { clear = true }),
+ -- desc = "Start telescope-file-browser with directory",
+ -- once = true,
+ -- callback = function()
+ -- if package.loaded["telescope-file-browser.nvim"] then
+ -- return
+ -- else
+ -- local stats = vim.uv.fs_stat(vim.fn.argv(0))
+ -- if stats and stats.type == "directory" then
+ -- require("telescope").extensions.file_browser.file_browser()
+ -- end
+ -- end
+ -- end,
+ -- })
+ -- end,
+ config = function()
+ local fb_actions = require("telescope._extensions.file_browser.actions")
+
+ require("telescope").setup({
+ extensions = {
+ file_browser = {
+ path = vim.uv.cwd(),
+ cwd = vim.uv.cwd(),
+ cwd_to_path = false,
+ grouped = true,
+ files = true,
+ add_dirs = true,
+ depth = 1,
+ auto_depth = true,
+ select_buffer = true,
+ hidden = { file_browser = false, folder_browser = false },
+ respect_gitignore = vim.fn.executable("fd") == 1,
+ no_ignore = true,
+ follow_symlinks = true,
+ browse_files = require("telescope._extensions.file_browser.finders").browse_files,
+ browse_folders = require("telescope._extensions.file_browser.finders").browse_folders,
+ hide_parent_dir = false,
+ collapse_dirs = true,
+ prompt_path = true,
+ quiet = true,
+ dir_icon = "",
+ dir_icon_hl = "Default",
+ display_stat = { date = true, size = true, mode = true },
+ hijack_netrw = false,
+ use_fd = true,
+ git_status = true,
+ mappings = {
+ ["i"] = {
+ ["<C-a>"] = fb_actions.create,
+ ["<C-e>"] = fb_actions.create_from_prompt,
+ ["<C-r>"] = fb_actions.rename,
+ ["<C-d>"] = fb_actions.move,
+ ["<C-y>"] = fb_actions.copy,
+ ["<Del>"] = fb_actions.remove,
+ ["<C-o>"] = fb_actions.open,
+ ["<C-h>"] = fb_actions.goto_parent_dir,
+ ["<C-Space>"] = fb_actions.goto_home_dir,
+ ["<C-w>"] = fb_actions.goto_cwd,
+ ["<C-g>"] = fb_actions.change_cwd,
+ ["<C-f>"] = fb_actions.toggle_browser,
+ ["<C-_>"] = fb_actions.toggle_hidden,
+ ["<C-t>"] = fb_actions.toggle_all,
+ ["<bs>"] = fb_actions.backspace,
+ },
+ ["n"] = {
+ ["a"] = fb_actions.create,
+ ["n"] = fb_actions.create_from_prompt,
+ ["r"] = fb_actions.rename,
+ ["d"] = fb_actions.move,
+ ["y"] = fb_actions.copy,
+ ["Del"] = fb_actions.remove,
+ ["o"] = fb_actions.open,
+ ["h"] = fb_actions.goto_parent_dir,
+ ["gh"] = fb_actions.goto_home_dir,
+ ["<C-w>"] = fb_actions.goto_cwd,
+ ["<C-g>"] = fb_actions.change_cwd,
+ ["f"] = fb_actions.toggle_browser,
+ ["/"] = fb_actions.toggle_hidden,
+ ["t"] = fb_actions.toggle_all,
+ },
+ },
+ results_title = vim.fn.fnamemodify(vim.uv.cwd(), ":~"),
+ },
+ },
+ })
+
+ require("telescope").load_extension("file_browser")
+
+ vim.keymap.set(
+ "n",
+ "<leader>et",
+ ":Telescope file_browser path=%:p:h select_buffer=true<CR>",
+ { desc = "File browser (cwd)" }
+ )
+ vim.keymap.set("n", "<leader>eT", ":Telescope file_browser<CR>", { desc = "File browser" })
+ end,
+ },
+ {
+ "nvim-telescope/telescope.nvim",
+ branch = "master",
+ dependencies = {
+ { "nvim-lua/plenary.nvim" },
+ {
+ "nvim-telescope/telescope-fzf-native.nvim",
+ build = have_make and "make"
+ or "cmake -S. -Bbuild -DCMAKE_BUILD_TYPE=Release && cmake --build build --config Release && cmake --install build --prefix build",
+ enabled = have_make or have_cmake,
+ config = function()
+ require("telescope").load_extension("fzf")
+ end,
+ },
+ {
+ "nvim-telescope/telescope-github.nvim",
+ init = function()
+ local wk = require("which-key")
+ wk.add({
+ mode = { "n" },
+ { "<leader>gh", group = "gh" },
+ })
+ end,
+ config = function()
+ require("telescope").load_extension("gh")
+ vim.keymap.set({ "n", "v" }, "<leader>gi", ":Telescope gh issues ", { desc = "Find gh issues" })
+ vim.keymap.set(
+ { "n", "v" },
+ "<leader>gp",
+ ":Telescope gh pull_request ",
+ { desc = "Find gh pull request" }
+ )
+ vim.keymap.set({ "n", "v" }, "<leader>ght", ":Telescope gh gist ", { desc = "Find gh gist" })
+ vim.keymap.set({ "n", "v" }, "<leader>ghr", ":Telescope gh run ", { desc = "Find gh run" })
+ end,
+ },
+ {
+ "nvim-telescope/telescope-ui-select.nvim",
+ config = function()
+ require("telescope").setup({
+ extensions = {
+ ["ui-select"] = {
+ require("telescope.themes").get_dropdown({
+ -- even more opts
+ }),
+
+ -- pseudo code / specification for writing custom displays, like the one
+ -- for "codeactions"
+ -- specific_opts = {
+ -- make_indexed = function(items) -> indexed_items, width,
+ -- [kind] = {
+ -- make_displayer = function(widths) -> displayer
+ -- make_display = function(displayer) -> function(e)
+ -- make_ordinal = function(e) -> string
+ -- },
+ -- -- for example to disable the custom builtin "codeactions" display
+ -- do the following
+ -- codeactions = false,
+ -- }
+ },
+ },
+ })
+ require("telescope").load_extension("ui-select")
+ end,
+ },
+ {
+ "jvgrootveld/telescope-zoxide",
+ dependencies = { "nvim-lua/popup.nvim" },
+ config = function()
+ require("telescope").setup({
+ extensions = {
+ zoxide = {
+ prompt_title = "[ TheSiahxyz ]",
+ mappings = {
+ default = {
+ action = function(selection)
+ vim.cmd.cd(selection.path)
+ end,
+ after_action = function(selection)
+ print("Update to (" .. selection.z_score .. ") " .. selection.path)
+ end,
+ },
+ ["<C-s>"] = {
+ action = require("telescope._extensions.zoxide.utils").create_basic_command(
+ "split"
+ ),
+ opts = { desc = "split" },
+ },
+ ["<C-v>"] = {
+ action = require("telescope._extensions.zoxide.utils").create_basic_command(
+ "vsplit"
+ ),
+ },
+ ["<C-e>"] = {
+ action = require("telescope._extensions.zoxide.utils").create_basic_command(
+ "edit"
+ ),
+ },
+ ["<C-b>"] = {
+ keepinsert = true,
+ action = function(selection)
+ require("telescope").extensions.file_browser.file_browser({
+ cwd = selection.path,
+ })
+ end,
+ },
+ },
+ },
+ },
+ })
+ require("telescope").load_extension("zoxide")
+
+ vim.keymap.set("n", "<leader>fz", function()
+ require("telescope").extensions.zoxide.list()
+ end, { desc = "Find files (zoxide)" })
+ end,
+ },
+ {
+ "nvim-telescope/telescope-live-grep-args.nvim",
+ -- This will not install any breaking changes.
+ -- For major updates, this must be adjusted manually.
+ version = "^1.0.0",
+ init = function()
+ local wk = require("which-key")
+ wk.add({
+ mode = { "n", "v" },
+ { "<leader>f", group = "Find" },
+ { "<leader>fl", group = "Live grep" },
+ })
+ end,
+ config = function()
+ local lga_actions = require("telescope-live-grep-args.actions")
+ local actions = require("telescope.actions")
+
+ require("telescope").setup({
+ extensions = {
+ live_grep_args = {
+ auto_quoting = true, -- enable/disable auto-quoting
+ -- define mappings, e.g.
+ mappings = { -- extend mappings
+ i = {
+ ["<C-w>"] = lga_actions.quote_prompt(),
+ ["<C-i>"] = lga_actions.quote_prompt({ postfix = " --iglob " }),
+ -- freeze the current list and start a fuzzy search in the frozen list
+ ["<C-space>"] = actions.to_fuzzy_refine,
+ },
+ },
+ vimgrep_arguments = {
+ "rg",
+ "--color=never",
+ "--no-heading",
+ "--with-filename",
+ "--line-number",
+ "--column",
+ "--smart-case",
+ "--follow",
+ "--hidden",
+ "--no-ignore",
+ },
+ -- ... also accepts theme settings, for example:
+ -- theme = "dropdown", -- use dropdown theme
+ -- theme = { }, -- use own theme spec
+ -- layout_config = { mirror=true }, -- mirror preview pane
+ },
+ },
+ })
+ require("telescope").load_extension("live_grep_args")
+ vim.keymap.set(
+ "n",
+ "<leader>flf",
+ ":lua require('telescope').extensions.live_grep_args.live_grep_args()<CR>",
+ { desc = "Find live grep args" }
+ )
+
+ local live_grep_args_shortcuts = require("telescope-live-grep-args.shortcuts")
+ vim.keymap.set(
+ "n",
+ "<leader>ss",
+ live_grep_args_shortcuts.grep_word_under_cursor,
+ { desc = "Search shortcuts (Live grep)" }
+ )
+
+ local function search_git(visual)
+ -- Retrieve the git root path
+ local handle = io.popen("git rev-parse --show-toplevel")
+ if not handle then
+ print("Error: Unable to open git handle")
+ return
+ end
+
+ local git_root_path = handle:read("*a"):gsub("%s+", "")
+ handle:close()
+
+ if not git_root_path or git_root_path == "" then
+ print("Error: Unable to retrieve git root path")
+ return
+ end
+
+ local opts = {
+ prompt_title = visual and ("Visual-Grep in " .. git_root_path)
+ or ("Live-Grep in " .. git_root_path),
+ shorten_path = false,
+ cwd = git_root_path,
+ file_ignore_patterns = { ".git", ".png", "tags" },
+ initial_mode = "insert",
+ selection_strategy = "reset",
+ theme = require("telescope.themes").get_dropdown({}),
+ }
+
+ if visual then
+ -- Capture the selected text in visual mode
+ vim.cmd('normal! "vy')
+ local visual_selection = vim.fn.getreg("v")
+ opts.search = visual_selection
+ require("telescope.builtin").grep_string(opts)
+ else
+ require("telescope.builtin").live_grep(opts)
+ end
+ end
+
+ vim.keymap.set("n", "<leader>flg", function()
+ search_git(false)
+ end, { remap = true, silent = false, desc = "Live grep in the git root folder" })
+
+ vim.keymap.set("v", "<leader>flg", function()
+ search_git(true)
+ end, { remap = true, silent = false, desc = "Grep in the git root folder" })
+ -- Retrieve the current tmux session path
+ -- This will not change when we navigate to a different pane
+ local function search_tmux(visual)
+ local handle = io.popen("tmux display-message -p '#{session_path}'")
+ if not handle then
+ print("Error: Unable to open tmux handle")
+ return
+ end
+
+ local tmux_session_path = handle:read("*a"):gsub("%s+", "")
+ handle:close()
+
+ if not tmux_session_path or tmux_session_path == "" then
+ print("Error: Unable to retrieve tmux session path")
+ return
+ end
+
+ local opts = {
+ prompt_title = visual and ("Visual-Grep in " .. tmux_session_path)
+ or ("Live-Grep in " .. tmux_session_path),
+ shorten_path = false,
+ cwd = tmux_session_path,
+ file_ignore_patterns = { ".git", ".png", "tags" },
+ initial_mode = "insert",
+ selection_strategy = "reset",
+ theme = require("telescope.themes").get_dropdown({}),
+ }
+
+ if visual then
+ require("telescope.builtin").grep_string(opts)
+ else
+ require("telescope.builtin").live_grep(opts)
+ end
+ end
+
+ vim.keymap.set("n", "<leader>flt", function()
+ search_tmux(false)
+ end, { remap = true, silent = false, desc = "Live grep in the current tmux session folder" })
+
+ vim.keymap.set("v", "<leader>flt", function()
+ search_tmux(true)
+ end, { remap = true, silent = false, desc = "Grep string in the current tmux session folder" })
+ vim.api.nvim_set_keymap(
+ "v",
+ "<leader>fls",
+ 'y<esc>:Telescope live_grep default_text=<c-r>0<cr> search_dirs={"$PWD"}',
+ { noremap = true, silent = true, desc = "Live grep default text" }
+ )
+ vim.keymap.set("n", "<leader>f/", function()
+ require("telescope.builtin").current_buffer_fuzzy_find(
+ require("telescope.themes").get_dropdown({
+ winblend = 10,
+ previewer = false,
+ relative = "editor",
+ })
+ )
+ end, { desc = "Find in current buffer" })
+ end,
+ },
+ {
+ "xiyaowong/telescope-emoji.nvim",
+ config = function()
+ require("telescope").setup({
+ extensions = {
+ emoji = {
+ action = function(emoji)
+ -- argument emoji is a table.
+ -- {name="", value="", cagegory="", description=""}
+
+ vim.fn.setreg("*", emoji.value)
+ print([[Press p or "*p to paste this emoji]] .. emoji.value)
+
+ -- insert emoji when picked
+ -- vim.api.nvim_put({ emoji.value }, 'c', false, true)
+ end,
+ },
+ },
+ })
+ require("telescope").load_extension("emoji")
+ end,
+ keys = {
+ { "<leader>se", ":Telescope emoji<cr>", desc = "Search emoji" },
+ },
+ },
+ {
+ "ThePrimeagen/harpoon",
+ branch = "harpoon2",
+ dependencies = { "nvim-lua/plenary.nvim" },
+ },
+ {
+ "folke/trouble.nvim",
+ },
+ },
+ init = function()
+ local wk = require("which-key")
+ wk.add({
+ mode = { "n" },
+ { "<leader>f", group = "Find" },
+ { "<leader>fp", group = "Private/Public" },
+ { "<leader>s", group = "Search" },
+ { "<leader>sb", group = "Buffer" },
+ })
+ end,
+ config = function()
+ local actions = require("telescope.actions")
+ local actions_state = require("telescope.actions.state")
+ local actions_layout = require("telescope.actions.layout")
+ local open_with_trouble = require("trouble.sources.telescope").open
+ local add_to_trouble = require("trouble.sources.telescope").add
+
+ require("telescope").setup({
+ defaults = {
+ mappings = {
+ i = {
+ ["<C-a>"] = add_to_trouble,
+ ["<C-e>"] = actions.complete_tag,
+ ["<C-g>"] = function(prompt_bufnr)
+ local selection = actions_state.get_selected_entry()
+ local dir = vim.fn.fnamemodify(selection.path, ":p:h")
+ actions.close(prompt_bufnr)
+ -- Depending on what you want put `cd`, `lcd`, `tcd`
+ vim.cmd(string.format("silent lcd %s", dir))
+ end,
+ ["<C-u>"] = actions.nop,
+ ["<C-d>"] = actions.nop,
+ ["<C-b>"] = actions.nop,
+ ["<C-f>"] = actions_layout.toggle_preview,
+ ["<C-j>"] = actions.preview_scrolling_down,
+ ["<C-k>"] = actions.preview_scrolling_up,
+ ["<C-h>"] = actions.preview_scrolling_left,
+ ["<C-l>"] = actions.preview_scrolling_right,
+ ["<C-q>"] = actions.send_to_qflist + actions.open_qflist,
+ ["<M-q>"] = actions.send_selected_to_qflist + actions.open_qflist,
+ ["<C-t>"] = open_with_trouble,
+ ["<C-z>"] = actions.select_horizontal,
+ ["<C-w>"] = { "<c-s-w>", type = "command" },
+ ["<C-o><C-w>"] = actions.insert_original_cword,
+ ["<C-o><C-a>"] = actions.insert_original_cWORD,
+ ["<C-o><C-f>"] = actions.insert_original_cfile,
+ ["<C-o><C-l>"] = actions.insert_original_cline,
+ ["<M-f>"] = actions.nop,
+ ["<M-k>"] = actions.nop,
+ },
+ n = {
+ ["q"] = actions.close,
+ ["<C-a>"] = add_to_trouble,
+ ["<C-c>"] = actions.close,
+ ["<C-d>"] = actions.nop,
+ ["<C-u>"] = actions.nop,
+ ["<C-f>"] = actions_layout.toggle_preview,
+ ["<C-b>"] = actions.nop,
+ ["<C-e>"] = actions.complete_tag,
+ ["<C-g>"] = {
+ function(prompt_bufnr)
+ local selection = actions_state.get_selected_entry()
+ local dir = vim.fn.fnamemodify(selection.path, ":p:h")
+ actions.close(prompt_bufnr)
+ -- Depending on what you want put `cd`, `lcd`, `tcd`
+ vim.cmd(string.format("silent lcd %s", dir))
+ end,
+ opts = { desc = "Change directory" },
+ },
+ ["<C-j>"] = actions.preview_scrolling_down,
+ ["<C-k>"] = actions.preview_scrolling_up,
+ ["<C-h>"] = actions.preview_scrolling_left,
+ ["<C-l>"] = actions.preview_scrolling_right,
+ ["<C-q>"] = actions.send_to_qflist + actions.open_qflist,
+ ["<M-q>"] = actions.send_selected_to_qflist + actions.open_qflist,
+ ["<C-t>"] = open_with_trouble,
+ ["<C-z>"] = actions.select_horizontal,
+ ["<M-f"] = actions.nop,
+ ["<M-k"] = actions.nop,
+ },
+ },
+ file_ignore_patterns = {
+ "node_modules",
+ "yarn.lock",
+ ".git",
+ "^.git/",
+ "%/bin/zsh/",
+ ".sl",
+ "_build",
+ ".next",
+ "LICENSE",
+ "%lock%.json",
+ },
+ find_command = {
+ "rg",
+ "--files",
+ "--follow",
+ "--hidden",
+ "--no-ignore",
+ "--sortr=modified",
+ },
+ hidden = true,
+ path_display = {
+ "filename_first",
+ },
+ git_worktrees = {
+ {
+ home = vim.env.HOME,
+ private = vim.env.HOME .. "/Private/repos",
+ public = vim.env.HOME .. "/Public/repos",
+ },
+ },
+ results_title = vim.fn.fnamemodify(vim.uv.cwd(), ":~"),
+ scroll_strategy = "limit",
+ },
+ pickers = {
+ buffers = {
+ mappings = {
+ i = {
+ ["<C-x>"] = actions.delete_buffer,
+ },
+ n = {
+ ["dd"] = actions.delete_buffer,
+ ["<C-x>"] = actions.delete_buffer,
+ },
+ },
+ },
+ find_files = {
+ -- `hidden = true` will still show the inside of `.git/` as it's not `.gitignore`d.
+ find_command = {
+ "rg",
+ "--files",
+ "--follow",
+ "--hidden",
+ "--sortr=modified",
+ },
+ },
+ },
+ })
+
+ -- find
+ vim.keymap.set({ "i", "n" }, "<C-g>", function()
+ require("telescope.builtin").buffers({
+ sort_mru = true,
+ sort_lastused = true,
+ initial_mode = "normal",
+ })
+ end, { desc = "Find buffer files" })
+ vim.keymap.set("n", "<leader>fb", function()
+ require("telescope.builtin").buffers({
+ sort_mru = true,
+ sort_lastused = true,
+ initial_mode = "normal",
+ })
+ end, { desc = "Find buffer files" })
+ vim.keymap.set("n", "<leader>fc", function()
+ require("telescope.builtin").find_files({ cwd = vim.fn.expand("~/.config") })
+ end, { desc = "Find config files" })
+ vim.keymap.set("n", "<leader>fd", function()
+ require("telescope.builtin").find_files({ cwd = vim.fn.expand("~/.dotfiles") })
+ end, { desc = "Find dotfiles files" })
+ vim.keymap.set("n", "<leader>ff", function()
+ require("telescope.builtin").find_files()
+ end, { desc = "Find files" })
+ vim.keymap.set("n", "<leader>f<leader>", function()
+ local pickers = require("telescope.pickers")
+ local finders = require("telescope.finders")
+ local sorters = require("telescope.config").values.generic_sorter
+ local previewers = require("telescope.previewers")
+ local entry_display = require("telescope.pickers.entry_display")
+
+ -- Get list of open buffers
+ local opened_files = {}
+ for _, buf in ipairs(vim.api.nvim_list_bufs()) do
+ if vim.api.nvim_buf_is_loaded(buf) then
+ local name = vim.api.nvim_buf_get_name(buf)
+ if name ~= "" then
+ opened_files[name] = true
+ end
+ end
+ end
+
+ -- Create the custom picker
+ pickers
+ .new({}, {
+ prompt_title = "Find Files",
+ finder = finders.new_oneshot_job({ "fd", "--type", "f" }, {
+ entry_maker = function(entry)
+ local is_open = opened_files[vim.fn.fnamemodify(entry, ":p")] -- Match absolute paths
+ local displayer = entry_display.create({
+ separator = " ",
+ items = {
+ { width = 1 }, -- Marker width
+ { remaining = true }, -- Filepath
+ },
+ })
+
+ return {
+ value = entry,
+ ordinal = entry,
+ display = function()
+ return displayer({ is_open and "*" or " ", entry })
+ end,
+ path = entry,
+ }
+ end,
+ }),
+ sorter = sorters({}),
+ previewer = previewers.vim_buffer_cat.new({}),
+ })
+ :find()
+ end, { desc = "Find files with open markers" })
+
+ vim.keymap.set("n", "<leader>fF", function()
+ require("telescope.builtin").find_files({
+ cwd = vim.fn.expand("~"),
+ find_command = {
+ "rg",
+ "--files",
+ "--follow",
+ "--hidden",
+ "--glob",
+ "!**/.cache/*/*/*",
+ "--glob",
+ "!**/.mozilla/*",
+ "--glob",
+ "!**/.local/lib/*/*",
+ "--glob",
+ "!**/.local/share/*/*",
+ "--glob",
+ "!**/.local/state/*/*/*/*",
+ "--sortr=modified",
+ },
+ })
+ end, { desc = "Find root files" })
+ vim.keymap.set("n", "<leader>fk", function()
+ require("telescope.builtin").find_files({
+ cwd = vim.fn.expand("~/.local/src/suckless/"),
+ find_command = {
+ "find",
+ "-maxdepth",
+ "2",
+ "-type",
+ "f",
+ "-name",
+ ".git",
+ "-prune",
+ "-o",
+ },
+ })
+ end, { desc = "Find suckless files" })
+ vim.keymap.set("n", "<leader>fg", function()
+ require("telescope.builtin").git_files()
+ end, { desc = "Find git files" })
+ vim.keymap.set("n", "<leader>fo", function()
+ require("telescope.builtin").oldfiles({})
+ end, { desc = "Find old files" })
+ vim.keymap.set("n", "<leader>fpv", function()
+ require("telescope.builtin").find_files({ cwd = vim.fn.expand("~/Private") })
+ end, { desc = "Find private files" })
+ vim.keymap.set("n", "<leader>fpb", function()
+ require("telescope.builtin").find_files({ cwd = vim.fn.expand("~/Public") })
+ end, { desc = "Find public files" })
+ vim.keymap.set("n", "<leader>fr", function()
+ require("telescope.builtin").find_files({
+ cwd = vim.fn.expand("~/.local/bin"),
+ })
+ end, { desc = "Find script files" })
+ vim.keymap.set("n", "<leader>fv", function()
+ require("telescope.builtin").find_files({
+ cwd = vim.fn.stdpath("config"),
+ find_command = { "fd", "--type", "f", "--follow", "--color", "never", "--extension", "lua" },
+ })
+ end, { desc = "Find neovim config files" })
+ vim.keymap.set("n", "<leader>fV", function()
+ require("telescope.builtin").find_files({
+ cwd = vim.fn.stdpath("data"),
+ find_command = {
+ "find",
+ "-maxdepth",
+ "2",
+ "-type",
+ "d",
+ "-iname",
+ ".git",
+ "-prune",
+ "-o",
+ },
+ attach_mappings = function(_, map)
+ map("i", "<CR>", find_nvim_plugin_files)
+ map("n", "<CR>", find_nvim_plugin_files)
+ return true
+ end,
+ })
+ end, { desc = "Find neovim plugin files" })
+ -- git
+ vim.keymap.set("n", "<leader>gc", function()
+ require("telescope.builtin").git_commits()
+ end, { desc = "Find git commits" })
+ vim.keymap.set("n", "<leader>gC", function()
+ require("telescope.builtin").git_bcommits()
+ end, { desc = "Find buffer git commits" })
+ vim.keymap.set("n", "<leader>gb", function()
+ require("telescope.builtin").git_branches()
+ end, { desc = "Find branches" })
+ vim.keymap.set("n", "<leader>gl", function()
+ require("telescope.builtin").git_bcommits_range()
+ end, { desc = "Find lines git commits" })
+ vim.keymap.set("v", "<leader>gl", function()
+ require("telescope.builtin").git_bcommits_range()
+ end, { desc = "Find lines git commits" })
+ vim.keymap.set("n", "<leader>gs", function()
+ require("telescope.builtin").git_status()
+ end, { desc = "Find git status" })
+ vim.keymap.set("n", "<leader>gS", function()
+ require("telescope.builtin").git_stash()
+ end, { desc = "Find git stash" })
+ -- lsp
+ vim.keymap.set("n", "gd", function()
+ require("telescope.builtin").lsp_definitions({})
+ end, { desc = "Find definitions" })
+ vim.keymap.set("n", "gR", function()
+ require("telescope.builtin").lsp_references({})
+ end, { desc = "Find references" })
+ -- search
+ vim.keymap.set("n", "<leader>cc", function()
+ require("telescope.builtin").colorscheme({})
+ end, { desc = "Search color scheme" })
+ vim.keymap.set("n", "<leader>sa", function()
+ require("telescope.builtin").autocommands({})
+ end, { desc = "Search auto commands" })
+ vim.keymap.set("n", "<leader>sbf", function()
+ require("telescope.builtin").current_buffer_fuzzy_find({})
+ end, { desc = "Search current buffers " })
+ vim.keymap.set("n", "<leader>sbt", function()
+ require("telescope.builtin").current_buffer_tags({})
+ end, { desc = "Search current buffer tags" })
+ vim.keymap.set("n", "<leader>sc", function()
+ require("telescope.builtin").commands({})
+ end, { desc = "Search commands" })
+ vim.keymap.set("n", "<leader>sC", function()
+ require("telescope.builtin").command_history({})
+ end, { desc = "Search history" })
+ vim.keymap.set("n", "<leader>sd", function()
+ require("telescope.builtin").diagnostics({})
+ end, { desc = "Search diagonostics" })
+ vim.keymap.set("n", "<leader>sg", vim.live_grep_from_project_git_root, { desc = "Live grep (git)" })
+ vim.keymap.set("n", "<leader>sh", function()
+ require("telescope.builtin").help_tags({})
+ end, { desc = "Search help tags" })
+ vim.keymap.set("n", "<leader>sH", function()
+ require("telescope.builtin").highlights({})
+ end, { desc = "Search highlights" })
+ vim.keymap.set("n", "<leader>sj", function()
+ require("telescope.builtin").jumplist({})
+ end, { desc = "Search jump list" })
+ vim.keymap.set("n", "<leader>skb", function()
+ require("telescope.builtin").keymaps({})
+ end, { desc = "Search key bindings" })
+ vim.keymap.set("n", "<leader>skk", function()
+ local word = vim.fn.expand("<cword>")
+ require("telescope.builtin").grep_string({ search = word })
+ end, { desc = "Search words under cursor" })
+ vim.keymap.set("n", "<leader>skK", function()
+ local word = vim.fn.expand("<cWORD>")
+ require("telescope.builtin").grep_string({ search = word })
+ end, { desc = "Search all words under cursor" })
+ vim.keymap.set("n", "<leader>sl", function()
+ require("telescope.builtin").loclist({})
+ end, { desc = "Search location list" })
+ vim.keymap.set("n", "<leader>sm", function()
+ require("telescope.builtin").marks({})
+ end, { desc = "Search marks" })
+ vim.keymap.set("n", "<leader>sM", function()
+ require("telescope.builtin").man_pages({})
+ end, { desc = "Search man pages" })
+ vim.keymap.set("n", "<leader>so", function()
+ require("telescope.builtin").vim_options({})
+ end, { desc = "Search vim options" })
+ vim.keymap.set("n", "<leader>sq", function()
+ require("telescope.builtin").quickfix({})
+ end, { desc = "Search quickfix list" })
+ vim.keymap.set("n", "<leader>sQ", function()
+ require("telescope.builtin").quickfixhistory({})
+ end, { desc = "Search quickfix history" })
+ vim.keymap.set("n", "<leader>sr", function()
+ require("telescope.builtin").registers({})
+ end, { desc = "Search registers" })
+ vim.keymap.set("n", "<leader>sR", function()
+ require("telescope.builtin").resume({})
+ end, { desc = "Search resume" })
+ vim.keymap.set("n", "<leader>st", function()
+ require("telescope.builtin").filetypes({})
+ end, { desc = "Search file types" })
+ vim.keymap.set("n", "<leader>sw", function()
+ require("telescope.builtin").live_grep({})
+ end, { desc = "Search word (Live grep)" })
+ vim.keymap.set("n", "<leader>sW", function()
+ require("telescope.builtin").grep_string({})
+ end, { desc = "Search word (Grep)" })
+ end,
+ },
+ {
+ "cljoly/telescope-repo.nvim",
+ dependencies = {
+ "nvim-lua/plenary.nvim",
+ "nvim-telescope/telescope.nvim",
+ },
+ config = function()
+ require("telescope").setup({
+ extensions = {
+ repo = {
+ list = {
+ fd_opts = {
+ "--no-ignore-vcs",
+ },
+ file_ignore_patterns = {
+ "^" .. vim.env.HOME .. "/%.cache/",
+ "^" .. vim.env.HOME .. "/%.cargo/",
+ },
+ },
+ },
+ },
+ })
+
+ require("telescope").load_extension("repo")
+ end,
+ keys = {
+ { mode = "n", "<leader>fG", "<cmd>Telescope repo list<cr>", desc = "Find git files (repo)" },
+ },
+ },
+ {
+ "debugloop/telescope-undo.nvim",
+ dependencies = { -- note how they're inverted to above example
+ {
+ "nvim-telescope/telescope.nvim",
+ dependencies = { "nvim-lua/plenary.nvim" },
+ },
+ },
+ opts = {
+ -- don't use `defaults = { }` here, do this in the main telescope spec
+ extensions = {
+ undo = {
+ -- telescope-undo.nvim config, see below
+ },
+ -- no other extensions here, they can have their own spec too
+ },
+ },
+ config = function(_, opts)
+ -- Calling telescope's setup from multiple specs does not hurt, it will happily merge the
+ -- configs for us. We won't use data, as everything is in it's own namespace (telescope
+ -- defaults, as well as each extension).
+ require("telescope").setup(opts)
+ require("telescope").load_extension("undo")
+ end,
+ keys = {
+ { -- lazy style key map
+ "<leader>fu",
+ "<cmd>Telescope undo<cr>",
+ desc = "Find undo history",
+ },
+ },
+ },
+ {
+ "nvim-telescope/telescope-frecency.nvim",
+ dependencies = {
+ "nvim-lua/plenary.nvim",
+ "nvim-telescope/telescope.nvim",
+ },
+ config = function()
+ require("telescope").setup({
+ extensions = {
+ frecency = {
+ auto_validate = false,
+ matcher = "fuzzy",
+ },
+ },
+ })
+
+ require("telescope").load_extension("frecency")
+
+ vim.keymap.set("n", "<leader>fq", function()
+ require("telescope").extensions.frecency.frecency({
+ workspace = "CWD",
+ })
+ end, { desc = "Find frequency files" })
+
+ vim.keymap.set("n", "<leader>flq", function()
+ local frecency = require("telescope").extensions.frecency
+ require("telescope.builtin").live_grep({
+ search_dirs = frecency.query({}),
+ })
+ end, { desc = "Find frequency live grep" })
+
+ vim.keymap.set("n", "<leader>qd", "<cmd>FrecencyDelete<cr>", { desc = "Delete current buffer frequency" })
+ end,
+ },
+ {
+ "nvim-telescope/telescope-media-files.nvim",
+ dependencies = {
+ "nvim-lua/popup.nvim",
+ "nvim-lua/plenary.nvim",
+ "nvim-telescope/telescope.nvim",
+ },
+ config = function()
+ require("telescope").setup({
+ extensions = {
+ media_files = {
+ -- filetypes whitelist
+ -- defaults to {"png", "jpg", "mp4", "webm", "pdf"}
+ filetypes = { "png", "jpg", "mp4", "mkv", "webm", "pdf" },
+ -- find command (defaults to `fd`)
+ find_cmd = "rg",
+ },
+ },
+ })
+ require("telescope").load_extension("media_files")
+ end,
+ keys = {
+ {
+ "<leader>fm",
+ "<cmd>Telescope media_files<cr>",
+ desc = "Find media files",
+ },
+ },
+ },
+ {
+ "nvim-telescope/telescope-project.nvim",
+ dependencies = {
+ "nvim-telescope/telescope.nvim",
+ "nvim-telescope/telescope-file-browser.nvim",
+ },
+ config = function()
+ local project_actions = require("telescope._extensions.project.actions")
+ require("telescope").setup({
+ extensions = {
+ project = {
+ base_dirs = {
+ { path = "~/Private", max_depth = 2 },
+ { path = "~/Public", max_depth = 2 },
+ },
+ mappings = {
+ i = {
+ ["<C-x>"] = project_actions.delete_project,
+ ["<C-r>"] = project_actions.rename_project,
+ ["<C-a>"] = project_actions.add_project,
+ ["<C-A>"] = project_actions.add_project_cwd,
+ ["<C-f>"] = project_actions.find_project_files,
+ ["<C-b>"] = project_actions.browse_project_files,
+ ["<C-s>"] = project_actions.search_in_project_files,
+ ["<C-o>"] = project_actions.recent_project_files,
+ ["<C-g>"] = project_actions.change_working_directory,
+ ["<C-l>"] = project_actions.next_cd_scope,
+ ["<C-w>"] = project_actions.change_workspace,
+ },
+ n = {
+ ["x"] = project_actions.delete_project,
+ ["r"] = project_actions.rename_project,
+ ["c"] = project_actions.add_project,
+ ["C"] = project_actions.add_project_cwd,
+ ["f"] = project_actions.find_project_files,
+ ["b"] = project_actions.browse_project_files,
+ ["s"] = project_actions.search_in_project_files,
+ ["o"] = project_actions.recent_project_files,
+ ["g"] = project_actions.change_working_directory,
+ ["l"] = project_actions.next_cd_scope,
+ },
+ },
+ },
+ },
+ })
+ require("telescope").load_extension("project")
+ end,
+ keys = {
+ {
+ "<leader>fpj",
+ "<cmd>Telescope projects<cr>",
+ desc = "Find projects",
+ },
+ },
+ },
+}