summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTom Li Dobnik <tomlidobnik1@gmail.com>2026-03-03 18:46:16 +0100
committerTom Li Dobnik <tomlidobnik1@gmail.com>2026-03-03 18:46:16 +0100
commitf7bbc5e6740f6199d7ed0fe704daaa7efd98c093 (patch)
treed6cd8984dbf2a8a909f16dde865a19a343c31d48
parent1f156148fadab8468a46e598296b18b54f7860ce (diff)
nvim update
-rw-r--r--.config/.DS_Storebin8196 -> 8196 bytes
-rw-r--r--.config/fish/config.fish2
-rw-r--r--.config/ghostty/config2
-rw-r--r--.config/nvim-old/.editorconfig (renamed from .config/nvim/.editorconfig)0
-rw-r--r--.config/nvim-old/.luarc.json (renamed from .config/nvim/.luarc.json)0
-rw-r--r--.config/nvim-old/after/ftplugin/css.lua3
-rw-r--r--.config/nvim-old/after/ftplugin/html.lua3
-rw-r--r--.config/nvim-old/after/ftplugin/javascript.lua3
-rw-r--r--.config/nvim-old/after/ftplugin/javascriptreact.lua3
-rw-r--r--.config/nvim-old/after/ftplugin/json.lua3
-rw-r--r--.config/nvim-old/after/ftplugin/lua.lua5
-rw-r--r--.config/nvim-old/after/ftplugin/md.lua3
-rw-r--r--.config/nvim-old/after/ftplugin/rust.lua13
-rw-r--r--.config/nvim-old/init.lua5
-rw-r--r--.config/nvim-old/lazy-lock.json (renamed from .config/nvim/lazy-lock.json)0
-rw-r--r--.config/nvim-old/lua/autocmds.lua (renamed from .config/nvim/lua/autocmds.lua)0
-rw-r--r--.config/nvim-old/lua/config/lazy.lua (renamed from .config/nvim/lua/config/lazy.lua)0
-rw-r--r--.config/nvim-old/lua/config/plugins/blink-cmp.lua (renamed from .config/nvim/lua/config/plugins/blink-cmp.lua)0
-rw-r--r--.config/nvim-old/lua/config/plugins/colorscheme.lua (renamed from .config/nvim/lua/config/plugins/colorscheme.lua)0
-rw-r--r--.config/nvim-old/lua/config/plugins/conform.lua (renamed from .config/nvim/lua/config/plugins/conform.lua)0
-rw-r--r--.config/nvim-old/lua/config/plugins/flash.lua (renamed from .config/nvim/lua/config/plugins/flash.lua)0
-rw-r--r--.config/nvim-old/lua/config/plugins/fzflua.lua (renamed from .config/nvim/lua/config/plugins/fzflua.lua)0
-rw-r--r--.config/nvim-old/lua/config/plugins/gitsigns.lua (renamed from .config/nvim/lua/config/plugins/gitsigns.lua)0
-rw-r--r--.config/nvim-old/lua/config/plugins/leetcode.lua (renamed from .config/nvim/lua/config/plugins/leetcode.lua)0
-rw-r--r--.config/nvim-old/lua/config/plugins/lsp.lua (renamed from .config/nvim/lua/config/plugins/lsp.lua)0
-rw-r--r--.config/nvim-old/lua/config/plugins/lualine.lua (renamed from .config/nvim/lua/config/plugins/lualine.lua)0
-rw-r--r--.config/nvim-old/lua/config/plugins/luasnip.lua (renamed from .config/nvim/lua/config/plugins/luasnip.lua)0
-rw-r--r--.config/nvim-old/lua/config/plugins/markdown.lua (renamed from .config/nvim/lua/config/plugins/markdown.lua)0
-rw-r--r--.config/nvim-old/lua/config/plugins/mini.lua (renamed from .config/nvim/lua/config/plugins/mini.lua)0
-rw-r--r--.config/nvim-old/lua/config/plugins/neotree.lua (renamed from .config/nvim/lua/config/plugins/neotree.lua)0
-rw-r--r--.config/nvim-old/lua/config/plugins/oil.lua (renamed from .config/nvim/lua/config/plugins/oil.lua)0
-rw-r--r--.config/nvim-old/lua/config/plugins/rustacean.lua (renamed from .config/nvim/lua/config/plugins/rustacean.lua)0
-rw-r--r--.config/nvim-old/lua/config/plugins/snacks.lua (renamed from .config/nvim/lua/config/plugins/snacks.lua)0
-rw-r--r--.config/nvim-old/lua/config/plugins/treesitter.lua (renamed from .config/nvim/lua/config/plugins/treesitter.lua)0
-rw-r--r--.config/nvim-old/lua/config/plugins/typst.lua (renamed from .config/nvim/lua/config/plugins/typst.lua)0
-rw-r--r--.config/nvim-old/lua/config/plugins/utils.lua (renamed from .config/nvim/lua/config/plugins/utils.lua)0
-rw-r--r--.config/nvim-old/lua/config/plugins/uv.lua (renamed from .config/nvim/lua/config/plugins/uv.lua)0
-rw-r--r--.config/nvim-old/lua/config/plugins/which-key.lua (renamed from .config/nvim/lua/config/plugins/which-key.lua)0
-rw-r--r--.config/nvim-old/lua/config/snippets/all.lua (renamed from .config/nvim/lua/config/snippets/all.lua)0
-rw-r--r--.config/nvim-old/lua/mappings.lua (renamed from .config/nvim/lua/mappings.lua)0
-rw-r--r--.config/nvim-old/lua/options.lua (renamed from .config/nvim/lua/options.lua)0
-rw-r--r--.config/nvim-old/nvim-pack-lock.json85
-rw-r--r--.config/nvim/init.lua1141
-rw-r--r--.config/nvim/nvim-macos.tar.gz1
-rw-r--r--.config/nvim/nvim-pack-lock.json85
-rw-r--r--.tmux.conf2
46 files changed, 1352 insertions, 7 deletions
diff --git a/.config/.DS_Store b/.config/.DS_Store
index 1f74281..a1d77a0 100644
--- a/.config/.DS_Store
+++ b/.config/.DS_Store
Binary files differ
diff --git a/.config/fish/config.fish b/.config/fish/config.fish
index 646bf63..49ff5b0 100644
--- a/.config/fish/config.fish
+++ b/.config/fish/config.fish
@@ -81,6 +81,7 @@ alias gi="git init && aig"
alias gs="git status"
alias aig="cp ~/.config/.gitignore-template ./.gitignore"
alias u="uv run"
+alias vi="/Users/tom/Downloads/nvim-macos-arm64/bin/nvim -u /Users/tom/Downloads/nvim/init.lua"
function ga
@@ -119,3 +120,4 @@ alias conda="/opt/homebrew/anaconda3/bin/conda"
set -Ux CARAPACE_BRIDGES 'zsh,fish,bash,inshellisense' # optional
carapace _carapace | source
+export PATH="$HOME/.local/apps/nvim-macos-arm64/bin:$PATH"
diff --git a/.config/ghostty/config b/.config/ghostty/config
index f2cfcb7..559a361 100644
--- a/.config/ghostty/config
+++ b/.config/ghostty/config
@@ -38,6 +38,8 @@ keybind = super+alt+ctrl+shift+1=text:\x13\x31
keybind = super+alt+ctrl+shift+2=text:\x13\x32
keybind = super+alt+ctrl+shift+3=text:\x13\x33
keybind = super+alt+ctrl+shift+4=text:\x13\x34
+keybind = super+alt+ctrl+shift+5=text:\x13\x35
+keybind = super+alt+ctrl+shift+6=text:\x13\x36
keybind = super+alt+ctrl+shift+o=text:\x03
diff --git a/.config/nvim/.editorconfig b/.config/nvim-old/.editorconfig
index 9a6cc75..9a6cc75 100644
--- a/.config/nvim/.editorconfig
+++ b/.config/nvim-old/.editorconfig
diff --git a/.config/nvim/.luarc.json b/.config/nvim-old/.luarc.json
index 59e3c38..59e3c38 100644
--- a/.config/nvim/.luarc.json
+++ b/.config/nvim-old/.luarc.json
diff --git a/.config/nvim-old/after/ftplugin/css.lua b/.config/nvim-old/after/ftplugin/css.lua
new file mode 100644
index 0000000..5b3770c
--- /dev/null
+++ b/.config/nvim-old/after/ftplugin/css.lua
@@ -0,0 +1,3 @@
+local set = vim.opt_local
+
+set.shiftwidth = 2
diff --git a/.config/nvim-old/after/ftplugin/html.lua b/.config/nvim-old/after/ftplugin/html.lua
new file mode 100644
index 0000000..5b3770c
--- /dev/null
+++ b/.config/nvim-old/after/ftplugin/html.lua
@@ -0,0 +1,3 @@
+local set = vim.opt_local
+
+set.shiftwidth = 2
diff --git a/.config/nvim-old/after/ftplugin/javascript.lua b/.config/nvim-old/after/ftplugin/javascript.lua
new file mode 100644
index 0000000..5b3770c
--- /dev/null
+++ b/.config/nvim-old/after/ftplugin/javascript.lua
@@ -0,0 +1,3 @@
+local set = vim.opt_local
+
+set.shiftwidth = 2
diff --git a/.config/nvim-old/after/ftplugin/javascriptreact.lua b/.config/nvim-old/after/ftplugin/javascriptreact.lua
new file mode 100644
index 0000000..5b3770c
--- /dev/null
+++ b/.config/nvim-old/after/ftplugin/javascriptreact.lua
@@ -0,0 +1,3 @@
+local set = vim.opt_local
+
+set.shiftwidth = 2
diff --git a/.config/nvim-old/after/ftplugin/json.lua b/.config/nvim-old/after/ftplugin/json.lua
new file mode 100644
index 0000000..a38fed5
--- /dev/null
+++ b/.config/nvim-old/after/ftplugin/json.lua
@@ -0,0 +1,3 @@
+local set = vim.opt_local
+
+set.conceallevel = 0
diff --git a/.config/nvim-old/after/ftplugin/lua.lua b/.config/nvim-old/after/ftplugin/lua.lua
new file mode 100644
index 0000000..c0e2391
--- /dev/null
+++ b/.config/nvim-old/after/ftplugin/lua.lua
@@ -0,0 +1,5 @@
+local set = vim.opt_local
+
+set.shiftwidth = 2
+set.number = true
+set.relativenumber = true
diff --git a/.config/nvim-old/after/ftplugin/md.lua b/.config/nvim-old/after/ftplugin/md.lua
new file mode 100644
index 0000000..5b3770c
--- /dev/null
+++ b/.config/nvim-old/after/ftplugin/md.lua
@@ -0,0 +1,3 @@
+local set = vim.opt_local
+
+set.shiftwidth = 2
diff --git a/.config/nvim-old/after/ftplugin/rust.lua b/.config/nvim-old/after/ftplugin/rust.lua
new file mode 100644
index 0000000..4060c9d
--- /dev/null
+++ b/.config/nvim-old/after/ftplugin/rust.lua
@@ -0,0 +1,13 @@
+local bufnr = vim.api.nvim_get_current_buf()
+vim.keymap.set("n", "<leader>ca", function()
+ vim.cmd.RustLsp("codeAction") -- supports rust-analyzer's grouping
+ -- or vim.lsp.buf.codeAction() if you don't want grouping.
+end, { silent = true, buffer = bufnr })
+vim.keymap.set(
+ "n",
+ "K", -- Override Neovim's built-in hover keymap with rustaceanvim's hover actions
+ function()
+ vim.cmd.RustLsp({ "hover", "actions" })
+ end,
+ { silent = true, buffer = bufnr }
+)
diff --git a/.config/nvim-old/init.lua b/.config/nvim-old/init.lua
new file mode 100644
index 0000000..75ae3e9
--- /dev/null
+++ b/.config/nvim-old/init.lua
@@ -0,0 +1,5 @@
+vim.g.bullets_enable_in_empty_buffers = 0
+require("config.lazy")
+require("options")
+require("mappings")
+require("autocmds")
diff --git a/.config/nvim/lazy-lock.json b/.config/nvim-old/lazy-lock.json
index 2130986..2130986 100644
--- a/.config/nvim/lazy-lock.json
+++ b/.config/nvim-old/lazy-lock.json
diff --git a/.config/nvim/lua/autocmds.lua b/.config/nvim-old/lua/autocmds.lua
index 13f235c..13f235c 100644
--- a/.config/nvim/lua/autocmds.lua
+++ b/.config/nvim-old/lua/autocmds.lua
diff --git a/.config/nvim/lua/config/lazy.lua b/.config/nvim-old/lua/config/lazy.lua
index ba9b8f3..ba9b8f3 100644
--- a/.config/nvim/lua/config/lazy.lua
+++ b/.config/nvim-old/lua/config/lazy.lua
diff --git a/.config/nvim/lua/config/plugins/blink-cmp.lua b/.config/nvim-old/lua/config/plugins/blink-cmp.lua
index 9f622c7..9f622c7 100644
--- a/.config/nvim/lua/config/plugins/blink-cmp.lua
+++ b/.config/nvim-old/lua/config/plugins/blink-cmp.lua
diff --git a/.config/nvim/lua/config/plugins/colorscheme.lua b/.config/nvim-old/lua/config/plugins/colorscheme.lua
index ea130c7..ea130c7 100644
--- a/.config/nvim/lua/config/plugins/colorscheme.lua
+++ b/.config/nvim-old/lua/config/plugins/colorscheme.lua
diff --git a/.config/nvim/lua/config/plugins/conform.lua b/.config/nvim-old/lua/config/plugins/conform.lua
index 5747200..5747200 100644
--- a/.config/nvim/lua/config/plugins/conform.lua
+++ b/.config/nvim-old/lua/config/plugins/conform.lua
diff --git a/.config/nvim/lua/config/plugins/flash.lua b/.config/nvim-old/lua/config/plugins/flash.lua
index feec135..feec135 100644
--- a/.config/nvim/lua/config/plugins/flash.lua
+++ b/.config/nvim-old/lua/config/plugins/flash.lua
diff --git a/.config/nvim/lua/config/plugins/fzflua.lua b/.config/nvim-old/lua/config/plugins/fzflua.lua
index 8dfdeb3..8dfdeb3 100644
--- a/.config/nvim/lua/config/plugins/fzflua.lua
+++ b/.config/nvim-old/lua/config/plugins/fzflua.lua
diff --git a/.config/nvim/lua/config/plugins/gitsigns.lua b/.config/nvim-old/lua/config/plugins/gitsigns.lua
index 13c3b20..13c3b20 100644
--- a/.config/nvim/lua/config/plugins/gitsigns.lua
+++ b/.config/nvim-old/lua/config/plugins/gitsigns.lua
diff --git a/.config/nvim/lua/config/plugins/leetcode.lua b/.config/nvim-old/lua/config/plugins/leetcode.lua
index 920aba9..920aba9 100644
--- a/.config/nvim/lua/config/plugins/leetcode.lua
+++ b/.config/nvim-old/lua/config/plugins/leetcode.lua
diff --git a/.config/nvim/lua/config/plugins/lsp.lua b/.config/nvim-old/lua/config/plugins/lsp.lua
index eb812d2..eb812d2 100644
--- a/.config/nvim/lua/config/plugins/lsp.lua
+++ b/.config/nvim-old/lua/config/plugins/lsp.lua
diff --git a/.config/nvim/lua/config/plugins/lualine.lua b/.config/nvim-old/lua/config/plugins/lualine.lua
index 466d7b4..466d7b4 100644
--- a/.config/nvim/lua/config/plugins/lualine.lua
+++ b/.config/nvim-old/lua/config/plugins/lualine.lua
diff --git a/.config/nvim/lua/config/plugins/luasnip.lua b/.config/nvim-old/lua/config/plugins/luasnip.lua
index a051cee..a051cee 100644
--- a/.config/nvim/lua/config/plugins/luasnip.lua
+++ b/.config/nvim-old/lua/config/plugins/luasnip.lua
diff --git a/.config/nvim/lua/config/plugins/markdown.lua b/.config/nvim-old/lua/config/plugins/markdown.lua
index 223d3fb..223d3fb 100644
--- a/.config/nvim/lua/config/plugins/markdown.lua
+++ b/.config/nvim-old/lua/config/plugins/markdown.lua
diff --git a/.config/nvim/lua/config/plugins/mini.lua b/.config/nvim-old/lua/config/plugins/mini.lua
index fe6a3aa..fe6a3aa 100644
--- a/.config/nvim/lua/config/plugins/mini.lua
+++ b/.config/nvim-old/lua/config/plugins/mini.lua
diff --git a/.config/nvim/lua/config/plugins/neotree.lua b/.config/nvim-old/lua/config/plugins/neotree.lua
index 11a0a98..11a0a98 100644
--- a/.config/nvim/lua/config/plugins/neotree.lua
+++ b/.config/nvim-old/lua/config/plugins/neotree.lua
diff --git a/.config/nvim/lua/config/plugins/oil.lua b/.config/nvim-old/lua/config/plugins/oil.lua
index 555768f..555768f 100644
--- a/.config/nvim/lua/config/plugins/oil.lua
+++ b/.config/nvim-old/lua/config/plugins/oil.lua
diff --git a/.config/nvim/lua/config/plugins/rustacean.lua b/.config/nvim-old/lua/config/plugins/rustacean.lua
index 1187aad..1187aad 100644
--- a/.config/nvim/lua/config/plugins/rustacean.lua
+++ b/.config/nvim-old/lua/config/plugins/rustacean.lua
diff --git a/.config/nvim/lua/config/plugins/snacks.lua b/.config/nvim-old/lua/config/plugins/snacks.lua
index dd731dd..dd731dd 100644
--- a/.config/nvim/lua/config/plugins/snacks.lua
+++ b/.config/nvim-old/lua/config/plugins/snacks.lua
diff --git a/.config/nvim/lua/config/plugins/treesitter.lua b/.config/nvim-old/lua/config/plugins/treesitter.lua
index 3e866c5..3e866c5 100644
--- a/.config/nvim/lua/config/plugins/treesitter.lua
+++ b/.config/nvim-old/lua/config/plugins/treesitter.lua
diff --git a/.config/nvim/lua/config/plugins/typst.lua b/.config/nvim-old/lua/config/plugins/typst.lua
index 2443773..2443773 100644
--- a/.config/nvim/lua/config/plugins/typst.lua
+++ b/.config/nvim-old/lua/config/plugins/typst.lua
diff --git a/.config/nvim/lua/config/plugins/utils.lua b/.config/nvim-old/lua/config/plugins/utils.lua
index 273de1a..273de1a 100644
--- a/.config/nvim/lua/config/plugins/utils.lua
+++ b/.config/nvim-old/lua/config/plugins/utils.lua
diff --git a/.config/nvim/lua/config/plugins/uv.lua b/.config/nvim-old/lua/config/plugins/uv.lua
index 121921b..121921b 100644
--- a/.config/nvim/lua/config/plugins/uv.lua
+++ b/.config/nvim-old/lua/config/plugins/uv.lua
diff --git a/.config/nvim/lua/config/plugins/which-key.lua b/.config/nvim-old/lua/config/plugins/which-key.lua
index 9e97f9f..9e97f9f 100644
--- a/.config/nvim/lua/config/plugins/which-key.lua
+++ b/.config/nvim-old/lua/config/plugins/which-key.lua
diff --git a/.config/nvim/lua/config/snippets/all.lua b/.config/nvim-old/lua/config/snippets/all.lua
index e2a2ef1..e2a2ef1 100644
--- a/.config/nvim/lua/config/snippets/all.lua
+++ b/.config/nvim-old/lua/config/snippets/all.lua
diff --git a/.config/nvim/lua/mappings.lua b/.config/nvim-old/lua/mappings.lua
index 9f17f28..9f17f28 100644
--- a/.config/nvim/lua/mappings.lua
+++ b/.config/nvim-old/lua/mappings.lua
diff --git a/.config/nvim/lua/options.lua b/.config/nvim-old/lua/options.lua
index c61f4c9..c61f4c9 100644
--- a/.config/nvim/lua/options.lua
+++ b/.config/nvim-old/lua/options.lua
diff --git a/.config/nvim-old/nvim-pack-lock.json b/.config/nvim-old/nvim-pack-lock.json
new file mode 100644
index 0000000..9da8e87
--- /dev/null
+++ b/.config/nvim-old/nvim-pack-lock.json
@@ -0,0 +1,85 @@
+{
+ "plugins": {
+ "LuaSnip": {
+ "rev": "dae4f5aaa3574bd0c2b9dd20fb9542a02c10471c",
+ "src": "https://github.com/L3MON4D3/LuaSnip"
+ },
+ "alpha-nvim": {
+ "rev": "a9d8fb72213c8b461e791409e7feabb74eb6ce73",
+ "src": "https://github.com/goolord/alpha-nvim"
+ },
+ "blink.cmp": {
+ "rev": "4b18c32adef2898f95cdef6192cbd5796c1a332d",
+ "src": "https://github.com/saghen/blink.cmp",
+ "version": "1.0.0 - 2.0.0"
+ },
+ "efmls-configs-nvim": {
+ "rev": "2dd907fe0043b95a901a9aee814f17804aa4426d",
+ "src": "https://github.com/creativenull/efmls-configs-nvim"
+ },
+ "flash.nvim": {
+ "rev": "fcea7ff883235d9024dc41e638f164a450c14ca2",
+ "src": "https://github.com/folke/flash.nvim"
+ },
+ "fzf-lua": {
+ "rev": "b56cd2ffbce57bfd9133a645bd02cd86895a7e3f",
+ "src": "https://www.github.com/ibhagwan/fzf-lua"
+ },
+ "gitsigns.nvim": {
+ "rev": "9f3c6dd7868bcc116e9c1c1929ce063b978fa519",
+ "src": "https://www.github.com/lewis6991/gitsigns.nvim"
+ },
+ "leetcode.nvim": {
+ "rev": "fdd3f91800b3983e27bc9fcfb99cfa7293d7f11a",
+ "src": "https://github.com/kawre/leetcode.nvim"
+ },
+ "mason.nvim": {
+ "rev": "44d1e90e1f66e077268191e3ee9d2ac97cc18e65",
+ "src": "https://github.com/mason-org/mason.nvim"
+ },
+ "mini.nvim": {
+ "rev": "0098de999048af0539183d625c52d733318a441b",
+ "src": "https://www.github.com/echasnovski/mini.nvim"
+ },
+ "nord.nvim": {
+ "rev": "80c1e5321505aeb22b7a9f23eb82f1e193c12470",
+ "src": "https://github.com/shaunsingh/nord.nvim"
+ },
+ "nui.nvim": {
+ "rev": "de740991c12411b663994b2860f1a4fd0937c130",
+ "src": "https://github.com/MunifTanjim/nui.nvim"
+ },
+ "nvim-lspconfig": {
+ "rev": "ead0f5f342d8d323441e7d4b88f0fc436a81ad5f",
+ "src": "https://www.github.com/neovim/nvim-lspconfig"
+ },
+ "nvim-tree.lua": {
+ "rev": "c988e289428d9202b28ba27479647033c7dd2956",
+ "src": "https://www.github.com/nvim-tree/nvim-tree.lua"
+ },
+ "nvim-treesitter": {
+ "rev": "cb2cb74f3c3cbbcc17e79cada2060165d616d849",
+ "src": "https://github.com/nvim-treesitter/nvim-treesitter"
+ },
+ "oil.nvim": {
+ "rev": "0fcc83805ad11cf714a949c98c605ed717e0b83e",
+ "src": "https://github.com/stevearc/oil.nvim"
+ },
+ "outline.nvim": {
+ "rev": "ead1820d49c8e79ce89cab1c2c318981b695c9d2",
+ "src": "https://github.com/hedyhli/outline.nvim"
+ },
+ "plenary.nvim": {
+ "rev": "b9fd5226c2f76c951fc8ed5923d85e4de065e509",
+ "src": "https://github.com/nvim-lua/plenary.nvim"
+ },
+ "rustaceanvim": {
+ "rev": "d50597d482a6f44ddfc54d1af2f69f052053b4de",
+ "src": "https://github.com/mrcjkb/rustaceanvim"
+ },
+ "which-key.nvim": {
+ "rev": "3aab2147e74890957785941f0c1ad87d0a44c15a",
+ "src": "https://github.com/folke/which-key.nvim"
+ }
+ }
+} \ No newline at end of file
diff --git a/.config/nvim/init.lua b/.config/nvim/init.lua
index 75ae3e9..fb59850 100644
--- a/.config/nvim/init.lua
+++ b/.config/nvim/init.lua
@@ -1,5 +1,1136 @@
-vim.g.bullets_enable_in_empty_buffers = 0
-require("config.lazy")
-require("options")
-require("mappings")
-require("autocmds")
+_G._startup_time = vim.loop.hrtime()
+-- ============================================================================
+-- OPTIONS
+-- ============================================================================
+vim.opt.termguicolors = true
+vim.opt.number = true -- line number
+vim.opt.relativenumber = true -- relative line numbers
+vim.opt.cursorline = true -- highlight current line
+vim.opt.wrap = false -- do not wrap lines by default
+vim.opt.scrolloff = 8 -- keep 8 lines above/below cursor
+vim.opt.sidescrolloff = 8 -- keep 8 lines to left/right of cursor
+
+vim.opt.tabstop = 4 -- tabwidth
+vim.opt.shiftwidth = 4 -- indent width
+vim.opt.softtabstop = 4 -- soft tab stop not tabs on tab/backspace
+vim.opt.expandtab = true -- use spaces instead of tabs
+vim.opt.smartindent = true -- smart auto-indent
+vim.opt.autoindent = true -- copy indent from current line
+
+vim.opt.ignorecase = true -- case insensitive search
+vim.opt.smartcase = true -- case sensitive if uppercase in string
+vim.opt.hlsearch = true -- highlight search matches
+vim.opt.incsearch = true -- show matches as you type
+
+vim.opt.signcolumn = "yes" -- always show a sign column
+vim.opt.showmatch = true -- highlights matching brackets
+vim.opt.cmdheight = 1 -- single line command line
+vim.opt.completeopt = "menuone,noinsert,noselect" -- completion options
+vim.opt.showmode = false -- do not show the mode, instead have it in statusline
+vim.opt.pumheight = 10 -- popup menu height
+vim.opt.pumblend = 10 -- popup menu transparency
+vim.opt.winblend = 0 -- floating window transparency
+vim.opt.conceallevel = 0 -- do not hide markup
+vim.opt.concealcursor = "" -- do not hide cursorline in markup
+vim.opt.lazyredraw = true -- do not redraw during macros
+vim.opt.synmaxcol = 300 -- syntax highlighting limit
+vim.opt.fillchars = { eob = " " } -- hide "~" on empty lines
+
+local undodir = vim.fn.expand("~/.vim/undodir")
+if
+ vim.fn.isdirectory(undodir) == 0 -- create undodir if nonexistent
+then
+ vim.fn.mkdir(undodir, "p")
+end
+
+vim.opt.backup = false -- do not create a backup file
+vim.opt.writebackup = false -- do not write to a backup file
+vim.opt.swapfile = false -- do not create a swapfile
+vim.opt.undofile = true -- do create an undo file
+vim.opt.undodir = undodir -- set the undo directory
+vim.opt.updatetime = 300 -- faster completion
+vim.opt.timeoutlen = 500 -- timeout duration
+vim.opt.ttimeoutlen = 0 -- key code timeout
+vim.opt.autoread = true -- auto-reload changes if outside of neovim
+vim.opt.autowrite = false -- do not auto-save
+
+vim.opt.hidden = true -- allow hidden buffers
+vim.opt.errorbells = false -- no error sounds
+vim.opt.backspace = "indent,eol,start" -- better backspace behaviour
+vim.opt.autochdir = false -- do not autochange directories
+vim.opt.iskeyword:append("-") -- include - in words
+vim.opt.path:append("**") -- include subdirs in search
+vim.opt.selection = "inclusive" -- include last char in selection
+vim.opt.mouse = "a" -- enable mouse support
+vim.opt.clipboard:append("unnamedplus") -- use system clipboard
+vim.opt.modifiable = true -- allow buffer modifications
+vim.opt.encoding = "utf-8" -- set encoding
+vim.opt.listchars = { tab = "» ", trail = "·", nbsp = "␣" }
+
+-- vim.opt.guicursor =
+-- "n-v-c:block,i-ci-ve:block,r-cr:hor20,o:hor50,a:blinkwait700-blinkoff400-blinkon250-Cursor/lCursor,sm:block-blinkwait175-blinkoff150-blinkon175" -- cursor blinking and settings
+
+-- Folding: requires treesitter available at runtime; safe fallback if not
+vim.opt.foldmethod = "expr" -- use expression for folding
+vim.opt.foldexpr = "v:lua.vim.treesitter.foldexpr()" -- use treesitter for folding
+vim.opt.foldlevel = 99 -- start with all folds open
+
+vim.opt.splitbelow = true -- horizontal splits go below
+vim.opt.splitright = true -- vertical splits go right
+
+vim.opt.wildmenu = true -- tab completion
+vim.opt.wildmode = "longest:full,full" -- complete longest common match, full completion list, cycle through with Tab
+vim.opt.diffopt:append("linematch:60") -- improve diff display
+vim.opt.redrawtime = 10000 -- increase neovim redraw tolerance
+vim.opt.maxmempattern = 20000 -- increase max memory
+-- ============================================================================
+-- STATUSLINE
+-- ============================================================================
+
+-- Git branch function with caching and Nerd Font icon
+local cached_branch = ""
+local last_check = 0
+local function git_branch()
+ local now = vim.loop.now()
+ if now - last_check > 5000 then -- Check every 5 seconds
+ cached_branch = vim.fn.system("git branch --show-current 2>/dev/null | tr -d '\n'")
+ last_check = now
+ end
+ if cached_branch ~= "" then
+ return "\u{e725} " .. cached_branch .. " " -- nf-dev-git_branch
+ end
+ return ""
+end
+
+-- File type with Nerd Font icon
+local function file_type()
+ local ft = vim.bo.filetype
+ local icons = {
+ lua = "\u{e620} ", -- nf-dev-lua
+ python = "\u{e73c} ", -- nf-dev-python
+ javascript = "\u{e74e} ", -- nf-dev-javascript
+ typescript = "\u{e628} ", -- nf-dev-typescript
+ javascriptreact = "\u{e7ba} ",
+ typescriptreact = "\u{e7ba} ",
+ html = "\u{e736} ", -- nf-dev-html5
+ css = "\u{e749} ", -- nf-dev-css3
+ scss = "\u{e749} ",
+ json = "\u{e60b} ", -- nf-dev-json
+ markdown = "\u{e73e} ", -- nf-dev-markdown
+ vim = "\u{e62b} ", -- nf-dev-vim
+ sh = "\u{f489} ", -- nf-oct-terminal
+ bash = "\u{f489} ",
+ zsh = "\u{f489} ",
+ rust = "\u{e7a8} ", -- nf-dev-rust
+ go = "\u{e724} ", -- nf-dev-go
+ c = "\u{e61e} ", -- nf-dev-c
+ cpp = "\u{e61d} ", -- nf-dev-cplusplus
+ java = "\u{e738} ", -- nf-dev-java
+ php = "\u{e73d} ", -- nf-dev-php
+ ruby = "\u{e739} ", -- nf-dev-ruby
+ swift = "\u{e755} ", -- nf-dev-swift
+ kotlin = "\u{e634} ",
+ dart = "\u{e798} ",
+ elixir = "\u{e62d} ",
+ haskell = "\u{e777} ",
+ sql = "\u{e706} ",
+ yaml = "\u{f481} ",
+ toml = "\u{e615} ",
+ xml = "\u{f05c} ",
+ dockerfile = "\u{f308} ", -- nf-linux-docker
+ gitcommit = "\u{f418} ", -- nf-oct-git_commit
+ gitconfig = "\u{f1d3} ", -- nf-fa-git
+ vue = "\u{fd42} ", -- nf-md-vuejs
+ svelte = "\u{e697} ",
+ astro = "\u{e628} ",
+ }
+
+ if ft == "" then
+ return " \u{f15b} " -- nf-fa-file_o
+ end
+
+ return ((icons[ft] or " \u{f15b} ") .. ft)
+end
+
+-- File size with Nerd Font icon
+local function file_size()
+ local size = vim.fn.getfsize(vim.fn.expand("%"))
+ if size < 0 then
+ return ""
+ end
+ local size_str
+ if size < 1024 then
+ size_str = size .. "B"
+ elseif size < 1024 * 1024 then
+ size_str = string.format("%.1fK", size / 1024)
+ else
+ size_str = string.format("%.1fM", size / 1024 / 1024)
+ end
+ return " \u{f016} " .. size_str .. " " -- nf-fa-file_o
+end
+
+-- Mode indicators with Nerd Font icons
+local function mode_icon()
+ local mode = vim.fn.mode()
+ local modes = {
+ n = " \u{f121} NORMAL",
+ i = " \u{f11c} INSERT",
+ v = " \u{f0168} VISUAL",
+ V = " \u{f0168} V-LINE",
+ ["\22"] = " \u{f0168} V-BLOCK",
+ c = " \u{f120} COMMAND",
+ s = " \u{f0c5} SELECT",
+ S = " \u{f0c5} S-LINE",
+ ["\19"] = " \u{f0c5} S-BLOCK",
+ R = " \u{f044} REPLACE",
+ r = " \u{f044} REPLACE",
+ ["!"] = " \u{f489} SHELL",
+ t = " \u{f120} TERMINAL",
+ }
+ return modes[mode] or (" \u{f059} " .. mode)
+end
+
+_G.mode_icon = mode_icon
+_G.git_branch = git_branch
+_G.file_type = file_type
+_G.file_size = file_size
+
+vim.cmd([[
+ highlight StatusLineBold gui=bold cterm=bold
+]])
+
+-- Function to change statusline based on window focus
+local function setup_dynamic_statusline()
+ vim.api.nvim_create_autocmd({ "WinEnter", "BufEnter" }, {
+ callback = function()
+ vim.opt_local.statusline = table.concat({
+ " ",
+ "%#StatusLineBold#",
+ "%{v:lua.mode_icon()}",
+ "%#StatusLine#",
+ " | %f %h%m%r", -- nf-pl-left_hard_divider
+ " %{v:lua.git_branch()}",
+ " | ", -- nf-pl-left_hard_divider
+ "%{v:lua.file_type()}",
+ " | ", -- nf-pl-left_hard_divider
+ "%{v:lua.file_size()}",
+ "%=", -- Right-align everything after this
+ "%l:%c %P ", -- nf-fa-clock_o for line/col
+ })
+ end,
+ })
+ vim.api.nvim_set_hl(0, "StatusLineBold", { bold = true })
+
+ vim.api.nvim_create_autocmd({ "WinLeave", "BufLeave" }, {
+ callback = function()
+ vim.opt_local.statusline = " %f %h%m%r | %{v:lua.file_type()} %= %l:%c %P "
+ end,
+ })
+end
+
+setup_dynamic_statusline()
+
+-- ============================================================================
+-- KEYMAPS
+-- ============================================================================
+vim.g.mapleader = " " -- space for leader
+vim.g.maplocalleader = " " -- space for localleader
+
+-- better movement in wrapped text
+vim.keymap.set("n", "j", function()
+ return vim.v.count == 0 and "gj" or "j"
+end, { expr = true, silent = true, desc = "Down (wrap-aware)" })
+vim.keymap.set("n", "k", function()
+ return vim.v.count == 0 and "gk" or "k"
+end, { expr = true, silent = true, desc = "Up (wrap-aware)" })
+
+vim.keymap.set("n", "<Esc>", ":nohlsearch<CR>", { desc = "Clear search highlights", silent = true })
+
+vim.keymap.set("n", "n", "nzzzv", { desc = "Next search result (centered)" })
+vim.keymap.set("n", "N", "Nzzzv", { desc = "Previous search result (centered)" })
+vim.keymap.set("n", "<C-d>", "<C-d>zz", { desc = "Half page down (centered)" })
+vim.keymap.set("n", "<C-u>", "<C-u>zz", { desc = "Half page up (centered)" })
+
+vim.keymap.set("n", "<C-h>", "<C-w>h", { desc = "Move to left window" })
+vim.keymap.set("n", "<C-j>", "<C-w>j", { desc = "Move to bottom window" })
+vim.keymap.set("n", "<C-k>", "<C-w>k", { desc = "Move to top window" })
+vim.keymap.set("n", "<C-l>", "<C-w>l", { desc = "Move to right window" })
+
+-- vim.keymap.set("n", "<leader>sv", ":vsplit<CR>", { desc = "Split window vertically" })
+-- vim.keymap.set("n", "<leader>sh", ":split<CR>", { desc = "Split window horizontally" })
+-- vim.keymap.set("n", "<C-Up>", ":resize +2<CR>", { desc = "Increase window height" })
+-- vim.keymap.set("n", "<C-Down>", ":resize -2<CR>", { desc = "Decrease window height" })
+-- vim.keymap.set("n", "<C-Left>", ":vertical resize -2<CR>", { desc = "Decrease window width" })
+-- vim.keymap.set("n", "<C-Right>", ":vertical resize +2<CR>", { desc = "Increase window width" })
+
+vim.keymap.set("n", "<A-j>", ":m .+1<CR>==", { desc = "Move line down" })
+vim.keymap.set("n", "<A-k>", ":m .-2<CR>==", { desc = "Move line up" })
+vim.keymap.set("v", "<A-j>", ":m '>+1<CR>gv=gv", { desc = "Move selection down" })
+vim.keymap.set("v", "<A-k>", ":m '<-2<CR>gv=gv", { desc = "Move selection up" })
+
+vim.keymap.set("v", "<", "<gv", { desc = "Indent left and reselect" })
+vim.keymap.set("v", ">", ">gv", { desc = "Indent right and reselect" })
+
+vim.keymap.set("n", "J", "mzJ`z", { desc = "Join lines and keep cursor position" })
+
+vim.keymap.set("n", "x", '"_x', { noremap = true, silent = true })
+vim.keymap.set("x", "x", '"_x', { noremap = true, silent = true })
+vim.keymap.set("v", "x", '"_x', { noremap = true, silent = true })
+vim.keymap.set("n", "c", '"_c')
+vim.keymap.set("n", "C", '"_C')
+vim.keymap.set("n", "cc", '"_cc')
+vim.keymap.set("x", "c", '"_c')
+
+vim.keymap.set("n", "<leader>pa", function() -- show file path
+ local path = vim.fn.expand("%:p")
+ vim.fn.setreg("+", path)
+ print("file:", path)
+end, { desc = "Copy full file path" })
+
+vim.keymap.set("n", "<leader>td", function()
+ vim.diagnostic.enable(not vim.diagnostic.is_enabled())
+end, { desc = "Toggle diagnostics" })
+vim.keymap.set("n", "<leader>tw", function()
+ vim.diagnostic.enable(not vim.diagnostic.is_enabled())
+ vim.wo.wrap = not vim.wo.wrap
+end, { desc = "Toggle wrap" })
+
+-- ============================================================================
+-- AUTOCMDS
+-- ============================================================================
+
+local augroup = vim.api.nvim_create_augroup("UserConfig", { clear = true })
+
+-- Format on save (ONLY real file buffers, ONLY when efm is attached)
+vim.api.nvim_create_autocmd("BufWritePre", {
+ group = augroup,
+ pattern = {
+ "*.lua",
+ "*.py",
+ "*.go",
+ "*.json",
+ "*.sh",
+ "*.bash",
+ "*.zsh",
+ "*.c",
+ "*.cpp",
+ "*.h",
+ "*.hpp",
+ "*.rs",
+ },
+ callback = function(args)
+ -- avoid formatting non-file buffers (helps prevent weird write prompts)
+ if vim.bo[args.buf].buftype ~= "" then
+ return
+ end
+ if not vim.bo[args.buf].modifiable then
+ return
+ end
+ if vim.api.nvim_buf_get_name(args.buf) == "" then
+ return
+ end
+
+ local has_efm = false
+ for _, c in ipairs(vim.lsp.get_clients({ bufnr = args.buf })) do
+ if c.name == "efm" then
+ has_efm = true
+ break
+ end
+ end
+ if not has_efm then
+ return
+ end
+
+ pcall(vim.lsp.buf.format, {
+ bufnr = args.buf,
+ timeout_ms = 2000,
+ filter = function(c)
+ return c.name == "efm"
+ end,
+ })
+ end,
+})
+
+-- highlight yanked text
+vim.api.nvim_create_autocmd("TextYankPost", {
+ group = augroup,
+ callback = function()
+ vim.hl.on_yank()
+ end,
+})
+
+-- return to last cursor position
+vim.api.nvim_create_autocmd("BufReadPost", {
+ group = augroup,
+ desc = "Restore last cursor position",
+ callback = function()
+ if vim.o.diff then -- except in diff mode
+ return
+ end
+
+ local last_pos = vim.api.nvim_buf_get_mark(0, '"') -- {line, col}
+ local last_line = vim.api.nvim_buf_line_count(0)
+
+ local row = last_pos[1]
+ if row < 1 or row > last_line then
+ return
+ end
+
+ pcall(vim.api.nvim_win_set_cursor, 0, last_pos)
+ end,
+})
+
+-- wrap, linebreak and spellcheck on markdown and text files
+vim.api.nvim_create_autocmd("FileType", {
+ group = augroup,
+ pattern = { "markdown", "text", "gitcommit" },
+ callback = function()
+ vim.opt_local.wrap = true
+ vim.opt_local.linebreak = true
+ vim.opt_local.spell = true
+ end,
+})
+-- ============================================================================
+-- PLUGINS (vim.pack)
+-- ============================================================================
+vim.pack.add({
+ "https://www.github.com/lewis6991/gitsigns.nvim",
+ "https://www.github.com/echasnovski/mini.nvim",
+ "https://www.github.com/ibhagwan/fzf-lua",
+ "https://www.github.com/nvim-tree/nvim-tree.lua",
+ {
+ src = "https://github.com/nvim-treesitter/nvim-treesitter",
+ branch = "main",
+ build = ":TSUpdate",
+ },
+ -- Language Server Protocols
+ "https://www.github.com/neovim/nvim-lspconfig",
+ "https://github.com/mason-org/mason.nvim",
+ "https://github.com/creativenull/efmls-configs-nvim",
+ {
+ src = "https://github.com/saghen/blink.cmp",
+ version = vim.version.range("1.*"),
+ },
+ "https://github.com/L3MON4D3/LuaSnip",
+ "https://github.com/shaunsingh/nord.nvim",
+ "https://github.com/kawre/leetcode.nvim",
+ "https://github.com/nvim-lua/plenary.nvim",
+ "https://github.com/MunifTanjim/nui.nvim",
+ "https://github.com/mrcjkb/rustaceanvim",
+ "https://github.com/folke/which-key.nvim",
+ "https://github.com/hedyhli/outline.nvim",
+ "https://github.com/stevearc/oil.nvim",
+ "https://github.com/folke/flash.nvim",
+ "https://github.com/goolord/alpha-nvim",
+})
+
+local function packadd(name)
+ vim.cmd("packadd " .. name)
+end
+packadd("nvim-treesitter")
+packadd("gitsigns.nvim")
+packadd("mini.nvim")
+packadd("fzf-lua")
+packadd("nvim-tree.lua")
+-- LSP
+packadd("nvim-lspconfig")
+packadd("mason.nvim")
+packadd("efmls-configs-nvim")
+packadd("blink.cmp")
+packadd("LuaSnip")
+packadd("plenary.nvim")
+packadd("nui.nvim")
+packadd("rustaceanvim")
+
+-- ============================================================================
+-- TRANSPARENCY
+-- ============================================================================
+
+local function set_transparent() -- set UI component to transparent
+ local groups = {
+ "Normal",
+ "NormalNC",
+ "EndOfBuffer",
+ "NormalFloat",
+ "FloatBorder",
+ "SignColumn",
+ "StatusLine",
+ "StatusLineNC",
+ "TabLine",
+ "TabLineFill",
+ "TabLineSel",
+ "ColorColumn",
+ }
+ for _, g in ipairs(groups) do
+ vim.api.nvim_set_hl(0, g, { bg = "none" })
+ end
+ vim.api.nvim_set_hl(0, "TabLineFill", { bg = "none", fg = "#767676" })
+end
+
+set_transparent()
+vim.cmd.colorscheme("nord")
+vim.cmd.hi("Comment gui=none")
+-- Set transparency
+vim.cmd("hi Normal guibg=NONE ctermbg=NONE")
+vim.cmd("hi NormalFloat guibg=NONE ctermbg=NONE")
+vim.cmd("hi SignColumn guibg=NONE")
+vim.cmd("hi FloatBorder guibg=NONE")
+vim.cmd("hi CursorLine guibg=NONE")
+
+-- ============================================================================
+-- PLUGIN CONFIGS
+-- ============================================================================
+
+-- ALPHA
+local setup_alpha = function()
+ local alpha = require("alpha")
+ local dashboard = require("alpha.themes.dashboard")
+ dashboard.section.header.val = {
+ [[ ]],
+ [[ ]],
+ [[ ]],
+ [[ ]],
+ [[ ]],
+ [[ ]],
+ [[ __ ]],
+ [[ ___ ___ ___ __ __ /\_\ ___ ___ ]],
+ [[ / _ `\ / __`\ / __`\/\ \/\ \\/\ \ / __` __`\ ]],
+ [[/\ \/\ \/\ __//\ \_\ \ \ \_/ |\ \ \/\ \/\ \/\ \ ]],
+ [[\ \_\ \_\ \____\ \____/\ \___/ \ \_\ \_\ \_\ \_\]],
+ [[ \/_/\/_/\/____/\/___/ \/__/ \/_/\/_/\/_/\/_/]],
+ }
+
+ dashboard.section.buttons.val = {
+ dashboard.button("e", " New file", ":ene <BAR> startinsert <CR>"),
+ dashboard.button("s", " Find file ", ":FzfLua files<CR>"),
+ dashboard.button("g", " Grep ", ":FzfLua live_grep<CR>"),
+ dashboard.button("q", " Quit", ":qa<CR>"),
+ }
+ local elapsed_ms = (vim.loop.hrtime() - _G._startup_time) / 1e6
+
+ dashboard.section.footer.val = {
+ ("Startup: %.2f ms"):format(elapsed_ms),
+ }
+
+ dashboard.config.opts.noautocmd = true
+
+ alpha.setup(dashboard.config)
+end
+
+setup_alpha()
+
+-- FLASH
+require("flash").setup({
+ modes = {
+ search = { enabled = false },
+ char = { enabled = false },
+ treesitter = { enabled = false },
+ remote = { enabled = false },
+ },
+})
+vim.keymap.set({ "n", "x", "o" }, "s", function()
+ require("flash").jump()
+end, { desc = "Flash" })
+
+vim.keymap.set({ "n", "x", "o" }, "R", function()
+ require("flash").treesitter()
+end, { desc = "Flash Treesitter" })
+
+vim.keymap.set("o", "r", function()
+ require("flash").remote()
+end, { desc = "Remote Flash" })
+
+-- OIL
+require("oil").setup({
+ default_file_explorer = true,
+ keymaps = {
+ ["l"] = "actions.select",
+ ["h"] = "actions.parent",
+ ["<CR>"] = "actions.select",
+ ["<C-s>"] = nil,
+ ["<C-h>"] = nil,
+ ["<C-l>"] = nil,
+ },
+ delete_to_trash = true,
+ view_options = {
+ show_hidden = true,
+ },
+ skip_confirm_for_simple_edits = true,
+ float = {
+ max_width = 80,
+ max_height = 30,
+ override = function(conf)
+ return conf
+ end,
+ },
+})
+vim.keymap.set("n", "-", "<CMD>Oil<CR>", { desc = "Open parent directory" })
+
+vim.api.nvim_create_autocmd("FileType", {
+ pattern = "oil",
+ callback = function()
+ vim.opt_local.cursorline = true
+ end,
+})
+
+-- OUTLINE
+require("outline").setup({})
+
+-- TREESITTER
+local setup_treesitter = function()
+ local treesitter = require("nvim-treesitter")
+ treesitter.setup({})
+ local ensure_installed = {
+ "vim",
+ "vimdoc",
+ "rust",
+ "c",
+ "cpp",
+ "go",
+ "json",
+ "lua",
+ "markdown",
+ "python",
+ "bash",
+ "lua",
+ "python",
+ }
+
+ local config = require("nvim-treesitter.config")
+
+ local already_installed = config.get_installed()
+ local parsers_to_install = {}
+
+ for _, parser in ipairs(ensure_installed) do
+ if not vim.tbl_contains(already_installed, parser) then
+ table.insert(parsers_to_install, parser)
+ end
+ end
+
+ if #parsers_to_install > 0 then
+ treesitter.install(parsers_to_install)
+ end
+
+ local group = vim.api.nvim_create_augroup("TreeSitterConfig", { clear = true })
+ vim.api.nvim_create_autocmd("FileType", {
+ group = group,
+ callback = function(args)
+ if vim.list_contains(treesitter.get_installed(), vim.treesitter.language.get_lang(args.match)) then
+ vim.treesitter.start(args.buf)
+ end
+ end,
+ })
+end
+
+setup_treesitter()
+
+-- NVIM-TREE
+
+require("nvim-tree").setup({
+ view = {
+ side = "right",
+ width = 35,
+ },
+ filters = {
+ dotfiles = false,
+ },
+ renderer = {
+ group_empty = true,
+ },
+})
+vim.keymap.set("n", "<leader>e", function()
+ require("nvim-tree.api").tree.toggle()
+end, { desc = "Toggle NvimTree" })
+
+vim.api.nvim_set_hl(0, "NvimTreeNormalNC", { bg = "none" })
+vim.api.nvim_set_hl(0, "SignColumn", { bg = "none" })
+vim.api.nvim_set_hl(0, "NvimTreeSignColumn", { bg = "none" })
+vim.api.nvim_set_hl(0, "NvimTreeNormal", { bg = "none" })
+vim.api.nvim_set_hl(0, "NvimTreeWinSeparator", { fg = "#2a2a2a", bg = "none" })
+vim.api.nvim_set_hl(0, "NvimTreeEndOfBuffer", { bg = "none" })
+
+-- WHICH-KEY
+require("which-key").setup({
+ win = {
+ wo = {
+ winblend = 0,
+ },
+ },
+ preset = "helix",
+ icons = {
+ rules = false,
+ },
+ delay = 500,
+ -- spec = {
+ -- { "<leader>c", group = "Code", mode = { "n", "x" } },
+ -- { "<leader>d", group = "Document" },
+ -- { "<leader>g", group = "Git" },
+ -- { "<leader>m", group = "Marks" },
+ -- { "<leader>r", group = "Rename" },
+ -- { "<leader>s", group = "Search" },
+ -- { "<leader>t", group = "Toggle" },
+ -- { "<leader>w", group = "Workspace" },
+ -- { "<leader>l", group = "LSP" },
+ -- },
+})
+
+-- NOTIFICATION HISTORY
+vim.keymap.set("n", "<leader>n", function()
+ local notify = require("mini.notify")
+
+ local history = notify.get_all and notify.get_all() or {}
+
+ local lines = {}
+
+ for _, item in ipairs(history) do
+ local time = item.time and os.date("%H:%M:%S", item.time) or ""
+ table.insert(lines, time .. " | " .. (item.msg or ""))
+ end
+
+ local buf = vim.api.nvim_create_buf(false, true)
+ vim.api.nvim_buf_set_lines(buf, 0, -1, false, lines)
+
+ local width = math.floor(vim.o.columns * 0.7)
+ local height = math.floor(vim.o.lines * 0.7)
+
+ local win = vim.api.nvim_open_win(buf, true, {
+ relative = "editor",
+ width = width,
+ height = height,
+ row = math.floor((vim.o.lines - height) / 2),
+ col = math.floor((vim.o.columns - width) / 2),
+ style = "minimal",
+ border = "rounded",
+ })
+
+ vim.bo[buf].buftype = "nofile"
+ vim.bo[buf].swapfile = false
+
+ vim.keymap.set("n", "q", function()
+ if vim.api.nvim_win_is_valid(win) then
+ vim.api.nvim_win_close(win, true)
+ end
+ if vim.api.nvim_buf_is_valid(buf) then
+ vim.api.nvim_buf_delete(buf, { force = true })
+ end
+ end, { buffer = buf, silent = true })
+end, { desc = "Show notification history" })
+
+-- FZF-LUA
+
+require("fzf-lua").setup({
+ keymap = {
+ builtin = {
+ ["<S-j>"] = "preview-page-down",
+ ["<S-k>"] = "preview-page-up",
+ },
+ },
+ winopts = {
+ row = 1,
+ col = 0,
+ width = 1,
+ height = 0.4,
+ title_pos = "left",
+ preview = {
+ layout = "horizontal",
+ title_pos = "right",
+ },
+ },
+})
+
+vim.keymap.set("n", "<leader>s", function()
+ require("fzf-lua").files()
+end, { desc = "FZF Files" })
+vim.keymap.set("n", "<leader>/", function()
+ require("fzf-lua").live_grep()
+end, { desc = "FZF Live Grep" })
+vim.keymap.set("n", "<leader><leader>", function()
+ require("fzf-lua").buffers()
+end, { desc = "FZF Buffers" })
+vim.keymap.set("n", "<leader>fh", function()
+ require("fzf-lua").help_tags()
+end, { desc = "FZF Help Tags" })
+vim.keymap.set("n", "<leader>fx", function()
+ require("fzf-lua").diagnostics_document()
+end, { desc = "FZF Diagnostics Document" })
+vim.keymap.set("n", "<leader>fX", function()
+ require("fzf-lua").diagnostics_workspace()
+end, { desc = "FZF Diagnostics Workspace" })
+
+-- MINI
+require("mini.surround").setup({})
+require("mini.pairs").setup({})
+require("mini.ai").setup({})
+require("mini.comment").setup({})
+local MiniNotify = require("mini.notify")
+
+MiniNotify.setup({
+ window = {
+ winblend = 0,
+ },
+})
+
+vim.notify = MiniNotify.make_notify({
+ ERROR = { duration = 4000 },
+ WARN = { duration = 3000 },
+ INFO = { duration = 2000 },
+ DEBUG = { duration = 0 },
+ TRACE = { duration = 0 },
+})
+require("mini.icons").setup({})
+
+require("gitsigns").setup({
+ signs = {
+ add = { text = "\u{2590}" }, -- ▏
+ change = { text = "\u{2590}" }, -- ▐
+ delete = { text = "\u{2590}" }, -- ◦
+ topdelete = { text = "\u{25e6}" }, -- ◦
+ changedelete = { text = "\u{25cf}" }, -- ●
+ untracked = { text = "\u{25cb}" }, -- ○
+ },
+ signcolumn = true,
+ current_line_blame = false,
+})
+
+-- MASON
+require("mason").setup({})
+
+-- GIT
+vim.keymap.set("n", "]h", function()
+ require("gitsigns").next_hunk()
+end, { desc = "Next git hunk" })
+vim.keymap.set("n", "[h", function()
+ require("gitsigns").prev_hunk()
+end, { desc = "Previous git hunk" })
+vim.keymap.set("n", "<leader>hs", function()
+ require("gitsigns").stage_hunk()
+end, { desc = "Stage hunk" })
+vim.keymap.set("n", "<leader>hr", function()
+ require("gitsigns").reset_hunk()
+end, { desc = "Reset hunk" })
+vim.keymap.set("n", "<leader>hp", function()
+ require("gitsigns").preview_hunk()
+end, { desc = "Preview hunk" })
+vim.keymap.set("n", "<leader>hb", function()
+ require("gitsigns").blame_line({ full = true })
+end, { desc = "Blame line" })
+vim.keymap.set("n", "<leader>hB", function()
+ require("gitsigns").toggle_current_line_blame()
+end, { desc = "Toggle inline blame" })
+vim.keymap.set("n", "<leader>hd", function()
+ require("gitsigns").diffthis()
+end, { desc = "Diff this" })
+
+-- LEET CODE
+require("leetcode").setup({
+ lang = "rust",
+ storage = {
+ home = vim.fn.expand("~/leetcode"),
+ cache = vim.fn.stdpath("cache") .. "/leetcode",
+ },
+ image_support = false,
+})
+
+-- ============================================================================
+-- LSP, Linting, Formatting & Completion
+-- ============================================================================
+local diagnostic_signs = {
+ Error = " ",
+ Warn = " ",
+ Hint = "",
+ Info = "",
+}
+
+vim.diagnostic.config({
+ virtual_text = { prefix = "●", spacing = 4 },
+ signs = {
+ text = {
+ [vim.diagnostic.severity.ERROR] = diagnostic_signs.Error,
+ [vim.diagnostic.severity.WARN] = diagnostic_signs.Warn,
+ [vim.diagnostic.severity.INFO] = diagnostic_signs.Info,
+ [vim.diagnostic.severity.HINT] = diagnostic_signs.Hint,
+ },
+ },
+ underline = true,
+ update_in_insert = false,
+ severity_sort = true,
+ float = {
+ border = "rounded",
+ source = "always",
+ header = "",
+ prefix = "",
+ focusable = false,
+ style = "minimal",
+ },
+})
+
+do
+ local orig = vim.lsp.util.open_floating_preview
+ function vim.lsp.util.open_floating_preview(contents, syntax, opts, ...)
+ opts = opts or {}
+ opts.border = opts.border or "rounded"
+ return orig(contents, syntax, opts, ...)
+ end
+end
+
+local function lsp_on_attach(ev)
+ local client = vim.lsp.get_client_by_id(ev.data.client_id)
+ if not client then
+ return
+ end
+
+ local bufnr = ev.buf
+ local opts = { noremap = true, silent = true, buffer = bufnr }
+
+ vim.keymap.set("n", "<leader>gd", function()
+ require("fzf-lua").lsp_definitions({ jump_to_single_result = true })
+ end, opts)
+
+ vim.keymap.set("n", "<leader>gD", vim.lsp.buf.definition, opts)
+
+ vim.keymap.set("n", "<leader>gS", function()
+ vim.cmd("vsplit")
+ vim.lsp.buf.definition()
+ end, opts)
+
+ vim.keymap.set("n", "<leader>ca", vim.lsp.buf.code_action, opts)
+ vim.keymap.set("n", "<leader>rn", vim.lsp.buf.rename, opts)
+
+ vim.keymap.set("n", "<leader>D", function()
+ vim.diagnostic.open_float({ scope = "line" })
+ end, opts)
+ vim.keymap.set("n", "<leader>d", function()
+ vim.diagnostic.open_float({ scope = "cursor" })
+ end, opts)
+ vim.keymap.set("n", "<leader>nd", function()
+ vim.diagnostic.jump({ count = 1 })
+ end, opts)
+
+ vim.keymap.set("n", "<leader>pd", function()
+ vim.diagnostic.jump({ count = -1 })
+ end, opts)
+
+ vim.keymap.set("n", "K", vim.lsp.buf.hover, opts)
+
+ vim.keymap.set("n", "<leader>fd", function()
+ require("fzf-lua").lsp_definitions({ jump_to_single_result = true })
+ end, opts)
+ vim.keymap.set("n", "<leader>fr", function()
+ require("fzf-lua").lsp_references()
+ end, opts)
+ vim.keymap.set("n", "<leader>ft", function()
+ require("fzf-lua").lsp_typedefs()
+ end, opts)
+ vim.keymap.set("n", "<leader>fs", function()
+ require("fzf-lua").lsp_document_symbols()
+ end, opts)
+ vim.keymap.set("n", "<leader>fw", function()
+ require("fzf-lua").lsp_workspace_symbols()
+ end, opts)
+ vim.keymap.set("n", "<leader>fi", function()
+ require("fzf-lua").lsp_implementations()
+ end, opts)
+
+ if client:supports_method("textDocument/codeAction", bufnr) then
+ vim.keymap.set("n", "<leader>oi", function()
+ vim.lsp.buf.code_action({
+ context = { only = { "source.organizeImports" }, diagnostics = {} },
+ apply = true,
+ bufnr = bufnr,
+ })
+ vim.defer_fn(function()
+ vim.lsp.buf.format({ bufnr = bufnr })
+ end, 50)
+ end, opts)
+ end
+end
+
+vim.api.nvim_create_autocmd("LspAttach", { group = augroup, callback = lsp_on_attach })
+
+vim.keymap.set("n", "<leader>q", function()
+ vim.diagnostic.setloclist({ open = true })
+end, { desc = "Open diagnostic list" })
+vim.keymap.set("n", "<leader>dl", vim.diagnostic.open_float, { desc = "Show line diagnostics" })
+
+-- AUTOCOMPLETE
+require("blink.cmp").setup({
+ keymap = {
+ preset = "default",
+ },
+ appearance = { nerd_font_variant = "mono" },
+ completion = { menu = { auto_show = true } },
+ sources = { default = { "lsp", "path", "buffer", "snippets" } },
+ snippets = {
+ expand = function(snippet)
+ require("luasnip").lsp_expand(snippet)
+ end,
+ },
+
+ fuzzy = {
+ implementation = "prefer_rust",
+ prebuilt_binaries = { download = true },
+ },
+})
+
+vim.lsp.config["*"] = {
+ capabilities = require("blink.cmp").get_lsp_capabilities(),
+}
+
+vim.lsp.config("lua_ls", {
+ settings = {
+ Lua = {
+ diagnostics = { globals = { "vim" } },
+ telemetry = { enable = false },
+ },
+ },
+})
+vim.lsp.config("pyright", {
+ settings = {
+ python = {
+ pythonPath = vim.fn.getcwd() .. "/.venv/bin/python",
+
+ analysis = {
+ autoSearchPaths = true,
+ useLibraryCodeForTypes = true,
+ diagnosticMode = "workspace",
+ },
+ },
+ },
+})
+vim.lsp.config("bashls", {})
+vim.lsp.config("ts_ls", {})
+vim.lsp.config("gopls", {})
+vim.lsp.config("clangd", {})
+
+local capabilities = vim.lsp.protocol.make_client_capabilities()
+
+local ok, blink = pcall(require, "blink.cmp")
+if ok then
+ capabilities = blink.get_lsp_capabilities(capabilities)
+end
+
+vim.g.rustaceanvim = {
+ tools = {
+ enable_clippy = false,
+ },
+
+ server = {
+ capabilities = capabilities,
+
+ standalone = true,
+
+ status_notify_level = false,
+
+ load_vscode_settings = false,
+
+ default_settings = {
+ ["rust-analyzer"] = {
+ checkOnSave = false,
+ },
+ },
+ },
+}
+
+do
+ local luacheck = require("efmls-configs.linters.luacheck")
+ local stylua = require("efmls-configs.formatters.stylua")
+
+ local flake8_base = require("efmls-configs.linters.flake8")
+
+ local function resolve_flake8()
+ local cwd = vim.fn.getcwd()
+ local venv_flake8 = cwd .. "/.venv/bin/flake8"
+
+ if vim.fn.executable(venv_flake8) == 1 then
+ vim.notify("efm: using project flake8 → " .. venv_flake8, vim.log.levels.INFO)
+ return venv_flake8
+ end
+
+ if vim.fn.executable("flake8") == 1 then
+ return "flake8"
+ end
+
+ return nil
+ end
+
+ local flake8_cmd = resolve_flake8()
+
+ local flake8 = nil
+ if flake8_cmd then
+ flake8 = vim.tbl_extend("force", flake8_base, {
+ lintCommand = flake8_cmd .. " --max-line-length=999 --stdin-display-name ${INPUT} -",
+ })
+ end
+ local black = require("efmls-configs.formatters.black")
+
+ local prettier_d = require("efmls-configs.formatters.prettier_d")
+ local eslint_d = require("efmls-configs.linters.eslint_d")
+
+ local fixjson = require("efmls-configs.formatters.fixjson")
+
+ local shellcheck = require("efmls-configs.linters.shellcheck")
+ local shfmt = require("efmls-configs.formatters.shfmt")
+
+ local cpplint = require("efmls-configs.linters.cpplint")
+ local clangfmt = require("efmls-configs.formatters.clang_format")
+
+ local go_revive = require("efmls-configs.linters.go_revive")
+ local gofumpt = require("efmls-configs.formatters.gofumpt")
+
+ local rustfmt = require("efmls-configs.formatters.rustfmt")
+
+ vim.lsp.config("efm", {
+ filetypes = {
+ "c",
+ "cpp",
+ "css",
+ "go",
+ "html",
+ "javascript",
+ "javascriptreact",
+ "json",
+ "jsonc",
+ "lua",
+ "markdown",
+ "python",
+ "sh",
+ "typescript",
+ "typescriptreact",
+ "vue",
+ "svelte",
+ },
+ init_options = { documentFormatting = true },
+ settings = {
+ languages = {
+ c = { clangfmt, cpplint },
+ go = { gofumpt, go_revive },
+ cpp = { clangfmt, cpplint },
+ css = { prettier_d },
+ html = { prettier_d },
+ javascript = { eslint_d, prettier_d },
+ javascriptreact = { eslint_d, prettier_d },
+ json = { eslint_d, fixjson },
+ jsonc = { eslint_d, fixjson },
+ lua = { luacheck, stylua },
+ markdown = { prettier_d },
+ python = { flake8, black },
+ sh = { shellcheck, shfmt },
+ typescript = { eslint_d, prettier_d },
+ typescriptreact = { eslint_d, prettier_d },
+ vue = { eslint_d, prettier_d },
+ svelte = { eslint_d, prettier_d },
+ rust = { rustfmt },
+ },
+ },
+ })
+end
+
+vim.lsp.enable({
+ "lua_ls",
+ "pyright",
+ "bashls",
+ "ts_ls",
+ "gopls",
+ "clangd",
+ "efm",
+})
diff --git a/.config/nvim/nvim-macos.tar.gz b/.config/nvim/nvim-macos.tar.gz
new file mode 100644
index 0000000..8537307
--- /dev/null
+++ b/.config/nvim/nvim-macos.tar.gz
@@ -0,0 +1 @@
+Not Found \ No newline at end of file
diff --git a/.config/nvim/nvim-pack-lock.json b/.config/nvim/nvim-pack-lock.json
new file mode 100644
index 0000000..9da8e87
--- /dev/null
+++ b/.config/nvim/nvim-pack-lock.json
@@ -0,0 +1,85 @@
+{
+ "plugins": {
+ "LuaSnip": {
+ "rev": "dae4f5aaa3574bd0c2b9dd20fb9542a02c10471c",
+ "src": "https://github.com/L3MON4D3/LuaSnip"
+ },
+ "alpha-nvim": {
+ "rev": "a9d8fb72213c8b461e791409e7feabb74eb6ce73",
+ "src": "https://github.com/goolord/alpha-nvim"
+ },
+ "blink.cmp": {
+ "rev": "4b18c32adef2898f95cdef6192cbd5796c1a332d",
+ "src": "https://github.com/saghen/blink.cmp",
+ "version": "1.0.0 - 2.0.0"
+ },
+ "efmls-configs-nvim": {
+ "rev": "2dd907fe0043b95a901a9aee814f17804aa4426d",
+ "src": "https://github.com/creativenull/efmls-configs-nvim"
+ },
+ "flash.nvim": {
+ "rev": "fcea7ff883235d9024dc41e638f164a450c14ca2",
+ "src": "https://github.com/folke/flash.nvim"
+ },
+ "fzf-lua": {
+ "rev": "b56cd2ffbce57bfd9133a645bd02cd86895a7e3f",
+ "src": "https://www.github.com/ibhagwan/fzf-lua"
+ },
+ "gitsigns.nvim": {
+ "rev": "9f3c6dd7868bcc116e9c1c1929ce063b978fa519",
+ "src": "https://www.github.com/lewis6991/gitsigns.nvim"
+ },
+ "leetcode.nvim": {
+ "rev": "fdd3f91800b3983e27bc9fcfb99cfa7293d7f11a",
+ "src": "https://github.com/kawre/leetcode.nvim"
+ },
+ "mason.nvim": {
+ "rev": "44d1e90e1f66e077268191e3ee9d2ac97cc18e65",
+ "src": "https://github.com/mason-org/mason.nvim"
+ },
+ "mini.nvim": {
+ "rev": "0098de999048af0539183d625c52d733318a441b",
+ "src": "https://www.github.com/echasnovski/mini.nvim"
+ },
+ "nord.nvim": {
+ "rev": "80c1e5321505aeb22b7a9f23eb82f1e193c12470",
+ "src": "https://github.com/shaunsingh/nord.nvim"
+ },
+ "nui.nvim": {
+ "rev": "de740991c12411b663994b2860f1a4fd0937c130",
+ "src": "https://github.com/MunifTanjim/nui.nvim"
+ },
+ "nvim-lspconfig": {
+ "rev": "ead0f5f342d8d323441e7d4b88f0fc436a81ad5f",
+ "src": "https://www.github.com/neovim/nvim-lspconfig"
+ },
+ "nvim-tree.lua": {
+ "rev": "c988e289428d9202b28ba27479647033c7dd2956",
+ "src": "https://www.github.com/nvim-tree/nvim-tree.lua"
+ },
+ "nvim-treesitter": {
+ "rev": "cb2cb74f3c3cbbcc17e79cada2060165d616d849",
+ "src": "https://github.com/nvim-treesitter/nvim-treesitter"
+ },
+ "oil.nvim": {
+ "rev": "0fcc83805ad11cf714a949c98c605ed717e0b83e",
+ "src": "https://github.com/stevearc/oil.nvim"
+ },
+ "outline.nvim": {
+ "rev": "ead1820d49c8e79ce89cab1c2c318981b695c9d2",
+ "src": "https://github.com/hedyhli/outline.nvim"
+ },
+ "plenary.nvim": {
+ "rev": "b9fd5226c2f76c951fc8ed5923d85e4de065e509",
+ "src": "https://github.com/nvim-lua/plenary.nvim"
+ },
+ "rustaceanvim": {
+ "rev": "d50597d482a6f44ddfc54d1af2f69f052053b4de",
+ "src": "https://github.com/mrcjkb/rustaceanvim"
+ },
+ "which-key.nvim": {
+ "rev": "3aab2147e74890957785941f0c1ad87d0a44c15a",
+ "src": "https://github.com/folke/which-key.nvim"
+ }
+ }
+} \ No newline at end of file
diff --git a/.tmux.conf b/.tmux.conf
index 6883035..b539582 100644
--- a/.tmux.conf
+++ b/.tmux.conf
@@ -17,8 +17,6 @@ bind -N "⌘+l last-session (via sesh) " L run-shell "sesh last || tmux display-
bind -N "⌘+l last-session (via sesh) " C-z run-shell "sesh last || tmux display-message -d 1000 'Oops, no last sessions found'"
bind-key h swap-window -t -1 \; select-window -t -1
bind-key l swap-window -t +1 \; select-window -t +1
-bind-key n split-window -h -p 25 "nvim note.md"
-bind-key m kill-pane
bind-key "K" run-shell "sesh connect \"$(
sesh list --icons --hide-duplicates | fzf-tmux -p 100%,100% --no-border \