return { -- completion { 'saghen/blink.cmp', version = '*', config = function() require('blink.cmp').setup({ completion = { list = { selection = { preselect = false, auto_insert = true, }, }, documentation = { window = { border = 'rounded' }, auto_show = true, auto_show_delay_ms = 50, }, menu = { border = 'rounded', draw = { components = { kind_icon = { text = function(ctx) local kind_icon, _, _ = require('mini.icons').get('lsp', ctx.kind) return kind_icon end, highlight = function(ctx) local _, hl, _ = require('mini.icons').get('lsp', ctx.kind) return hl end, }, kind = { highlight = function(ctx) local _, hl, _ = require('mini.icons').get('lsp', ctx.kind) return hl end, }, }, }, }, }, signature = { window = { border = 'rounded' }, }, snippets = { preset = 'luasnip' }, sources = { default = { 'lsp', 'path', 'snippets', 'buffer' }, providers = {}, }, keymap = { preset = 'none', [''] = { 'select_prev', 'snippet_backward', 'fallback' }, [''] = { 'select_next', 'snippet_forward', 'fallback' }, [''] = { 'accept', 'fallback' }, [''] = { 'hide', 'show' }, [''] = { 'show', 'show_documentation', 'hide_documentation' }, [''] = { 'scroll_documentation_up', 'fallback' }, [''] = { 'scroll_documentation_down', 'fallback' }, }, }) end, }, -- snippets { 'L3MON4D3/LuaSnip', version = '*', dependencies = { 'rafamadriz/friendly-snippets' }, config = function() local luasnip = require('luasnip') require('luasnip.loaders.from_vscode').lazy_load() require('luasnip.loaders.from_vscode').lazy_load({ paths = { vim.fn.stdpath('config') .. '/snippets' }, }) luasnip.filetype_extend('mdx', { 'markdown' }) end, }, -- auto pairs { 'windwp/nvim-autopairs', event = 'InsertEnter', config = function() local npairs = require('nvim-autopairs') local Rule = require('nvim-autopairs.rule') local conds = require('nvim-autopairs.conds') npairs.setup() -- Autoclosing angle-brackets. npairs.add_rule(Rule('<', '>', { -- Avoid conflicts with nvim-ts-autotag. '-html', '-javascriptreact', '-typescriptreact', }):with_pair(conds.before_regex('%a+:?:?$', 3)):with_move(function(opts) return opts.char == '>' end)) end, }, -- auto tag { 'windwp/nvim-ts-autotag', ft = { 'html', 'xml', 'javascript', 'typescript', 'javascriptreact', 'typescriptreact', 'jsx', 'tsx', 'vue', 'svelte', 'markdown', 'htmldjango', }, event = 'InsertEnter', lazy = true, opts = { -- Defaults enable_close = true, -- Auto close tags enable_rename = true, -- Auto rename pairs of tags enable_close_on_slash = false, -- Auto close on trailing