-- 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", opts = {} }, "neovim/nvim-lspconfig", }, }, { "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", } }, { "ray-x/go.nvim", dependencies = { "ray-x/guihua.lua" }, config = true }, { "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 = true vim.o.number = true vim.o.relativenumber = true vim.o.cursorline = true vim.o.clipboard = 'unnamedplus' vim.o.wildmenu = true vim.o.laststatus = 2 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.o.visualbell = false vim.g.mapleader = ' ' vim.opt.guicursor = "n-v-c:ver20,a:ver20" vim.opt.mouse = nil -- 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) -- Error Keymaps vim.keymap.set('n', 'tr', require('telescope.builtin').diagnostics) vim.keymap.set('n', 'tn', vim.diagnostic.goto_next); vim.keymap.set('n', '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', 'gf', function() require('go.format').goimport() end) vim.api.nvim_set_keymap('n', 'c', ':bd', { noremap = true }) vim.api.nvim_set_keymap('n', 'z', ':bp', { noremap = true }) vim.api.nvim_set_keymap('n', 'x', ':bn', { noremap = true }) vim.api.nvim_set_keymap('n', 'dr', ':noh', { noremap = true }) 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' }, }) }) -- define server configurations vim.lsp.config["gopls"] = { cmd = { "gopls" }, settings = { gopls = { analyses = { unusedparams = true, }, staticcheck = true, gofumpt = true, }, }, capabilities = require("cmp_nvim_lsp").default_capabilities(), } vim.lsp.config["clangd"] = { cmd = { "clangd", "--background-index", "--clang-tidy", "--log=verbose", }, capabilities = require("cmp_nvim_lsp").default_capabilities(), } -- start servers automatically for matching filetypes vim.api.nvim_create_autocmd("FileType", { pattern = "go", callback = function() vim.lsp.start(vim.lsp.config["gopls"]) end, }) vim.api.nvim_create_autocmd("FileType", { pattern = { "c", "cpp", "objc", "objcpp" }, callback = function() vim.lsp.start(vim.lsp.config["clangd"]) end, }) require("nvim-treesitter.configs").setup { ensure_installed = { "go", "gomod", "c", "lua" }, highlight = { enable = true, additional_vim_regex_highlighting = false }, } require("mason").setup() 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 = false } }, lualine_z = {'location'} }, }