summary refs log tree commit diff
path: root/.vim/lua/internal/plugins/telescope.lua
diff options
context:
space:
mode:
authorRobert Günzler <r@gnzler.io>2024-11-25 13:30:37 +0100
committerRobert Günzler <r@gnzler.io>2024-11-25 13:58:25 +0100
commit23de12baba9fbfc4ca24581b37c374aa5345cc25 (patch)
treee4b3c421bad572eb85a1089eaad44dc3059ab6e6 /.vim/lua/internal/plugins/telescope.lua
parent18e3848110da0a59843058927ea04b496f5db2a5 (diff)
update nvim config
Signed-off-by: Robert Günzler <r@gnzler.io>
Diffstat (limited to '.vim/lua/internal/plugins/telescope.lua')
-rw-r--r--.vim/lua/internal/plugins/telescope.lua137
1 files changed, 137 insertions, 0 deletions
diff --git a/.vim/lua/internal/plugins/telescope.lua b/.vim/lua/internal/plugins/telescope.lua
new file mode 100644
index 0000000..6339a2c
--- /dev/null
+++ b/.vim/lua/internal/plugins/telescope.lua
@@ -0,0 +1,137 @@
+return {
+  {
+    'nvim-telescope/telescope.nvim',
+    lazy = false,
+    dependencies = {
+      { 'nvim-lua/plenary.nvim' },
+      {
+        'nvim-telescope/telescope-fzf-native.nvim',
+        build = 'cmake -S. -Bbuild -GNinja -DCMAKE_BUILD_TYPE=Release && cmake --build build --config Release',
+      },
+      { 'nvim-telescope/telescope-ui-select.nvim' },
+    },
+    config = function(spec, _)
+      require('telescope').setup({
+        defaults = require('telescope.themes').get_ivy({
+          prompt = false,
+          borderchars = {
+            preview = { '─', '│', '─', '│', '┌', '┐', '┘', '└' },
+          },
+        }),
+
+        extensions = {
+          wrap_results = true,
+
+          fzf = {},
+
+          ['ui-select'] = {
+            require('telescope.themes').get_ivy({
+              prompt = false,
+              -- sharp edges please
+              borderchars = {
+                preview = { '─', '│', '─', '│', '┌', '┐', '┘', '└' },
+              },
+              layout_config = { height = 9 },
+            }),
+          },
+        },
+      })
+
+      pcall(require('telescope').load_extension, 'fzf')
+      pcall(require('telescope').load_extension, 'ui-select')
+
+      -- user commands
+      vim.api.nvim_create_user_command(
+        'F',
+        'Telescope find_files search_dirs=<args>',
+        { desc = 'Telescope find_files', nargs = '?' }
+      )
+      vim.api.nvim_create_user_command(
+        'G',
+        'Telescope live_grep search_dirs=<args>',
+        { desc = 'Telescope live_grep', nargs = '?' }
+      )
+
+      -- keymaps
+      local builtin = require('telescope.builtin')
+      for _, o in ipairs(spec.keys) do
+        if not o[2] then
+          local mod = vim.split(o.desc, ': ')[2]
+          vim.keymap.set(o.mode, o[1], builtin[mod], { desc = o.desc })
+        end
+      end
+
+      -- highlights
+      vim.schedule(function()
+        vim.api.nvim_set_hl(0, 'TelescopeBorder', { fg = 'NvimDarkGrey4', force = true })
+        vim.api.nvim_set_hl(0, 'TelescopeTitle', { fg = 'NvimLightMagenta', force = true })
+        vim.api.nvim_set_hl(0, 'NormalFloat', { link = 'TelescopeNormal', force = true })
+      end)
+    end,
+    keys = {
+      { mode = 'n', ';/', desc = 'telescope: current_buffer_fuzzy_find' },
+      { mode = 'n', ';b', desc = 'telescope: buffers' },
+      { mode = 'n', ';f', desc = 'telescope: find_files' },
+      { mode = 'n', ';g', desc = 'telescope: live_grep' },
+      { mode = 'n', ';d', desc = 'telescope: diagnostics' },
+      {
+        mode = 'n',
+        ';v',
+        function()
+          require('telescope.builtin').find_files({
+            prompt_title = 'vimrc',
+            search_dirs = {
+              vim.fn.stdpath('config'),
+            },
+          })
+        end,
+        desc = 'telescope: vim_config',
+      },
+      {
+        mode = 'n',
+        ';;t',
+        '<cmd>Telescope<cr>',
+        desc = 'telescope: select (interactive)',
+      },
+      {
+        mode = 'n',
+        ';;f',
+        function()
+          local dir
+          if vim.opt.filetype:get() == 'oil' then
+            dir = require('oil').get_current_dir()
+          else
+            dir = vim.fn.expand('%:p')
+          end
+          _G.feedkeys(':Telescope find_files search_dirs=' .. dir)
+        end,
+        desc = 'telescope: find_files (interactive)',
+      },
+      {
+        mode = 'n',
+        ';;g',
+        function()
+          local dir
+          if vim.opt.filetype:get() == 'oil' then
+            dir = require('oil').get_current_dir()
+          else
+            dir = vim.fn.expand('%:p')
+          end
+          _G.feedkeys(':Telescope live_grep search_dirs=' .. dir)
+        end,
+        desc = 'telescope: live_grep (interactive)',
+      },
+    },
+  },
+
+  {
+    'prochri/telescope-all-recent.nvim',
+    lazy = false,
+    dependencies = {
+      'nvim-telescope/telescope.nvim',
+      'kkharji/sqlite.lua',
+    },
+    after = { 'nvim-telescope/telescope-ui-select.nvim' },
+    opts = {},
+  },
+}