config-files/init.lua

170 lines
5.5 KiB
Lua
Raw Normal View History

2025-11-30 02:06:38 -08:00
-- 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', '<esc>', [[<C-\><C-n>]], opts)
vim.keymap.set('t', 'jk', [[<C-\><C-n>]], opts)
vim.keymap.set('t', '<C-h>', [[<Cmd>wincmd h<CR>]], opts)
vim.keymap.set('t', '<C-j>', [[<Cmd>wincmd j<CR>]], opts)
vim.keymap.set('t', '<C-k>', [[<Cmd>wincmd k<CR>]], opts)
vim.keymap.set('t', '<C-l>', [[<Cmd>wincmd l<CR>]], 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 <silent> gb :BufferLinePick<CR>
nnoremap <C-p> :Telescope<CR>
" Paste system clipboard with Ctrl + v
inoremap <C-v> <ESC>"+p
vnoremap <C-v> d"+gP<ESC>
cnoremap <C-v> <C-r>+
" Cut to system clipboard with Ctrl + x
vnoremap <C-x> "+d
inoremap <C-x> <ESC>"+ddi
" Copy to system clipboard with Ctr + c
vnoremap <C-c> "+y
nnoremap <C-c> "+yy
inoremap <C-c> <ESC>"+yyi
nnoremap <space> :noh<cr>
nnoremap <C-n> :NvimTreeToggle<CR>
" change directory to current file
nnoremap <leader>cd :cd %:p:h<CR>:pwd<CR>
" 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', '<C-k>', vim.lsp.buf.signature_help, opts)
set('n', '<leader>wa', vim.lsp.buf.add_workspace_folder, opts)
set('n', '<leader>wr', vim.lsp.buf.remove_workspace_folder, opts)
set('n', '<leader>wl', function() print(vim.inspect(vim.lsp.buf.list_workspace_folders())) end, opts)
set('n', '<leader>D', vim.lsp.buf.type_definition, opts)
set('n', '<leader>rn', vim.lsp.buf.rename, opts)
set({ 'n', 'v' }, '<leader>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', '<leader>q', vim.diagnostic.setloclist, opts)
set('n', '<leader>e', vim.diagnostic.open_float, opts)
set('n', '<leader>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")