This repository has been archived on 2024-03-28. You can view files and clone it, but cannot push or open issues or pull requests.
dotfiles/common/neovim/lua/plugins.lua

172 lines
5.3 KiB
Lua
Raw Normal View History

2022-03-09 11:50:01 -06:00
local packer_install_path = vim.fn.stdpath'data' .. '/site/pack/packer/start/packer.nvim'
if #vim.fn.glob(packer_install_path) == 0 then
vim.fn.system{'git', 'clone', 'https://github.com/wbthomason/packer.nvim', packer_install_path}
vim.api.nvim_command'packadd packer.nvim'
end
2021-06-13 11:02:27 -05:00
2022-03-16 00:53:49 -05:00
local has_words_before = function()
local line, col = unpack(vim.api.nvim_win_get_cursor(0))
return col ~= 0 and vim.api.nvim_buf_get_lines(0, line - 1, line, true)[1]:sub(col, col):match("%s") == nil
end
2022-03-09 11:50:01 -06:00
local packer = require'packer'
packer.startup(function()
local plugins = {
'wbthomason/packer.nvim', -- neovim plugin manager
2021-11-09 10:26:05 -06:00
2022-03-09 11:50:01 -06:00
'vim-scripts/LargeFile', -- degrade gracefully with large files
'tpope/vim-repeat', -- enable repeat for plugin maps
'tpope/vim-sleuth', -- use whatever whitespace is in the file
'editorconfig/editorconfig-vim', -- handle .editorconfig files
'christoomey/vim-tmux-navigator', -- navigate vim splits and tmux panes fluidly
'machakann/vim-sandwich', -- edit surrounding characters
'michaeljsmith/vim-indent-object', -- adds indent-level text objects
'wellle/targets.vim', -- add many other text objects
'bkad/CamelCaseMotion', -- invaluable motions for properly operating on various casings
{
-- session management
'olimorris/persisted.nvim',
config = function()
2022-03-09 13:37:25 -06:00
local should_autoload = #vim.v.argv == 1
2022-03-09 11:50:01 -06:00
require'persisted'.setup{
2022-03-09 13:37:25 -06:00
autoload = should_autoload,
autosave = should_autoload,
2022-03-09 11:50:01 -06:00
}
end
},
{
-- toggle comments
'terrortylor/nvim-comment',
config = function()
require'nvim_comment'.setup()
end
},
{
-- fuzzy finder
'nvim-telescope/telescope.nvim',
requires = {
'nvim-lua/popup.nvim',
'nvim-lua/plenary.nvim',
}
},
2022-03-16 00:53:49 -05:00
{
'nvim-telescope/telescope-fzf-native.nvim',
run = 'make',
},
{
'tzachar/cmp-fuzzy-path',
requires = {'hrsh7th/nvim-cmp', 'tzachar/fuzzy.nvim'},
},
2022-03-09 11:50:01 -06:00
-- TODO: add keymap <leader>ig for toggling these
'lukas-reineke/indent-blankline.nvim', -- indentation guide lines
2022-03-16 00:53:49 -05:00
'L3MON4D3/LuaSnip',
2022-03-09 12:04:12 -06:00
'neovim/nvim-lspconfig', -- language server configuration helper
'williamboman/nvim-lsp-installer', -- plugin containing installation commands for many language servers
'hrsh7th/cmp-nvim-lsp', -- add lsp to completion engine
'hrsh7th/cmp-buffer', -- add buffer information to completion engine
'hrsh7th/cmp-path', -- add filesystem information to complete enging
'hrsh7th/cmp-cmdline', -- add completion for vim commands
2022-03-16 00:53:49 -05:00
'saadparwaiz1/cmp_luasnip',
2022-03-09 11:50:01 -06:00
{
2022-03-09 12:04:12 -06:00
-- completion engine
2022-03-09 11:50:01 -06:00
'hrsh7th/nvim-cmp',
config = function()
local cmp = require'cmp'
2022-03-16 00:53:49 -05:00
local luasnip = require'luasnip'
2022-03-09 11:50:01 -06:00
cmp.setup{
2022-03-16 00:53:49 -05:00
snippet = {
expand = function(args)
luasnip.lsp_expand(args.body)
end,
},
2022-03-09 11:50:01 -06:00
mapping = {
['<C-b>'] = cmp.mapping(cmp.mapping.scroll_docs(-4), { 'i', 'c' }),
['<C-f>'] = cmp.mapping(cmp.mapping.scroll_docs(4), { 'i', 'c' }),
['<C-Space>'] = cmp.mapping(cmp.mapping.complete(), { 'i', 'c' }),
['<C-y>'] = cmp.config.disable, -- Specify `cmp.config.disable` if you want to remove the default `<C-y>` mapping.
['<C-e>'] = cmp.mapping{
i = cmp.mapping.abort(),
c = cmp.mapping.close(),
},
['<CR>'] = cmp.mapping.confirm{select = true}, -- Accept currently selected item. Set `select` to `false` to only confirm explicitly selected items.
2022-03-16 00:53:49 -05:00
["<Tab>"] = cmp.mapping(function(fallback)
if cmp.visible() then
cmp.select_next_item()
elseif luasnip.expand_or_jumpable() then
luasnip.expand_or_jump()
elseif has_words_before() then
cmp.complete()
else
fallback()
end
end, { "i", "s" }),
["<S-Tab>"] = cmp.mapping(function(fallback)
if cmp.visible() then
cmp.select_prev_item()
elseif luasnip.jumpable(-1) then
luasnip.jump(-1)
else
fallback()
end
end, { "i", "s" }),
2022-03-09 11:50:01 -06:00
},
2022-03-16 00:53:49 -05:00
sources = cmp.config.sources({
2022-03-09 11:50:01 -06:00
{ name = 'nvim_lsp' },
2022-03-16 00:53:49 -05:00
{ name = 'luasnip' },
}, {
2022-03-09 11:50:01 -06:00
{ name = 'buffer' },
2022-03-16 00:53:49 -05:00
{ name = 'path' },
{ name = 'fuzzy_path' },
}),
2022-03-09 11:50:01 -06:00
}
cmp.setup.cmdline('/', {
sources = {
{name = 'buffer'},
2022-03-16 00:53:49 -05:00
{name = 'fuzzy_path'},
2022-03-09 11:50:01 -06:00
}
})
2021-06-13 11:02:27 -05:00
2022-03-09 11:50:01 -06:00
cmp.setup.cmdline(':', {
sources = cmp.config.sources({
{name = 'path'}
}, {
{name = 'cmdline'}
})
})
end,
},
-- TODO: automate this installation process of :COQdeps<cr>:COQnow<cr>
-- {'ms-jpq/coq_nvim', branch = 'coq'},
-- {'ms-jpq/coq.thirdparty', branch = '3p'},
{
2022-03-09 12:04:12 -06:00
-- syntax highlighting and indentation
2022-03-09 11:50:01 -06:00
'nvim-treesitter/nvim-treesitter',
run = ':TSUpdate',
config = function()
require'nvim-treesitter.configs'.setup {
ensure_installed = "maintained",
sync_install = false,
ignore_install = {},
indent = {
enable = true,
},
highlight = {
enable = true,
disable = {},
-- Setting this to true will run `:h syntax` and tree-sitter at the same time.
-- Set this to `true` if you depend on 'syntax' being enabled (like for indentation).
-- Using this option may slow down your editor, and you may see some duplicate highlights.
-- Instead of true it can also be a list of languages
-- additional_vim_regex_highlighting = false,
},
}
end
},
}
for _,plugin in pairs(plugins) do packer.use(plugin) end
end)