-- init.lua — migrated from packer.nvim to lazy.nvim -- NOTE: impatient.nvim is no longer needed on modern Neovim (builtin module caching) -- ===================== -- Core options & globals -- ===================== vim.g.mapleader = '\\' vim.opt.termguicolors = true vim.g.coq_settings = { ['auto_start'] = 'shut-up' } vim.g.vimtex_view_general_viewer = 'okular' vim.g.vimtex_view_general_options = '-unique file:@pdf\\#src:@line@tex' vim.g.auto_save = 1 vim.opt.number = true vim.opt.foldmethod = 'expr' vim.opt.foldexpr = 'nvim_treesiter#foldexpr()' vim.opt.foldenable = true vim.opt.foldlevel = 5 vim.opt.cursorline = true vim.g.vimtex_fold_enabled = true vim.g.vimtex_indent_enabled = true vim.g.vimtex_indent_bib_enabled = true vim.g.vimtex_quickfix_autoclose_after_keystrokes = 5 vim.g.startify_session_dir = vim.fn.stdpath('data') .. '/sessions' vim.cmd [[set termguicolors set shell=/usr/bin/zsh]] vim.cmd [[:setlocal spell spelllang=en_us]] vim.cmd [[let g:auto_save_events = ["InsertLeave", "TextChanged"] ]] vim.cmd [[let g:startify_custom_header = [] ]] function _G.set_terminal_keymaps() local opts = { buffer = 0 } vim.keymap.set('t', '', [[]], opts) vim.keymap.set('t', 'jk', [[]], opts) vim.keymap.set('t', '', [[wincmd h]], opts) vim.keymap.set('t', '', [[wincmd j]], opts) vim.keymap.set('t', '', [[wincmd k]], opts) vim.keymap.set('t', '', [[wincmd l]], opts) end -- if you only want these mappings for toggle term use term://*toggleterm#* instead vim.cmd('autocmd! TermOpen term://* lua set_terminal_keymaps()') local signs = { Error = " ", Warn = " ", Hint = " ", Info = " " } for type, icon in pairs(signs) do local hl = "DiagnosticSign" .. type vim.fn.sign_define(hl, { text = icon, texthl = hl, numhl = hl }) end vim.o.updatetime = 250 vim.cmd [[autocmd CursorHold,CursorHoldI * lua vim.diagnostic.open_float(nil, {focus=false})]] vim.diagnostic.config({ virtual_text = { source = "always" }, float = { source = "always" }, }) vim.diagnostic.config({ virtual_text = false, signs = true, underline = true, update_in_insert = false, severity_sort = false, }) vim.cmd [[ set guifont=CaskaydiaCove\ Nerd\ Font:h19 set signcolumn=yes syntax enable nnoremap gb :BufferLinePick nnoremap :Telescope " Paste system clipboard with Ctrl + v inoremap "+p vnoremap d"+gP cnoremap + " Cut to system clipboard with Ctrl + x vnoremap "+d inoremap "+ddi " Copy to system clipboard with Ctr + c vnoremap "+y nnoremap "+yy inoremap "+yyi nnoremap :noh nnoremap :NvimTreeToggle " change directory to current file nnoremap cd :cd %:p:h:pwd " au InsertLeave * lua require('lint').try_lint() ]] -- vim.cmd [[colorscheme gruvbox8_hard]] vim.cmd [[set nocompatible]] vim.cmd [[ if has('nvim') autocmd TabNewEntered * Startify else autocmd BufWinEnter * if !exists('t:startify_new_tab') && empty(expand('%')) && empty(&l:buftype) && &l:modifiable | let t:startify_new_tab = 1 | Startify | endif endif ]] vim.api.nvim_create_autocmd({ "BufWritePost" }, { callback = function() -- require("lint").try_lint() end, }) if vim.g.neovide then vim.o.guifont = "CaskaydiaCove Nerd Font:h14" end local function dedup_diagnostics(_, result, ctx, config) if not result or not result.diagnostics then return end local filtered = {} local by_line = {} for _, diag in ipairs(result.diagnostics) do local lnum = diag.range.start.line if not by_line[lnum] or diag.severity < by_line[lnum].severity then by_line[lnum] = diag end end for _, diag in pairs(by_line) do table.insert(filtered, diag) end result.diagnostics = filtered vim.lsp.diagnostic.on_publish_diagnostics(_, result, ctx, config) end vim.lsp.handlers["textDocument/publishDiagnostics"] = dedup_diagnostics local set = vim.keymap.set local opts = { noremap = true, silent = true } set('n', 'gD', vim.lsp.buf.declaration, opts) set('n', 'gd', vim.lsp.buf.definition, opts) set('n', 'K', vim.lsp.buf.hover, opts) set('n', 'gi', vim.lsp.buf.implementation, opts) set('n', '', vim.lsp.buf.signature_help, opts) set('n', 'wa', vim.lsp.buf.add_workspace_folder, opts) set('n', 'wr', vim.lsp.buf.remove_workspace_folder, opts) set('n', 'wl', function() print(vim.inspect(vim.lsp.buf.list_workspace_folders())) end, opts) set('n', 'D', vim.lsp.buf.type_definition, opts) set('n', 'rn', vim.lsp.buf.rename, opts) set({ 'n', 'v' }, 'ca', vim.lsp.buf.code_action, opts) set('n', 'gr', vim.lsp.buf.references, opts) set('n', '[d', vim.diagnostic.goto_prev, opts) set('n', ']d', vim.diagnostic.goto_next, opts) set('n', 'q', vim.diagnostic.setloclist, opts) set('n', 'e', vim.diagnostic.open_float, opts) set('n', 'f', function() vim.lsp.buf.format { async = true } end, opts) -- ===================== -- lazy.nvim bootstrap -- ===================== 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", "--branch=stable", -- latest stable release lazypath, }) end vim.opt.rtp:prepend(lazypath) -- ===================== -- Plugins (lazy.nvim) -- ===================== require("lazy").setup("plugins")