dotfiles/hm/vim/completion.nix

56 lines
1.8 KiB
Nix

{
pkgs,
lib,
config,
...
}:
{
config = {
# Completion
programs.nixvim = {
extraConfigLuaPre = builtins.readFile ./completion_pre.lua;
plugins = {
# Snippets
# UltiSnips should be the better snippet engine, but:
# - Not built-in into Nixvim yet (UPST?)
# - Couldn't manage to make it work with friendly-snippets, which seems to give better snippets for Python at least
# - Tab switching between fields seems hard to configure
luasnip = {
enable = true;
fromVscode = [
{ paths = "${pkgs.vimPlugins.friendly-snippets}"; }
# { paths = "${pkgs.vimPlugins.vim-snippets}"; } # UPST Needs snipmate support
];
};
# Completion
cmp = {
enable = true;
settings = {
mapping = {
# Proposed example, since there's no default
"<C-Space>" = "cmp.mapping.complete()";
"<C-d>" = "cmp.mapping.scroll_docs(-4)";
"<C-e>" = "cmp.mapping.close()";
"<C-f>" = "cmp.mapping.scroll_docs(4)";
"<CR>" = "cmp.mapping.confirm({ select = true })";
"<S-Tab>" = "cmp.mapping(cmp.mapping.select_prev_item(), {'i', 's'})";
"<Tab>" = "cmp.mapping(cmp.mapping.select_next_item(), {'i', 's'})";
};
sources = [
# Respective plugins will get installed automatically
{ name = "buffer"; }
{ name = "calc"; }
{ name = "nvim_lsp"; }
{ name = "path"; }
{ name = "luasnip"; }
];
snippet.expand = "function(args) require('luasnip').lsp_expand(args.body) end";
};
};
lspkind.enable = true; # Add icons to LSP completions
};
};
};
}