| @ -1,11 +0,0 @@ | |||
| return { | |||
| "greggh/claude-code.nvim", | |||
| dependencies = { | |||
| "nvim-lua/plenary.nvim", -- Required for git operations | |||
| }, | |||
| config = function() | |||
| require("claude-code").setup() | |||
| vim.keymap.set('n', '<leader>CC', '<cmd>ClaudeCode<CR>', { desc = 'Toggle Claude Code' }) | |||
| end | |||
| } | |||
| @ -1,93 +0,0 @@ | |||
| return { | |||
| "mfussenegger/nvim-dap", | |||
| dependencies = { | |||
| "rcarriga/nvim-dap-ui", | |||
| "theHamsta/nvim-dap-virtual-text", | |||
| }, | |||
| config = function() | |||
| local dap = require("dap") | |||
| local dapui = require('dapui') | |||
| -- Setup DAP UI with explicit configuration | |||
| dapui.setup() | |||
| dap.adapters.php = { | |||
| type = 'executable', | |||
| command = vim.fn.stdpath('data') .. '/mason/bin/php-debug-adapter', | |||
| } | |||
| -- Get the correct project paths (make this global so keys can access it) | |||
| _G.get_project_paths = function() | |||
| local cwd = vim.fn.getcwd() | |||
| -- Check if we're in the project root (where docker-compose.yml is) | |||
| if vim.fn.filereadable(cwd .. "/docker-compose.yml") == 1 then | |||
| return { | |||
| project_root = cwd, | |||
| api_path = cwd .. "/app/api", | |||
| docker_path = "/var/www" | |||
| } | |||
| -- Check if we're in the app/api directory | |||
| elseif string.match(cwd, "app/api$") then | |||
| local project_root = string.gsub(cwd, "/app/api$", "") | |||
| return { | |||
| project_root = project_root, | |||
| api_path = cwd, | |||
| docker_path = "/var/www" | |||
| } | |||
| else | |||
| -- Fallback - assume we're somewhere in the project | |||
| return { | |||
| project_root = cwd, | |||
| api_path = cwd, | |||
| docker_path = "/var/www" | |||
| } | |||
| end | |||
| end | |||
| local paths = _G.get_project_paths() | |||
| -- PHP configurations | |||
| dap.configurations.php = { | |||
| { | |||
| name = "🚀 Jack Laravel - Listen for Xdebug", | |||
| type = "php", | |||
| request = "launch", | |||
| port = 9003, | |||
| pathMappings = { | |||
| [paths.docker_path] = paths.api_path, | |||
| }, | |||
| hostname = "0.0.0.0", | |||
| log = true, | |||
| xdebugSettings = { | |||
| max_children = 512, | |||
| max_data = 1024, | |||
| max_depth = 4, | |||
| }, | |||
| }, | |||
| { | |||
| name = "🌐 Jack Laravel - Web Request Debug", | |||
| type = "php", | |||
| request = "launch", | |||
| port = 9003, | |||
| pathMappings = { | |||
| ["/var/www"] = paths.api_path, | |||
| }, | |||
| hostname = "0.0.0.0", | |||
| -- Pre-configure for Laravel routes | |||
| breakMode = "request", | |||
| } | |||
| } | |||
| end, | |||
| keys = { | |||
| { "<leader>DD", function() require("dap").continue() end, desc = "Start Laravel Debug" }, | |||
| { "<leader>Ds", function() require("dap").step_over() end, desc = "Step Over" }, | |||
| { "<leader>Di", function() require("dap").step_into() end, desc = "Step Into" }, | |||
| { "<leader>Do", function() require("dap").step_out() end, desc = "Step Out" }, -- Fixed: was "Ds" twice | |||
| { "<leader>bp", function() require("dap").toggle_breakpoint() end, desc = "Toggle Breakpoint" }, | |||
| { "<leader>bP", function() require("dap").set_breakpoint(vim.fn.input("Breakpoint condition: ")) end, desc = "Conditional Breakpoint" }, | |||
| { "<leader>dr", function() require("dap").repl.open() end, desc = "Open REPL" }, | |||
| { "<leader>dl", function() require("dap").run_last() end, desc = "Run Last" }, | |||
| { "<leader>du", function() require("dapui").toggle() end, desc = "Toggle DAP UI" }, | |||
| }, | |||
| } | |||
| @ -1,10 +0,0 @@ | |||
| return { | |||
| "m4xshen/hardtime.nvim", | |||
| enabled = false, | |||
| lazy = false, | |||
| dependencies = { | |||
| "MunifTanjim/nui.nvim", | |||
| "rcarriga/nvim-notify", | |||
| }, | |||
| opts = {}, | |||
| } | |||
| @ -1,26 +0,0 @@ | |||
| return { | |||
| "rcarriga/nvim-notify", | |||
| event = "VeryLazy", | |||
| opts = { | |||
| background_colour = "#000000", | |||
| fps = 30, | |||
| icons = { | |||
| DEBUG = "", | |||
| ERROR = "", | |||
| INFO = "", | |||
| TRACE = "✎", | |||
| WARN = "" | |||
| }, | |||
| level = 2, | |||
| minimum_width = 50, | |||
| render = "default", | |||
| stages = "fade_in_slide_out", | |||
| timeout = 5000, | |||
| top_down = true | |||
| }, | |||
| config = function(_, opts) | |||
| local notify = require("notify") | |||
| notify.setup(opts) | |||
| vim.notify = notify | |||
| end, | |||
| } | |||
| @ -0,0 +1,270 @@ | |||
| return { | |||
| "folke/snacks.nvim", | |||
| priority = 1000, | |||
| lazy = false, | |||
| opts = { | |||
| -- Dashboard/Starter | |||
| dashboard = { enabled = false }, | |||
| -- Notification system (replaces nvim-notify) | |||
| notifier = { | |||
| enabled = true, | |||
| timeout = 5000, | |||
| width = { min = 50, max = 0.4 }, | |||
| height = { min = 1, max = 0.6 }, | |||
| margin = { top = 0, right = 1, bottom = 0 }, | |||
| padding = true, | |||
| sort = { "level", "added" }, | |||
| level = vim.log.levels.INFO, | |||
| icons = { | |||
| error = " ", | |||
| warn = " ", | |||
| info = " ", | |||
| debug = " ", | |||
| trace = "✎ ", | |||
| }, | |||
| style = "compact", | |||
| }, | |||
| -- File picker (replaces telescope) | |||
| picker = { | |||
| enabled = true, | |||
| -- Performance optimizations | |||
| show_delay = 0, -- Show picker immediately (default is 5000ms) | |||
| limit_live = 5000, -- Reduce live search limit for better performance | |||
| matcher = { | |||
| frecency = false, -- Disable frecency for faster startup (enable if you want recency scoring) | |||
| cwd_bonus = false, -- Disable for better performance | |||
| history_bonus = false, -- Disable for better performance | |||
| }, | |||
| formatters = { | |||
| file = { | |||
| filename_first = true, | |||
| }, | |||
| }, | |||
| win = { | |||
| input = { | |||
| keys = { | |||
| ["<C-n>"] = { "list_down", mode = { "i", "n" } }, | |||
| ["<C-p>"] = { "list_up", mode = { "i", "n" } }, | |||
| ["<C-j>"] = { "history_next", mode = { "i", "n" } }, | |||
| ["<C-k>"] = { "history_prev", mode = { "i", "n" } }, | |||
| ["<C-q>"] = { "qflist", mode = { "i", "n" } }, | |||
| ["<C-c>"] = { "close", mode = { "i", "n" } }, | |||
| }, | |||
| }, | |||
| }, | |||
| sources = { | |||
| files = { | |||
| hidden = true, | |||
| follow = true, | |||
| -- Let snacks auto-detect fd (fastest) or fallback to rg/find | |||
| }, | |||
| grep = { | |||
| hidden = true, | |||
| follow = true, | |||
| }, | |||
| }, | |||
| }, | |||
| -- Quickfile (fast file operations) | |||
| quickfile = { enabled = true }, | |||
| -- Statuscolumn enhancements | |||
| statuscolumn = { | |||
| enabled = true, | |||
| left = { "mark", "sign" }, -- priority of signs on the left (high to low) | |||
| right = { "fold", "git" }, -- priority of signs on the right (high to low) | |||
| folds = { | |||
| open = false, -- show open fold icons | |||
| git_hl = false, -- use Git Signs hl for fold icons | |||
| }, | |||
| git = { | |||
| -- patterns to match Git signs | |||
| patterns = { "GitSign", "MiniDiffSign" }, | |||
| }, | |||
| refresh = 50, -- refresh at most every 50ms | |||
| }, | |||
| -- Word highlighting | |||
| words = { enabled = true }, | |||
| -- Styling for inputs | |||
| input = { enabled = true }, | |||
| -- Scrolling | |||
| scroll = { enabled = false }, | |||
| -- Indent guides | |||
| indent = { enabled = false }, | |||
| -- Scope highlighting | |||
| scope = { enabled = true }, | |||
| -- Git integration with blame | |||
| git = { | |||
| enabled = true, | |||
| }, | |||
| gitbrowse = { | |||
| enabled = true, | |||
| }, | |||
| -- Rename with LSP | |||
| rename = { enabled = true }, | |||
| -- Terminal | |||
| terminal = { enabled = true }, | |||
| -- Zen mode | |||
| zen = { enabled = false }, | |||
| -- Dim inactive windows | |||
| dim = { enabled = false }, | |||
| -- Better quickfix | |||
| quickfix = { enabled = true }, | |||
| -- Scratch buffer | |||
| scratch = { enabled = true }, | |||
| -- Toggle options | |||
| toggle = { enabled = true }, | |||
| -- Profiler | |||
| profiler = { enabled = false }, | |||
| -- Debugging helpers | |||
| debug = { enabled = false }, | |||
| -- Treesitter scope | |||
| treesitter = { enabled = true }, | |||
| }, | |||
| keys = { | |||
| -- File navigation (replacing telescope keybindings) | |||
| { "<leader>p", function() Snacks.picker.smart() end, desc = "Find project files" }, | |||
| { "<leader>ff", function() Snacks.picker.grep() end, desc = "Live grep" }, | |||
| { "<leader>fg", function() Snacks.picker.grep() end, desc = "Live grep" }, | |||
| { "<leader>fr", function() Snacks.picker.resume() end, desc = "Resume last picker" }, | |||
| { "<leader>fb", function() Snacks.picker.buffers() end, desc = "Find buffers" }, | |||
| { "<leader>fo", function() Snacks.picker.recent() end, desc = "Find recent files" }, | |||
| { "<leader>fc", function() Snacks.picker.commands() end, desc = "Find commands" }, | |||
| -- Search | |||
| { | |||
| "<leader>fw", | |||
| function() | |||
| Snacks.picker.grep_word() | |||
| end, | |||
| desc = "Grep word under cursor" | |||
| }, | |||
| { | |||
| "<leader>fW", | |||
| function() | |||
| local word = vim.fn.expand("<cWORD>") | |||
| Snacks.picker.grep({ search = word }) | |||
| end, | |||
| desc = "Grep WORD under cursor" | |||
| }, | |||
| { | |||
| "<leader>fw", | |||
| function() | |||
| local mode = vim.fn.mode() | |||
| if mode == 'v' or mode == 'V' then | |||
| vim.cmd('noau normal! "vy"') | |||
| local text = vim.fn.getreg('v') | |||
| vim.fn.setreg('v', {}) | |||
| text = string.gsub(text, "\n", "") | |||
| if #text > 0 then | |||
| Snacks.picker.grep({ search = text }) | |||
| else | |||
| Snacks.picker.grep() | |||
| end | |||
| end | |||
| end, | |||
| mode = "v", | |||
| desc = "Grep selection" | |||
| }, | |||
| { | |||
| "<leader>fF", | |||
| function() | |||
| local word = vim.fn.expand("<cword>") | |||
| Snacks.picker.files({ search = word }) | |||
| end, | |||
| desc = "Find file with name under cursor" | |||
| }, | |||
| -- Git | |||
| { "<leader>gb", function() Snacks.picker.git_branches() end, desc = "Git branches" }, | |||
| { "<leader>gc", function() Snacks.picker.git_log() end, desc = "Git commits" }, | |||
| { "<leader>gs", function() Snacks.picker.git_status() end, desc = "Git status" }, | |||
| { "<leader>gbl", function() Snacks.git.blame_line() end, desc = "Git blame line" }, | |||
| -- LSP | |||
| { "<leader>ds", function() Snacks.picker.lsp_symbols() end, desc = "Document symbols" }, | |||
| { "<leader>ws", function() Snacks.picker.lsp_symbols({ symbols = "workspace" }) end, desc = "Workspace symbols" }, | |||
| { "<leader>dws", function() Snacks.picker.lsp_symbols({ symbols = "workspace" }) end, desc = "Dynamic workspace symbols" }, | |||
| { "gd", function() Snacks.picker.lsp_definitions() end, desc = "Go to definition" }, | |||
| { "gr", function() Snacks.picker.lsp_references() end, desc = "Go to references" }, | |||
| { "gI", function() Snacks.picker.lsp_implementations() end, desc = "Go to implementation" }, | |||
| -- Utilities | |||
| { "<leader>fs", function() Snacks.picker.spelling() end, desc = "Spell suggestions" }, | |||
| { "<leader>fm", function() Snacks.picker.marks() end, desc = "Marks" }, | |||
| { "<leader>fh", function() Snacks.picker.command_history() end, desc = "Command history" }, | |||
| { "<leader>fH", function() Snacks.picker.help() end, desc = "Help tags" }, | |||
| { "<leader>fk", function() Snacks.picker.keymaps() end, desc = "Keymaps" }, | |||
| { "<leader>:", function() Snacks.picker.commands() end, desc = "Commands" }, | |||
| -- Quickfix | |||
| { "<leader>fq", function() Snacks.picker.qflist() end, desc = "Quickfix list" }, | |||
| { "<leader>fl", function() Snacks.picker.loclist() end, desc = "Location list" }, | |||
| -- Diagnostics | |||
| { "<leader>fd", function() Snacks.picker.diagnostics() end, desc = "Diagnostics" }, | |||
| -- Additional snacks features | |||
| { "<leader>gg", function() Snacks.lazygit() end, desc = "Lazygit" }, | |||
| { "<leader>gf", function() Snacks.lazygit.log_file() end, desc = "Lazygit log (current file)" }, | |||
| { "<leader>gl", function() Snacks.lazygit.log() end, desc = "Lazygit log" }, | |||
| { "<leader>un", function() Snacks.notifier.hide() end, desc = "Dismiss notifications" }, | |||
| { "<leader>nh", function() Snacks.notifier.show_history() end, desc = "Notification history" }, | |||
| { "<c-/>", function() Snacks.terminal() end, desc = "Toggle terminal", mode = { "n", "t" } }, | |||
| { "<c-_>", function() Snacks.terminal() end, desc = "Toggle terminal (which_key)", mode = { "n", "t" } }, | |||
| { "]]", function() Snacks.words.jump(vim.v.count1) end, desc = "Next reference", mode = { "n", "t" } }, | |||
| { "[[", function() Snacks.words.jump(-vim.v.count1) end, desc = "Prev reference", mode = { "n", "t" } }, | |||
| { "<leader>N", function() Snacks.notifier.show_history() end, desc = "Notification history" }, | |||
| { "<leader>bd", function() Snacks.bufdelete() end, desc = "Delete buffer" }, | |||
| { "<leader>cR", function() Snacks.rename.rename_file() end, desc = "Rename file" }, | |||
| { "<leader>gB", function() Snacks.gitbrowse() end, desc = "Git browse" }, | |||
| { "<leader>S", function() Snacks.profiler.scratch() end, desc = "Profiler scratch buffer" }, | |||
| }, | |||
| init = function() | |||
| -- Setup notification handler immediately | |||
| vim.notify = function(msg, level, opts) | |||
| return Snacks.notifier.notify(msg, level, opts) | |||
| end | |||
| vim.api.nvim_create_autocmd("User", { | |||
| pattern = "VeryLazy", | |||
| callback = function() | |||
| -- Create some toggle keymaps | |||
| Snacks.toggle.option("spell", { name = "Spelling" }):map("<leader>us") | |||
| Snacks.toggle.option("wrap", { name = "Wrap" }):map("<leader>uw") | |||
| Snacks.toggle.option("relativenumber", { name = "Relative Number" }):map("<leader>uL") | |||
| Snacks.toggle.diagnostics():map("<leader>ud") | |||
| Snacks.toggle.line_number():map("<leader>ul") | |||
| Snacks.toggle.option("conceallevel", { off = 0, on = vim.o.conceallevel > 0 and vim.o.conceallevel or 2 }) | |||
| :map("<leader>uc") | |||
| Snacks.toggle.treesitter():map("<leader>uT") | |||
| Snacks.toggle.option("background", { off = "light", on = "dark", name = "Dark Background" }):map( | |||
| "<leader>ub") | |||
| Snacks.toggle.inlay_hints():map("<leader>uh") | |||
| Snacks.toggle.indent():map("<leader>ug") | |||
| Snacks.toggle.dim():map("<leader>uD") | |||
| end, | |||
| }) | |||
| end, | |||
| } | |||
| @ -1,263 +0,0 @@ | |||
| return { | |||
| "nvim-telescope/telescope.nvim", | |||
| cmd = "Telescope", | |||
| dependencies = { | |||
| "nvim-lua/plenary.nvim", | |||
| "nvim-tree/nvim-web-devicons", | |||
| "debugloop/telescope-undo.nvim", | |||
| "nvim-telescope/telescope-ui-select.nvim", | |||
| { "nvim-telescope/telescope-fzf-native.nvim", build = "make" }, | |||
| "nvim-telescope/telescope-live-grep-args.nvim", | |||
| }, | |||
| config = function() | |||
| local telescope = require("telescope") | |||
| local actions = require("telescope.actions") | |||
| local builtin = require("telescope.builtin") | |||
| local previewers = require("telescope.previewers") | |||
| local previewers_utils = require("telescope.previewers.utils") | |||
| -- Configuration constants | |||
| local MAX_FILE_SIZE = 100000 | |||
| -- Enable line numbers in telescope previews | |||
| vim.api.nvim_create_autocmd('User', { | |||
| pattern = 'TelescopePreviewerLoaded', | |||
| callback = function() | |||
| vim.wo.number = true | |||
| end, | |||
| }) | |||
| -- Truncate large files in preview to improve performance | |||
| local function truncate_large_files(filepath, bufnr, opts) | |||
| opts = opts or {} | |||
| filepath = vim.fn.expand(filepath) | |||
| vim.uv.fs_stat(filepath, function(_, stat) | |||
| if not stat then return end | |||
| if stat.size > MAX_FILE_SIZE then | |||
| local cmd = { "head", "-c", tostring(MAX_FILE_SIZE), filepath } | |||
| previewers_utils.job_maker(cmd, bufnr, opts) | |||
| else | |||
| previewers.buffer_previewer_maker(filepath, bufnr, opts) | |||
| end | |||
| end) | |||
| end | |||
| -- Cache git status to avoid repeated system calls | |||
| local is_inside_work_tree = {} | |||
| local function smart_project_files() | |||
| local cwd = vim.fn.getcwd() | |||
| if is_inside_work_tree[cwd] == nil then | |||
| vim.fn.system("git rev-parse --is-inside-work-tree") | |||
| is_inside_work_tree[cwd] = vim.v.shell_error == 0 | |||
| end | |||
| local opts = is_inside_work_tree[cwd] | |||
| and { show_untracked = true, hidden = true } | |||
| or {} | |||
| local picker = is_inside_work_tree[cwd] | |||
| and builtin.git_files | |||
| or builtin.find_files | |||
| picker(opts) | |||
| end | |||
| -- Visual selection live grep | |||
| local function grep_string_visual() | |||
| vim.cmd('noau normal! "vy"') | |||
| local text = vim.fn.getreg('v') | |||
| vim.fn.setreg('v', {}) | |||
| text = string.gsub(text, "\n", "") | |||
| if #text > 0 then | |||
| builtin.live_grep({ default_text = text }) | |||
| else | |||
| builtin.live_grep() | |||
| end | |||
| end | |||
| -- Telescope setup | |||
| telescope.setup({ | |||
| defaults = { | |||
| file_sorter = require("telescope.sorters").get_fzy_sorter, | |||
| color_devicons = true, | |||
| buffer_previewer_maker = truncate_large_files, | |||
| initial_mode = "insert", | |||
| selection_strategy = "reset", | |||
| sorting_strategy = "ascending", | |||
| path_display = { "truncate" }, | |||
| layout_config = { | |||
| prompt_position = "top", | |||
| horizontal = { | |||
| preview_width = 0.6, | |||
| }, | |||
| vertical = { | |||
| mirror = false, | |||
| }, | |||
| }, | |||
| -- Modern borderchars | |||
| borderchars = { "─", "│", "─", "│", "╭", "╮", "╯", "╰" }, | |||
| -- Performance optimizations | |||
| use_less = true, | |||
| set_env = { COLORTERM = "truecolor" }, | |||
| mappings = { | |||
| i = { | |||
| ["<C-n>"] = actions.move_selection_next, | |||
| ["<C-p>"] = actions.move_selection_previous, | |||
| ["<C-j>"] = actions.cycle_history_next, | |||
| ["<C-k>"] = actions.cycle_history_prev, | |||
| ["<C-q>"] = actions.smart_send_to_qflist + actions.open_qflist, | |||
| ["<C-u>"] = false, -- Clear prompt | |||
| ["<C-c>"] = actions.close, -- Close prompt | |||
| }, | |||
| n = { | |||
| ["q"] = actions.close, | |||
| }, | |||
| }, | |||
| }, | |||
| pickers = { | |||
| diagnostics = { | |||
| initial_mode = "normal", | |||
| layout_config = { | |||
| preview_cutoff = 9999, | |||
| }, | |||
| }, | |||
| buffers = { | |||
| sort_mru = true, | |||
| sort_lastused = true, | |||
| mappings = { | |||
| i = { | |||
| ["<C-d>"] = actions.delete_buffer, | |||
| }, | |||
| n = { | |||
| ["dd"] = actions.delete_buffer, | |||
| }, | |||
| }, | |||
| }, | |||
| find_files = { | |||
| hidden = true, | |||
| find_command = { "rg", "--files", "--hidden", "--glob", "!**/.git/*" }, | |||
| }, | |||
| }, | |||
| extensions = { | |||
| undo = { | |||
| side_by_side = true, | |||
| layout_strategy = "vertical", | |||
| layout_config = { | |||
| preview_height = 0.8, | |||
| }, | |||
| mappings = { | |||
| i = { | |||
| ["<CR>"] = require("telescope-undo.actions").restore, | |||
| }, | |||
| n = { | |||
| ["<CR>"] = require("telescope-undo.actions").restore, | |||
| ["y"] = require("telescope-undo.actions").yank_additions, | |||
| ["Y"] = require("telescope-undo.actions").yank_deletions, | |||
| ["u"] = require("telescope-undo.actions").restore, | |||
| }, | |||
| }, | |||
| }, | |||
| fzf = { | |||
| fuzzy = true, | |||
| override_generic_sorter = true, | |||
| override_file_sorter = true, | |||
| case_mode = "smart_case", | |||
| }, | |||
| live_grep_args = { | |||
| auto_quoting = true, | |||
| mappings = { | |||
| i = { | |||
| ["<C-k>"] = require("telescope-live-grep-args.actions").quote_prompt(), | |||
| ["<C-i>"] = require("telescope-live-grep-args.actions").quote_prompt({ postfix = " --iglob " }), | |||
| }, | |||
| }, | |||
| }, | |||
| ["ui-select"] = { | |||
| require("telescope.themes").get_dropdown(), | |||
| }, | |||
| }, | |||
| }) | |||
| -- Load extensions | |||
| telescope.load_extension("fzf") | |||
| telescope.load_extension("undo") | |||
| telescope.load_extension("ui-select") | |||
| telescope.load_extension("live_grep_args") | |||
| -- Keymaps | |||
| local function map(mode, lhs, rhs, desc) | |||
| vim.keymap.set(mode, lhs, rhs, { desc = desc, noremap = true, silent = true }) | |||
| end | |||
| -- File navigation | |||
| map("n", "<leader>ff", function() | |||
| require("telescope").extensions.live_grep_args.live_grep_args() | |||
| end, "Live grep with args") | |||
| map("n", "<leader>fg", function() | |||
| require("plugins.telescope.multigrep").live_multgrep() | |||
| end, "Live multigrep") | |||
| map("n", "<leader>p", smart_project_files, "Find project files") | |||
| map("n", "<leader>fr", builtin.resume, "Resume last telescope") | |||
| map("n", "<leader>fb", builtin.buffers, "Find buffers") | |||
| map("n", "<leader>fo", builtin.oldfiles, "Find recent files") | |||
| map("n", "<leader>fc", builtin.commands, "Find commands") | |||
| -- Search | |||
| map("n", "<leader>fw", function() | |||
| builtin.grep_string({ search = vim.fn.expand("<cword>") }) | |||
| end, "Grep word under cursor") | |||
| map("n", "<leader>fW", function() | |||
| builtin.grep_string({ search = vim.fn.expand("<cWORD>") }) | |||
| end, "Grep WORD under cursor") | |||
| map("v", "<leader>fw", grep_string_visual, "Grep selection") | |||
| map("n", "<leader>fF", function() | |||
| builtin.find_files({ search_file = vim.fn.expand("<cword>") }) | |||
| end, "Find file with name under cursor") | |||
| -- Git | |||
| map("n", "<leader>gb", function() | |||
| builtin.git_branches({ | |||
| attach_mappings = function(_, map_func) | |||
| map_func("i", "<C-d>", actions.git_delete_branch) | |||
| map_func("n", "<C-d>", actions.git_delete_branch) | |||
| return true | |||
| end, | |||
| }) | |||
| end, "Git branches") | |||
| map("n", "<leader>gc", builtin.git_commits, "Git commits") | |||
| -- LSP | |||
| map("n", "<leader>ds", builtin.lsp_document_symbols, "Document symbols") | |||
| map("n", "<leader>ws", builtin.lsp_workspace_symbols, "Workspace symbols") | |||
| map("n", "<leader>dws", builtin.lsp_dynamic_workspace_symbols, "Dynamic workspace symbols") | |||
| -- Utilities | |||
| map("n", "<leader>fu", "<cmd>Telescope undo<cr>", "Undo history") | |||
| map("n", "<leader>fs", builtin.spell_suggest, "Spell suggestions") | |||
| map("n", "<leader>fm", builtin.marks, "Marks") | |||
| map("n", "<leader>fh", builtin.command_history, "Command history") | |||
| map("n", "<leader>fH", builtin.help_tags, "Help tags") | |||
| -- Quickfix | |||
| map("n", "<leader>fq", builtin.quickfix, "Quickfix list") | |||
| map("n", "<leader>fQ", builtin.quickfixhistory, "Quickfix history") | |||
| end, | |||
| } | |||
| @ -1,58 +0,0 @@ | |||
| local pickers = require("telescope.pickers") | |||
| local finders = require("telescope.finders") | |||
| local make_entry = require("telescope.make_entry") | |||
| local conf = require("telescope.config").values | |||
| local M = {} | |||
| M.live_multgrep = function (opts) | |||
| opts = opts or {} | |||
| opts.cwd = opts.cwd or vim.uv.cwd() | |||
| local finder = finders.new_async_job({ | |||
| command_generator = function (prompt) | |||
| if not prompt or prompt == "" then | |||
| return nil | |||
| end | |||
| local pieces = vim.split(prompt, " ") | |||
| local args = { "rg" } | |||
| if pieces[1] then | |||
| table.insert(args, "-e") | |||
| table.insert(args, pieces[1]) | |||
| end | |||
| if pieces[2] then | |||
| table.insert(args, "-g") | |||
| table.insert(args, pieces[2]) | |||
| end | |||
| ---@diagnostic disable-next-line: deprecated | |||
| return vim.iter({ | |||
| args, | |||
| { | |||
| "--color=never", | |||
| "--no-heading", | |||
| "--with-filename", | |||
| "--line-number", | |||
| "--column", | |||
| "--smart-case", | |||
| "--hidden", | |||
| } | |||
| }):flatten():totable() | |||
| end, | |||
| entry_maker = make_entry.gen_from_vimgrep(opts), | |||
| cwd = opts.cwd | |||
| }) | |||
| pickers.new(opts, { | |||
| debounce = 100, | |||
| prompt_title = "Multi Grep", | |||
| finder = finder, | |||
| previewer = conf.grep_previewer(opts), | |||
| sorter = require("telescope.sorters").empty(), | |||
| }):find() | |||
| end | |||
| return M | |||
| @ -1,48 +0,0 @@ | |||
| return { | |||
| "folke/trouble.nvim", | |||
| event = { "BufReadPre", "BufNewFile" }, | |||
| opts = {}, | |||
| cmd = "Trouble", | |||
| keys = { | |||
| { | |||
| "<leader>xx", | |||
| "<cmd>Trouble diagnostics toggle<cr>", | |||
| desc = "Diagnostics (Trouble)", | |||
| }, | |||
| { | |||
| "<leader>xX", | |||
| "<cmd>Trouble diagnostics toggle filter.buf=0<cr>", | |||
| desc = "Buffer Diagnostics (Trouble)", | |||
| }, | |||
| { | |||
| "<leader>xj", | |||
| "<cmd>Trouble diagnostics next<cr>", | |||
| desc = "Diagnostics Next (Trouble)", | |||
| }, | |||
| { | |||
| "<leader>xk", | |||
| "<cmd>Trouble diagnostics prev<cr>", | |||
| desc = "Diagnostics Previous (Trouble)", | |||
| }, | |||
| { | |||
| "<leader>cs", | |||
| "<cmd>Trouble symbols toggle focus=false<cr>", | |||
| desc = "Symbols (Trouble)", | |||
| }, | |||
| { | |||
| "<leader>cl", | |||
| "<cmd>Trouble lsp toggle focus=false win.position=right<cr>", | |||
| desc = "LSP Definitions / references / ... (Trouble)", | |||
| }, | |||
| { | |||
| "<leader>xL", | |||
| "<cmd>Trouble loclist toggle<cr>", | |||
| desc = "Location List (Trouble)", | |||
| }, | |||
| { | |||
| "<leader>xQ", | |||
| "<cmd>Trouble qflist toggle<cr>", | |||
| desc = "Quickfix List (Trouble)", | |||
| }, | |||
| }, | |||
| } | |||
| @ -1,18 +0,0 @@ | |||
| return { | |||
| "mbbill/undotree", | |||
| event = "VeryLazy", | |||
| config = function() | |||
| if vim.fn.has("persistent_undo") == 0 then | |||
| return | |||
| end | |||
| local target_path = vim.fn.expand("~/.cache/nvim/undodir/") | |||
| if vim.fn.isdirectory(target_path) == 0 then | |||
| vim.fn.mkdir(target_path, "p", "0700") | |||
| end | |||
| vim.opt.undodir = target_path | |||
| vim.opt.undofile = true | |||
| end, | |||
| } | |||