From 1262eca199e0156b71676af66dd17b399eb6a6ee Mon Sep 17 00:00:00 2001
From: Hadeed Ahmad <me@hadeedahmad.com>
Date: Sun, 6 Apr 2025 22:42:11 +0500
Subject: [PATCH] Add telescope mappings

---
 nvim/lua/config/keymaps.lua           | 30 ++++++++++++++++++++++-----
 nvim/lua/config/lazy.lua              | 11 +++++++++-
 nvim/lua/config/plugins/lsp.lua       | 16 ++++++++++++++
 nvim/lua/config/plugins/telescope.lua | 23 ++++++++++++++++++++
 4 files changed, 74 insertions(+), 6 deletions(-)
 create mode 100644 nvim/lua/config/plugins/telescope.lua

diff --git a/nvim/lua/config/keymaps.lua b/nvim/lua/config/keymaps.lua
index be5da19..f2d9cc5 100644
--- a/nvim/lua/config/keymaps.lua
+++ b/nvim/lua/config/keymaps.lua
@@ -4,13 +4,13 @@ vim.g.mapleader = " "
 set("i", "jk", "<ESC>")
 set("i", "kj", "<ESC>")
 
-set({"n", "x"}, "j", [[v:count == 0 ? "gj" : "j"]], { expr = true })
-set({"n", "x"}, "k", [[v:count == 0 ? "gk" : "k"]], { expr = true })
+set({ "n", "x" }, "j", [[v:count == 0 ? "gj" : "j"]], { expr = true })
+set({ "n", "x" }, "k", [[v:count == 0 ? "gk" : "k"]], { expr = true })
 
-set({"n", "x"}, ";", ":")
-set({"n", "x"}, ":", ";")
+set({ "n", "x" }, ";", ":")
+set({ "n", "x" }, ":", ";")
 
-set({"n", "x"}, "gy", "\"+y")
+set({ "n", "x" }, "gy", "\"+y")
 set("n", "gp", "\"+p")
 
 set("n", "n", "nzz")
@@ -39,3 +39,23 @@ vim.api.nvim_create_autocmd("Filetype", {
     vim.keymap.set("n", "<leader><leader>x", "<cmd>%lua<cr>", { buffer = true })
   end,
 })
+
+local M = {}
+
+function M.telescope()
+  local builtin = require("telescope.builtin")
+
+  set("n", "<leader>ff", builtin.find_files)
+  set("n", "<leader>fh", builtin.help_tags)
+  set("n", "<leader>ft", builtin.builtin)
+  set("n", "<leader>fm", builtin.man_pages)
+
+  set("n", "<leader>fd", function()
+    builtin.find_files({
+      cwd = "$DOTS",
+      prompt_title = "< DOTFILES >"
+    })
+  end)
+end
+
+return M
diff --git a/nvim/lua/config/lazy.lua b/nvim/lua/config/lazy.lua
index 95f0a01..b7ef23e 100644
--- a/nvim/lua/config/lazy.lua
+++ b/nvim/lua/config/lazy.lua
@@ -5,7 +5,7 @@ if not (vim.uv or vim.loop).fs_stat(lazypath) then
   if vim.v.shell_error ~= 0 then
     vim.api.nvim_echo({
       { "Failed to clone lazy.nvim:\n", "ErrorMsg" },
-      { out, "WarningMsg" },
+      { out,                            "WarningMsg" },
       { "\nPress any key to exit..." },
     }, true, {})
     vim.fn.getchar()
@@ -37,6 +37,15 @@ require("lazy").setup({
       build = ":TSUpdate",
     },
 
+    {
+      "folke/flash.nvim",
+      opts = {},
+      keys = {
+        { "s", mode = { "n", "x", "o" }, function() require("flash").jump() end },
+        { "r", mode = "o",               function() require("flash").remote() end }
+      },
+    },
+
     { import = "config.plugins" }
   },
 })
diff --git a/nvim/lua/config/plugins/lsp.lua b/nvim/lua/config/plugins/lsp.lua
index 7b7a797..0047699 100644
--- a/nvim/lua/config/plugins/lsp.lua
+++ b/nvim/lua/config/plugins/lsp.lua
@@ -14,6 +14,22 @@ return {
     },
     config = function()
       require("lspconfig").lua_ls.setup {}
+
+      vim.api.nvim_create_autocmd("LspAttach", {
+        callback = function(args)
+          local client = vim.lsp.get_client_by_id(args.data.client_id)
+          if not client then return end
+
+          if client.supports_method("textDocument/formatting") then
+            vim.api.nvim_create_autocmd("BufWritePre", {
+              buffer = args.buf,
+              callback = function()
+                vim.lsp.buf.format({ bufnr = args.buf, id = client.id })
+              end
+            })
+          end
+        end
+      })
     end
   }
 }
diff --git a/nvim/lua/config/plugins/telescope.lua b/nvim/lua/config/plugins/telescope.lua
new file mode 100644
index 0000000..f294947
--- /dev/null
+++ b/nvim/lua/config/plugins/telescope.lua
@@ -0,0 +1,23 @@
+return {
+  "nvim-telescope/telescope.nvim",
+  dependencies = {
+    "nvim-lua/plenary.nvim",
+    "kyazdani42/nvim-web-devicons",
+    { "nvim-telescope/telescope-fzf-native.nvim", build = "make" }
+  },
+  config = function()
+    local telescope = require("telescope")
+
+    telescope.setup({
+      pickers = {
+        man_pages = {
+          sections = { "ALL" }
+        }
+      }
+    })
+
+    telescope.load_extension("fzf")
+
+    require("config.keymaps").telescope()
+  end
+}