{"id":50547694,"url":"https://github.com/utshomh/nvim-config","last_synced_at":"2026-06-04T00:03:51.911Z","repository":{"id":360730155,"uuid":"1251419958","full_name":"utshomh/nvim-config","owner":"utshomh","description":"A modern Neovim config for development","archived":false,"fork":false,"pushed_at":"2026-05-30T08:23:11.000Z","size":21,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2026-05-30T10:11:31.836Z","etag":null,"topics":["config","neovim","vim"],"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/utshomh.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":"2026-05-27T15:00:09.000Z","updated_at":"2026-05-30T08:23:15.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/utshomh/nvim-config","commit_stats":null,"previous_names":["utshomh/neovim-config","utshomh/nvim-config"],"tags_count":null,"template":false,"template_full_name":null,"purl":"pkg:github/utshomh/nvim-config","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/utshomh%2Fnvim-config","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/utshomh%2Fnvim-config/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/utshomh%2Fnvim-config/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/utshomh%2Fnvim-config/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/utshomh","download_url":"https://codeload.github.com/utshomh/nvim-config/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/utshomh%2Fnvim-config/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":33884765,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-26T15:22:16.424Z","status":"online","status_checked_at":"2026-06-03T02:00:06.370Z","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":["config","neovim","vim"],"created_at":"2026-06-04T00:03:51.171Z","updated_at":"2026-06-04T00:03:51.903Z","avatar_url":"https://github.com/utshomh.png","language":"Lua","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Neovim Config\n\nA documented Neovim configuration focused on modern web, Go, Rust, Python, and Lua development.\n\nThis config uses **packer.nvim** as the plugin manager and the modern **Neovim 0.11+ native LSP API** (`vim.lsp.config` / `vim.lsp.enable`).\n\n## Features\n\n- JavaScript, TypeScript, React, JSX, and TSX LSP support\n- Tailwind CSS IntelliSense for `class`, `className`, `clsx()`, `cx()`, `cva()`, and ``tw`...` `` patterns\n- Go support through `gopls`\n- Rust support through `rust_analyzer`\n- Python support through `pyright`\n- Lua support through `lua_ls`\n- HTML and CSS language servers\n- Format-on-save for:\n  - JS / TS / JSX / TSX\n  - Rust\n  - Go\n  - Python\n  - Lua\n  - HTML\n  - CSS\n- Manual formatting through `\u003cleader\u003ef` or `:Format`\n- Autocomplete with `nvim-cmp`\n- Snippets with `LuaSnip` and `friendly-snippets`\n- Treesitter syntax highlighting\n- Telescope fuzzy finding\n- nvim-tree file explorer\n- Catppuccin theme\n\n## Requirements\n\nInstall the basics first. Use the command for your distro.\n\n```bash\n# Arch Linux / EndeavourOS / Manjaro\nsudo pacman -Syu\nsudo pacman -S --needed git curl unzip ripgrep fd base-devel nodejs npm python python-pip go go-tools gopls rustup rust-analyzer clang lua-language-server stylua python-black python-isort neovim\n\n# If this is your first Rust setup on Arch:\nrustup toolchain install stable\nrustup default stable\nrustup component add rustfmt\n\n# Debian/Ubuntu\nsudo apt update\nsudo apt install -y git curl unzip ripgrep fd-find build-essential nodejs npm python3 python3-pip golang-go rustup clangd lua-language-server neovim\n```\n\nInstall **Neovim 0.11.3 or newer**. If your distro package is older, use your distro's latest channel, AppImage, Homebrew, Bob, Mise, or another version manager.\n\nVerify:\n\n```bash\nnvim --version\n```\n\n## Installation\n\nBack up your old config:\n\n```bash\nmv ~/.config/nvim ~/.config/nvim.bak\n```\n\nCopy or clone this config into `~/.config/nvim`:\n\n```bash\ngit clone https://github.com/utshomh/nvim-config.git ~/.config/nvim\n```\n\nOpen Neovim:\n\n```bash\nnvim\n```\n\nInstall plugins:\n\n```vim\n:PackerSync\n```\n\nClose and reopen Neovim after plugin installation completes.\n\n## Language servers\n\n`mason-lspconfig` is configured to ensure these language servers are installed:\n\n| Area | LSP server | Executable |\n|---|---|---|\n| JavaScript / TypeScript / React | `ts_ls` | `typescript-language-server` |\n| Tailwind CSS IntelliSense | `tailwindcss` | `tailwindcss-language-server` |\n| Go | `gopls` | `gopls` |\n| Rust | `rust_analyzer` | `rust-analyzer` |\n| Python | `pyright` | `pyright-langserver` |\n| Lua | `lua_ls` | `lua-language-server` |\n| HTML | `html` | `vscode-html-language-server` |\n| CSS / SCSS / Less | `cssls` | `vscode-css-language-server` |\n| C / C++ | `clangd` | `clangd` |\n\nYou can inspect or install LSPs from inside Neovim with:\n\n```vim\n:Mason\n:LspInfo\n:checkhealth vim.lsp\n```\n\n## Format-on-save\n\nFormatting is powered by `stevearc/conform.nvim`.\n\n| Filetype | Formatter chain |\n|---|---|\n| `javascript`, `javascriptreact`, `typescript`, `typescriptreact` | `prettierd` or `prettier` |\n| `html`, `css` | `prettierd` or `prettier` |\n| `go` | `goimports`, then `gofmt` |\n| `rust` | `rustfmt` |\n| `python` | `isort`, then `black` |\n| `lua` | `stylua` |\n\nFormat-on-save only runs for the filetypes listed above. Other filetypes are left untouched unless you manually format them.\n\nUseful commands:\n\n```vim\n:Format          \" format current buffer\n:FormatDisable   \" disable format-on-save for the current buffer\n:FormatDisable!  \" disable format-on-save globally for this Neovim session\n:FormatEnable    \" re-enable format-on-save\n:ConformInfo     \" inspect available formatters and formatter logs\n```\n\n## Installing formatter executables\n\nMason can install many of the formatter binaries from inside Neovim:\n\n```vim\n:MasonInstall prettier prettierd goimports black isort stylua\n```\n\nYou can also install them manually. On Arch, prefer official packages when available:\n\n```bash\n# Arch Linux / EndeavourOS / Manjaro\nsudo pacman -S --needed go-tools python-black python-isort stylua\n\n# Web / React / HTML / CSS\nnpm install -g prettier @fsouza/prettierd\n\n# Go, when not using Arch's go-tools package\ngo install golang.org/x/tools/cmd/goimports@latest\n# gofmt ships with Go itself\n\n# Rust\nrustup component add rustfmt\n\n# Python, when not using Arch's python-black/python-isort packages\npython3 -m pip install --user black isort\n\n# Lua, when not using Arch's stylua package\ncargo install stylua\n```\n\nMake sure any manually installed tools are available on your `PATH` before starting Neovim.\n\n## Installing language tooling manually\n\nMason should handle the configured LSP servers, but these manual commands are useful for non-Mason setups or troubleshooting:\n\n```bash\n# JS/TS/React + Python + HTML/CSS + Tailwind\nnpm install -g typescript typescript-language-server pyright vscode-langservers-extracted @tailwindcss/language-server\n\n# Go\ngo install golang.org/x/tools/gopls@latest\n\n# Rust\nrustup component add rust-analyzer rustfmt\n\n# Lua language server and clangd are usually easiest from your OS package manager.\n\n# Arch Linux / EndeavourOS / Manjaro\nsudo pacman -S --needed lua-language-server clang gopls go-tools rust-analyzer stylua python-black python-isort\n\n# Debian/Ubuntu examples may vary by release\nsudo apt install -y lua-language-server clangd\n```\n\nVerify commands:\n\n```bash\nwhich typescript-language-server\nwhich tailwindcss-language-server\nwhich gopls\nwhich rust-analyzer\nwhich pyright-langserver\nwhich lua-language-server\nwhich vscode-html-language-server\nwhich vscode-css-language-server\nwhich clangd\nwhich prettier\nwhich goimports\nwhich black\nwhich isort\nwhich stylua\n```\n\n## Keymaps\n\nThe leader key is `\u003cSpace\u003e`.\n\n| Keymap | Action |\n|---|---|\n| `\u003cleader\u003ew` | Save file |\n| `\u003cleader\u003eq` | Quit window |\n| `\u003cleader\u003ee` | Toggle file explorer |\n| `\u003cleader\u003eff` | Find files with Telescope |\n| `\u003cleader\u003efg` | Live grep with Telescope |\n| `\u003cleader\u003efb` | Find open buffers |\n| `\u003cleader\u003efh` | Search help tags |\n| `\u003cleader\u003ef` | Format current buffer |\n| `gd` | Go to definition |\n| `gD` | Go to declaration |\n| `gr` | Find references |\n| `gi` | Go to implementation |\n| `K` | Hover documentation |\n| `\u003cleader\u003ern` | Rename symbol |\n| `\u003cleader\u003eca` | Code action |\n| `[d` / `]d` | Previous / next diagnostic |\n| `\u003cleader\u003ed` | Show line diagnostic |\n\n## Project notes\n\n### React, JSX, TSX, and Tailwind\n\nOpen Neovim inside the project root so the language servers can find `package.json`, `tsconfig.json`, `tailwind.config.*`, or `.git`.\n\nRecommended project-local dependencies:\n\n```bash\nnpm install -D typescript prettier tailwindcss\n```\n\nFor Bun projects:\n\n```bash\nbun add -d typescript prettier tailwindcss @types/bun\n```\n\n### Go\n\nOpen Neovim inside a Go module or workspace:\n\n```bash\ngo mod init example.com/app\nnvim main.go\n```\n\nThe config enables `gopls` options for `gofumpt`, `staticcheck`, unimported package completion, placeholders, and useful analyses. Formatting uses `goimports` followed by `gofmt`.\n\n### Rust\n\nOpen Neovim inside a Cargo project:\n\n```bash\ncargo new my-project\ncd my-project\nnvim src/main.rs\n```\n\n`rust_analyzer` is configured to use all Cargo features and `clippy` for checks.\n\n### Python\n\nUsing a virtual environment is recommended:\n\n```bash\npython3 -m venv .venv\nsource .venv/bin/activate\npython -m pip install black isort\nnvim app.py\n```\n\n### Lua / Neovim config development\n\n`lua_ls` is configured with `vim` as a known global and the Neovim runtime files in the workspace library. Formatting uses `stylua`, configured by `.stylua.toml`.\n\n## File layout\n\n```text\n.\n├── init.lua\n├── lua/core\n│   ├── keymaps.lua\n│   ├── options.lua\n│   ├── plugins.lua\n│   └── plugin_config\n│       ├── autopairs.lua\n│       ├── cmp.lua\n│       ├── conform.lua\n│       ├── init.lua\n│       ├── lsp.lua\n│       ├── telescope.lua\n│       ├── theme.lua\n│       ├── tree.lua\n│       └── treesitter.lua\n├── .editorconfig\n└── .stylua.toml\n```\n\n## Troubleshooting\n\nRun these first:\n\n```vim\n:checkhealth\n:LspInfo\n:ConformInfo\n:Mason\n```\n\nCommon issues:\n\n1. **LSP does not start**: check `:LspInfo`, then verify the executable with `which \u003ccommand\u003e`.\n2. **Formatting does not run**: run `:ConformInfo` and install the missing formatter.\n3. **Tailwind completions do not appear**: open Neovim at the project root and confirm the project has `tailwind.config.*`, `postcss.config.*`, or `package.json`.\n4. **Go imports are not organized**: install `goimports` and confirm `which goimports` works in the same shell that launches Neovim.\n5. **Distribution Neovim is too old**: install Neovim 0.11.3+ from a newer source.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Futshomh%2Fnvim-config","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Futshomh%2Fnvim-config","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Futshomh%2Fnvim-config/lists"}