208 lines
6.6 KiB
Lua
208 lines
6.6 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",
|
|
config = function()
|
|
require("nvim-treesitter.configs").setup({
|
|
highlight = { enable = true },
|
|
indent = { enable = true },
|
|
})
|
|
end,},
|
|
{ "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" },
|
|
{ "sphamba/smear-cursor.nvim",
|
|
opts = {
|
|
smear_between_buffers = true,
|
|
smear_between_neighbor_lines = true,
|
|
scroll_buffer_space = true,
|
|
legacy_computing_symbols_support = false,
|
|
smear_insert_mode = true,
|
|
},
|
|
},
|
|
{ 'windwp/nvim-autopairs', event = "InsertEnter", config = true },
|
|
{
|
|
"FabijanZulj/blame.nvim",
|
|
lazy = false,
|
|
config = function()
|
|
require('blame').setup {}
|
|
end,
|
|
opts = {
|
|
blame_options = { '-w' },
|
|
},
|
|
},
|
|
{
|
|
"rebelot/kanagawa.nvim",
|
|
config = function()
|
|
require("kanagawa").setup({
|
|
commentStyle = { italic = true },
|
|
keywordStyle = { italic = true },
|
|
statementStyle = { bold = true },
|
|
theme = "wave",
|
|
background = { dark = "wave", light = "lotus" },
|
|
})
|
|
vim.cmd("colorscheme kanagawa")
|
|
end,
|
|
},
|
|
{
|
|
"scalameta/nvim-metals",
|
|
ft = { "scala", "sbt", "java" },
|
|
opts = function()
|
|
local metals_config = require("metals").bare_config()
|
|
metals_config.on_attach = function(client, bufnr)
|
|
-- your on_attach function
|
|
end
|
|
|
|
return metals_config
|
|
end,
|
|
config = function(self, metals_config)
|
|
local nvim_metals_group = vim.api.nvim_create_augroup("nvim-metals", { clear = true })
|
|
vim.api.nvim_create_autocmd("FileType", {
|
|
pattern = self.ft,
|
|
callback = function()
|
|
require("metals").initialize_or_attach(metals_config)
|
|
end,
|
|
group = nvim_metals_group,
|
|
})
|
|
end
|
|
}
|
|
})
|
|
|
|
-- neovim configuration
|
|
|
|
vim.o.termguicolors = true
|
|
vim.o.encoding = 'utf-8'
|
|
vim.o.fileencoding = 'utf-8'
|
|
vim.o.tabstop = 4
|
|
vim.o.softtabstop = 4
|
|
vim.o.shiftwidth = 4
|
|
vim.o.expandtab = true
|
|
vim.o.smartindent = true
|
|
vim.o.number = true
|
|
vim.o.cursorline = false
|
|
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.o.mouse = nil
|
|
vim.o.autoread = true
|
|
vim.o.swapfile = true
|
|
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)
|
|
vim.keymap.set('n', '<leader>frr', require('telescope.builtin').diagnostics)
|
|
|
|
-- Error Keymaps
|
|
vim.keymap.set('n', '<leader>nr', vim.diagnostic.goto_next);
|
|
vim.keymap.set('n', '<leader>or', 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)
|
|
|
|
-- Diffview
|
|
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("mason").setup()
|
|
require("mason-lspconfig").setup({
|
|
automatic_installation = true,
|
|
})
|
|
|
|
|
|
require('lualine').setup {
|
|
options = {
|
|
theme = 'iceberg_dark',
|
|
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 = {'lsp_status'},
|
|
lualine_y = {
|
|
{
|
|
'filetype', colored = false, icon_only = true
|
|
}
|
|
},
|
|
lualine_z = {'location'}
|
|
},
|
|
}
|
|
|