{ 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 "" = "cmp.mapping.complete()"; "" = "cmp.mapping.scroll_docs(-4)"; "" = "cmp.mapping.close()"; "" = "cmp.mapping.scroll_docs(4)"; "" = "cmp.mapping.confirm({ select = true })"; "" = "cmp.mapping(cmp.mapping.select_prev_item(), {'i', 's'})"; "" = "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 }; }; }; }