forked from mirrors_public/oddlama_nix-config
feat: switch nvim to blink.cmp
This commit is contained in:
parent
d8e2c81593
commit
7e66c747ef
3 changed files with 264 additions and 172 deletions
|
@ -53,7 +53,7 @@
|
|||
# Status updates for LSP progress in right bottom corner.
|
||||
fidget.enable = true;
|
||||
# Show colors
|
||||
nvim-colorizer.enable = true;
|
||||
colorizer.enable = true;
|
||||
|
||||
# Breadcrumbs
|
||||
# TODO navic.enable = true; or dropbar?
|
||||
|
|
|
@ -1,182 +1,274 @@
|
|||
{
|
||||
programs.nixvim = {
|
||||
plugins = {
|
||||
luasnip = {
|
||||
blink-compat.enable = true;
|
||||
|
||||
blink-cmp = {
|
||||
enable = true;
|
||||
settings = {
|
||||
history = true;
|
||||
# Update dynamic snippets while typing
|
||||
updateevents = "TextChanged,TextChangedI";
|
||||
enable_autosnippets = true;
|
||||
};
|
||||
};
|
||||
|
||||
cmp_luasnip.enable = true;
|
||||
cmp-dap.enable = true;
|
||||
cmp-cmdline.enable = true;
|
||||
cmp-cmdline-history.enable = true;
|
||||
cmp-path.enable = true;
|
||||
cmp-emoji.enable = true;
|
||||
cmp-treesitter.enable = true;
|
||||
cmp-nvim-lsp.enable = true;
|
||||
cmp-nvim-lsp-document-symbol.enable = true;
|
||||
cmp-nvim-lsp-signature-help.enable = true;
|
||||
cmp = {
|
||||
enable = true;
|
||||
settings = {
|
||||
sources = [
|
||||
{ name = "nvim_lsp_signature_help"; }
|
||||
{ name = "nvim_lsp"; }
|
||||
{ name = "nvim_lsp_document_symbol"; }
|
||||
{ name = "path"; }
|
||||
{ name = "treesitter"; }
|
||||
{ name = "dap"; }
|
||||
# {name = "luasnip";}
|
||||
{ name = "emoji"; }
|
||||
];
|
||||
mapping = {
|
||||
"<CR>" =
|
||||
# lua
|
||||
''
|
||||
cmp.mapping.confirm({
|
||||
behavior = cmp.ConfirmBehavior.Replace,
|
||||
select = false,
|
||||
})
|
||||
'';
|
||||
"<C-d>" =
|
||||
# lua
|
||||
"cmp.mapping.scroll_docs(-4)";
|
||||
"<C-f>" =
|
||||
# lua
|
||||
"cmp.mapping.scroll_docs(4)";
|
||||
"<C-e>" =
|
||||
# lua
|
||||
"cmp.mapping.abort()";
|
||||
"<Tab>" =
|
||||
# lua
|
||||
''
|
||||
cmp.mapping(function(fallback)
|
||||
local has_words_before = function()
|
||||
local line, col = table.unpack(vim.api.nvim_win_get_cursor(0))
|
||||
return col ~= 0 and vim.api.nvim_buf_get_lines(0, line - 1, line, true)[1]:sub(col, col):match "%s" == nil
|
||||
end
|
||||
|
||||
if cmp.visible() then
|
||||
cmp.select_next_item({ behavior = cmp.SelectBehavior.Select })
|
||||
elseif require("luasnip").expandable() then
|
||||
require("luasnip").expand()
|
||||
elseif require("luasnip").expand_or_locally_jumpable() then
|
||||
require("luasnip").expand_or_jump()
|
||||
--elseif has_words_before() then
|
||||
-- cmp.complete()
|
||||
else
|
||||
fallback()
|
||||
end
|
||||
end, {"i", "s"})
|
||||
'';
|
||||
"<Down>" =
|
||||
# lua
|
||||
''cmp.mapping(cmp.mapping.select_next_item({ behavior = cmp.SelectBehavior.Select }), {'i'})'';
|
||||
"<Up>" =
|
||||
# lua
|
||||
''cmp.mapping(cmp.mapping.select_prev_item({ behavior = cmp.SelectBehavior.Select }), {'i'})'';
|
||||
"<PageDown>" =
|
||||
# lua
|
||||
''cmp.mapping(cmp.mapping.select_next_item({ behavior = cmp.SelectBehavior.Select, count = -10 }), {'i'})'';
|
||||
"<PageUp>" =
|
||||
# lua
|
||||
''cmp.mapping(cmp.mapping.select_prev_item({ behavior = cmp.SelectBehavior.Select, count = 10 }), {'i'})'';
|
||||
"<S-Tab>" =
|
||||
# lua
|
||||
''
|
||||
cmp.mapping(function(fallback)
|
||||
if cmp.visible() then
|
||||
cmp.select_prev_item({ behavior = cmp.SelectBehavior.Select })
|
||||
elseif luasnip.jumpable(-1) then
|
||||
luasnip.jump(-1)
|
||||
else
|
||||
fallback()
|
||||
end
|
||||
end, {"i", "s"})
|
||||
'';
|
||||
keymap = {
|
||||
preset = "enter";
|
||||
"<A-Tab>" = [
|
||||
"snippet_forward"
|
||||
"fallback"
|
||||
];
|
||||
"<A-S-Tab>" = [
|
||||
"snippet_backward"
|
||||
"fallback"
|
||||
];
|
||||
"<Tab>" = [
|
||||
"select_next"
|
||||
"fallback"
|
||||
];
|
||||
"<S-Tab>" = [
|
||||
"select_prev"
|
||||
"fallback"
|
||||
];
|
||||
};
|
||||
|
||||
appearance = {
|
||||
use_nvim_cmp_as_default = true;
|
||||
nerd_font_variant = "mono";
|
||||
};
|
||||
|
||||
sources = {
|
||||
default = [
|
||||
"lsp"
|
||||
"path"
|
||||
"snippets"
|
||||
"emoji"
|
||||
"buffer"
|
||||
];
|
||||
providers = {
|
||||
emoji = {
|
||||
name = "emoji";
|
||||
module = "blink.compat.source";
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
signature.enabled = true;
|
||||
completion = {
|
||||
list.selection = "manual";
|
||||
# menu = {
|
||||
# border = "none";
|
||||
# draw = {
|
||||
# gap = 1;
|
||||
# treesitter = [ "lsp" ];
|
||||
# columns = [
|
||||
# {
|
||||
# __unkeyed-1 = "label";
|
||||
# }
|
||||
# {
|
||||
# __unkeyed-1 = "kind_icon";
|
||||
# __unkeyed-2 = "kind";
|
||||
# gap = 1;
|
||||
# }
|
||||
# { __unkeyed-1 = "source_name"; }
|
||||
# ];
|
||||
# };
|
||||
# };
|
||||
# trigger = {
|
||||
# show_in_snippet = false;
|
||||
# };
|
||||
documentation = {
|
||||
auto_show = true;
|
||||
# window = {
|
||||
# border = "rounded";
|
||||
# };
|
||||
};
|
||||
# accept = {
|
||||
# auto_brackets = {
|
||||
# enabled = true;
|
||||
# };
|
||||
# };
|
||||
};
|
||||
formatting.fields = [
|
||||
"abbr"
|
||||
"kind"
|
||||
"menu"
|
||||
];
|
||||
formatting.format =
|
||||
# lua
|
||||
''
|
||||
function(_, vim_item)
|
||||
local icons = {
|
||||
Namespace = "",
|
||||
Text = "",
|
||||
Method = "",
|
||||
Function = "",
|
||||
Constructor = "",
|
||||
Field = "",
|
||||
Variable = "",
|
||||
Class = "",
|
||||
Interface = "",
|
||||
Module = "",
|
||||
Property = "",
|
||||
Unit = "",
|
||||
Value = "",
|
||||
Enum = "",
|
||||
Keyword = "",
|
||||
Snippet = "",
|
||||
Color = "",
|
||||
File = "",
|
||||
Reference = "",
|
||||
Folder = "",
|
||||
EnumMember = "",
|
||||
Constant = "",
|
||||
Struct = "",
|
||||
Event = "",
|
||||
Operator = "",
|
||||
TypeParameter = "",
|
||||
Table = "",
|
||||
Object = "",
|
||||
Tag = "",
|
||||
Array = "",
|
||||
Boolean = "",
|
||||
Number = "",
|
||||
Null = "",
|
||||
String = "",
|
||||
Calendar = "",
|
||||
Watch = "",
|
||||
Package = "",
|
||||
Copilot = "",
|
||||
Codeium = "",
|
||||
TabNine = "",
|
||||
}
|
||||
vim_item.kind = string.format("%s %s", icons[vim_item.kind], vim_item.kind)
|
||||
return vim_item
|
||||
end
|
||||
'';
|
||||
snippet.expand =
|
||||
# lua
|
||||
''
|
||||
function(args)
|
||||
require('luasnip').lsp_expand(args.body)
|
||||
end
|
||||
'';
|
||||
};
|
||||
};
|
||||
|
||||
# TODO use "ray-x/lsp_signature.nvim"
|
||||
cmp-emoji.enable = true;
|
||||
|
||||
lsp.capabilities = # lua
|
||||
''
|
||||
capabilities = require('blink.cmp').get_lsp_capabilities(capabilities)
|
||||
'';
|
||||
|
||||
# luasnip = {
|
||||
# enable = true;
|
||||
# settings = {
|
||||
# history = true;
|
||||
# # Update dynamic snippets while typing
|
||||
# updateevents = "TextChanged,TextChangedI";
|
||||
# enable_autosnippets = true;
|
||||
# };
|
||||
# };
|
||||
#
|
||||
# cmp_luasnip.enable = true;
|
||||
# cmp-dap.enable = true;
|
||||
# cmp-cmdline.enable = true;
|
||||
# cmp-cmdline-history.enable = true;
|
||||
# cmp-path.enable = true;
|
||||
# cmp-emoji.enable = true;
|
||||
# cmp-treesitter.enable = true;
|
||||
# cmp-nvim-lsp.enable = true;
|
||||
# cmp-nvim-lsp-document-symbol.enable = true;
|
||||
# cmp-nvim-lsp-signature-help.enable = true;
|
||||
# cmp = {
|
||||
# enable = true;
|
||||
# settings = {
|
||||
# sources = [
|
||||
# { name = "nvim_lsp_signature_help"; }
|
||||
# { name = "nvim_lsp"; }
|
||||
# { name = "nvim_lsp_document_symbol"; }
|
||||
# { name = "path"; }
|
||||
# { name = "treesitter"; }
|
||||
# { name = "dap"; }
|
||||
# # {name = "luasnip";}
|
||||
# { name = "emoji"; }
|
||||
# ];
|
||||
# mapping = {
|
||||
# "<CR>" =
|
||||
# # lua
|
||||
# ''
|
||||
# cmp.mapping.confirm({
|
||||
# behavior = cmp.ConfirmBehavior.Replace,
|
||||
# select = false,
|
||||
# })
|
||||
# '';
|
||||
# "<C-d>" =
|
||||
# # lua
|
||||
# "cmp.mapping.scroll_docs(-4)";
|
||||
# "<C-f>" =
|
||||
# # lua
|
||||
# "cmp.mapping.scroll_docs(4)";
|
||||
# "<C-e>" =
|
||||
# # lua
|
||||
# "cmp.mapping.abort()";
|
||||
# "<Tab>" =
|
||||
# # lua
|
||||
# ''
|
||||
# cmp.mapping(function(fallback)
|
||||
# local has_words_before = function()
|
||||
# local line, col = table.unpack(vim.api.nvim_win_get_cursor(0))
|
||||
# return col ~= 0 and vim.api.nvim_buf_get_lines(0, line - 1, line, true)[1]:sub(col, col):match "%s" == nil
|
||||
# end
|
||||
#
|
||||
# if cmp.visible() then
|
||||
# cmp.select_next_item({ behavior = cmp.SelectBehavior.Select })
|
||||
# elseif require("luasnip").expandable() then
|
||||
# require("luasnip").expand()
|
||||
# elseif require("luasnip").expand_or_locally_jumpable() then
|
||||
# require("luasnip").expand_or_jump()
|
||||
# --elseif has_words_before() then
|
||||
# -- cmp.complete()
|
||||
# else
|
||||
# fallback()
|
||||
# end
|
||||
# end, {"i", "s"})
|
||||
# '';
|
||||
# "<Down>" =
|
||||
# # lua
|
||||
# ''cmp.mapping(cmp.mapping.select_next_item({ behavior = cmp.SelectBehavior.Select }), {'i'})'';
|
||||
# "<Up>" =
|
||||
# # lua
|
||||
# ''cmp.mapping(cmp.mapping.select_prev_item({ behavior = cmp.SelectBehavior.Select }), {'i'})'';
|
||||
# "<PageDown>" =
|
||||
# # lua
|
||||
# ''cmp.mapping(cmp.mapping.select_next_item({ behavior = cmp.SelectBehavior.Select, count = -10 }), {'i'})'';
|
||||
# "<PageUp>" =
|
||||
# # lua
|
||||
# ''cmp.mapping(cmp.mapping.select_prev_item({ behavior = cmp.SelectBehavior.Select, count = 10 }), {'i'})'';
|
||||
# "<S-Tab>" =
|
||||
# # lua
|
||||
# ''
|
||||
# cmp.mapping(function(fallback)
|
||||
# if cmp.visible() then
|
||||
# cmp.select_prev_item({ behavior = cmp.SelectBehavior.Select })
|
||||
# elseif luasnip.jumpable(-1) then
|
||||
# luasnip.jump(-1)
|
||||
# else
|
||||
# fallback()
|
||||
# end
|
||||
# end, {"i", "s"})
|
||||
# '';
|
||||
# };
|
||||
# formatting.fields = [
|
||||
# "abbr"
|
||||
# "kind"
|
||||
# "menu"
|
||||
# ];
|
||||
# formatting.format =
|
||||
# # lua
|
||||
# ''
|
||||
# function(_, vim_item)
|
||||
# local icons = {
|
||||
# Namespace = "",
|
||||
# Text = "",
|
||||
# Method = "",
|
||||
# Function = "",
|
||||
# Constructor = "",
|
||||
# Field = "",
|
||||
# Variable = "",
|
||||
# Class = "",
|
||||
# Interface = "",
|
||||
# Module = "",
|
||||
# Property = "",
|
||||
# Unit = "",
|
||||
# Value = "",
|
||||
# Enum = "",
|
||||
# Keyword = "",
|
||||
# Snippet = "",
|
||||
# Color = "",
|
||||
# File = "",
|
||||
# Reference = "",
|
||||
# Folder = "",
|
||||
# EnumMember = "",
|
||||
# Constant = "",
|
||||
# Struct = "",
|
||||
# Event = "",
|
||||
# Operator = "",
|
||||
# TypeParameter = "",
|
||||
# Table = "",
|
||||
# Object = "",
|
||||
# Tag = "",
|
||||
# Array = "",
|
||||
# Boolean = "",
|
||||
# Number = "",
|
||||
# Null = "",
|
||||
# String = "",
|
||||
# Calendar = "",
|
||||
# Watch = "",
|
||||
# Package = "",
|
||||
# Copilot = "",
|
||||
# Codeium = "",
|
||||
# TabNine = "",
|
||||
# }
|
||||
# vim_item.kind = string.format("%s %s", icons[vim_item.kind], vim_item.kind)
|
||||
# return vim_item
|
||||
# end
|
||||
# '';
|
||||
# snippet.expand =
|
||||
# # lua
|
||||
# ''
|
||||
# function(args)
|
||||
# require('luasnip').lsp_expand(args.body)
|
||||
# end
|
||||
# '';
|
||||
# };
|
||||
# };
|
||||
#
|
||||
# # TODO use "ray-x/lsp_signature.nvim"
|
||||
};
|
||||
|
||||
extraConfigLuaPost = ''
|
||||
local cmp = require "cmp"
|
||||
cmp.setup.cmdline(":", {
|
||||
mapping = cmp.mapping.preset.cmdline(),
|
||||
sources = {
|
||||
{ name = "cmdline" },
|
||||
{ name = "cmp-cmdline-history" },
|
||||
},
|
||||
})
|
||||
'';
|
||||
# extraConfigLuaPost = ''
|
||||
# local cmp = require "cmp"
|
||||
# cmp.setup.cmdline(":", {
|
||||
# mapping = cmp.mapping.preset.cmdline(),
|
||||
# sources = {
|
||||
# { name = "cmdline" },
|
||||
# { name = "cmp-cmdline-history" },
|
||||
# },
|
||||
# })
|
||||
# '';
|
||||
};
|
||||
}
|
||||
|
|
|
@ -28,9 +28,9 @@
|
|||
};
|
||||
|
||||
# Cargo.toml dependency completion
|
||||
crates-nvim = {
|
||||
crates = {
|
||||
enable = true;
|
||||
extraOptions = {
|
||||
settings = {
|
||||
completion.cmp.enabled = true;
|
||||
};
|
||||
};
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue