{ config, lib, pkgs, inputs, ... }: let inherit (lib) mkEnableOption mkIf readFile; in { home-manager.users.moritz.programs.nixvim = { plugins.cmp = { autoEnableSources = true; enable = true; settings.sources = [ { priority = 1; name = "async_path"; } { priority = 1; name = "buffer"; } { priority = 2; name = "nvim_lsp"; } { priority = 3; name = "nvim_lsp_signature_help"; } { priority = 4; name = "luasnip"; } { priority = 4; name = "vimtex"; } ]; settings.mapping = { __raw = '' cmp.mapping.preset.insert({ [''] = cmp.mapping.scroll_docs(-4), [''] = cmp.mapping.scroll_docs(4), [''] = cmp.mapping.complete(), [''] = cmp.mapping.abort(), [''] = cmp.mapping.confirm({ select = true }), [""] = cmp.mapping(function(fallback) if cmp.visible() then cmp.select_next_item({ behavior = cmp.SelectBehavior.Select }) elseif require("luasnip").locally_jumpable(1) then require("luasnip").jump(1) else fallback() end end, { "i", "s" }), [""] = cmp.mapping(function(fallback) if cmp.visible() then cmp.select_prev_item({ behavior = cmp.SelectBehavior.Select }) elseif require("luasnip").locally_jumpable(-1) then require("luasnip").jump(-1) else fallback() end end, { "i", "s" }), [""] = cmp.mapping(function(fallback) if require("luasnip").choice_active() then require("luasnip").change_choice(1) elseif require("luasnip").locally_jumpable(1) then require("luasnip").jump(1) else fallback() end end, { "i", "s" }), [""] = cmp.mapping(function(fallback) if require("luasnip").choice_active() then require("luasnip").change_choice(-1) elseif require("luasnip").locally_jumpable(-1) then require("luasnip").jump(-1) else fallback() end end, { "i", "s" }), }) ''; }; }; }; }