-- install packer if not already there local install_path = vim.fn.stdpath 'data' .. '/site/pack/packer/start/packer.nvim' if vim.fn.empty(vim.fn.glob(install_path)) > 0 then is_bootstrap = true vim.fn.system{'git', 'clone', '--depth', '1', 'https://github.com/wbthomason/packer.nvim', install_path } vim.cmd [[packadd packer.nvim]] end -- Install Plugins require('packer').startup(function(use) use 'wbthomason/packer.nvim' use 'neovim/nvim-lspconfig' use 'nvim-treesitter/nvim-treesitter' use { 'hrsh7th/nvim-cmp', requires = { 'hrsh7th/cmp-nvim-lsp', 'hrsh7th/cmp-buffer', 'hrsh7th/cmp-cmdline', 'hrsh7th/cmp-path', 'hrsh7th/cmp-nvim-lua', 'onsails/lspkind.nvim' } } if is_bootstrap then require('packer').sync() end end) -- Don't run additional config if installing packer if is_bootstrap then print '==================================' print ' Plugins are being installed' print ' Wait until Packer completes,' print ' then restart nvim' print '==================================' return end -- Some basic settings vim.wo.number = true vim.wo.relativenumber = true vim.o.pumheight = 20 -- Additional keybinds if lsp running local on_attach = function(client, bufnr) local bufopts = { noremap=true, silent=true, buffer=bufnr } vim.keymap.set('n', 'gD', vim.lsp.buf.declaration, bufopts) vim.keymap.set('n', 'gd', vim.lsp.buf.definition, bufopts) end local lsp_flags = { } -- lsp configs require('lspconfig')['tsserver'].setup{ on_attach = on_attach, flags = lsp_flags } require('lspconfig')['lua_ls'].setup{ on_attach = on_attach, flags = lsp_flags } require('lspconfig')['gopls'].setup{ on_attach = on_attach, flags = lsp_flags } -- TreeSitter Config require('nvim-treesitter.configs').setup{ ensure_installed = {'go', 'vim', 'typescript', 'help', 'lua', 'javascript', 'python'}, highlight = { enable = true } } -- autocompletion local cmp = require 'cmp' local lspkind = require 'lspkind' cmp.setup { sources = { { name = 'nvim_lsp' }, { name = 'buffer' }, { name = 'cmdline' }, { name = 'path' }, { name = 'nvim-lua' } }, formatting = { format = lspkind.cmp_format() }, mapping = cmp.mapping.preset.insert { [''] = cmp.mapping(function(fallback) if cmp.visible() then cmp.select_next_item() else fallback() end end, {'i', 's'}) } }