-- 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 = 'indent' 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.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 -- LSP default keybindings local opts = { noremap = true, silent = true } vim.api.nvim_set_keymap('n', 'e', 'lua vim.diagnostic.open_float()', opts) vim.api.nvim_set_keymap('n', '[d', 'lua vim.diagnostic.goto_prev()', opts) vim.api.nvim_set_keymap('n', ']d', 'lua vim.diagnostic.goto_next()', opts) vim.api.nvim_set_keymap('n', 'q', 'lua vim.diagnostic.setloclist()', opts) local on_attach = function(client, bufnr) vim.api.nvim_buf_set_option(bufnr, 'omnifunc', 'v:lua.vim.lsp.omnifunc') vim.api.nvim_buf_set_keymap(bufnr, 'n', 'gD', 'lua vim.lsp.buf.declaration()', opts) vim.api.nvim_buf_set_keymap(bufnr, 'n', 'gd', 'lua vim.lsp.buf.definition()', opts) vim.api.nvim_buf_set_keymap(bufnr, 'n', 'K', 'lua vim.lsp.buf.hover()', opts) vim.api.nvim_buf_set_keymap(bufnr, 'n', 'gi', 'lua vim.lsp.buf.implementation()', opts) vim.api.nvim_buf_set_keymap(bufnr, 'n', '', 'lua vim.lsp.buf.signature_help()', opts) vim.api.nvim_buf_set_keymap(bufnr, 'n', 'wa', 'lua vim.lsp.buf.add_workspace_folder()', opts) vim.api.nvim_buf_set_keymap(bufnr, 'n', 'wr', 'lua vim.lsp.buf.remove_workspace_folder()', opts) vim.api.nvim_buf_set_keymap(bufnr, 'n', 'wl', 'lua print(vim.inspect(vim.lsp.buf.list_workspace_folders()))', opts) vim.api.nvim_buf_set_keymap(bufnr, 'n', 'D', 'lua vim.lsp.buf.type_definition()', opts) vim.api.nvim_buf_set_keymap(bufnr, 'n', 'rn', 'lua vim.lsp.buf.rename()', opts) vim.api.nvim_buf_set_keymap(bufnr, 'n', 'ca', 'lua vim.lsp.buf.code_action()', opts) vim.api.nvim_buf_set_keymap(bufnr, 'n', 'gr', 'lua vim.lsp.buf.references()', opts) vim.api.nvim_buf_set_keymap(bufnr, 'n', 'f', 'lua vim.lsp.buf.formatting()', opts) vim.api.nvim_buf_set_keymap(bufnr, 'n', 'gf', vim.lsp.buf.format, opts) end vim.fn.sign_define('DapBreakpoint',{ text ='🟥', texthl ='', linehl ='', numhl =''}) vim.fn.sign_define('DapStopped',{ text ='▶️', texthl ='', linehl ='', numhl =''}) -- ===================== -- 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({ -- Icons (used by multiple plugins) { 'nvim-tree/nvim-web-devicons', lazy = true }, -- Statusline -- Bufferline { 'akinsho/bufferline.nvim', dependencies = { 'nvim-tree/nvim-web-devicons' }, config = function() require('bufferline').setup({ options = { always_show_bufferline = true, separator_style = 'thin', show_close_icon = false, numbers = 'buffer_id', enforce_regular_tabs = true, offsets = { { filetype = 'NvimTree', text = 'File Explorer', highlight = 'Directory' } }, }, }) end, }, -- Start screen { 'mhinz/vim-startify' }, -- File explorer { 'nvim-tree/nvim-tree.lua', dependencies = { 'nvim-tree/nvim-web-devicons' }, config = function() require('nvim-tree').setup({}) end, }, -- Treesitter -- { 'nvim-treesitter/nvim-treesitter', build = ':TSUpdate' }, -- Orgmode { 'nvim-orgmode/orgmode', config = function() require('orgmode').setup({ org_agenda_files = '~/org/*' }) end, }, -- Org bullets { 'akinsho/org-bullets.nvim', config = function() require('org-bullets').setup({ checkboxes = { half = { '', 'OrgTSCheckboxHalfChecked' }, done = { '✓', 'OrgDone' }, todo = { 'x', 'OrgTODO' }, }, }) end, }, -- Auto save { '907th/vim-auto-save' }, -- Telescope { 'nvim-telescope/telescope.nvim', dependencies = { 'nvim-lua/plenary.nvim' }, }, -- VimTeX { 'lervag/vimtex' }, -- ALE (linting) -- { 'dense-analysis/ale', event = 'InsertEnter' }, -- Pretty start screen (alpha) -- { -- 'goolord/alpha-nvim', -- dependencies = { 'nvim-tree/nvim-web-devicons' }, -- config = function() -- require('alpha').setup(require('alpha.themes.startify').opts) -- end, -- }, -- nvim-lint -- { -- 'mfussenegger/nvim-lint', -- event = { 'BufReadPost', 'BufNewFile' }, -- config = function() -- require('lint').linters_by_ft = { -- tex = { 'proselint', 'vale' }, -- text = { 'proselint', 'vale' }, -- } -- end, -- }, -- Colorscheme (load early) { 'lifepillar/vim-gruvbox8', commit = '75614aff9669abd7f8b0aae58fdfbaddfebee1e0', lazy = false, priority = 1000, init = function() vim.g.gruvbox_contrast_dark = 'hard' end, config = function() vim.cmd([[colorscheme gruvbox8_hard]]) end, }, -- Surround { 'ur4ltz/surround.nvim', config = function() require('surround').setup({ context_offset = 100, load_autogroups = false, mappings_style = 'sandwich', map_insert_mode = true, quotes = { "'", '"' }, brackets = { '{', '[' }, space_on_closing_char = false, pairs = { nestable = { b = { '(', ')' }, s = { '[', ']' }, B = { '{', '}' }, a = { '<', '>' } }, linear = { q = { "'", "'" }, t = { '`', '`' }, d = { '"', '"' } }, }, prefix = 's', }) end, }, -- Toggleterm { 'akinsho/toggleterm.nvim', version = '*', config = function() require('toggleterm').setup({ insert_mapping = false, open_mapping = [[term]], autochdir = true, }) end, }, })