feat(completion): add kind icons to blink completion menu

This commit is contained in:
sankalp committed 2025-09-14 14:57:53 +05:45
1 parent aa7746cc51
commit 89a6ca8d08
2 files changed
+441 -412

No files matched your search

+84 -55
View File
@@ -1,58 +1,87 @@
return {
-- snippets
{
"L3MON4D3/LuaSnip",
version = "*",
dependencies = { "rafamadriz/friendly-snippets" },
config = function()
require("luasnip.loaders.from_vscode").lazy_load()
end,
},
-- snippets
{
'L3MON4D3/LuaSnip',
version = '*',
dependencies = { 'rafamadriz/friendly-snippets' },
config = function()
require('luasnip.loaders.from_vscode').lazy_load()
end,
},
-- completion
{
"saghen/blink.cmp",
version = "*",
dependencies = {
"L3MON4D3/LuaSnip",
},
config = function()
require("blink.cmp").setup({
completion = {
list = {
selection = {
preselect = false,
auto_insert = true,
},
},
documentation = {
window = { border = "rounded" },
auto_show = true,
auto_show_delay_ms = 50,
},
menu = {
border = "rounded",
},
},
signature = {
window = { border = "rounded" },
},
sources = {
default = { "lsp", "path", "snippets", "buffer" },
providers = {},
},
snippets = { preset = "luasnip" },
keymap = {
preset = "none",
["<S-Tab>"] = { "select_prev", "snippet_backward", "fallback" },
["<Tab>"] = { "select_next", "snippet_forward", "fallback" },
["<CR>"] = { "accept", "fallback" },
["<C-space>"] = { "hide", "show" },
["<C-y>"] = { "show", "show_documentation", "hide_documentation" },
["<C-u>"] = { "scroll_documentation_up", "fallback" },
["<C-d>"] = { "scroll_documentation_down", "fallback" },
},
})
end,
},
-- completion
{
'saghen/blink.cmp',
version = '*',
dependencies = {
'L3MON4D3/LuaSnip',
},
config = function()
require('blink.cmp').setup({
appearance = {
kind_icons = {
Text = '',
Method = '',
Function = 'ƒ',
Constructor = '',
Field = '',
Variable = '',
Property = '󰓹',
Class = '',
Interface = '',
Struct = '',
Module = '󰩦',
Unit = '',
Value = '',
Enum = '',
EnumMember = '',
Keyword = '',
Constant = 'П',
Snippet = '',
Color = '',
File = '',
Reference = '',
Folder = '',
Event = '',
Operator = '',
TypeParameter = '',
},
},
completion = {
list = {
selection = {
preselect = false,
auto_insert = true,
},
},
documentation = {
window = { border = 'rounded' },
auto_show = true,
auto_show_delay_ms = 50,
},
menu = {
border = 'rounded',
},
},
signature = {
window = { border = 'rounded' },
},
sources = {
default = { 'lsp', 'path', 'snippets', 'buffer' },
providers = {},
},
snippets = { preset = 'luasnip' },
keymap = {
preset = 'none',
['<S-Tab>'] = { 'select_prev', 'snippet_backward', 'fallback' },
['<Tab>'] = { 'select_next', 'snippet_forward', 'fallback' },
['<CR>'] = { 'accept', 'fallback' },
['<C-space>'] = { 'hide', 'show' },
['<C-y>'] = { 'show', 'show_documentation', 'hide_documentation' },
['<C-u>'] = { 'scroll_documentation_up', 'fallback' },
['<C-d>'] = { 'scroll_documentation_down', 'fallback' },
},
})
end,
},
}
+357 -357
View File
@@ -1,362 +1,362 @@
return {
"folke/snacks.nvim",
priority = 1000,
lazy = false,
-- opts = {
-- bigfile = { enabled = true },
-- dashboard = { enabled = true },
-- explorer = { enabled = true },
-- indent = { enabled = true },
-- input = { enabled = true },
-- notifier = {
-- enabled = true,
-- timeout = 3000,
-- },
-- picker = { enabled = true },
-- quickfile = { enabled = true },
-- scope = { enabled = true },
-- scroll = { enabled = true },
-- statuscolumn = { enabled = true },
-- words = { enabled = true },
-- styles = {
-- notification = {
-- -- wo = { wrap = true } -- Wrap notifications
-- },
-- },
-- },
config = function()
local function files_layout(preview_width, height, width)
preview_width = preview_width or 0.6
height = height or 0.8
width = width or 0.9
return {
layout = {
box = "horizontal",
width = width,
min_width = 120,
height = height,
{
box = "vertical",
border = "rounded",
title = "{title} {live} {flags}",
{ win = "input", height = 1, border = "bottom" },
{ win = "list", border = "none" },
},
{ win = "preview", title = "{preview}", border = "rounded", width = preview_width },
},
}
end
'folke/snacks.nvim',
priority = 1000,
lazy = false,
-- opts = {
-- bigfile = { enabled = true },
-- dashboard = { enabled = true },
-- explorer = { enabled = true },
-- indent = { enabled = true },
-- input = { enabled = true },
-- notifier = {
-- enabled = true,
-- timeout = 3000,
-- },
-- picker = { enabled = true },
-- quickfile = { enabled = true },
-- scope = { enabled = true },
-- scroll = { enabled = true },
-- statuscolumn = { enabled = true },
-- words = { enabled = true },
-- styles = {
-- notification = {
-- -- wo = { wrap = true } -- Wrap notifications
-- },
-- },
-- },
config = function()
local function files_layout(preview_width, height, width)
preview_width = preview_width or 0.6
height = height or 0.8
width = width or 0.9
return {
layout = {
box = 'horizontal',
width = width,
min_width = 120,
height = height,
{
box = 'vertical',
border = 'rounded',
title = '{title} {live} {flags}',
{ win = 'input', height = 1, border = 'bottom' },
{ win = 'list', border = 'none' },
},
{ win = 'preview', title = '{preview}', border = 'rounded', width = preview_width },
},
}
end
local function palette_layout(height, width)
height = height or 0.4
width = width or 0.6
return {
preview = false,
layout = {
backdrop = false,
row = 1,
width = width,
min_width = 80,
height = height,
border = "rounded",
box = "vertical",
{
win = "input",
height = 1,
border = "rounded",
title = "{title} {live} {flags}",
title_pos = "center",
},
{ win = "list", border = "hpad" },
{ win = "preview", title = "{preview}", border = "rounded" },
},
}
end
local function palette_layout(height, width)
height = height or 0.4
width = width or 0.6
return {
preview = false,
layout = {
backdrop = false,
row = 1,
width = width,
min_width = 80,
height = height,
border = 'rounded',
box = 'vertical',
{
win = 'input',
height = 1,
border = 'rounded',
title = '{title} {live} {flags}',
title_pos = 'center',
},
{ win = 'list', border = 'hpad' },
{ win = 'preview', title = '{preview}', border = 'rounded' },
},
}
end
local Snacks = require("snacks")
Snacks.setup({
animate = {
enabled = true,
duration = 20, -- ms per step
easing = "linear",
fps = 60,
},
bigfile = {
enabled = true,
notify = true,
size = 1000 * 1024, -- 1 MB instead of 100 KB
},
bufdelete = { enabled = true },
dashboard = {
enabled = true,
sections = {
{ section = "header" },
{
icon = "",
title = "Keymaps",
section = "keys",
indent = 2,
padding = 1,
},
{
icon = "",
title = "Recent Files",
section = "recent_files",
indent = 2,
padding = 1,
},
{
icon = "",
title = "Projects",
section = "projects",
indent = 2,
padding = 1,
},
{ section = "startup" },
},
},
debug = { enabled = true },
dim = {
enabled = true,
scope = {
min_size = 5,
max_size = 20,
siblings = true,
},
},
explorer = { enabled = false },
git = { enabled = true },
gitbrowse = { enabled = true },
image = { enabled = true },
indent = {
enabled = true,
priority = 1,
char = "▍",
only_scope = false,
only_current = false,
hl = {
"SnacksIndent1",
"SnacksIndent2",
"SnacksIndent3",
"SnacksIndent4",
"SnacksIndent5",
"SnacksIndent6",
"SnacksIndent7",
"SnacksIndent8",
},
},
input = {
enabled = true,
icon = "",
icon_hl = "SnacksInputIcon",
icon_pos = "left",
prompt_pos = "title",
win = { style = "input" },
expand = true,
},
layout = { enabled = true },
lazygit = { enabled = true },
notifier = {
enabled = true,
timeout = 2000,
width = { min = 40, 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.TRACE,
icons = {
debug = "",
error = "",
info = "",
trace = "",
warn = "",
},
style = "compact",
top_down = true,
date_format = "%R",
more_format = " ↓ %d lines ",
refresh = 50,
},
notify = { enabled = true },
picker = {
enabled = true,
icon = "",
icon_hl = "SnacksPickerIcon",
icon_pos = "left",
prompt_pos = "title",
win = { style = "picker" },
expand = true,
matchers = {
frecency = true,
cwd_bonus = false,
},
sources = {
-- layout options: dropdown, horizontal, vertical, vscode, ivy, ivy_split, telescope, top, left, right, bottom, sidebar
buffers = { layout = files_layout() },
commands = { layout = palette_layout() },
command_history = { layout = palette_layout() },
files = {
hidden = true,
layout = files_layout(),
},
icons = {
icon_sources = { "nerd_fonts", "emoji" },
layout = palette_layout(),
},
git_files = { layout = files_layout() },
git_branches = { layout = { preset = "vertical" } },
git_status = { layout = files_layout() },
help = { layout = { preset = "ivy_split" } },
man = { layout = { preset = "ivy_split" } },
notifications = { layout = palette_layout() },
projects = { layout = files_layout(0.8) },
recent = { layout = files_layout() },
search_history = { layout = palette_layout() },
smart = { layout = files_layout() },
undo = { layout = { preset = "ivy" } },
zoxide = { layout = files_layout(0.7) },
},
},
profiler = { enabled = true },
quickfile = { enabled = true },
rename = { enabled = true },
scope = {
enabled = true,
keys = {
textobject = {
ii = {
min_size = 2, -- minimum size of the scope
edge = false, -- inner scope
cursor = false,
treesitter = { blocks = { enabled = false } },
desc = "inner scope",
},
ai = {
cursor = false,
min_size = 2, -- minimum size of the scope
treesitter = { blocks = { enabled = false } },
desc = "full scope",
},
},
jump = {
["[a"] = {
min_size = 1, -- allow single line scopes
bottom = false,
cursor = false,
edge = true,
treesitter = { blocks = { enabled = false } },
desc = "jump to top edge of scope",
},
["]a"] = {
min_size = 1, -- allow single line scopes
bottom = true,
cursor = false,
edge = true,
treesitter = { blocks = { enabled = false } },
desc = "jump to bottom edge of scope",
},
},
},
},
scratch = {
enabled = true,
name = "SCRATCH",
ft = function()
if vim.bo.buftype == "" and vim.bo.filetype ~= "" then
return vim.bo.filetype
end
return "markdown"
end,
icon = nil,
root = vim.fn.stdpath("data") .. "/scratch",
autowrite = true,
filekey = {
cwd = true,
branch = true,
count = true,
},
win = {
width = 120,
height = 40,
bo = { buftype = "", buflisted = false, bufhidden = "hide", swapfile = false },
minimal = false,
noautocmd = false,
zindex = 20,
wo = { winhighlight = "NormalFloat:Normal" },
border = "rounded",
title_pos = "center",
footer_pos = "center",
local Snacks = require('snacks')
Snacks.setup({
animate = {
enabled = true,
duration = 20, -- ms per step
easing = 'linear',
fps = 60,
},
bigfile = {
enabled = true,
notify = true,
size = 1000 * 1024, -- 1 MB instead of 100 KB
},
bufdelete = { enabled = true },
dashboard = {
enabled = true,
sections = {
{ section = 'header' },
{
icon = '',
title = 'Keymaps',
section = 'keys',
indent = 2,
padding = 1,
},
{
icon = '',
title = 'Recent Files',
section = 'recent_files',
indent = 2,
padding = 1,
},
{
icon = '',
title = 'Projects',
section = 'projects',
indent = 2,
padding = 1,
},
{ section = 'startup' },
},
},
debug = { enabled = true },
dim = {
enabled = true,
scope = {
min_size = 5,
max_size = 20,
siblings = true,
},
},
explorer = { enabled = false },
git = { enabled = true },
gitbrowse = { enabled = true },
image = { enabled = true },
indent = {
enabled = true,
priority = 1,
char = '▍',
only_scope = false,
only_current = false,
hl = {
'SnacksIndent1',
'SnacksIndent2',
'SnacksIndent3',
'SnacksIndent4',
'SnacksIndent5',
'SnacksIndent6',
'SnacksIndent7',
'SnacksIndent8',
},
},
input = {
enabled = true,
icon = '',
icon_hl = 'SnacksInputIcon',
icon_pos = 'left',
prompt_pos = 'title',
win = { style = 'input' },
expand = true,
},
layout = { enabled = true },
lazygit = { enabled = true },
notifier = {
enabled = true,
timeout = 2000,
width = { min = 40, 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.TRACE,
icons = {
debug = '',
error = '',
info = '',
trace = '',
warn = '',
},
style = 'compact',
top_down = true,
date_format = '%R',
more_format = ' ↓ %d lines ',
refresh = 50,
},
notify = { enabled = true },
picker = {
enabled = true,
icon = '',
icon_hl = 'SnacksPickerIcon',
icon_pos = 'left',
prompt_pos = 'title',
win = { style = 'picker' },
expand = true,
matchers = {
frecency = true,
cwd_bonus = false,
},
sources = {
-- layout options: dropdown, horizontal, vertical, vscode, ivy, ivy_split, telescope, top, left, right, bottom, sidebar
buffers = { layout = files_layout() },
commands = { layout = palette_layout() },
command_history = { layout = palette_layout() },
files = {
hidden = true,
layout = files_layout(),
},
icons = {
icon_sources = { 'nerd_fonts', 'emoji' },
layout = palette_layout(),
},
git_files = { layout = files_layout() },
git_branches = { layout = { preset = 'vertical' } },
git_status = { layout = files_layout() },
help = { layout = { preset = 'ivy_split' } },
man = { layout = { preset = 'ivy_split' } },
notifications = { layout = palette_layout() },
projects = { layout = files_layout(0.8) },
recent = { layout = files_layout() },
search_history = { layout = palette_layout() },
smart = { layout = files_layout() },
undo = { layout = { preset = 'ivy' } },
zoxide = { layout = files_layout(0.7) },
},
},
profiler = { enabled = true },
quickfile = { enabled = true },
rename = { enabled = true },
scope = {
enabled = true,
keys = {
textobject = {
ii = {
min_size = 2, -- minimum size of the scope
edge = false, -- inner scope
cursor = false,
treesitter = { blocks = { enabled = false } },
desc = 'inner scope',
},
ai = {
cursor = false,
min_size = 2, -- minimum size of the scope
treesitter = { blocks = { enabled = false } },
desc = 'full scope',
},
},
jump = {
['[a'] = {
min_size = 1, -- allow single line scopes
bottom = false,
cursor = false,
edge = true,
treesitter = { blocks = { enabled = false } },
desc = 'jump to top edge of scope',
},
[']a'] = {
min_size = 1, -- allow single line scopes
bottom = true,
cursor = false,
edge = true,
treesitter = { blocks = { enabled = false } },
desc = 'jump to bottom edge of scope',
},
},
},
},
scratch = {
enabled = true,
name = 'SCRATCH',
ft = function()
if vim.bo.buftype == '' and vim.bo.filetype ~= '' then
return vim.bo.filetype
end
return 'markdown'
end,
icon = nil,
root = vim.fn.stdpath('data') .. '/scratch',
autowrite = true,
filekey = {
cwd = true,
branch = true,
count = true,
},
win = {
width = 120,
height = 40,
bo = { buftype = '', buflisted = false, bufhidden = 'hide', swapfile = false },
minimal = false,
noautocmd = false,
zindex = 20,
wo = { winhighlight = 'NormalFloat:Normal' },
border = 'rounded',
title_pos = 'center',
footer_pos = 'center',
keys = {
["execute"] = {
"<cr>",
function(_)
vim.cmd("%SnipRun")
end,
desc = "Execute buffer",
mode = { "n", "x" },
},
},
},
win_by_ft = {
lua = {
keys = {
["source"] = {
"<leader>cr",
function(self)
local name = "scratch."
.. vim.fn.fnamemodify(vim.api.nvim_buf_get_name(self.buf), ":e")
Snacks.debug.run({ buf = self.buf, name = name })
end,
desc = "Source buffer",
mode = { "n", "x" },
},
},
},
},
},
scroll = { enabled = false },
statuscolumn = {
enabled = false, -- Change this to false
left = { "mark", "sign" },
right = { "fold", "git" },
folds = {
open = false,
git_hl = false,
},
git = {
patterns = { "GitSign", "MiniDiffSign" },
},
refresh = 50,
},
terminal = { enabled = false },
toggle = { enabled = false },
win = { enabled = true },
words = { enabled = false },
zen = {
enabled = true,
toggles = {
dim = true,
git_signs = false,
mini_diff_signs = false,
-- diagnostics = false,
-- inlay_hints = false,
},
show = {
statusline = false,
tabline = false,
},
win = { style = "zen" },
zoom = {
toggles = {},
show = { statusline = true, tabline = true },
win = {
backdrop = false,
width = 0,
},
},
},
})
end,
keys = {
['execute'] = {
'<cr>',
function(_)
vim.cmd('%SnipRun')
end,
desc = 'Execute buffer',
mode = { 'n', 'x' },
},
},
},
win_by_ft = {
lua = {
keys = {
['source'] = {
'<leader>cr',
function(self)
local name = 'scratch.'
.. vim.fn.fnamemodify(vim.api.nvim_buf_get_name(self.buf), ':e')
Snacks.debug.run({ buf = self.buf, name = name })
end,
desc = 'Source buffer',
mode = { 'n', 'x' },
},
},
},
},
},
scroll = { enabled = false },
statuscolumn = {
enabled = false, -- Change this to false
left = { 'mark', 'sign' },
right = { 'fold', 'git' },
folds = {
open = false,
git_hl = false,
},
git = {
patterns = { 'GitSign', 'MiniDiffSign' },
},
refresh = 50,
},
terminal = { enabled = false },
toggle = { enabled = false },
win = { enabled = true },
words = { enabled = false },
zen = {
enabled = true,
toggles = {
dim = true,
git_signs = false,
mini_diff_signs = false,
-- diagnostics = false,
-- inlay_hints = false,
},
show = {
statusline = false,
tabline = false,
},
win = { style = 'zen' },
zoom = {
toggles = {},
show = { statusline = true, tabline = true },
win = {
backdrop = false,
width = 0,
},
},
},
})
end,
}