summaryrefslogtreecommitdiff
path: root/.config
diff options
context:
space:
mode:
authormoxie <moxie.git@posteo.net>2025-09-30 12:27:44 +0300
committermoxie <moxie.git@posteo.net>2025-09-30 12:27:44 +0300
commit1e27d1c7b25e4d28a25c0fa2c4e6e33a66b9072e (patch)
tree7169509b4d5dfce3ed25fe333cc506a40f5c90f2 /.config
parent51797f743fe74d1723ca62085f92e8c5e953038b (diff)
add nvim configs
Diffstat (limited to '.config')
-rw-r--r--.config/nvim/after/ftplugin/asciidoc.lua9
-rw-r--r--.config/nvim/after/ftplugin/bash.lua7
-rw-r--r--.config/nvim/after/ftplugin/c.lua10
-rw-r--r--.config/nvim/after/ftplugin/cpp.lua10
-rw-r--r--.config/nvim/after/ftplugin/go.lua11
-rw-r--r--.config/nvim/after/ftplugin/grub.lua3
-rw-r--r--.config/nvim/after/ftplugin/haml.lua8
-rw-r--r--.config/nvim/after/ftplugin/haskell.lua8
-rw-r--r--.config/nvim/after/ftplugin/help.lua8
-rw-r--r--.config/nvim/after/ftplugin/html.lua9
-rw-r--r--.config/nvim/after/ftplugin/javascript.lua8
-rw-r--r--.config/nvim/after/ftplugin/lisp.lua3
-rw-r--r--.config/nvim/after/ftplugin/lua.lua9
-rw-r--r--.config/nvim/after/ftplugin/mail.lua8
-rw-r--r--.config/nvim/after/ftplugin/make.lua7
-rw-r--r--.config/nvim/after/ftplugin/markdown.lua7
-rw-r--r--.config/nvim/after/ftplugin/perl.lua8
-rw-r--r--.config/nvim/after/ftplugin/pgsql.lua3
-rw-r--r--.config/nvim/after/ftplugin/php.lua9
-rw-r--r--.config/nvim/after/ftplugin/python.lua9
-rw-r--r--.config/nvim/after/ftplugin/ruby.lua9
-rw-r--r--.config/nvim/after/ftplugin/rust.lua7
-rw-r--r--.config/nvim/after/ftplugin/sh.lua7
-rw-r--r--.config/nvim/after/ftplugin/sh/pkgbuild.lua3
-rw-r--r--.config/nvim/after/ftplugin/sql.lua4
-rw-r--r--.config/nvim/after/ftplugin/tex.lua5
-rw-r--r--.config/nvim/after/ftplugin/vim.lua7
-rw-r--r--.config/nvim/after/ftplugin/vimwiki.lua5
-rw-r--r--.config/nvim/after/ftplugin/vue.lua8
-rw-r--r--.config/nvim/after/ftplugin/xhtml.lua9
-rw-r--r--.config/nvim/after/ftplugin/zsh.lua7
-rw-r--r--.config/nvim/colors/gruvbox.lua1
-rw-r--r--.config/nvim/init.lua14
-rw-r--r--.config/nvim/lsp/bashls.lua7
-rw-r--r--.config/nvim/lsp/clangd.lua13
-rw-r--r--.config/nvim/lsp/cssls.lua20
-rw-r--r--.config/nvim/lsp/gopls.lua9
-rw-r--r--.config/nvim/lsp/jsonls.lua8
-rw-r--r--.config/nvim/lsp/lua_ls.lua12
-rw-r--r--.config/nvim/lsp/pyright.lua34
-rw-r--r--.config/nvim/lsp/rubocop.lua5
-rw-r--r--.config/nvim/lsp/ruby-lsp.lua9
-rw-r--r--.config/nvim/lsp/ruff.lua11
-rw-r--r--.config/nvim/lsp/rust_analyzer.lua19
-rw-r--r--.config/nvim/lsp/ts_ls.lua83
-rw-r--r--.config/nvim/lsp/ty.lua13
-rw-r--r--.config/nvim/lua/config/autocmd.lua83
-rw-r--r--.config/nvim/lua/config/gruvbox.lua1305
-rw-r--r--.config/nvim/lua/config/keymaps.lua108
-rw-r--r--.config/nvim/lua/config/lazy.lua23
-rw-r--r--.config/nvim/lua/config/lsp.lua88
-rw-r--r--.config/nvim/lua/config/options.lua160
-rw-r--r--.config/nvim/lua/config/terminal.lua19
-rw-r--r--.config/nvim/lua/plugins/blink.cmp.lua23
-rw-r--r--.config/nvim/lua/plugins/harpoon.lua22
-rw-r--r--.config/nvim/lua/plugins/highlight-colors.lua29
-rw-r--r--.config/nvim/lua/plugins/hover.lua58
-rw-r--r--.config/nvim/lua/plugins/init.lua31
-rw-r--r--.config/nvim/lua/plugins/kiwi.lua17
-rw-r--r--.config/nvim/lua/plugins/lazydev.lua26
-rw-r--r--.config/nvim/lua/plugins/lualine.lua161
-rw-r--r--.config/nvim/lua/plugins/oil.lua22
-rw-r--r--.config/nvim/lua/plugins/outline.lua10
-rw-r--r--.config/nvim/lua/plugins/render-markdown.lua44
-rw-r--r--.config/nvim/lua/plugins/telescope.lua48
-rw-r--r--.config/nvim/lua/plugins/treesitter.lua42
-rw-r--r--.config/nvim/lua/plugins/undotree.lua8
-rw-r--r--.config/nvim/stylua.toml6
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