dot/nvim/init.lua

156 lines
4.9 KiB
Lua

-- nvim optimizations
vim.loader.enable()
-- bootstrap lazy.nvim
local lazypath = vim.fn.stdpath("data") .. "/lazy/lazy.nvim"
if not vim.loop.fs_stat(lazypath) then
vim.fn.system({ "git", "clone", "--filter=blob:none", "https://github.com/folke/lazy.nvim.git", lazypath })
end
vim.opt.rtp:prepend(lazypath)
require("lazy").setup({
{ "nvim-lualine/lualine.nvim" },
{ "nvim-telescope/telescope.nvim",lazy = false, dependencies = "nvim-lua/plenary.nvim" },
{ "neovim/nvim-lspconfig" },
{ "williamboman/mason.nvim", config = true },
{ "mason-org/mason-lspconfig.nvim", opts = {}, dependencies = {"mason-org/mason.nvim"}},
{ "nvim-treesitter/nvim-treesitter", build = ":TSUpdate" },
{ "hrsh7th/nvim-cmp", dependencies = {
"hrsh7th/cmp-nvim-lsp",
"hrsh7th/cmp-buffer",
"hrsh7th/cmp-path",
"L3MON4D3/LuaSnip",
"saadparwaiz1/cmp_luasnip",
}
},
{ "akinsho/toggleterm.nvim", version = "*", config = true },
{ "sindrets/diffview.nvim", dependencies = "nvim-lua/plenary.nvim" },
{ "airblade/vim-gitgutter" },
{ 'windwp/nvim-autopairs', event = "InsertEnter", config = true }
})
-- neovim configuration
vim.opt.termguicolors = true
vim.o.encoding = 'utf-8'
vim.o.fileencoding = 'utf-8'
vim.o.tabstop = 2
vim.o.shiftwidth = 2
vim.o.expandtab = true
vim.o.smartindent = true
vim.o.hidden = false
vim.o.number = true
vim.o.relativenumber = true
vim.o.cursorline = true
vim.o.clipboard = 'unnamedplus'
vim.o.wildmenu = true
vim.o.laststatus = 0
vim.o.cmdheight = 0
vim.o.undofile = true
vim.o.hlsearch = true
vim.o.incsearch = true
vim.o.ignorecase = true
vim.o.smartcase = true
vim.o.errorbells = false
vim.g.mapleader = ' '
vim.opt.mouse = nil
vim.o.autoread = true
vim.o.swapfile = off
vim.o.wildmode = longest
-- Telescope Keybinds
vim.keymap.set('n', '<leader><leader>', require('telescope.builtin').find_files)
vim.keymap.set('n', '<leader>fg', require('telescope.builtin').live_grep)
vim.keymap.set('n', '<leader>fb', require('telescope.builtin').buffers)
vim.keymap.set('n', '<leader>fh', require('telescope.builtin').help_tags)
vim.keymap.set('n', '<leader>fr', require('telescope.builtin').lsp_references)
-- Error Keymaps
vim.keymap.set('n', '<leader>tr', require('telescope.builtin').diagnostics)
vim.keymap.set('n', '<leader>tn', vim.diagnostic.goto_next);
vim.keymap.set('n', '<leader>tf', vim.diagnostic.open_float);
-- transparent background
vim.api.nvim_set_hl(0, 'Normal', { bg = 'none' })
vim.api.nvim_set_hl(0, 'NormalFloat', { bg = 'none' })
vim.api.nvim_set_hl(0, 'FloatBorder', { bg = 'none' })
vim.api.nvim_set_hl(0, 'Pmenu', { bg = 'none' })
-- Format go files
vim.keymap.set('n', '<leader>gf', function() require('go.format').goimport() end)
vim.api.nvim_set_keymap('n', '<leader>c', ':bd<CR>', { noremap = true })
vim.api.nvim_set_keymap('n', '<leader>z', ':bp<CR>', { noremap = true })
vim.api.nvim_set_keymap('n', '<leader>x', ':bn<CR>', { noremap = true })
vim.api.nvim_set_keymap('n', '<leader>dr', ':noh<CR>', { noremap = true })
vim.api.nvim_set_keymap('n', '<leader>do', ':DiffviewOpen<CR>', { noremap = true, silent = true })
vim.api.nvim_set_keymap('n', '<leader>dc', ':DiffviewClose<CR>', { noremap = true, silent = true })
vim.api.nvim_set_keymap('n', '<leader>dh', ':DiffviewFileHistory<CR>', { noremap = true, silent = true })
local capabilities = require('cmp_nvim_lsp').default_capabilities()
local lspconfig = require("lspconfig")
local cmp = require'cmp'
cmp.setup({
snippet = { expand = function(args) require('luasnip').lsp_expand(args.body) end },
mapping = cmp.mapping.preset.insert({
['<A-Space>'] = cmp.mapping.complete(),
['<Tab>'] = cmp.mapping.confirm({ select = true }),
['<Down>'] = cmp.mapping.select_next_item(),
['<Up>'] = cmp.mapping.select_prev_item(),
}),
sources = cmp.config.sources({
{ name = 'nvim_lsp' },
{ name = 'luasnip' },
}, {
{ name = 'buffer' },
{ name = 'path' },
})
})
require("nvim-treesitter.configs").setup {
highlight = { enable = true, additional_vim_regex_highlighting = false },
}
require("mason").setup()
require("mason-lspconfig").setup({
automatic_installation = true,
})
require('lualine').setup {
options = {
theme = 'tomorrow_night',
section_separators = '',
component_separators = '',
icons_enabled = true,
globalstatus = true,
always_divide_middle = false,
always_show_tabline = false,
draw_empty = false,
color = nil,
},
sections = {
lualine_a = {'mode'},
lualine_b = {'branch','diff','diagnostics'},
lualine_c = {
{
'filename',
file_status = true,
newfile_status = true,
path = 2
}
},
lualine_x = {''},
lualine_y = {
{
'filetype', colored = false, icon_only = true
}
},
lualine_z = {'location'}
},
}