-- 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" }, { 'windwp/nvim-autopairs', event = "InsertEnter", config = true }, { "wnkz/monoglow.nvim", config = function() vim.cmd'colorscheme monoglow' 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.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.o.mouse = nil vim.o.autoread = true vim.o.swapfile = false vim.o.wildmode = longest -- Telescope Keybinds vim.keymap.set('n', '', require('telescope.builtin').find_files) vim.keymap.set('n', 'fg', require('telescope.builtin').live_grep) vim.keymap.set('n', 'fb', require('telescope.builtin').buffers) vim.keymap.set('n', 'fh', require('telescope.builtin').help_tags) vim.keymap.set('n', 'fr', require('telescope.builtin').lsp_references) vim.keymap.set('n', 'frr', require('telescope.builtin').diagnostics) -- Error Keymaps vim.keymap.set('n', 'nr', vim.diagnostic.goto_next); vim.keymap.set('n', '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', 'gf', function() require('go.format').goimport() end) -- Diffview vim.api.nvim_set_keymap('n', 'do', ':DiffviewOpen', { noremap = true, silent = true }) vim.api.nvim_set_keymap('n', 'dc', ':DiffviewClose', { noremap = true, silent = true }) vim.api.nvim_set_keymap('n', 'dh', ':DiffviewFileHistory', { 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({ [''] = cmp.mapping.complete(), [''] = cmp.mapping.confirm({ select = true }), [''] = cmp.mapping.select_next_item(), [''] = 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'} }, }