dotfiles

My personal shell configs and stuff
git clone git://git.alex.balgavy.eu/dotfiles.git
Log | Files | Refs | Submodules | README | LICENSE

commit 533d46077fbe1a0caabc8ba80f866e3f70251a2d
parent c6e103231de12b456c1612deeac9efb38e7c43bd
Author: Alex Balgavy <alexander.balgavy@spaceapplications.com>
Date:   Thu, 14 Aug 2025 21:21:23 +0200

nvim: away from telescope

Diffstat:
Mnvim/init.lua | 10----------
Mnvim/lazy-lock.json | 28+++++++++++-----------------
Mnvim/lua/plugins/init.lua | 52----------------------------------------------------
Mnvim/lua/plugins/lsp.lua | 14+++++++-------
Anvim/lua/plugins/snacks.lua | 133+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Rnvim/lua/plugins/telescope.lua -> nvim/lua/plugins/telescope.lua.bak | 0
Mnvim/lua/plugins/treesitter.lua | 2++
7 files changed, 153 insertions(+), 86 deletions(-)

diff --git a/nvim/init.lua b/nvim/init.lua @@ -38,13 +38,3 @@ vim.o.completeopt = 'menuone,noselect' require('highlight_on_yank') require('mappings') require('netrw_target') - -vim.api.nvim_create_autocmd('LspAttach', { - group = vim.api.nvim_create_augroup('UserLspConfig', {}), - callback = function(ev) - local client = vim.lsp.get_client_by_id(ev.data.client_id) - if client and client.server_capabilities.inlayHintProvider and vim.lsp.inlay_hint then - vim.lsp.inlay_hint.enable(true, { bufnr = ev.buf }) - end - end, -}) diff --git a/nvim/lazy-lock.json b/nvim/lazy-lock.json @@ -2,27 +2,21 @@ "Comment.nvim": { "branch": "master", "commit": "e30b7f2008e52442154b66f7c519bfd2f1e32acb" }, "aerial.nvim": { "branch": "master", "commit": "5c0df1679bf7c814c924dc6646cc5291daca8363" }, "baleia.nvim": { "branch": "main", "commit": "880e97c02edf3148ba2bdc6305ac03eb3c3711e0" }, - "blink.cmp": { "branch": "main", "commit": "9bcb14b43852a6f2bfd5ac9ef29cb5cf09b1b39b" }, + "blink.cmp": { "branch": "main", "commit": "bae4bae0eedd1fa55f34b685862e94a222d5c6f8" }, "cellular-automaton.nvim": { "branch": "main", "commit": "1606e9d5d04ff254023c3f3c62842d065708d6d3" }, "colortils.nvim": { "branch": "main", "commit": "948d4eddbd20c3e9eac79368dc50c7929d4fb823" }, - "conform.nvim": { "branch": "master", "commit": "8132ec733eed3bf415b97b76797ca41b59f51d7d" }, - "dressing.nvim": { "branch": "master", "commit": "2d7c2db2507fa3c4956142ee607431ddb2828639" }, - "fidget.nvim": { "branch": "main", "commit": "d9ba6b7bfe29b3119a610892af67602641da778e" }, - "gitsigns.nvim": { "branch": "main", "commit": "88205953bd748322b49b26e1dfb0389932520dc9" }, - "indent-blankline.nvim": { "branch": "master", "commit": "005b56001b2cb30bfa61b7986bc50657816ba4ba" }, + "conform.nvim": { "branch": "master", "commit": "973f3cb73887d510321653044791d7937c7ec0fa" }, + "gitsigns.nvim": { "branch": "main", "commit": "736f51d2bb684c06f39a2032f064d7244f549981" }, "lazy.nvim": { "branch": "main", "commit": "6c3bda4aca61a13a9c63f1c1d1b16b9d3be90d7a" }, - "mini.ai": { "branch": "main", "commit": "d172ada7b0281044a06cb9a625a862553c457b6f" }, - "mini.align": { "branch": "main", "commit": "247af030951ccbd3b2fbaae7711b5d618dbbdeea" }, - "mini.animate": { "branch": "main", "commit": "10cc793c7589db42b11353e7186f6e3e19f19072" }, - "nvim-lspconfig": { "branch": "master", "commit": "314b35335cc84bc2a085c84c69da955ba22da163" }, + "mini.ai": { "branch": "main", "commit": "1cd4f021a05c29acd4ab511c0981da14217daf38" }, + "mini.align": { "branch": "main", "commit": "0202e1662a7a03a95cefd6851795ceae5e87b9b3" }, + "nvim-lint": { "branch": "master", "commit": "7ef127aaede2a4d5ad8df8321e2eb4e567f29594" }, + "nvim-lspconfig": { "branch": "master", "commit": "9141be4c1332afc83bdf1b0278dbb030f75ff8e3" }, "nvim-treesitter": { "branch": "master", "commit": "42fc28ba918343ebfd5565147a42a26580579482" }, - "nvim-treesitter-context": { "branch": "master", "commit": "1a1a7c5d6d75cb49bf64049dafab15ebe294a79f" }, - "nvim-treesitter-textobjects": { "branch": "master", "commit": "89ebe73cd2836db80a22d9748999ace0241917a5" }, - "nvim-web-devicons": { "branch": "master", "commit": "1fb58cca9aebbc4fd32b086cb413548ce132c127" }, - "plenary.nvim": { "branch": "master", "commit": "857c5ac632080dba10aae49dba902ce3abf91b35" }, - "smear-cursor.nvim": { "branch": "main", "commit": "1f90eb06eab82b5fe2ed708b94dcc325d6f5fb5a" }, - "telescope-fzf-native.nvim": { "branch": "main", "commit": "1f08ed60cafc8f6168b72b80be2b2ea149813e55" }, - "telescope.nvim": { "branch": "master", "commit": "b4da76be54691e854d3e0e02c36b0245f945c2c7" }, + "nvim-treesitter-context": { "branch": "master", "commit": "dca8726fea2c14e1ce6adbaa76a04816fbfaff61" }, + "nvim-treesitter-textobjects": { "branch": "master", "commit": "71385f191ec06ffc60e80e6b0c9a9d5daed4824c" }, + "nvim-web-devicons": { "branch": "master", "commit": "3362099de3368aa620a8105b19ed04c2053e38c0" }, + "snacks.nvim": { "branch": "main", "commit": "bc0630e43be5699bb94dadc302c0d21615421d93" }, "trouble.nvim": { "branch": "main", "commit": "85bedb7eb7fa331a2ccbecb9202d8abba64d37b3" }, "which-key.nvim": { "branch": "main", "commit": "370ec46f710e058c9c1646273e6b225acf47cbed" } } diff --git a/nvim/lua/plugins/init.lua b/nvim/lua/plugins/init.lua @@ -1,21 +1,4 @@ return { - { - 'stevearc/dressing.nvim', - opts = {}, - }, - - - - { -- Add indentation guides even on blank lines - 'lukas-reineke/indent-blankline.nvim', - main = 'ibl', - opts = { - indent = { - char = '┊', - }, - } - }, - 'numToStr/Comment.nvim', -- "gc" to comment visual regions/lines { @@ -49,31 +32,6 @@ return { event = "VeryLazy", }, { - "echasnovski/mini.animate", - config = function() - local animate = require('mini.animate') - animate.setup({ - cursor = { - enable = false, - }, - scroll = { - enable = true, - timing = animate.gen_timing.linear({ duration = 50, unit = 'total' }), - }, - resize = { - enable = false, - }, - open = { - enable = false, - }, - close = { - enable = false, - }, - }) - end, - version = false, - }, - { "m00qek/baleia.nvim", version = "*", config = function() @@ -89,16 +47,6 @@ return { end, }, { - 'sphamba/smear-cursor.nvim', - opts = { - cursor_color = '#a4a4a4', - legacy_computing_symbols_support = true, - stiffness = 0.8, -- 0.6 [0, 1] - trailing_stiffness = 0.5, -- 0.3 [0, 1] - distance_stop_animating = 0.5, -- 0.1 > 0 - }, - }, - { 'max397574/colortils.nvim', event = "VeryLazy", opts = { diff --git a/nvim/lua/plugins/lsp.lua b/nvim/lua/plugins/lsp.lua @@ -23,11 +23,8 @@ local on_attach = function(_, bufnr) vim.keymap.set('v', '<leader>ra', vim.lsp.buf.code_action, { buffer = bufnr, desc = '[C]ode [A]ction' }) nmap('gd', vim.lsp.buf.definition, '[G]oto [D]efinition') - nmap('gr', require('telescope.builtin').lsp_references, '[G]oto [R]eferences') nmap('gI', vim.lsp.buf.implementation, '[G]oto [I]mplementation') nmap('<leader>D', vim.lsp.buf.type_definition, 'Type [D]efinition') - nmap('<leader>ds', require('telescope.builtin').lsp_document_symbols, '[D]ocument [S]ymbols') - nmap('<leader>ws', require('telescope.builtin').lsp_dynamic_workspace_symbols, '[W]orkspace [S]ymbols') -- See `:help K` for why this keymap nmap('K', vim.lsp.buf.hover, 'Hover Documentation') @@ -104,6 +101,13 @@ local config = function() on_attach = on_attach, settings = { ['rust-analyzer'] = { + workspace = { + symbol = { + search = { + kind = "all_symbols", + }, + }, + }, check = { command = "clippy", features = "all", @@ -216,10 +220,6 @@ return { { 'neovim/nvim-lspconfig', config = config, - dependencies = { - -- Useful status updates for LSP. - { 'j-hui/fidget.nvim', opts = {} }, - } }, { 'mfussenegger/nvim-lint', diff --git a/nvim/lua/plugins/snacks.lua b/nvim/lua/plugins/snacks.lua @@ -0,0 +1,133 @@ +local function symbols() + local server_ready = not not vim.lsp.buf_notify(0, '$/progress', {}) + if server_ready then + Snacks.picker.lsp_symbols() + else + Snacks.picker.treesitter() + end +end + +local keys = { + -- Top Pickers & Explorer + { "<leader>s<space>", function() Snacks.picker.smart() end, desc = "Smart Find Files" }, + { "<leader>b", function() Snacks.picker.buffers() end, desc = "Buffers" }, + { "<leader>sg", function() Snacks.picker.grep() end, desc = "Grep" }, + { "<leader>s;", function() Snacks.picker.command_history() end, desc = "Command History" }, + { "<leader>sn", function() Snacks.picker.notifications() end, desc = "Notification History" }, + { "<leader>f", function() Snacks.picker.explorer() end, desc = "Explorer" }, + -- find + { "<leader>sc", function() Snacks.picker.files({ cwd = vim.fn.stdpath("config") }) end, desc = "Find Config File" }, + { "<leader>sf", function() Snacks.picker.files() end, desc = "Find Files" }, + { "<leader>sv", function() Snacks.picker.git_files() end, desc = "Find Git Files" }, + { "<leader>sP", function() Snacks.picker.projects() end, desc = "Projects" }, + { "<leader>sp", function() Snacks.picker.recent() end, desc = "Recent" }, + -- git + { "<leader>gb", function() Snacks.picker.git_branches() end, desc = "Git Branches" }, + { "<leader>gl", function() Snacks.picker.git_log() end, desc = "Git Log" }, + { "<leader>gL", function() Snacks.picker.git_log_line() end, desc = "Git Log Line" }, + { "<leader>gs", function() Snacks.picker.git_status() end, desc = "Git Status" }, + { "<leader>gS", function() Snacks.picker.git_stash() end, desc = "Git Stash" }, + { "<leader>gd", function() Snacks.picker.git_diff() end, desc = "Git Diff (Hunks)" }, + { "<leader>gf", function() Snacks.picker.git_log_file() end, desc = "Git Log File" }, + -- Grep + { "<leader>sb", function() Snacks.picker.lines() end, desc = "Buffer Lines" }, + { "<leader>sB", function() Snacks.picker.grep_buffers() end, desc = "Grep Open Buffers" }, + { "<leader>sg", function() Snacks.picker.grep() end, desc = "Grep" }, + { "<leader>sw", function() Snacks.picker.grep_word() end, desc = "Visual selection or word", mode = { "n", "x" } }, + -- search + { '<leader>s"', function() Snacks.picker.registers() end, desc = "Registers" }, + { '<leader>s/', function() Snacks.picker.search_history() end, desc = "Search History" }, + { "<leader>sa", function() Snacks.picker.autocmds() end, desc = "Autocmds" }, + { "<leader>sb", function() Snacks.picker.lines() end, desc = "Buffer Lines" }, + { "<leader>sC", function() Snacks.picker.commands() end, desc = "Commands" }, + { "<leader>sd", function() Snacks.picker.diagnostics() end, desc = "Diagnostics" }, + { "<leader>sD", function() Snacks.picker.diagnostics_buffer() end, desc = "Buffer Diagnostics" }, + { "<leader>sh", function() Snacks.picker.help() end, desc = "Help Pages" }, + { "<leader>sH", function() Snacks.picker.highlights() end, desc = "Highlights" }, + { "<leader>si", function() Snacks.picker.icons() end, desc = "Icons" }, + { "<leader>sj", function() Snacks.picker.jumps() end, desc = "Jumps" }, + { "<leader>sk", function() Snacks.picker.keymaps() end, desc = "Keymaps" }, + { "<leader>sl", function() Snacks.picker.loclist() end, desc = "Location List" }, + { "<leader>sm", function() Snacks.picker.marks() end, desc = "Marks" }, + { "<leader>sM", function() Snacks.picker.man() end, desc = "Man Pages" }, + { "<leader>sq", function() Snacks.picker.qflist() end, desc = "Quickfix List" }, + { "<leader>sR", function() Snacks.picker.resume() end, desc = "Resume" }, + { "<leader>su", function() Snacks.picker.undo() end, desc = "Undo History" }, + { "<leader>uC", function() Snacks.picker.colorschemes() end, desc = "Colorschemes" }, + -- LSP + { "gd", function() Snacks.picker.lsp_definitions() end, desc = "Goto Definition" }, + { "gD", function() Snacks.picker.lsp_declarations() end, desc = "Goto Declaration" }, + { "<leader>sr", function() Snacks.picker.lsp_references() end, nowait = true, desc = "References" }, + { "gI", function() Snacks.picker.lsp_implementations() end, desc = "Goto Implementation" }, + { "gy", function() Snacks.picker.lsp_type_definitions() end, desc = "Goto T[y]pe Definition" }, + { "<leader>ss", symbols, desc = "LSP Symbols" }, + { "<leader>sS", function() Snacks.picker.lsp_workspace_symbols() end, desc = "LSP Workspace Symbols" }, + -- Other +} + +---@type table<number, {token:lsp.ProgressToken, msg:string, done:boolean}[]> +local progress = vim.defaulttable() +vim.api.nvim_create_autocmd("LspProgress", { + desc = 'Show LSP loading progress', + group = vim.api.nvim_create_augroup('LspProgress', { clear = true }), + + ---@param ev {data: {client_id: integer, params: lsp.ProgressParams}} + callback = function(ev) + local client = vim.lsp.get_client_by_id(ev.data.client_id) + local value = ev.data.params + .value --[[@as {percentage?: number, title?: string, message?: string, kind: "begin" | "report" | "end"}]] + if not client or type(value) ~= "table" then + return + end + local p = progress[client.id] + + for i = 1, #p + 1 do + if i == #p + 1 or p[i].token == ev.data.params.token then + p[i] = { + token = ev.data.params.token, + msg = ("[%3d%%] %s%s"):format( + value.kind == "end" and 100 or value.percentage or 100, + value.title or "", + value.message and (" **%s**"):format(value.message) or "" + ), + done = value.kind == "end", + } + break + end + end + + local msg = {} ---@type string[] + progress[client.id] = vim.tbl_filter(function(v) + return table.insert(msg, v.msg) or not v.done + end, p) + + local spinner = { "⠋", "⠙", "⠹", "⠸", "⠼", "⠴", "⠦", "⠧", "⠇", "⠏" } + vim.notify(table.concat(msg, "\n"), "info", { + id = "lsp_progress", + title = client.name, + opts = function(notif) + notif.icon = #progress[client.id] == 0 and " " + or spinner[math.floor(vim.uv.hrtime() / (1e6 * 80)) % #spinner + 1] + end, + }) + end, +}) + +return { + "folke/snacks.nvim", + priority = 1000, + lazy = false, + ---@type snacks.Config + opts = { + picker = {}, + animate = {}, + notifier = {}, + indent = { + enabled = true, + indent = { + char = '┊', + } + }, + }, + keys = keys, +} diff --git a/nvim/lua/plugins/telescope.lua b/nvim/lua/plugins/telescope.lua.bak diff --git a/nvim/lua/plugins/treesitter.lua b/nvim/lua/plugins/treesitter.lua @@ -28,6 +28,8 @@ local config = function() ['if'] = '@function.inner', ['ac'] = '@class.outer', ['ic'] = '@class.inner', + ["as"] = { query = "@local.scope", query_group = "locals", desc = "Select language scope" }, + }, }, move = {