This repository has no description
0

Configure Feed

Select the types of activity you want to include in your feed.

Initial commit

Ivan Ilak (Jun 1, 2026, 11:06 PM +0200) fe5bf4a0

+1375
+17
.gitignore
··· 1 + # macOS 2 + .DS_Store 3 + 4 + # Vim/Neovim swap 5 + *.swp 6 + *.swo 7 + 8 + # Machine-local overrides (any folder) 9 + *.local 10 + *.local.* 11 + 12 + # git 13 + git/allowed_signers 14 + 15 + # fish — universal/per-machine state that sometimes leaks into config 16 + fish/fish_variables 17 + fish/fish_history
+44
README.md
··· 1 + # dotfiles 2 + 3 + Personal configs for fish, ghostty, git, and Neovim (LazyVim). Each top-level folder maps 1:1 to `~/.config/<name>/`. 4 + 5 + ## Install 6 + 7 + ```sh 8 + git clone <this-repo> ~/prg/dotfiles 9 + cd ~/prg/dotfiles 10 + 11 + # Symlink each folder into ~/.config/ 12 + for d in */; do 13 + name="${d%/}" 14 + [ "$name" = ".git" ] && continue 15 + ln -sfn "$PWD/$name" "$HOME/.config/$name" 16 + done 17 + ``` 18 + 19 + ## Prerequisites (macOS, Homebrew) 20 + 21 + ```sh 22 + brew install neovim git fish ripgrep fd 23 + brew install --cask ghostty 24 + xcode-select --install # C compiler for treesitter 25 + ``` 26 + 27 + First `nvim` launch bootstraps `lazy.nvim` and Mason auto-installs LSP servers and formatters on demand. 28 + 29 + ## Layout 30 + 31 + | Folder | Contents | 32 + |---|---| 33 + | `nvim/` | LazyVim-based Neovim config — catppuccin, blink.cmp, cmake-tools + overseer + just, nvim-dap (lldb), trailblazer, ufo folds | 34 + | `fish/` | Fish shell — `conf.d`, `functions`, `completions`, `themes` | 35 + | `ghostty/` | Ghostty terminal `config` + `themes` | 36 + | `git/` | Git `config`, `attributes`, `ignore` | 37 + 38 + ## Updating 39 + 40 + ```sh 41 + cd ~/prg/dotfiles && git pull 42 + ``` 43 + 44 + Neovim plugin versions are pinned via `nvim/lazy-lock.json`; run `:Lazy restore` after pulling to match.
+13
ghostty/config
··· 1 + clipboard-read = allow 2 + clipboard-write = allow 3 + font-family = UDEV Gothic NF Regular 4 + font-family-bold = UDEV Gothic NF Bold 5 + font-family-bold-italic = UDEV Gothic NF Bold Italic 6 + font-family-italic = UDEV Gothic NF Italic 7 + font-feature = -calt 8 + font-size = 15 9 + gtk-titlebar = false 10 + macos-titlebar-style = tabs 11 + maximize = true 12 + theme = light:catppuccin-mocha,dark:catppuccin-mocha 13 + window-theme = dark
+23
ghostty/themes/catppuccin-mocha
··· 1 + palette = 0=#45475a 2 + palette = 1=#f38ba8 3 + palette = 2=#a6e3a1 4 + palette = 3=#f9e2af 5 + palette = 4=#89b4fa 6 + palette = 5=#f5c2e7 7 + palette = 6=#94e2d5 8 + palette = 7=#a6adc8 9 + palette = 8=#585b70 10 + palette = 9=#f38ba8 11 + palette = 10=#a6e3a1 12 + palette = 11=#f9e2af 13 + palette = 12=#89b4fa 14 + palette = 13=#f5c2e7 15 + palette = 14=#94e2d5 16 + palette = 15=#bac2de 17 + background = 1e1e2e 18 + foreground = cdd6f4 19 + cursor-color = f5e0dc 20 + cursor-text = 11111b 21 + selection-background = 353749 22 + selection-foreground = cdd6f4 23 + split-divider-color = 313244
+1
git/attributes
··· 1 + flake.lock -diff
+83
git/config
··· 1 + [alias] 2 + dfw = "diff -w --ignore-blank-lines" 3 + 4 + [branch] 5 + sort = "-committerdate" 6 + 7 + [column] 8 + ui = "auto" 9 + 10 + [commit] 11 + gpgSign = true 12 + gpgsign = true 13 + verbose = true 14 + 15 + [core] 16 + autocrlf = "input" 17 + editor = "vim" 18 + excludeFiles = "~/.gitignore" 19 + fsmonitor = true 20 + untrackedCache = true 21 + whitespace = "-trailing-space,-indent-with-non-tab,-tab-in-indent" 22 + 23 + [diff] 24 + algorithm = "histogram" 25 + colorMoved = "plain" 26 + mnemonicPrefix = true 27 + renames = true 28 + 29 + [diff "sopsdiffer"] 30 + textconv = "sops decrypt" 31 + 32 + [fetch] 33 + all = true 34 + prune = true 35 + pruneTags = true 36 + 37 + [filter "lfs"] 38 + clean = "git-lfs clean -- %f" 39 + process = "git-lfs filter-process" 40 + required = true 41 + smudge = "git-lfs smudge -- %f" 42 + 43 + [gpg] 44 + format = "ssh" 45 + 46 + [gpg "ssh"] 47 + allowedSignersFile = "~/.config/git/allowed_signers" 48 + program = "ssh-keygen" 49 + 50 + [help] 51 + autocorrect = "prompt" 52 + 53 + [init] 54 + defaultBranch = "main" 55 + 56 + [merge] 57 + conflictstyle = "zdiff3" 58 + 59 + [pull] 60 + rebase = true 61 + 62 + [push] 63 + autoSetupRemote = true 64 + default = "simple" 65 + followTags = true 66 + 67 + [rebase] 68 + autoSquash = true 69 + autoStash = true 70 + updateRefs = true 71 + 72 + [rerere] 73 + autoupdate = true 74 + enabled = true 75 + 76 + [tag] 77 + gpgSign = true 78 + sort = "version:refname" 79 + 80 + [user] 81 + email = "EMAIL" 82 + name = "Ivan Ilak" 83 + signingKey = "~/.ssh/ssh_git_signing_key.pub"
+1
git/ignore
··· 1 + *.swp
+1
nvim/init.lua
··· 1 + require("config.lazy")
+63
nvim/lazy-lock.json
··· 1 + { 2 + "LazyVim": { "branch": "main", "commit": "83d90f339defdb109a6ede333865a66ffc7ef6aa" }, 3 + "LuaSnip": { "branch": "master", "commit": "0abc8f390b278c3b4aabc4c004ac8a088b65cf24" }, 4 + "SchemaStore.nvim": { "branch": "main", "commit": "bb1550c91d09d2ede8edd90a87fa4ccc9c0b9e1f" }, 5 + "blink.cmp": { "branch": "main", "commit": "78336bc89ee5365633bcf754d93df01678b5c08f" }, 6 + "bufferline.nvim": { "branch": "main", "commit": "655133c3b4c3e5e05ec549b9f8cc2894ac6f51b3" }, 7 + "catppuccin": { "branch": "main", "commit": "0303a7208dba448c459767486a38a6ec05c4216b" }, 8 + "clangd_extensions.nvim": { "branch": "main", "commit": "78c2ecd659d54972be17aa6ba2deac3c53223b80" }, 9 + "cmake-tools.nvim": { "branch": "master", "commit": "f9a3eb2be0b8148df470244e5c25aede3a3a28a5" }, 10 + "conform.nvim": { "branch": "master", "commit": "619363c30309d29ffa631e67c8183f2a72caa373" }, 11 + "crates.nvim": { "branch": "main", "commit": "694357861ec9ebf12475ddcdd04ea45a0923c32d" }, 12 + "fidget.nvim": { "branch": "main", "commit": "82404b196e73a00b1727a91903beef5ddc319d22" }, 13 + "flash.nvim": { "branch": "main", "commit": "fcea7ff883235d9024dc41e638f164a450c14ca2" }, 14 + "friendly-snippets": { "branch": "main", "commit": "6cd7280adead7f586db6fccbd15d2cac7e2188b9" }, 15 + "gitsigns.nvim": { "branch": "main", "commit": "dd3f588bacbeb041be6facf1742e42097f62165d" }, 16 + "grug-far.nvim": { "branch": "main", "commit": "5506c2f59dc9ab2ed6c233585412b24d31d51521" }, 17 + "lazy.nvim": { "branch": "main", "commit": "85c7ff3711b730b4030d03144f6db6375044ae82" }, 18 + "lazydev.nvim": { "branch": "main", "commit": "ff2cbcba459b637ec3fd165a2be59b7bbaeedf0d" }, 19 + "lualine.nvim": { "branch": "master", "commit": "221ce6b2d999187044529f49da6554a92f740a96" }, 20 + "markdown-preview.nvim": { "branch": "master", "commit": "a923f5fc5ba36a3b17e289dc35dc17f66d0548ee" }, 21 + "mason-lspconfig.nvim": { "branch": "main", "commit": "0a695750d747db1e7e70bcf0267ef8951c95fc83" }, 22 + "mason-nvim-dap.nvim": { "branch": "main", "commit": "9a10e096703966335bd5c46c8c875d5b0690dade" }, 23 + "mason.nvim": { "branch": "main", "commit": "16ba83bfc8a25f52bb545134f5bee082b195c460" }, 24 + "mini.ai": { "branch": "main", "commit": "deacc8e9cf05df0297e3b14a08c2f8a415045c6f" }, 25 + "mini.icons": { "branch": "main", "commit": "520995f1d75da0e4cc901ee95080b1ff2bc46b94" }, 26 + "mini.pairs": { "branch": "main", "commit": "30cf2f01c4aaa2033db67376b9924fa2442c05d6" }, 27 + "neo-tree.nvim": { "branch": "main", "commit": "b83de592f2a8bdd749a00668a8253878cd801f15" }, 28 + "noice.nvim": { "branch": "main", "commit": "7bfd942445fb63089b59f97ca487d605e715f155" }, 29 + "nui.nvim": { "branch": "main", "commit": "de740991c12411b663994b2860f1a4fd0937c130" }, 30 + "nvim-dap": { "branch": "master", "commit": "531771530d4f82ad2d21e436e3cc052d68d7aebb" }, 31 + "nvim-dap-go": { "branch": "main", "commit": "b4421153ead5d726603b02743ea40cf26a51ed5f" }, 32 + "nvim-dap-python": { "branch": "master", "commit": "1808458eba2b18f178f990e01376941a42c7f93b" }, 33 + "nvim-dap-ui": { "branch": "master", "commit": "1a66cabaa4a4da0be107d5eda6d57242f0fe7e49" }, 34 + "nvim-dap-virtual-text": { "branch": "master", "commit": "fbdb48c2ed45f4a8293d0d483f7730d24467ccb6" }, 35 + "nvim-lint": { "branch": "master", "commit": "d48f3a76189d03b2239f6df1b2f7e3fa8353743b" }, 36 + "nvim-lspconfig": { "branch": "master", "commit": "9573948c38bfabeec353ae7dd7d3ffec4c506a6b" }, 37 + "nvim-navic": { "branch": "master", "commit": "f5eba192f39b453675d115351808bd51276d9de5" }, 38 + "nvim-nio": { "branch": "master", "commit": "21f5324bfac14e22ba26553caf69ec76ae8a7662" }, 39 + "nvim-treesitter": { "branch": "main", "commit": "4916d6592ede8c07973490d9322f187e07dfefac" }, 40 + "nvim-treesitter-textobjects": { "branch": "main", "commit": "851e865342e5a4cb1ae23d31caf6e991e1c99f1e" }, 41 + "nvim-ts-autotag": { "branch": "main", "commit": "88c1453db4ba7dd24131086fe51fdf74e587d275" }, 42 + "nvim-ufo": { "branch": "main", "commit": "ab3eb124062422d276fae49e0dd63b3ad1062cfc" }, 43 + "overseer.nvim": { "branch": "master", "commit": "a93d9f6d6defdac4bcd6d2c8ba988650e42e0a0e" }, 44 + "persistence.nvim": { "branch": "main", "commit": "b20b2a7887bd39c1a356980b45e03250f3dce49c" }, 45 + "plenary.nvim": { "branch": "master", "commit": "74b06c6c75e4eeb3108ec01852001636d85a932b" }, 46 + "promise-async": { "branch": "main", "commit": "119e8961014c9bfaf1487bf3c2a393d254f337e2" }, 47 + "render-markdown.nvim": { "branch": "main", "commit": "5adf0895310c1904e5abfaad40a2baad7fe44a07" }, 48 + "rustaceanvim": { "branch": "main", "commit": "8bdd018fab9ccf0a404237c424962146ae16675a" }, 49 + "snacks.nvim": { "branch": "main", "commit": "882c996cf28183f4d63640de0b4c02ec886d01f2" }, 50 + "telescope-file-browser.nvim": { "branch": "master", "commit": "3610dc7dc91f06aa98b11dca5cc30dfa98626b7e" }, 51 + "telescope-fzf-native.nvim": { "branch": "main", "commit": "b25b749b9db64d375d782094e2b9dce53ad53a40" }, 52 + "telescope-ui-select.nvim": { "branch": "master", "commit": "6e51d7da30bd139a6950adf2a47fda6df9fa06d2" }, 53 + "telescope.nvim": { "branch": "master", "commit": "7d324792b7943e4aa16ad007212e6acc6f9fe335" }, 54 + "todo-comments.nvim": { "branch": "main", "commit": "31e3c38ce9b29781e4422fc0322eb0a21f4e8668" }, 55 + "tokyonight.nvim": { "branch": "main", "commit": "cdc07ac78467a233fd62c493de29a17e0cf2b2b6" }, 56 + "trailblazer.nvim": { "branch": "main", "commit": "5c0e3ac01e227bb9afe428583f29f0ec34801408" }, 57 + "trouble.nvim": { "branch": "main", "commit": "bd67efe408d4816e25e8491cc5ad4088e708a69a" }, 58 + "ts-comments.nvim": { "branch": "main", "commit": "123a9fb12e7229342f807ec9e6de478b1102b041" }, 59 + "undotree": { "branch": "master", "commit": "6fa6b57cda8459e1e4b2ca34df702f55242f4e4d" }, 60 + "venv-selector.nvim": { "branch": "main", "commit": "cc4bb3975de8835291f9bb45889e96c6b2795fc4" }, 61 + "vim-illuminate": { "branch": "master", "commit": "0d1e93684da00ab7c057410fecfc24f434698898" }, 62 + "which-key.nvim": { "branch": "main", "commit": "3aab2147e74890957785941f0c1ad87d0a44c15a" } 63 + }
+10
nvim/lazyvim.json
··· 1 + { 2 + "extras": [ 3 + 4 + ], 5 + "install_version": 8, 6 + "news": { 7 + "NEWS.md": "11866" 8 + }, 9 + "version": 8 10 + }
+7
nvim/lua/config/autocmds.lua
··· 1 + vim.api.nvim_create_autocmd("FileType", { 2 + pattern = { "markdown", "text", "gitcommit" }, 3 + callback = function() 4 + vim.opt_local.spell = true 5 + end, 6 + }) 7 +
+135
nvim/lua/config/keymaps.lua
··· 1 + local map = vim.keymap.set 2 + 3 + -- Telescope 4 + map("n", "<C-p>", "<cmd>Telescope git_files<cr>", { desc = "Search git files" }) 5 + map("n", "<leader>/", "<cmd>Telescope live_grep<cr>", { desc = "Grep (root dir)" }) 6 + map("n", "<leader>:", "<cmd>Telescope command_history<cr>", { desc = "Command history" }) 7 + map("n", "<leader><space>", "<cmd>Telescope find_files<cr>", { desc = "Find project files" }) 8 + map("n", "<leader>b", "<cmd>Telescope buffers<cr>", { desc = "Buffers" }) 9 + map("n", "<leader>fR", "<cmd>Telescope resume<cr>", { desc = "Resume" }) 10 + map("n", "<leader>fr", "<cmd>Telescope live_grep<cr>", { desc = "Find text" }) 11 + map("n", "<leader>gc", "<cmd>Telescope git_commits<cr>", { desc = "Commits" }) 12 + map("n", "<leader>gs", "<cmd>Telescope git_status<cr>", { desc = "Status" }) 13 + map("n", "<leader>sC", "<cmd>Telescope commands<cr>", { desc = "Commands" }) 14 + map("n", "<leader>sD", "<cmd>Telescope diagnostics<cr>", { desc = "Workspace diagnostics" }) 15 + map("n", "<leader>sH", "<cmd>Telescope highlights<cr>", { desc = "Highlight groups" }) 16 + map("n", "<leader>sM", "<cmd>Telescope man_pages<cr>", { desc = "Man pages" }) 17 + map("n", "<leader>sR", "<cmd>Telescope resume<cr>", { desc = "Resume" }) 18 + map("n", "<leader>sa", "<cmd>Telescope autocommands<cr>", { desc = "Auto commands" }) 19 + map("n", "<leader>sb", "<cmd>Telescope current_buffer_fuzzy_find<cr>", { desc = "Buffer" }) 20 + map("n", "<leader>sc", "<cmd>Telescope command_history<cr>", { desc = "Command history" }) 21 + map("n", "<leader>sh", "<cmd>Telescope help_tags<cr>", { desc = "Help pages" }) 22 + map("n", "<leader>sk", "<cmd>Telescope keymaps<cr>", { desc = "Keymaps" }) 23 + map("n", "<leader>sm", "<cmd>Telescope marks<cr>", { desc = "Jump to mark" }) 24 + map("n", "<leader>so", "<cmd>Telescope vim_options<cr>", { desc = "Options" }) 25 + map("n", "<leader>uC", "<cmd>Telescope colorscheme<cr>", { desc = "Colorscheme preview" }) 26 + map("n", "<leader>sd", "<cmd>Telescope diagnostics bufnr=0<cr>", { desc = "Document diagnostics" }) 27 + map("n", "<leader>fe", "<cmd>Telescope file_browser<cr>", { desc = "File browser" }) 28 + map("n", "<leader>fE", "<cmd>Telescope file_browser path=%:p:h select_buffer=true<cr>", { desc = "File browser (cwd)" }) 29 + map("n", "<leader>ff", "<cmd>Telescope find_files<cr>", { desc = "Find files" }) 30 + map("n", "<leader>fg", "<cmd>Telescope live_grep<cr>", { desc = "Search in files" }) 31 + map("n", "<leader>fb", "<cmd>Telescope buffers<cr>", { desc = "Buffers" }) 32 + map("n", "<leader>fh", "<cmd>Telescope help_tags<cr>", { desc = "Help tags" }) 33 + map("n", "<leader>fs", "<cmd>Telescope lsp_document_symbols<cr>", { desc = "Document symbols" }) 34 + map("n", "<leader>fS", "<cmd>Telescope lsp_dynamic_workspace_symbols<cr>", { desc = "Workspace symbols" }) 35 + 36 + -- Bufferline 37 + map("n", "<Tab>", "<cmd>BufferLineCycleNext<cr>", { desc = "Next buffer" }) 38 + map("n", "<S-Tab>", "<cmd>BufferLineCyclePrev<cr>", { desc = "Previous buffer" }) 39 + map("n", "<leader>bd", "<cmd>bdelete<cr>", { desc = "Delete buffer" }) 40 + map("n", "<leader>bp", "<cmd>BufferLineTogglePin<cr>", { desc = "Toggle pin" }) 41 + 42 + -- Window navigation 43 + map("n", "<C-h>", "<C-w>h", { desc = "Go to left window", remap = true }) 44 + map("n", "<C-j>", "<C-w>j", { desc = "Go to lower window", remap = true }) 45 + map("n", "<C-k>", "<C-w>k", { desc = "Go to upper window", remap = true }) 46 + map("n", "<C-l>", "<C-w>l", { desc = "Go to right window", remap = true }) 47 + map("n", "<leader>ww", "<C-w>p", { desc = "Other window", remap = true }) 48 + map("n", "<leader>wd", "<C-w>c", { desc = "Delete window", remap = true }) 49 + map("n", "<leader>w-", "<C-w>s", { desc = "Split window below", remap = true }) 50 + map("n", "<leader>w|", "<C-w>v", { desc = "Split window right", remap = true }) 51 + map("n", "<leader>wb", "<C-w>s", { desc = "Split window below", remap = true }) 52 + map("n", "<leader>|", "<C-w>v", { desc = "Split window right", remap = true }) 53 + map("n", "<leader>wr", ":only<CR>", { desc = "Close other splits", noremap = true }) 54 + 55 + -- Terminal window navigation 56 + map("t", "<C-h>", "<cmd>wincmd h<cr>", { desc = "Go to left window" }) 57 + map("t", "<C-j>", "<cmd>wincmd j<cr>", { desc = "Go to lower window" }) 58 + map("t", "<C-k>", "<cmd>wincmd k<cr>", { desc = "Go to upper window" }) 59 + map("t", "<C-l>", "<cmd>wincmd l<cr>", { desc = "Go to right window" }) 60 + map("t", "<C-/>", "<cmd>close<cr>", { desc = "Hide terminal" }) 61 + 62 + -- File operations 63 + map("n", "<C-s>", "<cmd>w<cr><esc>", { desc = "Save file", silent = true }) 64 + map("i", "<C-s>", "<cmd>w<cr><esc>", { desc = "Save file" }) 65 + map("x", "<C-s>", "<cmd>w<cr><esc>", { desc = "Save file" }) 66 + map("s", "<C-s>", "<cmd>w<cr><esc>", { desc = "Save file" }) 67 + map("n", "<leader>x", ":bd<CR>", { desc = "Close buffer/tab", silent = true }) 68 + map("n", "Q", "<cmd>qa<cr>", { desc = "Quit all", silent = true }) 69 + 70 + -- Editing 71 + map("", "Y", "y$", { desc = "Yank to end of line", silent = true }) 72 + map("v", "J", ":m '>+1<CR>gv=gv", { desc = "Move selected line down", silent = true }) 73 + map("v", "K", ":m '<-2<CR>gv=gv", { desc = "Move selected line up", silent = true }) 74 + map("v", "<", "<gv", { desc = "Indent left, keep selection", silent = true }) 75 + map("v", ">", ">gv", { desc = "Indent right, keep selection", silent = true }) 76 + map("n", "d)", "d])", { desc = "Delete up to next parenthesis", silent = true }) 77 + map("n", "c)", "c])", { desc = "Change up to next parenthesis", silent = true }) 78 + 79 + -- Disable arrow keys 80 + map("n", "<Up>", "<NOP>", { desc = "Disable arrow keys" }) 81 + map("n", "<Down>", "<NOP>", { desc = "Disable arrow keys" }) 82 + map("n", "<Left>", "<NOP>", { desc = "Disable arrow keys" }) 83 + map("n", "<Right>", "<NOP>", { desc = "Disable arrow keys" }) 84 + 85 + -- Folding (ufo) 86 + map("n", "ä", "za", { desc = "Toggle fold at cursor" }) 87 + map("n", "Ä", "<cmd>lua require('ufo').openAllFolds()<CR>", { desc = "Open all folds" }) 88 + map("n", "<leader>zR", "<cmd>lua require('ufo').openAllFolds()<CR>", { desc = "Open all folds" }) 89 + map("n", "<leader>zM", "<cmd>lua require('ufo').closeAllFolds()<CR>", { desc = "Close all folds" }) 90 + map("n", "zR", "<cmd>lua require('ufo').openAllFolds()<CR>", { desc = "Open all folds (ufo)" }) 91 + map("n", "zM", "<cmd>lua require('ufo').closeAllFolds()<CR>", { desc = "Close all folds (ufo)" }) 92 + 93 + -- File explorer 94 + map("n", "<leader>e", "<cmd>Neotree toggle<cr>", { desc = "Toggle file explorer" }) 95 + map("n", "<leader>er", "<cmd>Neotree reveal<cr>", { desc = "Reveal current file in explorer" }) 96 + 97 + -- Comments (delegates to Neovim's native gc/gcc operator, which mini.comment hooks) 98 + map("n", "<leader>c", "gcc", { desc = "Toggle line comment", remap = true }) 99 + map("v", "<leader>c", "gc", { desc = "Toggle block comment", remap = true }) 100 + 101 + -- Diagnostics 102 + map("n", "[d", "<cmd>lua vim.diagnostic.goto_prev()<CR>", { desc = "Previous diagnostic" }) 103 + map("n", "]d", "<cmd>lua vim.diagnostic.goto_next()<CR>", { desc = "Next diagnostic" }) 104 + map("n", "<leader>`", "<cmd>lua vim.diagnostic.open_float()<CR>", { desc = "Show diagnostics", silent = true }) 105 + map("n", "]e", "<cmd>lua vim.diagnostic.goto_next({severity = vim.diagnostic.severity.ERROR})<CR>", { desc = "Next error" }) 106 + map("n", "[e", "<cmd>lua vim.diagnostic.goto_prev({severity = vim.diagnostic.severity.ERROR})<CR>", { desc = "Previous error" }) 107 + map("n", "]w", "<cmd>lua vim.diagnostic.goto_next({severity = vim.diagnostic.severity.WARN})<CR>", { desc = "Next warning" }) 108 + map("n", "[w", "<cmd>lua vim.diagnostic.goto_prev({severity = vim.diagnostic.severity.WARN})<CR>", { desc = "Previous warning" }) 109 + 110 + -- LSP (clangd-specific) 111 + map("n", "<C-k><C-o>", "<cmd>LspClangdSwitchSourceHeader<CR>", { desc = "Switch header/source", silent = true }) 112 + 113 + -- Spelling 114 + map("n", "ns", "]s", { desc = "Next spelling error", silent = true }) 115 + map("n", "ps", "[s", { desc = "Previous spelling error", silent = true }) 116 + 117 + -- LSP references (global; LspAttach autocmd handles the rest) 118 + map("n", "<leader>gr", function() 119 + require("telescope.builtin").lsp_references({ 120 + layout_strategy = "horizontal", 121 + layout_config = { width = 0.8, height = 0.9, prompt_position = "bottom" }, 122 + sorting_strategy = "descending", 123 + ignore_filename = false, 124 + }) 125 + end, { desc = "References" }) 126 + 127 + -- Format 128 + map("n", "<leader>uf", "<cmd>FormatToggle<CR>", { desc = "Toggle format globally", silent = true }) 129 + map("n", "<leader>uF", "<cmd>FormatToggle!<CR>", { desc = "Toggle format locally", silent = true }) 130 + map("n", "<leader>cf", function() 131 + require("conform").format() 132 + end, { desc = "Format buffer", silent = true }) 133 + map("v", "<leader>cF", function() 134 + require("conform").format() 135 + end, { desc = "Format lines", silent = true })
+51
nvim/lua/config/lazy.lua
··· 1 + local lazypath = vim.fn.stdpath("data") .. "/lazy/lazy.nvim" 2 + if not (vim.uv or vim.loop).fs_stat(lazypath) then 3 + local lazyrepo = "https://github.com/folke/lazy.nvim.git" 4 + local out = vim.fn.system({ "git", "clone", "--filter=blob:none", "--branch=stable", lazyrepo, lazypath }) 5 + if vim.v.shell_error ~= 0 then 6 + vim.api.nvim_echo({ 7 + { "Failed to clone lazy.nvim:\n", "ErrorMsg" }, 8 + { out, "WarningMsg" }, 9 + { "\nPress any key to exit..." }, 10 + }, true, {}) 11 + vim.fn.getchar() 12 + os.exit(1) 13 + end 14 + end 15 + vim.opt.rtp:prepend(lazypath) 16 + 17 + require("lazy").setup({ 18 + spec = { 19 + { "LazyVim/LazyVim", import = "lazyvim.plugins" }, 20 + 21 + { import = "lazyvim.plugins.extras.lang.clangd" }, 22 + { import = "lazyvim.plugins.extras.lang.cmake" }, 23 + { import = "lazyvim.plugins.extras.lang.go" }, 24 + { import = "lazyvim.plugins.extras.lang.json" }, 25 + { import = "lazyvim.plugins.extras.lang.markdown" }, 26 + { import = "lazyvim.plugins.extras.lang.nix" }, 27 + { import = "lazyvim.plugins.extras.lang.python" }, 28 + { import = "lazyvim.plugins.extras.lang.rust" }, 29 + { import = "lazyvim.plugins.extras.lang.yaml" }, 30 + 31 + { import = "lazyvim.plugins.extras.formatting.prettier" }, 32 + { import = "lazyvim.plugins.extras.dap.core" }, 33 + 34 + { import = "plugins" }, 35 + }, 36 + defaults = { lazy = false, version = false }, 37 + install = { colorscheme = { "catppuccin", "habamax" } }, 38 + checker = { enabled = true, notify = false }, 39 + performance = { 40 + rtp = { 41 + disabled_plugins = { 42 + "gzip", 43 + "tarPlugin", 44 + "tohtml", 45 + "tutor", 46 + "zipPlugin", 47 + "netrwPlugin", 48 + }, 49 + }, 50 + }, 51 + })
+65
nvim/lua/config/options.lua
··· 1 + vim.g.mapleader = "\\" 2 + vim.g.maplocalleader = "\\" 3 + 4 + vim.g.undotree_autoOpenDiff = true 5 + vim.g.undotree_focusOnToggle = true 6 + 7 + local opt = vim.opt 8 + 9 + opt.number = true 10 + opt.relativenumber = true 11 + opt.cursorline = true 12 + opt.scrolloff = 8 13 + opt.mouse = "a" 14 + opt.showmode = false 15 + opt.cmdheight = 1 16 + opt.showtabline = 2 17 + opt.termguicolors = true 18 + opt.timeoutlen = 300 19 + 20 + opt.tabstop = 4 21 + opt.softtabstop = 4 22 + opt.shiftwidth = 4 23 + opt.expandtab = true 24 + opt.smartindent = true 25 + opt.breakindent = true 26 + opt.linebreak = true 27 + 28 + opt.spell = false 29 + 30 + opt.swapfile = true 31 + 32 + opt.splitbelow = true 33 + opt.splitright = true 34 + opt.splitkeep = "screen" 35 + 36 + opt.clipboard = { "unnamed", "unnamedplus" } 37 + 38 + opt.foldenable = true 39 + opt.foldmethod = "expr" 40 + opt.foldexpr = "v:lua.vim.treesitter.foldexpr()" 41 + opt.foldlevel = 99 42 + opt.foldlevelstart = 99 43 + opt.foldcolumn = "0" 44 + opt.fillchars = { 45 + eob = " ", 46 + fold = " ", 47 + foldopen = "▾", 48 + foldclose = "▸", 49 + foldsep = " ", 50 + horiz = "═", 51 + vert = "║", 52 + } 53 + 54 + vim.diagnostic.config({ 55 + virtual_text = false, 56 + signs = { 57 + text = { 58 + [vim.diagnostic.severity.ERROR] = " ", 59 + [vim.diagnostic.severity.WARN] = " ", 60 + [vim.diagnostic.severity.HINT] = "󰌵", 61 + [vim.diagnostic.severity.INFO] = " ", 62 + }, 63 + }, 64 + float = { border = "rounded" }, 65 + })
+15
nvim/lua/plugins/bufferline.lua
··· 1 + return { 2 + "akinsho/bufferline.nvim", 3 + opts = function(_, opts) 4 + opts.options = vim.tbl_deep_extend("force", opts.options or {}, { 5 + buffer_close_icon = "󰱝 ", 6 + close_icon = " ", 7 + diagnostics = "nvim_lsp", 8 + mode = "buffers", 9 + modified_icon = "󰔯 ", 10 + offsets = { 11 + { filetype = "neo-tree", highlight = "Directory", text = "Neo-tree", text_align = "left" }, 12 + }, 13 + }) 14 + end, 15 + }
+74
nvim/lua/plugins/cmake.lua
··· 1 + return { 2 + { 3 + "Civitasv/cmake-tools.nvim", 4 + dependencies = { "stevearc/overseer.nvim" }, 5 + cmd = { 6 + "CMake", 7 + "CMakeGenerate", 8 + "CMakeBuild", 9 + "CMakeBuildCurrentFile", 10 + "CMakeRun", 11 + "CMakeDebug", 12 + "CMakeSelectConfigurePreset", 13 + "CMakeSelectBuildPreset", 14 + "CMakeSelectBuildTarget", 15 + "CMakeSelectBuildType", 16 + "CMakeSelectLaunchTarget", 17 + }, 18 + opts = { 19 + cmake_dap_configuration = { 20 + console = "internalConsole", 21 + name = "cpp", 22 + request = "launch", 23 + runInTerminal = false, 24 + type = "lldb", 25 + }, 26 + cmake_executor = { 27 + default_opts = { 28 + overseer = { 29 + new_task_opts = { 30 + strategy = { 31 + "jobstart", 32 + auto_scroll = true, 33 + direction = "horizontal", 34 + quit_on_exit = "success", 35 + }, 36 + }, 37 + on_new_task = function(_) 38 + require("overseer").open({ enter = false, direction = "bottom" }) 39 + end, 40 + }, 41 + }, 42 + name = "overseer", 43 + }, 44 + cmake_generate_options = { ["-DCMAKE_EXPORT_COMPILE_COMMANDS"] = 1 }, 45 + cmake_notifications = { executor = { enabled = true }, runner = { enabled = true } }, 46 + cmake_runner = { 47 + default_opts = { 48 + overseer = { 49 + new_task_opts = { 50 + strategy = { 51 + "jobstart", 52 + auto_scroll = true, 53 + direction = "horizontal", 54 + quit_on_exit = "success", 55 + }, 56 + }, 57 + on_new_task = function(_) 58 + require("overseer").open({ enter = false, direction = "bottom" }) 59 + end, 60 + }, 61 + }, 62 + name = "overseer", 63 + }, 64 + cmake_soft_link_compile_commands = true, 65 + cmake_use_preset = true, 66 + }, 67 + keys = { 68 + { "<F7>", "<cmd>CMakeBuild<cr>", desc = "CMake build target", silent = true }, 69 + { "<F6>", "<cmd>CMakeSelectBuildPreset<cr>", desc = "CMake select build preset", silent = true }, 70 + { "<F18>", "<cmd>CMakeSelectBuildTarget<cr>", desc = "CMake select build target", silent = true }, 71 + { "<leader>B", "<cmd>CMakeBuildCurrentFile<cr>", desc = "CMake build current file", silent = true }, 72 + }, 73 + }, 74 + }
+69
nvim/lua/plugins/cmp.lua
··· 1 + return { 2 + { 3 + "L3MON4D3/LuaSnip", 4 + opts = { 5 + enable_autosnippets = true, 6 + store_selection_keys = "<Tab>", 7 + }, 8 + }, 9 + 10 + { 11 + "saghen/blink.cmp", 12 + dependencies = { "L3MON4D3/LuaSnip" }, 13 + opts = { 14 + appearance = { 15 + nerd_font_variant = "mono", 16 + kind_icons = { 17 + Class = "󰠱 ", 18 + Color = "󰏘 ", 19 + Constant = "󰏿 ", 20 + Constructor = "󰊕 ", 21 + Enum = "󰕘 ", 22 + EnumMember = "󰕘 ", 23 + Event = "󰉁 ", 24 + Field = "󰜢 ", 25 + File = "󰈙 ", 26 + Folder = "󰉋 ", 27 + Function = "󰡱 ", 28 + Interface = "󰜰 ", 29 + Keyword = "󰌋 ", 30 + Method = "󰊕 ", 31 + Module = "󰕳 ", 32 + Operator = "󰆕 ", 33 + Property = "󰜢 ", 34 + Reference = "󰈇 ", 35 + Snippet = "󰩫 ", 36 + Struct = "󰠱 ", 37 + Text = "󰊄 ", 38 + TypeParameter = "󰊄 ", 39 + Unit = "󰑭 ", 40 + Value = "󰎠 ", 41 + Variable = "󱀍 ", 42 + }, 43 + }, 44 + completion = { 45 + accept = { auto_brackets = { enabled = true } }, 46 + documentation = { auto_show = true, window = { border = "solid" } }, 47 + ghost_text = { enabled = false }, 48 + menu = { border = "solid", max_height = 30 }, 49 + }, 50 + keymap = { 51 + preset = "none", 52 + ["<C-Space>"] = { "show" }, 53 + ["<CR>"] = { "accept", "fallback" }, 54 + ["<Esc>"] = { "cancel", "fallback" }, 55 + ["<S-Tab>"] = { "select_prev", "fallback" }, 56 + ["<Tab>"] = { "select_next", "fallback" }, 57 + }, 58 + snippets = { preset = "luasnip" }, 59 + sources = { 60 + default = { "lsp", "path", "snippets", "buffer" }, 61 + providers = { 62 + buffer = { min_keyword_length = 3, score_offset = -3 }, 63 + path = { min_keyword_length = 3 }, 64 + snippets = { max_items = 8, min_keyword_length = 3 }, 65 + }, 66 + }, 67 + }, 68 + }, 69 + }
+62
nvim/lua/plugins/colorscheme.lua
··· 1 + return { 2 + { 3 + "catppuccin/nvim", 4 + name = "catppuccin", 5 + lazy = false, 6 + priority = 1000, 7 + opts = { 8 + background = { dark = "mocha", light = "macchiato" }, 9 + flavour = "macchiato", 10 + transparent_background = true, 11 + no_bold = false, 12 + no_italic = false, 13 + no_underline = false, 14 + custom_highlights = function(highlights) 15 + return { 16 + CursorLineNr = { fg = highlights.peach, style = {} }, 17 + NavicText = { fg = highlights.text }, 18 + } 19 + end, 20 + integrations = { 21 + blink_cmp = true, 22 + dap = true, 23 + dap_ui = true, 24 + fidget = true, 25 + flash = true, 26 + gitsigns = true, 27 + illuminate = { enabled = true, lsp = true }, 28 + indent_blankline = { enabled = true }, 29 + mason = true, 30 + mini = { enabled = true }, 31 + native_lsp = { 32 + enabled = true, 33 + inlay_hints = { background = true }, 34 + underlines = { 35 + errors = { "underline" }, 36 + hints = { "underline" }, 37 + information = { "underline" }, 38 + warnings = { "underline" }, 39 + }, 40 + virtual_text = { 41 + errors = { "italic" }, 42 + hints = { "italic" }, 43 + information = { "italic" }, 44 + ok = { "italic" }, 45 + warnings = { "italic" }, 46 + }, 47 + }, 48 + navic = { custom_bg = "NONE", enabled = true }, 49 + neotree = true, 50 + notify = true, 51 + telescope = { enabled = true }, 52 + treesitter = true, 53 + which_key = true, 54 + }, 55 + }, 56 + }, 57 + 58 + { 59 + "LazyVim/LazyVim", 60 + opts = { colorscheme = "catppuccin-macchiato" }, 61 + }, 62 + }
+41
nvim/lua/plugins/conform.lua
··· 1 + return { 2 + { 3 + "stevearc/conform.nvim", 4 + opts = { 5 + format_on_save = function(bufnr) 6 + if vim.g.disable_autoformat or vim.b[bufnr].disable_autoformat then 7 + return 8 + end 9 + return { timeout_ms = 500, lsp_format = "fallback" } 10 + end, 11 + formatters_by_ft = { 12 + ["_"] = { "trim_whitespace" }, 13 + bash = { "shellcheck", "shellharden", "shfmt" }, 14 + c = { "clang_format" }, 15 + cmake = { "cmake_format" }, 16 + cpp = { "clang_format" }, 17 + css = { "prettierd", "prettier", stop_after_first = true }, 18 + html = { "prettierd", "prettier", stop_after_first = true }, 19 + javascript = { "prettierd", "prettier", stop_after_first = true }, 20 + json = { "jq" }, 21 + lua = { "stylua" }, 22 + markdown = { "prettierd", "prettier", stop_after_first = true }, 23 + nix = { "nixfmt" }, 24 + python = { "black" }, 25 + rust = { "rustfmt" }, 26 + typescript = { "prettierd", "prettier", stop_after_first = true }, 27 + yaml = { "prettierd", "prettier", stop_after_first = true }, 28 + }, 29 + notify_on_error = true, 30 + }, 31 + init = function() 32 + vim.api.nvim_create_user_command("FormatToggle", function(args) 33 + if args.bang then 34 + vim.b.disable_autoformat = not vim.b.disable_autoformat 35 + else 36 + vim.g.disable_autoformat = not vim.g.disable_autoformat 37 + end 38 + end, { bang = true, desc = "Toggle autoformat on save" }) 39 + end, 40 + }, 41 + }
+152
nvim/lua/plugins/dap.lua
··· 1 + return { 2 + { 3 + "mfussenegger/nvim-dap", 4 + init = function() 5 + local signs = { 6 + DapBreakpoint = { text = "", texthl = "DapBreakpoint" }, 7 + DapBreakpointCondition = { text = "", texthl = "DapBreakpointCondition" }, 8 + DapBreakpointRejected = { text = "", texthl = "DapBreakpointRejected" }, 9 + DapLogPoint = { text = "", texthl = "DapLogPoint" }, 10 + DapStopped = { text = "", texthl = "DapStopped" }, 11 + } 12 + for name, sign in pairs(signs) do 13 + vim.fn.sign_define(name, sign) 14 + end 15 + end, 16 + config = function() 17 + local dap = require("dap") 18 + dap.adapters.lldb = { 19 + type = "executable", 20 + command = "/Library/Developer/CommandLineTools/usr/bin/lldb-dap", 21 + } 22 + end, 23 + keys = { 24 + { 25 + "<F5>", 26 + function() 27 + local dap = require("dap") 28 + if dap.session() then 29 + dap.continue() 30 + return 31 + end 32 + pcall(function() 33 + require("overseer").close() 34 + end) 35 + local cwd = vim.fn.getcwd() 36 + local launch_json_path = cwd .. "/.vscode/launch.json" 37 + if vim.fn.filereadable(launch_json_path) == 1 then 38 + dap.configurations.c = {} 39 + dap.configurations.cpp = {} 40 + dap.configurations.rust = {} 41 + local ok, vscode = pcall(require, "dap.ext.vscode") 42 + if ok then 43 + vscode.load_launchjs(launch_json_path, { 44 + lldb = { "c", "cpp", "rust" }, 45 + cppdbg = { "c", "cpp" }, 46 + gdb = { "c", "cpp" }, 47 + }) 48 + end 49 + local ft = vim.bo.filetype 50 + local configs = dap.configurations[ft] or {} 51 + if #configs == 1 then 52 + dap.run(configs[1]) 53 + return 54 + elseif #configs > 1 then 55 + vim.ui.select(configs, { 56 + prompt = "Select debug configuration:", 57 + format_item = function(c) 58 + return c.name 59 + end, 60 + }, function(selected) 61 + if selected then 62 + dap.run(selected) 63 + end 64 + end) 65 + return 66 + end 67 + end 68 + dap.continue() 69 + end, 70 + desc = "Debug: Start / Continue", 71 + }, 72 + { 73 + "<F9>", 74 + function() 75 + require("dap").toggle_breakpoint() 76 + end, 77 + desc = "Toggle breakpoint", 78 + }, 79 + { 80 + "<F10>", 81 + function() 82 + require("dap").step_over() 83 + end, 84 + desc = "Step over", 85 + }, 86 + { 87 + "<F11>", 88 + function() 89 + require("dap").step_into() 90 + end, 91 + desc = "Step into", 92 + }, 93 + { 94 + "<F12>", 95 + function() 96 + require("dap").step_out() 97 + end, 98 + desc = "Step out", 99 + }, 100 + { 101 + "<leader>q", 102 + function() 103 + require("dap").terminate() 104 + end, 105 + desc = "Terminate debugging", 106 + }, 107 + { 108 + "<leader>dh", 109 + function() 110 + require("dap.ui.widgets").hover() 111 + end, 112 + desc = "Debugger hover", 113 + }, 114 + }, 115 + }, 116 + 117 + { 118 + "rcarriga/nvim-dap-ui", 119 + opts = { 120 + layouts = { 121 + { 122 + elements = { 123 + { id = "breakpoints", size = 0.25 }, 124 + { id = "stacks", size = 0.25 }, 125 + { id = "watches", size = 0.25 }, 126 + }, 127 + position = "left", 128 + size = 45, 129 + }, 130 + { elements = { { id = "scopes", size = 1 } }, position = "bottom", size = 20 }, 131 + { elements = { { id = "repl", size = 1 } }, position = "right", size = 45 }, 132 + }, 133 + }, 134 + keys = { 135 + { 136 + "<leader>d", 137 + function() 138 + require("dapui").toggle({ reset = true }) 139 + end, 140 + desc = "Toggle debugger UI", 141 + }, 142 + { 143 + "<leader>e", 144 + function() 145 + require("dapui").eval() 146 + end, 147 + mode = "v", 148 + desc = "Evaluate input", 149 + }, 150 + }, 151 + }, 152 + }
+5
nvim/lua/plugins/disabled.lua
··· 1 + return { 2 + { "folke/tokyonight.nvim", enabled = false }, 3 + { "folke/noice.nvim", enabled = false }, 4 + { "folke/snacks.nvim", opts = { notifier = { enabled = false } } }, 5 + }
+48
nvim/lua/plugins/fidget.lua
··· 1 + return { 2 + { 3 + "j-hui/fidget.nvim", 4 + event = "VeryLazy", 5 + opts = { 6 + notification = { 7 + override_vim_notify = true, 8 + filter = vim.log.levels.INFO, 9 + history_size = 128, 10 + poll_rate = 10, 11 + view = { 12 + group_separator = "---", 13 + group_separator_hl = "Comment", 14 + icon_separator = " ", 15 + stack_upwards = true, 16 + }, 17 + window = { 18 + align = "bottom", 19 + border = "none", 20 + max_height = 0, 21 + max_width = 0, 22 + normal_hl = "Comment", 23 + relative = "editor", 24 + winblend = 0, 25 + x_padding = 1, 26 + y_padding = 0, 27 + zindex = 45, 28 + }, 29 + }, 30 + progress = { 31 + display = { 32 + done_icon = "✔", 33 + done_style = "Constant", 34 + done_ttl = 3, 35 + group_style = "Title", 36 + icon_style = "Question", 37 + progress_icon = { pattern = "dots", period = 1 }, 38 + progress_style = "WarningMsg", 39 + render_limit = 16, 40 + skip_history = true, 41 + }, 42 + ignore_done_already = false, 43 + ignore_empty_message = false, 44 + suppress_on_insert = true, 45 + }, 46 + }, 47 + }, 48 + }
+15
nvim/lua/plugins/gitsigns.lua
··· 1 + return { 2 + { 3 + "lewis6991/gitsigns.nvim", 4 + opts = { 5 + signs = { 6 + add = { text = "┃" }, 7 + change = { text = "┃" }, 8 + changedelete = { text = "~" }, 9 + delete = { text = "_" }, 10 + topdelete = { text = "‾" }, 11 + untracked = { text = "┆" }, 12 + }, 13 + }, 14 + }, 15 + }
+12
nvim/lua/plugins/illuminate.lua
··· 1 + return { 2 + { 3 + "RRethy/vim-illuminate", 4 + event = "BufReadPost", 5 + config = function() 6 + require("illuminate").configure({ 7 + filetypes_denylist = { "Outline", "TelescopePrompt", "alpha", "harpoon", "reason", "snacks_dashboard" }, 8 + under_cursor = false, 9 + }) 10 + end, 11 + }, 12 + }
+1
nvim/lua/plugins/init.lua
··· 1 + return {}
+74
nvim/lua/plugins/lsp.lua
··· 1 + return { 2 + { 3 + "neovim/nvim-lspconfig", 4 + opts = function(_, opts) 5 + opts.servers = opts.servers or {} 6 + opts.servers["*"] = opts.servers["*"] or {} 7 + opts.servers["*"].capabilities = vim.tbl_deep_extend( 8 + "force", 9 + opts.servers["*"].capabilities or {}, 10 + { 11 + textDocument = { 12 + foldingRange = { dynamicRegistration = false, lineFoldingOnly = true }, 13 + }, 14 + } 15 + ) 16 + 17 + opts.servers.basedpyright = { enabled = false } 18 + opts.servers.ruff = vim.tbl_deep_extend("force", opts.servers.ruff or {}, { enabled = false }) 19 + opts.servers.nil_ls = { enabled = false } 20 + 21 + opts.servers.clangd = vim.tbl_deep_extend("force", opts.servers.clangd or {}, { 22 + cmd = { "clangd", "--offset-encoding=utf-16", "--background-index", "-j", "20", "--clang-tidy" }, 23 + }) 24 + opts.servers.nixd = { 25 + settings = { 26 + nixd = { nixpkgs = { expr = "import <nixpkgs> { }" } }, 27 + }, 28 + } 29 + opts.servers.pyright = opts.servers.pyright or {} 30 + opts.servers.html = opts.servers.html or {} 31 + end, 32 + init = function() 33 + vim.lsp.handlers["textDocument/hover"] = vim.lsp.with(vim.lsp.handlers.hover, { border = "rounded" }) 34 + vim.lsp.handlers["textDocument/signatureHelp"] = 35 + vim.lsp.with(vim.lsp.handlers.signature_help, { border = "rounded" }) 36 + 37 + vim.api.nvim_create_autocmd("LspAttach", { 38 + group = vim.api.nvim_create_augroup("user_lsp_keymaps", { clear = true }), 39 + callback = function(args) 40 + local bufnr = args.buf 41 + local function bmap(mode, lhs, rhs, desc) 42 + vim.keymap.set(mode, lhs, rhs, { buffer = bufnr, silent = true, desc = desc }) 43 + end 44 + bmap("n", "<leader>cw", vim.lsp.buf.workspace_symbol, "Workspace symbol") 45 + bmap("n", "<leader>gD", vim.lsp.buf.declaration, "Goto declaration") 46 + bmap("n", "<leader>gT", vim.lsp.buf.type_definition, "Type definition") 47 + bmap("n", "<leader>gd", vim.lsp.buf.definition, "Goto definition") 48 + bmap("n", "<leader>gi", vim.lsp.buf.implementation, "Goto implementation") 49 + bmap("n", "<leader>rr", vim.lsp.buf.rename, "Rename") 50 + bmap("n", "K", vim.lsp.buf.hover, "Hover") 51 + end, 52 + }) 53 + end, 54 + }, 55 + 56 + { 57 + "mason-org/mason.nvim", 58 + opts = function(_, opts) 59 + opts.ensure_installed = opts.ensure_installed or {} 60 + vim.list_extend(opts.ensure_installed, { 61 + "black", 62 + "clang-format", 63 + "html-lsp", 64 + "jq", 65 + "nixd", 66 + "pyright", 67 + "shellcheck", 68 + "shellharden", 69 + "shfmt", 70 + "stylua", 71 + }) 72 + end, 73 + }, 74 + }
+40
nvim/lua/plugins/lualine.lua
··· 1 + return { 2 + "nvim-lualine/lualine.nvim", 3 + dependencies = { 4 + "SmiteshP/nvim-navic", 5 + "stevearc/overseer.nvim", 6 + }, 7 + opts = function() 8 + return { 9 + extensions = { "fzf", "neo-tree" }, 10 + globalstatus = true, 11 + options = { 12 + component_separators = { left = "", right = "" }, 13 + section_separators = { left = "", right = "" }, 14 + disabled_filetypes = { statusline = { "snacks_dashboard" } }, 15 + }, 16 + sections = { 17 + lualine_a = { { "mode", icon = { " " } } }, 18 + lualine_b = { 19 + { "branch", icon = "" }, 20 + { "diff", symbols = { added = " ", modified = " ", removed = " " } }, 21 + }, 22 + lualine_c = { 23 + { 24 + "diagnostics", 25 + sources = { "nvim_lsp" }, 26 + symbols = { error = " ", hint = "󰝶 ", info = " ", warn = " " }, 27 + }, 28 + { "navic" }, 29 + }, 30 + lualine_x = { 31 + { "filetype", icon_only = true, padding = { left = 1, right = 0 }, separator = "" }, 32 + { "filename", path = 1 }, 33 + }, 34 + lualine_y = { "overseer", "progress" }, 35 + lualine_z = { "location" }, 36 + }, 37 + theme = "catppuccin", 38 + } 39 + end, 40 + }
+38
nvim/lua/plugins/navic.lua
··· 1 + return { 2 + { 3 + "SmiteshP/nvim-navic", 4 + opts = { 5 + depth_limit = 5, 6 + highlight = true, 7 + lsp = { auto_attach = true }, 8 + separator = " ", 9 + icons = { 10 + Array = "󱃵 ", 11 + Boolean = " ", 12 + Class = " ", 13 + Constant = " ", 14 + Constructor = " ", 15 + Enum = " ", 16 + EnumMember = " ", 17 + Event = " ", 18 + Field = "󰽏 ", 19 + File = " ", 20 + Function = "󰡱 ", 21 + Interface = " ", 22 + Key = " ", 23 + Method = " ", 24 + Module = "󰕳 ", 25 + Namespace = " ", 26 + Null = "󰟢 ", 27 + Number = " ", 28 + Object = " ", 29 + Operator = " ", 30 + Package = "󰏖 ", 31 + String = " ", 32 + Struct = " ", 33 + TypeParameter = " ", 34 + Variable = " ", 35 + }, 36 + }, 37 + }, 38 + }
+33
nvim/lua/plugins/neo-tree.lua
··· 1 + return { 2 + "nvim-neo-tree/neo-tree.nvim", 3 + opts = function(_, opts) 4 + opts.sources = { "filesystem", "buffers", "git_status", "document_symbols" } 5 + opts.close_if_last_window = true 6 + opts.add_blank_line_at_top = false 7 + opts.filesystem = vim.tbl_deep_extend("force", opts.filesystem or {}, { 8 + bind_to_cwd = false, 9 + follow_current_file = { enabled = true, leave_dirs_open = false }, 10 + }) 11 + opts.default_component_configs = vim.tbl_deep_extend("force", opts.default_component_configs or {}, { 12 + git_status = { 13 + symbols = { 14 + added = " ", 15 + conflict = "󰩌 ", 16 + deleted = "󱂥", 17 + ignored = " ", 18 + modified = " ", 19 + renamed = "󰑕", 20 + staged = "󰩍", 21 + unstaged = "", 22 + untracked = "", 23 + }, 24 + }, 25 + indent = { 26 + expander_collapsed = "", 27 + expander_expanded = " ", 28 + expander_highlight = "NeoTreeExpander", 29 + with_expanders = true, 30 + }, 31 + }) 32 + end, 33 + }
+18
nvim/lua/plugins/overseer.lua
··· 1 + return { 2 + { 3 + "stevearc/overseer.nvim", 4 + cmd = { "OverseerRun", "OverseerToggle", "OverseerOpen", "OverseerClose" }, 5 + opts = { 6 + templates = { "builtin", "just" }, 7 + task_list = { 8 + default_detail = 2, 9 + direction = "bottom", 10 + max_height = math.floor(vim.o.lines * 0.3), 11 + min_height = 15, 12 + }, 13 + }, 14 + keys = { 15 + { "<leader>r", "<cmd>OverseerRun<cr>", desc = "Run without debugger", silent = true }, 16 + }, 17 + }, 18 + }
+27
nvim/lua/plugins/telescope.lua
··· 1 + return { 2 + { 3 + "nvim-telescope/telescope.nvim", 4 + dependencies = { 5 + { "nvim-telescope/telescope-fzf-native.nvim", build = "make" }, 6 + "nvim-telescope/telescope-file-browser.nvim", 7 + "nvim-telescope/telescope-ui-select.nvim", 8 + }, 9 + opts = function(_, opts) 10 + opts.defaults = vim.tbl_deep_extend("force", opts.defaults or {}, { 11 + layout_config = { horizontal = { prompt_position = "bottom" } }, 12 + sorting_strategy = "ascending", 13 + }) 14 + opts.pickers = vim.tbl_deep_extend("force", opts.pickers or {}, { 15 + colorscheme = { enable_preview = true }, 16 + }) 17 + opts.extensions = vim.tbl_deep_extend("force", opts.extensions or {}, {}) 18 + end, 19 + config = function(_, opts) 20 + local telescope = require("telescope") 21 + telescope.setup(opts) 22 + telescope.load_extension("fzf") 23 + telescope.load_extension("ui-select") 24 + telescope.load_extension("file_browser") 25 + end, 26 + }, 27 + }
+65
nvim/lua/plugins/trailblazer.lua
··· 1 + return { 2 + { 3 + "LeonHeidelbach/trailblazer.nvim", 4 + dependencies = { "catppuccin/nvim" }, 5 + keys = { 6 + { 7 + "<leader>m", 8 + function() 9 + local tb = require("trailblazer") 10 + tb.new_trail_mark() 11 + tb.open_trail_mark_list() 12 + vim.cmd("wincmd p") 13 + end, 14 + desc = "Create new mark", 15 + silent = true, 16 + }, 17 + }, 18 + config = function() 19 + local colors = require("catppuccin.palettes").get_palette() 20 + require("trailblazer").setup({ 21 + trail_options = { 22 + available_trail_mark_modes = { 23 + "global_chron_buf_switch_group_chron", 24 + "buffer_local_line_sorted", 25 + }, 26 + current_trail_mark_mode = "global_chron_buf_switch_group_chron", 27 + verbose_trail_mark_select = false, 28 + mark_symbol = "•", 29 + newest_mark_symbol = "", 30 + cursor_mark_symbol = "", 31 + next_mark_symbol = "ﭠ", 32 + previous_mark_symbol = "ﭢ", 33 + multiple_mark_symbol_counters_enabled = false, 34 + trail_mark_symbol_line_indicators_enabled = true, 35 + trail_mark_list_rows = 5, 36 + move_to_nearest_before_peek = true, 37 + move_to_nearest_before_peek_motion_directive_up = "up", 38 + move_to_nearest_before_peek_motion_directive_down = "down", 39 + }, 40 + mappings = nil, 41 + quickfix_mappings = { 42 + v = { 43 + actions = { 44 + qf_action_move_selected_trail_marks_down = "<C-k>", 45 + qf_action_move_selected_trail_marks_up = "<C-l>", 46 + }, 47 + }, 48 + }, 49 + hl_groups = { 50 + TrailBlazerTrailMark = { guifg = colors.overlay0, guibg = "none", gui = "bold" }, 51 + TrailBlazerTrailMarkNext = { guifg = colors.overlay1, guibg = "none" }, 52 + TrailBlazerTrailMarkPrevious = { guifg = colors.overlay1, guibg = "none" }, 53 + TrailBlazerTrailMarkCursor = { guifg = colors.crust, guibg = colors.green }, 54 + TrailBlazerTrailMarkNewest = { guifg = colors.crust, guibg = colors.sky }, 55 + TrailBlazerTrailMarkGlobalChronBufSwitchGroupChron = { 56 + guifg = colors.crust, 57 + guibg = colors.peach, 58 + }, 59 + TrailBlazerTrailMarkBufferLocalLineSorted = { guifg = colors.crust, guibg = colors.mauve }, 60 + TrailBlazerTrailMarkCustomOrd = { guifg = colors.crust, guibg = colors.yellow, gui = "bold" }, 61 + }, 62 + }) 63 + end, 64 + }, 65 + }
+18
nvim/lua/plugins/treesitter.lua
··· 1 + return { 2 + "nvim-treesitter/nvim-treesitter", 3 + opts = function(_, opts) 4 + opts.ensure_installed = opts.ensure_installed or {} 5 + vim.list_extend(opts.ensure_installed, { 6 + "bash", 7 + "dockerfile", 8 + "gitignore", 9 + "ini", 10 + "regex", 11 + "toml", 12 + }) 13 + opts.highlight = opts.highlight or {} 14 + opts.highlight.enable = true 15 + opts.indent = opts.indent or {} 16 + opts.indent.enable = true 17 + end, 18 + }
+45
nvim/lua/plugins/ufo.lua
··· 1 + return { 2 + { 3 + "kevinhwang91/nvim-ufo", 4 + dependencies = { "kevinhwang91/promise-async" }, 5 + event = "BufReadPost", 6 + opts = { 7 + provider_selector = function(_, _, _) 8 + return { "treesitter", "indent" } 9 + end, 10 + fold_virt_text_handler = function(virtText, lnum, endLnum, width, truncate) 11 + local alignLimitByTextWidth = true 12 + local alignLimiter = alignLimitByTextWidth and vim.opt.textwidth["_value"] 13 + or vim.api.nvim_win_get_width(0) 14 + local newVirtText = {} 15 + local totalLines = vim.api.nvim_buf_line_count(0) 16 + local foldedLines = endLnum - lnum 17 + local suffix = (" 󰁂 %d %d%%"):format(foldedLines, foldedLines / totalLines * 100) 18 + local sufWidth = vim.fn.strdisplaywidth(suffix) 19 + local targetWidth = width - sufWidth 20 + local curWidth = 0 21 + for _, chunk in ipairs(virtText) do 22 + local chunkText = chunk[1] 23 + local chunkWidth = vim.fn.strdisplaywidth(chunkText) 24 + if targetWidth > curWidth + chunkWidth then 25 + table.insert(newVirtText, chunk) 26 + else 27 + chunkText = truncate(chunkText, targetWidth - curWidth) 28 + local hlGroup = chunk[2] 29 + table.insert(newVirtText, { chunkText, hlGroup }) 30 + chunkWidth = vim.fn.strdisplaywidth(chunkText) 31 + if curWidth + chunkWidth < targetWidth then 32 + suffix = suffix .. (" "):rep(targetWidth - curWidth - chunkWidth) 33 + end 34 + break 35 + end 36 + curWidth = curWidth + chunkWidth 37 + end 38 + local rAlignAppndx = math.max(math.min(alignLimiter, width - 1) - curWidth - sufWidth, 0) 39 + suffix = (" "):rep(rAlignAppndx) .. suffix 40 + table.insert(newVirtText, { suffix, "MoreMsg" }) 41 + return newVirtText 42 + end, 43 + }, 44 + }, 45 + }
+9
nvim/lua/plugins/undotree.lua
··· 1 + return { 2 + { 3 + "mbbill/undotree", 4 + cmd = { "UndotreeToggle", "UndotreeShow", "UndotreeHide", "UndotreeFocus" }, 5 + keys = { 6 + { "<leader>ut", "<cmd>UndotreeToggle<cr>", desc = "Toggle undotree", silent = true }, 7 + }, 8 + }, 9 + }