{ 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"); }) ]); }