dotfiles/dotfiles/nvim/init.lua
2022-07-29 06:54:27 -04:00

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)