A minimal Neovim configuration tuned for remote VPS development.
On a fresh Ubuntu/Debian VPS, run the included script:
# Clone or copy this repo to the VPS, then:
CHEZMOI_REPO=yourusername/dotfiles bash bootstrap-vps.shThe script installs Neovim, LazyVim, chezmoi, mise, languages, LSPs, tmuxp, zsh, and Docker. Log out and back in when it finishes.
If you prefer to install step by step:
# 1. Install Neovim
mkdir -p ~/.local/bin
curl -LO https://github.com/neovim/neovim/releases/latest/download/nvim-linux64.tar.gz
sudo rm -rf /opt/nvim
sudo tar -C /opt -xzf nvim-linux64.tar.gz
export PATH="$PATH:/opt/nvim-linux64/bin"
# 2. Install LazyVim starter
mv ~/.config/nvim{,.bak}
git clone https://github.com/LazyVim/starter ~/.config/nvim
rm -rf ~/.config/nvim/.git
# 3. Copy these files into the LazyVim config
cp -r lua/config/options.lua ~/.config/nvim/lua/config/
cp -r lua/plugins/lang-overrides.lua ~/.config/nvim/lua/plugins/
# 4. Install language extras via LazyVim
# Open Neovim and run:
# :LazyExtras
# Enable: typescript, json, go, python, rust
# 5. Install tools via mise/npm/go/pip
mise use -g node@lts go@latest python@3.12 rust@latest
npm install -g typescript typescript-language-server @biomejs/biome
pip install ruff pyright debugpy
go install golang.org/x/tools/gopls@latest mvdan.cc/gofumpt@latest github.com/go-delve/delve/cmd/dlv@latest
rustup component add rust-analyzer clippy rustfmt
# 6. Copy tmuxp template and Justfile into your project
cp tmuxp/project.yaml ~/.config/tmuxp/myproject.yaml
# Edit ~/.config/tmuxp/myproject.yaml and set start_directory + session_name
# Copy Justfile to project root and customize as needed
# 7. Start Neovim
nvimnvim-starter/
├── lua/
│ ├── config/
│ │ └── options.lua # performance + editor options
│ └── plugins/
│ └── lang-overrides.lua # JS/TS, Go, Python, Rust LSP/formatting
├── tmuxp/
│ └── project.yaml # tmux session template
├── Justfile # polyglot task runner
├── bootstrap-vps.sh # one-shot VPS installer
└── README.md
The tmuxp/project.yaml template creates a 5-window session:
code— Neovimagent— claude-codetests—just test-watchlogs—just logsshell— general shell
Copy and customize per project:
cp tmuxp/project.yaml ~/.config/tmuxp/myproject.yaml
# Edit session_name and start_directoryLaunch with:
tmuxp load myproject| Task | Description |
|---|---|
just dev |
Launch tmuxp dev session |
just fmt |
Format all code |
just lint |
Lint all code |
just typecheck |
Type check all code |
just test |
Run all tests |
just test-watch |
Run test watcher |
just build |
Build Go/Rust binaries |
just logs |
Run dev server or tail logs |
just agent |
Launch claude-code |
just ci |
Run full local CI pipeline |
just clean |
Remove build artifacts and caches |
Each task auto-detects the project type by file presence (package.json, go.mod, pyproject.toml, Cargo.toml) and only runs relevant commands.
cd ~/projects/myproject
just dev # launches tmuxp session with nvim + agent + testsLazyVim defaults plus:
Spaceleader key<leader>fffind files<leader>fglive grep<leader>cfformat buffer<leader>cacode action<leader>rnrenamegdgo to definitiongrgo to references