{"id":24510090,"url":"https://github.com/wunki/dot-nvim","last_synced_at":"2026-04-18T07:33:55.579Z","repository":{"id":272577102,"uuid":"912189107","full_name":"wunki/dot-nvim","owner":"wunki","description":"My own minimal Neovim configuration. I try to keep clutter and the amount of plugins to a minimum.","archived":false,"fork":false,"pushed_at":"2025-10-01T09:34:31.000Z","size":135,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-10-01T11:30:04.979Z","etag":null,"topics":["dotfiles","lua","minimal","neovim"],"latest_commit_sha":null,"homepage":"https://petar.dev","language":"Lua","has_issues":false,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/wunki.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2025-01-04T21:21:22.000Z","updated_at":"2025-10-01T09:34:35.000Z","dependencies_parsed_at":"2025-01-15T11:44:16.458Z","dependency_job_id":"53da4734-80a2-4536-ba95-eff5dd9bced5","html_url":"https://github.com/wunki/dot-nvim","commit_stats":null,"previous_names":["wunki/dot-nvim"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/wunki/dot-nvim","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/wunki%2Fdot-nvim","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/wunki%2Fdot-nvim/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/wunki%2Fdot-nvim/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/wunki%2Fdot-nvim/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/wunki","download_url":"https://codeload.github.com/wunki/dot-nvim/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/wunki%2Fdot-nvim/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":279002348,"owners_count":26083357,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","status":"online","status_checked_at":"2025-10-09T02:00:07.460Z","response_time":59,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["dotfiles","lua","minimal","neovim"],"created_at":"2025-01-22T00:25:02.370Z","updated_at":"2026-04-18T07:33:55.573Z","avatar_url":"https://github.com/wunki.png","language":"Lua","funding_links":[],"categories":[],"sub_categories":[],"readme":"# .nvim\n\nA minimal Neovim configuration built on native APIs and lazy-loaded plugins. Fast to start, easy to read, and small enough to understand in one sitting. As little as distractions as possible while coding.\n\n## Why this?\n\nMost Neovim configurations fall into two camps: starter kits that hide complexity behind abstractions, and personal configs so tangled they're useful only to their author. This one tries to sit between them.\n\nA few things it does that might save you time:\n\n- **Native LSP, no wrapper plugin.** Language servers are configured with `vim.lsp.config()` and `vim.lsp.enable()` directly. Servers that aren't installed get skipped without errors. You can read the setup in one file and understand what's happening.\n- **AI coding assistant integration.** Auto-refreshes buffers when files change on disk (for when Claude Code or similar tools edit files outside Neovim), plus dedicated keybindings for Claude Code and OpenCode.\n- **Auto dark/light mode on macOS.** Follows your system appearance setting and switches colorschemes automatically.\n- **Completion on demand.** The completion menu stays hidden until you summon it with `\u003cC-Space\u003e`. No popups while you think.\n\nThe config is around 600 lines of Lua across 17 files. You can fork the whole thing as a starter, or pull individual files into your own setup.\n\n## Structure\n\n```\ninit.lua                        Core options, autocmds, clipboard, whitespace\nlua/config/\n  lazy.lua                      Plugin manager bootstrap\n  keybindings.lua               Global keymaps (Lua execution, UI toggles, LSP info)\n  plugins/\n    lsp.lua                     Language server configs (native vim.lsp API)\n    completion.lua              blink.cmp with snippet support\n    conform.lua                 Format on save (Biome/Prettier/Stylua/rustfmt/gofmt)\n    treesitter.lua              Syntax highlighting for 20+ languages\n    snacks.lua                  Fuzzy finder, git browse, lazygit, zen mode\n    harpoon.lua                 Quick file switching (with Snacks picker integration)\n    mini.lua                    Statusline, file explorer, pairs, surround, textobjects\n    colorscheme.lua             Gondolin (dark) + Melange (light), auto-switching\n    gitsigns.lua                Git change indicators in the sign column\n    which-key.lua               Keybinding discovery popup\n    claudecode.lua              Claude Code terminal integration\n    opencode.lua                OpenCode AI assistant\n    clojure.lua                 Conjure REPL, paredit, rainbow delimiters\n    markdown.lua                Rendered markdown preview in-buffer\n    todo-comments.lua           Highlighted TODO/FIXME/HACK comments\nafter/queries/\n  elixir/highlights.scm         Custom Elixir attribute highlighting\n```\n\n## Install\n\nBack up any existing config first:\n\n```bash\nmv ~/.config/nvim ~/.config/nvim.bak\n```\n\nClone and start Neovim:\n\n```bash\ngit clone https://github.com/wunki/dot-nvim ~/.config/nvim\nnvim\n```\n\nPlugins install automatically on first launch. Treesitter parsers download in the background.\n\n## Dependencies\n\nLanguage servers and formatters are installed globally, not managed by Neovim. The config skips any server whose binary isn't in your PATH, so install only what you need.\n\n### Language servers\n\n| Server                       | Languages  | Install                                                |\n| ---------------------------- | ---------- | ------------------------------------------------------ |\n| `lua-language-server`        | Lua        | `brew install lua-language-server`                     |\n| `typescript-language-server` | JS/TS      | `npm install -g typescript-language-server typescript` |\n| `svelte-language-server`     | Svelte     | `npm install -g svelte-language-server`                |\n| `biome`                      | JS/TS/JSON | `npm install -g @biomejs/biome`                        |\n| `clangd`                     | C/C++      | `brew install llvm` or `xcode-select --install`        |\n| `gopls`                      | Go         | `go install golang.org/x/tools/gopls@latest`           |\n| `rust-analyzer`              | Rust       | `rustup component add rust-analyzer`                   |\n| `clojure-lsp`                | Clojure    | `brew install clojure-lsp/brew/clojure-lsp-native`     |\n\n### Formatters\n\n| Formatter     | Languages                            | Install                                              |\n| ------------- | ------------------------------------ | ---------------------------------------------------- |\n| `stylua`      | Lua                                  | `brew install stylua`                                |\n| `prettierd`   | JS/TS/HTML/JSON/YAML/Markdown/Svelte | `npm install -g @fsouza/prettierd`                   |\n| `goimports`   | Go                                   | `go install golang.org/x/tools/cmd/goimports@latest` |\n| `rustfmt`     | Rust                                 | `rustup component add rustfmt`                       |\n| `fish_indent` | Fish                                 | Included with Fish shell                             |\n\nFor Svelte formatting with Prettier:\n\n```bash\nnpm install -g prettier-plugin-svelte\n```\n\n### Other tools\n\n| Tool      | Purpose                            | Install                |\n| --------- | ---------------------------------- | ---------------------- |\n| `lazygit` | Git TUI (opened with `\u003cleader\u003egg`) | `brew install lazygit` |\n\n## Keybindings\n\nLeader is `\u003cSpace\u003e`. Local leader is `\\`.\n\nKeybindings are discoverable at runtime: press `\u003cleader\u003e` and wait for the which-key popup.\n\n### Navigation and files\n\n| Key          | Action                                    |\n| ------------ | ----------------------------------------- |\n| `\u003cleader\u003eff` | Find files (respects `.gitignore`)        |\n| `\u003cleader\u003efF` | Find all files (including hidden/ignored) |\n| `\u003cleader\u003efg` | Grep across project                       |\n| `\u003cleader\u003efw` | Grep word under cursor                    |\n| `\u003cleader\u003efc` | Find Neovim config files                  |\n| `\u003cleader\u003efd` | Find dotfiles                             |\n| `\u003cleader\u003efh` | Search help tags                          |\n| `\u003cleader\u003efT` | Find TODO comments                        |\n| `\u003cC-b\u003e`      | Toggle file explorer at current file      |\n| `\u003cleader\u003efm` | File explorer at working directory        |\n\n### Harpoon (quick file switching)\n\n| Key                | Action                     |\n| ------------------ | -------------------------- |\n| `\u003cleader\u003eha`       | Add current file           |\n| `\u003cleader\u003ehh`       | Open quick menu            |\n| `\u003cleader\u003ehf`       | Fuzzy-find harpooned files |\n| `\u003cleader\u003eh1`..`h5` | Jump to file 1-5           |\n\n### LSP\n\n| Key          | Action                          |\n| ------------ | ------------------------------- |\n| `gd`         | Go to definition (with preview) |\n| `grn`        | Rename symbol                   |\n| `gra`        | Code action                     |\n| `grr`        | Find references                 |\n| `gri`        | Go to implementation            |\n| `grc`        | Incoming calls                  |\n| `gO`         | Document symbols                |\n| `\u003cleader\u003eld` | Project diagnostics             |\n| `\u003cleader\u003elD` | Buffer diagnostics              |\n| `\u003cleader\u003eli` | Show attached LSP clients       |\n| `\u003cleader\u003elr` | Restart LSP clients             |\n\n### Git\n\n| Key          | Action                                               |\n| ------------ | ---------------------------------------------------- |\n| `\u003cleader\u003egg` | Open LazyGit                                         |\n| `\u003cleader\u003egy` | Open current line on GitHub (visual mode: selection) |\n\n### AI assistants\n\n| Key          | Action                               |\n| ------------ | ------------------------------------ |\n| `\u003cleader\u003eac` | Toggle Claude Code terminal          |\n| `\u003cleader\u003eas` | Send selection to Claude (visual)    |\n| `\u003cleader\u003eab` | Add current buffer to Claude context |\n| `\u003cleader\u003eoo` | Toggle OpenCode                      |\n| `\u003cleader\u003eoa` | Ask OpenCode about current file      |\n| `\u003cleader\u003eos` | Select OpenCode action               |\n\n### UI and utilities\n\n| Key          | Action                      |\n| ------------ | --------------------------- |\n| `\u003cEsc\u003e`      | Clear search highlights     |\n| `\u003cleader\u003eul` | Toggle line numbers         |\n| `\u003cleader\u003eub` | Toggle statusline           |\n| `\u003cleader\u003euz` | Toggle zen mode             |\n| `\u003cleader\u003eur` | Reload colorscheme          |\n| `\u003cleader\u003ex`  | Execute current line as Lua |\n| `\u003cleader\u003eX`  | Source current file         |\n\n## Design decisions\n\nA few choices worth knowing about if you're borrowing from this config:\n\n**No Mason.** Language servers and formatters live outside Neovim. This keeps the config simpler and avoids a second package manager. The tradeoff: you install tools yourself.\n\n**No nvim-lspconfig.** Neovim 0.11+ has `vim.lsp.config()` and `vim.lsp.enable()` built in. The extra plugin layer isn't needed anymore. Each server is a table with `cmd`, `filetypes`, and `root_markers`.\n\n**Snacks over Telescope.** The config uses `folke/snacks.nvim` for fuzzy finding, git browsing, lazygit, and zen mode. Fewer plugins, same coverage.\n\n**blink.cmp over nvim-cmp.** Faster completion engine. The menu is configured to stay hidden until manually triggered, keeping the editing experience quiet.\n\n**Mini.nvim for small utilities.** Statusline, file explorer, auto-pairs, surround, and textobjects all come from `mini.nvim` instead of five separate plugins.\n\n## Customization\n\nAdd a plugin: create a file in `lua/config/plugins/` that returns a lazy.nvim spec table.\n\n```lua\n-- lua/config/plugins/example.lua\nreturn {\n  'author/plugin-name',\n  event = 'BufRead',\n  opts = {},\n}\n```\n\nAdd a language server: add an entry to the `servers` table in `lua/config/plugins/lsp.lua`.\n\n```lua\nyour_server = {\n  cmd = { 'your-server-binary', '--stdio' },\n  filetypes = { 'your-filetype' },\n  root_markers = { 'config-file', '.git' },\n},\n```\n\nIf the binary isn't found, the server is silently skipped.\n\n## Requirements\n\n- Neovim 0.12+ (uses native LSP APIs and `vim.lsp.config`)\n- Terminal with 24-bit color support\n- Git (for plugin installation)\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fwunki%2Fdot-nvim","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fwunki%2Fdot-nvim","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fwunki%2Fdot-nvim/lists"}