diff options
44 files changed, 2843 insertions, 0 deletions
diff --git a/.emmyrc.json b/.emmyrc.json new file mode 100644 index 0000000..c45447a --- /dev/null +++ b/.emmyrc.json @@ -0,0 +1,30 @@ +{ + "$schema": "https://raw.githubusercontent.com/EmmyLuaLs/emmylua-analyzer-rust/refs/heads/main/crates/emmylua_code_analysis/resources/schema.json", + "runtime": { + "version": "LuaJIT", + "requirePattern": ["lua/?.lua", "lua/?/init.lua"] + }, + "diagnostics" : { + "disable" : [ + "unnecessary-if" + ], + "enables": [ + "iter-variable-reassign", + "non-literal-expressions-in-assert", + "incomplete-signature-doc" + ] + }, + "strict": { + "typeCall": true, + "arrayIndex": true + }, + "codeAction": { + "insertSpace": true + }, + "workspace": { + "library": [ + "$VIMRUNTIME", + "${3rd}/luv/library" + ] + } +} diff --git a/after/ftplugin/lua.vim b/after/ftplugin/lua.vim new file mode 100644 index 0000000..6d9a620 --- /dev/null +++ b/after/ftplugin/lua.vim @@ -0,0 +1,9 @@ +setlocal includeexpr=substitute(v:fname,'\\.','/','g').'.lua' +setlocal comments-=:-- comments+=:---,:-- +setlocal keywordprg=:help + +inoreabbrev <buffer> lo local +inoreabbrev <buffer> lf local function()<left><left> +inoreabbrev <buffer> fu function() end<left><left><left><left> + +nnoremap <buffer> K <Cmd>lua vim.lsp.buf.hover()<CR> diff --git a/after/ftplugin/mail.vim b/after/ftplugin/mail.vim new file mode 100644 index 0000000..4b76a14 --- /dev/null +++ b/after/ftplugin/mail.vim @@ -0,0 +1,6 @@ +set spell +set formatoptions+=wq + +setlocal tw=72 et cc=73 list + +map <buffer> g= <Esc>vipgq diff --git a/after/ftplugin/markdown.lua b/after/ftplugin/markdown.lua new file mode 100644 index 0000000..fe9be18 --- /dev/null +++ b/after/ftplugin/markdown.lua @@ -0,0 +1,14 @@ +local function toggle_tick(buf, lnum, line, to) + local beg, tick, rest = line:match("^(%s*)- %[([x ])%](.*)") +end + +vim.keymap.set("n", "<CR>", function() + local curline = vim.fn.getline(".") + local lnum = vim.fn.getpos(".")[2] + local beg, tick, rest = curline:match("^(%s*)- %[([x ])%](.*)") + if beg == nil then return end + + local new_tick = (tick == " " and "x" or " ") + local new_line = beg .. "- [" .. new_tick .. "]" .. rest + vim.api.nvim_buf_set_lines(0, lnum - 1, lnum, false, { new_line }) +end, { buffer = true }) diff --git a/after/ftplugin/python.lua b/after/ftplugin/python.lua new file mode 100644 index 0000000..2f1a564 --- /dev/null +++ b/after/ftplugin/python.lua @@ -0,0 +1,29 @@ +local function keyword_help(kw) + local buf = vim.api.nvim_create_buf(false, true) + local win = vim.api.nvim_open_win(buf, true, { + anchor = "SE", + split = "below", + height = 20, + }) + local obj = vim.system({ "pydoc-markdown", "-m", kw }):wait() -- "--render-toc"?? + vim.api.nvim_buf_set_lines(buf, -1, -1, false, vim.split(obj.stdout, "\n")) + vim.bo[buf].filetype = "markdown" + vim.bo[buf].swapfile = false +end + +vim.api.nvim_create_user_command("PyDoc", function(params) + if #params.fargs > 0 then + keyword_help(params.fargs[1]) + end +end, { + bar = true, + range = true, + addr = "other", + nargs = "*", + complete = function(...) + vim.print("completion request: " .. vim.inspect(...)) + return nil + end, +}) + +vim.cmd([[ setlocal keywordprg=:PyDoc ]]) diff --git a/after/ftplugin/tex.lua b/after/ftplugin/tex.lua new file mode 100644 index 0000000..963ab7f --- /dev/null +++ b/after/ftplugin/tex.lua @@ -0,0 +1,19 @@ +vim.cmd([[setlocal shiftwidth=2 tabstop=2]]) + +vim.fn.call("vimtex#imaps#add_map", { + { + lhs = "++", + rhs = "\\item ", + leader = "", + wrapper = "vimtex#imaps#wrap_environment", + context = { "itemize", "enumerate", "description" }, + }, +}) + +vim.fn.call("vimtex#imaps#add_map", { + { + lhs = "e", + rhs = "\\eps", + wrapper = "vimtex#imaps#wrap_math", + }, +}) diff --git a/after/lsp/emmylua_ls.lua b/after/lsp/emmylua_ls.lua new file mode 100644 index 0000000..4e0cd88 --- /dev/null +++ b/after/lsp/emmylua_ls.lua @@ -0,0 +1,29 @@ +return { + cmd = { vim.env.XDG_DATA_HOME .. "/cargo/bin/emmylua_ls" }, + filetypes = { "lua" }, + root_markers = { + ".emmyrc.json", + }, + workspace_required = false, + on_init = function(client) + if client.workspace_folders then + local path = client.workspace_folders[1].name + if + path ~= vim.fn.stdpath("config") + and ( + vim.uv.fs_stat(path .. "/.luarc.json") + or vim.uv.fs_stat(path .. "/.luarc.jsonc") + or vim.uv.fs_stat(path .. "/.emmyrc.jsonc") + ) + then + return + end + end + + client.config.settings.Lua.workspace = + vim.tbl_deep_extend("force", client.config.settings.Lua.workspace, { + library = vim.api.nvim_get_runtime_file("", true), + }) + end, + settings = { Lua = { workspace = {} } }, +} diff --git a/after/lsp/qmlls.lua b/after/lsp/qmlls.lua new file mode 100644 index 0000000..46c4859 --- /dev/null +++ b/after/lsp/qmlls.lua @@ -0,0 +1,4 @@ +return { + cmd = { "qmlls6" }, + root_markers = { "shell.qml" }, +} diff --git a/after/lsp/rust_analyzer.lua b/after/lsp/rust_analyzer.lua new file mode 100644 index 0000000..e69de29 --- /dev/null +++ b/after/lsp/rust_analyzer.lua diff --git a/autoload/scratch.vim b/autoload/scratch.vim new file mode 100644 index 0000000..690aca4 --- /dev/null +++ b/autoload/scratch.vim @@ -0,0 +1,51 @@ +" Source: https://gist.github.com/romainl/eae0a260ab9c135390c30cd370c20cd7 +" Source: https://github.com/gpanders/dotfiles/blob/master/.config/nvim/autoload/scratch.vim + +function! scratch#open(cmd, mods) abort + for win in filter(range(1, winnr('$')), 'getwinvar(v:val, "scratch")') + execute win . 'windo close' + endfor + if a:cmd =~# '^!' + let cmd = a:cmd =~# ' %' ? substitute(a:cmd, ' %', ' ' . expand('%:p'), '') : a:cmd + let output = systemlist(matchstr(cmd, '^!\zs.*')) + elseif a:cmd =~# '^@' + let output = getreg(a:cmd[1], 1, 1) + else + let output = split(execute(a:cmd), "\n") + endif + execute a:mods . ' new' + let w:scratch = 1 + call setline(1, output) + nnoremap <buffer> q <C-W>q + setlocal buftype=nofile bufhidden=wipe nobuflisted noswapfile nomodifiable + call s:highlight(a:cmd) + + augroup scratch + autocmd BufEnter <buffer> ++nested if winnr('$') < 2 | q | endif + augroup END +endfunction + +" Highlight scratch buffer to match native command output for certain commands +function! s:highlight(cmd) abort + let firstline = getline(1) + if firstline =~# '^--- Registers ---\|Type Name Content$' + call matchaddpos('Title', [1]) + call matchadd('SpecialKey', '\^\S\|<[^>]\{2}>') + elseif firstline =~# '^\%(mark\|change\| jump\) line col \%(file/\)\?text$' + call matchaddpos('Title', [1]) + elseif firstline =~# '^\w\+\s\+xxx \%(links\|cleared\|cterm\|gui\|term\)' + syntax match Keyword /\v%(c?term%([fb]g)?|gui%([fb]g)?)\=/ + syntax keyword Keyword links to + for linenr in range(1, line('$')) + let line = getline(linenr) + let syn = matchstr(line, '^\w\+') + let col = match(line, '\<xxx\>') + call matchaddpos(syn, [[linenr, col + 1, 3]]) + endfor + elseif search('\v^(E[0-9]+:|line\s+[0-9]+:)', 'cnW') + call matchadd('ErrorMsg', '^E[0-9]\+: .\+$') + call matchadd('LineNr', '^line\s\+[0-9]\+:$') + elseif a:cmd =~# '^dig' + call matchadd('SpecialKey', '[A-Za-z0-9[:graph:]]\{2}\s\+\zs\S\+\ze\s\+\d\+') + endif +endfunction diff --git a/colors/habanight.vim b/colors/habanight.vim new file mode 100644 index 0000000..a28a3a2 --- /dev/null +++ b/colors/habanight.vim @@ -0,0 +1,102 @@ +" Name: habanight +" Description: <novasenco> That tonight's gonna be a Haba night. Habanight Habanight. +" Author: Maxim Kim <habamax@gmail.com> +" Maintainer: Maxim Kim <habamax@gmail.com> +" License: Vim License (see `:help license`) +" Last Updated: 28.03.2021 21:07:08 + +" Generated by Colortemplate v2.1.0 + +set background=dark + +hi clear +let g:colors_name = 'habanight' + +let g:terminal_ansi_colors = ['#1c1c1c', '#d77575', '#5f875f', '#dc9656', '#5f87af', '#af87af', '#5f8787', '#6c6c6c', '#444444', '#a16946', '#87af87', '#d7b082', '#87afd7', '#d7afd7', '#86c1b9', '#ffffff'] +let g:terminal_color_0 = '#1c1c1c' +let g:terminal_color_1 = '#d77575' +let g:terminal_color_2 = '#5f875f' +let g:terminal_color_3 = '#dc9656' +let g:terminal_color_4 = '#5f87af' +let g:terminal_color_5 = '#af87af' +let g:terminal_color_6 = '#5f8787' +let g:terminal_color_7 = '#6c6c6c' +let g:terminal_color_8 = '#444444' +let g:terminal_color_9 = '#a16946' +let g:terminal_color_10 = '#87af87' +let g:terminal_color_11 = '#d7b082' +let g:terminal_color_12 = '#87afd7' +let g:terminal_color_13 = '#d7afd7' +let g:terminal_color_14 = '#86c1b9' +let g:terminal_color_15 = '#ffffff' +if get(g:, 'habanight_transp_bg', 0) && !has('gui_running') + hi Normal guifg=#cccccc guibg=NONE gui=NONE cterm=NONE +else + hi Normal guifg=#cccccc guibg=#000000 gui=NONE cterm=NONE +endif +hi EndOfBuffer guifg=#444444 guibg=NONE gui=NONE cterm=NONE +hi Statusline guifg=#000000 guibg=#5f87af gui=NONE cterm=NONE +hi StatuslineNC guifg=#bcbcbc guibg=#444444 gui=NONE cterm=NONE +hi StatuslineTerm guifg=#000000 guibg=#5f87af gui=NONE cterm=NONE +hi StatuslineTermNC guifg=#bcbcbc guibg=#444444 gui=NONE cterm=NONE +hi VertSplit guifg=#444444 guibg=#444444 gui=NONE cterm=NONE +hi Pmenu guifg=NONE guibg=#444444 gui=NONE cterm=NONE +hi PmenuSel guifg=#000000 guibg=#d7b082 gui=NONE cterm=NONE +hi PmenuSbar guifg=NONE guibg=#444444 gui=NONE cterm=NONE +hi PmenuThumb guifg=NONE guibg=#6c6c6c gui=NONE cterm=NONE +hi TabLine guifg=#bcbcbc guibg=#444444 gui=NONE cterm=NONE +hi TabLineFill guifg=NONE guibg=#444444 gui=NONE cterm=NONE +hi TabLineSel guifg=#000000 guibg=#5f87af gui=NONE cterm=NONE +hi ToolbarLine guifg=NONE guibg=#1c1c1c gui=NONE cterm=NONE +hi ToolbarButton guifg=#1c1c1c guibg=#5f8787 gui=NONE cterm=NONE +hi NonText guifg=#444444 guibg=NONE gui=NONE cterm=NONE +hi SpecialKey guifg=#444444 guibg=NONE gui=NONE cterm=NONE +hi Folded guifg=#6c6c6c guibg=#1c1c1c gui=NONE cterm=NONE +hi Visual guifg=#000000 guibg=#87afd7 gui=NONE cterm=NONE +hi VisualNOS guifg=#000000 guibg=#87afd7 gui=NONE cterm=NONE +hi LineNr guifg=#6c6c6c guibg=NONE gui=NONE cterm=NONE +hi FoldColumn guifg=#6c6c6c guibg=NONE gui=NONE cterm=NONE +hi CursorLine guifg=NONE guibg=#262626 gui=NONE cterm=NONE +hi CursorColumn guifg=NONE guibg=#262626 gui=NONE cterm=NONE +hi CursorLineNr guifg=NONE guibg=#262626 gui=NONE cterm=NONE +hi QuickFixLine guifg=NONE guibg=#262626 gui=NONE cterm=NONE +hi SignColumn guifg=NONE guibg=NONE gui=NONE ctermfg=NONE ctermbg=NONE cterm=NONE +hi Underlined guifg=#87afd7 guibg=NONE gui=underline cterm=underline +hi Error guifg=#1c1c1c guibg=#d77575 gui=NONE cterm=NONE +hi ErrorMsg guifg=#1c1c1c guibg=#d77575 gui=NONE cterm=NONE +hi WarningMsg guifg=#d7b082 guibg=NONE gui=NONE cterm=NONE +hi MoreMsg guifg=#dc9656 guibg=NONE gui=NONE cterm=NONE +hi ModeMsg guifg=#000000 guibg=#dc9656 gui=NONE cterm=NONE +hi Question guifg=#5f875f guibg=NONE gui=NONE cterm=NONE +hi Todo guifg=#000000 guibg=#6c6c6c gui=NONE cterm=NONE +hi MatchParen guifg=#000000 guibg=#86c1b9 gui=NONE cterm=NONE +hi Search guifg=#000000 guibg=#5f875f gui=NONE cterm=NONE +hi IncSearch guifg=#000000 guibg=#d7b082 gui=NONE cterm=NONE +hi WildMenu guifg=#000000 guibg=#d7b082 gui=NONE cterm=NONE +hi ColorColumn guifg=NONE guibg=#1c1c1c gui=NONE cterm=NONE +hi Cursor guifg=#000000 guibg=#bcbcbc gui=NONE cterm=NONE +hi lCursor guifg=#bcbcbc guibg=#dc9656 gui=NONE cterm=NONE +hi DiffAdd guifg=#000000 guibg=#87af87 gui=NONE cterm=NONE +hi DiffChange guifg=NONE guibg=NONE gui=NONE ctermfg=NONE ctermbg=NONE cterm=NONE +hi DiffText guifg=#000000 guibg=#dc9656 gui=NONE cterm=NONE +hi DiffDelete guifg=#444444 guibg=NONE gui=NONE cterm=NONE +hi SpellBad guifg=#d77575 guibg=NONE guisp=#d77575 gui=undercurl cterm=underline +hi SpellCap guifg=#a16946 guibg=NONE guisp=#a16946 gui=undercurl cterm=underline +hi SpellLocal guifg=#dc9656 guibg=NONE guisp=#dc9656 gui=undercurl cterm=underline +hi SpellRare guifg=#af87af guibg=NONE guisp=#af87af gui=undercurl cterm=underline +hi Identifier guifg=#5f87af guibg=NONE gui=NONE cterm=NONE +hi Function guifg=#87afd7 guibg=NONE gui=NONE cterm=NONE +hi Statement guifg=#af87af guibg=NONE gui=NONE cterm=NONE +hi Operator guifg=#d7afd7 guibg=NONE gui=NONE cterm=NONE +hi Constant guifg=#dc9656 guibg=NONE gui=NONE cterm=NONE +hi String guifg=#87af87 guibg=NONE gui=NONE cterm=NONE +hi PreProc guifg=#d7b082 guibg=NONE gui=NONE cterm=NONE +hi Special guifg=#86c1b9 guibg=NONE gui=NONE cterm=NONE +hi Tag guifg=#d7b082 guibg=NONE gui=NONE cterm=NONE +hi Delimiter guifg=#a16946 guibg=NONE gui=NONE cterm=NONE +hi Type guifg=#d77575 guibg=NONE gui=NONE cterm=NONE +hi Directory guifg=#5f87af guibg=NONE gui=NONE cterm=NONE +hi Comment guifg=#6c6c6c guibg=NONE gui=NONE cterm=NONE +hi Conceal guifg=#6c6c6c guibg=NONE gui=NONE cterm=NONE +hi Ignore guifg=NONE guibg=NONE gui=NONE ctermfg=NONE ctermbg=NONE cterm=NONE +hi Title guifg=#ffffff guibg=NONE gui=NONE cterm=NONE diff --git a/colors/habarena.vim b/colors/habarena.vim new file mode 100644 index 0000000..222c857 --- /dev/null +++ b/colors/habarena.vim @@ -0,0 +1,336 @@ +" Name: habarena +" Description: Hubba hubba sand is all over the place. +" Author: Maxim Kim <habamax@gmail.com> +" Maintainer: Maxim Kim <habamax@gmail.com> +" License: Vim License (see `:help license`) +" Last Updated: Mon 18 Apr 2022 10:00:36 MSK + +" Generated by Colortemplate v2.2.0 + +set background=light + +hi clear +let g:colors_name = 'habarena' + +let s:t_Co = exists('&t_Co') && !empty(&t_Co) && &t_Co > 1 ? &t_Co : 1 + +if (has('termguicolors') && &termguicolors) || has('gui_running') + let g:terminal_ansi_colors = ['#000000', '#af0000', '#005f00', '#875f00', '#005faf', '#870087', '#008787', '#949494', '#626262', '#af5f00', '#008700', '#d7d787', '#5f87af', '#af5faf', '#5f8787', '#f6f6ef'] +endif +hi Normal guifg=#000000 guibg=#f6f6ef gui=NONE cterm=NONE +hi Terminal guifg=#000000 guibg=#f6f6ef gui=NONE cterm=NONE +hi Statusline guifg=#f6f6ef guibg=#626262 gui=NONE cterm=NONE +hi StatuslineTerm guifg=#f6f6ef guibg=#626262 gui=NONE cterm=NONE +hi VertSplit guifg=#949494 guibg=#949494 gui=NONE cterm=NONE +hi TabLine guifg=NONE guibg=#949494 gui=NONE cterm=NONE +hi TabLineFill guifg=NONE guibg=#949494 gui=NONE cterm=NONE +hi TabLineSel guifg=#000000 guibg=#f6f6ef gui=NONE cterm=NONE +hi ToolbarLine guifg=NONE guibg=NONE gui=NONE ctermfg=NONE ctermbg=NONE cterm=NONE +hi ToolbarButton guifg=#000000 guibg=#b2b2b2 gui=NONE cterm=NONE +hi QuickFixLine guifg=#000000 guibg=#d7d787 gui=NONE cterm=NONE +hi CursorLineNr guifg=#d7005f guibg=NONE gui=bold cterm=bold +hi LineNr guifg=#b2b2b2 guibg=NONE gui=NONE cterm=NONE +hi LineNrAbove guifg=#b2b2b2 guibg=NONE gui=NONE cterm=NONE +hi LineNrBelow guifg=#b2b2b2 guibg=NONE gui=NONE cterm=NONE +hi NonText guifg=#b2b2b2 guibg=NONE gui=NONE cterm=NONE +hi FoldColumn guifg=#b2b2b2 guibg=NONE gui=NONE cterm=NONE +hi EndOfBuffer guifg=#b2b2b2 guibg=NONE gui=NONE cterm=NONE +hi SpecialKey guifg=#b2b2b2 guibg=NONE gui=NONE cterm=NONE +hi Pmenu guifg=NONE guibg=#efefe7 gui=NONE cterm=NONE +hi PmenuThumb guifg=NONE guibg=#949494 gui=NONE cterm=NONE +hi PmenuSbar guifg=NONE guibg=NONE gui=NONE ctermfg=NONE ctermbg=NONE cterm=NONE +hi PmenuSel guifg=#000000 guibg=#d7d787 gui=NONE cterm=NONE +hi SignColumn guifg=NONE guibg=NONE gui=NONE ctermfg=NONE ctermbg=NONE cterm=NONE +hi Error guifg=#af0000 guibg=#f6f6ef gui=reverse cterm=reverse +hi ErrorMsg guifg=#af0000 guibg=#f6f6ef gui=reverse cterm=reverse +hi ModeMsg guifg=#000000 guibg=#d7d787 gui=NONE cterm=NONE +hi MoreMsg guifg=#005f00 guibg=NONE gui=NONE cterm=NONE +hi Question guifg=#875f00 guibg=NONE gui=NONE cterm=NONE +hi WarningMsg guifg=#af5f00 guibg=NONE gui=NONE cterm=NONE +hi Todo guifg=#d7d787 guibg=#000000 gui=reverse cterm=reverse +hi Search guifg=#f6f6ef guibg=#008700 gui=NONE cterm=NONE +hi IncSearch guifg=#f6f6ef guibg=#d7005f gui=NONE cterm=NONE +hi CurSearch guifg=#f6f6ef guibg=#875f00 gui=NONE cterm=NONE +hi WildMenu guifg=#000000 guibg=#d7d787 gui=NONE cterm=NONE +hi debugPC guifg=#f6f6ef guibg=#005faf gui=NONE cterm=NONE +hi debugBreakpoint guifg=#f6f6ef guibg=#af0000 gui=NONE cterm=NONE +hi Cursor guifg=#d7005f guibg=#f6f6ef gui=reverse cterm=reverse +hi lCursor guifg=#0000ff guibg=#000000 gui=reverse cterm=reverse +hi Visual guifg=NONE guibg=#daefff gui=NONE cterm=NONE +hi MatchParen guifg=NONE guibg=#daf7da gui=NONE cterm=NONE +hi StatuslineNC guifg=#f6f6ef guibg=#949494 gui=NONE cterm=NONE +hi StatuslineTermNC guifg=#f6f6ef guibg=#949494 gui=NONE cterm=NONE +hi VisualNOS guifg=#f6f6ef guibg=#5f8787 gui=NONE cterm=NONE +hi CursorLine guifg=NONE guibg=#ebece5 gui=NONE cterm=NONE +hi CursorColumn guifg=NONE guibg=#ebece5 gui=NONE cterm=NONE +hi Folded guifg=#626262 guibg=#efefe7 gui=NONE cterm=NONE +hi ColorColumn guifg=NONE guibg=#efefe7 gui=NONE cterm=NONE +hi SpellBad guifg=NONE guibg=NONE guisp=#af0000 gui=undercurl ctermfg=NONE ctermbg=NONE cterm=underline +hi SpellCap guifg=NONE guibg=NONE guisp=#005faf gui=undercurl ctermfg=NONE ctermbg=NONE cterm=underline +hi SpellLocal guifg=NONE guibg=NONE guisp=#005f00 gui=undercurl ctermfg=NONE ctermbg=NONE cterm=underline +hi SpellRare guifg=NONE guibg=NONE guisp=#af5faf gui=undercurl ctermfg=NONE ctermbg=NONE cterm=underline +hi Comment guifg=#949494 guibg=NONE gui=NONE cterm=NONE +hi PreProc guifg=#875f00 guibg=NONE gui=NONE cterm=NONE +hi Constant guifg=#af5f00 guibg=NONE gui=NONE cterm=NONE +hi String guifg=#008700 guibg=NONE gui=NONE cterm=NONE +hi Character guifg=#005f00 guibg=NONE gui=NONE cterm=NONE +hi Identifier guifg=#008787 guibg=NONE gui=NONE cterm=NONE +hi Statement guifg=#870087 guibg=NONE gui=NONE cterm=NONE +hi Type guifg=#005faf guibg=NONE gui=NONE cterm=NONE +hi Special guifg=#5f8787 guibg=NONE gui=NONE cterm=NONE +hi Underlined guifg=#005faf guibg=NONE gui=underline cterm=underline +hi Title guifg=#875f00 guibg=NONE gui=bold cterm=bold +hi Directory guifg=#005faf guibg=NONE gui=bold cterm=bold +hi Conceal guifg=#626262 guibg=NONE gui=NONE cterm=NONE +hi Ignore guifg=NONE guibg=NONE gui=NONE ctermfg=NONE ctermbg=NONE cterm=NONE +hi Debug guifg=#5f8787 guibg=NONE gui=NONE cterm=NONE +hi DiffAdd guifg=NONE guibg=#cfe4cf gui=NONE cterm=NONE +hi DiffChange guifg=NONE guibg=#e7e0ca gui=NONE cterm=NONE +hi DiffText guifg=NONE guibg=#bfe4e4 gui=NONE cterm=NONE +hi DiffDelete guifg=NONE guibg=#e4cfe4 gui=NONE cterm=NONE + +if s:t_Co >= 256 + hi Normal ctermfg=16 ctermbg=231 cterm=NONE + hi Terminal ctermfg=16 ctermbg=231 cterm=NONE + hi Statusline ctermfg=231 ctermbg=241 cterm=NONE + hi StatuslineTerm ctermfg=231 ctermbg=241 cterm=NONE + hi VertSplit ctermfg=246 ctermbg=246 cterm=NONE + hi TabLine ctermfg=NONE ctermbg=246 cterm=NONE + hi TabLineFill ctermfg=NONE ctermbg=246 cterm=NONE + hi TabLineSel ctermfg=16 ctermbg=231 cterm=NONE + hi ToolbarLine ctermfg=NONE ctermbg=NONE cterm=NONE + hi ToolbarButton ctermfg=16 ctermbg=249 cterm=NONE + hi QuickFixLine ctermfg=16 ctermbg=186 cterm=NONE + hi CursorLineNr ctermfg=161 ctermbg=NONE cterm=bold + hi LineNr ctermfg=249 ctermbg=NONE cterm=NONE + hi LineNrAbove ctermfg=249 ctermbg=NONE cterm=NONE + hi LineNrBelow ctermfg=249 ctermbg=NONE cterm=NONE + hi NonText ctermfg=249 ctermbg=NONE cterm=NONE + hi FoldColumn ctermfg=249 ctermbg=NONE cterm=NONE + hi EndOfBuffer ctermfg=249 ctermbg=NONE cterm=NONE + hi SpecialKey ctermfg=249 ctermbg=NONE cterm=NONE + hi Pmenu ctermfg=NONE ctermbg=255 cterm=NONE + hi PmenuThumb ctermfg=NONE ctermbg=246 cterm=NONE + hi PmenuSbar ctermfg=NONE ctermbg=NONE cterm=NONE + hi PmenuSel ctermfg=16 ctermbg=186 cterm=NONE + hi SignColumn ctermfg=NONE ctermbg=NONE cterm=NONE + hi Error ctermfg=124 ctermbg=231 cterm=reverse + hi ErrorMsg ctermfg=124 ctermbg=231 cterm=reverse + hi ModeMsg ctermfg=16 ctermbg=186 cterm=NONE + hi MoreMsg ctermfg=22 ctermbg=NONE cterm=NONE + hi Question ctermfg=94 ctermbg=NONE cterm=NONE + hi WarningMsg ctermfg=130 ctermbg=NONE cterm=NONE + hi Todo ctermfg=186 ctermbg=16 cterm=reverse + hi Search ctermfg=231 ctermbg=28 cterm=NONE + hi IncSearch ctermfg=231 ctermbg=161 cterm=NONE + hi CurSearch ctermfg=231 ctermbg=94 cterm=NONE + hi WildMenu ctermfg=16 ctermbg=186 cterm=NONE + hi debugPC ctermfg=231 ctermbg=25 cterm=NONE + hi debugBreakpoint ctermfg=231 ctermbg=124 cterm=NONE + hi Visual ctermfg=231 ctermbg=67 cterm=NONE + hi MatchParen ctermfg=30 ctermbg=231 cterm=reverse + hi StatuslineNC ctermfg=231 ctermbg=246 cterm=NONE + hi StatuslineTermNC ctermfg=231 ctermbg=246 cterm=NONE + hi VisualNOS ctermfg=231 ctermbg=66 cterm=NONE + hi CursorLine ctermfg=NONE ctermbg=254 cterm=NONE + hi CursorColumn ctermfg=NONE ctermbg=254 cterm=NONE + hi Folded ctermfg=241 ctermbg=255 cterm=NONE + hi ColorColumn ctermfg=NONE ctermbg=255 cterm=NONE + hi SpellBad ctermfg=124 ctermbg=NONE cterm=underline + hi SpellCap ctermfg=25 ctermbg=NONE cterm=underline + hi SpellLocal ctermfg=22 ctermbg=NONE cterm=underline + hi SpellRare ctermfg=133 ctermbg=NONE cterm=underline + hi Comment ctermfg=246 ctermbg=NONE cterm=NONE + hi PreProc ctermfg=94 ctermbg=NONE cterm=NONE + hi Constant ctermfg=130 ctermbg=NONE cterm=NONE + hi String ctermfg=28 ctermbg=NONE cterm=NONE + hi Character ctermfg=22 ctermbg=NONE cterm=NONE + hi Identifier ctermfg=30 ctermbg=NONE cterm=NONE + hi Statement ctermfg=90 ctermbg=NONE cterm=NONE + hi Type ctermfg=25 ctermbg=NONE cterm=NONE + hi Special ctermfg=66 ctermbg=NONE cterm=NONE + hi Underlined ctermfg=25 ctermbg=NONE cterm=underline + hi Title ctermfg=94 ctermbg=NONE cterm=bold + hi Directory ctermfg=25 ctermbg=NONE cterm=bold + hi Conceal ctermfg=241 ctermbg=NONE cterm=NONE + hi Ignore ctermfg=NONE ctermbg=NONE cterm=NONE + hi Debug ctermfg=66 ctermbg=NONE cterm=NONE + hi DiffAdd ctermfg=16 ctermbg=151 cterm=NONE + hi DiffChange ctermfg=16 ctermbg=187 cterm=NONE + hi DiffText ctermfg=16 ctermbg=152 cterm=NONE + hi DiffDelete ctermfg=16 ctermbg=182 cterm=NONE + unlet s:t_Co + finish +endif + +if s:t_Co >= 16 + hi Normal ctermfg=black ctermbg=white cterm=NONE + hi Terminal ctermfg=black ctermbg=white cterm=NONE + hi Statusline ctermfg=white ctermbg=darkgrey cterm=NONE + hi StatuslineTerm ctermfg=white ctermbg=darkgrey cterm=NONE + hi VertSplit ctermfg=grey ctermbg=grey cterm=NONE + hi TabLine ctermfg=NONE ctermbg=grey cterm=NONE + hi TabLineFill ctermfg=NONE ctermbg=grey cterm=NONE + hi TabLineSel ctermfg=black ctermbg=white cterm=NONE + hi ToolbarLine ctermfg=NONE ctermbg=NONE cterm=NONE + hi ToolbarButton ctermfg=black ctermbg=grey cterm=NONE + hi QuickFixLine ctermfg=black ctermbg=yellow cterm=NONE + hi CursorLineNr ctermfg=red ctermbg=NONE cterm=bold + hi LineNr ctermfg=grey ctermbg=NONE cterm=NONE + hi LineNrAbove ctermfg=grey ctermbg=NONE cterm=NONE + hi LineNrBelow ctermfg=grey ctermbg=NONE cterm=NONE + hi NonText ctermfg=grey ctermbg=NONE cterm=NONE + hi FoldColumn ctermfg=grey ctermbg=NONE cterm=NONE + hi EndOfBuffer ctermfg=grey ctermbg=NONE cterm=NONE + hi SpecialKey ctermfg=grey ctermbg=NONE cterm=NONE + hi Pmenu ctermfg=NONE ctermbg=grey cterm=NONE + hi PmenuThumb ctermfg=NONE ctermbg=grey cterm=NONE + hi PmenuSbar ctermfg=NONE ctermbg=NONE cterm=NONE + hi PmenuSel ctermfg=black ctermbg=yellow cterm=NONE + hi SignColumn ctermfg=NONE ctermbg=NONE cterm=NONE + hi Error ctermfg=darkred ctermbg=white cterm=reverse + hi ErrorMsg ctermfg=darkred ctermbg=white cterm=reverse + hi ModeMsg ctermfg=black ctermbg=yellow cterm=NONE + hi MoreMsg ctermfg=darkgreen ctermbg=NONE cterm=NONE + hi Question ctermfg=darkyellow ctermbg=NONE cterm=NONE + hi WarningMsg ctermfg=red ctermbg=NONE cterm=NONE + hi Todo ctermfg=yellow ctermbg=black cterm=reverse + hi Search ctermfg=white ctermbg=darkgreen cterm=NONE + hi IncSearch ctermfg=white ctermbg=red cterm=NONE + hi CurSearch ctermfg=white ctermbg=darkyellow cterm=NONE + hi WildMenu ctermfg=black ctermbg=yellow cterm=NONE + hi debugPC ctermfg=white ctermbg=darkblue cterm=NONE + hi debugBreakpoint ctermfg=white ctermbg=darkred cterm=NONE + hi Visual ctermfg=white ctermbg=darkcyan cterm=NONE + hi MatchParen ctermfg=darkcyan ctermbg=white cterm=reverse + hi StatuslineNC ctermfg=black ctermbg=grey cterm=NONE + hi StatuslineTermNC ctermfg=black ctermbg=grey cterm=NONE + hi VisualNOS ctermfg=black ctermbg=darkcyan cterm=NONE + hi CursorLine ctermfg=NONE ctermbg=NONE cterm=underline + hi CursorColumn ctermfg=black ctermbg=yellow cterm=NONE + hi Folded ctermfg=black ctermbg=darkyellow cterm=NONE + hi ColorColumn ctermfg=black ctermbg=darkyellow cterm=NONE + hi SpellBad ctermfg=darkred ctermbg=NONE cterm=underline + hi SpellCap ctermfg=darkblue ctermbg=NONE cterm=underline + hi SpellLocal ctermfg=darkgreen ctermbg=NONE cterm=underline + hi SpellRare ctermfg=darkmagenta ctermbg=NONE cterm=underline + hi Comment ctermfg=darkgrey ctermbg=NONE cterm=NONE + hi PreProc ctermfg=blue ctermbg=NONE cterm=NONE + hi Constant ctermfg=red ctermbg=NONE cterm=NONE + hi String ctermfg=darkgreen ctermbg=NONE cterm=NONE + hi Character ctermfg=darkgreen ctermbg=NONE cterm=NONE + hi Identifier ctermfg=blue ctermbg=NONE cterm=NONE + hi Statement ctermfg=darkmagenta ctermbg=NONE cterm=NONE + hi Type ctermfg=darkblue ctermbg=NONE cterm=NONE + hi Special ctermfg=darkcyan ctermbg=NONE cterm=NONE + hi Underlined ctermfg=darkblue ctermbg=NONE cterm=underline + hi Title ctermfg=darkyellow ctermbg=NONE cterm=bold + hi Directory ctermfg=darkblue ctermbg=NONE cterm=bold + hi Conceal ctermfg=darkgrey ctermbg=NONE cterm=NONE + hi Ignore ctermfg=NONE ctermbg=NONE cterm=NONE + hi Debug ctermfg=darkcyan ctermbg=NONE cterm=NONE + hi DiffAdd ctermfg=black ctermbg=green cterm=NONE + hi DiffChange ctermfg=black ctermbg=yellow cterm=NONE + hi DiffText ctermfg=black ctermbg=cyan cterm=NONE + hi DiffDelete ctermfg=black ctermbg=magenta cterm=NONE + unlet s:t_Co + finish +endif + +if s:t_Co >= 0 + hi Normal term=NONE + hi ColorColumn term=reverse + hi Conceal term=NONE + hi Cursor term=reverse + hi CursorColumn term=NONE + hi CursorLine term=underline + hi CursorLineNr term=bold + hi DiffAdd term=reverse + hi DiffChange term=NONE + hi DiffDelete term=reverse + hi DiffText term=reverse + hi Directory term=NONE + hi EndOfBuffer term=NONE + hi ErrorMsg term=bold,reverse + hi FoldColumn term=NONE + hi Folded term=NONE + hi IncSearch term=bold,reverse,underline + hi LineNr term=NONE + hi MatchParen term=bold,underline + hi ModeMsg term=bold + hi MoreMsg term=NONE + hi NonText term=NONE + hi Pmenu term=reverse + hi PmenuSbar term=reverse + hi PmenuSel term=bold + hi PmenuThumb term=NONE + hi Question term=standout + hi Search term=reverse + hi SignColumn term=reverse + hi SpecialKey term=bold + hi SpellBad term=underline + hi SpellCap term=underline + hi SpellLocal term=underline + hi SpellRare term=underline + hi StatusLine term=bold,reverse + hi StatusLineNC term=bold,underline + hi TabLine term=bold,underline + hi TabLineFill term=NONE + hi Terminal term=NONE + hi TabLineSel term=bold,reverse + hi Title term=NONE + hi VertSplit term=NONE + hi Visual term=reverse + hi VisualNOS term=NONE + hi WarningMsg term=standout + hi WildMenu term=bold + hi CursorIM term=NONE + hi ToolbarLine term=reverse + hi ToolbarButton term=bold,reverse + hi Comment term=bold + hi Constant term=NONE + hi Error term=bold,reverse + hi Identifier term=NONE + hi Ignore term=NONE + hi PreProc term=NONE + hi Special term=NONE + hi Statement term=NONE + hi Todo term=bold,reverse + hi Type term=NONE + hi Underlined term=underline + unlet s:t_Co + finish +endif + +" Background: light +" Color: color00 #000000 16 black +" Color: color08 #626262 241 darkgrey +" Color: color01 #AF0000 124 darkred +" Color: color09 #AF5F00 130 red +" Color: color02 #005F00 22 darkgreen +" Color: color10 #008700 28 darkgreen +" Color: color03 #875F00 94 darkyellow +" Color: color11 #D7D787 186 yellow +" Color: color04 #005FAF 25 darkblue +" Color: color12 #5F87AF 67 blue +" Color: color05 #870087 90 darkmagenta +" Color: color13 #AF5FAF 133 darkmagenta +" Color: color06 #008787 30 blue +" Color: color14 #5F8787 66 darkcyan +" Color: color07 #949494 246 grey +" Color: color15 #F6F6EF 231 white +" Color: colorLine #EBECE5 254 grey +" Color: colorB #EFEFE7 255 grey +" Color: colorNonT #B2B2B2 249 grey +" Color: colorC #D7005F 161 red +" Color: colorlC #0000FF 21 blue +" Color: colorV #DAEFFF 67 darkcyan +" Color: colorMP #DAF7DA 30 darkcyan +" Term colors: color00 color01 color02 color03 color04 color05 color06 color07 +" Term colors: color08 color09 color10 color11 color12 color13 color14 color15 +" Color: bgDiffA #CFE4CF 151 green +" Color: bgDiffD #E4CFE4 182 magenta +" Color: bgDiffC #E7E0CA 187 yellow +" Color: bgDiffT #BFE4E4 152 cyan +" Color: fgDiff #000000 16 black +" vim: et ts=2 sw=2 diff --git a/colors/myquiet.lua b/colors/myquiet.lua new file mode 100644 index 0000000..9604e29 --- /dev/null +++ b/colors/myquiet.lua @@ -0,0 +1,133 @@ +local minicol = require("mini.colors") + +local cs = minicol.get_colorscheme("mytorte") + +vim.print(cs:get_palette({ threshold = 0 })) + + +-- local replace_color = function(from, to) +-- return cs:color_modify(function(hex, _) +-- if hex == from then return to end +-- return hex +-- end) +-- end +-- +-- local make_normal = function(grps) +-- for _, grp in ipairs(grps) do +-- cs.groups[grp].link = nil +-- cs.groups[grp].fg = cs.groups.Normal.fg +-- end +-- end +-- +-- cs = cs:chan_multiply("saturation", .8, { filter = "fg" }) +-- :add_transparency({ general = true, statuscolumn = true }) +-- +-- cs.groups.TabLineFill.reverse = false +-- cs.groups.StatusLine.bold = false +-- cs.groups.CursorLineNr.bg = nil +-- cs.groups.CursorLine = { } +-- cs.groups.CursorLineSign.bg = nil +-- cs.groups.StatusLine.bg = "#364e81" +-- +-- local nice_yellow = cs.groups.Statement.fg +-- +-- make_normal({ "Identifier", "Statement" }) +-- +-- for _, grp in ipairs({ "Conditional", "Repeat", "Label", "Operator", "Keyword", "Exception" }) do +-- cs.groups[grp].link = nil +-- cs.groups[grp].fg = nice_yellow +-- end +-- +-- +-- cs.groups.CurSearch = { fg = "#000000", bg = "#fce094" } +-- cs.groups.IncSearch = { link = "CurSearch" } +-- cs.groups.Search = { fg = "#cccccc", bg = "#6b5300" } +-- +-- -- cs.groups.Cursor = { bg = "#cccccc", fg = "#000000" } +-- +-- -- cs = replace_color("#92f6f5", "#cccccc") +-- -- cs = replace_color("#efa9a8", "#6eb167") +-- -- cs = replace_color("#fdfe83", "#ad7fa8") +-- -- cs = replace_color("#f4aa48", "#729fcf") +-- +-- cs = cs:compress():resolve_links():add_terminal_colors():add_cterm_attributes() +-- +-- cs:apply() +-- cs:write() + +-- local fg_colors = { +-- ["#000000"] = { "WildMenu", "DiffText", "lCursor", "Ignore", "Cursor", "ToolbarButton", "Visual", "PmenuSel", "StatusLineNC", "StatusLineTermNC", "VertSplit", "@markup.heading.1.delimiter.vimdoc", "@markup.heading.2.delimiter.vimdoc", "QuickFixLine" }, +-- ["#0032e4"] = { "EndOfBuffer", "NonText" }, +-- ["#4b92e3"] = { "Changed" }, +-- ["#4dc747"] = { "IncSearch" }, +-- ["#558365"] = { "MoreMsg" }, +-- ["#5af953"] = { "Question" }, +-- ["#5dc759"] = { "Added" }, +-- ["#5f67e3"] = { "SpellCap" }, +-- ["#666666"] = { "Conceal" }, +-- ["#71c4c3"] = { "Folded" }, +-- ["#7f7f7f"] = { "LineNr" }, +-- ["#84f6f5"] = { "SpecialKey", "SpellRare", "FoldColumn", "SignColumn", "Directory" }, +-- ["#84f880"] = { "Type" }, +-- ["#8da3e1"] = { "Underlined", "Comment" }, +-- ["#92f6f5"] = { "Identifier" }, +-- ["#a9e6a8"] = { "DiagnosticOk" }, +-- ["#cccccc"] = { "ColorColumn", "Pmenu", "TabLineSel", "Normal" }, +-- ["#ccedd2"] = { "OkMsg" }, +-- ["#d0d0d0"] = { "MiniHipatternsTodo", "DiagnosticInfo" }, +-- ["#d3d3d3"] = { "MiniHipatternsNote", "DiagnosticHint" }, +-- ["#e5aead"] = { "Constant" }, +-- ["#ec4334"] = { "MiniHipatternsFixme", "Search", "Removed", "WarningMsg", "SpellBad", "NvimInternalError", "DiagnosticError" }, +-- ["#ecad5f"] = { "MiniHipatternsHack", "Special", "DiagnosticWarn" }, +-- ["#f091ef"] = { "PreProc" }, +-- ["#f245f1"] = { "SpellLocal", "PmenuMatch", "PmenuMatchSel", "Title" }, +-- ["#fcfd96"] = { "Statement" }, +-- ["#fcfe72"] = { "Todo", "CursorLineNr" }, +-- ["#ffffff"] = { "Error", "DiffAdd", "DiffChange", "DiffDelete", "StatusLine", "StatusLineTerm", "ErrorMsg", "TabLine" } +-- } +-- local bg_colors = { +-- ["#000000"] = { "FloatShadowThrough", "VisualNOS", "FloatShadow", "ToolbarLine", "Search", "Ignore", "Todo", "TabLineFill", "TabLineSel", "@markup.heading.1.delimiter.vimdoc", "@markup.heading.2.delimiter.vimdoc", "Normal", "IncSearch" }, +-- ["#012fd3"] = { "StatusLine", "StatusLineTerm" }, +-- ["#303030"] = { "PmenuMatch", "Pmenu" }, +-- ["#367b32"] = { "RedrawDebugComposed" }, +-- ["#3a3a3a"] = { "Folded" }, +-- ["#578382"] = { "MatchParen" }, +-- ["#5af953"] = { "Cursor" }, +-- ["#666666"] = { "CursorColumn", "CursorLineNr", "CursorLine" }, +-- ["#727f72"] = { "DiffAdd" }, +-- ["#788592"] = { "DiffChange" }, +-- ["#792920"] = { "ColorColumn" }, +-- ["#7f7f7f"] = { "TabLine" }, +-- ["#a16da0"] = { "DiffDelete" }, +-- ["#a9a9a9"] = { "Visual" }, +-- ["#ba382c"] = { "ErrorMsg" }, +-- ["#bebebe"] = { "PmenuThumb" }, +-- ["#c6c6c6"] = { "DiffText" }, +-- ["#cacc62"] = { "QuickFixLine" }, +-- ["#cccccc"] = { "CursorIM" }, +-- ["#e5e5e5"] = { "lCursor", "ToolbarButton", "StatusLineNC", "StatusLineTermNC", "VertSplit" }, +-- ["#ec4334"] = { "Error", "RedrawDebugRecompose", "NvimInternalError" }, +-- ["#fcfe72"] = { "RedrawDebugClear", "WildMenu", "PmenuMatchSel", "PmenuSel" } +-- } + +local color_to_grp = {} +cs:color_modify(function(hex, data) + if data.attr == "fg" then + if color_to_grp[hex] == nil then + color_to_grp[hex] = {} + end + vim.list_extend(color_to_grp[hex], { data.name }) + end +end) +vim.print(color_to_grp) +-- +-- local color_to_grp = {} +-- cs:color_modify(function(hex, data) +-- if data.attr == "bg" then +-- if color_to_grp[hex] == nil then +-- color_to_grp[hex] = {} +-- end +-- vim.list_extend(color_to_grp[hex], { data.name }) +-- end +-- end) +-- vim.print(color_to_grp) diff --git a/colors/mytorte.lua b/colors/mytorte.lua new file mode 100644 index 0000000..f323c58 --- /dev/null +++ b/colors/mytorte.lua @@ -0,0 +1,205 @@ +-- Made with 'mini.colors' module of https://nvim-mini.org/mini.nvim + +if vim.g.colors_name ~= nil then vim.cmd('highlight clear') end +vim.g.colors_name = "mytorte" + +-- Highlight groups +local hi = vim.api.nvim_set_hl + +hi(0, "@attribute.builtin", { ctermfg = 215, fg = "#f2ab4f" }) +hi(0, "@character.special", { link = "SpecialChar" }) +hi(0, "@comment.todo", { bg = "#000000", ctermbg = 16, ctermfg = 227, fg = "#fcfe68", reverse = true }) +hi(0, "@constant.builtin", { ctermfg = 215, fg = "#f2ab4f" }) +hi(0, "@constant.macro", { link = "Define" }) +hi(0, "@function.builtin", { ctermfg = 215, fg = "#f2ab4f" }) +hi(0, "@function.macro", { link = "Macro" }) +hi(0, "@function.method", { ctermfg = 252, fg = "#cccccc" }) +hi(0, "@keyword.conditional", { link = "Conditional" }) +hi(0, "@keyword.debug", { link = "Debug" }) +hi(0, "@keyword.directive", { ctermfg = 213, fg = "#f38ff2" }) +hi(0, "@keyword.exception", { link = "Exception" }) +hi(0, "@keyword.import", { link = "Include" }) +hi(0, "@keyword.repeat", { link = "Repeat" }) +hi(0, "@keyword.type", { link = "Structure" }) +hi(0, "@lsp.mod.deprecated", {}) +hi(0, "@lsp.type.class", {}) +hi(0, "@lsp.type.comment", {}) +hi(0, "@lsp.type.decorator", {}) +hi(0, "@lsp.type.enum", {}) +hi(0, "@lsp.type.enumMember", {}) +hi(0, "@lsp.type.event", {}) +hi(0, "@lsp.type.function", {}) +hi(0, "@lsp.type.interface", {}) +hi(0, "@lsp.type.keyword", {}) +hi(0, "@lsp.type.macro", {}) +hi(0, "@lsp.type.method", {}) +hi(0, "@lsp.type.modifier", {}) +hi(0, "@lsp.type.namespace", {}) +hi(0, "@lsp.type.number", {}) +hi(0, "@lsp.type.operator", {}) +hi(0, "@lsp.type.parameter", {}) +hi(0, "@lsp.type.property", {}) +hi(0, "@lsp.type.regexp", {}) +hi(0, "@lsp.type.string", {}) +hi(0, "@lsp.type.struct", {}) +hi(0, "@lsp.type.type", {}) +hi(0, "@lsp.type.typeParameter", {}) +hi(0, "@lsp.type.variable", {}) +hi(0, "@markup.heading", { bold = true, ctermfg = 207, fg = "#ee4eed" }) +hi(0, "@markup.heading.1.delimiter.vimdoc", { bg = "#000000", ctermbg = 16, ctermfg = 16, fg = "#000000", nocombine = true, sp = "#cccccc", underdouble = true }) +hi(0, "@markup.heading.2.delimiter.vimdoc", { bg = "#000000", ctermbg = 16, ctermfg = 16, fg = "#000000", nocombine = true, sp = "#cccccc", underline = true }) +hi(0, "@markup.link", { ctermfg = 252, fg = "#cccccc" }) +hi(0, "@markup.link.url", { ctermfg = 111, fg = "#87a2ee", underline = true }) +hi(0, "@markup.raw", { ctermfg = 111, fg = "#87a2ee" }) +hi(0, "@markup.underline", { ctermfg = 111, fg = "#87a2ee", underline = true }) +hi(0, "@module", { ctermfg = 252, fg = "#cccccc" }) +hi(0, "@number.float", { link = "Float" }) +hi(0, "@string.escape", { link = "SpecialChar" }) +hi(0, "@string.special", { link = "SpecialChar" }) +hi(0, "@tag.builtin", { ctermfg = 215, fg = "#f2ab4f" }) +hi(0, "@type.definition", { link = "Typedef" }) +hi(0, "@variable", { ctermfg = 252, fg = "#cccccc" }) +hi(0, "@variable.member", { ctermfg = 252, fg = "#cccccc" }) +hi(0, "@variable.parameter", { ctermfg = 252, fg = "#cccccc" }) +hi(0, "@variable.parameter.builtin", { ctermfg = 215, fg = "#f2ab4f" }) +hi(0, "Added", { ctermfg = 77, fg = "#5ac756" }) +hi(0, "Changed", { ctermfg = 68, fg = "#4392e9" }) +hi(0, "ColorColumn", { bg = "#8b0000", ctermbg = 88, ctermfg = 252, fg = "#cccccc" }) +hi(0, "Comment", { ctermfg = 111, fg = "#87a2ee" }) +hi(0, "Conceal", { ctermfg = 241, fg = "#666666" }) +hi(0, "Constant", { ctermfg = 217, fg = "#f3a7a6" }) +hi(0, "CurSearch", { bg = "#fce094", ctermbg = 222, ctermfg = 16, fg = "#000000" }) +hi(0, "Cursor", { bg = "#00ff00", bold = true, ctermbg = 46, ctermfg = 16, fg = "#000000" }) +hi(0, "CursorColumn", { bg = "#666666", ctermbg = 241 }) +hi(0, "CursorIM", { bg = "#cccccc", ctermbg = 252 }) +hi(0, "CursorLine", {}) +hi(0, "CursorLineFold", {}) +hi(0, "CursorLineNr", { ctermbg = 242, ctermfg = 227, fg = "#fcfe68" }) +hi(0, "CursorLineSign", {}) +hi(0, "Delimiter", { ctermfg = 215, fg = "#f2ab4f" }) +hi(0, "DiagnosticDeprecated", { sp = "#ff0000", strikethrough = true }) +hi(0, "DiagnosticError", { ctermfg = 196, fg = "#eb4435" }) +hi(0, "DiagnosticHint", { ctermfg = 252, fg = "#d3d3d3" }) +hi(0, "DiagnosticInfo", { ctermfg = 152, fg = "#b4d6e2" }) +hi(0, "DiagnosticOk", { ctermfg = 157, fg = "#a0e99f" }) +hi(0, "DiagnosticSignError", { ctermfg = 196, fg = "#eb4435" }) +hi(0, "DiagnosticSignHint", { ctermfg = 252, fg = "#d3d3d3" }) +hi(0, "DiagnosticSignInfo", { ctermfg = 152, fg = "#b4d6e2" }) +hi(0, "DiagnosticSignOk", { ctermfg = 157, fg = "#a0e99f" }) +hi(0, "DiagnosticSignWarn", { ctermfg = 215, fg = "#f2ab4f" }) +hi(0, "DiagnosticUnderlineError", { sp = "#ff0000", underline = true }) +hi(0, "DiagnosticUnderlineHint", { sp = "#d3d3d3", underline = true }) +hi(0, "DiagnosticUnderlineInfo", { sp = "#add8e6", underline = true }) +hi(0, "DiagnosticUnderlineOk", { sp = "#90ee90", underline = true }) +hi(0, "DiagnosticUnderlineWarn", { sp = "#ffa500", underline = true }) +hi(0, "DiagnosticWarn", { ctermfg = 215, fg = "#f2ab4f" }) +hi(0, "DiffAdd", { bg = "#5f875f", ctermbg = 65, ctermfg = 231, fg = "#ffffff" }) +hi(0, "DiffChange", { bg = "#5f87af", ctermbg = 67, ctermfg = 231, fg = "#ffffff" }) +hi(0, "DiffDelete", { bg = "#af5faf", ctermbg = 133, ctermfg = 231, fg = "#ffffff" }) +hi(0, "DiffText", { bg = "#c6c6c6", ctermbg = 251, ctermfg = 16, fg = "#000000" }) +hi(0, "Directory", { ctermfg = 87, fg = "#69f9f9" }) +hi(0, "EndOfBuffer", { blend = 0, bold = true, ctermfg = 21, fg = "#0437dd" }) +hi(0, "Error", { bg = "#ff0000", ctermbg = 196, ctermfg = 231, fg = "#ffffff" }) +hi(0, "ErrorMsg", { blend = 0, ctermfg = 231, fg = "#ffffff" }) +hi(0, "FloatBorder", { blend = 0, ctermfg = 16, fg = "#000000" }) +hi(0, "FloatFooter", { bold = true, ctermfg = 207, fg = "#ee4eed" }) +hi(0, "FloatShadow", { bg = "#000000", blend = 80, ctermbg = 16 }) +hi(0, "FloatShadowThrough", { bg = "#000000", blend = 100, ctermbg = 16 }) +hi(0, "FoldColumn", { blend = 0, ctermfg = 87, fg = "#69f9f9" }) +hi(0, "Folded", { bg = "#3a3a3a", ctermbg = 237, ctermfg = 80, fg = "#53c8c8" }) +hi(0, "Function", { ctermfg = 252, fg = "#cccccc" }) +hi(0, "Identifier", { ctermfg = 252, fg = "#cccccc" }) +hi(0, "Ignore", { bg = "#000000", ctermbg = 16, ctermfg = 16, fg = "#000000" }) +hi(0, "LineNr", { blend = 0, ctermfg = 244, fg = "#7f7f7f" }) +hi(0, "LineNrAbove", { blend = 0, ctermfg = 244, fg = "#7f7f7f" }) +hi(0, "LineNrBelow", { blend = 0, ctermfg = 244, fg = "#7f7f7f" }) +hi(0, "MatchParen", { bg = "#008b8b", ctermbg = 30 }) +hi(0, "MessageWindow", { bg = "#303030", ctermbg = 236, ctermfg = 252, fg = "#cccccc" }) +hi(0, "MiniHipatternsFixme", { bold = true, ctermfg = 196, fg = "#eb4435", reverse = true }) +hi(0, "MiniHipatternsHack", { bold = true, ctermfg = 215, fg = "#f2ab4f", reverse = true }) +hi(0, "MiniHipatternsNote", { bold = true, ctermfg = 252, fg = "#d3d3d3", reverse = true }) +hi(0, "MiniHipatternsTodo", { bold = true, ctermfg = 152, fg = "#b4d6e2", reverse = true }) +hi(0, "MiniSnippetsCurrent", { sp = "#ffa500", underdouble = true }) +hi(0, "MiniSnippetsCurrentReplace", { sp = "#ff0000", underdouble = true }) +hi(0, "MiniSnippetsFinal", { sp = "#90ee90", underdouble = true }) +hi(0, "MiniSnippetsUnvisited", { sp = "#d3d3d3", underdouble = true }) +hi(0, "MiniSnippetsVisited", { sp = "#add8e6", underdouble = true }) +hi(0, "ModeMsg", { blend = 0, bold = true }) +hi(0, "MoreMsg", { blend = 0, bold = true, ctermfg = 65, fg = "#44875e" }) +hi(0, "MsgArea", { blend = 0 }) +hi(0, "MsgSeparator", { bg = "#364e81", bold = false, ctermbg = 24, ctermfg = 231, fg = "#ffffff" }) +hi(0, "NonText", { bold = true, ctermfg = 21, fg = "#0437dd" }) +hi(0, "Normal", { blend = 0, ctermfg = 252, fg = "#cccccc" }) +hi(0, "NormalFloat", { bg = "#303030", ctermbg = 236, ctermfg = 252, fg = "#cccccc" }) +hi(0, "NormalNC", { blend = 0 }) +hi(0, "NvimInternalError", { bg = "#ff0000", ctermbg = 196, ctermfg = 196, fg = "#eb4435" }) +hi(0, "OkMsg", { blend = 0, ctermfg = 158, fg = "#bef2c7" }) +hi(0, "Operator", { ctermfg = 228, fg = "#fdfe88" }) +hi(0, "Pmenu", { bg = "#303030", ctermbg = 236, ctermfg = 252, fg = "#cccccc" }) +hi(0, "PmenuMatch", { bg = "#303030", ctermbg = 236, ctermfg = 207, fg = "#ee4eed" }) +hi(0, "PmenuMatchSel", { bg = "#ffff00", ctermbg = 226, ctermfg = 207, fg = "#ee4eed" }) +hi(0, "PmenuSbar", {}) +hi(0, "PmenuSel", { bg = "#ffff00", ctermbg = 226, ctermfg = 16, fg = "#000000" }) +hi(0, "PmenuThumb", { bg = "#bebebe", ctermbg = 250 }) +hi(0, "PopupNotification", { bg = "#000000", ctermbg = 16, ctermfg = 227, fg = "#fcfe68", reverse = true }) +hi(0, "PopupSelected", { bg = "#ffff00", ctermbg = 226, ctermfg = 16, fg = "#000000" }) +hi(0, "PreProc", { ctermfg = 213, fg = "#f38ff2" }) +hi(0, "Question", { bold = true, ctermfg = 83, fg = "#62f85a" }) +hi(0, "QuickFixLine", { bg = "#cdcd00", ctermbg = 184, ctermfg = 16, fg = "#000000" }) +hi(0, "RedrawDebugClear", { bg = "#ffff00", ctermbg = 226 }) +hi(0, "RedrawDebugComposed", { bg = "#008000", ctermbg = 28 }) +hi(0, "RedrawDebugRecompose", { bg = "#ff0000", ctermbg = 196 }) +hi(0, "Removed", { ctermfg = 196, fg = "#eb4435" }) +hi(0, "Search", { bg = "#6b5300", ctermbg = 58, ctermfg = 252, fg = "#cccccc" }) +hi(0, "SignColumn", { blend = 0, ctermfg = 87, fg = "#69f9f9" }) +hi(0, "Special", { ctermfg = 215, fg = "#f2ab4f" }) +hi(0, "SpecialKey", { ctermfg = 87, fg = "#69f9f9" }) +hi(0, "SpellBad", { ctermfg = 196, fg = "#eb4435", sp = "#ff0000", undercurl = true }) +hi(0, "SpellCap", { ctermfg = 62, fg = "#5f67e5", sp = "#5c5cff", undercurl = true }) +hi(0, "SpellLocal", { ctermfg = 207, fg = "#ee4eed", sp = "#ff00ff", undercurl = true }) +hi(0, "SpellRare", { ctermfg = 87, fg = "#69f9f9", sp = "#00ffff", undercurl = true }) +hi(0, "Statement", { ctermfg = 228, fg = "#fdfe88" }) +hi(0, "StatusLine", { bg = "#364e81", bold = false, ctermbg = 24, ctermfg = 231, fg = "#ffffff" }) +hi(0, "StatusLineNC", { bg = "#e5e5e5", ctermbg = 254, ctermfg = 16, fg = "#000000" }) +hi(0, "StatusLineTerm", { bg = "#0000ee", bold = true, ctermbg = 21, ctermfg = 231, fg = "#ffffff" }) +hi(0, "StatusLineTermNC", { bg = "#e5e5e5", ctermbg = 254, ctermfg = 16, fg = "#000000" }) +hi(0, "StderrMsg", { blend = 0, ctermfg = 231, fg = "#ffffff" }) +hi(0, "StdoutMsg", { blend = 0 }) +hi(0, "String", { ctermfg = 217, fg = "#f3a7a6" }) +hi(0, "TabLine", { bg = "#7f7f7f", ctermbg = 244, ctermfg = 231, fg = "#ffffff" }) +hi(0, "TabLineFill", { bg = "#000000", ctermbg = 16, reverse = false }) +hi(0, "TabLineSel", { bg = "#000000", bold = true, ctermbg = 16, ctermfg = 252, fg = "#cccccc" }) +hi(0, "Terminal", { blend = 0, ctermfg = 252, fg = "#cccccc" }) +hi(0, "Title", { bold = true, ctermfg = 207, fg = "#ee4eed" }) +hi(0, "Todo", { bg = "#000000", ctermbg = 16, ctermfg = 227, fg = "#fcfe68", reverse = true }) +hi(0, "ToolbarButton", { bg = "#e5e5e5", bold = true, ctermbg = 254, ctermfg = 16, fg = "#000000" }) +hi(0, "ToolbarLine", { bg = "#000000", ctermbg = 16 }) +hi(0, "Type", { ctermfg = 120, fg = "#83f87f" }) +hi(0, "Underlined", { ctermfg = 111, fg = "#87a2ee", underline = true }) +hi(0, "VertSplit", { blend = 0, ctermfg = 16, fg = "#000000" }) +hi(0, "Visual", { bg = "#a9a9a9", bold = true, ctermbg = 248, ctermfg = 16, fg = "#000000" }) +hi(0, "VisualNOS", { bg = "#000000", bold = true, ctermbg = 16, underline = true }) +hi(0, "WarningMsg", { blend = 0, ctermfg = 196, fg = "#eb4435" }) +hi(0, "WildMenu", { bg = "#ffff00", ctermbg = 226, ctermfg = 16, fg = "#000000" }) +hi(0, "WinBar", { bold = true }) +hi(0, "WinBarNC", { bold = true }) +hi(0, "WinSeparator", { blend = 0, ctermfg = 16, fg = "#000000" }) +hi(0, "lCursor", { bg = "#e5e5e5", ctermbg = 254, ctermfg = 16, fg = "#000000" }) + +-- Terminal colors +local g = vim.g + +g.terminal_color_1 = "#f3a7a6" +g.terminal_color_2 = "#a0e99f" +g.terminal_color_3 = "#cdcd00" +g.terminal_color_4 = "#87a2ee" +g.terminal_color_5 = "#f38ff2" +g.terminal_color_6 = "#add8e6" +g.terminal_color_7 = "#cccccc" +g.terminal_color_9 = "#f3a7a6" +g.terminal_color_10 = "#a0e99f" +g.terminal_color_11 = "#cdcd00" +g.terminal_color_12 = "#87a2ee" +g.terminal_color_13 = "#f38ff2" +g.terminal_color_14 = "#add8e6" +g.terminal_color_15 = "#cccccc" diff --git a/colors/notsoquiet.lua b/colors/notsoquiet.lua new file mode 100644 index 0000000..f87ae7b --- /dev/null +++ b/colors/notsoquiet.lua @@ -0,0 +1,132 @@ +vim.o.background = "dark" +vim.cmd.source("$VIMRUNTIME/colors/quiet.vim") +vim.g.colors_name = "notsoquiet" + +local hi = function(name, val) + val.force = true + val.cterm = val.cterm or {} + vim.api.nvim_set_hl(0, name, val) +end + +local c = { + bg = "#1e1e1e", + bg1 = "#303030", + bg2 = "#222222", + fg = "#cccccc", + fg1 = "#eeeeee", + + green = "#22ee55", + darkgreen = "#6eb167", + darkgreen1 = "#59cb4d", + magenta = "#b1a0f8", + orange = "#ff894c", + olive = "#aaaa77", + red = "#ff8080", + blue = "#6688ff", + blue1 = "#729fcf", + darkblue = "#364e81", + yellow = "#ffff00", + darkyellow = "#cdcd00", + pink = "#d7005f", +} + +hi("Normal", { bg = c.bg, fg = c.fg }) +hi("NormalFloat", { bg = "#272727", fg = c.fg }) + +hi("String", { fg = c.green }) + +hi("Keyword", { fg = c.fg1, bold = true }) +hi("Conditional", { link = "Keyword" }) +hi("Repeat", { link = "Keyword" }) +hi("Macro", { link = "Keyword" }) +hi("Define", { link = "Keyword" }) + +hi("Function", { fg = c.magenta, bold = true }) +hi("@function", { link = "Function" }) + +hi("@function.builtin", { fg = c.orange }) + +hi("@function.call", { link = "Normal" }) + +hi("Comment", { fg = c.olive, italic = false }) + +hi("Number", { fg = c.red }) +hi("Constant", { link = "Number" }) +hi("@constant", { link = "Constant" }) +hi("@constant.builtin", { link = "Number" }) + +hi("Type", { fg = c.blue }) + +hi("@markup.link", { fg = c.blue1 }) +hi("Directory", { fg = c.blue1 }) + +hi("PmenuSel", { bg = c.yellow }) +hi("PmenuMatch", { fg = c.pink }) +hi("PmenuMatchSel", { fg = c.pink, bg = c.yellow, bold = true }) +hi("PmenuKind", {}) +hi("PmenuKindSel", { bg = c.yellow }) +hi("PmenuExtraSel", { bg = c.yellow }) +hi("CmpItemAbbrMatch", { fg = c.pink, bold = true }) +hi("CmpItemAbbrMatchFuzzy", { fg = c.pink, bold = false }) + +hi("Title", { fg = c.darkgreen1, bold = true }) +hi("texCmd", { link = "Function" }) +hi("texEnvCmd", { link = "texCmd" }) +hi("texMathCmd", { link = "Number" }) +hi("texMathDelim", { fg = c.orange }) +hi("texMathSymbol", { link = "Number" }) +hi("texMathDelimZone", { fg = c.fg1, bold = true }) + +hi("StatusLine", { bg = c.darkblue, bold = true, fg = c.fg1 }) + +hi("Todo", { fg = c.yellow, reverse = true, bold = true }) +hi("MiniHipatternsTodo", { link = "Todo" }) + +hi("SpellBad", { sp = c.pink, undercurl = true }) +hi("SpellCap", { sp = "#0087d7", undercurl = true }) +hi("SpellLocal", { sp = "#d787d7", undercurl = true }) +hi("SpellRare", { sp = "#00afaf", undercurl = true }) + +hi("DiffTextAdd", { italic = true }) +hi("DiffAdded", { link = "DiffAdd" }) +hi("@diff.plus", { link = "DiffAdd" }) + +hi("DiffChanged", { link = "DiffChange" }) +hi("@diff.delta", { link = "DiffChange" }) + +hi("DiffRemoved", { link = "DiffDelete" }) +hi("@diff.minus", { link = "DiffDelete" }) + +hi("QuickFixLine", { fg = c.darkyellow, reverse = true }) + +hi("@markup.list.unchecked", { fg = c.red }) +hi("@markup.list.checked", { fg = c.darkgreen }) + +hi("FzfLuaNormal", { bg = c.bg2, fg = c.fg }) +hi("FzfLuaTitle", { bg = c.orange, fg = c.bg }) + +hi("FzfLuaPreviewBorder", { bg = c.darkblue, fg = c.fg }) +hi("FzfLuaPreviewTitle", { bg = c.darkblue, fg = c.fg, bold = true }) + +hi("FzfLuaFzfMatch", { fg = c.red }) +hi("FzfLuaFzfPointer", { fg = c.red }) + +hi("DiagnosticHint", { fg = c.blue }) +hi("DiagnosticUnderlineHint", { sp = c.blue, underline = true }) + +-- hi("Normal", { fg = "#dadada", bg = "None" }) +-- hi("NormalFloat", { fg = "#dadada", bg = "#303030" }) +-- hi("String", { fg = "#6eb167" }) +-- hi("Keyword", { fg = "#ad7fa8" }) +-- hi("Comment", { fg = "#707070" }) +-- hi("Constant", { fg = "#ffdd33" }) +-- hi("StatusLine", { fg = "#dadada", bg = "None", bold = true, cterm = { bold = true } }) +-- hi("StatusLineNC", { fg = "#909090", bg = "#202020" }) +-- hi("Directory", { fg = "#729fcf" }) +-- hi("PreProc", { link = "Keyword" }) +-- hi("Type", { fg = "#729fcf" }) +-- -- to make the links in vimdoc show +-- hi("@markup.link", { fg = "#729fcf" }) +-- +-- -- for my statusline +-- hi("StatusLineLsp", { fg = "#707070", bold = true }) diff --git a/colors/parchment2.lua b/colors/parchment2.lua new file mode 100644 index 0000000..79358f5 --- /dev/null +++ b/colors/parchment2.lua @@ -0,0 +1,257 @@ +--- Source: http//github.com/moreka/parchment2.nvim +--- parchment2 - a Neovim colorscheme inspired by Acme, Leuven, Parchment, and Dookie.nvim +--- Maintainer: Mohammad Reza Karimi <m.r.karimi.j@gmail.com> +--- Version: 0.1.0 +--- License: This file is placed under an MIT license. See the included LICENSE file for details. + +vim.cmd.highlight("clear") +vim.o.background = "light" +vim.g.colors_name = "parchment2" + +-- from $VIMRUNTIME/colors/vim.lua +local hi = function(name, val) + val.force = true + val.cterm = val.cterm or {} + vim.api.nvim_set_hl(0, name, val) +end + +-- stylua: ignore start +-- Color palette +local black = "#000000" +local red = "#880000" +local green = "#005500" +local brown = "#663311" +local blue = "#004488" +local magenta = "#770077" +local cyan = "#007777" +local beige = "#eeeecc" +local pale_gray = "#eaeaea" +local pale_red = "#ffeaea" +local pale_green = "#eaffea" +local yellow = "#eeee9e" +local pale_blue = "#cceeff" +local pale_magenta = "#ffeaff" +local pale_cyan = "#eaffff" +local pale_yellow = "#ffffea" +local shadow = "#808075" +local mustard = "#998800" +local sline = "#aeeeee" -- from Dookie.nvim +local sline_nc = "#eaffff" -- from Dookie.nvim + +hi("Normal", { fg = black, bg = pale_yellow }) +hi("NonText", { fg = cyan, bg = pale_cyan }) +hi("Whitespace", { fg = shadow, bg = nil }) + +hi("Cursor", { fg = pale_yellow, bg = magenta }) +hi("lCursor", { fg = pale_yellow, bg = magenta }) +hi("TermCursor", { fg = nil, bg = nil, reverse = true }) +hi("TermCursorNC", { fg = pale_yellow, bg = cyan }) + +hi("Search", { fg = nil, bg = pale_blue }) +hi("IncSearch", { fg = nil, bg = pale_blue, bold = true }) +hi("CurSearch", { fg = pale_yellow, bg = cyan, bold = true }) +hi("Substitute", { link = "Search" }) + +hi("DiffText", { fg = magenta, bg = pale_magenta, bold = true }) +hi("DiffAdd", { fg = green, bg = pale_green }) +hi("DiffDelete", { fg = red, bg = pale_red }) +hi("DiffChange", { fg = magenta, bg = pale_magenta }) +hi("DiffTextAdd", { link = "DiffText" }) + +hi("ErrorMsg", { fg = pale_yellow, bg = red, bold = true }) +hi("ModeMsg", { fg = nil, bg = nil, bold = true }) +hi("MoreMsg", { fg = nil, bg = nil, bold = true }) +hi("WarningMsg", { fg = mustard, bg = nil }) + +hi("StatusLine", { fg = nil, bg = sline, bold = true }) +hi("StatusLineNC", { fg = shadow, bg = sline_nc }) +hi("TabLine", { fg = nil, bg = pale_gray }) +hi("TabLineSel", { fg = nil, bg = pale_gray, bold = true }) +hi("TabLineFill", { fg = nil, bg = pale_gray }) +hi("WinBar", { fg = nil, bg = nil, bold = true }) +hi("VertSplit", { fg = shadow, bg = nil }) +hi("EndOfBuffer", { fg = shadow, bg = nil }) +hi("FoldColumn", { fg = nil, bg = nil }) +hi("SignColumn", { fg = nil, bg = nil }) +hi("ColorColumn", { fg = nil, bg = pale_red }) +hi("CursorColumn", { fg = nil, bg = beige }) +hi("WinSeparator", { link = "VertSplit" }) +hi("WinBarNC", { link = "WinBar" }) + +hi("WildMenu", { fg = pale_yellow, bg = cyan, bold = true }) +hi("Pmenu", { fg = nil, bg = pale_cyan }) +hi("PmenuSel", { fg = pale_yellow, bg = cyan, bold = true }) +hi("PmenuThumb", { fg = nil, bg = cyan }) +hi("PmenuSbar", { fg = nil, bg = pale_cyan }) +hi("PmenuKind", { link = "Pmenu" }) +hi("PmenuKindSel", { link = "PmenuSel" }) +hi("PmenuMatch", { link = "Pmenu" }) +hi("PmenuMatchSel", { link = "PmenuSel" }) +hi("PmenuExtra", { link = "Pmenu" }) +hi("PmenuExtraSel", { link = "PmenuSel" }) +hi("ComplHint", { link = "NonText" }) +hi("ComplHintMore", { link = "MoreMsg" }) +hi("PreInsert", { link = "Added" }) +hi("ComplMatchIns", {}) + +hi("QuickFixLine", { fg = nil, bg = pale_blue }) + +hi("NormalFloat", { fg = nil, bg = pale_gray }) +hi("FloatShadow", { fg = nil, bg = black, blend = 80 }) +hi("FloatShadowThrough", { fg = nil, bg = black, blend = 100 }) +hi("FloatBorder", { link = "WinSeparator" }) +hi("FloatTitle", { link = "Title" }) +hi("FloatFooter", { link = "Title" }) +hi("MsgSeparator", { link = "StatusLine" }) + +hi("LineNr", { fg = shadow, bg = nil }) +hi("CursorLine", { fg = nil, bg = beige }) +hi("CursorLineNr", { fg = nil, bg = beige, bold = true }) +hi("LineNrAbove", { link = "LineNr" }) +hi("LineNrBelow", { link = "LineNr" }) +hi("CursorLineSign", { bg = beige }) +hi("CursorLineFold", { bg = beige }) + +hi("Error", { fg = red, bg = nil }) +hi("Todo", { fg = blue, bg = nil, bold = true }) + +hi("Constant", { fg = nil, bg = nil }) +hi("Identifier", { fg = nil, bg = nil }) +hi("Ignore", { fg = nil, bg = nil }) +hi("Type", { fg = blue, bg = nil }) +hi("Statement", { fg = nil, bg = nil }) +hi("Keyword", { fg = nil, bg = nil, bold = true }) +hi("Function", { fg = nil, bg = nil }) +hi("Comment", { fg = brown, bg = nil, italic = true }) +hi("String", { fg = green, bg = nil }) +hi("Special", { fg = magenta, bg = nil }) +hi("SpecialComment", { fg = brown, bg = nil }) +hi("PreProc", { fg = nil, bg = nil }) +hi("Underlined", { fg = nil, bg = nil, underline = true }) +hi("MatchParen", { fg = nil, bg = pale_blue }) +hi("Delimiter", { fg = nil, bg = nil }) +hi("SpecialKey", { fg = cyan, bg = pale_cyan }) +hi("Conceal", { fg = nil, bg = nil }) +hi("Question", { fg = nil, bg = nil, bold = true }) +hi("Title", { fg = magenta, bg = nil }) +hi("Visual", { fg = nil, bg = yellow }) +hi("VisualNOS", { fg = nil, bg = nil, bold = true, underline = true }) +hi("Directory", { fg = blue, bg = nil, bold = true }) +hi("Folded", { fg = nil, bg = pale_gray }) + +hi("SpellBad", { fg = red, bg = nil, undercurl = true }) +hi("SpellCap", { fg = green, bg = nil, undercurl = true }) +hi("SpellRare", { fg = green, bg = nil, undercurl = true }) +hi("SpellLocal", { fg = green, bg = nil, undercurl = true }) + +hi("DiagnosticError", { fg = red }) +hi("DiagnosticWarn", { fg = mustard }) +hi("DiagnosticInfo", { fg = blue }) +hi("DiagnosticHint", { fg = shadow }) +hi("DiagnosticOk", { fg = green }) +hi("DiagnosticUnderlineError", { sp = red, underline = true }) +hi("DiagnosticUnderlineWarn", { sp = mustard, underline = true }) +hi("DiagnosticUnderlineInfo", { sp = pale_blue, underline = true }) +hi("DiagnosticUnderlineHint", { sp = shadow, underline = true }) +hi("DiagnosticUnderlineOk", { sp = green, underline = true }) +hi("DiagnosticVirtualTextError", { link = "DiagnosticError" }) +hi("DiagnosticVirtualTextWarn", { link = "DiagnosticWarn" }) +hi("DiagnosticVirtualTextInfo", { link = "DiagnosticInfo" }) +hi("DiagnosticVirtualTextHint", { link = "DiagnosticHint" }) +hi("DiagnosticVirtualTextOk", { link = "DiagnosticOk" }) +hi("DiagnosticFloatingError", { link = "DiagnosticError" }) +hi("DiagnosticFloatingWarn", { link = "DiagnosticWarn" }) +hi("DiagnosticFloatingInfo", { link = "DiagnosticInfo" }) +hi("DiagnosticFloatingHint", { link = "DiagnosticHint" }) +hi("DiagnosticFloatingOk", { link = "DiagnosticOk" }) +hi("DiagnosticSignError", { link = "DiagnosticError" }) +hi("DiagnosticSignWarn", { link = "DiagnosticWarn" }) +hi("DiagnosticSignInfo", { link = "DiagnosticInfo" }) +hi("DiagnosticSignHint", { link = "DiagnosticHint" }) +hi("DiagnosticSignOk", { link = "DiagnosticOk" }) +hi("DiagnosticDeprecated", { sp = red, strikethrough = true }) + +hi("DiagnosticUnnecessary", { link = "Comment" }) +hi("LspInlayHint", { link = "NonText" }) +hi("SnippetTabstop", { link = "Visual" }) +hi("SnippetTabstopActive", { link = "SnippetTabstop" }) + +-- Text +hi("@markup.raw", { link = "Comment" }) +hi("@markup.link", { link = "Identifier" }) +hi("@markup.heading", { link = "Title" }) +hi("@markup.link.url", { link = "Underlined" }) +hi("@markup.underline", { link = "Underlined" }) +hi("@comment.todo", { link = "Todo" }) + +-- Miscs +hi("@comment", { link = "Comment" }) +hi("@punctuation", { link = "Delimiter" }) + +-- Constants +hi("@constant", { link = "Constant" }) +hi("@constant.builtin", { link = "Special" }) +hi("@constant.macro", { link = "Define" }) +hi("@keyword.directive", { link = "Define" }) +hi("@string", { link = "String" }) +hi("@string.escape", { link = "SpecialChar" }) +hi("@string.special", { link = "SpecialChar" }) +hi("@character", { link = "Character" }) +hi("@character.special", { link = "SpecialChar" }) +hi("@number", { link = "Number" }) +hi("@boolean", { link = "Boolean" }) +hi("@number.float", { link = "Float" }) + +-- Functions +hi("@function", { link = "Function" }) +hi("@function.builtin", { link = "Special" }) +hi("@function.macro", { link = "Macro" }) +hi("@function.method", { link = "Function" }) +hi("@variable.parameter", { link = "Identifier" }) +hi("@variable.parameter.builtin", { link = "Special" }) +hi("@variable.member", { link = "Identifier" }) +hi("@property", { link = "Identifier" }) +hi("@attribute", { link = "Macro" }) +hi("@attribute.builtin", { link = "Special" }) +hi("@constructor", { link = "Special" }) + +-- Keywords +hi("@keyword.conditional", { link = "Conditional" }) +hi("@keyword.repeat", { link = "Repeat" }) +hi("@keyword.type", { link = "Structure" }) +hi("@label", { link = "Label" }) +hi("@operator", { link = "Operator" }) +hi("@keyword", { link = "Keyword" }) +hi("@keyword.exception", { link = "Exception" }) + +hi("@variable", { link = "Identifier" }) +hi("@type", { link = "Type" }) +hi("@type.definition", { link = "Typedef" }) +hi("@module", { link = "Identifier" }) +hi("@keyword.import", { link = "Include" }) +hi("@keyword.directive", { link = "PreProc" }) +hi("@keyword.debug", { link = "Debug" }) +hi("@tag", { link = "Tag" }) +hi("@tag.builtin", { link = "Special" }) + +-- LSP semantic tokens +hi("@lsp.type.class", { link = "Structure" }) +hi("@lsp.type.comment", { link = "Comment" }) +hi("@lsp.type.decorator", { link = "Function" }) +hi("@lsp.type.enum", { link = "Structure" }) +hi("@lsp.type.enumMember", { link = "Constant" }) +hi("@lsp.type.function", { link = "Function" }) +hi("@lsp.type.interface", { link = "Structure" }) +hi("@lsp.type.macro", { link = "Macro" }) +hi("@lsp.type.method", { link = "Function" }) +hi("@lsp.type.namespace", { link = "Structure" }) +hi("@lsp.type.parameter", { link = "Identifier" }) +hi("@lsp.type.property", { link = "Identifier" }) +hi("@lsp.type.struct", { link = "Structure" }) +hi("@lsp.type.type", { link = "Type" }) +hi("@lsp.type.typeParameter", { link = "TypeDef" }) +hi("@lsp.type.variable", { link = "Identifier" }) + +-- Vimtex +hi("texCmd", { link = "Type" }) +-- stylua: ignore end diff --git a/colors/sprinkles.vim b/colors/sprinkles.vim new file mode 100644 index 0000000..387d5ac --- /dev/null +++ b/colors/sprinkles.vim @@ -0,0 +1,250 @@ +" sprinkles - a vim colorscheme with a configurable color palette +" Maintainer: Alex Griffin <a@ajgrf.com> +" Version: 0.2.0 +" License: This file is placed under an ISC-style license. See the included +" LICENSE file for details. + +" Standard Colorscheme Boilerplate {{{ + +highlight clear +if exists('syntax_on') + syntax reset +endif +let g:colors_name = 'sprinkles' + +" }}} + +" Utility Functions {{{ + +" prints a warning message +function! s:Warn(msg) + echohl WarningMsg + echomsg 'sprinkles: ' . a:msg + echohl NONE +endfunction + +" ensures the given dictionary only contains rgb hex colors +function! s:CheckPalette(palette) + for color in values(a:palette) + if color !~# '^#\x\{6}$' + call s:Warn('invalid palette color: ' . color) + return 0 + endif + endfor + return 1 +endfunction + +" Sets the text color, background color, and attributes for the given +" highlight group, in both terminal and gui vim. The values of a:hlgroup and +" a:attr are directly inserted into a highlight command. Valid values for +" a:fg and a:bg include the empty string (indicating NONE) and the first +" eight items in s:color_indices. +function! s:Style(hlgroup, fg, bg, attr) + " get terminal color index + let l:fg_idx = index(s:color_indices, a:fg) + let l:bg_idx = index(s:color_indices, a:bg) + + let l:ctermfg = l:fg_idx == -1 ? 'NONE' : l:fg_idx + let l:ctermbg = l:bg_idx == -1 ? 'NONE' : l:bg_idx + let l:guifg = a:fg == '' ? 'NONE' : a:fg + let l:guibg = a:bg == '' ? 'NONE' : a:bg + let l:attr = a:attr == '' ? 'NONE' : a:attr + + " use bright colors with the bold attr + if a:attr =~# 'bold' && (0 <= l:fg_idx && l:fg_idx < 8) + let l:guifg = s:color_indices[l:fg_idx + 8] + endif + + execute 'highlight ' . a:hlgroup . ' ctermfg=' . l:ctermfg . ' ctermbg=' . + \ l:ctermbg . ' cterm=' . l:attr . ' guifg=' . l:guifg . ' guibg=' . + \ l:guibg . ' gui=' . l:attr +endfunction + +" }}} + +" Set Color Palette {{{ + +" Default gui colors if background is *light* and no custom palette is used. +" This is the Tango theme from gnome-terminal. +let s:default_light = { + \'text': '#000000', + \'background': '#ffffff', + \'black': '#000000', 'dark_grey': '#555753', + \'red': '#cc0000', 'bright_red': '#ef2929', + \'green': '#4e9a06', 'bright_green': '#8ae234', + \'yellow': '#c4a000', 'bright_yellow': '#fce94f', + \'blue': '#3465a4', 'bright_blue': '#729fcf', + \'magenta': '#75507b', 'bright_magenta': '#ad7fa8', + \'cyan': '#06989a', 'bright_cyan': '#34e2e2', + \'white': '#d3d7cf', 'bright_white': '#eeeeec', + \} + +" Default gui colors if background is *dark* and no custom palette is used. +" This is the Tango theme from gnome-terminal. +let s:default_dark = { + \'text': '#d3d7cf', + \'background': '#222222', + \'black': '#000000', 'dark_grey': '#555753', + \'red': '#cc0000', 'bright_red': '#ef2929', + \'green': '#4e9a06', 'bright_green': '#8ae234', + \'yellow': '#c4a000', 'bright_yellow': '#fce94f', + \'blue': '#3465a4', 'bright_blue': '#729fcf', + \'magenta': '#75507b', 'bright_magenta': '#ad7fa8', + \'cyan': '#06989a', 'bright_cyan': '#34e2e2', + \'white': '#d3d7cf', 'bright_white': '#eeeeec', + \} + +" choose default colors based on background +if &background == 'light' + let s:palette = s:default_light +else + let s:palette = s:default_dark +endif + +" override default colors with custom palette +if exists('g:sprinkles_palette') + if s:CheckPalette(g:sprinkles_palette) + call extend(s:palette, g:sprinkles_palette) + else + call s:Warn('using default palette instead') + endif +endif + +" Set some convenience variables so that, e.g. s:palette.red can be referred +" to as s:red. +call extend(s:, s:palette) + +" used to look up the corresponding terminal color index for a color +let s:color_indices = [ + \s:black, s:red, s:green, s:yellow, s:blue, s:magenta, s:cyan, s:white, + \s:dark_grey, + \ s:bright_red, + \ s:bright_green, + \ s:bright_yellow, + \ s:bright_blue, + \ s:bright_magenta, + \ s:bright_cyan, + \ s:bright_white, + \] + +" }}} + +" Standard Syntax Highlighting Groups {{{ + +execute 'highlight Normal ctermfg=NONE ctermbg=NONE cterm=NONE guifg=' . + \ s:text . ' guibg=' . s:background . ' gui=NONE' + +"" HIGHLIGHT GROUP TEXT BACKGROUND ATTRIBUTES +call s:Style('Constant', '', '', '') +call s:Style('Identifier', '', '', '') +call s:Style('Ignore', '', '', '') +call s:Style('Type', '', '', '') +call s:Style('Statement', '', '', 'bold') +call s:Style('Comment', s:blue, '', '') +call s:Style('String', s:red, '', '') +call s:Style('Special', s:magenta, '', '') +call s:Style('SpecialComment', s:blue, '', '') +call s:Style('PreProc', s:magenta, '', '') +call s:Style('Underlined', '', '', 'underline') +call s:Style('Error', s:white, s:red, 'bold') +call s:Style('Todo', s:black, s:yellow, '') +call s:Style('MatchParen', '', s:cyan, '') +call s:Style('Delimiter', '', '', '') + +" }}} + +" FileType-specific Tweaks {{{ + +"" HIGHLIGHT GROUP TEXT BACKGROUND ATTRIBUTES +call s:Style('javaStorageClass','', '', 'bold') +call s:Style('javascriptFunction', '', '', 'bold') +call s:Style('javascriptIdentifier', '', '', 'bold') +call s:Style('luaFunction', '', '', 'bold') +call s:Style('phpDefine', '', '', 'bold') +call s:Style('phpVarSelector', s:text, '', '') +call s:Style('rubyDefine', '', '', 'bold') + +" }}} + +" Vim UI Highlight Groups {{{ + +"" HIGHLIGHT GROUP TEXT BACKGROUND ATTRIBUTES +call s:Style('NonText', s:cyan, '', '') +call s:Style('SpecialKey', s:cyan, '', '') +call s:Style('LineNr', s:cyan, '', '') +call s:Style('CursorLineNr', s:cyan, '', '') +call s:Style('ErrorMsg', s:white, s:red, 'bold') +call s:Style('MoreMsg', s:cyan, '', '') +call s:Style('ModeMsg', '', '', 'bold') +call s:Style('Question', s:cyan, '', '') +call s:Style('Title', s:magenta, '', '') +call s:Style('WarningMsg', s:red, '', '') +call s:Style('Cursor', s:text, s:background, 'reverse') +call s:Style('lCursor', s:text, s:background, 'reverse') +call s:Style('Visual', '', '', 'reverse') +call s:Style('VisualNOS', '', '', 'bold,underline') +call s:Style('TabLine', '', '', '') +call s:Style('TabLineSel', s:cyan, '', '') +call s:Style('TabLineFill', '', '', '') +call s:Style('ColorColumn', '', s:red, '') +call s:Style('CursorColumn', '', '', 'reverse') +call s:Style('CursorLine', '', '', 'underline') +call s:Style('VertSplit', '', '', 'reverse') +call s:Style('StatusLine', '', '', 'reverse,bold') +call s:Style('StatusLineNC', '', '', 'reverse') +call s:Style('WildMenu', s:white, s:magenta, 'bold') +call s:Style('Search', s:black, s:bright_yellow, '') +call s:Style('IncSearch', s:black, s:bright_cyan, '') +call s:Style('Directory', s:blue, '', 'bold') +call s:Style('DiffAdd', s:green, '', '') +call s:Style('DiffDelete', s:red, '', 'bold') +call s:Style('DiffChange', s:magenta, '', '') +call s:Style('DiffText', s:magenta, '', 'bold') +call s:Style('Folded', s:cyan, '', '') +call s:Style('FoldColumn', s:cyan, '', '') +call s:Style('SignColumn', s:cyan, '', '') +call s:Style('Pmenu', s:white, s:magenta, '') +call s:Style('PmenuSel', '', '', 'reverse') +call s:Style('PmenuSbar', '', s:white, '') +call s:Style('PmenuThumb', '', s:black, '') +call s:Style('SpellBad', '', s:red, '') +call s:Style('SpellCap', '', s:green, '') +call s:Style('SpellRare', '', s:green, '') +call s:Style('SpellLocal', '', s:green, '') + +" Purposefully left unset: Conceal + +" }}} + +" Terminal Colors {{{ + +let g:terminal_ansi_colors = [ + \s:black, s:red, s:green, s:yellow, s:blue, s:magenta, s:cyan, s:white, + \s:dark_grey, + \ s:bright_red, + \ s:bright_green, + \ s:bright_yellow, + \ s:bright_blue, + \ s:bright_magenta, + \ s:bright_cyan, + \ s:bright_white, + \] + +let g:terminal_color_0 = s:black +let g:terminal_color_1 = s:red +let g:terminal_color_2 = s:green +let g:terminal_color_3 = s:yellow +let g:terminal_color_4 = s:blue +let g:terminal_color_5 = s:magenta +let g:terminal_color_6 = s:cyan +let g:terminal_color_7 = s:white +let g:terminal_color_8 = s:dark_grey +let g:terminal_color_9 = s:bright_red +let g:terminal_color_10 = s:bright_green +let g:terminal_color_11 = s:bright_yellow +let g:terminal_color_12 = s:bright_blue +let g:terminal_color_13 = s:bright_magenta +let g:terminal_color_14 = s:bright_cyan +let g:terminal_color_15 = s:bright_white + +" }}} diff --git a/init.lua b/init.lua new file mode 100644 index 0000000..08fbd5d --- /dev/null +++ b/init.lua @@ -0,0 +1,138 @@ +vim.loader.enable(true) + +vim.g.mapleader = " " +vim.g.maplocalleader = "," + +vim.g.clipboard = "osc52" + +vim.g.loaded_2html_plugin = true +vim.g.loaded_fzf = 1 -- installed by arch +vim.g.loaded_gzip = 1 +vim.g.loaded_matchit = 1 +vim.g.loaded_netrw = 1 +vim.g.loaded_netrwPlugin = 1 +vim.g.loaded_tarPlugin = 1 +vim.g.loaded_tutor_mode_plugin = 1 +vim.g.loaded_zipPlugin = 1 +vim.g.loaded_zipPlugin = 1 + +vim.g.loaded_node_provider = 0 +vim.g.loaded_perl_provider = 0 +vim.g.loaded_python3_provider = 0 +vim.g.loaded_ruby_provider = 0 + +vim.g.my_treesitter_langs = { + "bash", + "c", + "cpp", + "css", + "diff", + "html", + "latex", + "lua", + "markdown", + "markdown_inline", + "python", + "rust", + "scss", + "vim", + "vimdoc", + "yaml", + "zig", +} + +vim.api.nvim_create_autocmd("PackChanged", { + callback = function(ev) + -- only trigger on install or update + if not vim.tbl_contains({ "install", "update" }, ev.data.kind) then + return + end + + local name, active = ev.data.spec.name, ev.data.active + if name == "nvim-treesitter" then + if not active then vim.cmd.packadd("nvim-treesitter") end + local nts = require("nvim-treesitter") + nts.install(vim.g.my_treesitter_langs, { summary = true }) + nts.update(nil, { summary = true }) + elseif name == "blink.cmp" then + if not active then vim.cmd.packadd("blink.cmp") end + require("mo.blink").build_rust() + end + end, +}) + +vim.pack.add({ + "https://github.com/nvim-treesitter/nvim-treesitter", + "https://github.com/saghen/blink.cmp", + -- "https://github.com/MeanderingProgrammer/render-markdown.nvim", +}, { load = false }) + +vim.pack.add({ + "https://github.com/ibhagwan/fzf-lua", +}, { + load = function() + vim.api.nvim_create_user_command("FzfLua", function(data) + vim.api.nvim_del_user_command("FzfLua") + vim.cmd([[packadd fzf-lua]]) + require("mo.fzf") + vim.cmd("FzfLua " .. data.args) + end, { nargs = "?" }) + end, +}) + +vim.pack.add({ + "https://github.com/neovim/nvim-lspconfig", + + "https://github.com/moreka/alacritty.nvim", + + "https://github.com/tpope/vim-fugitive", + "https://github.com/tpope/vim-surround", + + "https://github.com/stevearc/quicker.nvim", + "https://github.com/stevearc/conform.nvim", + + "https://github.com/stevearc/oil.nvim", + + "https://github.com/nvim-mini/mini.nvim", + + "https://github.com/lervag/vimtex", +}) + +vim.api.nvim_create_autocmd("ColorScheme", { + group = vim.api.nvim_create_augroup("init_config", {}), + callback = function() + for _, group in ipairs(vim.fn.getcompletion("@lsp", "highlight")) do + vim.api.nvim_set_hl(0, group, {}) + end + end, +}) + +if vim.env.VIM_LIGHT == "1" then + vim.cmd.colorscheme("habarena") +else + vim.cmd.colorscheme("notsoquiet") + vim.o.cursorlineopt = "number" +end + +require("vim._extui").enable({}) + +vim.lsp.config("*", { + on_attach = function(client, _) + -- NOTE: for nvim-cmp + -- vim.cmd([[packadd cmp-nvim-lsp]]) + -- client.capabilities = require("cmp_nvim_lsp").default_capabilities() + + -- NOTE: for blink.cmp + client.capabilities = + require("blink.cmp").get_lsp_capabilities(client.capabilities, true) + end, +}) + +vim.lsp.enable({ + -- "clangd", + "emmylua_ls", + "jsonls", + -- "qmlls", + "rust_analyzer", + -- "ty", +}) diff --git a/lua/mo/blink.lua b/lua/mo/blink.lua new file mode 100644 index 0000000..ec68ec4 --- /dev/null +++ b/lua/mo/blink.lua @@ -0,0 +1,123 @@ +---@diagnostic disable: param-type-mismatch +---@diagnostic disable: missing-fields + +local M = {} + +M.setup = function() + require("blink.cmp").setup({ + keymap = { + preset = "default", + ["<Tab>"] = {}, + ["<S-Tab>"] = {}, + }, + completion = { + list = { selection = { preselect = false, auto_insert = true } }, + }, + snippets = { preset = "mini_snippets" }, + cmdline = { enabled = false }, + appearance = { + nerd_font_variant = "normal", + }, + sources = { + default = { "lsp", "path", "snippets", "buffer" }, + providers = { + buffer = { + min_keyword_length = function(ctx) + return ctx.trigger.initial_kind == "manual" and 0 or 3 + end, + opts = { get_bufnrs = vim.api.nvim_list_bufs }, + }, + snippets = { + should_show_items = function(ctx) + return ctx.trigger.initial_kind ~= "trigger_character" + end, + }, + }, + }, + fuzzy = { implementation = "prefer_rust" }, + signature = { enabled = true }, + }) +end + +---@param data string +---@param _opts { hl: string, status: "running"|"success"|"failed", id: (integer|string)?, fast: boolean } +---@return integer|string|nil +local function show_status(data, _opts) + local opts = vim.tbl_extend( + "keep", + _opts, + { hl = "Normal", status = "running", fast = false } + ) + local fn = function() + return vim.api.nvim_echo({ { data, opts.hl } }, false, { + id = opts.id, + kind = "progress", + title = "Building blink-cmp", + status = opts.status, + }) + end + if opts.fast then return fn() end + vim.schedule(fn) + return nil +end + +M.build_rust = function() + local blink_pack = vim.pack.get({ "blink.cmp" })[1] + if blink_pack == nil then return end + + local msg_id = show_status( + "Starting", + { hl = "Comment", status = "running", fast = true } + ) + + local uv = vim.uv + local stdout = uv.new_pipe() + local stderr = uv.new_pipe() + + local on_exit = function(code, signal) + show_status( + ("Finished build (code=%s, signal=%s)"):format(code, signal), + { + hl = "Comment", + status = code == 0 and "success" or "failed", + id = msg_id, + fast = false, + } + ) + end + + local on_stdout = function(err, data) + assert(not err, err) + if data then + show_status(data, { + hl = "Normal", + status = "running", + id = msg_id, + fast = false, + }) + end + end + + local on_stderr = function(err, data) + assert(not err, err) + if data then + show_status(data, { + hl = "Comment", + status = "running", + id = msg_id, + fast = false, + }) + end + end + + uv.spawn("cargo", { + args = { "build", "--release" }, + stdio = { nil, stdout, stderr }, + cwd = blink_pack.path, + }, on_exit) + + uv.read_start(stdout, on_stdout) + uv.read_start(stderr, on_stderr) +end + +return M diff --git a/lua/mo/cmp.lua b/lua/mo/cmp.lua new file mode 100644 index 0000000..be6fb95 --- /dev/null +++ b/lua/mo/cmp.lua @@ -0,0 +1,42 @@ +vim.cmd([[ packadd nvim-cmp ]]) + +local cmp = require("cmp") +local icons = require("mini.icons") +local kinds = require("mo.kinds") +local minisnippets = require("mini.snippets") + +cmp.setup({ + view = { entries = "native" }, + formatting = { + format = function(entry, vim_item) + if entry.source.name == "nvim_lsp" and vim_item.kind ~= nil then + local icon, _, _ = icons.get("lsp", vim_item.kind) + vim_item.kind = + string.format("%s %s", icon, kinds[vim_item.kind]) + end + return vim_item + end, + }, + snippet = { + expand = function(args) + local insert = minisnippets.config.expand.insert + or minisnippets.default_insert + insert({ body = args.body }) -- Insert at cursor + cmp.resubscribe({ "TextChangedI", "TextChangedP" }) + require("cmp.config").set_onetime({ sources = {} }) + end, + }, + mapping = cmp.mapping.preset.insert({ + ["<C-b>"] = cmp.mapping.scroll_docs(-4), + ["<C-f>"] = cmp.mapping.scroll_docs(4), + ["<C-Space>"] = cmp.mapping.complete(), + ["<C-e>"] = cmp.mapping.abort(), + ["<C-y>"] = cmp.mapping.confirm({ select = true }), -- Accept currently selected item. Set `select` to `false` to only confirm explicitly selected items. + }), + sources = cmp.config.sources({ + { name = "nvim_lsp" }, + }, { + { name = "path" }, + { name = "buffer" }, + }), +}) diff --git a/lua/mo/fzf.lua b/lua/mo/fzf.lua new file mode 100644 index 0000000..c5c4b3e --- /dev/null +++ b/lua/mo/fzf.lua @@ -0,0 +1,77 @@ +--- @diagnostic disable: missing-fields +local fzf = require("fzf-lua") + +local swiper = { + previewer = "swiper", + winopts = function() + local height = math.ceil(vim.o.lines / 3) + return { split = ("botright %snew +set\\ nobl"):format(height) } + end, +} + +fzf.setup({ + { "default-title", "hide" }, + fzf_colors = true, + lsp = { + symbols = { symbol_style = 3 }, + document_symbols = swiper, + code_actions = { previewer = "codeaction_native" }, + }, + manpages = { previewer = "man_native" }, + helptags = { previewer = "help_native" }, + defaults = { git_icons = false, file_icons = false }, + tags = { previewer = "bat" }, + btags = { previewer = "bat" }, + files = { fzf_opts = { ["--ansi"] = false } }, + grep = { + fzf_opts = { ["--ansi"] = false }, + rg_glob = true, + rg_opts = " --color=never --column --line-number --no-heading --smart-case --max-columns=4096 -e", + }, + builtin = { winopts = { width = 1, height = 1 } }, + blines = swiper, + grep_curbuf = swiper, + treesitter = swiper, + git = { blame = swiper }, + + winopts = function() + local height = math.ceil(vim.o.lines / 2) + return { + backdrop = 80, + row = 1, + col = 0, + width = 1, + height = height > 3 and height or 1, + border = {"", " ", "", "", "", "", "", ""}, + toggle_behavior = "extend", + --- @diagnostic disable-next-line: missing-fields + preview = { + default = { "bat" }, + treesitter = false, + layout = "vertical", + vertical = "up:60%", + border = {"", " ", "", "", "", "", "", ""}, + }, + on_create = function() + vim.keymap.set( + "t", + "<C-r>", + [['<C-\><C-N>"'.nr2char(getchar()).'pi']], + { + expr = true, + buffer = true, + desc = "insert register value into the FZF prompt", + } + ) + end, + } + end, + keymap = { + fzf = { + ["ctrl-q"] = "select-all+accept", + }, + }, +}) + +_G.old_vim_ui_select = vim.ui.select +fzf.register_ui_select() diff --git a/lua/mo/kinds.lua b/lua/mo/kinds.lua new file mode 100644 index 0000000..b6d7814 --- /dev/null +++ b/lua/mo/kinds.lua @@ -0,0 +1,27 @@ +return { + Text = "Text", + Method = "Meth", + Function = "Func", + Constructor = "Cons", + Field = "Fld", + Variable = "Var", + Class = "Cls", + Interface = "Ifs", + Module = "Mod", + Property = "Prop", + Unit = "Unit", + Value = "Val", + Enum = "Enum", + Keyword = "Keyw", + Snippet = "Snp", + Color = "Col", + File = "File", + Reference = "Ref", + Folder = "Fold", + EnumMember = "EnMe", + Constant = "Cnst", + Struct = "Stru", + Event = "Ev", + Operator = "Op", + TypeParameter = "Typ", +} diff --git a/lua/mo/notif.lua b/lua/mo/notif.lua new file mode 100644 index 0000000..019afbd --- /dev/null +++ b/lua/mo/notif.lua @@ -0,0 +1,8 @@ +local M = {} + +M.err = function(e) vim.notify(e, vim.log.levels.ERROR) end +M.info = function(e) vim.notify(e, vim.log.levels.INFO) end +M.debug = function(e) vim.notify(e, vim.log.levels.DEBUG) end +M.warn = function(e) vim.notify(e, vim.log.levels.WARN) end + +return M diff --git a/lua/mo/oil-util.lua b/lua/mo/oil-util.lua new file mode 100644 index 0000000..1b00fa7 --- /dev/null +++ b/lua/mo/oil-util.lua @@ -0,0 +1,67 @@ +local M = {} + +local notif = require("mo.notif") + +---@param opts { full_path: boolean } +M.copy_to_clipboard = function(opts) + opts = opts or { full_path = true } + + local oil = require("oil") + local dir = oil.get_current_dir() + if not dir then + notif.err("System clipboard only works for local files") + return + end + + local entries = {} + local mode = vim.api.nvim_get_mode().mode + if mode == "v" or mode == "V" then + local start = vim.fn.getpos("v") + local end_ = vim.fn.getpos(".") + local start_row = start[2] + local end_row = end_[2] + + if start_row > end_row then + start_row, end_row = end_row, start_row + end + + for i = start_row, end_row do + table.insert(entries, oil.get_entry_on_line(0, i)) + end + + vim.api.nvim_feedkeys( + vim.api.nvim_replace_termcodes("<Esc>", true, false, true), + "n", + true + ) + else + table.insert(entries, oil.get_cursor_entry()) + end + + -- This removes holes in the list-like table + entries = vim.tbl_values(entries) + + if #entries == 0 then + vim.notify( + "Could not find local file under cursor", + vim.log.levels.WARN + ) + return + end + local paths = {} + for _, entry in ipairs(entries) do + if opts.full_path then + table.insert(paths, dir .. entry.name) + else + table.insert(paths, entry.name) + end + end + require("vim.ui.clipboard.osc52").copy("+")(paths) + if #paths == 1 then + notif.info(string.format("Copied '%s' to system clipboard", paths[1])) + else + notif.info(string.format("Copied %d files to system clipboard", #paths)) + end +end + +return M diff --git a/lua/mo/statusline.lua b/lua/mo/statusline.lua new file mode 100644 index 0000000..b24436c --- /dev/null +++ b/lua/mo/statusline.lua @@ -0,0 +1,20 @@ +-- local function lsp_status() +-- local clients = vim.lsp.get_active_clients({ bufnr = 0 }) +-- if #clients == 0 then return "" end +-- local names = {} +-- for _, client in ipairs(clients) do +-- table.insert(names, client.name) +-- end +-- return "[" .. table.concat(names, ", ") .. "]" +-- end + +local M = {} + +function M.lsp_status() + local clients = vim.lsp.get_clients({ bufnr = 0 }) + if #clients == 0 then return "" end + + return "%#StatusLineLsp#[" .. table.concat(vim.tbl_map(function(client) return client.name end, clients), ",") .. "]%* " +end + +return M diff --git a/lua/mo/zen.lua b/lua/mo/zen.lua new file mode 100644 index 0000000..eb674ba --- /dev/null +++ b/lua/mo/zen.lua @@ -0,0 +1,89 @@ +local M = {} +M.themes = { + dark = { + "seoulbones", + "rosebones", + "forestbones", + "zenwritten", + }, + light = { + "seoulbones", + "vimbones", + "rosebones", + "forestbones", + }, +} +M.current = { + dark = 1, + light = 1, +} +M.bg = "dark" + +M.cycle = function() + M.current[M.bg] = M.current[M.bg] + 1 + if M.current[M.bg] > #M.themes[M.bg] then M.current[M.bg] = 1 end + M.set() +end + +M.set = function() + vim.o.background = M.bg + local theme = M.themes[M.bg][M.current[M.bg]] + vim.print("Switching to " .. theme) + + vim.g[theme .. "_compat"] = 1 + vim.cmd.colorscheme(theme) + + -- make strings nonitalic + local str_highlight = + vim.api.nvim_get_hl(0, { name = "String", link = false }) + vim.api.nvim_set_hl( + 0, + "String", + { fg = str_highlight.fg, italic = false, force = true } + ) + + -- make booleans nonitalic and bold + local bool_highlight = + vim.api.nvim_get_hl(0, { name = "Boolean", link = false }) + vim.api.nvim_set_hl( + 0, + "Boolean", + { fg = bool_highlight.fg, italic = false, bold = true, force = true } + ) + + -- make normals in seoulbones darker + if theme == "seoulbones" and M.bg == "dark" then + local norm_highlight = + vim.api.nvim_get_hl(0, { name = "Normal", link = false }) + vim.api.nvim_set_hl( + 0, + "Normal", + { fg = norm_highlight.fg, bg = "#313131", force = true } + ) + end +end + +M.togglebg = function() + M.bg = M.bg == "dark" and "light" or "dark" + M.set() +end + +---@param theme string? +---@param bg "dark"|"light"|nil +M.setup = function(theme, bg) + vim.cmd("packadd zenbones.nvim") + if bg then M.bg = bg end + if theme then + for i, th in ipairs(M.themes[M.bg]) do + if th == theme then + M.current[M.bg] = i + break + end + end + end + M.set() + vim.keymap.set("n", "<F3>", M.cycle, {}) + vim.keymap.set("n", "<F12>", M.togglebg, {}) +end + +return M diff --git a/nvim-pack-lock.json b/nvim-pack-lock.json new file mode 100644 index 0000000..62a5473 --- /dev/null +++ b/nvim-pack-lock.json @@ -0,0 +1,52 @@ +{ + "plugins": { + "alacritty.nvim": { + "rev": "4ca80fce586727b33951ae46b2d07c1a0ebf6321", + "src": "https://github.com/moreka/alacritty.nvim" + }, + "blink.cmp": { + "rev": "820f1ddf634ec267412e403711bf74be26cac677", + "src": "https://github.com/saghen/blink.cmp" + }, + "conform.nvim": { + "rev": "c2526f1cde528a66e086ab1668e996d162c75f4f", + "src": "https://github.com/stevearc/conform.nvim" + }, + "fzf-lua": { + "rev": "696f8c071723f845b904af2f99a798650210355e", + "src": "https://github.com/ibhagwan/fzf-lua" + }, + "mini.nvim": { + "rev": "c163117900c17d4abf30bc09452a261c8536060c", + "src": "https://github.com/nvim-mini/mini.nvim" + }, + "nvim-lspconfig": { + "rev": "92ee7d42320edfbb81f3cad851314ab197fa324a", + "src": "https://github.com/neovim/nvim-lspconfig" + }, + "nvim-treesitter": { + "rev": "ec034813775d7e2974c7551c8c34499a828963f8", + "src": "https://github.com/nvim-treesitter/nvim-treesitter" + }, + "oil.nvim": { + "rev": "f55b25e493a7df76371cfadd0ded5004cb9cd48a", + "src": "https://github.com/stevearc/oil.nvim" + }, + "quicker.nvim": { + "rev": "fc041830fa7cf093786b0d5990d99cf3c7b0c129", + "src": "https://github.com/stevearc/quicker.nvim" + }, + "vim-fugitive": { + "rev": "61b51c09b7c9ce04e821f6cf76ea4f6f903e3cf4", + "src": "https://github.com/tpope/vim-fugitive" + }, + "vim-surround": { + "rev": "3d188ed2113431cf8dac77be61b842acb64433d9", + "src": "https://github.com/tpope/vim-surround" + }, + "vimtex": { + "rev": "f707368022cdb851716be0d2970b90599c84a6a6", + "src": "https://github.com/lervag/vimtex" + } + } +}
\ No newline at end of file diff --git a/plugin/10_options.lua b/plugin/10_options.lua new file mode 100644 index 0000000..ce3b235 --- /dev/null +++ b/plugin/10_options.lua @@ -0,0 +1,53 @@ +vim.o.title = true +vim.opt.fillchars = { msgsep ="‾", vert="┋" } + +vim.o.autoindent = true +vim.o.expandtab = true +vim.o.shiftwidth = 4 +vim.o.tabstop = 4 +vim.o.cinoptions = "l1,:0,g0,E-s,N-s,t0,(s,J1,j1" +vim.o.virtualedit = "block" + +vim.o.splitright = true +vim.o.splitbelow = true + +vim.o.linebreak = true +vim.o.wrap = true +vim.o.smoothscroll = true + +vim.o.swapfile = false +vim.o.undofile = true +vim.o.shada = "!,'100,<50,s10,:1000,/100,@100,h,r/tmp/,rterm:,rhealth:" + +vim.o.foldlevelstart = 99 +vim.o.foldtext = "" + +vim.o.ignorecase = true +vim.o.smartcase = true +vim.o.incsearch = true +vim.o.inccommand = "split" + +vim.o.completeopt = "menu,menuone,noselect,fuzzy" +vim.o.pumheight = 10 +vim.o.pummaxwidth = 50 +vim.o.wildmode = "longest:full,full" +vim.o.wildoptions = "pum,fuzzy" +vim.opt.wildignore:append({ "*.pyc", "__pycache__", "*~", "#*#", "*.o" }) + +vim.o.spelllang = "en_us,en-academic" +vim.o.spelloptions = "camel" +vim.opt.complete:append("kspell") + +vim.o.signcolumn = "no" + +vim.o.number = true +vim.o.cursorline = true + +vim.g.tex_flavor = "latex" +vim.g.tex_no_error = 1 +vim.g.tex_comment_nospell = 1 +vim.opt.tags:append({ "tags;~", ".tags;~" }) + +vim.o.laststatus = 1 +vim.o.statusline = "%<%f %h%w%m%r %=%{% &showcmdloc == 'statusline' ? '%-10.S ' : '' %}%{% exists('b:keymap_name') ? '<'..b:keymap_name..'> ' : '' %}%{% &busy > 0 ? '◐ ' : '' %}%{% luaeval('(package.loaded[''vim.diagnostic''] and #vim.diagnostic.count() ~= 0 and vim.diagnostic.status() .. '' '') or '''' ') %}%{% v:lua.require'mo.statusline'.lsp_status() %}%{% &ruler ? ( &rulerformat == '' ? '%-14.(%l,%c%V%) %P' : &rulerformat ) : '' %}" + diff --git a/plugin/11_keymaps.lua b/plugin/11_keymaps.lua new file mode 100644 index 0000000..9dcd4f4 --- /dev/null +++ b/plugin/11_keymaps.lua @@ -0,0 +1,58 @@ +local map = function(mode, lhs, rhs, desc) vim.keymap.set(mode, lhs, rhs, { desc = desc }) end +local nmap = function(lhs, rhs, desc) map("n", lhs, rhs, desc) end +local mapleader = function(mode, suffix, rhs, desc) map(mode, "<Leader>" .. suffix, rhs, desc) end +local nmapleader = function(suffix, rhs, desc) mapleader("n", suffix, rhs, desc) end + +map({ "n", "x" }, "gy", '"+y', "copy selection to clipboard") +nmap("gY", '"+Y', "copy to clipboard till end of line") + +nmap("-", "<Cmd>Oil<CR>", "Explore") + +nmap("<C-J>", "<C-w>w", "switch to next window") +nmap("<C-K>", "<C-w>W", "switch to prev window") + +nmap("<C-L>", [[<Cmd>nohlsearch<Bar>diffupdate<CR>]], "nohlsearch and diffupdate") +nmap("<C-S-L>", [[<Cmd>nohlsearch<Bar>diffupdate<Bar>normal! <C-L><CR>]], "default neovim <C-L>") + +nmapleader("cd", "<Cmd>lcd %:h<CR>", "lcd to the directory of current file") + +vim.keymap.set({ "n", "x" }, "j", [[v:count == 0 ? 'gj' : 'j']], { expr = true, buffer = 0 }) +vim.keymap.set({ "n", "x" }, "k", [[v:count == 0 ? 'gk' : 'k']], { expr = true, buffer = 0 }) + +nmap("gK", "K", "use the keywordprg instead of hover") + +map('t', '<C-[>', [[<C-\><C-N>]], "go to normal mode from terminal mode") +map('t', '<Esc>', '<Esc>', "map <Esc> to literal ESC in terminal mode") + +-- lua exec +nmapleader("x", function() + local line = "lua " .. vim.api.nvim_get_current_line() + vim.api.nvim_command(line) + vim.api.nvim_input("<Down>") +end, "execute lua line and go to next line") +mapleader("x", "x", ":lua<CR>") +nmap("<Leader><Leader>x", "<Cmd>luafile %<CR>") + +-- lsp and format +nmapleader("e", "<Cmd>lua vim.diagnostic.open_float()<CR>") +nmap("gd", "<Cmd>lua vim.lsp.buf.definition()<CR>") +nmap("<C-f>", "<Cmd>lua require'conform'.format{async=true}<CR>") + +-- fzf +nmap("<C-p>", "<Cmd>FzfLua files<CR>", "fzf: find files") +nmap("<C-t>", "<Cmd>FzfLua resume<CR>", "fzf: resume") +nmap("<C-\\>", "<Cmd>FzfLua buffers<CR>", "fzf: buffers") +nmap("<C-/>", "<Cmd>FzfLua oldfiles<CR>", "fzf: oldfiles") + +nmapleader("fg", "<Cmd>FzfLua live_grep_native<CR>", "fzf: grep") +nmapleader("fc", '<Cmd>FzfLua files prompt="Nvim Config>\\ " cwd=~/.config/nvim<CR>', "fzf: search config") +nmapleader("fp", '<Cmd>lua FzfLua.files({cwd=vim.fn.stdpath("data").."/site/pack/core/opt/"})<CR>', "fzf: search plugins") +nmapleader("fh", "<Cmd>FzfLua helptags<CR>", "fzf: help tags") +nmapleader("fk", "<Cmd>FzfLua keymaps<CR>", "fzf: keymaps") +map("n", "z=", "<Cmd>FzfLua spell_suggest<CR>", "fzf: suggest spelling") + +-- git +nmapleader("gs", "<Cmd>Git<CR>", "git status") + +-- qf +nmapleader("q", function() require("quicker").toggle() end, "Toggle quickfix list") diff --git a/plugin/12_autocommands.lua b/plugin/12_autocommands.lua new file mode 100644 index 0000000..829ed97 --- /dev/null +++ b/plugin/12_autocommands.lua @@ -0,0 +1,135 @@ +local au = vim.api.nvim_create_autocmd +local group = vim.api.nvim_create_augroup("my_events", {}) + +au("TextYankPost", { + group = group, + callback = function() vim.hl.on_yank() end, +}) + +au("TermOpen", { + group = group, + command = "setl stc= nonumber | startinsert!", +}) + +au("BufWritePre", { + group = group, + callback = function() + local view = vim.fn.winsaveview() + vim.cmd([[silent! keepjumps keeppatterns %s/\s\+$//e]]) + vim.fn.winrestview(view) + end, + desc = "remove tail space", +}) + +au("LspAttach", { + group = group, + command = "setl signcolumn=yes | redrawstatus", + desc = "add sign column when LSP is attached and redraw status", +}) + +au("LspDetach", { + group = group, + command = "redrawstatus", + desc = "redraw status when LSP is dettached", +}) + +au("FileType", { + group = group, + pattern = "fugitive,git,help,man,qf,query,scratch", + command = 'execute "nnoremap <buffer> q <Cmd>quit<CR>"', + desc = "Close certain windows by pressing q", +}) + +au("BufWritePost", { + group = group, + desc = "Run shortcuts after updating bookmark files", + pattern = { "bm-dirs", "bm-files" }, + command = "!shortcuts", +}) + +au("User", { + group = group, + pattern = "VimtexEventViewReverse", + desc = "VimTeX: Center view on inverse search", + callback = function() + vim.cmd([[ normal! zMzvzz ]]) + -- If I want to turn on blink again: + -- vim.fn["vimtex#ui#blink"]() + end, +}) + +au("InsertEnter", { + group = group, + desc = "Enable blink.cmp", + once = true, + callback = function() + -- vim.cmd("packadd nvim-cmp") + -- require("mo.cmp") + vim.cmd("packadd blink.cmp") + require("mo.blink").setup() + end, +}) + +local function startuptime() + if vim.g.strive_startup_time ~= nil then return end + vim.g.strive_startup_time = 0 + local usage = vim.uv.getrusage() + if usage then + -- Calculate time in milliseconds (user + system time) + local user_time = (usage.utime.sec * 1000) + (usage.utime.usec / 1000) + local sys_time = (usage.stime.sec * 1000) + (usage.stime.usec / 1000) + vim.g.nvim_startup_time = user_time + sys_time + end +end + +local function show_info() + local plugins = vim.pack.get() + local loaded = vim.iter(plugins) + :map(function(p) return p.active end) + :totable() + local startup_time = vim.g.nvim_startup_time or "0" + local plugin_info_str = string.format( + "load %d/%d plugins in %sms", + #loaded or 0, + #plugins or 0, + startup_time + ) + vim.notify(plugin_info_str, vim.log.levels.INFO) +end + +au("UIEnter", { + group = group, + desc = "Setup Diagnostics and load nohlsearch and undotree package", + once = true, + callback = function() + vim.schedule(function() + -- startuptime() + vim.diagnostic.config({ + virtual_text = { + virt_text_pos = "eol_right_align", + current_line = true, + prefix = function(d, _, _) + -- stylua: ignore start + --- @diagnostic disable-next-line: undefined-field, redundant-return-value + return " ■", "DiagnosticPrefix" .. vim.diagnostic.severity[d.severity] + -- stylua: ignore end + end, + }, + signs = { + text = { "●", "●", "●", "●" }, + numhl = { + "DiagnosticError", + "DiagnosticWarn", + "DiagnosticInfo", + "DiagnosticHint", + }, + }, + severity_sort = true, + }) + + vim.cmd([[packadd nohlsearch]]) + vim.cmd([[packadd nvim.undotree]]) + -- show_info() + end) + end, +}) diff --git a/plugin/14_commands.lua b/plugin/14_commands.lua new file mode 100644 index 0000000..c1f248a --- /dev/null +++ b/plugin/14_commands.lua @@ -0,0 +1,44 @@ +local command = vim.api.nvim_create_user_command + +local complete_plugin_names = function(arg, _, _) + local inactive_plugs_starting_with_arg = vim.tbl_filter( + function(p) return p.active == false and vim.startswith(p.spec.name, arg) end, + vim.pack.get() + ) + return vim.tbl_map(function(p) return p.spec.name end, inactive_plugs_starting_with_arg) +end + +command( + "DiffOrig", + [[ + vert new + setlocal buftype=nofile + read ++edit # + 0d_ + diffthis + wincmd p + diffthis + ]], + { desc = "DiffOrig (see `:h DiffOrig`)" } +) + +command("Pup", function(_) vim.pack.update() end, { desc = "Update packages" }) +command( + "Pdel", + function(opts) vim.pack.del(vim.split(opts.args, " ")) end, + { nargs = "*", complete = complete_plugin_names } +) + +command( + "LspLog", + function() vim.cmd.tabnew(vim.lsp.log.get_filename()) end, + { desc = "Opens the Nvim LSP client log." } +) + +command("Align", function(_) + -- TODO +end, { + nargs = "*", + range = true, + desc = "align selection with respect to a substring", +}) diff --git a/plugin/20_treesitter.lua b/plugin/20_treesitter.lua new file mode 100644 index 0000000..dcc7df2 --- /dev/null +++ b/plugin/20_treesitter.lua @@ -0,0 +1,33 @@ +local disabled = { latex = true, tex = true } +local ft_lang_map = {} + +vim.api.nvim_create_autocmd("FileType", { + group = vim.api.nvim_create_augroup("treesitter_highlight_group", { clear = true }), + callback = function(ev) + local buf = ev.buf + if not vim.api.nvim_buf_is_loaded(buf) then return end + + local ft = vim.bo[buf].filetype + if disabled[ft] then return end + + if ft_lang_map[ft] then + vim.treesitter.language.register(ft_lang_map[ft], ft) + ft_lang_map[ft] = nil + end + + local parser = vim.treesitter.get_parser(buf, nil, { error = false }) + if parser == nil then + disabled[ft] = true + return + end + + if not vim.treesitter.highlighter.active[buf] then + vim.treesitter.highlighter.new(parser) + end + + if vim.treesitter.query.get(ft, "folds") then + vim.wo.foldmethod = "expr" + vim.wo.foldexpr = "v:lua.vim.treesitter.foldexpr()" + end + end +}) diff --git a/plugin/99_rest.lua b/plugin/99_rest.lua new file mode 100644 index 0000000..481c0ff --- /dev/null +++ b/plugin/99_rest.lua @@ -0,0 +1,22 @@ +vim.schedule( + function() + vim.diagnostic.config({ + float = { header = "" }, + virtual_text = { + current_line = true, + prefix = " ■", + virt_text_pos = "eol_right_align", + }, + signs = { + text = { "●", "●", "●", "●" }, + numhl = { + "DiagnosticError", + "DiagnosticWarn", + "DiagnosticInfo", + "DiagnosticHint", + }, + }, + severity_sort = true, + }) + end +) diff --git a/plugin/plugins/alacritty.lua b/plugin/plugins/alacritty.lua new file mode 100644 index 0000000..f6a323d --- /dev/null +++ b/plugin/plugins/alacritty.lua @@ -0,0 +1,4 @@ +local ok, alacritty = pcall(require, "alacritty") +if not ok then return end + +alacritty.setup() diff --git a/plugin/plugins/conform.lua b/plugin/plugins/conform.lua new file mode 100644 index 0000000..7dfcbb7 --- /dev/null +++ b/plugin/plugins/conform.lua @@ -0,0 +1,20 @@ +---@diagnostic disable: param-type-mismatch + +require("conform").setup({ + formatters_by_ft = { + lua = { "stylua" }, + python = { "ruff_format" }, + rust = { "rustfmt", lsp_format = "fallback" }, + bash = { "shfmt" }, + sh = { "shfmt" }, + tex = { "latexindent" }, + }, + formatters = { + shfmt = { + append_args = { "-i", "4", "-fn" }, + }, + latexindent = { + append_args = { "-m", "-l" }, + }, + }, +}) diff --git a/plugin/plugins/mini.lua b/plugin/plugins/mini.lua new file mode 100644 index 0000000..24027e0 --- /dev/null +++ b/plugin/plugins/mini.lua @@ -0,0 +1,37 @@ +require("mini.notify").setup({ + lsp_progress = { enable = false }, +}) + +local misc = require("mini.misc") +misc.setup_restore_cursor() +misc.setup_termbg_sync() + +vim.schedule(function() + local snippets = require("mini.snippets") + snippets.setup({ + snippets = { + snippets.gen_loader.from_lang(), + }, + }) + local fin_stop = function(args) + if args.data.tabstop_to == "0" then snippets.session.stop() end + end + local au_opts = { pattern = "MiniSnippetsSessionJump", callback = fin_stop } + vim.api.nvim_create_autocmd("User", au_opts) +end) + +vim.schedule(function() + local hipatterns = require("mini.hipatterns") + hipatterns.setup({ + highlighters = { + fixme = { pattern = "FIXME", group = "MiniHipatternsFixme" }, + todo = { pattern = "TODO", group = "MiniHipatternsTodo" }, + note = { pattern = "NOTE", group = "MiniHipatternsNote" }, + hex_color = hipatterns.gen_highlighter.hex_color(), + }, + }) +end) + +vim.schedule(function() + require("mini.icons").setup() +end) diff --git a/plugin/plugins/oil.lua b/plugin/plugins/oil.lua new file mode 100644 index 0000000..edb3c50 --- /dev/null +++ b/plugin/plugins/oil.lua @@ -0,0 +1,76 @@ +require("oil").setup({ + default_file_explorer = true, + columns = { + "permissions", + "size", + -- "mtime", + }, + buf_options = { + buflisted = false, + bufhidden = "hide", + }, + win_options = { + wrap = false, + signcolumn = "no", + cursorcolumn = false, + foldcolumn = "0", + spell = false, + list = false, + conceallevel = 3, + concealcursor = "nvic", + }, + delete_to_trash = false, + skip_confirm_for_simple_edits = false, + prompt_save_on_select_new_entry = true, + cleanup_delay_ms = 2000, + lsp_file_methods = { + enabled = true, + timeout_ms = 1000, + autosave_changes = false, + }, + constrain_cursor = "editable", + watch_for_changes = false, + keymaps = { + ["g?"] = { "actions.show_help", mode = "n" }, + ["<CR>"] = "actions.select", + ["<M-s>"] = { "actions.select", opts = { vertical = true } }, + ["<M-h>"] = { "actions.select", opts = { horizontal = true } }, + ["<M-t>"] = { "actions.select", opts = { tab = true } }, + ["<C-p>"] = false, + ["<C-c>"] = { "actions.close", mode = "n" }, + ["<C-l>"] = "actions.refresh", + ["-"] = { "actions.parent", mode = "n" }, + ["_"] = { "actions.open_cwd", mode = "n" }, + ["`"] = { "actions.cd", mode = "n" }, + ["g~"] = { "actions.cd", opts = { scope = "tab" }, mode = "n" }, + ["gs"] = false, + ["gx"] = "actions.open_external", + ["zh"] = { "actions.toggle_hidden", mode = "n" }, + ["gt"] = "actions.open_terminal", + ["<Leader>Y"] = require("mo.oil-util").copy_to_clipboard, + ["<Leader>y"] = function() require("mo.oil-util").copy_to_clipboard({ full_path = false }) end, + ["<Leader>:"] = { + "actions.open_cmdline", + opts = { shorten_path = true, modify = ":h" }, + }, + ["<Leader>;"] = { + "actions.open_cmdline", + opts = { shorten_path = true }, + }, + }, + use_default_keymaps = false, + view_options = { + show_hidden = false, + is_hidden_file = function(name, _bufnr) + local m = name:match("^%.") + return m ~= nil + end, + is_always_hidden = function(_name, _bufnr) return false end, + natural_order = "fast", + case_insensitive = false, + sort = { + { "type", "asc" }, + { "name", "asc" }, + }, + }, +} --[[@as oil.SetupOpts]]) diff --git a/plugin/plugins/quicker.lua b/plugin/plugins/quicker.lua new file mode 100644 index 0000000..05a537e --- /dev/null +++ b/plugin/plugins/quicker.lua @@ -0,0 +1,14 @@ +require("quicker").setup({ + keys = { + { + ">", + "<cmd>lua require('quicker').expand()<CR>", + desc = "Expand quickfix content", + }, + { + "<", + "<cmd>lua require('quicker').shrink()<CR>", + desc = "Shrink quickfix content", + }, + }, +}) diff --git a/plugin/plugins/rendermark.lua b/plugin/plugins/rendermark.lua new file mode 100644 index 0000000..24e2d16 --- /dev/null +++ b/plugin/plugins/rendermark.lua @@ -0,0 +1,11 @@ +-- vim.api.nvim_create_autocmd("FileType", { +-- pattern = { "markdown" }, +-- once = true, +-- callback = function() +-- vim.cmd([[ packadd render-markdown.nvim ]]) +-- require("render-markdown").setup({ +-- enabled = false, +-- ignore = function(buf) return vim.bo[buf].buftype ~= "nofile" end +-- }) +-- end, +-- }) diff --git a/plugin/plugins/scratch.vim b/plugin/plugins/scratch.vim new file mode 100644 index 0000000..059a21b --- /dev/null +++ b/plugin/plugins/scratch.vim @@ -0,0 +1,15 @@ +if exists('g:loaded_scratch') + finish +endif +let g:loaded_scratch = 1 + +command! -nargs=1 -complete=command Scratch call scratch#open(<q-args>, <q-mods>) +command! -nargs=? Marks <mods> Scratch marks <args> +command! -nargs=0 Messages <mods> Scratch messages +command! -nargs=? Registers <mods> Scratch registers <args> +command! -nargs=? Display <mods> Scratch display <args> +command! -nargs=? -complete=highlight Highlight <mods> Scratch highlight <args> +command! -nargs=0 Jumps <mods> Scratch jumps +command! -nargs=0 Changes <mods> Scratch changes +command! -nargs=0 Digraphs <mods> Scratch digraphs +command! -nargs=0 Scriptnames <mods> Scratch scriptnames diff --git a/plugin/plugins/vimtex.lua b/plugin/plugins/vimtex.lua new file mode 100644 index 0000000..05dfa3a --- /dev/null +++ b/plugin/plugins/vimtex.lua @@ -0,0 +1,21 @@ +vim.g.tex_flavor = "latex" +vim.g.vimtex_compiler_silent = 0 +vim.g.vimtex_complete_bib = { simple = 0 } +vim.g.vimtex_doc_handlers = { "vimtex#doc#handlers#texdoc" } +vim.g.vimtex_format_enabled = 0 +vim.g.vimtex_include_search_enabled = 1 +vim.g.vimtex_indent_on_ampersands = 0 +vim.g.vimtex_quickfix_ignore_filters = { + "Generic hook", + "Package hyperref Warning: Token not allowed in a PDF string", + "destination with the same identifier", + "LaTeX Font Warning:", +} +vim.g.vimtex_quickfix_open_on_warning = 0 +vim.g.vimtex_syntax_conceal_disabled = 1 +vim.g.vimtex_syntax_enabled = 1 +vim.g.vimtex_view_automatic = 0 +vim.g.vimtex_view_forward_search_on_start = 0 +vim.g.vimtex_view_method = "zathura_simple" + +vim.cmd([[packadd vimtex]]) diff --git a/snippets/latex.lua b/snippets/latex.lua new file mode 100644 index 0000000..7d95987 --- /dev/null +++ b/snippets/latex.lua @@ -0,0 +1,39 @@ +return { + env = { + prefix = "beg", + body = { "\\begin{${1:env}}", "\t$0", "\\end{${1:env}}", "" }, + }, + paragraph = { + prefix = "para", + body = { + "\\paragraph{${1:paragraph name}} % (fold)", + "${0:$TM_SELECTED_TEXT}", + "% paragraph $1 (end)", + }, + }, + + itemize = { + prefix = "item", + body = { "\\begin{itemize}", "\t\\item $0", "\\end{itemize}", "" }, + }, + enumerate = { + prefix = "enum", + body = { "\\begin{enumerate}", "\t\\item $0", "\\end{enumerate}", "" }, + }, + item = { prefix = "++", body = "\\item $0" }, + + inlinemath = { prefix = "mk", body = "\\$${1:$TM_SELECTED_TEXT}\\$$0" }, + displaymath = { prefix = "dm", body = { "\\[", "\t$1", "\\]", "$0" } }, + equation_labeled = { + prefix = "eqn", + body = { + "\\begin{equation}\\label{eq:$2}", + "\t$1", + "\\end{equation}", + "$0", + }, + }, + + bold = { prefix = "**", body = "\\textbf{${1:$TM_SELECTED_TEXT}}$0" }, + italic = { prefix = "__", body = "\\emph{${1:$TM_SELECTED_TEXT}}$0" }, +} diff --git a/spell/en-academic.utf-8.spl b/spell/en-academic.utf-8.spl Binary files differnew file mode 100644 index 0000000..4263139 --- /dev/null +++ b/spell/en-academic.utf-8.spl diff --git a/stylua.toml b/stylua.toml new file mode 100644 index 0000000..4ac5841 --- /dev/null +++ b/stylua.toml @@ -0,0 +1,12 @@ +call_parentheses = "Always" +collapse_simple_statement = "Always" +column_width = 80 +indent_type = "Spaces" +indent_width = 4 +line_endings = "Unix" +quote_style = "AutoPreferDouble" +space_after_function_names = "Never" +syntax = "LuaJIT" + +[sort_requires] +enabled = true |
