From 4b33912ad1437a8c461352a0489dc5144dd04ff4 Mon Sep 17 00:00:00 2001 From: Rostyslav Hnatyshyn Date: Thu, 31 Aug 2023 23:43:35 -0700 Subject: [PATCH] switch to nvim-cmp --- nvim/init.lua | 176 +++++++++++++++++++++++++++++++++++++------------- 1 file changed, 131 insertions(+), 45 deletions(-) diff --git a/nvim/init.lua b/nvim/init.lua index e0ff486..da973e1 100644 --- a/nvim/init.lua +++ b/nvim/init.lua @@ -21,6 +21,7 @@ vim.wo.cursorline = true vim.opt.hlsearch = false vim.opt.wrap = true vim.opt.showmatch = true +vim.opt.completeopt = { 'menu', 'menuone', 'noselect' } vim.g.python3_host_prog = '/home/frosty/.dotfiles/nvim/env/bin/python' @@ -48,7 +49,7 @@ function imap(shortcut, command) map('i', shortcut, command) end -vim.opt.guifont = "Iosevka Nerd Font:h12" +vim.opt.guifont = "Hack Nerd Font:h12" if vim.g.neovide then vim.g.neovide_refresh_rate = 140 -- change to whatever font you prefer @@ -72,7 +73,7 @@ end -- is leader key; default is \ nmap("v", "NvimTreeToggle") nmap("ec", "e ~/.config/nvim/init.lua") -nmap("sc", "source ~/.config/nvim/init.luaPackerSync") +nmap("sc", "source ~/.config/nvim/init.luaPackerCleanPackerCompile") -- buffer commands nmap("b", "BufferLineCyclePrev") @@ -130,9 +131,17 @@ local on_attach = function(client, bufnr) end local lsp = require "lspconfig" +local lsp_defaults = lsp.util.default_config + + + lsp.hls.setup { on_attach = on_attach } -- haskell language server -lsp.ccls.setup { on_attach = on_attach } lsp.pyright.setup { on_attach = on_attach } +lsp.svelte.setup { on_attach = on_attach } + +local capabilities = vim.lsp.protocol.make_client_capabilities() +capabilities.offsetEncoding = { "utf-16" } +lsp.clangd.setup { on_attach = on_attach, capabilities = capabilities } -- https://github.com/denoland/deno - maybe switch? lsp.tsserver.setup { on_attach = on_attach } lsp.marksman.setup { on_attach = on_attach } @@ -146,8 +155,9 @@ lsp.lua_ls.setup { on_attach = on_attach, } } } +lsp.tailwindcss.setup { on_attach = on_attach } -vim.cmd("colorscheme carbonfox") +vim.cmd("colorscheme mellifluous") -- kill eslint_d on exit local on_leave_group = vim.api.nvim_create_augroup("OnLeaveGroup", {}) vim.api.nvim_create_autocmd("VimLeave", { @@ -184,29 +194,7 @@ return M]] return require('packer').startup(function(use) use 'wbthomason/packer.nvim' use 'nvim-lua/plenary.nvim' - --[[use { "lukas-reineke/lsp-format.nvim", - config = function() - require("lsp-format").setup { - python = { - exclude = { "pyright" }, - }, - javascript = { - exclude = { "tsserver" } - } - } - end, - requires = { 'neovim/nvim-lspconfig' } - }]] - -- use 'neovim/nvim-lspconfig' - use { - 'ms-jpq/coq_nvim', - branch = 'coq', - event = "VimEnter", - config = 'vim.cmd[[COQnow]]' - } - use { 'ms-jpq/coq.artifacts', branch = 'artifacts' } - use { 'ms-jpq/coq.thirdparty', branch = '3p' } use { 'nvim-treesitter/nvim-treesitter', run = ':TSUpdate', @@ -218,11 +206,94 @@ return require('packer').startup(function(use) } end } - use { 'kyazdani42/nvim-tree.lua', + use { + 'nvim-tree/nvim-web-devicons', + } + use { + 'ramojus/mellifluous.nvim', + config = function() + require('mellifluous').setup {} + end + } + use { + 'nvim-tree/nvim-tree.lua', + after = "nvim-web-devicons", + requires = "nvim-tree/nvim-web-devicons", + config = function() require('nvim-tree').setup {} end + } + use { + "hrsh7th/nvim-cmp", requires = { - 'kyazdani42/nvim-web-devicons' + "hrsh7th/cmp-buffer", "hrsh7th/cmp-nvim-lsp", + "L3MON4D3/LuaSnip", "rafamadriz/friendly-snippets", + 'hrsh7th/cmp-nvim-lua', 'octaltree/cmp-look', 'hrsh7th/cmp-path', 'hrsh7th/cmp-calc', + 'f3fora/cmp-spell', 'hrsh7th/cmp-emoji' }, - config = function() require('nvim-tree').setup {} end + config = function() + local cmp = require("cmp") + local luasnip = require('luasnip') + + cmp.setup({ + snippet = { + expand = function(args) + luasnip.lsp_expand(args.body) + end + }, + sources = { + { name = 'path' }, + { name = 'nvim_lsp', keyword_length = 1 }, + { name = 'buffer', keyword_length = 3 }, + { name = 'luasnip', keyword_length = 2 }, + }, + window = { + documentation = cmp.config.window.bordered() + }, + formatting = { + fields = { 'menu', 'abbr', 'kind' }, + format = function(entry, item) + local menu_icon = { + nvim_lsp = 'λ', + luasnip = '⋗', + buffer = 'Ω', + path = '🖫', + } + + item.menu = menu_icon[entry.source.name] + return item + end, + }, + mapping = { + [''] = cmp.mapping.select_prev_item(select_opts), + [''] = cmp.mapping.select_next_item(select_opts), + + [''] = cmp.mapping.select_prev_item(select_opts), + [''] = cmp.mapping.select_next_item(select_opts), + + [''] = cmp.mapping.scroll_docs(-4), + [''] = cmp.mapping.scroll_docs(4), + + [''] = cmp.mapping.abort(), + [''] = cmp.mapping.confirm({ select = true }), + [''] = cmp.mapping.confirm({ select = false }), + + [''] = cmp.mapping(function(fallback) + if luasnip.jumpable(1) then + luasnip.jump(1) + else + fallback() + end + end, { 'i', 's' }), + + [''] = cmp.mapping(function(fallback) + if luasnip.jumpable(-1) then + luasnip.jump(-1) + else + fallback() + end + end, { 'i', 's' }), + } + }) + end } --use { 'jose-elias-alvarez/typescript.nvim', -- config = function() require("typescript") @@ -241,27 +312,44 @@ return require('packer').startup(function(use) return find_pyproject(params.root) or params.root end }) + local black = null_ls.builtins.formatting.black.with({ - extra_args = { "--config", "pyproject.toml" }, cwd = function(params) return find_pyproject(params.root) or params.root end }) + local flake8 = null_ls.builtins.diagnostics.flake8.with({ cwd = function(params) return find_flake8(params.root) or params.root end }) - local eslint_d_format = null_ls.builtins.formatting.eslint_d - local eslint_d_diag = null_ls.builtins.diagnostics.eslint_d - local eslint_d_code = null_ls.builtins.code_actions.eslint_d - local gitsigns = null_ls.builtins.code_actions.gitsigns + + local eslint_format = null_ls.builtins.formatting.eslint_d.with({ + extra_filetypes = { "svelte" }, + }) + + local eslint_diag = null_ls.builtins.diagnostics.eslint_d.with({ + extra_filetypes = { "svelte" }, + }) + + local eslint_code_actions = null_ls.builtins.code_actions.eslint_d.with({ + extra_filetypes = { "svelte" }, + }) + null_ls.setup { on_attach = on_attach, + sources = { + eslint_format, + eslint_diag, + eslint_code_actions, + null_ls.builtins.code_actions.gitsigns, + isort, + black, + flake8 + } } - null_ls.register({ isort, black, flake8, gitsigns }) - null_ls.register({ name = "eslint_d", sources = { eslint_d_code, eslint_d_diag, eslint_d_format } }) end, requires = { "nvim-lua/plenary.nvim" }, } @@ -275,8 +363,8 @@ return require('packer').startup(function(use) } use { 'akinsho/bufferline.nvim', - tag = "v2.*", - requires = 'kyazdani42/nvim-web-devicons', + tag = "*", + requires = 'nvim-tree/nvim-web-devicons', config = function() require("bufferline").setup { options = { @@ -285,11 +373,6 @@ return require('packer').startup(function(use) } end } - use { "EdenEast/nightfox.nvim", - config = function() - require("nightfox").setup {} - end - } use { "nvim-lualine/lualine.nvim", event = "VimEnter", @@ -299,11 +382,12 @@ return require('packer').startup(function(use) sections = { lualine_x = { 'filetype' } } } end, - requires = { 'kyazdani42/nvim-web-devicons', opt = true } + requires = { 'nvim-tree/nvim-web-devicons', opt = true } } use { "startup-nvim/startup.nvim", - requires = { "nvim-telescope/telescope.nvim", "nvim-lua/plenary.nvim" }, + after = "nvim-web-devicons", + requires = { "nvim-tree/nvim-web-devicons", "nvim-telescope/telescope.nvim", "nvim-lua/plenary.nvim" }, config = function() require "startup".setup() end @@ -332,6 +416,7 @@ return require('packer').startup(function(use) require('colorizer').setup { 'css', 'javascript', + 'toml' } end, } @@ -354,6 +439,7 @@ return require('packer').startup(function(use) { 'nvim-lua/plenary.nvim' }, } } + use { 'stevearc/dressing.nvim' } if packer_bootstrap then require('packer').sync() end