{"id":20730179,"url":"https://github.com/mohabdo21/vim-configuration","last_synced_at":"2026-04-19T18:32:55.489Z","repository":{"id":241395757,"uuid":"806740172","full_name":"Mohabdo21/VIM-Configuration","owner":"Mohabdo21","description":"Neovim configuration. It's set up to provide a richly featured, visually pleasing, and efficient text editing environment.","archived":false,"fork":false,"pushed_at":"2025-02-25T21:04:30.000Z","size":151,"stargazers_count":1,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-02-25T21:35:04.727Z","etag":null,"topics":["lua","nvim","nvim-config","nvim-plugin"],"latest_commit_sha":null,"homepage":"","language":"Lua","has_issues":true,"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/Mohabdo21.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}},"created_at":"2024-05-27T19:56:12.000Z","updated_at":"2025-02-25T21:04:34.000Z","dependencies_parsed_at":"2024-05-28T05:39:59.765Z","dependency_job_id":"064a3ebe-63ce-41f1-aa8f-0f83f0663c3c","html_url":"https://github.com/Mohabdo21/VIM-Configuration","commit_stats":null,"previous_names":["mohabdo21/vim-configuration"],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Mohabdo21%2FVIM-Configuration","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Mohabdo21%2FVIM-Configuration/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Mohabdo21%2FVIM-Configuration/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Mohabdo21%2FVIM-Configuration/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/Mohabdo21","download_url":"https://codeload.github.com/Mohabdo21/VIM-Configuration/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":243012682,"owners_count":20221606,"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","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":["lua","nvim","nvim-config","nvim-plugin"],"created_at":"2024-11-17T05:10:33.660Z","updated_at":"2026-04-19T18:32:55.434Z","avatar_url":"https://github.com/Mohabdo21.png","language":"Lua","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Neovim Configuration\n\nNeovim 0.11+ config. Native features first, plugins only when they do something Neovim can't.\n\n## What's Gone\n\nNeovim 11 killed the need for these. They're removed:\n\n- **LuaSnip / friendly-snippets** → native `vim.snippet`\n- **nvim-lspconfig** → native `vim.lsp.config()` + `vim.lsp.enable()`\n- **comment.nvim** → native commenting (`gc`)\n- **dressing.nvim** → noice.nvim + `vim.ui.select`\n- **lspkind.nvim** → kind icons defined inline in nvim-cmp\n- **none-ls / null-ls** → conform.nvim (formatting) + nvim-lint (linting)\n\n## Structure\n\n```\nnvim/\n├── init.lua                  Entry point: PATH, core requires, filetype rules\n└── lua/mohannad/\n    ├── lazy.lua              lazy.nvim bootstrap, Python provider auto-detection\n    ├── core/\n    │   ├── init.lua          Loads keymaps + options\n    │   ├── keymaps.lua       Keybindings (leader = Space)\n    │   ├── options.lua       Editor options\n    │   └── diagnostics.lua   Diagnostic config (signs, floats, severity)\n    └── plugins/\n        ├── init.lua          Always loaded: plenary, vim-tmux-navigator\n        ├── lsp/\n        │   ├── lspconfig.lua Native LSP (vim.lsp.config/enable) + keymaps\n        │   └── mason.lua     Mason: auto-install servers/tools\n        └── ...               Everything else\n```\n\n## Plugins\n\n### LSP \u0026 Completion\n\nLSP is configured natively with `vim.lsp.config()` + `vim.lsp.enable()`. No nvim-lspconfig. Snippets use native `vim.snippet`.\n\n| Plugin                                                          | What it does                                   |\n| --------------------------------------------------------------- | ---------------------------------------------- |\n| **mason.nvim** + **mason-lspconfig** + **mason-tool-installer** | Auto-installs LSP servers, formatters, linters |\n| **nvim-lsp-file-operations**                                    | LSP-aware file rename/move                     |\n| **nvim-cmp**                                                    | Completion (LSP, buffer, path, cmdline)        |\n| **nvim-autopairs**                                              | Auto-close brackets/quotes                     |\n| **lazydev.nvim**                                                | Lua LSP: `vim.*` type hints                    |\n\n**Language servers:** html, cssls, tailwindcss, ts_ls, lua_ls, pyright, bashls, clangd, dockerls, docker_compose_language_service, jsonls, markdown_oxide, puppet, gopls, typos_lsp, ansiblels, tinymist.\n\n### Formatting \u0026 Linting\n\n| Plugin           | What it does                                                                                            |\n| ---------------- | ------------------------------------------------------------------------------------------------------- |\n| **conform.nvim** | Format on save — prettier, eslint_d, stylua, isort, black, clang-format, shfmt, sqlfmt, gofmt, rustfmt  |\n| **nvim-lint**    | Async lint — eslint_d, pylint, golangci-lint, puppet-lint, shellcheck, markdownlint, yamllint, sqlfluff |\n\n### Navigation\n\n| Plugin                       | What it does                                           |\n| ---------------------------- | ------------------------------------------------------ |\n| **telescope.nvim**           | Fuzzy finder: files, grep, buffers, symbols, git, undo |\n| **telescope-fzf-native**     | Native FZF sorting                                     |\n| **telescope-live-grep-args** | Grep with rg flags                                     |\n| **telescope-undo**           | Undo history browser                                   |\n| **telescope-ui-select**      | Routes `vim.ui.select` through Telescope               |\n| **telescope-smart-goto**     | Smart goto                                             |\n| **advanced-git-search**      | Git log/diff search                                    |\n| **harpoon**                  | File bookmarks                                         |\n\n### Treesitter\n\n| Plugin                          | What it does                                             |\n| ------------------------------- | -------------------------------------------------------- |\n| **nvim-treesitter**             | Highlighting + auto-install parsers                      |\n| **nvim-treesitter-textobjects** | Select/swap/move by function, class, conditional, loop   |\n| **nvim-ts-autotag**             | Auto-close HTML/JSX tags                                 |\n| **nvim-various-textobjs**       | 30+ extra text objects (subword, url, indentation, etc.) |\n\n### UI\n\n| Plugin                                | What it does                                  |\n| ------------------------------------- | --------------------------------------------- |\n| **github-nvim-theme**                 | Colorscheme (`github_dark_default`)           |\n| **lualine**                           | Statusline — mode colors, diagnostics, clock  |\n| **bufferline**                        | Tab bar with LSP diagnostics                  |\n| **alpha-nvim**                        | Dashboard                                     |\n| **nvim-tree**                         | File explorer                                 |\n| **noice** + **nvim-notify** + **nui** | Modern cmdline, messages, notifications       |\n| **which-key**                         | Keybinding popup                              |\n| **nvim-highlight-colors**             | Inline color rendering (hex, named, Tailwind) |\n| **mini.nvim**                         | Icons (mocks nvim-web-devicons)               |\n| **render-markdown**                   | Rich markdown rendering                       |\n\n### Git\n\n| Plugin       | What it does                               |\n| ------------ | ------------------------------------------ |\n| **gitsigns** | Diff signs, hunk stage/reset, inline blame |\n| **lazygit**  | Git TUI (`\u003cleader\u003elg`)                     |\n\n### Editing\n\n| Plugin            | What it does                                         |\n| ----------------- | ---------------------------------------------------- |\n| **nvim-surround** | Surround pairs                                       |\n| **substitute**    | Operator-based substitution                          |\n| **neogen**        | Generate doc comments (JSDoc, Google, Doxygen, etc.) |\n| **todo-comments** | Highlight/search TODO, FIXME, HACK                   |\n\n### Sessions\n\n| Plugin           | What it does                                         |\n| ---------------- | ---------------------------------------------------- |\n| **auto-session** | Session save/restore/delete (`\u003cleader\u003eas` to search) |\n\n### Other\n\n| Plugin                 | What it does                          |\n| ---------------------- | ------------------------------------- |\n| **plenary**            | Lua utility library (dependency)      |\n| **vim-tmux-navigator** | Tmux ↔ Neovim split navigation        |\n| **copilot.vim**        | GitHub Copilot (`Alt-l` to accept)    |\n| **vim-maximizer**      | Maximize/restore split (`\u003cleader\u003esm`) |\n| **undotree**           | Undo tree (`F5`)                      |\n\n## Key Bindings\n\nLeader is **Space**. This is not exhaustive — run `\u003cleader\u003efk` or `\u003cleader\u003e?` to see everything.\n\n### General\n\n| Key                               | Action                                         |\n| --------------------------------- | ---------------------------------------------- |\n| `jk`                              | Exit insert mode                               |\n| `\u003cleader\u003enh`                      | Clear search highlights                        |\n| `\u003cleader\u003e+` / `-`                 | Increment / decrement number                   |\n| `\u003cleader\u003esv` / `sh` / `se` / `sx` | Split vertical / horizontal / equalize / close |\n| `\u003cleader\u003esm`                      | Maximize/restore split                         |\n\n### Files \u0026 Search\n\n| Key                 | Action                                  |\n| ------------------- | --------------------------------------- |\n| `\u003cleader\u003eee` / `ef` | Toggle explorer / find file in explorer |\n| `\u003cleader\u003eff`        | Find files                              |\n| `\u003cleader\u003efg`        | Live grep (with args)                   |\n| `\u003cleader\u003efc`        | Grep in cwd                             |\n| `\u003cleader\u003efb`        | Buffers                                 |\n| `\u003cleader\u003efr`        | Recent files                            |\n| `\u003cleader\u003efs`        | Document symbols                        |\n| `\u003cleader\u003efw`        | Grep word under cursor                  |\n| `\u003cleader\u003eft`        | TODOs                                   |\n| `\u003cleader\u003efk`        | Keymaps                                 |\n| `\u003cleader\u003e/`         | Fuzzy search in buffer                  |\n\n### LSP\n\n| Key                       | Action                                     |\n| ------------------------- | ------------------------------------------ |\n| `gd` / `gD`               | Definition / declaration                   |\n| `gR` / `gi` / `gt`        | References / implementations / type defs   |\n| `\u003cleader\u003eca`              | Code action                                |\n| `\u003cleader\u003ern`              | Rename                                     |\n| `\u003cleader\u003eD` / `\u003cleader\u003ed` | Buffer diagnostics / line diagnostic float |\n| `\u003cleader\u003ers`              | Restart LSP                                |\n| `\u003cleader\u003emp`              | Format file (or visual range)              |\n| `\u003cleader\u003el`               | Lint current file                          |\n\n### Git\n\n| Key                        | Action                 |\n| -------------------------- | ---------------------- |\n| `\u003cleader\u003elg`               | LazyGit                |\n| `\u003cleader\u003ehs` / `hr`        | Stage / reset hunk     |\n| `\u003cleader\u003ehS` / `hR`        | Stage / reset buffer   |\n| `\u003cleader\u003ehp` / `hb` / `hd` | Preview / blame / diff |\n| `]c` / `[c`                | Next / prev hunk       |\n\n### Harpoon\n\n| Key                 | Action             |\n| ------------------- | ------------------ |\n| `\u003cleader\u003ehm`        | Mark file          |\n| `\u003cleader\u003ehn` / `hP` | Next / prev mark   |\n| `\u003cleader\u003ehe`        | Remove mark        |\n| `\u003cleader\u003ehq`        | Marks in Telescope |\n\n### Neogen\n\n| Key                               | Action                                       |\n| --------------------------------- | -------------------------------------------- |\n| `\u003cleader\u003enf` / `nc` / `nt` / `nn` | Generate function / class / type / file docs |\n\n## Dependencies\n\n### Required\n\n| What                                  | Why                                        |\n| ------------------------------------- | ------------------------------------------ |\n| **Neovim 0.11+**                      | Native LSP config, snippets, commenting    |\n| **Git 2.19+**                         | Plugins, gitsigns, lazygit                 |\n| **Nerd Font**                         | Icons                                      |\n| **C compiler** (gcc/clang) + **make** | Treesitter parsers, telescope-fzf-native   |\n| **Node.js + npm**                     | LSP servers, prettier, eslint_d            |\n| **neovim** npm package                | Node.js provider (`npm install -g neovim`) |\n| **Python 3.8+** + **pip**             | Python provider, black, isort, pylint      |\n| **pynvim**                            | Python provider (`pip install pynvim`)     |\n| **ripgrep**                           | Telescope grep                             |\n| **fd**                                | Telescope file finder                      |\n| **LazyGit**                           | Git TUI                                    |\n\n### Optional\n\n| What                                        | Why                                                              |\n| ------------------------------------------- | ---------------------------------------------------------------- |\n| [**pyenv**](https://github.com/pyenv/pyenv) | Manage the `neovim-py` virtualenv (recommended)                  |\n| [**nvm**](https://github.com/nvm-sh/nvm)    | Manage Node.js versions (recommended)                            |\n| **tmux**                                    | Only matters if you use vim-tmux-navigator                       |\n| **Go**                                      | gopls, gofmt, golangci-lint                                      |\n| **Rust** + `rustup component add rustfmt`   | rustfmt                                                          |\n| **luarocks**                                | Native Lua C modules (config adds luarocks to cpath)             |\n| **puppet-lint** (`gem install`)             | Not managed by Mason                                             |\n| **GitHub Copilot** subscription             | copilot.vim lazy-loads on Insert mode; `:Copilot auth` to set up |\n\nMason auto-installs most LSP servers, formatters, and linters. Exceptions: **pynvim** (pip), **puppet-lint** (gem), **gofmt** (ships with Go), **rustfmt** (rustup).\n\n## Installation\n\n```bash\ngit clone https://github.com/Mohabdo21/VIM-Configuration.git\ncd VIM-Configuration\nmv ~/.config/nvim ~/.config/nvim.bak\ncp -r ./nvim ~/.config/\nnvim  # lazy.nvim handles the rest\n```\n\n### Python Provider\n\nThe config auto-detects a Python with `pynvim`, checking in order:\n\n1. `$VIRTUAL_ENV/bin/python`\n2. `\u003ccwd\u003e/.venv/bin/python`\n3. `~/.pyenv/versions/neovim-py/bin/python`\n4. System `python3`\n\nRe-checks on `DirChanged`, so project venvs work automatically.\n\nOne-time setup:\n\n```bash\npyenv install -s 3.12.3\npyenv virtualenv 3.12.3 neovim-py\npyenv activate neovim-py\npip install --upgrade pip pynvim\n```\n\nVerify: `python -c \"import pynvim; print(pynvim.__version__)\"`\n\n### Node.js Provider\n\n```bash\nnpm install -g neovim\n```\n\nWith nvm:\n\n```bash\nnvm install --lts \u0026\u0026 nvm use --lts\nnpm install -g neovim\n```\n\nVerify: `:checkhealth provider`\n\n### Updating Neovim (AppImage)\n\n```bash\nchmod +x update_nvim.sh \u0026\u0026 ./update_nvim.sh\n```\n\n## Notes\n\n- Mason installs servers/formatters/linters on first launch. Just open Neovim.\n- Perl and Ruby providers are explicitly disabled.\n- This is a personal config. Fork it, gut it, make it yours.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmohabdo21%2Fvim-configuration","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fmohabdo21%2Fvim-configuration","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmohabdo21%2Fvim-configuration/lists"}