local ensure_packer = function() local fn = vim.fn local install_path = fn.stdpath('data') .. '/site/pack/packer/start/packer.nvim' if fn.empty(fn.glob(install_path)) > 0 then fn.system({ 'git', 'clone', '--depth', '1', 'https://github.com/wbthomason/packer.nvim', install_path }) vim.cmd [[packadd packer.nvim]] return true end return false end vim.api.nvim_create_autocmd('BufWritePost', { pattern = require('utils').config_home() .. '/nvim/lua/plugins.lua', group = vim.api.nvim_create_augroup('packer', {}), command = 'source | PackerCompile' }) local packer_bootstrap = ensure_packer() require('packer').init({ compile_path = vim.fn.stdpath('data') .. '/site/pack/loader/start/packer/plugin/packer.lua', }) return require('packer').startup(function(use) use 'wbthomason/packer.nvim' use { 'rose-pine/neovim', as = 'rose-pine', config = function() vim.cmd('colorscheme rose-pine') end } use { "SmiteshP/nvim-navic", requires = "neovim/nvim-lspconfig", } use { "ibhagwan/fzf-lua", config = function() local opts = {noremap = true, silent = true} vim.keymap.set('n', 'f', require('fzf-lua').files, opts) vim.keymap.set('n', 'b', require('fzf-lua').buffers, opts) vim.keymap.set('n', 'Q', require('fzf-lua').quickfix, opts) vim.keymap.set('n', 't', require('fzf-lua').tabs, opts) end } use { 'neovim/nvim-lspconfig', --ft = vim.g.lsp_langs, config = function() local lspconfig = require('lspconfig') local capabilities = require('cmp_nvim_lsp').default_capabilities() local cache = os.getenv("XDG_RUNTIME_DIR") or "/tmp/" local on_attach = function(client, bufnr) local bind_opts = { silent = true, noremap = true, buffer = true } require('nvim-navic').attach(client, bufnr) vim.keymap.set('n', 'gD', vim.lsp.buf.declaration, bind_opts) vim.keymap.set('n', 'gd', vim.lsp.buf.definition, bind_opts) vim.keymap.set('n', 'K', vim.lsp.buf.hover, bind_opts) vim.keymap.set('n', 'gi', vim.lsp.buf.implementation, bind_opts) vim.keymap.set('n', 'k', vim.lsp.buf.signature_help, bind_opts) vim.keymap.set('n', 'wa', vim.lsp.buf.add_workspace_folder, bind_opts) vim.keymap.set('n', 'wr', vim.lsp.buf.remove_workspace_folder, bind_opts) vim.keymap.set('n', 'wl', function() print(vim.inspect(vim.lsp.buf.list_workspace_folders())) end, bind_opts) vim.keymap.set('n', 'D', vim.lsp.buf.type_definition, bind_opts) vim.keymap.set('n', 'rn', vim.lsp.buf.rename, bind_opts) vim.keymap.set('n', 'ca', vim.lsp.buf.code_action, bind_opts) vim.keymap.set('n', 'gr', vim.lsp.buf.references, bind_opts) --vim.keymap.set('n', 'f', vim.lsp.buf.formatting, bind_opts) vim.keymap.set('n', 'e', vim.diagnostic.open_float, bind_opts) vim.keymap.set('n', 'E', vim.diagnostic.setqflist, bind_opts) end lspconfig.ccls.setup { on_attach = on_attach, capabilities = capabilities, init_options = { cache = { directory = cache .. "/ccls" } } } lspconfig.phpactor.setup { on_attach = on_attach, capabilities = capabilities } lspconfig.bashls.setup { on_attach = on_attach, capabilities = capabilities } lspconfig.rust_analyzer.setup { on_attach = on_attach, capabilities = capabilities } lspconfig.pylsp.setup { on_attach = on_attach, capabilities = capabilities } lspconfig.tsserver.setup { on_attach = on_attach, capabilities = capabilities } lspconfig.lua_ls.setup { on_attach = on_attach, capabilities = capabilities, settings = { Lua = { runtime = { version = 'LuaJIT', }, diagnostics = { globals = { 'vim', 'packer_plugins' }, }, workspace = { library = vim.api.nvim_get_runtime_file("", true), }, telemetry = { enable = false, } } } } end } use { 'nvim-treesitter/nvim-treesitter', run = ':TSUpdate', after = 'nvim-lspconfig', config = function() require 'nvim-treesitter.configs'.setup { ensure_installed = vim.g.ts_langs, sync_install = false, auto_install = true, highlight = { enable = true, additional_vim_regex_highlighting = false, } } end } use { 'L3MON4D3/LuaSnip', config = function() require('luasnip.loaders.from_vscode').lazy_load({ paths = "~/.config/nvim/snippets" }) end } use { 'hrsh7th/nvim-cmp', requires = { 'hrsh7th/cmp-nvim-lsp', 'L3MON4D3/LuaSnip', 'saadparwaiz1/cmp_luasnip', 'hrsh7th/cmp-nvim-lsp-signature-help', 'hrsh7th/cmp-nvim-lsp-document-symbol', }, --ft = vim.g.lsp_langs, config = function() local cmp = require('cmp') local luasnip = require('luasnip') cmp.setup({ snippet = { expand = function(args) require('luasnip').lsp_expand(args.body) end, }, mapping = cmp.mapping.preset.insert({ [''] = cmp.mapping.scroll_docs(-4), [''] = cmp.mapping.scroll_docs(4), [''] = cmp.mapping.complete(), [''] = cmp.mapping.abort(), [''] = cmp.mapping.confirm({ select = false }), [''] = cmp.mapping(function(fallback) if cmp.visible() then cmp.select_next_item() elseif luasnip.expand_or_jumpable() then luasnip.expand_or_jump() else fallback() end end, { "i", "s" }), [''] = cmp.mapping(function(fallback) if cmp.visible() then cmp.select_prev_item() elseif luasnip.locally_jumpable(-1) then luasnip.jump(-1) else fallback() end end, { "i", "s" }), [''] = cmp.mapping(function() if luasnip.choice_active() then luasnip.change_choice(1) end end), }), sources = cmp.config.sources({ { name = 'nvim_lsp' }, { name = 'luasnip' }, { name = 'nvim_lsp_signature_help' } }), formatting = { format = function(_, vim_item) vim_item.abbr = string.sub(vim_item.abbr, 1, 80) return vim_item end } }) cmp.setup.cmdline({ '/', '?' }, { sources = cmp.config.sources({ { name = 'nvim_lsp_document_symbol' } }) }) end } if packer_bootstrap then require('packer').sync() end end)