58 lines
1.3 KiB
Nix
58 lines
1.3 KiB
Nix
|
{ config, lib, pkgs, ... }:
|
||
|
|
||
|
let
|
||
|
inherit (lib.nix2lua) pipe1 var call call0;
|
||
|
cfg = config.plugins.nvim-cmp;
|
||
|
in
|
||
|
{
|
||
|
options.plugins.nvim-cmp = with lib; {
|
||
|
enable = mkEnableOption "nvim-cmp";
|
||
|
|
||
|
package = mkPackageOption pkgs.vimPlugins "nvim-cmp" { };
|
||
|
|
||
|
settings = mkOption {
|
||
|
type = types.attrs;
|
||
|
default = { };
|
||
|
};
|
||
|
};
|
||
|
|
||
|
config = lib.mkIf cfg.enable (lib.mkMerge [
|
||
|
{
|
||
|
plugin.luasnip = { };
|
||
|
plugin.cmp_luasnip = lib.mkDefault { isDependency = true; };
|
||
|
|
||
|
fn.nvim-cmp-snippet-expand = {
|
||
|
args = [ "args" ];
|
||
|
content = args: {
|
||
|
extra = pipe1
|
||
|
(var config.plugin.luasnip.varName)
|
||
|
(call "lsp_expand" args);
|
||
|
};
|
||
|
};
|
||
|
|
||
|
vim.opt.completeopt = [ "menu" "menuone" "noselect" ];
|
||
|
|
||
|
plugin.nvim-cmp = {
|
||
|
name = "cmp";
|
||
|
package = cfg.package;
|
||
|
setupSettings = lib.mkMerge [
|
||
|
cfg.settings
|
||
|
{ snippet.expand = config.fn.nvim-cmp-snippet-expand.lambda; }
|
||
|
];
|
||
|
};
|
||
|
}
|
||
|
|
||
|
(lib.mkIf config.plugins.language-server.lspconfig.enable {
|
||
|
plugin.cmp-nvim-lsp = {
|
||
|
name = "cmp_nvim_lsp";
|
||
|
};
|
||
|
|
||
|
plugins.language-server.lspconfig.defaultServerSettings.capabilities =
|
||
|
pipe1
|
||
|
(var config.plugin.cmp-nvim-lsp.varName)
|
||
|
(call0 "default_capabilities");
|
||
|
})
|
||
|
]);
|
||
|
|
||
|
}
|