{ config, lib, pkgs, helpers, ... }: let nixvimCfg = config.nixvimConfigs.fiesta; cfg = nixvimCfg.setups.completion; in { options.nixvimConfigs.fiesta.setups.completion.enable = lib.mkEnableOption "debugging setup for Fiesta NixVim"; config = lib.mkIf cfg.enable (lib.mkMerge [ { plugins.cmp = { enable = true; autoEnableSources = true; settings.mapping = { "" = "cmp.mapping.confirm({ select = true })"; "" = "cmp.mapping.complete()"; "" = "cmp.mapping.scroll_docs(-4)"; "" = "cmp.mapping.scroll_docs(4)"; "" = "cmp.mapping.close()"; "" = "cmp.mapping.select_next_item()"; "" = "cmp.mapping.select_prev_item()"; "" = "cmp.mapping.select_next_item()"; "" = "cmp.mapping.select_prev_item()"; }; settings.sources = [ { name = "nvim_lsp"; } { name = "path"; } { name = "buffer"; } ]; }; # All of the typical completion sources I would need. plugins.cmp-buffer.enable = true; plugins.cmp-path.enable = true; plugins.cmp-vim-lsp.enable = true; plugins.cmp-nvim-lua.enable = true; } (lib.mkIf nixvimCfg.setups.debugging.enable { plugins.cmp-dap.enable = true; }) (lib.mkIf nixvimCfg.setups.snippets.enable { plugins.cmp.settings = { snippet.expand = '' function(args) require('luasnip').lsp_expand(args.body) end ''; sources = [{ name = "luasnip"; }]; }; plugins.cmp_luasnip.enable = true; }) (lib.mkIf nixvimCfg.setups.treesitter.enable { plugins.cmp-treesitter.enable = true; }) ]); }