-- general settings local vim = vim vim.opt.number = true -- show line numbers vim.opt.relativenumber = true -- relative line numbers for navigation vim.opt.clipboard:append { 'unnamedplus' } -- use clipboard vim.opt.mouse = "a" -- enable mouse support vim.opt.updatetime = 250 -- Faster updates (e.g., for LSP diagnostics) vim.opt.timeoutlen = 500 -- Shorter timeout for key sequences vim.opt.splitright = true -- vsplit opens new buffer on the right side -- tab and indentation settings vim.opt.expandtab = true -- tabs are converted to spaces vim.opt.shiftwidth = 4 -- 4 spaces for indentation vim.opt.tabstop = 4 -- 4 spaces for tabs vim.opt.softtabstop = 4 -- 4 spaces for tab key vim.opt.autoindent = true -- Copy indent from previous line vim.opt.cindent = true vim.opt.cino = ":0l1(0" -- plugin preparation vim.opt.signcolumn = "yes" -- LSP diagnostics vim.opt.termguicolors = true -- enable true colors vim.opt.completeopt = { "menu", "menuone", "noselect" } -- required for nvim-cmp vim.g.mapleader = " " -- Set leader to space vim.g.maplocalleader = "\\" -- Set local leader to backslash -- keymap vim.keymap.set('n', 'gd', vim.lsp.buf.definition, { desc = 'Go to definition' }) -- packages vim.pack.add({ -- colorscheme { src = 'https://github.com/sainnhe/gruvbox-material' }, -- status line { src = 'https://github.com/nvim-tree/nvim-web-devicons' }, { src = 'https://github.com/nvim-lualine/lualine.nvim' }, -- enhance language server capabilities (i guess) { src = 'https://github.com/nvim-treesitter/nvim-treesitter', version = 'main' }, -- autoconfigure language servers { src = 'https://github.com/neovim/nvim-lspconfig' }, -- install language servers { src = 'https://github.com/mason-org/mason.nvim' }, { src = 'https://github.com/mason-org/mason-lspconfig.nvim' }, -- autocomplete { src = 'https://github.com/hrsh7th/cmp-nvim-lsp' }, { src = 'https://github.com/hrsh7th/cmp-buffer' }, { src = 'https://github.com/hrsh7th/cmp-path' }, { src = 'https://github.com/hrsh7th/cmp-cmdline' }, { src = 'https://github.com/hrsh7th/nvim-cmp' }, { src = 'https://github.com/hrsh7th/cmp-vsnip' }, { src = 'https://github.com/hrsh7th/vim-vsnip' }, -- telescope { src = 'https://github.com/nvim-lua/plenary.nvim' }, { src = 'https://github.com/nvim-telescope/telescope.nvim', tag = 'v0.1.9' }, -- latex support { src = 'https://github.com/lervag/vimtex' }, }) -- init plugin gruvbox-material vim.g.gruvbox_material_background = 'hard' vim.g.gruvbox_material_foreground = 'material' vim.g.gruvbox_material_enable_italic = true vim.g.gruvbox_material_disable_italic_comment = false vim.g.gruvbox_material_better_performance = 1 vim.cmd.colorscheme('gruvbox-material') -- init plugin lualine require('lualine').setup({ options = { icons_enabled = true, theme = 'auto', component_separators = { left = '', right = ''}, section_separators = { left = '', right = ''}, disabled_filetypes = { statusline = {}, winbar = {}, }, ignore_focus = {}, always_divide_middle = true, always_show_tabline = true, globalstatus = false, refresh = { statusline = 1000, tabline = 1000, winbar = 1000, refresh_time = 16, -- ~60fps events = { 'WinEnter', 'BufEnter', 'BufWritePost', 'SessionLoadPost', 'FileChangedShellPost', 'VimResized', 'Filetype', 'CursorMoved', 'CursorMovedI', 'ModeChanged', }, } }, sections = { lualine_a = {'mode'}, lualine_b = {'branch', 'diff', 'diagnostics'}, lualine_c = {'filename'}, lualine_x = {'encoding', 'fileformat', 'filetype'}, lualine_y = {'progress'}, lualine_z = {'location'} }, inactive_sections = { lualine_a = {}, lualine_b = {}, lualine_c = {'filename'}, lualine_x = {'location'}, lualine_y = {}, lualine_z = {} }, tabline = {}, winbar = {}, inactive_winbar = {}, extensions = {} }) -- treesitter require'nvim-treesitter'.install { 'cpp' } -- cmp local cmp = require("cmp") cmp.setup({ snippet = { expand = function(args) vim.fn["vsnip#anonymous"](args.body) end, }, window = { -- completion = cmp.config.window.bordered(), -- documentation = cmp.config.window.bordered(), }, mapping = cmp.mapping.preset.insert({ [''] = cmp.mapping.scroll_docs(-4), [''] = cmp.mapping.scroll_docs(4), [''] = cmp.mapping.complete(), [''] = cmp.mapping.abort(), [''] = cmp.mapping.confirm({ select = true }), -- Accept currently selected item. Set `select` to `false` to only confirm explicitly selected items. }), sources = cmp.config.sources({ { name = 'nvim_lsp' }, { name = 'vsnip' }, }, { { name = 'buffer' }, }) }) -- Use buffer source for `/` and `?` (if you enabled `native_menu`, this won't work anymore). cmp.setup.cmdline({ '/', '?' }, { mapping = cmp.mapping.preset.cmdline(), sources = { { name = 'buffer' } } }) -- Use cmdline & path source for ':' (if you enabled `native_menu`, this won't work anymore). cmp.setup.cmdline(':', { mapping = cmp.mapping.preset.cmdline(), sources = cmp.config.sources( { { name = 'path' } }, { { name = 'cmdline' } } ), matching = { disallow_symbol_nonprefix_matching = false } }) -- language server installation (via mason) local capabilities = require('cmp_nvim_lsp').default_capabilities() require("mason").setup() require("mason-lspconfig").setup({ ensure_installed = { "lua_ls", "clangd", "pyright", "djlsp" }, automatic_installation = true, handlers = { function(server_name) require("lspconfig")[server_name].setup({ capabilities = capabilities, -- on_attach = your_on_attach, -- if you have one -- settings = {...}, -- per-server overrides go here if needed }) end, }, -- Optional: override specific servers if you really need something special -- ["rust_analyzer"] = function() -- require("rust-tools").setup({}) -- end, }) -- language server enabling vim.lsp.enable({ 'lua_ls', 'clangd', 'pyright', 'djlsp' }) local builtin = require('telescope.builtin') vim.keymap.set('n', 'ff', builtin.find_files, { desc = 'Telescope find files' }) vim.keymap.set('n', 'fg', builtin.live_grep, { desc = 'Telescope live grep' }) vim.keymap.set('n', 'fb', builtin.buffers, { desc = 'Telescope buffers' }) vim.keymap.set('n', 'fh', builtin.help_tags, { desc = 'Telescope help tags' }) -- vimtex (latex support) require('lualine').setup({ ft = { "tex", "bib" }, dependencies = { "nvim-treesitter/nvim-treesitter" }, config = function() vim.g.vimtex_view_method = "mupdf" end })