170 lines
5.5 KiB
Lua
170 lines
5.5 KiB
Lua
|
|
-- 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")
|