Complete guide for setting up this development environment on a new machine.
git clone https://github.com/yourusername/dotfiles ~/.dotfiles
cd ~/.dotfiles
./install.sh
source ~/.bashrc
nvim # First launch installs plugins
tmux # Press Ctrl+a then I to install plugins- Neovim (latest stable) - Primary editor with LazyVim
- fnm + Node.js - Fast Node Manager with LTS Node
- Rust - Rust toolchain via rustup
- Go - Latest Go compiler
- Build tools - build-essential, cmake, pkg-config
- rust-analyzer - Rust
- tsserver - TypeScript/JavaScript
- vue_ls - Vue.js
- gopls - Go
- clangd - C/C++
- html, cssls - HTML/CSS
- tailwindcss - Tailwind CSS
- lua_ls - Lua
- bashls - Bash
- prettier/prettierd - JS/TS/HTML/CSS/JSON/YAML/Markdown
- stylua - Lua
- rustfmt - Rust
- goimports/gofmt - Go
- clang-format - C/C++
- black - Python
- shfmt - Shell scripts
- ripgrep (rg) - Faster grep
- fd - Faster find
- bat - Better cat with syntax highlighting
- eza - Better ls with icons
- fzf - Fuzzy finder
- delta - Better git diff
- zoxide - Smarter cd
- gh - GitHub CLI
- lazygit - Terminal UI for git
- tmux with TPM - Terminal multiplexer with plugin manager
- gruvbox theme - Consistent across all tools
- OS: macOS 12+, Ubuntu 20.04+, Debian 11+, or WSL2
- Internet connection (for downloading packages)
- ~2GB disk space for all tools
- sudo access for system package installation (Linux/WSL)
- Homebrew on macOS (auto-installed if missing)
git clone https://github.com/yourusername/dotfiles ~/.dotfiles
cd ~/.dotfilesFull installation (recommended):
./install.shMinimal installation (just dotfiles + neovim):
./install.sh --minimalForce reinstall (reinstall everything):
./install.sh --forcesource ~/.bashrcOr close and reopen your terminal.
First launch will install LazyVim and all plugins (takes 2-3 minutes):
nvimWait for plugins to install, then check health:
nvim +checkhealthFirst launch will auto-install TPM and plugins:
tmuxIf plugins don't auto-install, press: Ctrl+a then I (capital I)
The install.sh script detects your OS (macOS, Ubuntu/Debian, WSL) and uses the
appropriate package manager (Homebrew or apt). It runs these steps in order:
- System dependencies - build tools, curl, git, python3, etc.
- Neovim - Homebrew on macOS, AppImage on Linux
- Node.js - fnm + LTS Node (cross-platform)
- Rust - rustup + toolchain (cross-platform)
- Go - Homebrew on macOS, tarball on Linux
- Symlinks - All .ln files to home directory
- LSP servers - Language servers for all languages
- Formatters - Code formatters
- CLI tools - ripgrep, fd, bat, eza, fzf, delta, zoxide
- Git tools - gh, lazygit
Each step is modular and can be run independently from scripts/ directory.
Steps 1-3 and 6 are critical (installer exits on failure). Steps 4-5 and 7-10 are optional (installer warns and continues). A summary of successes and failures is printed at the end. The installer is idempotent -- safe to re-run after partial failures.
The installation creates these symlinks:
~/.bashrc <- bash/bashrc.ln
~/.bash_profile <- bash/bash_profile.ln
~/.gitignore <- git/gitignore.ln
~/.tmux.conf <- tmux/tmux.conf.ln
~/.vimrc <- vim/vimrc.ln (optional, legacy)
~/.config/nvim <- nvim/
All .ln files are automatically symlinked to ~/.* (dot prefix added).
gh auth loginIf not already configured:
git config --global user.name "Your Name"
git config --global user.email "your.email@example.com"
git config --global init.defaultBranch mainDelta is auto-configured as the git pager.
Update plugins:
:Lazy syncClean unused plugins:
:Lazy cleanView installed plugins:
:LazyInstall LSP server:
:Mason- Install plugins:
Ctrl+a+I - Update plugins:
Ctrl+a+U - Remove plugins:
Ctrl+a+Alt+u
Neovim will automatically:
- Start rust-analyzer
- Show crate versions in Cargo.toml
- Provide code actions, refactoring
- Format on save with rustfmt
Keybindings:
<leader>rr- Run runnables<leader>rd- Debug<leader>re- Expand macro<leader>ct- Toggle crate info
Neovim will automatically:
- Start tsserver
- Show inlay hints
- Manage package.json dependencies
- Format with prettier
Keybindings:
<leader>ns- Show package info<leader>nu- Update package
Neovim will automatically:
- Start gopls
- Format with goimports on save
- Run gofmt
Neovim will automatically:
- Start clangd
- Format with clang-format on save
Neovim will automatically:
- Start vue_ls (Vue), html, cssls
- Tailwind CSS IntelliSense
- Emmet completion (
Ctrl+e) - Auto-close HTML tags
- Show color previews
<leader>=,(comma)<C-p>- Fuzzy find files<leader>fg- Live grep<leader>E- File explorer
gd- Go to definitiongr- Go to referencesK- Hover documentation<leader>rn- Rename<leader>ca- Code action<leader>f- Format buffer[d/]d- Previous/next diagnostic
<leader>oa- Ask Claude about this<leader>os- Select prompt<leader>ot- Toggle Claude Code<leader>oc- Custom prompt
<leader>mp- Toggle markdown preview
Prefix: Ctrl+a
prefix |- Split verticalprefix -- Split horizontalprefix h/j/k/l- Navigate panesprefix =- Maximize pane
prefix c- Create windowprefix Ctrl+h/l- Previous/next window
prefix r- Reload configprefix I- Install pluginsprefix U- Update plugins
rg "pattern" --type rust
rg "TODO" -g "*.js"fd "*.rs"
fd -e js -e tsbat file.txt
cat file.txt # aliased to batls # with icons
ll # long format
la # show hidden
lt # tree viewCtrl+r- Search command historyCtrl+t- Find filesAlt+c- Change directory
z project # Jump to frequently used directory
z docs # Fuzzy matchlg # or: lazygitcat ~/.dotfiles-install.logCheck health:
nvim +checkhealthCommon issues:
- LSP not working: Run
:Masonand ensure servers are installed - Plugins not loading: Run
:Lazy sync - Treesitter errors: Run
:TSUpdate
If TPM doesn't auto-install:
git clone https://github.com/tmux-plugins/tpm ~/.tmux/plugins/tpmThen in tmux: Ctrl+a + I
Manually install fnm:
curl -fsSL https://fnm.vercel.app/install | bash
source ~/.bashrc
fnm install --lts
fnm use lts-latestIndividual tools can be reinstalled:
# From dotfiles directory
./scripts/install-cli-tools.sh
./scripts/install-lsp-servers.sh
./scripts/install-formatters.shThe install script should NOT be run with sudo. It will prompt for sudo when needed.
If you accidentally ran with sudo, fix ownership:
sudo chown -R $USER:$USER ~/.dotfiles
sudo chown -R $USER:$USER ~/.config/nvim
sudo chown -R $USER:$USER ~/.local- Homebrew is auto-installed if missing (supports both Apple Silicon and Intel)
- Clipboard works automatically via pbcopy/pbpaste
- Nerd Fonts are installed via
brew install --cask - Neovim, Go, CLI tools, and git tools are all installed via Homebrew
- Clipboard integration uses
clip.exeandpowershell.exe - Nerd Fonts must be installed on the Windows side (the installer downloads them and creates a PowerShell install script)
If clipboard is not working, install win32yank:
curl -sLo /tmp/win32yank.zip https://github.com/equalsraf/win32yank/releases/download/v0.0.4/win32yank-x64.zip
unzip -p /tmp/win32yank.zip win32yank.exe > /tmp/win32yank.exe
chmod +x /tmp/win32yank.exe
sudo mv /tmp/win32yank.exe /usr/local/bin/Use Windows Docker Desktop instead of installing Docker in WSL.
~/.dotfiles/.claude/skills/backup-and-restore/backup.sh "before updates"~/.dotfiles/.claude/skills/backup-and-restore/restore.sh
# Select backup from list:Lazy syncOr use Claude Code skill: /update-neovim-plugins
cd ~/.dotfiles
git pull
./install.sh --force
source ~/.bashrc:Mason
# Press 'U' to update allCreate ~/.bashrc.local for machine-specific bash config:
# Custom aliases, environment variables, etc.
export CUSTOM_VAR="value"This file is sourced at the end of .bashrc and not version controlled.
Add custom plugins in nvim/lua/plugins/:
-- nvim/lua/plugins/custom.lua
return {
{
"author/plugin-name",
config = function()
-- configuration
end,
},
}Edit tmux/tmux.conf.ln and reload:
# Inside tmux
Ctrl+a then rTo remove everything:
# Remove installed tools
rm -rf ~/.local/share/fnm
rm -rf ~/.cargo
rm -rf ~/.fzf
# Linux only
sudo rm -rf /usr/local/go
# macOS only (if installed via Homebrew)
# brew uninstall neovim go ripgrep fd bat eza fzf git-delta zoxide gh lazygit
# Remove configs (be careful!)
rm ~/.bashrc ~/.bash_profile ~/.tmux.conf
rm -rf ~/.config/nvim
rm -rf ~/.tmux/plugins
# Restore backups if needed
~/.dotfiles/.claude/skills/backup-and-restore/restore.sh- Neovim docs:
:help - LazyVim docs: https://www.lazyvim.org
- Issues: Check
~/.dotfiles-install.log - Claude Code skills:
/update-dotfiles-trendsfor suggestions
- LazyVim: https://github.com/LazyVim/LazyVim
- tmux-gruvbox: https://github.com/egel/tmux-gruvbox
- Gruvbox: https://github.com/morhetz/gruvbox
- All the amazing plugin authors!