{"id":21986892,"url":"https://github.com/saforem2/nvim","last_synced_at":"2026-04-12T02:35:46.153Z","repository":{"id":350114709,"uuid":"1197733495","full_name":"saforem2/nvim","owner":"saforem2","description":"neovim config","archived":false,"fork":false,"pushed_at":"2026-04-08T23:08:25.000Z","size":40,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2026-04-09T01:11:51.511Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"Lua","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/saforem2.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","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":"2026-03-31T20:49:37.000Z","updated_at":"2026-04-08T23:08:29.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/saforem2/nvim","commit_stats":null,"previous_names":["saforem2/nvim"],"tags_count":null,"template":false,"template_full_name":null,"purl":"pkg:github/saforem2/nvim","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/saforem2%2Fnvim","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/saforem2%2Fnvim/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/saforem2%2Fnvim/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/saforem2%2Fnvim/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/saforem2","download_url":"https://codeload.github.com/saforem2/nvim/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/saforem2%2Fnvim/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":31702580,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-04-11T21:17:31.016Z","status":"online","status_checked_at":"2026-04-12T02:00:06.763Z","response_time":58,"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":[],"created_at":"2024-11-29T18:22:18.105Z","updated_at":"2026-04-12T02:35:46.145Z","avatar_url":"https://github.com/saforem2.png","language":"Lua","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Neovim Config (vim.pack)\n\nA Neovim 0.12+ config using the **built-in `vim.pack` API** — no lazy.nvim, no external plugin manager.\n\nMigrated from a LazyVim-based setup (`saforem2/starter`) to native Neovim APIs.\n\n## Directory Structure\n\n```\ninit.lua                    # Entry point: options → packs → keymaps → autocmds → LSP\nlua/\n  packs.lua                 # vim.pack.add() declarations + PackChanged build hooks\n  config/\n    options.lua             # Global vim options (loaded first, before plugins)\n    keymaps.lua             # Global keymaps\n    autocmds.lua            # Autocommands\n    icons.lua               # Shared icon constants (completion kinds, diagnostics, git)\n  style.lua                 # UI constants (border chars, emoji set)\nlsp/                        # Per-server LSP configs (Neovim 0.12+ native LSP)\nafter/plugin/               # Per-plugin setup() calls and keymaps\nafter/queries/              # Treesitter query overrides\nftplugin/                   # Filetype-specific settings (python, markdown, quarto, sh, r)\n```\n\n## LSP Servers\n\nAll servers use Neovim 0.12's native `vim.lsp.enable()` — no lspconfig or Mason required. Each server has a config file in `lsp/` returning a settings table.\n\n| Server | Language | Notes |\n|--------|----------|-------|\n| `pyright` | Python | Type checking, hover, completions (imports/linting deferred to ruff) |\n| `ruff` | Python | Linting + formatting |\n| `ty` | Python | Astral's type checker (inlay hints for variable types disabled) |\n| `luals` | Lua | Third-party checking off, telemetry off |\n| `marksman` | Markdown | Wiki-links, references, TOC |\n| `jsonls` | JSON | Validation enabled |\n| `ast_grep` | Multi | AST-based structural search/lint |\n| `ltex_plus` | Text | Grammar/spell checking |\n| `copilot-language-server` | AI | GitHub Copilot |\n\n### Formatting (conform.nvim)\n\n| Filetype | Formatter |\n|----------|-----------|\n| Lua | `stylua` |\n| Markdown | `mdslw` |\n\nFormat with `\u003cleader\u003ecf` (async, falls back to LSP).\n\n## Plugins (57)\n\n### Colorschemes\n- [cyberdream.nvim](https://github.com/scottmckendry/cyberdream.nvim) — primary dark theme\n- [onedarkpro.nvim](https://github.com/olimorris/onedarkpro.nvim) — light theme (`onelight`)\n- [material.nvim](https://github.com/marko-cerovac/material.nvim)\n- [oxocarbon.nvim](https://github.com/nyoom-engineering/oxocarbon.nvim)\n- [lush.nvim](https://github.com/rktjmp/lush.nvim) — colorscheme creation framework\n- [auto-dark-mode.nvim](https://github.com/f-person/auto-dark-mode.nvim) — OS-level light/dark switching\n\n### Treesitter\n- [nvim-treesitter](https://github.com/nvim-treesitter/nvim-treesitter) — syntax highlighting, folding\n- [nvim-treesitter-context](https://github.com/nvim-treesitter/nvim-treesitter-context) — sticky context header\n- [nvim-treesitter-textobjects](https://github.com/nvim-treesitter/nvim-treesitter-textobjects) — function/class text objects\n- [nvim-treesitter-endwise](https://github.com/RRethy/nvim-treesitter-endwise) — auto-close `end` blocks\n\n### Completion \u0026 Snippets\n- [blink.cmp](https://github.com/saghen/blink.cmp) — fast completion engine (sources: LSP, path, snippets, buffer)\n- [friendly-snippets](https://github.com/rafamadriz/friendly-snippets) — snippet collection\n\n### Git\n- [gitsigns.nvim](https://github.com/lewis6991/gitsigns.nvim) — git signs, hunk navigation, blame\n\n### UI \u0026 Navigation\n- [barbar.nvim](https://github.com/romgrk/barbar.nvim) — buffer tabs\n- [lualine.nvim](https://github.com/nvim-lualine/lualine.nvim) — statusline\n- [noice.nvim](https://github.com/folke/noice.nvim) — enhanced notifications, cmdline, LSP hover\n- [which-key.nvim](https://github.com/folke/which-key.nvim) — keymap hint popup\n- [flash.nvim](https://github.com/folke/flash.nvim) — jump/search motions\n- [fzf-lua](https://github.com/ibhagwan/fzf-lua) — fuzzy finder (files, grep, symbols, etc.)\n- [nvim-tree.lua](https://github.com/nvim-tree/nvim-tree.lua) — file explorer\n- [beacon.nvim](https://github.com/danilamihailov/beacon.nvim) — cursor flash on jump\n- [colorful-winsep.nvim](https://github.com/nvim-zh/colorful-winsep.nvim) — colored window separators\n- [nvim-colorizer.lua](https://github.com/catgoose/nvim-colorizer.lua) — inline color previews\n- [tiny-inline-diagnostic.nvim](https://github.com/rachartier/tiny-inline-diagnostic.nvim) — compact diagnostics\n\n### Editing\n- [mini.nvim](https://github.com/nvim-mini/mini.nvim) — comment, pairs, surround, and more\n- [treesj](https://github.com/Wansmer/treesj) — split/join code blocks\n- [vim-illuminate](https://github.com/rrethy/vim-illuminate) — highlight other occurrences of word\n- [deadcolumn.nvim](https://github.com/Bekaboo/deadcolumn.nvim) — fading color column\n- [nvim-cursorword](https://github.com/xiyaowong/nvim-cursorword) — underline word under cursor\n- [vim-repeat](https://github.com/tpope/vim-repeat) — `.` repeat for plugin actions\n- [mkdir.nvim](https://github.com/jghauser/mkdir.nvim) — auto-create parent directories on save\n- [hlsearch.nvim](https://github.com/nvimdev/hlsearch.nvim) — auto-clear search highlighting\n- [HighStr.nvim](https://github.com/Pocco81/HighStr.nvim) — persistent text highlighting\n- [nvim-osc52](https://github.com/ojroques/nvim-osc52) — clipboard via OSC 52 (SSH-friendly)\n- [conform.nvim](https://github.com/stevearc/conform.nvim) — formatting engine\n\n### Python\n- [semshi](https://github.com/wookayin/semshi) — semantic syntax highlighting\n- [python-syntax](https://github.com/vim-python/python-syntax) — enhanced syntax\n- [vim-python-pep8-indent](https://github.com/Vimjas/vim-python-pep8-indent) — PEP 8 indentation\n- [venv-selector.nvim](https://github.com/linux-cultist/venv-selector.nvim) — virtual environment picker\n\n### Markdown \u0026 Quarto\n- [render-markdown.nvim](https://github.com/MeanderingProgrammer/render-markdown.nvim) — inline rendering\n- [quarto-nvim](https://github.com/quarto-dev/quarto-nvim) — Quarto document support\n- [otter.nvim](https://github.com/jmbuhr/otter.nvim) — embedded code LSP in markdown/quarto\n- [vim-pandoc-syntax](https://github.com/vim-pandoc/vim-pandoc-syntax) — pandoc syntax\n- [tex-conceal.vim](https://github.com/KeitaNakamura/tex-conceal.vim) — LaTeX conceal\n- [markdown-preview.nvim](https://github.com/iamcco/markdown-preview.nvim) — browser preview\n- [glow.nvim](https://github.com/ellisonleao/glow.nvim) — terminal markdown preview\n- [mkdnflow.nvim](https://github.com/jakewvincent/mkdnflow.nvim) — markdown navigation \u0026 links\n- [mdx.nvim](https://github.com/davidmh/mdx.nvim) — MDX support\n\n### AI\n- [CopilotChat.nvim](https://github.com/CopilotC-Nvim/CopilotChat.nvim) — Copilot chat interface\n- [opencode.nvim](https://github.com/nickjvandyke/opencode.nvim) — OpenCode AI\n\n### File Navigation\n- [fff.nvim](https://github.com/dmtrKovalenko/fff.nvim) — fast file finder\n\n### Terminal \u0026 Kitty\n- [vim-kitty-navigator](https://github.com/knubie/vim-kitty-navigator) — Kitty pane navigation\n- [vim-kitty](https://github.com/fladson/vim-kitty) — Kitty config syntax\n- [kitty-scrollback.nvim](https://github.com/mikesmithgh/kitty-scrollback.nvim) — Kitty scrollback buffer\n\n### Fuzzy Cmdline\n- [wilder.nvim](https://github.com/gelguy/wilder.nvim) — fuzzy command-line completion\n- [fzy-lua-native](https://github.com/romgrk/fzy-lua-native) — native fzy algorithm\n\n### Activity Tracking\n- [vim-wakatime](https://github.com/wakatime/vim-wakatime)\n- [aw-watcher.nvim](https://github.com/lowitea/aw-watcher.nvim) — ActivityWatch\n- [codestats.nvim](https://github.com/liljaylj/codestats.nvim) — Code::Stats\n- [TakaTime](https://github.com/Rtarun3606k/TakaTime)\n\n### Utilities\n- [ansi.nvim](https://github.com/0xferrous/ansi.nvim) — ANSI color code rendering\n- [auto-save.nvim](https://github.com/okuuva/auto-save.nvim) — auto-save on change\n- [commitpad.nvim](https://github.com/Sengoku11/commitpad.nvim) — commit message scratchpad\n- [store.nvim](https://github.com/alex-popov-tech/store.nvim) — persistent data store\n\n### Core Dependencies\n- [nvim-web-devicons](https://github.com/nvim-tree/nvim-web-devicons)\n- [nui.nvim](https://github.com/MunifTanjim/nui.nvim)\n- [plenary.nvim](https://github.com/nvim-lua/plenary.nvim)\n\n## Keymaps\n\n**Leader**: `\u003cSpace\u003e`\n\n### Leader Groups\n\n| Prefix | Group | Examples |\n|--------|-------|---------|\n| `\u003cleader\u003ea` | AI | `ac` toggle chat, `ao` open, `ar` reset, `ae` explain, `af` fix |\n| `\u003cleader\u003eb` | Buffers | `bb` switch, `bd` delete, `bo` delete others, `bn` order by name |\n| `\u003cleader\u003ec` | Code | `cf` format, `cd` diagnostics, `cs` symbols, `cS` workspace symbols, `cr` references, `cv` venv select |\n| `\u003cleader\u003ef` | Files/Find | `ff` files, `fb` buffers, `fg` grep, `fh` help, `fk` keymaps, `fn` new file |\n| `\u003cleader\u003eg` | Git | `gg` lazygit, `gb` blame, `gB` browse, `gs` stage hunk, `gd` diff |\n| `\u003cleader\u003em` | Markdown | `mp` glow preview, `mP` browser preview |\n| `\u003cleader\u003es` | Search | `sg` live grep, `sw` grep word, `sl` buffer lines, `sh` highlights |\n| `\u003cleader\u003eu` | UI Toggles | `us` spell, `uw` wrap, `ul` line numbers, `ud` diagnostics, `uh` inlay hints, `uT` treesitter, `uC` colorizer |\n| `\u003cleader\u003ew` | Windows | `-` split below, `\\|` split right, `wd` delete |\n| `\u003cleader\u003ex` | Lists | `xl` location list, `xq` quickfix |\n| `\u003cleader\u003e\u003ctab\u003e` | Tabs | `\u003ctab\u003e\u003ctab\u003e` new, `\u003ctab\u003ed` close, `\u003ctab\u003e]` next, `\u003ctab\u003e[` prev |\n\n### Navigation\n\n| Key | Mode | Action |\n|-----|------|--------|\n| `H` / `L` | n | Previous / Next buffer |\n| `[b` / `]b` | n | Previous / Next buffer |\n| `[d` / `]d` | n | Previous / Next diagnostic |\n| `[e` / `]e` | n | Previous / Next error |\n| `[w` / `]w` | n | Previous / Next warning |\n| `[h` / `]h` | n | Previous / Next heading (markdown) |\n| `[q` / `]q` | n | Previous / Next quickfix |\n| `s` | n | Flash jump |\n| `S` | n | Flash treesitter select |\n| `r` | o | Remote flash |\n| `\u003cC-h/j/k/l\u003e` | n | Navigate windows |\n| `\u003cC-p\u003e` | n | Buffer pick mode |\n| `ff` | n | fff file finder |\n\n### Editing\n\n| Key | Mode | Action |\n|-----|------|--------|\n| `\u003cA-j\u003e` / `\u003cA-k\u003e` | n, i, v | Move line(s) down / up |\n| `\u003cC-s\u003e` | n, i, v | Save file |\n| `0` | n | Jump to first non-blank character |\n| `X` | n | Split line at cursor |\n| `gco` / `gcO` | n | Add comment below / above |\n| `\u003cleader\u003ey` / `\u003cleader\u003eY` | n, v | Copy to system clipboard (OSC 52) |\n\n## Options\n\n- **Indentation**: 2 spaces (4 for Python)\n- **Line numbers**: Relative + absolute\n- **Color column**: 80\n- **Search**: ripgrep via `grepprg`\n- **Folding**: Treesitter-based\n- **Clipboard**: System clipboard sync (OSC 52 for SSH)\n- **Cursor**: Blinking block (normal), blinking line (insert)\n- **Statusline**: Global (`laststatus=3`)\n- **Undo**: Persistent, 10,000 levels\n- **Scrolloff**: 10 lines\n- **Spell**: English\n\n## Requirements\n\n- **Neovim** 0.12+ (required for `vim.pack` and native LSP)\n- **Git** (for vim.pack to clone plugins)\n- **ripgrep** (`rg`) — used by fzf-lua and grepprg\n- **fzf** — fuzzy finder backend\n- **lazygit** — terminal git UI (optional)\n- **glow** — terminal markdown renderer (optional)\n- **Cargo/Rust** — blink.cmp builds from source\n\n### LSP Servers (must be on `$PATH`)\n\n```bash\n# Python\npip install pyright\nuv tool install ty\nuv tool install ruff\n\n# Lua\nbrew install lua-language-server    # or build from source\n\n# Markdown\nbrew install marksman\n\n# JSON\nnpm install -g vscode-json-language-server\n\n# Code search\nbrew install ast-grep               # or cargo install ast-grep\n\n# Grammar\nbrew install ltex-ls-plus           # or download from GitHub\n\n# Formatting\ncargo install stylua\n```\n\n## Installation\n\n```bash\ngit clone https://github.com/saforem2/nvim ~/.config/nvim\nnvim  # vim.pack will auto-install plugins on first launch\n```\n\nTo use alongside another Neovim config:\n\n```bash\ngit clone https://github.com/saforem2/nvim ~/.config/nvim-custom\nNVIM_APPNAME=nvim-custom nvim\n```\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fsaforem2%2Fnvim","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fsaforem2%2Fnvim","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fsaforem2%2Fnvim/lists"}