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:
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 = {