return { 'mason-org/mason-lspconfig.nvim', dependencies = { { 'neovim/nvim-lspconfig', }, { 'mason-org/mason.nvim', opts = { ui = { icons = { package_installed = "✓", package_pending = "➜", package_uninstalled = "✗" } } }, }, { 'hrsh7th/nvim-cmp', config = function() local cmp = require'cmp' local lspkind = require'lspkind' local cmp_select = { behavior = cmp.SelectBehavior.Select } cmp.setup({ snippet = { expand = function(args) require('luasnip').lsp_expand(args.body) end, }, window = { completion = cmp.config.window.bordered(), documentation = cmp.config.window.bordered(), }, sources = { { name = 'nvim_lsp' }, { name = 'luasnip' }, { name = 'buffer' }, { name = 'supermaven' }, { name = 'path', option = { pathMappings = { ['@'] = '${folder}/src', ['/'] = '${folder}/public', ['~/'] = '${folder}/', }, trailing_slash = true, }, }, { name = 'nvim_lsp_document_symbol' }, { name = 'nvim_lsp_signature_help' }, { name = 'nvim_lua' }, { name = 'nerdfont' }, { name = 'emoji' }, { name = 'npm' }, { name = 'cmp-tw2css' }, { name = 'dotenv' }, { name = 'render-markdown' }, { name = 'cmdline' }, --{ name = 'kitty' }, }, formatting = { format = lspkind.cmp_format({ mode = 'symbol', maxwidth = { menu = 50, abbr = 50, }, symbol_map = { Supermaven = '', }, ellipsis_char = '...', show_labelDetails = true, before = function(entry, vim_item) return vim_item end, }), }, mapping = cmp.mapping.preset.insert({ [''] = cmp.mapping(function(fallback) if cmp.visible() then if cmp.get_selected_entry() then cmp.confirm({ select = false }) else cmp.select_next_item() end else fallback() end end, { 'i', 's' }), [''] = cmp.mapping.confirm({ select = true }), [''] = cmp.mapping.complete(), [''] = cmp.mapping.scroll_docs(-4), [''] = cmp.mapping.scroll_docs(4), [''] = cmp.mapping.abort(), [''] = cmp.mapping.select_prev_item(cmp_select), [''] = cmp.mapping.select_next_item(cmp_select), [''] = cmp.mapping.scroll_docs(4), [''] = cmp.mapping.scroll_docs(-4), }), preselect = cmp.PreselectMode.Item, completion = { completeopt = 'menu,menuone,noinsert', }, }) cmp.setup.cmdline('/', { mapping = cmp.mapping.preset.cmdline(), sources = { { name = 'buffer' } } }) cmp.setup.cmdline(':', { mapping = cmp.mapping.preset.cmdline(), sources = cmp.config.sources({ { name = 'path' } }, { { name = 'cmdline', } }) }) end, }, { 'hrsh7th/cmp-nvim-lsp' }, { 'nvim-lua/plenary.nvim' }, { 'hrsh7th/cmp-nvim-lsp-document-symbol' }, { 'hrsh7th/cmp-nvim-lua' }, { 'hrsh7th/cmp-nvim-lsp-signature-help' }, { 'hrsh7th/cmp-path' }, { 'hrsh7th/cmp-buffer' }, { 'hrsh7th/cmp-emoji' }, { 'chrisgrieser/cmp-nerdfont' }, { 'jcha0713/cmp-tw2css' }, { 'SergioRibera/cmp-dotenv' }, { 'saadparwaiz1/cmp_luasnip' }, { 'onsails/lspkind.nvim' }, { 'rafamadriz/friendly-snippets' }, { 'j-hui/fidget.nvim', config = function() require'fidget'.setup({}) end, }, { 'David-Kunz/cmp-npm', config = function() require'cmp-npm'.setup({}) end }, { 'stevearc/conform.nvim', config = function() require'conform'.setup({ formatters_by_ft = { cs = { 'csharpier', 'lsp' }, javascript = { 'prettierd', 'prettier' }, javascriptreact = { 'prettierd', 'prettier' }, typescript = { 'prettierd', 'prettier' }, typescriptreact = { 'prettierd', 'prettier' }, json = { 'prettierd', 'prettier' }, html = { 'prettierd', 'prettier' }, css = { 'prettierd', 'prettier' }, lua = { 'stylua' }, }, }) vim.api.nvim_create_user_command( 'Format', function(args) local range if args.count ~= -1 then local start_line = vim.fn.line("'<") local end_line = vim.fn.line("'>") range = { start = { start_line, 0 }, ["end"] = { end_line, 0 } } end require'conform'.format({ async = true, lsp_fallback = true, range = range, }) end, { range = true, desc = "Format current buffer or range" }) end, keys = { { 'fk', ':Format', mode = {'n', 'v'}, silent = true, desc = "Format with conform" } } }, { 'L3MON4D3/LuaSnip', version = 'v2.*', build = 'make install_jsregexp' }, { 'supermaven-inc/supermaven-nvim', config = function() require'supermaven-nvim'.setup({ keymaps = { accept_suggestion = '', clear_suggestion = '', accept_word = '', }, disable_inline_completion = true, }) end, }, { 'windwp/nvim-autopairs', event = "InsertEnter", config = true }, { 'windwp/nvim-ts-autotag', config = function() require'nvim-ts-autotag'.setup({}) end, }, { "garyhurtz/cmp_kitty", dependencies = { { "hrsh7th/nvim-cmp" }, }, init = function() require('cmp_kitty'):setup() end }, { 'hrsh7th/cmp-cmdline' }, }, config = function() vim.diagnostic.config({ float = { focusable = false, style = "minimal", border = "rounded", source = true, header = "", prefix = "", }, }) require'mason'.setup({}) local cmp = require'cmp' local cmp_lsp = require'cmp_nvim_lsp' local lspconfig = require'lspconfig' local capabilities = vim.tbl_deep_extend( 'force', {}, vim.lsp.protocol.make_client_capabilities(), cmp_lsp.default_capabilities() ) local cmp_autopairs = require'nvim-autopairs.completion.cmp' cmp.event:on('confirm_done', cmp_autopairs.on_confirm_done()) require 'mason-lspconfig'.setup({ ensure_installed = { 'asm_lsp', 'bashls', 'cmake', 'cssls', 'css_variables', 'cssmodules_ls', 'docker_compose_language_service', 'dockerls', 'eslint', 'gopls', 'gradle_ls', 'graphql', 'html', 'htmx', 'intelephense', 'jsonls', 'kotlin_lsp', 'lua_ls', 'markdown_oxide', 'nginx_language_server', 'prismals', 'pyright', 'rust_analyzer', 'sqlls', 'svelte', 'tailwindcss', 'ts_ls', 'tinymist', 'yamlls', }, handlers = { function(server_name) lspconfig[server_name].setup({ capabilities = capabilities }) end, zls = function() lspconfig.zls.setup({ root_dir = lspconfig.util.root_pattern(".git", "build.zig", "zls.json"), settings = { zls = { enable_inlay_hints = true, enable_snippets = true, warn_style = true, }, }, }) vim.g.zig_fmt_parse_errors = 0 vim.g.zig_fmt_autosave = 0 end, ["lua_ls"] = function() lspconfig.lua_ls.setup({ capabilities = capabilities, settings = { Lua = { runtime = { version = 'LuaJIT', }, diagnostics = { globals = { 'vim' }, }, workspace = { library = vim.api.nvim_get_runtime_file("", true), checkThirdParty = false, -- These are the key settings to prevent the infinite processing maxPreload = 100000, preloadFileSize = 10000, }, telemetry = { enable = false, }, format = { enable = true, defaultConfig = { indent_style = "space", indent_size = "2", }, }, }, }, }) end, } }) end, }