299 lines
9.3 KiB
Lua
299 lines
9.3 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 = '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', '<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
|
||
|
|
|
||
|
|
-- LSP default keybindings
|
||
|
|
local opts = { noremap = true, silent = true }
|
||
|
|
vim.api.nvim_set_keymap('n', '<space>e', '<cmd>lua vim.diagnostic.open_float()<CR>', opts)
|
||
|
|
vim.api.nvim_set_keymap('n', '[d', '<cmd>lua vim.diagnostic.goto_prev()<CR>', opts)
|
||
|
|
vim.api.nvim_set_keymap('n', ']d', '<cmd>lua vim.diagnostic.goto_next()<CR>', opts)
|
||
|
|
vim.api.nvim_set_keymap('n', '<space>q', '<cmd>lua vim.diagnostic.setloclist()<CR>', 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', '<cmd>lua vim.lsp.buf.declaration()<CR>', opts)
|
||
|
|
vim.api.nvim_buf_set_keymap(bufnr, 'n', 'gd', '<cmd>lua vim.lsp.buf.definition()<CR>', opts)
|
||
|
|
vim.api.nvim_buf_set_keymap(bufnr, 'n', 'K', '<cmd>lua vim.lsp.buf.hover()<CR>', opts)
|
||
|
|
vim.api.nvim_buf_set_keymap(bufnr, 'n', 'gi', '<cmd>lua vim.lsp.buf.implementation()<CR>', opts)
|
||
|
|
vim.api.nvim_buf_set_keymap(bufnr, 'n', '<C-k>', '<cmd>lua vim.lsp.buf.signature_help()<CR>', opts)
|
||
|
|
vim.api.nvim_buf_set_keymap(bufnr, 'n', '<space>wa', '<cmd>lua vim.lsp.buf.add_workspace_folder()<CR>', opts)
|
||
|
|
vim.api.nvim_buf_set_keymap(bufnr, 'n', '<space>wr', '<cmd>lua vim.lsp.buf.remove_workspace_folder()<CR>', opts)
|
||
|
|
vim.api.nvim_buf_set_keymap(bufnr, 'n', '<space>wl', '<cmd>lua print(vim.inspect(vim.lsp.buf.list_workspace_folders()))<CR>', opts)
|
||
|
|
vim.api.nvim_buf_set_keymap(bufnr, 'n', '<space>D', '<cmd>lua vim.lsp.buf.type_definition()<CR>', opts)
|
||
|
|
vim.api.nvim_buf_set_keymap(bufnr, 'n', '<space>rn', '<cmd>lua vim.lsp.buf.rename()<CR>', opts)
|
||
|
|
vim.api.nvim_buf_set_keymap(bufnr, 'n', '<space>ca', '<cmd>lua vim.lsp.buf.code_action()<CR>', opts)
|
||
|
|
vim.api.nvim_buf_set_keymap(bufnr, 'n', 'gr', '<cmd>lua vim.lsp.buf.references()<CR>', opts)
|
||
|
|
vim.api.nvim_buf_set_keymap(bufnr, 'n', '<localleader>f', '<cmd>lua vim.lsp.buf.formatting()<CR>', 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 = [[<leader>term]],
|
||
|
|
autochdir = true,
|
||
|
|
})
|
||
|
|
end,
|
||
|
|
},
|
||
|
|
})
|