Production-grade portable one-click dotfiles for Linux and Windows 11 software engineering environment.
Auto-detecting, auto-bootstraping, idempotent, gracefully degrading, full terminal tooling, fully vibecoding-enabled.
Editor & Terminal
- Neovim 0.12+ with built-in package manager, LSP/Treesitter config, and native completion
- WezTerm GPU-accelerated terminal (IosevkaTerm Nerd Font)
- Rose Pine theme across all configs
Development Tools
- 20 LSP servers for complete language intelligence
- 30 Treesitter parsers for advanced syntax highlighting
- 40+ CLI tools for modern development workflows (fzf, yazi, zoxide, bat, eza, lazygit, gh, ripgrep, fd, tokei, btop, repomix, docker-compose, helm, kubectl)
AI-Native Agentic Development
- Full support for Claude Code and OpenCode
- 4 MCP servers: context7, playwright, repomix, serena
- Hookify rules: Per-language quality check reminders (16 languages/formats)
- Auto-detect & trigger format/lint/check: Git pre-commit/commit-msg + Claude Code PostToolUse & Stop hooks
- System instruction sync across all repos (CLAUDE.md, AGENTS.md, GEMINI.md, RULES.md)
Automation & Safety
- Idempotent bootstrap and update-all (safe to run multiple times)
- Auto-detection with graceful degradation
- OneDrive-aware on Windows
- Timestamped backup/restore before major changes
Tested Platforms
- Linux (Ubuntu 26.04+)
- Windows 11 (PowerShell 7+)
Required Clone Location: This repository MUST be cloned to
~/dev/github/dotfiles.For Docker/Kubernetes setup, see DOCKER_K8S.md.
git clone https://github.com/lavantien/dotfiles.git ~/dev/github/dotfiles
cd ~/dev/github/dotfiles
chmod +x allow.sh && ./allow.sh
./bootstrap.sh
chsh -s $(which zsh)
exec zshgit clone https://github.com/lavantien/dotfiles.git ~/dev/github/dotfiles
cd ~/dev/github/dotfiles
chmod +x allow.sh && ./allow.sh
./bootstrap.sh
exec zshgit clone https://github.com/lavantien/dotfiles.git $HOME/dev/github/dotfiles
cd $HOME/dev/github/dotfiles
.\bootstrap.ps1
. $PROFILEwhich n # Should point to nvim
which lg # Should point to lazygit
up # Runs update-all| Script | Purpose |
|---|---|
| bootstrap | Initial setup - installs package managers, SDKs, LSPs, tools, deploys configs |
| deploy | Deploy configuration files (Neovim, git hooks, shell, Claude Code) |
| update-all (up) | Update all package managers and system packages (20+ managers) |
| git-update-repos | Clone/update ALL GitHub repos via gh CLI, optionally sync system instructions |
| sync-system-instructions | Sync AI system instructions (CLAUDE.md, AGENTS.md, etc.) to all repos |
| healthcheck | Check system health - verify tools, configs, git hooks |
| backup | Create timestamped backup before major changes |
| restore | Restore from a previous backup |
| uninstall | Remove deployed configs (keeps installed packages) |
Windows uses .ps1 scripts, Linux/macOS uses .sh scripts.
| Option | Bash | PowerShell | Default |
|---|---|---|---|
| Non-interactive | -y, --yes |
-Y |
Prompt for confirmation |
| Dry-run | --dry-run |
-DryRun |
Install everything |
| Categories | --categories sdk |
-Categories sdk |
full |
| Skip update | --skip-update |
-SkipUpdate |
Update package managers |
| Verbose | --verbose |
-VerboseMode |
Show detailed output |
| Category | Description |
|---|---|
| minimal | Package managers + git + CLI tools only |
| sdk | Minimal + programming language SDKs |
| full | SDK + all LSPs + linters/formatters (default) |
All scripts use hardcoded defaults by default (categories: full, interactive prompts).
cp .dotfiles.config.yaml.example ~/.dotfiles.config.yaml
vim ~/.dotfiles.config.yaml
./bootstrap.sh # Auto-detects configConfiguration Priority: Command-line flags > Config file > Hardcoded defaults
| Setting | Values | Default |
|---|---|---|
| categories | minimal, sdk, full | full |
| editor | nvim, vim, code, nano | (none) |
| theme | rose-pine, rose-pine-dawn, rose-pine-moon | (none) |
| github_username | your github username | lavantien |
| base_dir | path to git repos | ~/dev/github |
| auto_commit_repos | true, false | false |
./healthcheck.sh
# JSON output (for CI/CD)
./healthcheck.sh --format json| Issue | Solution |
|---|---|
| Git hooks not running | git config --global core.hooksPath ~/.config/git/hooks |
| PowerShell execution policy | Set-ExecutionPolicy -ExecutionPolicy RemoteSigned -Scope CurrentUser |
| Neovim plugins not installing | In Neovim run :PackUpdate |
| zoxide not jumping | Use directories normally for a few days to let zoxide learn |
| Language | LSP | Tester | Formatter | Linter | Type Check |
|---|---|---|---|---|---|
| Bash | bashls | bats | shfmt | shellcheck | - |
| PowerShell | powershell_es | Pester | Invoke-Formatter | PSScriptAnalyzer | PSScriptAnalyzer |
| Go | gopls | go test | gofmt, goimports | golangci-lint | go vet |
| Rust | rust-analyzer | cargo test | rustfmt | clippy | cargo check |
| Python | pyright | pytest | ruff, black | ruff | mypy |
| JavaScript/TypeScript | ts_ls | jest | prettier | eslint | tsc |
| HTML | html | - | prettier | - | - |
| CSS/SCSS/SASS | cssls | - | prettier | stylelint | - |
| Svelte | svelte | - | prettier | - | svelte-check |
| C/C++ | clangd | Catch2 | clang-format | clang-tidy, cppcheck | compiler |
| C# | csharp_ls | dotnet test | dotnet format | Roslyn analyzers | dotnet build |
| Java | jdtls (Linux/macOS only) | JUnit | checkstyle | checkstyle | javac |
| PHP | intelephense | php, PHPUnit | pint | PHPStan, Psalm | - |
| Scala | metals | ScalaTest | scalafmt | scalafix | scalac |
| Lua | lua_ls | busted | stylua | selene | - |
| Typst | tinymist | built-in | tinymist | tinymist | - |
| Dockerfile | docker_ls | - | - | hadolint | - |
| Docker Compose | docker_ls | - | prettier | - | - |
| Helm | helm_ls | - | prettier | - | - |
| Kubernetes YAML | yamlls | kubectl | prettier | yamllint | - |
| YAML | yamlls | - | prettier | yamllint | - |
| TOML | tombi | - | taplo | - | - |
fzf, yazi, zoxide, bat, eza, lazygit, gh, ripgrep, fd, tokei, btop, repomix, docker-compose, helm, kubectl
context7, playwright, repomix, serena
mermaid-cli (mmdc) - Generate Mermaid diagrams from command line
ComfyUI Desktop - AI image generation (requires comfy install after bootstrap)
Pre-commit: auto-format, lint, type-check, re-stage fixed files
Commit-msg: enforce Conventional Commits (feat, fix, docs, style, refactor, perf, test, build, ci, chore, revert)
Platform-specific: .sh for Linux/macOS, .ps1 for Windows
PostToolUse hooks are deprecated - replaced by Hookify rules for quality checks.
Statusline hook is still active and auto-registered in ~/.claude/settings.json.
Hookify provides per-language quality check reminders that trigger automatically when editing files. Rules are stored in .claude/hookify.*.local.md and work immediately after deployment - no restart needed.
Available Rules:
hookify.quality-go.local.md- Go (gofmt, goimports, golangci-lint, go vet, go test)hookify.quality-rust.local.md- Rust (rustfmt, cargo check, clippy, test)hookify.quality-python.local.md- Python (ruff, mypy, pytest)hookify.quality-typescript.local.md- TS/JS (prettier, eslint, tsc, npm test)hookify.quality-csharp.local.md- C# (dotnet format, build, test)hookify.quality-php.local.md- PHP (pint, phpstan, psalm, phpunit)hookify.quality-shell.local.md- Shell (shfmt, shellcheck)hookify.quality-lua.local.md- Lua (stylua, selene)hookify.quality-c-cpp.local.md- C/C++ (clang-format, clang-tidy, cppcheck)hookify.quality-markdown.local.md- Markdown (prettier, markdownlint)hookify.quality-yaml.local.md- YAML (prettier, yamllint)hookify.quality-json.local.md- JSON (prettier, jq)hookify.quality-svelte.local.md- Svelte (prettier, svelte-check)hookify.quality-typst.local.md- Typst (typst check)hookify.quality-toml.local.md- TOML (taplo)
Managing Rules:
- Enable/Disable: Set
enabled: true/falsein the rule frontmatter - Create new: Add
.claude/hookify.{name}.local.mdfiles to your dotfiles - View active: Use
/hookify:listcommand in Claude Code
~/.config/opencode/opencode.json is merged (not overwritten):
- Adds missing MCP servers
- Updates existing ones
- Preserves any existing settings not managed by dotfiles
npm-installed LSPs (typescript-language-server, pyright-langserver, intelephense) need cmd.exe /c wrapper. Auto-patches marketplace.json to fix spawn EINVAL errors.
On Windows, MCP servers that use npx (like zai-mcp-server) also need the cmd.exe /c wrapper in ~/.claude.json:
"mcpServers": {
"zai-mcp-server": {
"command": "cmd.exe",
"args": ["/c", "npx", "-y", "@z_ai/mcp-server"]
}
}This fixes the "Windows requires 'cmd /c' wrapper to execute npx" warning in MCP diagnostics.
ComfyUI Desktop (Windows): After bootstrap via winget, run comfy install to complete setup:
comfy installThis installs required models and dependencies for AI image generation.
Leader key is Space.
| Keybinding | Action |
|---|---|
- |
Oil (file browser) |
<leader>q |
Quit |
<leader>x |
Write and source |
<leader>' |
Alternate file |
<leader>pt |
Toggle Typst preview |
<leader>ps |
Start live preview |
<leader>pc |
Close live preview |
<leader>; |
Pick live preview |
<leader>b |
LSP format |
<leader>u |
Pack update |
<leader>e |
FzfLua global |
<leader>n |
FzfLua combine |
<leader>/ |
Grep current buffer |
<leader>z |
Live grep native |
<leader>f |
Files |
<leader>h |
Help tags |
<leader>k |
Keymaps |
<leader>l |
Loclist |
<leader>m |
Marks |
<leader>t |
Quickfix |
<leader>gf |
Git files |
<leader>gs |
Git status |
<leader>gd |
Git diff |
<leader>gh |
Git hunks |
<leader>gc |
Git commits |
<leader>gl |
Git blame |
<leader>gb |
Git branches |
<leader>gt |
Git tags |
<leader>gk |
Git stash |
<leader>\ |
LSP finder |
<leader>dd |
LSP document diagnostics |
<leader>dw |
LSP workspace diagnostics |
<leader>, |
LSP incoming calls |
<leader>. |
LSP outgoing calls |
<leader>a |
LSP code actions |
<leader>s |
LSP document symbols |
<leader>w |
LSP workspace symbols |
<leader>r |
LSP references |
<leader>i |
LSP implementations |
<leader>o |
LSP type definitions |
<leader>j |
LSP definitions |
<leader>v |
LSP declarations |
See CHANGELOG.md for version history and changes.
MIT