vim.cmd [[ packadd packer.nvim ]] return require('packer').startup(function() use 'wbthomason/packer.nvim' -- plugin manager (can manage itself) use 'junegunn/vim-easy-align' -- align use 'AndrewRadev/sideways.vim' -- Move arguments sideways use 'FooSoft/vim-argwrap' -- Put arguments on multiple lines use 'tpope/vim-eunuch' -- basic commands on current file (Rename/Remove) use 'romainl/vim-cool' -- only highlight search matches when searching -- nvim lsp configuration use { 'neovim/nvim-lspconfig', ft = {'rust', 'python', 'c', 'cpp', 'lua'}, config = function() local on_attach = function(_, bufnr) local opts = { noremap = true, silent = true } local map = function(...) vim.api.nvim_buf_set_keymap(bufnr, ...) end map('n', '[', 'lua vim.lsp.buf.declaration()', opts) map('n', ']', 'lua vim.lsp.buf.definition()', opts) map('n', 'K', 'lua vim.lsp.buf.hover()', opts) map('n', 'gk', 'lua vim.lsp.buf.signature_help()', opts) map('n', 'gd', 'lua vim.lsp.buf.definition()', opts) map('n', '[d', 'lua vim.diagnostic.goto_prev()', opts) map('n', ']d', 'lua vim.diagnostic.goto_next()', opts) map('n', 'q', 'Telescope diagnostics', opts) map('n', 'rn', 'lua vim.lsp.buf.rename()', opts) end local lspconfig = require('lspconfig') lspconfig.clangd.setup { on_attach = on_attach } lspconfig.rust_analyzer.setup { on_attach = on_attach } -- need python-lsp-server and pyls-flake8 lspconfig.pylsp.setup { on_attach = on_attach } -- package lua-language-server on ArchLinux lspconfig.sumneko_lua.setup { on_attach = on_attach , settings = { Lua = { runtime = { -- Tell the language server which version of Lua you're using (most likely LuaJIT in the case of Neovim) version = 'LuaJIT', -- Setup your lua path path = vim.split(package.path, ';'), }, diagnostics = { -- Get the language server to recognize the `vim` global globals = {'vim'}, }, workspace = { -- Make the server aware of Neovim runtime files library = { [vim.fn.expand('$VIMRUNTIME/lua')] = true, [vim.fn.expand('$VIMRUNTIME/lua/vim/lsp')] = true, }, }, } }, } vim.diagnostic.config { signs = false, update_in_insert = false, } end, } -- rust lsp (needs rust-analyser) use { 'simrat39/rust-tools.nvim', requires = {'neovim/nvim-lspconfig'}, ft = {'rust'}, config = function() local on_attach = function(_, bufnr) local opts = { noremap = true, silent = true } local map = function(...) vim.api.nvim_buf_set_keymap(bufnr, ...) end map('n', '[', 'lua vim.lsp.buf.declaration()', opts) map('n', ']', 'lua vim.lsp.buf.definition()', opts) map('n', 'K', 'lua vim.lsp.buf.hover()', opts) map('n', 'gk', 'lua vim.lsp.buf.signature_help()', opts) map('n', 'gd', 'lua vim.lsp.buf.definition()', opts) map('n', '[d', 'lua vim.diagnostic.goto_prev()', opts) map('n', ']d', 'lua vim.diagnostic.goto_next()', opts) map('n', 'q', 'Telescope diagnostics', opts) map('n', 'rn', 'lua vim.lsp.buf.rename()', opts) end require('rust-tools').setup { server = { on_attach = on_attach, } } vim.diagnostic.config { signs = false, update_in_insert = false, } end } -- comment text objects use { 'numToStr/Comment.nvim', config = function() require('Comment').setup() end } -- color scheme use { 'ellisonleao/gruvbox.nvim', requires = {'rktjmp/lush.nvim'}, config = function() vim.opt.termguicolors = true vim.opt.background = "dark" vim.cmd [[ colorscheme gruvbox ]] vim.g.gruvbox_italic = 1 vim.g.gruvbox_bold = 1 vim.g.gruvbox_termcolors = 256 vim.g.gruvbox_contrast_dark = 'medium' vim.g.gruvbox_contrast_light = 'hard' vim.g.gruvbox_invert_selection = 0 end } -- status line use { 'nvim-lualine/lualine.nvim', requires = {'kyazdani42/nvim-web-devicons', opt = true}, config = function() require('lualine').setup { options = { theme = 'gruvbox', icons_enabled = true, section_separators = '', component_separators = '' } } end } -- better syntax highlight for everything use { 'nvim-treesitter/nvim-treesitter', run = ':TSUpdate', config = function() require('nvim-treesitter.configs').setup { highlight = { enable = true }, -- indent = { enable = true }, -- TODO: could be neat -- incremental_selection = { -- enable = true, -- keymaps = { -- init_selection = "gnn", -- node_incremental = "grn", -- scope_incremental = "grc", -- node_decremental = "grm", -- } -- } } vim.cmd [[ highlight link pythonTSKeywordOperator Keyword ]] end } -- fuzzy finder (replace fzf.vim or ctrlp.vim) use { 'nvim-telescope/telescope.nvim', requires = { {'nvim-lua/plenary.nvim'}, {'kyazdani42/nvim-web-devicons', opt = true}, }, config = function() local actions = require('telescope.actions') require('telescope').setup { defaults = { mappings = { i = { [''] = actions.move_selection_next, [''] = actions.move_selection_previous, [''] = actions.close, ['kj'] = actions.close, } }, } } local map = vim.api.nvim_set_keymap map('n', '', 'Telescope git_files', {}) map('n', 'H', 'Telescope help_tags', {}) map('n', ';', 'Telescope commands', {}) end } -- todos,fix,etc.. highlight and list use { 'folke/todo-comments.nvim', requires = 'nvim-lua/plenary.nvim', config = function() require('todo-comments').setup { signs = false } end } -- remote files and lsp use { 'chipsenkbeil/distant.nvim', config = function() require('distant').setup { ['*'] = require('distant.settings').chip_default() } end, run = ':DistantInstall' } -- jupyter kernel in nvim (with images, needs ueberzug) use { 'dccsillag/magma-nvim', -- ft = { 'python' }, -- doesn't work run = ':UpdateRemotePlugins', config = function() local map = vim.api.nvim_set_keymap map('n', 'm', "nvim_exec('MagmaEvaluateOperator', v:true)", { expr = true}) map('n', 'mm', 'MagmaEvaluateLine', {}) map('x', 'm', 'MagmaEvaluateVisual', {}) map('n', 'mc', 'MagmaReevaluateCell', {}) map('n', 'md', 'MagmaDelete', {}) map('n', 'mo', 'MagmaShowOutput', {}) end } use { 'nvim-treesitter/playground', opt = true, cmd = { 'TSPlaygroundToggle' } } -- use { '~/git/argwrap.nvim', opt = true } end)