157 lines
3.4 KiB
Lua
157 lines
3.4 KiB
Lua
require('packer').startup(function(use)
|
|
use 'wbthomason/packer.nvim'
|
|
use 'williamboman/mason.nvim'
|
|
use 'williamboman/mason-lspconfig.nvim'
|
|
use 'neovim/nvim-lspconfig'
|
|
|
|
use 'nvim-lualine/lualine.nvim'
|
|
use 'morhetz/gruvbox'
|
|
use 'vim-test/vim-test'
|
|
use 'lewis6991/gitsigns.nvim'
|
|
use 'windwp/nvim-autopairs'
|
|
|
|
-- nvim-cmp plugins
|
|
use 'hrsh7th/nvim-cmp'
|
|
use 'hrsh7th/cmp-buffer'
|
|
use 'hrsh7th/cmp-path'
|
|
use 'hrsh7th/cmp-nvim-lua'
|
|
use 'hrsh7th/cmp-nvim-lsp'
|
|
use 'L3MON4D3/LuaSnip'
|
|
use 'saadparwaiz1/cmp_luasnip'
|
|
|
|
use {
|
|
'nvim-telescope/telescope.nvim',
|
|
requires = {
|
|
'nvim-lua/plenary.nvim',
|
|
'kyazdani42/nvim-web-devicons'
|
|
}
|
|
}
|
|
end)
|
|
|
|
-- Automatic LSP Setup
|
|
local lspconfig = require('lspconfig')
|
|
require('mason').setup()
|
|
require('mason-lspconfig').setup_handlers({
|
|
function(server_name)
|
|
lspconfig[server_name].setup {}
|
|
end
|
|
})
|
|
|
|
-- Format on save
|
|
vim.api.nvim_create_autocmd(
|
|
"BufWritePre",
|
|
{
|
|
pattern = { "<buffer>" },
|
|
callback = vim.lsp.buf.formatting_sync,
|
|
}
|
|
)
|
|
|
|
-- Autocomplete Setup
|
|
local cmp = require('cmp')
|
|
cmp.setup {
|
|
mapping = {
|
|
["<CR>"] = cmp.mapping.confirm {
|
|
behavior = cmp.ConfirmBehavior.Insert,
|
|
select = true,
|
|
},
|
|
|
|
["<Up>"] = function(fallback)
|
|
if cmp.visible() then
|
|
cmp.select_prev_item()
|
|
else
|
|
fallback()
|
|
end
|
|
end,
|
|
|
|
["<Down>"] = function(fallback)
|
|
if cmp.visible() then
|
|
cmp.select_next_item()
|
|
else
|
|
fallback()
|
|
end
|
|
end,
|
|
},
|
|
|
|
sources = {
|
|
{ name = "nvim_lua" },
|
|
{ name = "nvim_lsp" },
|
|
{ name = "luasnip" },
|
|
{ name = "path" },
|
|
{ name = "buffer" },
|
|
},
|
|
|
|
snippet = {
|
|
expand = function(args)
|
|
require('luasnip').lsp_expand(args.body)
|
|
end
|
|
},
|
|
}
|
|
|
|
-- Misc Plugin Setup
|
|
require('lualine').setup()
|
|
require('nvim-autopairs').setup()
|
|
require('gitsigns').setup()
|
|
|
|
-- General Options
|
|
vim.cmd [[colorscheme gruvbox]]
|
|
|
|
vim.o.number = true
|
|
vim.o.relativenumber = true
|
|
vim.o.splitright = true
|
|
vim.o.splitbelow = true
|
|
vim.o.scrolloff = 10
|
|
|
|
-- Tab Settings
|
|
vim.o.tabstop = 4
|
|
vim.o.softtabstop = 0
|
|
vim.o.expandtab = true
|
|
vim.o.shiftwidth = 4
|
|
vim.o.smarttab = true
|
|
|
|
vim.api.nvim_create_autocmd(
|
|
"FileType",
|
|
{
|
|
pattern = {
|
|
"html",
|
|
"css",
|
|
"javascript",
|
|
"typescript",
|
|
"vue",
|
|
"lua",
|
|
},
|
|
command = "setlocal shiftwidth=2",
|
|
}
|
|
)
|
|
|
|
vim.api.nvim_create_autocmd(
|
|
"FileType",
|
|
{
|
|
pattern = {
|
|
"go",
|
|
},
|
|
command = "setlocal noexpandtab"
|
|
}
|
|
)
|
|
|
|
-- General Keymaps
|
|
vim.keymap.set('t', '<ESC>', '<C-\\><C-n>')
|
|
vim.keymap.set('n', '<leader>t', ':TestNearest<CR>')
|
|
vim.keymap.set('n', '<leader>T', ':TestFile<CR>')
|
|
|
|
local telescope = require('telescope.builtin')
|
|
vim.keymap.set('n', '<leader>ff', telescope.find_files)
|
|
vim.keymap.set('n', '<leader>fg', telescope.live_grep)
|
|
vim.keymap.set('n', '<leader>fh', telescope.help_tags)
|
|
|
|
-- LSP Keymaps
|
|
vim.keymap.set('n', '<leader>h', vim.lsp.buf.hover)
|
|
vim.keymap.set('n', '<leader>r', vim.lsp.buf.rename)
|
|
vim.keymap.set('n', '<leader><space>', vim.lsp.buf.code_action)
|
|
vim.keymap.set('n', 'gD', vim.lsp.buf.declaration)
|
|
vim.keymap.set('n', 'gd', vim.lsp.buf.definition)
|
|
vim.keymap.set('n', 'gt', vim.lsp.buf.type_definition)
|
|
vim.keymap.set('n', 'gi', vim.lsp.buf.implementation)
|
|
vim.keymap.set('n', 'gr', vim.lsp.buf.references)
|
|
|
|
vim.keymap.set('n', '[d', vim.diagnostic.goto_prev)
|
|
vim.keymap.set('n', ']d', vim.diagnostic.goto_next)
|