diff options
Diffstat (limited to '.config/nvim')
68 files changed, 2816 insertions, 0 deletions
diff --git a/.config/nvim/after/ftplugin/asciidoc.lua b/.config/nvim/after/ftplugin/asciidoc.lua new file mode 100644 index 0000000..f0cf7c5 --- /dev/null +++ b/.config/nvim/after/ftplugin/asciidoc.lua @@ -0,0 +1,9 @@ +local setlocal = vim.opt_local + +setlocal.tabstop = 4 +setlocal.softtabstop = 4 +setlocal.shiftwidth = 4 +setlocal.expandtab = true +setlocal.formatoptions = "tcqr" +setlocal.textwidth = 0 +-- setlocal.wrap diff --git a/.config/nvim/after/ftplugin/bash.lua b/.config/nvim/after/ftplugin/bash.lua new file mode 100644 index 0000000..f89e52a --- /dev/null +++ b/.config/nvim/after/ftplugin/bash.lua @@ -0,0 +1,7 @@ +local setlocal = vim.opt_local + +setlocal.tabstop = 4 +setlocal.softtabstop = 4 +setlocal.shiftwidth = 4 +setlocal.expandtab = true +setlocal.formatoptions:remove { "o" } diff --git a/.config/nvim/after/ftplugin/c.lua b/.config/nvim/after/ftplugin/c.lua new file mode 100644 index 0000000..7ae08c7 --- /dev/null +++ b/.config/nvim/after/ftplugin/c.lua @@ -0,0 +1,10 @@ +local setlocal = vim.opt_local + +setlocal.tabstop = 8 +setlocal.softtabstop = 8 +setlocal.shiftwidth = 8 +setlocal.expandtab = false +setlocal.cindent = true +setlocal.formatoptions:append { "ro" } +-- vim.cmd [[ set formatoptions += ro ]] +setlocal.formatoptions:remove { "o" } diff --git a/.config/nvim/after/ftplugin/cpp.lua b/.config/nvim/after/ftplugin/cpp.lua new file mode 100644 index 0000000..7ae08c7 --- /dev/null +++ b/.config/nvim/after/ftplugin/cpp.lua @@ -0,0 +1,10 @@ +local setlocal = vim.opt_local + +setlocal.tabstop = 8 +setlocal.softtabstop = 8 +setlocal.shiftwidth = 8 +setlocal.expandtab = false +setlocal.cindent = true +setlocal.formatoptions:append { "ro" } +-- vim.cmd [[ set formatoptions += ro ]] +setlocal.formatoptions:remove { "o" } diff --git a/.config/nvim/after/ftplugin/go.lua b/.config/nvim/after/ftplugin/go.lua new file mode 100644 index 0000000..450e922 --- /dev/null +++ b/.config/nvim/after/ftplugin/go.lua @@ -0,0 +1,11 @@ +local setlocal = vim.opt_local + +setlocal.tabstop = 8 +setlocal.softtabstop = 8 +setlocal.shiftwidth = 8 +setlocal.expandtab = false + +vim.keymap.set("n", "<space>td", function() + require("dap-go").debug_test() +end, { buffer = 0 }) +setlocal.formatoptions:remove { "o" } diff --git a/.config/nvim/after/ftplugin/grub.lua b/.config/nvim/after/ftplugin/grub.lua new file mode 100644 index 0000000..91b65e2 --- /dev/null +++ b/.config/nvim/after/ftplugin/grub.lua @@ -0,0 +1,3 @@ +local setlocal = vim.opt_local + +setlocal.formatoptions:remove { "o" } diff --git a/.config/nvim/after/ftplugin/haml.lua b/.config/nvim/after/ftplugin/haml.lua new file mode 100644 index 0000000..b0ca49c --- /dev/null +++ b/.config/nvim/after/ftplugin/haml.lua @@ -0,0 +1,8 @@ +local setlocal = vim.opt_local + +setlocal.expandtab = true +setlocal.tabstop = 2 +setlocal.softtabstop = 2 +setlocal.shiftwidth = 2 +setlocal.textwidth = 120 +setlocal.formatoptions:remove { "o" } diff --git a/.config/nvim/after/ftplugin/haskell.lua b/.config/nvim/after/ftplugin/haskell.lua new file mode 100644 index 0000000..b191344 --- /dev/null +++ b/.config/nvim/after/ftplugin/haskell.lua @@ -0,0 +1,8 @@ +local setlocal = vim.opt_local + +setlocal.expandtab = true +setlocal.tabstop = 2 +setlocal.softtabstop = 2 +setlocal.shiftwidth = 2 +setlocal.textwidth = 80 +setlocal.formatoptions:remove { "o" } diff --git a/.config/nvim/after/ftplugin/help.lua b/.config/nvim/after/ftplugin/help.lua new file mode 100644 index 0000000..ffe5fce --- /dev/null +++ b/.config/nvim/after/ftplugin/help.lua @@ -0,0 +1,8 @@ +local setlocal = vim.opt_local + +setlocal.expandtab = true +setlocal.tabstop = 4 +setlocal.softtabstop = 4 +setlocal.shiftwidth = 4 +setlocal.textwidth = 78 +setlocal.formatoptions:remove { "o" } diff --git a/.config/nvim/after/ftplugin/html.lua b/.config/nvim/after/ftplugin/html.lua new file mode 100644 index 0000000..b249bcc --- /dev/null +++ b/.config/nvim/after/ftplugin/html.lua @@ -0,0 +1,9 @@ +local setlocal = vim.opt_local + +setlocal.expandtab = true +setlocal.tabstop = 2 +setlocal.softtabstop = 2 +setlocal.shiftwidth = 2 + +vim.keymap.set("", "<F6>", ":!firefox %<CR>", { noremap = true, silent = true }) +setlocal.formatoptions:remove { "o" } diff --git a/.config/nvim/after/ftplugin/javascript.lua b/.config/nvim/after/ftplugin/javascript.lua new file mode 100644 index 0000000..b191344 --- /dev/null +++ b/.config/nvim/after/ftplugin/javascript.lua @@ -0,0 +1,8 @@ +local setlocal = vim.opt_local + +setlocal.expandtab = true +setlocal.tabstop = 2 +setlocal.softtabstop = 2 +setlocal.shiftwidth = 2 +setlocal.textwidth = 80 +setlocal.formatoptions:remove { "o" } diff --git a/.config/nvim/after/ftplugin/lisp.lua b/.config/nvim/after/ftplugin/lisp.lua new file mode 100644 index 0000000..91b65e2 --- /dev/null +++ b/.config/nvim/after/ftplugin/lisp.lua @@ -0,0 +1,3 @@ +local setlocal = vim.opt_local + +setlocal.formatoptions:remove { "o" } diff --git a/.config/nvim/after/ftplugin/lua.lua b/.config/nvim/after/ftplugin/lua.lua new file mode 100644 index 0000000..56d721a --- /dev/null +++ b/.config/nvim/after/ftplugin/lua.lua @@ -0,0 +1,9 @@ +local setlocal = vim.opt_local + +setlocal.expandtab = true +setlocal.tabstop = 2 +setlocal.softtabstop = 2 +setlocal.shiftwidth = 2 + +vim.keymap.set("", "<F6>", ":!lua %<CR>", { noremap = true, silent = true }) +setlocal.formatoptions:remove { "o" } diff --git a/.config/nvim/after/ftplugin/mail.lua b/.config/nvim/after/ftplugin/mail.lua new file mode 100644 index 0000000..4da9c4a --- /dev/null +++ b/.config/nvim/after/ftplugin/mail.lua @@ -0,0 +1,8 @@ +local setlocal = vim.opt_local + +setlocal.number = false +setlocal.relativenumber = false +setlocal.textwidth = 80 +-- setlocal.formatoptions:append { "w" } +setlocal.formatoptions = "tcjlw" +setlocal.formatoptions:remove { "o" } diff --git a/.config/nvim/after/ftplugin/make.lua b/.config/nvim/after/ftplugin/make.lua new file mode 100644 index 0000000..5193be9 --- /dev/null +++ b/.config/nvim/after/ftplugin/make.lua @@ -0,0 +1,7 @@ +local setlocal = vim.opt_local + +setlocal.tabstop = 8 +setlocal.softtabstop = 8 +setlocal.shiftwidth = 8 +setlocal.expandtab = false +setlocal.formatoptions:remove { "o" } diff --git a/.config/nvim/after/ftplugin/markdown.lua b/.config/nvim/after/ftplugin/markdown.lua new file mode 100644 index 0000000..21d62bb --- /dev/null +++ b/.config/nvim/after/ftplugin/markdown.lua @@ -0,0 +1,7 @@ +local setlocal = vim.opt_local + +setlocal.expandtab = true +setlocal.tabstop = 4 +setlocal.softtabstop = 4 +setlocal.shiftwidth = 4 +setlocal.formatoptions:remove { "o" } diff --git a/.config/nvim/after/ftplugin/perl.lua b/.config/nvim/after/ftplugin/perl.lua new file mode 100644 index 0000000..5b95f5d --- /dev/null +++ b/.config/nvim/after/ftplugin/perl.lua @@ -0,0 +1,8 @@ +local setlocal = vim.opt_local + +setlocal.expandtab = true +setlocal.tabstop = 4 +setlocal.softtabstop = 4 +setlocal.shiftwidth = 4 + +vim.keymap.set("", "<F6>", ":!perl %<CR>", { noremap = true, silent = true }) diff --git a/.config/nvim/after/ftplugin/pgsql.lua b/.config/nvim/after/ftplugin/pgsql.lua new file mode 100644 index 0000000..91b65e2 --- /dev/null +++ b/.config/nvim/after/ftplugin/pgsql.lua @@ -0,0 +1,3 @@ +local setlocal = vim.opt_local + +setlocal.formatoptions:remove { "o" } diff --git a/.config/nvim/after/ftplugin/php.lua b/.config/nvim/after/ftplugin/php.lua new file mode 100644 index 0000000..d6e9005 --- /dev/null +++ b/.config/nvim/after/ftplugin/php.lua @@ -0,0 +1,9 @@ +local setlocal = vim.opt_local + +setlocal.expandtab = true +setlocal.tabstop = 4 +setlocal.softtabstop = 4 +setlocal.shiftwidth = 4 + +vim.keymap.set("", "<F6>", ":!php -f %<CR>", { noremap = true, silent = true }) +setlocal.formatoptions:remove { "o" } diff --git a/.config/nvim/after/ftplugin/python.lua b/.config/nvim/after/ftplugin/python.lua new file mode 100644 index 0000000..feab3c8 --- /dev/null +++ b/.config/nvim/after/ftplugin/python.lua @@ -0,0 +1,9 @@ +local setlocal = vim.opt_local + +setlocal.expandtab = true +setlocal.tabstop = 4 +setlocal.softtabstop = 4 +setlocal.shiftwidth = 4 + +vim.keymap.set("", "<F6>", ":!python %<CR>", { noremap = true, silent = true }) +setlocal.formatoptions:remove { "o" } diff --git a/.config/nvim/after/ftplugin/ruby.lua b/.config/nvim/after/ftplugin/ruby.lua new file mode 100644 index 0000000..080c18e --- /dev/null +++ b/.config/nvim/after/ftplugin/ruby.lua @@ -0,0 +1,9 @@ +local setlocal = vim.opt_local + +setlocal.expandtab = true +setlocal.tabstop = 2 +setlocal.softtabstop = 2 +setlocal.shiftwidth = 2 + +vim.keymap.set("", "<F6>", ":!ruby %<CR>", { noremap = true, silent = true }) +setlocal.formatoptions:remove { "o" } diff --git a/.config/nvim/after/ftplugin/rust.lua b/.config/nvim/after/ftplugin/rust.lua new file mode 100644 index 0000000..21d62bb --- /dev/null +++ b/.config/nvim/after/ftplugin/rust.lua @@ -0,0 +1,7 @@ +local setlocal = vim.opt_local + +setlocal.expandtab = true +setlocal.tabstop = 4 +setlocal.softtabstop = 4 +setlocal.shiftwidth = 4 +setlocal.formatoptions:remove { "o" } diff --git a/.config/nvim/after/ftplugin/sh.lua b/.config/nvim/after/ftplugin/sh.lua new file mode 100644 index 0000000..f89e52a --- /dev/null +++ b/.config/nvim/after/ftplugin/sh.lua @@ -0,0 +1,7 @@ +local setlocal = vim.opt_local + +setlocal.tabstop = 4 +setlocal.softtabstop = 4 +setlocal.shiftwidth = 4 +setlocal.expandtab = true +setlocal.formatoptions:remove { "o" } diff --git a/.config/nvim/after/ftplugin/sh/pkgbuild.lua b/.config/nvim/after/ftplugin/sh/pkgbuild.lua new file mode 100644 index 0000000..7fb3958 --- /dev/null +++ b/.config/nvim/after/ftplugin/sh/pkgbuild.lua @@ -0,0 +1,3 @@ +if vim.fn.expand('%:t') == 'PKGBUILD' then + vim.env.SHELLCHECK_OPTS = "--exclude=SC2034,SC2154,SC1090,SC1091,SC2086,SC2164" +end diff --git a/.config/nvim/after/ftplugin/sql.lua b/.config/nvim/after/ftplugin/sql.lua new file mode 100644 index 0000000..0477f19 --- /dev/null +++ b/.config/nvim/after/ftplugin/sql.lua @@ -0,0 +1,4 @@ +local setlocal = vim.opt_local + +setlocal.commentstring = "-- %s" +setlocal.formatoptions:remove { "o" } diff --git a/.config/nvim/after/ftplugin/tex.lua b/.config/nvim/after/ftplugin/tex.lua new file mode 100644 index 0000000..8e8f8fa --- /dev/null +++ b/.config/nvim/after/ftplugin/tex.lua @@ -0,0 +1,5 @@ +local setlocal = vim.opt_local + +setlocal.wrap = true +setlocal.textwidth = 120 +setlocal.formatoptions:remove { "o" } diff --git a/.config/nvim/after/ftplugin/vim.lua b/.config/nvim/after/ftplugin/vim.lua new file mode 100644 index 0000000..f89e52a --- /dev/null +++ b/.config/nvim/after/ftplugin/vim.lua @@ -0,0 +1,7 @@ +local setlocal = vim.opt_local + +setlocal.tabstop = 4 +setlocal.softtabstop = 4 +setlocal.shiftwidth = 4 +setlocal.expandtab = true +setlocal.formatoptions:remove { "o" } diff --git a/.config/nvim/after/ftplugin/vimwiki.lua b/.config/nvim/after/ftplugin/vimwiki.lua new file mode 100644 index 0000000..c96da6a --- /dev/null +++ b/.config/nvim/after/ftplugin/vimwiki.lua @@ -0,0 +1,5 @@ +local setlocal = vim.opt_local + +setlocal.wrap = false +setlocal.textwidth = 120 +setlocal.formatoptions:remove { "o" } diff --git a/.config/nvim/after/ftplugin/vue.lua b/.config/nvim/after/ftplugin/vue.lua new file mode 100644 index 0000000..c206a4c --- /dev/null +++ b/.config/nvim/after/ftplugin/vue.lua @@ -0,0 +1,8 @@ +local setlocal = vim.opt_local + +setlocal.expandtab = true +setlocal.tabstop = 2 +setlocal.softtabstop = 2 +setlocal.shiftwidth = 2 +setlocal.textwidth = 200 +setlocal.formatoptions:remove { "o" } diff --git a/.config/nvim/after/ftplugin/xhtml.lua b/.config/nvim/after/ftplugin/xhtml.lua new file mode 100644 index 0000000..b249bcc --- /dev/null +++ b/.config/nvim/after/ftplugin/xhtml.lua @@ -0,0 +1,9 @@ +local setlocal = vim.opt_local + +setlocal.expandtab = true +setlocal.tabstop = 2 +setlocal.softtabstop = 2 +setlocal.shiftwidth = 2 + +vim.keymap.set("", "<F6>", ":!firefox %<CR>", { noremap = true, silent = true }) +setlocal.formatoptions:remove { "o" } diff --git a/.config/nvim/after/ftplugin/zsh.lua b/.config/nvim/after/ftplugin/zsh.lua new file mode 100644 index 0000000..f89e52a --- /dev/null +++ b/.config/nvim/after/ftplugin/zsh.lua @@ -0,0 +1,7 @@ +local setlocal = vim.opt_local + +setlocal.tabstop = 4 +setlocal.softtabstop = 4 +setlocal.shiftwidth = 4 +setlocal.expandtab = true +setlocal.formatoptions:remove { "o" } diff --git a/.config/nvim/colors/gruvbox.lua b/.config/nvim/colors/gruvbox.lua new file mode 100644 index 0000000..8d9a20e --- /dev/null +++ b/.config/nvim/colors/gruvbox.lua @@ -0,0 +1 @@ +require("config.gruvbox").load() diff --git a/.config/nvim/init.lua b/.config/nvim/init.lua new file mode 100644 index 0000000..3bf17c5 --- /dev/null +++ b/.config/nvim/init.lua @@ -0,0 +1,14 @@ +vim.g.mapleader = " " + +require("config.lazy") +require("config.keymaps") +require("config.options") +require("config.autocmd") +require("config.lsp") +require("config.terminal") + +-- vim.opt.runtimepath:append "~/.vim,~/.vim/after" +-- vim.cmd [[ +-- let &packpath = &runtimepath +-- source ~/.vimrc +-- ]] diff --git a/.config/nvim/lsp/bashls.lua b/.config/nvim/lsp/bashls.lua new file mode 100644 index 0000000..88cc2b1 --- /dev/null +++ b/.config/nvim/lsp/bashls.lua @@ -0,0 +1,7 @@ +return { + cmd = { "bash-language-server", "start" }, + filetypes = { "bash", "sh" }, + root_markers = { ".git", }, + single_file_support = true, + settings = {}, +} diff --git a/.config/nvim/lsp/clangd.lua b/.config/nvim/lsp/clangd.lua new file mode 100644 index 0000000..ad2b669 --- /dev/null +++ b/.config/nvim/lsp/clangd.lua @@ -0,0 +1,13 @@ +return { + cmd = { "clangd" }, + root_markers = { ".clangd", "compile_commands.json" }, + init_options = { clangdFilestatus = true }, + filetypes = { "c", "cpp" }, + capabilities = { + textDocument = { + semanticTokens = { + multilineTokenSupport = true, + } + } + } +} diff --git a/.config/nvim/lsp/cssls.lua b/.config/nvim/lsp/cssls.lua new file mode 100644 index 0000000..01e73c4 --- /dev/null +++ b/.config/nvim/lsp/cssls.lua @@ -0,0 +1,20 @@ +return { + init_options = { provideFormatter = true }, -- needed to enable formatting capabilities + cmd = { 'vscode-css-language-server', '--stdio' }, + filetypes = { 'css', 'scss', 'less' }, + root_markers = { 'package.json', '.git' }, + settings = { + css = { validate = true }, + scss = { validate = true }, + less = { validate = true }, + }, + capabilities = { + textDocument = { + completion = { + completionItem = { + snippetSupport = true, + } + } + } + } +} diff --git a/.config/nvim/lsp/gopls.lua b/.config/nvim/lsp/gopls.lua new file mode 100644 index 0000000..a72ff1f --- /dev/null +++ b/.config/nvim/lsp/gopls.lua @@ -0,0 +1,9 @@ +return { + cmd = { "gopls" }, + filetypes = { "go", "gomod", "gowork", "gotmpl" }, + root_markers = { + "go.work", + "go.mod", + ".git", + }, +} diff --git a/.config/nvim/lsp/jsonls.lua b/.config/nvim/lsp/jsonls.lua new file mode 100644 index 0000000..98da93b --- /dev/null +++ b/.config/nvim/lsp/jsonls.lua @@ -0,0 +1,8 @@ +return { + settings = { + json = { + schemas = require("schemastore").json.schemas(), + validate = { enable = true }, + }, + }, +} diff --git a/.config/nvim/lsp/lua_ls.lua b/.config/nvim/lsp/lua_ls.lua new file mode 100644 index 0000000..936557c --- /dev/null +++ b/.config/nvim/lsp/lua_ls.lua @@ -0,0 +1,12 @@ +return { + cmd = { "lua-language-server" }, + filetypes = { "lua" }, + root_markers = { ".luarc.json", ".luarc.jsonc" }, + settings = { + Lua = { + runtime = { + version = "LuaJIT", + }, + }, + }, +} diff --git a/.config/nvim/lsp/pyright.lua b/.config/nvim/lsp/pyright.lua new file mode 100644 index 0000000..d5a139a --- /dev/null +++ b/.config/nvim/lsp/pyright.lua @@ -0,0 +1,34 @@ +return { + cmd = { "pyright-langserver", "--stdio" }, + filetypes = { "python" }, + root_markers = { + "pyproject.toml", + "setup.py", + "setup.cfg", + "requirements.txt", + "Pipfile", + "pyrightconfig.json", + ".git", + }, + capabilities = { + offsetEncoding = { "utf-8" }, + }, + single_file_support = true, + settings = { + pyright = { + -- use ruff import organizer + disableOrganizeImports = true, + }, + python = { + analysis = { + -- ignore all files for analysis and use ruff for linting + ignore = { '*' }, + -- diagnosticSeverityOverrides = "none", + autoSearchPaths = true, + useLibraryCodeForTypes = true, + diagnosticMode = "openFilesOnly", + -- typeCheckingMode = "off", + }, + }, + }, +} diff --git a/.config/nvim/lsp/rubocop.lua b/.config/nvim/lsp/rubocop.lua new file mode 100644 index 0000000..b04c9a4 --- /dev/null +++ b/.config/nvim/lsp/rubocop.lua @@ -0,0 +1,5 @@ +return { + cmd = { 'rubocop', '--lsp' }, + filetypes = { 'ruby' }, + root_markers = { 'Gemfile', '.git' }, +} diff --git a/.config/nvim/lsp/ruby-lsp.lua b/.config/nvim/lsp/ruby-lsp.lua new file mode 100644 index 0000000..9403914 --- /dev/null +++ b/.config/nvim/lsp/ruby-lsp.lua @@ -0,0 +1,9 @@ +return { + cmd = { 'ruby-lsp' }, + filetypes = { 'ruby', 'eruby' }, + root_markers = { 'Gemfile', '.git' }, + init_options = { + formatter = 'auto', + }, + single_file_support = true, +} diff --git a/.config/nvim/lsp/ruff.lua b/.config/nvim/lsp/ruff.lua new file mode 100644 index 0000000..d00352c --- /dev/null +++ b/.config/nvim/lsp/ruff.lua @@ -0,0 +1,11 @@ +return { + cmd = { "ruff", "server" }, + filetypes = { "python" }, + root_markers = { + "pyproject.toml", + "ruff.toml", + ".ruff.toml", + }, + single_file_support = true, + settings = {}, +} diff --git a/.config/nvim/lsp/rust_analyzer.lua b/.config/nvim/lsp/rust_analyzer.lua new file mode 100644 index 0000000..df5c1de --- /dev/null +++ b/.config/nvim/lsp/rust_analyzer.lua @@ -0,0 +1,19 @@ +return { + cmd = { "rust-analyzer" }, + filetypes = { "rust" }, + root_markers = { "Cargo.toml", ".git" }, + single_file_support = true, + capabilities = { + experimental = { + serverStatusNotification = true, + }, + }, + before_init = function(init_params, config) + -- See https://github.com/rust-lang/rust-analyzer/blob/eb5da56d839ae0a9e9f50774fa3eb78eb0964550/docs/dev/lsp-extensions.md?plain=1#L26 + if config.settings and config.settings['rust-analyzer'] then + init_params.initializationOptions = config.settings['rust-analyzer'] + end + end, +} + +-- cmd = { "socat", "-", "UNIX-CONNECT:/tmp/rust-analyzer.sock" }, diff --git a/.config/nvim/lsp/ts_ls.lua b/.config/nvim/lsp/ts_ls.lua new file mode 100644 index 0000000..e9ef670 --- /dev/null +++ b/.config/nvim/lsp/ts_ls.lua @@ -0,0 +1,83 @@ +return { + init_options = { hostInfo = 'neovim' }, + cmd = { 'typescript-language-server', '--stdio' }, + filetypes = { + 'javascript', + 'javascriptreact', + 'javascript.jsx', + 'typescript', + 'typescriptreact', + 'typescript.tsx', + }, + root_dir = function(bufnr, on_dir) + -- The project root is where the LSP can be started from + -- As stated in the documentation above, this LSP supports monorepos and simple projects. + -- We select then from the project root, which is identified by the presence of a package + -- manager lock file. + local root_markers = { 'package-lock.json', 'yarn.lock', 'pnpm-lock.yaml', 'bun.lockb', 'bun.lock', 'deno.lock' } + -- Give the root markers equal priority by wrapping them in a table + root_markers = vim.fn.has('nvim-0.11.3') == 1 and { root_markers, { '.git' } } + or vim.list_extend(root_markers, { '.git' }) + -- We fallback to the current working directory if no project root is found + local project_root = vim.fs.root(bufnr, root_markers) or vim.fn.getcwd() + + on_dir(project_root) + end, + handlers = { + -- handle rename request for certain code actions like extracting functions / types + ['_typescript.rename'] = function(_, result, ctx) + local client = assert(vim.lsp.get_client_by_id(ctx.client_id)) + vim.lsp.util.show_document({ + uri = result.textDocument.uri, + range = { + start = result.position, + ['end'] = result.position, + }, + }, client.offset_encoding) + vim.lsp.buf.rename() + return vim.NIL + end, + }, + commands = { + ['editor.action.showReferences'] = function(command, ctx) + local client = assert(vim.lsp.get_client_by_id(ctx.client_id)) + local file_uri, position, references = unpack(command.arguments) + + local quickfix_items = vim.lsp.util.locations_to_items(references, client.offset_encoding) + vim.fn.setqflist({}, ' ', { + title = command.title, + items = quickfix_items, + context = { + command = command, + bufnr = ctx.bufnr, + }, + }) + + vim.lsp.util.show_document({ + uri = file_uri, + range = { + start = position, + ['end'] = position, + }, + }, client.offset_encoding) + + vim.cmd('botright copen') + end, + }, + on_attach = function(client, bufnr) + -- ts_ls provides `source.*` code actions that apply to the whole file. These only appear in + -- `vim.lsp.buf.code_action()` if specified in `context.only`. + vim.api.nvim_buf_create_user_command(bufnr, 'LspTypescriptSourceAction', function() + local source_actions = vim.tbl_filter(function(action) + return vim.startswith(action, 'source.') + end, client.server_capabilities.codeActionProvider.codeActionKinds) + + vim.lsp.buf.code_action({ + context = { + diagnostics = {}, + only = source_actions, + }, + }) + end, {}) + end, +} diff --git a/.config/nvim/lsp/ty.lua b/.config/nvim/lsp/ty.lua new file mode 100644 index 0000000..a5503ea --- /dev/null +++ b/.config/nvim/lsp/ty.lua @@ -0,0 +1,13 @@ +return { + -- init_options = { + -- logLevel = "debug", + -- logFile = "/tmp/ty.log", + -- }, + cmd = { "ty", "server" }, + filetypes = { "python" }, + root_markers = { + "ty.toml", + "pyproject.toml", + ".git", + }, +} diff --git a/.config/nvim/lua/config/autocmd.lua b/.config/nvim/lua/config/autocmd.lua new file mode 100644 index 0000000..9cdb78d --- /dev/null +++ b/.config/nvim/lua/config/autocmd.lua @@ -0,0 +1,83 @@ +local au = vim.api.nvim_create_autocmd +local augroup = vim.api.nvim_create_augroup +local ag = augroup("default", {}) +local ft = augroup("filetypes", {}) + +-- shortly highlight yanks +au("TextYankPost", { + group = ag, + pattern = "*", + callback = function() + vim.highlight.on_yank({ higroup = "IncSearch", timeout = 250, on_visual = true }) + end, +}) + +au("WinEnter", { + group = ag, + pattern = "*", + callback = function() + vim.opt_local.cursorline = true + end, +}) +au("WinLeave", { + group = ag, + pattern = "*", + callback = function() + vim.opt_local.cursorline = false + end, +}) + +-- highlight extra whitespace +local hlstmt = [[highlight ExtraWhitespace ctermbg=red guibg=red]] +vim.cmd(hlstmt) +au("ColorScheme", { + group = ag, + pattern = "*", + callback = function() + vim.cmd(hlstmt) + end, +}) +vim.cmd([[match ExtraWhitespace /\s\+$\| \+\ze\t/]]) + +-- only show color col in insert mode +au("InsertEnter", { + group = ag, + pattern = "*", + callback = function() + vim.o.colorcolumn = "78" + end, +}) +au("InsertLeave", { + group = ag, + pattern = "*", + callback = function() + vim.o.colorcolumn = "" + end, +}) + +-- resize splits upon window resize +au("VimResized", { + group = ag, + pattern = "*", + callback = function() + vim.cmd([[exe "normal! \<C-w>="]]) + end, +}) + +-- ms word doc reading +au("BufReadPre", { + group = ft, + pattern = "*.doc{x,}", + callback = function() + vim.opt_local.readonly = true + end, +}) +vim.cmd([[au BufReadPost *.doc %!antiword "%"]]) +vim.cmd([[au BufReadPost *.docx %!docx2txt "%" -]]) + +-- remove whitespace at the end of line +au({ "BufWritePre" }, { + group = ag, + pattern = "*", + command = [[%s/\s\+$//e]], +}) diff --git a/.config/nvim/lua/config/gruvbox.lua b/.config/nvim/lua/config/gruvbox.lua new file mode 100644 index 0000000..3a9b161 --- /dev/null +++ b/.config/nvim/lua/config/gruvbox.lua @@ -0,0 +1,1305 @@ +---@class Gruvbox +---@field config GruvboxConfig +---@field palette GruvboxPalette +local Gruvbox = {} + +---@alias Contrast "hard" | "soft" | "" + +---@class ItalicConfig +---@field strings boolean +---@field comments boolean +---@field operators boolean +---@field folds boolean +---@field emphasis boolean + +---@class HighlightDefinition +---@field fg string? +---@field bg string? +---@field sp string? +---@field blend integer? +---@field bold boolean? +---@field standout boolean? +---@field underline boolean? +---@field undercurl boolean? +---@field underdouble boolean? +---@field underdotted boolean? +---@field strikethrough boolean? +---@field italic boolean? +---@field reverse boolean? +---@field nocombine boolean? + +---@class GruvboxConfig +---@field bold boolean? +---@field contrast Contrast? +---@field dim_inactive boolean? +---@field inverse boolean? +---@field invert_selection boolean? +---@field invert_signs boolean? +---@field invert_tabline boolean? +---@field italic ItalicConfig? +---@field overrides table<string, HighlightDefinition>? +---@field palette_overrides table<string, string>? +---@field strikethrough boolean? +---@field terminal_colors boolean? +---@field transparent_mode boolean? +---@field undercurl boolean? +---@field underline boolean? +local default_config = { + terminal_colors = true, + undercurl = true, + underline = true, + bold = true, + italic = { + strings = true, + emphasis = true, + comments = true, + operators = false, + folds = true, + }, + strikethrough = true, + invert_selection = false, + invert_signs = false, + invert_tabline = false, + inverse = true, + contrast = "hard", + palette_overrides = {}, + overrides = {}, + dim_inactive = false, + transparent_mode = false, +} + +Gruvbox.config = vim.deepcopy(default_config) + +-- main gruvbox color palette +---@class GruvboxPalette +Gruvbox.palette = { + dark0_hard = "#1d2021", + dark0 = "#282828", + dark0_soft = "#32302f", + dark1 = "#3c3836", + dark2 = "#504945", + dark3 = "#665c54", + dark4 = "#7c6f64", + light0_hard = "#f9f5d7", + light0 = "#fbf1c7", + light0_soft = "#f2e5bc", + light1 = "#ebdbb2", + light2 = "#d5c4a1", + light3 = "#bdae93", + light4 = "#a89984", + bright_red = "#fb4934", + bright_green = "#b8bb26", + bright_yellow = "#fabd2f", + bright_blue = "#83a598", + bright_purple = "#d3869b", + bright_aqua = "#8ec07c", + bright_orange = "#fe8019", + neutral_red = "#cc241d", + neutral_green = "#98971a", + neutral_yellow = "#d79921", + neutral_blue = "#458588", + neutral_purple = "#b16286", + neutral_aqua = "#689d6a", + neutral_orange = "#d65d0e", + faded_red = "#9d0006", + faded_green = "#79740e", + faded_yellow = "#b57614", + faded_blue = "#076678", + faded_purple = "#8f3f71", + faded_aqua = "#427b58", + faded_orange = "#af3a03", + dark_red_hard = "#792329", + dark_red = "#722529", + dark_red_soft = "#7b2c2f", + light_red_hard = "#fc9690", + light_red = "#fc9487", + light_red_soft = "#f78b7f", + dark_green_hard = "#5a633a", + dark_green = "#62693e", + dark_green_soft = "#686d43", + light_green_hard = "#d3d6a5", + light_green = "#d5d39b", + light_green_soft = "#cecb94", + dark_aqua_hard = "#3e4934", + dark_aqua = "#49503b", + dark_aqua_soft = "#525742", + light_aqua_hard = "#e6e9c1", + light_aqua = "#e8e5b5", + light_aqua_soft = "#e1dbac", + gray = "#928374", +} + +-- get a hex list of gruvbox colors based on current bg and constrast config +local function get_colors() + local p = Gruvbox.palette + local config = Gruvbox.config + + for color, hex in pairs(config.palette_overrides) do + p[color] = hex + end + + local bg = vim.o.background + local contrast = config.contrast + + local color_groups = { + dark = { + bg0 = p.dark0, + bg1 = p.dark1, + bg2 = p.dark2, + bg3 = p.dark3, + bg4 = p.dark4, + fg0 = p.light0, + fg1 = p.light1, + fg2 = p.light2, + fg3 = p.light3, + fg4 = p.light4, + red = p.bright_red, + green = p.bright_green, + yellow = p.bright_yellow, + blue = p.bright_blue, + purple = p.bright_purple, + aqua = p.bright_aqua, + orange = p.bright_orange, + neutral_red = p.neutral_red, + neutral_green = p.neutral_green, + neutral_yellow = p.neutral_yellow, + neutral_blue = p.neutral_blue, + neutral_purple = p.neutral_purple, + neutral_aqua = p.neutral_aqua, + dark_red = p.dark_red, + dark_green = p.dark_green, + dark_aqua = p.dark_aqua, + gray = p.gray, + }, + light = { + bg0 = p.light0, + bg1 = p.light1, + bg2 = p.light2, + bg3 = p.light3, + bg4 = p.light4, + fg0 = p.dark0, + fg1 = p.dark1, + fg2 = p.dark2, + fg3 = p.dark3, + fg4 = p.dark4, + red = p.faded_red, + green = p.faded_green, + yellow = p.faded_yellow, + blue = p.faded_blue, + purple = p.faded_purple, + aqua = p.faded_aqua, + orange = p.faded_orange, + neutral_red = p.neutral_red, + neutral_green = p.neutral_green, + neutral_yellow = p.neutral_yellow, + neutral_blue = p.neutral_blue, + neutral_purple = p.neutral_purple, + neutral_aqua = p.neutral_aqua, + dark_red = p.light_red, + dark_green = p.light_green, + dark_aqua = p.light_aqua, + gray = p.gray, + }, + } + + if contrast ~= nil and contrast ~= "" then + color_groups[bg].bg0 = p[bg .. "0_" .. contrast] + color_groups[bg].dark_red = p[bg .. "_red_" .. contrast] + color_groups[bg].dark_green = p[bg .. "_green_" .. contrast] + color_groups[bg].dark_aqua = p[bg .. "_aqua_" .. contrast] + end + + return color_groups[bg] +end + +local function get_groups() + local colors = get_colors() + local config = Gruvbox.config + + if config.terminal_colors then + local term_colors = { + colors.bg0, + colors.neutral_red, + colors.neutral_green, + colors.neutral_yellow, + colors.neutral_blue, + colors.neutral_purple, + colors.neutral_aqua, + colors.fg4, + colors.gray, + colors.red, + colors.green, + colors.yellow, + colors.blue, + colors.purple, + colors.aqua, + colors.fg1, + } + for index, value in ipairs(term_colors) do + vim.g["terminal_color_" .. index - 1] = value + end + end + + local groups = { + GruvboxFg0 = { fg = colors.fg0 }, + GruvboxFg1 = { fg = colors.fg1 }, + GruvboxFg2 = { fg = colors.fg2 }, + GruvboxFg3 = { fg = colors.fg3 }, + GruvboxFg4 = { fg = colors.fg4 }, + GruvboxGray = { fg = colors.gray }, + GruvboxBg0 = { fg = colors.bg0 }, + GruvboxBg1 = { fg = colors.bg1 }, + GruvboxBg2 = { fg = colors.bg2 }, + GruvboxBg3 = { fg = colors.bg3 }, + GruvboxBg4 = { fg = colors.bg4 }, + GruvboxRed = { fg = colors.red }, + GruvboxRedBold = { fg = colors.red, bold = config.bold }, + GruvboxGreen = { fg = colors.green }, + GruvboxGreenBold = { fg = colors.green, bold = config.bold }, + GruvboxYellow = { fg = colors.yellow }, + GruvboxYellowBold = { fg = colors.yellow, bold = config.bold }, + GruvboxBlue = { fg = colors.blue }, + GruvboxBlueBold = { fg = colors.blue, bold = config.bold }, + GruvboxPurple = { fg = colors.purple }, + GruvboxPurpleBold = { fg = colors.purple, bold = config.bold }, + GruvboxAqua = { fg = colors.aqua }, + GruvboxAquaBold = { fg = colors.aqua, bold = config.bold }, + GruvboxOrange = { fg = colors.orange }, + GruvboxOrangeBold = { fg = colors.orange, bold = config.bold }, + GruvboxRedSign = config.transparent_mode and { fg = colors.red, reverse = config.invert_signs } + or { fg = colors.red, bg = colors.bg1, reverse = config.invert_signs }, + GruvboxGreenSign = config.transparent_mode and { fg = colors.green, reverse = config.invert_signs } + or { fg = colors.green, bg = colors.bg1, reverse = config.invert_signs }, + GruvboxYellowSign = config.transparent_mode and { fg = colors.yellow, reverse = config.invert_signs } + or { fg = colors.yellow, bg = colors.bg1, reverse = config.invert_signs }, + GruvboxBlueSign = config.transparent_mode and { fg = colors.blue, reverse = config.invert_signs } + or { fg = colors.blue, bg = colors.bg1, reverse = config.invert_signs }, + GruvboxPurpleSign = config.transparent_mode and { fg = colors.purple, reverse = config.invert_signs } + or { fg = colors.purple, bg = colors.bg1, reverse = config.invert_signs }, + GruvboxAquaSign = config.transparent_mode and { fg = colors.aqua, reverse = config.invert_signs } + or { fg = colors.aqua, bg = colors.bg1, reverse = config.invert_signs }, + GruvboxOrangeSign = config.transparent_mode and { fg = colors.orange, reverse = config.invert_signs } + or { fg = colors.orange, bg = colors.bg1, reverse = config.invert_signs }, + GruvboxRedUnderline = { undercurl = config.undercurl, sp = colors.red }, + GruvboxGreenUnderline = { undercurl = config.undercurl, sp = colors.green }, + GruvboxYellowUnderline = { undercurl = config.undercurl, sp = colors.yellow }, + GruvboxBlueUnderline = { undercurl = config.undercurl, sp = colors.blue }, + GruvboxPurpleUnderline = { undercurl = config.undercurl, sp = colors.purple }, + GruvboxAquaUnderline = { undercurl = config.undercurl, sp = colors.aqua }, + GruvboxOrangeUnderline = { undercurl = config.undercurl, sp = colors.orange }, + Normal = config.transparent_mode and { fg = colors.fg1, bg = nil } or { fg = colors.fg1, bg = colors.bg0 }, + NormalFloat = config.transparent_mode and { fg = colors.fg1, bg = nil } or { fg = colors.fg1, bg = colors.bg1 }, + NormalNC = config.dim_inactive and { fg = colors.fg0, bg = colors.bg1 } or { link = "Normal" }, + CursorLine = { bg = colors.bg1 }, + CursorColumn = { link = "CursorLine" }, + TabLineFill = { fg = colors.bg4, bg = colors.bg1, reverse = config.invert_tabline }, + TabLineSel = { fg = colors.green, bg = colors.bg1, reverse = config.invert_tabline }, + TabLine = { link = "TabLineFill" }, + MatchParen = { bg = colors.bg3, bold = config.bold }, + ColorColumn = { bg = colors.bg1 }, + Conceal = { fg = colors.blue }, + CursorLineNr = { fg = colors.yellow, bg = colors.bg1 }, + NonText = { link = "GruvboxBg2" }, + SpecialKey = { link = "GruvboxFg4" }, + Visual = { bg = colors.bg3, reverse = config.invert_selection }, + VisualNOS = { link = "Visual" }, + Search = { fg = colors.yellow, bg = colors.bg0, reverse = config.inverse }, + IncSearch = { fg = colors.orange, bg = colors.bg0, reverse = config.inverse }, + CurSearch = { link = "IncSearch" }, + QuickFixLine = { link = "GruvboxPurple" }, + Underlined = { fg = colors.blue, underline = config.underline }, + StatusLine = { fg = colors.fg1, bg = colors.bg2 }, + StatusLineNC = { fg = colors.fg4, bg = colors.bg1 }, + WinBar = { fg = colors.fg4, bg = colors.bg0 }, + WinBarNC = { fg = colors.fg3, bg = colors.bg1 }, + WinSeparator = config.transparent_mode and { fg = colors.bg3, bg = nil } or { fg = colors.bg3, bg = colors.bg0 }, + WildMenu = { fg = colors.blue, bg = colors.bg2, bold = config.bold }, + Directory = { link = "GruvboxGreenBold" }, + Title = { link = "GruvboxGreenBold" }, + ErrorMsg = { fg = colors.bg0, bg = colors.red, bold = config.bold }, + MoreMsg = { link = "GruvboxYellowBold" }, + ModeMsg = { link = "GruvboxYellowBold" }, + Question = { link = "GruvboxOrangeBold" }, + WarningMsg = { link = "GruvboxRedBold" }, + LineNr = { fg = colors.bg4 }, + SignColumn = config.transparent_mode and { bg = nil } or { bg = colors.bg1 }, + Folded = { fg = colors.gray, bg = colors.bg1, italic = config.italic.folds }, + FoldColumn = config.transparent_mode and { fg = colors.gray, bg = nil } or { fg = colors.gray, bg = colors.bg1 }, + Cursor = { reverse = config.inverse }, + vCursor = { link = "Cursor" }, + iCursor = { link = "Cursor" }, + lCursor = { link = "Cursor" }, + Special = { link = "GruvboxOrange" }, + Comment = { fg = colors.gray, italic = config.italic.comments }, + Todo = { fg = colors.bg0, bg = colors.yellow, bold = config.bold, italic = config.italic.comments }, + Done = { fg = colors.orange, bold = config.bold, italic = config.italic.comments }, + Error = { fg = colors.red, bold = config.bold, reverse = config.inverse }, + Statement = { link = "GruvboxRed" }, + Conditional = { link = "GruvboxRed" }, + Repeat = { link = "GruvboxRed" }, + Label = { link = "GruvboxRed" }, + Exception = { link = "GruvboxRed" }, + Operator = { fg = colors.orange, italic = config.italic.operators }, + Keyword = { link = "GruvboxRed" }, + Identifier = { link = "GruvboxBlue" }, + Function = { link = "GruvboxGreenBold" }, + PreProc = { link = "GruvboxAqua" }, + Include = { link = "GruvboxAqua" }, + Define = { link = "GruvboxAqua" }, + Macro = { link = "GruvboxAqua" }, + PreCondit = { link = "GruvboxAqua" }, + Constant = { link = "GruvboxPurple" }, + Character = { link = "GruvboxPurple" }, + String = { fg = colors.green, italic = config.italic.strings }, + Boolean = { link = "GruvboxPurple" }, + Number = { link = "GruvboxPurple" }, + Float = { link = "GruvboxPurple" }, + Type = { link = "GruvboxYellow" }, + StorageClass = { link = "GruvboxOrange" }, + Structure = { link = "GruvboxAqua" }, + Typedef = { link = "GruvboxYellow" }, + Pmenu = { fg = colors.fg1, bg = colors.bg2 }, + PmenuSel = { fg = colors.bg2, bg = colors.blue, bold = config.bold }, + PmenuSbar = { bg = colors.bg2 }, + PmenuThumb = { bg = colors.bg4 }, + DiffDelete = { bg = colors.dark_red }, + DiffAdd = { bg = colors.dark_green }, + DiffChange = { bg = colors.dark_aqua }, + DiffText = { bg = colors.yellow, fg = colors.bg0 }, + SpellCap = { link = "GruvboxBlueUnderline" }, + SpellBad = { link = "GruvboxRedUnderline" }, + SpellLocal = { link = "GruvboxAquaUnderline" }, + SpellRare = { link = "GruvboxPurpleUnderline" }, + Whitespace = { fg = colors.bg2 }, + Delimiter = { link = "GruvboxOrange" }, + EndOfBuffer = { link = "NonText" }, + DiagnosticError = { link = "GruvboxRed" }, + DiagnosticWarn = { link = "GruvboxYellow" }, + DiagnosticInfo = { link = "GruvboxBlue" }, + DiagnosticDeprecated = { strikethrough = config.strikethrough }, + DiagnosticHint = { link = "GruvboxAqua" }, + DiagnosticOk = { link = "GruvboxGreen" }, + DiagnosticSignError = { link = "GruvboxRedSign" }, + DiagnosticSignWarn = { link = "GruvboxYellowSign" }, + DiagnosticSignInfo = { link = "GruvboxBlueSign" }, + DiagnosticSignHint = { link = "GruvboxAquaSign" }, + DiagnosticSignOk = { link = "GruvboxGreenSign" }, + DiagnosticUnderlineError = { link = "GruvboxRedUnderline" }, + DiagnosticUnderlineWarn = { link = "GruvboxYellowUnderline" }, + DiagnosticUnderlineInfo = { link = "GruvboxBlueUnderline" }, + DiagnosticUnderlineHint = { link = "GruvboxAquaUnderline" }, + DiagnosticUnderlineOk = { link = "GruvboxGreenUnderline" }, + DiagnosticFloatingError = { link = "GruvboxRed" }, + DiagnosticFloatingWarn = { link = "GruvboxOrange" }, + DiagnosticFloatingInfo = { link = "GruvboxBlue" }, + DiagnosticFloatingHint = { link = "GruvboxAqua" }, + DiagnosticFloatingOk = { link = "GruvboxGreen" }, + DiagnosticVirtualTextError = { link = "GruvboxRed" }, + DiagnosticVirtualTextWarn = { link = "GruvboxYellow" }, + DiagnosticVirtualTextInfo = { link = "GruvboxBlue" }, + DiagnosticVirtualTextHint = { link = "GruvboxAqua" }, + DiagnosticVirtualTextOk = { link = "GruvboxGreen" }, + LspReferenceRead = { link = "GruvboxYellowBold" }, + LspReferenceTarget = { link = "Visual" }, + LspReferenceText = { link = "GruvboxYellowBold" }, + LspReferenceWrite = { link = "GruvboxOrangeBold" }, + LspCodeLens = { link = "GruvboxGray" }, + LspSignatureActiveParameter = { link = "Search" }, + gitcommitSelectedFile = { link = "GruvboxGreen" }, + gitcommitDiscardedFile = { link = "GruvboxRed" }, + GitSignsAdd = { link = "GruvboxGreen" }, + GitSignsChange = { link = "GruvboxOrange" }, + GitSignsDelete = { link = "GruvboxRed" }, + NvimTreeSymlink = { fg = colors.neutral_aqua }, + NvimTreeRootFolder = { fg = colors.neutral_purple, bold = true }, + NvimTreeFolderIcon = { fg = colors.neutral_blue, bold = true }, + NvimTreeFileIcon = { fg = colors.light2 }, + NvimTreeExecFile = { fg = colors.neutral_green, bold = true }, + NvimTreeOpenedFile = { fg = colors.bright_red, bold = true }, + NvimTreeSpecialFile = { fg = colors.neutral_yellow, bold = true, underline = true }, + NvimTreeImageFile = { fg = colors.neutral_purple }, + NvimTreeIndentMarker = { fg = colors.dark3 }, + NvimTreeGitDirty = { fg = colors.neutral_yellow }, + NvimTreeGitStaged = { fg = colors.neutral_yellow }, + NvimTreeGitMerge = { fg = colors.neutral_purple }, + NvimTreeGitRenamed = { fg = colors.neutral_purple }, + NvimTreeGitNew = { fg = colors.neutral_yellow }, + NvimTreeGitDeleted = { fg = colors.neutral_red }, + NvimTreeWindowPicker = { bg = colors.aqua }, + debugPC = { link = "DiffAdd" }, + debugBreakpoint = { link = "GruvboxRedSign" }, + StartifyBracket = { link = "GruvboxFg3" }, + StartifyFile = { link = "GruvboxFg1" }, + StartifyNumber = { link = "GruvboxBlue" }, + StartifyPath = { link = "GruvboxGray" }, + StartifySlash = { link = "GruvboxGray" }, + StartifySection = { link = "GruvboxYellow" }, + StartifySpecial = { link = "GruvboxBg2" }, + StartifyHeader = { link = "GruvboxOrange" }, + StartifyFooter = { link = "GruvboxBg2" }, + StartifyVar = { link = "StartifyPath" }, + StartifySelect = { link = "Title" }, + DirvishPathTail = { link = "GruvboxAqua" }, + DirvishArg = { link = "GruvboxYellow" }, + netrwDir = { link = "GruvboxAqua" }, + netrwClassify = { link = "GruvboxAqua" }, + netrwLink = { link = "GruvboxGray" }, + netrwSymLink = { link = "GruvboxFg1" }, + netrwExe = { link = "GruvboxYellow" }, + netrwComment = { link = "GruvboxGray" }, + netrwList = { link = "GruvboxBlue" }, + netrwHelpCmd = { link = "GruvboxAqua" }, + netrwCmdSep = { link = "GruvboxFg3" }, + netrwVersion = { link = "GruvboxGreen" }, + NERDTreeDir = { link = "GruvboxAqua" }, + NERDTreeDirSlash = { link = "GruvboxAqua" }, + NERDTreeOpenable = { link = "GruvboxOrange" }, + NERDTreeClosable = { link = "GruvboxOrange" }, + NERDTreeFile = { link = "GruvboxFg1" }, + NERDTreeExecFile = { link = "GruvboxYellow" }, + NERDTreeUp = { link = "GruvboxGray" }, + NERDTreeCWD = { link = "GruvboxGreen" }, + NERDTreeHelp = { link = "GruvboxFg1" }, + NERDTreeToggleOn = { link = "GruvboxGreen" }, + NERDTreeToggleOff = { link = "GruvboxRed" }, + CocErrorSign = { link = "GruvboxRedSign" }, + CocWarningSign = { link = "GruvboxOrangeSign" }, + CocInfoSign = { link = "GruvboxBlueSign" }, + CocHintSign = { link = "GruvboxAquaSign" }, + CocErrorFloat = { link = "GruvboxRed" }, + CocWarningFloat = { link = "GruvboxOrange" }, + CocInfoFloat = { link = "GruvboxBlue" }, + CocHintFloat = { link = "GruvboxAqua" }, + CocDiagnosticsError = { link = "GruvboxRed" }, + CocDiagnosticsWarning = { link = "GruvboxOrange" }, + CocDiagnosticsInfo = { link = "GruvboxBlue" }, + CocDiagnosticsHint = { link = "GruvboxAqua" }, + CocSearch = { link = "GruvboxBlue" }, + CocSelectedText = { link = "GruvboxRed" }, + CocMenuSel = { link = "PmenuSel" }, + CocCodeLens = { link = "GruvboxGray" }, + CocErrorHighlight = { link = "GruvboxRedUnderline" }, + CocWarningHighlight = { link = "GruvboxOrangeUnderline" }, + CocInfoHighlight = { link = "GruvboxBlueUnderline" }, + CocHintHighlight = { link = "GruvboxAquaUnderline" }, + SnacksPicker = { link = "GruvboxFg1" }, + SnacksPickerBorder = { link = "SnacksPicker" }, + SnacksPickerListCursorLine = { link = "CursorLine" }, + SnacksPickerMatch = { link = "GruvboxOrange" }, + SnacksPickerPrompt = { link = "GruvboxRed" }, + SnacksPickerTitle = { link = "SnacksPicker" }, + SnacksPickerDir = { link = "GruvboxGray" }, + SnacksPickerPathHidden = { link = "GruvboxGray" }, + SnacksPickerGitStatusUntracked = { link = "GruvboxGray" }, + SnacksPickerPathIgnored = { link = "GruvboxBg3" }, + TelescopeNormal = { link = "GruvboxFg1" }, + TelescopeSelection = { link = "CursorLine" }, + TelescopeSelectionCaret = { link = "GruvboxRed" }, + TelescopeMultiSelection = { link = "GruvboxGray" }, + TelescopeBorder = { link = "TelescopeNormal" }, + TelescopePromptBorder = { link = "TelescopeNormal" }, + TelescopeResultsBorder = { link = "TelescopeNormal" }, + TelescopePreviewBorder = { link = "TelescopeNormal" }, + TelescopeMatching = { link = "GruvboxOrange" }, + TelescopePromptPrefix = { link = "GruvboxRed" }, + TelescopePrompt = { link = "TelescopeNormal" }, + CmpItemAbbr = { link = "GruvboxFg0" }, + CmpItemAbbrDeprecated = { link = "GruvboxFg1" }, + CmpItemAbbrMatch = { link = "GruvboxBlueBold" }, + CmpItemAbbrMatchFuzzy = { link = "GruvboxBlueUnderline" }, + CmpItemMenu = { link = "GruvboxGray" }, + CmpItemKindText = { link = "GruvboxOrange" }, + CmpItemKindVariable = { link = "GruvboxOrange" }, + CmpItemKindMethod = { link = "GruvboxBlue" }, + CmpItemKindFunction = { link = "GruvboxBlue" }, + CmpItemKindConstructor = { link = "GruvboxYellow" }, + CmpItemKindUnit = { link = "GruvboxBlue" }, + CmpItemKindField = { link = "GruvboxBlue" }, + CmpItemKindClass = { link = "GruvboxYellow" }, + CmpItemKindInterface = { link = "GruvboxYellow" }, + CmpItemKindModule = { link = "GruvboxBlue" }, + CmpItemKindProperty = { link = "GruvboxBlue" }, + CmpItemKindValue = { link = "GruvboxOrange" }, + CmpItemKindEnum = { link = "GruvboxYellow" }, + CmpItemKindOperator = { link = "GruvboxYellow" }, + CmpItemKindKeyword = { link = "GruvboxPurple" }, + CmpItemKindEvent = { link = "GruvboxPurple" }, + CmpItemKindReference = { link = "GruvboxPurple" }, + CmpItemKindColor = { link = "GruvboxPurple" }, + CmpItemKindSnippet = { link = "GruvboxGreen" }, + CmpItemKindFile = { link = "GruvboxBlue" }, + CmpItemKindFolder = { link = "GruvboxBlue" }, + CmpItemKindEnumMember = { link = "GruvboxAqua" }, + CmpItemKindConstant = { link = "GruvboxOrange" }, + CmpItemKindStruct = { link = "GruvboxYellow" }, + CmpItemKindTypeParameter = { link = "GruvboxYellow" }, + BlinkCmpLabel = { link = "GruvboxFg0" }, + BlinkCmpLabelDeprecated = { link = "GruvboxFg1" }, + BlinkCmpLabelMatch = { link = "GruvboxBlueBold" }, + BlinkCmpLabelDetail = { link = "GruvboxGray" }, + BlinkCmpLabelDescription = { link = "GruvboxGray" }, + BlinkCmpKindText = { link = "GruvboxOrange" }, + BlinkCmpKindVariable = { link = "GruvboxOrange" }, + BlinkCmpKindMethod = { link = "GruvboxBlue" }, + BlinkCmpKindFunction = { link = "GruvboxBlue" }, + BlinkCmpKindConstructor = { link = "GruvboxYellow" }, + BlinkCmpKindUnit = { link = "GruvboxBlue" }, + BlinkCmpKindField = { link = "GruvboxBlue" }, + BlinkCmpKindClass = { link = "GruvboxYellow" }, + BlinkCmpKindInterface = { link = "GruvboxYellow" }, + BlinkCmpKindModule = { link = "GruvboxBlue" }, + BlinkCmpKindProperty = { link = "GruvboxBlue" }, + BlinkCmpKindValue = { link = "GruvboxOrange" }, + BlinkCmpKindEnum = { link = "GruvboxYellow" }, + BlinkCmpKindOperator = { link = "GruvboxYellow" }, + BlinkCmpKindKeyword = { link = "GruvboxPurple" }, + BlinkCmpKindEvent = { link = "GruvboxPurple" }, + BlinkCmpKindReference = { link = "GruvboxPurple" }, + BlinkCmpKindColor = { link = "GruvboxPurple" }, + BlinkCmpKindSnippet = { link = "GruvboxGreen" }, + BlinkCmpKindFile = { link = "GruvboxBlue" }, + BlinkCmpKindFolder = { link = "GruvboxBlue" }, + BlinkCmpKindEnumMember = { link = "GruvboxAqua" }, + BlinkCmpKindConstant = { link = "GruvboxOrange" }, + BlinkCmpKindStruct = { link = "GruvboxYellow" }, + BlinkCmpKindTypeParameter = { link = "GruvboxYellow" }, + BlinkCmpSource = { link = "GruvboxGray" }, + BlinkCmpGhostText = { link = "GruvboxBg4" }, + diffAdded = { link = "DiffAdd" }, + diffRemoved = { link = "DiffDelete" }, + diffChanged = { link = "DiffChange" }, + diffFile = { link = "GruvboxOrange" }, + diffNewFile = { link = "GruvboxYellow" }, + diffOldFile = { link = "GruvboxOrange" }, + diffLine = { link = "GruvboxBlue" }, + diffIndexLine = { link = "diffChanged" }, + NavicIconsFile = { link = "GruvboxBlue" }, + NavicIconsModule = { link = "GruvboxOrange" }, + NavicIconsNamespace = { link = "GruvboxBlue" }, + NavicIconsPackage = { link = "GruvboxAqua" }, + NavicIconsClass = { link = "GruvboxYellow" }, + NavicIconsMethod = { link = "GruvboxBlue" }, + NavicIconsProperty = { link = "GruvboxAqua" }, + NavicIconsField = { link = "GruvboxPurple" }, + NavicIconsConstructor = { link = "GruvboxBlue" }, + NavicIconsEnum = { link = "GruvboxPurple" }, + NavicIconsInterface = { link = "GruvboxGreen" }, + NavicIconsFunction = { link = "GruvboxBlue" }, + NavicIconsVariable = { link = "GruvboxPurple" }, + NavicIconsConstant = { link = "GruvboxOrange" }, + NavicIconsString = { link = "GruvboxGreen" }, + NavicIconsNumber = { link = "GruvboxOrange" }, + NavicIconsBoolean = { link = "GruvboxOrange" }, + NavicIconsArray = { link = "GruvboxOrange" }, + NavicIconsObject = { link = "GruvboxOrange" }, + NavicIconsKey = { link = "GruvboxAqua" }, + NavicIconsNull = { link = "GruvboxOrange" }, + NavicIconsEnumMember = { link = "GruvboxYellow" }, + NavicIconsStruct = { link = "GruvboxPurple" }, + NavicIconsEvent = { link = "GruvboxYellow" }, + NavicIconsOperator = { link = "GruvboxRed" }, + NavicIconsTypeParameter = { link = "GruvboxRed" }, + NavicText = { link = "GruvboxWhite" }, + NavicSeparator = { link = "GruvboxWhite" }, + htmlTag = { link = "GruvboxAquaBold" }, + htmlEndTag = { link = "GruvboxAquaBold" }, + htmlTagName = { link = "GruvboxBlue" }, + htmlArg = { link = "GruvboxOrange" }, + htmlTagN = { link = "GruvboxFg1" }, + htmlSpecialTagName = { link = "GruvboxBlue" }, + htmlLink = { fg = colors.fg4, underline = config.underline }, + htmlSpecialChar = { link = "GruvboxRed" }, + htmlBold = { fg = colors.fg0, bg = colors.bg0, bold = config.bold }, + htmlBoldUnderline = { fg = colors.fg0, bg = colors.bg0, bold = config.bold, underline = config.underline }, + htmlBoldItalic = { fg = colors.fg0, bg = colors.bg0, bold = config.bold, italic = true }, + htmlBoldUnderlineItalic = { + fg = colors.fg0, + bg = colors.bg0, + bold = config.bold, + italic = true, + underline = config.underline, + }, + htmlUnderline = { fg = colors.fg0, bg = colors.bg0, underline = config.underline }, + htmlUnderlineItalic = { + fg = colors.fg0, + bg = colors.bg0, + italic = true, + underline = config.underline, + }, + htmlItalic = { fg = colors.fg0, bg = colors.bg0, italic = true }, + xmlTag = { link = "GruvboxAquaBold" }, + xmlEndTag = { link = "GruvboxAquaBold" }, + xmlTagName = { link = "GruvboxBlue" }, + xmlEqual = { link = "GruvboxBlue" }, + docbkKeyword = { link = "GruvboxAquaBold" }, + xmlDocTypeDecl = { link = "GruvboxGray" }, + xmlDocTypeKeyword = { link = "GruvboxPurple" }, + xmlCdataStart = { link = "GruvboxGray" }, + xmlCdataCdata = { link = "GruvboxPurple" }, + dtdFunction = { link = "GruvboxGray" }, + dtdTagName = { link = "GruvboxPurple" }, + xmlAttrib = { link = "GruvboxOrange" }, + xmlProcessingDelim = { link = "GruvboxGray" }, + dtdParamEntityPunct = { link = "GruvboxGray" }, + dtdParamEntityDPunct = { link = "GruvboxGray" }, + xmlAttribPunct = { link = "GruvboxGray" }, + xmlEntity = { link = "GruvboxRed" }, + xmlEntityPunct = { link = "GruvboxRed" }, + clojureKeyword = { link = "GruvboxBlue" }, + clojureCond = { link = "GruvboxOrange" }, + clojureSpecial = { link = "GruvboxOrange" }, + clojureDefine = { link = "GruvboxOrange" }, + clojureFunc = { link = "GruvboxYellow" }, + clojureRepeat = { link = "GruvboxYellow" }, + clojureCharacter = { link = "GruvboxAqua" }, + clojureStringEscape = { link = "GruvboxAqua" }, + clojureException = { link = "GruvboxRed" }, + clojureRegexp = { link = "GruvboxAqua" }, + clojureRegexpEscape = { link = "GruvboxAqua" }, + clojureRegexpCharClass = { fg = colors.fg3, bold = config.bold }, + clojureRegexpMod = { link = "clojureRegexpCharClass" }, + clojureRegexpQuantifier = { link = "clojureRegexpCharClass" }, + clojureParen = { link = "GruvboxFg3" }, + clojureAnonArg = { link = "GruvboxYellow" }, + clojureVariable = { link = "GruvboxBlue" }, + clojureMacro = { link = "GruvboxOrange" }, + clojureMeta = { link = "GruvboxYellow" }, + clojureDeref = { link = "GruvboxYellow" }, + clojureQuote = { link = "GruvboxYellow" }, + clojureUnquote = { link = "GruvboxYellow" }, + cOperator = { link = "GruvboxPurple" }, + cppOperator = { link = "GruvboxPurple" }, + cStructure = { link = "GruvboxOrange" }, + pythonBuiltin = { link = "GruvboxOrange" }, + pythonBuiltinObj = { link = "GruvboxOrange" }, + pythonBuiltinFunc = { link = "GruvboxOrange" }, + pythonFunction = { link = "GruvboxAqua" }, + pythonDecorator = { link = "GruvboxRed" }, + pythonInclude = { link = "GruvboxBlue" }, + pythonImport = { link = "GruvboxBlue" }, + pythonRun = { link = "GruvboxBlue" }, + pythonCoding = { link = "GruvboxBlue" }, + pythonOperator = { link = "GruvboxRed" }, + pythonException = { link = "GruvboxRed" }, + pythonExceptions = { link = "GruvboxPurple" }, + pythonBoolean = { link = "GruvboxPurple" }, + pythonDot = { link = "GruvboxFg3" }, + pythonConditional = { link = "GruvboxRed" }, + pythonRepeat = { link = "GruvboxRed" }, + pythonDottedName = { link = "GruvboxGreenBold" }, + cssBraces = { link = "GruvboxBlue" }, + cssFunctionName = { link = "GruvboxYellow" }, + cssIdentifier = { link = "GruvboxOrange" }, + cssClassName = { link = "GruvboxGreen" }, + cssColor = { link = "GruvboxBlue" }, + cssSelectorOp = { link = "GruvboxBlue" }, + cssSelectorOp2 = { link = "GruvboxBlue" }, + cssImportant = { link = "GruvboxGreen" }, + cssVendor = { link = "GruvboxFg1" }, + cssTextProp = { link = "GruvboxAqua" }, + cssAnimationProp = { link = "GruvboxAqua" }, + cssUIProp = { link = "GruvboxYellow" }, + cssTransformProp = { link = "GruvboxAqua" }, + cssTransitionProp = { link = "GruvboxAqua" }, + cssPrintProp = { link = "GruvboxAqua" }, + cssPositioningProp = { link = "GruvboxYellow" }, + cssBoxProp = { link = "GruvboxAqua" }, + cssFontDescriptorProp = { link = "GruvboxAqua" }, + cssFlexibleBoxProp = { link = "GruvboxAqua" }, + cssBorderOutlineProp = { link = "GruvboxAqua" }, + cssBackgroundProp = { link = "GruvboxAqua" }, + cssMarginProp = { link = "GruvboxAqua" }, + cssListProp = { link = "GruvboxAqua" }, + cssTableProp = { link = "GruvboxAqua" }, + cssFontProp = { link = "GruvboxAqua" }, + cssPaddingProp = { link = "GruvboxAqua" }, + cssDimensionProp = { link = "GruvboxAqua" }, + cssRenderProp = { link = "GruvboxAqua" }, + cssColorProp = { link = "GruvboxAqua" }, + cssGeneratedContentProp = { link = "GruvboxAqua" }, + javaScriptBraces = { link = "GruvboxFg1" }, + javaScriptFunction = { link = "GruvboxAqua" }, + javaScriptIdentifier = { link = "GruvboxRed" }, + javaScriptMember = { link = "GruvboxBlue" }, + javaScriptNumber = { link = "GruvboxPurple" }, + javaScriptNull = { link = "GruvboxPurple" }, + javaScriptParens = { link = "GruvboxFg3" }, + typescriptReserved = { link = "GruvboxAqua" }, + typescriptLabel = { link = "GruvboxAqua" }, + typescriptFuncKeyword = { link = "GruvboxAqua" }, + typescriptIdentifier = { link = "GruvboxOrange" }, + typescriptBraces = { link = "GruvboxFg1" }, + typescriptEndColons = { link = "GruvboxFg1" }, + typescriptDOMObjects = { link = "GruvboxFg1" }, + typescriptAjaxMethods = { link = "GruvboxFg1" }, + typescriptLogicSymbols = { link = "GruvboxFg1" }, + typescriptDocSeeTag = { link = "Comment" }, + typescriptDocParam = { link = "Comment" }, + typescriptDocTags = { link = "vimCommentTitle" }, + typescriptGlobalObjects = { link = "GruvboxFg1" }, + typescriptParens = { link = "GruvboxFg3" }, + typescriptOpSymbols = { link = "GruvboxFg3" }, + typescriptHtmlElemProperties = { link = "GruvboxFg1" }, + typescriptNull = { link = "GruvboxPurple" }, + typescriptInterpolationDelimiter = { link = "GruvboxAqua" }, + purescriptModuleKeyword = { link = "GruvboxAqua" }, + purescriptModuleName = { link = "GruvboxFg1" }, + purescriptWhere = { link = "GruvboxAqua" }, + purescriptDelimiter = { link = "GruvboxFg4" }, + purescriptType = { link = "GruvboxFg1" }, + purescriptImportKeyword = { link = "GruvboxAqua" }, + purescriptHidingKeyword = { link = "GruvboxAqua" }, + purescriptAsKeyword = { link = "GruvboxAqua" }, + purescriptStructure = { link = "GruvboxAqua" }, + purescriptOperator = { link = "GruvboxBlue" }, + purescriptTypeVar = { link = "GruvboxFg1" }, + purescriptConstructor = { link = "GruvboxFg1" }, + purescriptFunction = { link = "GruvboxFg1" }, + purescriptConditional = { link = "GruvboxOrange" }, + purescriptBacktick = { link = "GruvboxOrange" }, + coffeeExtendedOp = { link = "GruvboxFg3" }, + coffeeSpecialOp = { link = "GruvboxFg3" }, + coffeeCurly = { link = "GruvboxOrange" }, + coffeeParen = { link = "GruvboxFg3" }, + coffeeBracket = { link = "GruvboxOrange" }, + rubyStringDelimiter = { link = "GruvboxGreen" }, + rubyInterpolationDelimiter = { link = "GruvboxAqua" }, + rubyDefinedOperator = { link = "rubyKeyword" }, + objcTypeModifier = { link = "GruvboxRed" }, + objcDirective = { link = "GruvboxBlue" }, + goDirective = { link = "GruvboxAqua" }, + goConstants = { link = "GruvboxPurple" }, + goDeclaration = { link = "GruvboxRed" }, + goDeclType = { link = "GruvboxBlue" }, + goBuiltins = { link = "GruvboxOrange" }, + luaIn = { link = "GruvboxRed" }, + luaFunction = { link = "GruvboxAqua" }, + luaTable = { link = "GruvboxOrange" }, + moonSpecialOp = { link = "GruvboxFg3" }, + moonExtendedOp = { link = "GruvboxFg3" }, + moonFunction = { link = "GruvboxFg3" }, + moonObject = { link = "GruvboxYellow" }, + javaAnnotation = { link = "GruvboxBlue" }, + javaDocTags = { link = "GruvboxAqua" }, + javaCommentTitle = { link = "vimCommentTitle" }, + javaParen = { link = "GruvboxFg3" }, + javaParen1 = { link = "GruvboxFg3" }, + javaParen2 = { link = "GruvboxFg3" }, + javaParen3 = { link = "GruvboxFg3" }, + javaParen4 = { link = "GruvboxFg3" }, + javaParen5 = { link = "GruvboxFg3" }, + javaOperator = { link = "GruvboxOrange" }, + javaVarArg = { link = "GruvboxGreen" }, + elixirDocString = { link = "Comment" }, + elixirStringDelimiter = { link = "GruvboxGreen" }, + elixirInterpolationDelimiter = { link = "GruvboxAqua" }, + elixirModuleDeclaration = { link = "GruvboxYellow" }, + scalaNameDefinition = { link = "GruvboxFg1" }, + scalaCaseFollowing = { link = "GruvboxFg1" }, + scalaCapitalWord = { link = "GruvboxFg1" }, + scalaTypeExtension = { link = "GruvboxFg1" }, + scalaKeyword = { link = "GruvboxRed" }, + scalaKeywordModifier = { link = "GruvboxRed" }, + scalaSpecial = { link = "GruvboxAqua" }, + scalaOperator = { link = "GruvboxFg1" }, + scalaTypeDeclaration = { link = "GruvboxYellow" }, + scalaTypeTypePostDeclaration = { link = "GruvboxYellow" }, + scalaInstanceDeclaration = { link = "GruvboxFg1" }, + scalaInterpolation = { link = "GruvboxAqua" }, + markdownItalic = { fg = colors.fg3, italic = true }, + markdownBold = { fg = colors.fg3, bold = config.bold }, + markdownBoldItalic = { fg = colors.fg3, bold = config.bold, italic = true }, + markdownH1 = { link = "GruvboxGreenBold" }, + markdownH2 = { link = "GruvboxGreenBold" }, + markdownH3 = { link = "GruvboxYellowBold" }, + markdownH4 = { link = "GruvboxYellowBold" }, + markdownH5 = { link = "GruvboxYellow" }, + markdownH6 = { link = "GruvboxYellow" }, + markdownCode = { link = "GruvboxAqua" }, + markdownCodeBlock = { link = "GruvboxAqua" }, + markdownCodeDelimiter = { link = "GruvboxAqua" }, + markdownBlockquote = { link = "GruvboxGray" }, + markdownListMarker = { link = "GruvboxGray" }, + markdownOrderedListMarker = { link = "GruvboxGray" }, + markdownRule = { link = "GruvboxGray" }, + markdownHeadingRule = { link = "GruvboxGray" }, + markdownUrlDelimiter = { link = "GruvboxFg3" }, + markdownLinkDelimiter = { link = "GruvboxFg3" }, + markdownLinkTextDelimiter = { link = "GruvboxFg3" }, + markdownHeadingDelimiter = { link = "GruvboxOrange" }, + markdownUrl = { link = "GruvboxPurple" }, + markdownUrlTitleDelimiter = { link = "GruvboxGreen" }, + markdownLinkText = { fg = colors.gray, underline = config.underline }, + markdownIdDeclaration = { link = "markdownLinkText" }, + haskellType = { link = "GruvboxBlue" }, + haskellIdentifier = { link = "GruvboxAqua" }, + haskellSeparator = { link = "GruvboxFg4" }, + haskellDelimiter = { link = "GruvboxOrange" }, + haskellOperators = { link = "GruvboxPurple" }, + haskellBacktick = { link = "GruvboxOrange" }, + haskellStatement = { link = "GruvboxPurple" }, + haskellConditional = { link = "GruvboxPurple" }, + haskellLet = { link = "GruvboxRed" }, + haskellDefault = { link = "GruvboxRed" }, + haskellWhere = { link = "GruvboxRed" }, + haskellBottom = { link = "GruvboxRedBold" }, + haskellImportKeywords = { link = "GruvboxPurpleBold" }, + haskellDeclKeyword = { link = "GruvboxOrange" }, + haskellDecl = { link = "GruvboxOrange" }, + haskellDeriving = { link = "GruvboxPurple" }, + haskellAssocType = { link = "GruvboxAqua" }, + haskellNumber = { link = "GruvboxAqua" }, + haskellPragma = { link = "GruvboxRedBold" }, + haskellTH = { link = "GruvboxAquaBold" }, + haskellForeignKeywords = { link = "GruvboxGreen" }, + haskellKeyword = { link = "GruvboxRed" }, + haskellFloat = { link = "GruvboxAqua" }, + haskellInfix = { link = "GruvboxPurple" }, + haskellQuote = { link = "GruvboxGreenBold" }, + haskellShebang = { link = "GruvboxYellowBold" }, + haskellLiquid = { link = "GruvboxPurpleBold" }, + haskellQuasiQuoted = { link = "GruvboxBlueBold" }, + haskellRecursiveDo = { link = "GruvboxPurple" }, + haskellQuotedType = { link = "GruvboxRed" }, + haskellPreProc = { link = "GruvboxFg4" }, + haskellTypeRoles = { link = "GruvboxRedBold" }, + haskellTypeForall = { link = "GruvboxRed" }, + haskellPatternKeyword = { link = "GruvboxBlue" }, + jsonKeyword = { link = "GruvboxGreen" }, + jsonQuote = { link = "GruvboxGreen" }, + jsonBraces = { link = "GruvboxFg1" }, + jsonString = { link = "GruvboxFg1" }, + mailQuoted1 = { link = "GruvboxAqua" }, + mailQuoted2 = { link = "GruvboxPurple" }, + mailQuoted3 = { link = "GruvboxYellow" }, + mailQuoted4 = { link = "GruvboxGreen" }, + mailQuoted5 = { link = "GruvboxRed" }, + mailQuoted6 = { link = "GruvboxOrange" }, + mailSignature = { link = "Comment" }, + csBraces = { link = "GruvboxFg1" }, + csEndColon = { link = "GruvboxFg1" }, + csLogicSymbols = { link = "GruvboxFg1" }, + csParens = { link = "GruvboxFg3" }, + csOpSymbols = { link = "GruvboxFg3" }, + csInterpolationDelimiter = { link = "GruvboxFg3" }, + csInterpolationAlignDel = { link = "GruvboxAquaBold" }, + csInterpolationFormat = { link = "GruvboxAqua" }, + csInterpolationFormatDel = { link = "GruvboxAquaBold" }, + rustSigil = { link = "GruvboxOrange" }, + rustEscape = { link = "GruvboxAqua" }, + rustStringContinuation = { link = "GruvboxAqua" }, + rustEnum = { link = "GruvboxAqua" }, + rustStructure = { link = "GruvboxAqua" }, + rustModPathSep = { link = "GruvboxFg2" }, + rustCommentLineDoc = { link = "Comment" }, + rustDefault = { link = "GruvboxAqua" }, + ocamlOperator = { link = "GruvboxFg1" }, + ocamlKeyChar = { link = "GruvboxOrange" }, + ocamlArrow = { link = "GruvboxOrange" }, + ocamlInfixOpKeyword = { link = "GruvboxRed" }, + ocamlConstructor = { link = "GruvboxOrange" }, + LspSagaCodeActionTitle = { link = "Title" }, + LspSagaCodeActionBorder = { link = "GruvboxFg1" }, + LspSagaCodeActionContent = { fg = colors.green, bold = config.bold }, + LspSagaLspFinderBorder = { link = "GruvboxFg1" }, + LspSagaAutoPreview = { link = "GruvboxOrange" }, + TargetWord = { fg = colors.blue, bold = config.bold }, + FinderSeparator = { link = "GruvboxAqua" }, + LspSagaDefPreviewBorder = { link = "GruvboxBlue" }, + LspSagaHoverBorder = { link = "GruvboxOrange" }, + LspSagaRenameBorder = { link = "GruvboxBlue" }, + LspSagaDiagnosticSource = { link = "GruvboxOrange" }, + LspSagaDiagnosticBorder = { link = "GruvboxPurple" }, + LspSagaDiagnosticHeader = { link = "GruvboxGreen" }, + LspSagaSignatureHelpBorder = { link = "GruvboxGreen" }, + SagaShadow = { link = "GruvboxBg0" }, + DashboardShortCut = { link = "GruvboxOrange" }, + DashboardHeader = { link = "GruvboxAqua" }, + DashboardCenter = { link = "GruvboxYellow" }, + DashboardFooter = { fg = colors.purple, italic = true }, + MasonHighlight = { link = "GruvboxAqua" }, + MasonHighlightBlock = { fg = colors.bg0, bg = colors.blue }, + MasonHighlightBlockBold = { fg = colors.bg0, bg = colors.blue, bold = true }, + MasonHighlightSecondary = { fg = colors.yellow }, + MasonHighlightBlockSecondary = { fg = colors.bg0, bg = colors.yellow }, + MasonHighlightBlockBoldSecondary = { fg = colors.bg0, bg = colors.yellow, bold = true }, + MasonHeader = { link = "MasonHighlightBlockBoldSecondary" }, + MasonHeaderSecondary = { link = "MasonHighlightBlockBold" }, + MasonMuted = { fg = colors.fg4 }, + MasonMutedBlock = { fg = colors.bg0, bg = colors.fg4 }, + MasonMutedBlockBold = { fg = colors.bg0, bg = colors.fg4, bold = true }, + LspInlayHint = { link = "comment" }, + CarbonFile = { link = "GruvboxFg1" }, + CarbonExe = { link = "GruvboxYellow" }, + CarbonSymlink = { link = "GruvboxAqua" }, + CarbonBrokenSymlink = { link = "GruvboxRed" }, + CarbonIndicator = { link = "GruvboxGray" }, + CarbonDanger = { link = "GruvboxRed" }, + CarbonPending = { link = "GruvboxYellow" }, + NoiceCursor = { link = "TermCursor" }, + NoiceCmdlinePopupBorder = { fg = colors.blue, bg = nil }, + NoiceCmdlineIcon = { link = "NoiceCmdlinePopupBorder" }, + NoiceConfirmBorder = { link = "NoiceCmdlinePopupBorder" }, + NoiceCmdlinePopupBorderSearch = { fg = colors.yellow, bg = nil }, + NoiceCmdlineIconSearch = { link = "NoiceCmdlinePopupBorderSearch" }, + NotifyDEBUGBorder = { link = "GruvboxBlue" }, + NotifyDEBUGIcon = { link = "GruvboxBlue" }, + NotifyDEBUGTitle = { link = "GruvboxBlue" }, + NotifyERRORBorder = { link = "GruvboxRed" }, + NotifyERRORIcon = { link = "GruvboxRed" }, + NotifyERRORTitle = { link = "GruvboxRed" }, + NotifyINFOBorder = { link = "GruvboxAqua" }, + NotifyINFOIcon = { link = "GruvboxAqua" }, + NotifyINFOTitle = { link = "GruvboxAqua" }, + NotifyTRACEBorder = { link = "GruvboxGreen" }, + NotifyTRACEIcon = { link = "GruvboxGreen" }, + NotifyTRACETitle = { link = "GruvboxGreen" }, + NotifyWARNBorder = { link = "GruvboxYellow" }, + NotifyWARNIcon = { link = "GruvboxYellow" }, + NotifyWARNTitle = { link = "GruvboxYellow" }, + IlluminatedWordText = { link = "LspReferenceText" }, + IlluminatedWordRead = { link = "LspReferenceRead" }, + IlluminatedWordWrite = { link = "LspReferenceWrite" }, + TSRainbowRed = { fg = colors.red }, + TSRainbowOrange = { fg = colors.orange }, + TSRainbowYellow = { fg = colors.yellow }, + TSRainbowGreen = { fg = colors.green }, + TSRainbowBlue = { fg = colors.blue }, + TSRainbowViolet = { fg = colors.purple }, + TSRainbowCyan = { fg = colors.aqua }, + RainbowDelimiterRed = { fg = colors.red }, + RainbowDelimiterOrange = { fg = colors.orange }, + RainbowDelimiterYellow = { fg = colors.yellow }, + RainbowDelimiterGreen = { fg = colors.green }, + RainbowDelimiterBlue = { fg = colors.blue }, + RainbowDelimiterViolet = { fg = colors.purple }, + RainbowDelimiterCyan = { fg = colors.aqua }, + DapBreakpointSymbol = { fg = colors.red, bg = colors.bg1 }, + DapStoppedSymbol = { fg = colors.green, bg = colors.bg1 }, + DapUIBreakpointsCurrentLine = { link = "GruvboxYellow" }, + DapUIBreakpointsDisabledLine = { link = "GruvboxGray" }, + DapUIBreakpointsInfo = { link = "GruvboxAqua" }, + DapUIBreakpointsLine = { link = "GruvboxYellow" }, + DapUIBreakpointsPath = { link = "GruvboxBlue" }, + DapUICurrentFrameName = { link = "GruvboxPurple" }, + DapUIDecoration = { link = "GruvboxPurple" }, + DapUIEndofBuffer = { link = "EndOfBuffer" }, + DapUIFloatBorder = { link = "GruvboxAqua" }, + DapUILineNumber = { link = "GruvboxYellow" }, + DapUIModifiedValue = { link = "GruvboxRed" }, + DapUIPlayPause = { fg = colors.green, bg = colors.bg1 }, + DapUIRestart = { fg = colors.green, bg = colors.bg1 }, + DapUIScope = { link = "GruvboxBlue" }, + DapUISource = { link = "GruvboxFg1" }, + DapUIStepBack = { fg = colors.blue, bg = colors.bg1 }, + DapUIStepInto = { fg = colors.blue, bg = colors.bg1 }, + DapUIStepOut = { fg = colors.blue, bg = colors.bg1 }, + DapUIStepOver = { fg = colors.blue, bg = colors.bg1 }, + DapUIStop = { fg = colors.red, bg = colors.bg1 }, + DapUIStoppedThread = { link = "GruvboxBlue" }, + DapUIThread = { link = "GruvboxBlue" }, + DapUIType = { link = "GruvboxOrange" }, + DapUIUnavailable = { link = "GruvboxGray" }, + DapUIWatchesEmpty = { link = "GruvboxGray" }, + DapUIWatchesError = { link = "GruvboxRed" }, + DapUIWatchesValue = { link = "GruvboxYellow" }, + DapUIWinSelect = { link = "GruvboxYellow" }, + NeogitDiffDelete = { link = "DiffDelete" }, + NeogitDiffAdd = { link = "DiffAdd" }, + NeogitHunkHeader = { link = "WinBar" }, + NeogitHunkHeaderHighlight = { link = "WinBarNC" }, + DiffviewStatusModified = { link = "GruvboxGreenBold" }, + DiffviewFilePanelInsertions = { link = "GruvboxGreenBold" }, + DiffviewFilePanelDeletions = { link = "GruvboxRedBold" }, + MiniAnimateCursor = { reverse = true, nocombine = true }, + MiniAnimateNormalFloat = { fg = colors.fg1, bg = colors.bg1 }, + MiniClueBorder = { link = "FloatBorder" }, + MiniClueDescGroup = { link = "DiagnosticFloatingWarn" }, + MiniClueDescSingle = { link = "NormalFloat" }, + MiniClueNextKey = { link = "DiagnosticFloatingHint" }, + MiniClueNextKeyWithPostkeys = { link = "DiagnosticFloatingError" }, + MiniClueSeparator = { link = "DiagnosticFloatingInfo" }, + MiniClueTitle = { link = "FloatTitle" }, + MiniCompletionActiveParameter = { underline = true }, + MiniCursorword = { underline = true }, + MiniCursorwordCurrent = { underline = true }, + MiniDepsChangeAdded = { link = "GruvboxGreen" }, + MiniDepsChangeRemoved = { link = "GruvboxRed" }, + MiniDepsHint = { link = "DiagnosticHint" }, + MiniDepsInfo = { link = "DiagnosticInfo" }, + MiniDepsMsgBreaking = { link = "DiagnosticWarn" }, + MiniDepsPlaceholder = { link = "Comment" }, + MiniDepsTitle = { link = "Title" }, + MiniDepsTitleError = { link = "DiffDelete" }, + MiniDepsTitleSame = { link = "DiffChange" }, + MiniDepsTitleUpdate = { link = "DiffAdd" }, + MiniDiffOverAdd = { link = "DiffAdd" }, + MiniDiffOverChange = { link = "DiffText" }, + MiniDiffOverContext = { link = "DiffChange" }, + MiniDiffOverDelete = { link = "DiffDelete" }, + MiniDiffSignAdd = { link = "GruvboxGreen" }, + MiniDiffSignChange = { link = "GruvboxAqua" }, + MiniDiffSignDelete = { link = "GruvboxRed" }, + MiniFilesBorder = { link = "FloatBorder" }, + MiniFilesBorderModified = { link = "DiagnosticFloatingWarn" }, + MiniFilesCursorLine = { bg = colors.bg2 }, + MiniFilesDirectory = { link = "Directory" }, + MiniFilesFile = { link = "GruvboxFg1" }, + MiniFilesNormal = { link = "NormalFloat" }, + MiniFilesTitle = { link = "FloatTitle" }, + MiniFilesTitleFocused = { link = "GruvboxOrangeBold" }, + MiniHipatternsFixme = { fg = colors.bg0, bg = colors.red, bold = config.bold }, + MiniHipatternsHack = { fg = colors.bg0, bg = colors.yellow, bold = config.bold }, + MiniHipatternsNote = { fg = colors.bg0, bg = colors.blue, bold = config.bold }, + MiniHipatternsTodo = { fg = colors.bg0, bg = colors.aqua, bold = config.bold }, + MiniIconsAzure = { link = "GruvboxBlue" }, + MiniIconsBlue = { link = "GruvboxBlue" }, + MiniIconsCyan = { link = "GruvboxAqua" }, + MiniIconsGreen = { link = "GruvboxGreen" }, + MiniIconsGrey = { link = "GruvboxFg0" }, + MiniIconsOrange = { link = "GruvboxOrange" }, + MiniIconsPurple = { link = "GruvboxPurple" }, + MiniIconsRed = { link = "GruvboxRed" }, + MiniIconsYellow = { link = "GruvboxYellow" }, + MiniIndentscopeSymbol = { link = "GruvboxGray" }, + MiniIndentscopeSymbolOff = { link = "GruvboxYellow" }, + MiniJump = { link = "GruvboxOrangeUnderline" }, + MiniJump2dDim = { link = "GruvboxGray" }, + MiniJump2dSpot = { fg = colors.orange, bold = config.bold, nocombine = true }, + MiniJump2dSpotAhead = { fg = colors.aqua, bg = colors.bg0, nocombine = true }, + MiniJump2dSpotUnique = { fg = colors.yellow, bold = config.bold, nocombine = true }, + MiniMapNormal = { link = "NormalFloat" }, + MiniMapSymbolCount = { link = "Special" }, + MiniMapSymbolLine = { link = "Title" }, + MiniMapSymbolView = { link = "Delimiter" }, + MiniNotifyBorder = { link = "FloatBorder" }, + MiniNotifyNormal = { link = "NormalFloat" }, + MiniNotifyTitle = { link = "FloatTitle" }, + MiniOperatorsExchangeFrom = { link = "IncSearch" }, + MiniPickBorder = { link = "FloatBorder" }, + MiniPickBorderBusy = { link = "DiagnosticFloatingWarn" }, + MiniPickBorderText = { link = "FloatTitle" }, + MiniPickIconDirectory = { link = "Directory" }, + MiniPickIconFile = { link = "MiniPickNormal" }, + MiniPickHeader = { link = "DiagnosticFloatingHint" }, + MiniPickMatchCurrent = { bg = colors.bg2 }, + MiniPickMatchMarked = { link = "Visual" }, + MiniPickMatchRanges = { link = "DiagnosticFloatingHint" }, + MiniPickNormal = { link = "NormalFloat" }, + MiniPickPreviewLine = { link = "CursorLine" }, + MiniPickPreviewRegion = { link = "IncSearch" }, + MiniPickPrompt = { link = "DiagnosticFloatingInfo" }, + MiniStarterCurrent = { nocombine = true }, + MiniStarterFooter = { link = "GruvboxGray" }, + MiniStarterHeader = { link = "Title" }, + MiniStarterInactive = { link = "Comment" }, + MiniStarterItem = { link = "Normal" }, + MiniStarterItemBullet = { link = "Delimiter" }, + MiniStarterItemPrefix = { link = "WarningMsg" }, + MiniStarterSection = { link = "Delimiter" }, + MiniStarterQuery = { link = "MoreMsg" }, + MiniStatuslineDevinfo = { link = "StatusLine" }, + MiniStatuslineFileinfo = { link = "StatusLine" }, + MiniStatuslineFilename = { link = "StatusLineNC" }, + MiniStatuslineInactive = { link = "StatusLineNC" }, + MiniStatuslineModeCommand = { fg = colors.bg0, bg = colors.yellow, bold = config.bold, nocombine = true }, + MiniStatuslineModeInsert = { fg = colors.bg0, bg = colors.blue, bold = config.bold, nocombine = true }, + MiniStatuslineModeNormal = { fg = colors.bg0, bg = colors.fg1, bold = config.bold, nocombine = true }, + MiniStatuslineModeOther = { fg = colors.bg0, bg = colors.aqua, bold = config.bold, nocombine = true }, + MiniStatuslineModeReplace = { fg = colors.bg0, bg = colors.red, bold = config.bold, nocombine = true }, + MiniStatuslineModeVisual = { fg = colors.bg0, bg = colors.green, bold = config.bold, nocombine = true }, + MiniSurround = { link = "IncSearch" }, + MiniTablineCurrent = { fg = colors.green, bg = colors.bg1, bold = config.bold, reverse = config.invert_tabline }, + MiniTablineFill = { link = "TabLineFill" }, + MiniTablineHidden = { fg = colors.bg4, bg = colors.bg1, reverse = config.invert_tabline }, + MiniTablineModifiedCurrent = { + fg = colors.bg1, + bg = colors.green, + bold = config.bold, + reverse = config.invert_tabline, + }, + MiniTablineModifiedHidden = { fg = colors.bg1, bg = colors.bg4, reverse = config.invert_tabline }, + MiniTablineModifiedVisible = { fg = colors.bg1, bg = colors.fg1, reverse = config.invert_tabline }, + MiniTablineTabpagesection = { link = "Search" }, + MiniTablineVisible = { fg = colors.fg1, bg = colors.bg1, reverse = config.invert_tabline }, + MiniTestEmphasis = { bold = config.bold }, + MiniTestFail = { link = "GruvboxRedBold" }, + MiniTestPass = { link = "GruvboxGreenBold" }, + MiniTrailspace = { bg = colors.red }, + WhichKeyTitle = { link = "NormalFloat" }, + NeoTreeFloatBorder = { link = "GruvboxGray" }, + NeoTreeTitleBar = { fg = colors.fg1, bg = colors.bg2 }, + NeoTreeDirectoryIcon = { link = "GruvboxGreen" }, + NeoTreeDirectoryName = { link = "GruvboxGreenBold" }, + ["@comment"] = { link = "Comment" }, + ["@none"] = { bg = "NONE", fg = "NONE" }, + ["@preproc"] = { link = "PreProc" }, + ["@define"] = { link = "Define" }, + ["@operator"] = { link = "Operator" }, + ["@punctuation.delimiter"] = { link = "Delimiter" }, + ["@punctuation.bracket"] = { link = "Delimiter" }, + ["@punctuation.special"] = { link = "Delimiter" }, + ["@string"] = { link = "String" }, + ["@string.regex"] = { link = "String" }, + ["@string.regexp"] = { link = "String" }, + ["@string.escape"] = { link = "SpecialChar" }, + ["@string.special"] = { link = "SpecialChar" }, + ["@string.special.path"] = { link = "Underlined" }, + ["@string.special.symbol"] = { link = "Identifier" }, + ["@string.special.url"] = { link = "Underlined" }, + ["@character"] = { link = "Character" }, + ["@character.special"] = { link = "SpecialChar" }, + ["@boolean"] = { link = "Boolean" }, + ["@number"] = { link = "Number" }, + ["@number.float"] = { link = "Float" }, + ["@float"] = { link = "Float" }, + ["@function"] = { link = "Function" }, + ["@function.builtin"] = { link = "Special" }, + ["@function.call"] = { link = "Function" }, + ["@function.macro"] = { link = "Macro" }, + ["@function.method"] = { link = "Function" }, + ["@method"] = { link = "Function" }, + ["@method.call"] = { link = "Function" }, + ["@constructor"] = { link = "Special" }, + ["@parameter"] = { link = "Identifier" }, + ["@keyword"] = { link = "Keyword" }, + ["@keyword.conditional"] = { link = "Conditional" }, + ["@keyword.debug"] = { link = "Debug" }, + ["@keyword.directive"] = { link = "PreProc" }, + ["@keyword.directive.define"] = { link = "Define" }, + ["@keyword.exception"] = { link = "Exception" }, + ["@keyword.function"] = { link = "Keyword" }, + ["@keyword.import"] = { link = "Include" }, + ["@keyword.operator"] = { link = "GruvboxRed" }, + ["@keyword.repeat"] = { link = "Repeat" }, + ["@keyword.return"] = { link = "Keyword" }, + ["@keyword.storage"] = { link = "StorageClass" }, + ["@conditional"] = { link = "Conditional" }, + ["@repeat"] = { link = "Repeat" }, + ["@debug"] = { link = "Debug" }, + ["@label"] = { link = "Label" }, + ["@include"] = { link = "Include" }, + ["@exception"] = { link = "Exception" }, + ["@type"] = { link = "Type" }, + ["@type.builtin"] = { link = "Type" }, + ["@type.definition"] = { link = "Typedef" }, + ["@type.qualifier"] = { link = "Type" }, + ["@storageclass"] = { link = "StorageClass" }, + ["@attribute"] = { link = "PreProc" }, + ["@field"] = { link = "Identifier" }, + ["@property"] = { link = "Identifier" }, + ["@variable"] = { link = "GruvboxFg1" }, + ["@variable.builtin"] = { link = "Special" }, + ["@variable.member"] = { link = "Identifier" }, + ["@variable.parameter"] = { link = "Identifier" }, + ["@constant"] = { link = "Constant" }, + ["@constant.builtin"] = { link = "Special" }, + ["@constant.macro"] = { link = "Define" }, + ["@markup"] = { link = "GruvboxFg1" }, + ["@markup.strong"] = { bold = config.bold }, + ["@markup.italic"] = { link = "@text.emphasis" }, + ["@markup.underline"] = { underline = config.underline }, + ["@markup.strikethrough"] = { strikethrough = config.strikethrough }, + ["@markup.heading"] = { link = "Title" }, + ["@markup.raw"] = { link = "String" }, + ["@markup.math"] = { link = "Special" }, + ["@markup.environment"] = { link = "Macro" }, + ["@markup.environment.name"] = { link = "Type" }, + ["@markup.link"] = { link = "Underlined" }, + ["@markup.link.label"] = { link = "SpecialChar" }, + ["@markup.list"] = { link = "Delimiter" }, + ["@markup.list.checked"] = { link = "GruvboxGreen" }, + ["@markup.list.unchecked"] = { link = "GruvboxGray" }, + ["@comment.todo"] = { link = "Todo" }, + ["@comment.note"] = { link = "SpecialComment" }, + ["@comment.warning"] = { link = "WarningMsg" }, + ["@comment.error"] = { link = "ErrorMsg" }, + ["@diff.plus"] = { link = "diffAdded" }, + ["@diff.minus"] = { link = "diffRemoved" }, + ["@diff.delta"] = { link = "diffChanged" }, + ["@module"] = { link = "GruvboxFg1" }, + ["@namespace"] = { link = "GruvboxFg1" }, + ["@symbol"] = { link = "Identifier" }, + ["@text"] = { link = "GruvboxFg1" }, + ["@text.strong"] = { bold = config.bold }, + ["@text.emphasis"] = { italic = config.italic.emphasis }, + ["@text.underline"] = { underline = config.underline }, + ["@text.strike"] = { strikethrough = config.strikethrough }, + ["@text.title"] = { link = "Title" }, + ["@text.literal"] = { link = "String" }, + ["@text.uri"] = { link = "Underlined" }, + ["@text.math"] = { link = "Special" }, + ["@text.environment"] = { link = "Macro" }, + ["@text.environment.name"] = { link = "Type" }, + ["@text.reference"] = { link = "Constant" }, + ["@text.todo"] = { link = "Todo" }, + ["@text.todo.checked"] = { link = "GruvboxGreen" }, + ["@text.todo.unchecked"] = { link = "GruvboxGray" }, + ["@text.note"] = { link = "SpecialComment" }, + ["@text.note.comment"] = { fg = colors.purple, bold = config.bold }, + ["@text.warning"] = { link = "WarningMsg" }, + ["@text.danger"] = { link = "ErrorMsg" }, + ["@text.danger.comment"] = { fg = colors.fg0, bg = colors.red, bold = config.bold }, + ["@text.diff.add"] = { link = "diffAdded" }, + ["@text.diff.delete"] = { link = "diffRemoved" }, + ["@tag"] = { link = "Tag" }, + ["@tag.attribute"] = { link = "Identifier" }, + ["@tag.delimiter"] = { link = "Delimiter" }, + ["@punctuation"] = { link = "Delimiter" }, + ["@macro"] = { link = "Macro" }, + ["@structure"] = { link = "Structure" }, + ["@lsp.type.class"] = { link = "@type" }, + ["@lsp.type.comment"] = { link = "@comment" }, + ["@lsp.type.decorator"] = { link = "@macro" }, + ["@lsp.type.enum"] = { link = "@type" }, + ["@lsp.type.enumMember"] = { link = "@constant" }, + ["@lsp.type.function"] = { link = "@function" }, + ["@lsp.type.interface"] = { link = "@constructor" }, + ["@lsp.type.macro"] = { link = "@macro" }, + ["@lsp.type.method"] = { link = "@method" }, + ["@lsp.type.modifier.java"] = { link = "@keyword.type.java" }, + ["@lsp.type.namespace"] = { link = "@namespace" }, + ["@lsp.type.parameter"] = { link = "@parameter" }, + ["@lsp.type.property"] = { link = "@property" }, + ["@lsp.type.struct"] = { link = "@type" }, + ["@lsp.type.type"] = { link = "@type" }, + ["@lsp.type.typeParameter"] = { link = "@type.definition" }, + ["@lsp.type.variable"] = { link = "@variable" }, + } + + for group, hl in pairs(config.overrides) do + if groups[group] then + -- "link" should not mix with other configs (:h hi-link) + groups[group].link = nil + end + + groups[group] = vim.tbl_extend("force", groups[group] or {}, hl) + end + + return groups +end + +---@param config GruvboxConfig? +Gruvbox.setup = function(config) + Gruvbox.config = vim.deepcopy(default_config) + Gruvbox.config = vim.tbl_deep_extend("force", Gruvbox.config, config or {}) +end + +--- main load function +Gruvbox.load = function() + -- reset colors + if vim.g.colors_name then + vim.cmd.hi("clear") + end + vim.g.colors_name = "gruvbox" + vim.o.termguicolors = true + + local groups = get_groups() + + -- add highlights + for group, settings in pairs(groups) do + vim.api.nvim_set_hl(0, group, settings) + end +end + +return Gruvbox diff --git a/.config/nvim/lua/config/keymaps.lua b/.config/nvim/lua/config/keymaps.lua new file mode 100644 index 0000000..89a8c79 --- /dev/null +++ b/.config/nvim/lua/config/keymaps.lua @@ -0,0 +1,108 @@ +local set = vim.keymap.set + +local function remapkey(mode, key, action) + vim.keymap.set(mode, key, action, { noremap = true, silent = true }) +end + +-- dagnostic popup +set("n", "<leader>e", ":lua vim.diagnostic.open_float()<CR>") + +-- ESC insert to normal ctrl jk +-- set("i", "<C-j><C-k>", "<ESC>") + +-- set("v", "t", "!pandoc -f csv -t commonmark_x<CR>") +set("v", "<m-t>", "!pandoc -f csv -t commonmark_x<CR>") + +-- common save shortcuts +set("i", "<C-s>", "<ESC>:w<cr>a") +set("n", "<C-s>", ":w<cr>") + +-- don't move the cursor +set("n", "J", "mzJ`z") + +-- keep cursor in the middle +set("n", "<C-d>", "<C-d>zz") +set("n", "<C-u>", "<C-u>zz") +set("n", "n", "nzzzv") +set("n", "N", "Nzzzv") + +-- preserve clipboard when pasting +set("x", "<space>p", '"_dp') + +-- sane movement with wrap o n +remapkey({ "n", "v" }, "j", "gj") +remapkey({ "n", "v" }, "k", "gk") +remapkey({ "n", "v" }, "<Down>", "gj") +remapkey({ "n", "v" }, "<Up>", "gk") +remapkey("i", "<Down>", "<C-o>gj") +remapkey("i", "<Up>", "<C-o>gk") + +-- terminal shortcuts +remapkey("i", "<C-t>", "<Esc>:term<CR>A") +remapkey("n", "<C-t", ":term<CR>A") + +-- tab key in visual mode +set("v", "<Tab>", ">gv") +set("v", "<S-Tab>", "<gv") + +-- visually select the characters that are wanted in the search, then type // to search for the next occurrence of the selected text +remapkey("v", "//", "y/\\V<C-R>=escape(@\",'/\\')<CR><CR>") + +-- no ex mode etc +remapkey("n", "Q", "<Nop>") +remapkey("n", "<C-f>", "<Nop>") + +-- center current line +remapkey("n", "cc", ":center<CR>") + +-- write to files with root privileges +set("c", "w!!", ":w !sudo tee % >/dev/null") + +-- blamer +-- set("", "<C-b>", ":BlamerToggle<CR>") + +-- delete to void register +set({ "n", "v" }, "<leader>d", '"_d') + +-- quickfix list +set("n", "<C-x>", "<cmd>cnext<CR>zz") +set("n", "C-c>", "<cmd>cprev<CR>zz") +set("n", "<leader>x", "<cmd>lnext<CR>zz") +set("n", "<leader>c", "<cmd>lprev<CR>zz") + +-- typo fix +set("i", "<F1>", "<Esc>") +set("n", "q:", ":q<CR>") +vim.cmd([[ + ia tongiht tonight + ia htese these + ia od do + ia nothign nothing + ia htey they + ia htem them + ia iwth with + ia maxium maximum + ia funtcion function + ia fucntion function + ia funciton function + ia dfe def + ia edn end + ia teh the + ia hte the + ia htis this + ia tihs this + ia taht that + ia retunr return + ia reutrn return + ia eariler earlier + ia ulness unless + ia ahve have + ia chatper chapter + ia colmun column + ia amster master + ia orgiin origin + ia somehting something + ia hting thing + ia orgniaztion organization + ia orgnization organization +]]) diff --git a/.config/nvim/lua/config/lazy.lua b/.config/nvim/lua/config/lazy.lua new file mode 100644 index 0000000..a887655 --- /dev/null +++ b/.config/nvim/lua/config/lazy.lua @@ -0,0 +1,23 @@ +local lazypath = vim.fn.stdpath("data") .. "/lazy/lazy.nvim" +if not (vim.uv or vim.loop).fs_stat(lazypath) then + local lazyrepo = "https://github.com/folke/lazy.nvim.git" + local out = vim.fn.system({ "git", "clone", "--filter=blob:none", "--branch=stable", lazyrepo, lazypath }) + if vim.v.shell_error ~= 0 then + vim.api.nvim_echo({ + { "Failed to clone lazy.nvim:\n", "ErrorMsg" }, + { out, "WarningMsg" }, + { "\nPress any key to exit..." }, + }, true, {}) + vim.fn.getchar() + os.exit(1) + end +end +vim.opt.rtp:prepend(lazypath) + +require("lazy").setup({ + spec = { + { import = "plugins" }, + }, + install = { colorscheme = { "gruvbox" } }, + checker = { enabled = true }, +}) diff --git a/.config/nvim/lua/config/lsp.lua b/.config/nvim/lua/config/lsp.lua new file mode 100644 index 0000000..07d9d4c --- /dev/null +++ b/.config/nvim/lua/config/lsp.lua @@ -0,0 +1,88 @@ +vim.diagnostic.config({ + virtual_text = true, + current_line = true, +}) + +vim.lsp.config('*', { + capabilities = { + textDocument = { + semanticTokens = { + multilineTokenSupport = true, + } + } + }, + root_markers = { '.git' }, +}) + +vim.lsp.enable({ + "rust_analyzer", + "ruff", -- python + "ty", -- python + -- "pyright", -- replace with astrals ty + -- "delance", + -- "cyright", + "bashls", + "clangd", + "lua_ls", + + "gopls", + "cssls", + "ts_ls", + "jsonls", +}) + +local capabilities = require('blink.cmp').get_lsp_capabilities() + +local disable_semantic_tokens = { + lua = true, + python = true, -- TODO: fix ty highlight colors later +} + +vim.api.nvim_create_autocmd('LspAttach', { + group = vim.api.nvim_create_augroup('lsp', {}), + callback = function(args) + local bufnr = args.buf + local client = assert(vim.lsp.get_client_by_id(args.data.client_id)) + if client:supports_method('textDocument/implementation') then + -- Create a keymap for vim.lsp.buf.implementation ... + end + -- Enable auto-completion. Note: Use CTRL-Y to select an item. |complete_CTRL-Y| + if client:supports_method('textDocument/completion') then + -- Optional: trigger autocompletion on EVERY keypress. May be slow! + -- local chars = {}; for i = 32, 126 do table.insert(chars, string.char(i)) end + -- client.server_capabilities.completionProvider.triggerCharacters = chars + vim.lsp.completion.enable(true, client.id, args.buf, { autotrigger = true }) + end + -- Auto-format ("lint") on save. + -- Usually not needed if server supports "textDocument/willSaveWaitUntil". + if not client:supports_method('textDocument/willSaveWaitUntil') + and client:supports_method('textDocument/formatting') then + vim.api.nvim_create_autocmd('BufWritePre', { + group = vim.api.nvim_create_augroup('lsp', { clear = false }), + buffer = args.buf, + callback = function() + vim.lsp.buf.format({ bufnr = args.buf, id = client.id, timeout_ms = 1000 }) + end, + }) + end + -- LSP keybindings + vim.opt_local.omnifunc = "v:lua.vim.lsp.omnifunc" + vim.keymap.set("n", "gd", vim.lsp.buf.definition, { buffer = 0, desc = "Goto definition" }) + vim.keymap.set("n", "gr", vim.lsp.buf.references, { buffer = 0, desc = "List references" }) + vim.keymap.set("n", "gD", vim.lsp.buf.declaration, { buffer = 0, desc = "Goto declaration" }) + vim.keymap.set("n", "gT", vim.lsp.buf.type_definition, { buffer = 0, desc = "Goto type definition" }) + -- vim.keymap.set("n", "K", vim.lsp.buf.hover, { buffer = 0, desc = "Hover documentation" }) -- hover.nvim + + vim.keymap.set("n", "<space>cr", vim.lsp.buf.rename, { buffer = 0, desc = "Rename all references" }) + vim.keymap.set("n", "<space>ca", vim.lsp.buf.code_action, { buffer = 0, desc = "Code action" }) + + local filetype = vim.bo[bufnr].filetype + if disable_semantic_tokens[filetype] then + client.server_capabilities.semanticTokensProvider = nil + end + + if client.name == "vscode-css-language-server" then + capabilities.textDocument.completion.completionItem.snippetSupport = true + end + end, +}) diff --git a/.config/nvim/lua/config/options.lua b/.config/nvim/lua/config/options.lua new file mode 100644 index 0000000..a362fcd --- /dev/null +++ b/.config/nvim/lua/config/options.lua @@ -0,0 +1,160 @@ +local opt = vim.opt + +-- vim.api.nvim_set_hl(0, "ColorColumn", { ctermbg = "NONE", bg = "NONE" }) + +-- colorscheme gruvbox +opt.termguicolors = true +opt.background = "dark" +vim.cmd.colorscheme("gruvbox") + +opt.mouse = "" -- disable mouse +opt.encoding = "utf-8" +opt.shortmess = "atI" -- disable intro screen +opt.inccommand = "nosplit" -- shows ex-command change previews +-- opt.inccommand = "split" +opt.smartcase = true +opt.ignorecase = true +opt.number = true +opt.relativenumber = true +opt.splitbelow = true +opt.splitright = true +opt.signcolumn = "yes" +opt.shada = { "'10", "<0", "s10", "h" } +opt.clipboard = "unnamedplus" +opt.expandtab = true -- expand tabs to spaces +opt.smarttab = false -- fuck tabs +-- opt.formatoptions:remove "o" -- Don't have `o` add a comment, should be in filetype (ftplugin) +opt.spell = false +opt.undolevels = 150 +opt.lazyredraw = true -- don't redraw screen during macros +opt.sc = true -- show incomplete command at bottom right +opt.swapfile = false +opt.backupdir = "/tmp" +opt.backupcopy = "yes" +opt.directory = "/tmp" + +opt.timeoutlen = 500 +opt.ttimeoutlen = 10 -- fix esc in tmux +opt.showmatch = true +opt.mat = 5 + +opt.visualbell = true +opt.foldenable = false +opt.foldmethod = "syntax" +opt.foldlevel = 1 +opt.foldnestmax = 10 +opt.tabstop = 8 -- n-space tab width +opt.shiftwidth = 2 -- allows the use of < and > for VISUAL indenting +opt.softtabstop = 2 -- counts n space when DELETE or BACKSPACE is used +opt.textwidth = 78 +opt.autoindent = true +opt.smartindent = true +opt.hlsearch = false +opt.incsearch = true +opt.backspace = "indent,eol,start" + +opt.history = 1000 -- 1000 lines of command history +opt.cmdheight = 1 -- command line height +opt.ruler = true -- ruler display in statusline +opt.showmode = true -- show mode at bottom of screen +opt.backup = false -- don't keep backups after close +opt.writebackup = true -- do keep one while working +opt.backupdir = "/tmp" +opt.backupcopy = "yes" +opt.directory = "/tmp" +opt.showmatch = true -- show matching brackets (), {}, [] +opt.whichwrap = "h,l,<,>,[,]" +opt.showcmd = true +opt.modeline = true +opt.formatoptions = "tcqjl" +opt.selection = "inclusive" +opt.autowrite = true +opt.cinoptions = "g0,:0,l1,(0,t0" +opt.shortmess = "at" +opt.complete = ".,t,i,b,w,k" +opt.wildchar = ("\t"):byte() +opt.wildmenu = true +opt.wildmode = "longest:full,full" +opt.wildignore = "*/.git/*,*/tmp/*,*.swp,*/node_modules/*" +opt.previewheight = 5 +opt.joinspaces = true +opt.magic = true +opt.suffixes = ".bak,~,.o,.info,.log,.rbx,.swp" +opt.title = true +opt.scrolloff = 8 -- start scrolling at 8 lines away from margins +opt.sidescrolloff = 15 +opt.sidescroll = 1 +opt.cursorline = true +opt.omnifunc = "syntaxcomplete#Complete" +opt.laststatus = 3 -- 2 +opt.completeopt = "menu,menuone,noselect" + +-- TODO: convert to lua or get lualine plugin +-- vim.cmd [[ +-- set statusline= +-- set statusline+=%#PmenuSel# +-- set statusline+=%#LineNr# +-- set statusline+=\ %F +-- set statusline+=%m +-- set statusline+=%= +-- set statusline+=%#CursorColumn# +-- set statusline+=\ %y +-- set statusline+=\ %{&fileencoding?&fileencoding:&encoding} +-- set statusline+=\ %{&fileformat} +-- set statusline+=\ %p%% +-- set statusline+=\ %l:%c +-- set statusline+=\ +-- ]] + +vim.cmd([[ + augroup encrypted + au! + autocmd BufReadPre,FileReadPre *.gpg set viminfo= + autocmd BufReadPre,FileReadPre *.gpg set noswapfile noundofile nobackup + autocmd BufReadPre,FileReadPre *.gpg set bin + autocmd BufReadPre,FileReadPre *.gpg let ch_save = &ch|set ch=2 + autocmd BufReadPost,FileReadPost *.gpg '[,']!gpg --decrypt 2> /dev/null + autocmd BufReadPost,FileReadPost *.gpg set nobin + autocmd BufReadPost,FileReadPost *.gpg let &ch = ch_save|unlet ch_save + autocmd BufReadPost,FileReadPost *.gpg execute ":doautocmd BufReadPost " . expand("%:r") + autocmd BufWritePre,FileWritePre *.gpg '[,']!gpg --default-recipient-self -ae 2>/dev/null + autocmd BufWritePost,FileWritePost *.gpg u + augroup END +]]) + +-- TODO: move and convert to lua +-- vimwiki (move to vimwiki.lua config) +--local hostname = vim.fn.hostname() +--if hostname == "arcana" then +-- vim.g.vimwiki_list = { { path = "/home/moxie/wiki" } } +--elseif hostname == "hideaway" then +-- vim.g.vimwiki_list = { { path = "/stash/wiki" } } +--end + +-- open vimwiki links in a new vim buffer instead of xdg-open +-- vim.cmd([[ +-- fun! VimwikiLinkHandler(link) +-- let link_infos = vimwiki#base#resolve_link(a:link) +-- try +-- if link_infos.filename =~ "^http" +-- exe '!$BROWSER "' . fnameescape(link_infos.filename) . '"' +-- else +-- exe "e " . fnameescape(link_infos.filename) +-- endif +-- return 1 +-- catch +-- echo "Failed opening " . a:link +-- return 0 +-- endtry +-- endfun +-- ]]) + +-- remove docx and xlsx from zip.vim +vim.g.zipPlugin_ext = +"*.zip,*.jar,*.xpi,*.ja,*.war,*.ear,*.celzip,*.oxt,*.kmz,*.wsz,*.xap,*.docm,*.dotx,*.dotm,*.potx,*.potm,*.ppsx,*.ppsm,*.pptx,*.pptm,*.ppam,*.sldx,*.thmx,*.xlam,*.xlsm,*.xlsb,*.xltx,*.xltm,*.xlam,*.crtx,*.vdw,*.glox,*.gcsx,*.gqsx" + +vim.cmd([[ + highlight GitGutterAdd guifg=#009900 ctermfg=2 + highlight GitGutterChange guifg=#bbbb00 ctermfg=3 + highlight GitGutterDelete guifg=#ff2222 ctermfg=1 +]]) diff --git a/.config/nvim/lua/config/terminal.lua b/.config/nvim/lua/config/terminal.lua new file mode 100644 index 0000000..ea8f905 --- /dev/null +++ b/.config/nvim/lua/config/terminal.lua @@ -0,0 +1,19 @@ +local set = vim.opt_local + +vim.api.nvim_create_autocmd("TermOpen", { + group = vim.api.nvim_create_augroup("custom-term-open", {}), + callback = function() + set.number = false + set.relativenumber = false + set.scrolloff = 0 + end, +}) + +vim.keymap.set("t", "<esc><esc>", "<c-\\><c-n>") +vim.keymap.set("n", ",st", function() + vim.cmd.new() + vim.cmd.wincmd "J" + vim.api.nvim_win_set_height(0, 12) + vim.wo.winfixheight = true + vim.cmd.term() +end) diff --git a/.config/nvim/lua/plugins/blink.cmp.lua b/.config/nvim/lua/plugins/blink.cmp.lua new file mode 100644 index 0000000..d5f292b --- /dev/null +++ b/.config/nvim/lua/plugins/blink.cmp.lua @@ -0,0 +1,23 @@ +return { + "saghen/blink.cmp", + version = "*", + opts = { + keymap = { preset = "super-tab" }, + appearance = { + use_nvim_cmp_as_default = true, + nerd_font_variant = "mono", + }, + + fuzzy = { + max_typos = function(keyword) + return math.floor(#keyword / 0) + end, + }, + + sources = { + default = { "lsp", "path", "snippets", "buffer" }, + -- cmdline = {}, + }, + }, + opts_extend = { "sources.default" }, +} diff --git a/.config/nvim/lua/plugins/harpoon.lua b/.config/nvim/lua/plugins/harpoon.lua new file mode 100644 index 0000000..9ca692f --- /dev/null +++ b/.config/nvim/lua/plugins/harpoon.lua @@ -0,0 +1,22 @@ +return { + "ThePrimeagen/harpoon", + branch = "harpoon2", + dependencies = { "nvim-lua/plenary.nvim" }, + config = function() + local harpoon = require "harpoon" + harpoon:setup() + + vim.keymap.set("n", "<m-h><m-m>", function() + harpoon:list():add() + end) + vim.keymap.set("n", "<m-h><m-l>", function() + harpoon.ui:toggle_quick_menu(harpoon:list()) + end) + + for _, idx in ipairs { 1, 2, 3, 4, 5 } do + vim.keymap.set("n", string.format("<space>%d", idx), function() + harpoon:list():select(idx) + end) + end + end, +} diff --git a/.config/nvim/lua/plugins/highlight-colors.lua b/.config/nvim/lua/plugins/highlight-colors.lua new file mode 100644 index 0000000..a0c61b7 --- /dev/null +++ b/.config/nvim/lua/plugins/highlight-colors.lua @@ -0,0 +1,29 @@ +return { + "brenoprata10/nvim-highlight-colors", + cmd = "HighlightColors", + lazy = true, + config = function() + vim.opt.termguicolors = true + require("nvim-highlight-colors").setup { + render = "virtual", + virtual_symbol = "■", + virtual_symbol_prefix = " ", + virtual_symbol_suffix = "", + virtual_symbol_position = "eow", + enable_hex = true, + enable_short_hex = true, + enable_rgb = true, + enable_hsl = true, + enable_var_usage = true, + enable_named_colors = true, + enable_tailwind = false, + custom_colors = { + { label = "%-%-theme%-primary%-color", color = "#0f1219" }, + { label = "%-%-theme%-secondary%-color", color = "#5a5d64" }, + }, + + exclude_filetypes = {}, + exclude_buftypes = {}, + } + end, +} diff --git a/.config/nvim/lua/plugins/hover.lua b/.config/nvim/lua/plugins/hover.lua new file mode 100644 index 0000000..9368041 --- /dev/null +++ b/.config/nvim/lua/plugins/hover.lua @@ -0,0 +1,58 @@ +return { + "lewis6991/hover.nvim", + config = function() + local hover = require "hover" + hover.config({ + --- List of modules names to load as providers. + --- @type (string|Hover.Config.Provider)[] + providers = { + 'hover.providers.diagnostic', + 'hover.providers.lsp', + 'hover.providers.dap', + 'hover.providers.man', + 'hover.providers.dictionary', + -- Optional, disabled by default: + -- 'hover.providers.gh', + -- 'hover.providers.gh_user', + -- 'hover.providers.jira', + -- 'hover.providers.fold_preview', + -- 'hover.providers.highlight', + }, + preview_opts = { + border = 'single' + }, + -- Whether the contents of a currently open hover window should be moved + -- to a :h preview-window when pressing the hover keymap. + preview_window = false, + title = true, + mouse_providers = { + 'hover.providers.lsp', + }, + mouse_delay = 1000 + }) + + -- Setup keymaps + vim.keymap.set('n', 'K', function() + require('hover').open() + end, { desc = 'hover.nvim (open)' }) + + vim.keymap.set('n', 'gK', function() + require('hover').enter() + end, { desc = 'hover.nvim (enter)' }) + + --vim.keymap.set('n', '<C-p>', function() + -- require('hover').hover_switch('previous') + --end, { desc = 'hover.nvim (previous source)' }) + + --vim.keymap.set('n', '<C-n>', function() + -- require('hover').hover_switch('next') + --end, { desc = 'hover.nvim (next source)' }) + + -- Mouse support + --vim.keymap.set('n', '<MouseMove>', function() + -- require('hover').mouse() + --end, { desc = 'hover.nvim (mouse)' }) + + vim.o.mousemoveevent = true + end, +} diff --git a/.config/nvim/lua/plugins/init.lua b/.config/nvim/lua/plugins/init.lua new file mode 100644 index 0000000..76b1b49 --- /dev/null +++ b/.config/nvim/lua/plugins/init.lua @@ -0,0 +1,31 @@ +return { + { "nvim-lua/plenary.nvim" }, + { "folke/zen-mode.nvim", cmd = "ZenMode", opts = {}, lazy = true }, + { 'SCJangra/table-nvim', ft = { 'markdown', 'md' }, opts = {}, lazy = true }, + -- for LSP + { "j-hui/fidget.nvim", opts = {}, }, -- LSP progress messages & notifications + { "stevearc/conform.nvim", opts = {}, }, -- Autoformatting + { "b0o/SchemaStore.nvim", event = "VeryLazy" }, -- Adds JSON Schema support for jsonls + -- mini extras + -- { + -- "nvim-mini/mini.pairs", + -- version = false, + -- conifg = function() + -- require("mini.pairs").setup() + -- end, + -- }, + -- { + -- 'nvim-mini/mini.surround', + -- version = false, + -- config = function() + -- require("mini.surround").setup() + -- end, + -- }, + -- { + -- "nvim-mini/mini.icons", + -- version = false, + -- config = function() + -- require("mini.icons").setup() + -- end, + -- }, +} diff --git a/.config/nvim/lua/plugins/kiwi.lua b/.config/nvim/lua/plugins/kiwi.lua new file mode 100644 index 0000000..abccc24 --- /dev/null +++ b/.config/nvim/lua/plugins/kiwi.lua @@ -0,0 +1,17 @@ +return { + 'serenevoid/kiwi.nvim', + dir = "/home/moxie/.local/share/nvim/lazy/kiwi.nvim/", + branch = "local", + dev = true, + opts = { + { + name = "wiki", + path = "wiki" + }, + }, + keys = { + { "<leader>ww", ":lua require(\"kiwi\").open_wiki_index()<cr>", desc = "Open Wiki index" }, + { "T", ":lua require(\"kiwi\").todo.toggle()<cr>", desc = "Toggle Markdown Task" } + }, + lazy = true +} diff --git a/.config/nvim/lua/plugins/lazydev.lua b/.config/nvim/lua/plugins/lazydev.lua new file mode 100644 index 0000000..327ba76 --- /dev/null +++ b/.config/nvim/lua/plugins/lazydev.lua @@ -0,0 +1,26 @@ +return { + { + "folke/lazydev.nvim", + ft = "lua", + opts = { + library = { + { path = "${3rd}/luv/library", words = { "vim%.uv" } }, + }, + }, + }, + { + "saghen/blink.cmp", + opts = { + sources = { + default = { "lazydev", "lsp", "path", "snippets", "buffer" }, + providers = { + lazydev = { + name = "LazyDev", + module = "lazydev.integrations.blink", + score_offset = 100, + }, + }, + }, + }, + }, +} diff --git a/.config/nvim/lua/plugins/lualine.lua b/.config/nvim/lua/plugins/lualine.lua new file mode 100644 index 0000000..c1000ef --- /dev/null +++ b/.config/nvim/lua/plugins/lualine.lua @@ -0,0 +1,161 @@ +return { + "nvim-lualine/lualine.nvim", + dependencies = { "nvim-tree/nvim-web-devicons" }, + + config = function() + local theme = function() + local colors = { + black = '#282828', + black_hard = '#1d2021', + white = '#ebdbb2', + red = '#fb4934', + green = '#b8bb26', + yellow = '#d79921', + yellow_bright = '#fabd2f', + blue = '#83a598', + purple = '#d3859b', + aqua = '#8ec07c', + orange = '#d65d0e', + orange_bright = '#fe8019', + gray = '#a89984', + darkgray = '#3c3836', + lightgray = '#504945', + inactivegray = '#7c6f64', + } + + return { + normal = { + a = { bg = colors.yellow, fg = colors.black, gui = 'bold' }, + b = { bg = colors.darkgray, fg = colors.white }, + c = { bg = colors.darkgray, fg = colors.white } + }, + insert = { + a = { bg = colors.yellow, fg = colors.black, gui = 'bold' }, + b = { bg = colors.darkgray, fg = colors.white }, + c = { bg = colors.darkgray, fg = colors.white } + }, + visual = { + a = { bg = colors.yellow, fg = colors.black, gui = 'bold' }, + b = { bg = colors.darkgray, fg = colors.white }, + c = { bg = colors.darkgray, fg = colors.white } + }, + replace = { + a = { bg = colors.yellow, fg = colors.black, gui = 'bold' }, + b = { bg = colors.darkgray, fg = colors.white }, + c = { bg = colors.darkgray, fg = colors.white } + }, + command = { + a = { bg = colors.yellow, fg = colors.black, gui = 'bold' }, + b = { bg = colors.darkgray, fg = colors.white }, + c = { bg = colors.darkgray, fg = colors.white } + }, + inactive = { + a = { bg = colors.darkgray, fg = colors.gray, gui = 'bold' }, + b = { bg = colors.darkgray, fg = colors.gray }, + c = { bg = colors.darkgray, fg = colors.gray } + } + } + end + + + local tty = function() + local colors = { + black = '#000000', + -- white = '#ffffff', + white = '#ebdbb2', + yellow = '#d79921', + gray = '#a89984', + darkgray = '#3c3836', + } + + return { + normal = { + a = { bg = colors.yellow, fg = colors.black }, + b = { bg = colors.darkgray, fg = colors.white }, + c = { bg = colors.darkgray, fg = colors.white } + }, + insert = { + a = { bg = colors.yellow, fg = colors.black }, + b = { bg = colors.darkgray, fg = colors.white }, + c = { bg = colors.darkgray, fg = colors.white } + }, + visual = { + a = { bg = colors.yellow, fg = colors.black }, + b = { bg = colors.darkgray, fg = colors.white }, + c = { bg = colors.darkgray, fg = colors.white } + }, + replace = { + a = { bg = colors.yellow, fg = colors.black }, + b = { bg = colors.darkgray, fg = colors.white }, + c = { bg = colors.darkgray, fg = colors.white } + }, + command = { + a = { bg = colors.yellow, fg = colors.black }, + b = { bg = colors.darkgray, fg = colors.white }, + c = { bg = colors.darkgray, fg = colors.white } + }, + inactive = { + a = { bg = colors.darkgray, fg = colors.white }, + b = { bg = colors.darkgray, fg = colors.white }, + c = { bg = colors.darkgray, fg = colors.white } + } + } + end + + require('lualine').setup { + options = { + icons_enabled = false, + theme = theme, -- theme or tty + component_separators = { left = '', right = '' }, + section_separators = { left = '', right = '' }, + disabled_filetypes = { + statusline = {}, + winbar = {}, + }, + ignore_focus = {}, + always_divide_middle = true, + always_show_tabline = true, + globalstatus = false, + refresh = { + statusline = 1000, + tabline = 1000, + winbar = 1000, + refresh_time = 16, + events = { + 'WinEnter', + 'BufEnter', + 'BufWritePost', + 'SessionLoadPost', + 'FileChangedShellPost', + 'VimResized', + 'Filetype', + 'CursorMoved', + 'CursorMovedI', + 'ModeChanged', + }, + } + }, + sections = { + lualine_a = { 'mode' }, + lualine_b = { 'branch', 'diff', 'diagnostics' }, + lualine_c = { 'filename' }, + lualine_x = { 'encoding', 'fileformat', 'filetype' }, + -- lualine_y = { 'progress' }, + lualine_y = { '' }, + lualine_z = { 'location' } + }, + inactive_sections = { + lualine_a = {}, + lualine_b = {}, + lualine_c = { 'filename' }, + lualine_x = { 'location' }, + lualine_y = {}, + lualine_z = {} + }, + tabline = {}, + winbar = {}, + inactive_winbar = {}, + extensions = {} + } + end, +} diff --git a/.config/nvim/lua/plugins/oil.lua b/.config/nvim/lua/plugins/oil.lua new file mode 100644 index 0000000..1abc120 --- /dev/null +++ b/.config/nvim/lua/plugins/oil.lua @@ -0,0 +1,22 @@ +return { + "stevearc/oil.nvim", + dependencies = { "nvim-tree/nvim-web-devicons" }, + config = function() + require("oil").setup { + columns = { "icon" }, + keymaps = { + ["<C-h>"] = false, + ["<M-h>"] = "actions.select_split", + }, + view_options = { + show_hidden = true, + }, + } + + -- Open parent directory in current window + vim.keymap.set("n", "-", "<CMD>Oil<CR>", { desc = "Open parent directory" }) + + -- Open parent directory in floating window + vim.keymap.set("n", "<space>-", require("oil").toggle_float) + end, +} diff --git a/.config/nvim/lua/plugins/outline.lua b/.config/nvim/lua/plugins/outline.lua new file mode 100644 index 0000000..8326e53 --- /dev/null +++ b/.config/nvim/lua/plugins/outline.lua @@ -0,0 +1,10 @@ +return { + "hedyhli/outline.nvim", + lazy = true, + cmd = { "Outline", "OutlineOpen" }, + keys = { + { "<leader>o", vim.cmd.Outline, desc = "Toggle outline" }, + }, + opts = { + }, +} diff --git a/.config/nvim/lua/plugins/render-markdown.lua b/.config/nvim/lua/plugins/render-markdown.lua new file mode 100644 index 0000000..da9fe62 --- /dev/null +++ b/.config/nvim/lua/plugins/render-markdown.lua @@ -0,0 +1,44 @@ +return { + 'MeanderingProgrammer/render-markdown.nvim', + cmd = "RenderMarkdown", + ft = { "markdown", "md" }, + lazy = true, + -- dependencies = { 'nvim-treesitter/nvim-treesitter', 'nvim-mini/mini.icons' }, -- if you use standalone mini plugins + dependencies = { 'nvim-treesitter/nvim-treesitter', 'nvim-tree/nvim-web-devicons' }, -- if you prefer nvim-web-devicons + + ---@module 'render-markdown' + ---@type render.md.UserConfig + opts = {}, + config = function() + require('render-markdown').setup({ + -- completions = { lsp = { enabled = true } }, + heading = { + -- position = 'inline', + icons = { '➤ ' }, + -- icons = { ' ', ' ' }, + -- icons = { '➤ ', '➢ ' }, + width = 'block', + left_pad = 1, + right_pad = 1, + }, + bullet = { + -- icons = { '▫️', '▪️' }, + icons = { '■', '□' }, + }, + code = { + width = 'block', + min_width = 45, + left_pad = 0, + right_pad = 2, + language_pad = 0, + }, + }) + end, + -- fg = #b8bb26 + vim.api.nvim_set_hl(0, 'RenderMarkdownH1Bg', { fg = '#000000', bg = '#fabd2f' }), + vim.api.nvim_set_hl(0, 'RenderMarkdownH2Bg', { bg = '#181818' }), + vim.api.nvim_set_hl(0, 'RenderMarkdownH3Bg', { bg = '#242424' }), + vim.api.nvim_set_hl(0, 'RenderMarkdownH4Bg', { bg = '#303030' }), + vim.api.nvim_set_hl(0, 'RenderMarkdownH5Bg', { bg = '#3c3c3c' }), + vim.api.nvim_set_hl(0, 'RenderMarkdownH6Bg', { bg = '#424242' }), +} diff --git a/.config/nvim/lua/plugins/telescope.lua b/.config/nvim/lua/plugins/telescope.lua new file mode 100644 index 0000000..4d8e86c --- /dev/null +++ b/.config/nvim/lua/plugins/telescope.lua @@ -0,0 +1,48 @@ +return { + 'nvim-telescope/telescope.nvim', + dependencies = { + { 'nvim-lua/plenary.nvim' }, + { 'nvim-telescope/telescope-fzf-native.nvim', build = 'make' }, + { 'nvim-telescope/telescope-smart-history.nvim' }, + { 'kkharji/sqlite.lua' }, + }, + config = function() + local data = assert(vim.fn.stdpath 'data') --[[@as string]] + + require('telescope').setup { + extensions = { + fzf = { + fuzzy = true, + override_generic_sorter = true, + override_file_sorter = true, + case_mode = 'smart_case', + }, + wrap_results = true, + history = { + path = vim.fs.joinpath(data, 'telescope_history.sqlite3'), + limit = 100, + }, + }, + } + + pcall(require('telescope').load_extension, 'fzf') + pcall(require('telescope').load_extension, 'smart_history') + + local builtin = require 'telescope.builtin' + + vim.keymap.set('n', '<space>fd', builtin.find_files) + vim.keymap.set('n', '<space>fh', builtin.help_tags) + vim.keymap.set('n', '<space>fg', builtin.live_grep) + vim.keymap.set('n', '<space>/', builtin.current_buffer_fuzzy_find) + vim.keymap.set('n', '<space>gw', builtin.grep_string) + + vim.keymap.set('n', '<space>fa', function() + ---@diagnostic disable-next-line: param-type-mismatch + builtin.find_files { cwd = vim.fs.joinpath(vim.fn.stdpath 'data', 'lazy') } + end) + + vim.keymap.set('n', '<space>en', function() + builtin.find_files { cwd = vim.fn.stdpath 'config' } + end) + end, +} diff --git a/.config/nvim/lua/plugins/treesitter.lua b/.config/nvim/lua/plugins/treesitter.lua new file mode 100644 index 0000000..9d4697d --- /dev/null +++ b/.config/nvim/lua/plugins/treesitter.lua @@ -0,0 +1,42 @@ +return { + "nvim-treesitter/nvim-treesitter", + config = function() + require("nvim-treesitter.configs").setup { + modules = {}, + ensure_installed = { + "latex", + "markdown", + "markdown_inline", + "vim", + "vimdoc", + "query", + "bash", + "c", + "cpp", + "rust", + "toml", + "python", + "haskell", + "go", + "lua", + "luadoc", + "html", + "css", + "scss", + "json", + "ruby", + "yaml", + "javascript", + "typescript", + "tsx", + }, + sync_install = false, + auto_install = true, + ignore_install = {}, + highlight = { + enable = true, + additional_vim_regex_highlighting = false, + }, + } + end, +} diff --git a/.config/nvim/lua/plugins/undotree.lua b/.config/nvim/lua/plugins/undotree.lua new file mode 100644 index 0000000..8a416b1 --- /dev/null +++ b/.config/nvim/lua/plugins/undotree.lua @@ -0,0 +1,8 @@ +return { + "mbbill/undotree", + lazy = true, + cmd = { "UndotreeToggle" }, + keys = { + { "<leader>u", vim.cmd.UndotreeToggle, desc = "Toggle undotree" }, + }, +} diff --git a/.config/nvim/stylua.toml b/.config/nvim/stylua.toml new file mode 100644 index 0000000..0fd4cb5 --- /dev/null +++ b/.config/nvim/stylua.toml @@ -0,0 +1,6 @@ +column_width = 120 +line_endings = "Unix" +indent_type = "Spaces" +indent_width = 2 +quote_style = "AutoPreferDouble" +no_call_parentheses = false |
