summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--.emmyrc.json30
-rw-r--r--after/ftplugin/lua.vim9
-rw-r--r--after/ftplugin/mail.vim6
-rw-r--r--after/ftplugin/markdown.lua14
-rw-r--r--after/ftplugin/python.lua29
-rw-r--r--after/ftplugin/tex.lua19
-rw-r--r--after/lsp/emmylua_ls.lua29
-rw-r--r--after/lsp/qmlls.lua4
-rw-r--r--after/lsp/rust_analyzer.lua0
-rw-r--r--autoload/scratch.vim51
-rw-r--r--colors/habanight.vim102
-rw-r--r--colors/habarena.vim336
-rw-r--r--colors/myquiet.lua133
-rw-r--r--colors/mytorte.lua205
-rw-r--r--colors/notsoquiet.lua132
-rw-r--r--colors/parchment2.lua257
-rw-r--r--colors/sprinkles.vim250
-rw-r--r--init.lua138
-rw-r--r--lua/mo/blink.lua123
-rw-r--r--lua/mo/cmp.lua42
-rw-r--r--lua/mo/fzf.lua77
-rw-r--r--lua/mo/kinds.lua27
-rw-r--r--lua/mo/notif.lua8
-rw-r--r--lua/mo/oil-util.lua67
-rw-r--r--lua/mo/statusline.lua20
-rw-r--r--lua/mo/zen.lua89
-rw-r--r--nvim-pack-lock.json52
-rw-r--r--plugin/10_options.lua53
-rw-r--r--plugin/11_keymaps.lua58
-rw-r--r--plugin/12_autocommands.lua135
-rw-r--r--plugin/14_commands.lua44
-rw-r--r--plugin/20_treesitter.lua33
-rw-r--r--plugin/99_rest.lua22
-rw-r--r--plugin/plugins/alacritty.lua4
-rw-r--r--plugin/plugins/conform.lua20
-rw-r--r--plugin/plugins/mini.lua37
-rw-r--r--plugin/plugins/oil.lua76
-rw-r--r--plugin/plugins/quicker.lua14
-rw-r--r--plugin/plugins/rendermark.lua11
-rw-r--r--plugin/plugins/scratch.vim15
-rw-r--r--plugin/plugins/vimtex.lua21
-rw-r--r--snippets/latex.lua39
-rw-r--r--spell/en-academic.utf-8.splbin0 -> 82393 bytes
-rw-r--r--stylua.toml12
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
new file mode 100644
index 0000000..4263139
--- /dev/null
+++ b/spell/en-academic.utf-8.spl
Binary files differ
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