Releases: lavantien/dotfiles
v4.4
git-update-repos: GitHub CLI Integration
Changed
- Migrated from public GitHub API to authenticated
gh repo listcommand - Now fetches ALL repositories (public and private) via authenticated API
- Added GitHub CLI (
gh) requirement check with helpful error messages - Removed curl/wget-based API fetching and pagination logic
- Simplified JSON parsing using
jqwhen available, falls back to grep/sed
Documentation
- Updated README Section 11 with comprehensive git-update-repos documentation
- Added parameters table with Bash and PowerShell equivalents
- Documented gh CLI requirement and authentication flow
- Updated script entry point description to mention private repo support
Fixed
- Fixed issue where only public repositories were being cloned/updated
- Script now correctly handles all repos for authenticated user via
ghCLI
Full changelog: https://github.com/lavantien/dotfiles/blob/main/CHANGELOG.md
v4.3
What's Changed
Fixed
Go Package Installation
- Fixed goimports reinstall issue by normalizing GOPATH paths before comparison
- Changed from wildcard pattern matching to exact array matching for registry PATH checks
- Always add $GOPATH/bin to current session PATH unconditionally
Removed
Ruby Runtime & bashcov
- Removed Ruby runtime from bootstrap (no longer needed)
- Removed bashcov gem installation
- Removed ruby from version-check patterns (both PowerShell and Bash)
- Removed ruby from packages.yaml configuration
- Updated coverage strategy: kcov is now used exclusively
- Linux/macOS: native kcov
- Windows: kcov via Docker
Changed
- Updated README to reflect kcov-only coverage strategy
- Removed gem from supported language package managers list
- Updated coverage tools table to show kcov (via Docker) for Windows
Full changelog: https://github.com/lavantien/dotfiles/blob/main/CHANGELOG.md
v4.2
Fixes
Bootstrap Idempotency & PATH Detection
- Fixed PATH detection for npm, Python, and winget-installed packages
- Enhanced Initialize-UserPath to add all Scoop app current directories (not just current/bin)
- Fixed Add-ToPath to use exact matching instead of substring matching
- Added WinGet Links directory to Refresh-Path preservation list
- Moved PATH initialization to beginning of Main function for early tool detection
Test Infrastructure
- Fixed test bugs that were wiping User PATH registry entries
- Removed dangerous registry PATH cleanup from AfterEach blocks
- Added safety checks to prevent empty PATH conditions
Changes
- Updated test counts from 2221 to 3221 (2181 PowerShell + 1040 Bash)
- Updated idempotence documentation with latest bootstrap output (57 skipped items)
- Enhanced PATH preservation to include WinGet Links for winget-installed tools
- Improved coverage reporting to 31.4% combined (42.1% PowerShell + 31.2% Bash)
Full changelog: https://github.com/lavantien/dotfiles/blob/main/CHANGELOG.md
v4.1
[4.1] - 2026-01-02
Fixed
- Script entry point mermaid diagram alignment
Changed
- Updated coverage reporting with real coverage measurements (43.9% combined: 41.9% PowerShell + 46.9% Bash)
- Enhanced documentation with sequence diagram in Architecture section
- Improved documentation structure: removed inline navigation links, kept only footer Back to Top
- Refined subsection formatting: removed separators within subsections
Coverage
- PowerShell: 41.91% (818 of 2134 commands)
- Bash: 46.9% (via kcov)
- Combined: 43.9%
Full changelog: https://github.com/lavantien/dotfiles/blob/main/CHANGELOG.md
v4.0 - Shell-First Architecture
Universal Dotfiles v4.0 - Shell-First Architecture Release
What's New in v4.0
v4.0 is a major architectural redesign that establishes shell scripts as the single source of truth while maintaining full Windows compatibility through thin PowerShell wrappers.
Major Architecture Changes
Shell-First Architecture (.sh as Source of Truth)
- All core logic now lives in bash scripts - Single implementation to maintain and test
- PowerShell scripts are thin compatibility wrappers - Call .sh via Git Bash on Windows
- Windows-native bootstrap - Better platform integration with automatic Git installation
- Cross-platform parity - Features develop in .sh first, automatically available on Windows
┌─────────────────────────────────────────────────────────────┐
│ Windows (PowerShell) │
├─────────────────────────────────────────────────────────────┤
│ script.ps1 ──► bash script.sh ──► Core Logic │
│ (wrapper) (Git Bash) (source of truth) │
└─────────────────────────────────────────────────────────────┘
Comprehensive Testing & Coverage
- 11 BATS test files covering all .sh scripts (backup, bootstrap, deploy, git hooks, healthcheck, restore, sync, uninstall, update-all, git-update-repos)
- 5 PowerShell test files for wrapper validation
- Coverage metrics: 46.2% bash coverage, 15% PowerShell coverage, 27.5% combined
- Automated coverage reporting with badges
- E2E tests for critical workflows
Configuration System (Optional)
- YAML-based configuration at
~/.dotfiles.config.yaml - Bridge approach config library for both bash and PowerShell
- Graceful fallbacks to sensible defaults
- Configurable options: editor preference, theme, installation categories, auto-update
New Features
Bootstrap Enhancements
- Installation categories:
minimal,sdk,full(default) - Tool descriptions in summary output for better UX
- Automatic Git installation on Windows via winget
- bashcov integration for coverage testing
- Idempotent operations with detailed skip tracking
- Phase-based installation: Foundation → SDKs → LSPs → Linters → CLI Tools → MCP Servers → Deploy → Update
Deployment Improvements
- Automatic .gitconfig cleanup for platform-specific fixes
- Removes Linuxbrew gh paths on Windows
- Removes absolute Windows gh.exe paths on Linux/macOS
- Removes empty helper lines from gitconfig
- XDG_CONFIG_HOME support for all configs
- OneDrive-aware PowerShell profile deployment
Platform Support
- Windows: Git Bash path conversion, lowercase drive letters, automatic Git installation
- Linux: Enhanced package detection and installation
- macOS: Apple Silicon and Intel support
New Entry Point Scripts
| Script | Purpose |
|---|---|
uninstall.sh / uninstall.ps1 |
Remove all deployed configs |
healthcheck.sh / healthcheck.ps1 |
Verify system health |
backup.sh / backup.ps1 |
Create timestamped backups |
restore.sh / restore.ps1 |
Restore from backups |
sync-system-instructions.sh / sync-system-instructions.ps1 |
Sync AI prompts to all repos |
Installation
Quick Start
# Clone the repository
git clone https://github.com/lavantien/dotfiles.git ~/dotfiles
cd ~/dotfiles
# Run bootstrap (automatically detects your platform)
./bootstrap.sh # Linux/macOS
.\bootstrap.ps1 # Windows
# Or with options
./bootstrap.sh -y # Non-interactive
.\bootstrap.ps1 -y # Windows non-interactiveInstallation Categories
./bootstrap.sh --category minimal # Package managers, git, CLI tools only
./bootstrap.sh --category sdk # minimal + Node.js, Python, Go, Rust, dotnet, JDK
./bootstrap.sh --category full # sdk + all LSPs + linters/formatters + MCP servers (default)Optional Configuration
Create ~/.dotfiles.config.yaml:
editor: nvim # Preferred editor (nvim, vim, code)
theme: gruvbox-light # Theme preference
categories: full # Installation category
auto_update_repos: false # Auto-update git repos
backup_before_deploy: false # Auto-backup before deployWhat Gets Installed
Package Managers
- Windows: Scoop (CLI tools), winget (heavy apps like Visual Studio, LLVM)
- Linux: System (apt/dnf/pacman/zypper), Homebrew (optional)
- macOS: Homebrew (primary)
Core SDKs (always latest)
- Node.js LTS, Python 3.x, Go, Rust (via rustup), dotnet LTS, OpenJDK LTS
Language Servers (15 total)
- clangd (C/C++), gopls (Go), rust-analyzer (Rust), pyright (Python)
- ts_ls (JavaScript/TypeScript), lua-language-server (Lua), csharp-ls (C#)
- jdtls (Java), intelephense (PHP), docker-language-server (Dockerfile)
- yaml-language-server (YAML), tombi (TOML), tinymist (Typst), dartls (Dart)
Linters & Formatters (10+ tools)
- prettier, eslint, ruff, black, isort, mypy, goimports, golangci-lint
- shellcheck, shfmt, clang-format, clang-tidy, scalafmt, Laravel Pint
Essential CLI Tools
- fzf, zoxide, bat, eza, lazygit, gh, ripgrep (rg), fd, tokei, difftastic
Claude Code MCP Servers
- context7 (library documentation), playwright (browser automation), repomix (repo packing)
Testing
# Run all tests
./tests/coverage.sh # Bash coverage
.\tests\coverage-report.ps1 # PowerShell coverage
# Run specific test suites
bats tests/bash/bootstrap_test.bats # Bootstrap tests
bats tests/bash/deploy_test.bats # Deploy tests
Invoke-Pester tests/powershell # PowerShell testsCurrent Coverage: 27.5% combined (46.2% bash, 15% PowerShell)
Security
- Comprehensive security review completed (January 2026)
- 0 HIGH/MEDIUM vulnerabilities found
- Documented threat model and security design principles
- See Security section in README
Migration from v3.x
Windows Users
- Git Bash is now required and will be auto-installed during bootstrap
- Run
.\bootstrap.ps1 -yto update - All existing functionality preserved
All Users
- Optional: Create
~/.dotfiles.config.yamlfor custom configuration - Run
./deploy.sh/.\deploy.ps1to update configurations
Full Changelog
See CHANGELOG.md for complete version history including:
- v3.3.3 - Bootstrap enhancements, PowerShell fixes
- v3.3 - PowerShell syntax fixes
- v3.2 - README reorganization
- v3.1 - Documentation improvements
- v3.0 - Bridge approach config, testing framework, Claude Code hooks
- v2.2 - Documentation enhancements
- v2.1 - Update-all modularization
- v2.0 - Auto-distribution of system prompts
- v1.0 - Initial release
Documentation
- README - Full documentation
- CHANGELOG.md - Version history
- Coverage Report - Test coverage details
Support
For issues, questions, or contributions, please visit:
License: MIT
435+ automated tests | 15+ LSP servers | 20+ package managers | Cross-platform
v3.3.3
What's Changed
README
- Enhance opening sentence with comprehensive feature highlights
- Update Language Servers list from 10 to 15 (feature parity with Neovim)
- Move CLI tools tokei/difftastic to full category
- Update Quality Assurance to mention 15+ LSP servers and languages
Bootstrap Scripts (bootstrap.sh & bootstrap.ps1)
- Add VERSION POLICY section documenting latest-version approach
- Remove ALL hardcoded version numbers, always use latest
- Add 5 missing LSP servers: docker, docker-compose, tombi, tinymist, dartls
PowerShell Profile
- Add -Force to Set-Alias for gl, gcm, gp (override built-in read-only aliases)
Full changelog: v3.2.0...v3.3.3
v3.3
Release v3.3
Bug Fixes
PowerShell Syntax Errors
-
Fix Export-ModuleMember error in
lib/config.ps1Export-ModuleMembercan only be used in.psm1module files, not regular.ps1scripts- The file is dot-sourced, making the export statement unnecessary and invalid
- Resolves error: "The Export-ModuleMember cmdlet can only be called from inside a module"
-
Fix null reference error in
bootstrap/lib/common.ps1Read-Hostcan return$nullwhen input is not available from a console- Added null check before calling
.Trim()on the response - Prevents "You cannot call a method on a null-valued expression" error
Documentation
README Updates
-
Test count correction: Updated from "250+" to 384 total tests
- PowerShell Unit: 124 tests
- PowerShell E2E: 126 tests
- Bash Unit: 56 tests
- Bash E2E: 78 tests
-
Bootstrap script references: Updated to use root
./bootstrap.sh- Previously referenced
bootstrap/bootstrap.sh(subdirectory) - Affects Quick Start, Configuration, Code Coverage, and Updating sections
- Previously referenced
-
New section: "7. Fresh Install Guide"
- Detailed breakdown of what gets installed on Windows
- Detailed breakdown of what gets installed on Linux
- Installation categories comparison (minimal/sdk/full)
- "Why These Tools?" rationale section
-
Section renumbering: Sections 8-18 renumbered after adding new section 7
Verification
- All 35 PowerShell scripts pass syntax validation
bootstrap.ps1runs cleanly without errors on PowerShell 7+- Cross-platform compatibility maintained
Full Changelog
- Modified files:
README.md,bootstrap/lib/common.ps1,lib/config.ps1 - 154 insertions, 37 deletions
v3.2
What's Changed
Documentation
- Reorganize README sections with improved logical flow
- Add numbered headers (1-17) to all sections for better navigation
Fixes
- Remove broken WSL gh credential helper on Windows
- Fix Neovim keybindings section
- Fix key notation and add Claude Code section
- Escape special characters in README for proper markdown rendering
Features (v3.0)
- Bridge approach config system with backward compatibility
- Optional .dotfiles.config.yaml for customization
- Command-line flags override config file defaults
Full Changelog since v2.2
- docs: reorganize README sections and add numbering (f6202fa)
- fix: remove broken WSL gh credential helper on Windows (8f274a4)
- chore(release): v3.1 (475c1b8)
- docs: fix Neovim keybindings section (6efd6a7)
- docs: update README with accurate Neovim hotkeys only (4b19568)
- docs: update README with custom Neovim hotkeys only (13fc8cd)
- docs: add hidden hotkeys and Wezterm hotkeys to README (dddea60)
- docs: escape special characters in README for proper markdown rendering (83dc163)
- docs: fix key notation and add Claude Code section (e493f7f)
- feat(v3.0): bridge approach config system with testing (8677b7b)
Version 3.0.3: Neovim Hotkeys Documentation Update
Version 3.0.3 - Neovim hotkeys documentation update.
Changes
Updated README to accurately reflect custom Neovim hotkeys defined in init.lua.
Documentation Changes
Header Update
- Changed from manual table to From init.lua
- Shows all custom keybindings as defined
Keybinding Corrections
- Fixed search forward: now shows (not Space + quote)
- Removed gk (git stash) as it does not exist in init.lua
- All keybindings now match actual vim.keymap.set calls
Custom Hotkeys Documented
Editor Mappings (14):
- q: Quit
- x: Write and source config
- quote: Search forward (#)
- pt: Toggle Typst preview
- ps: Start Typst preview
- semicolon: Typst preview pick
- b: Format buffer (LSP)
- u: Update plugins
- e: Fuzzy find everywhere (FzfLua)
- n: Fuzzy combine (FzfLua)
- slash: Grep in current buffer (FzfLua)
- z: Live grep native (FzfLua)
- f: Find files (FzfLua)
Git Mappings (9):
- gf: Git files
- gs: Git status
- gd: Git diff
- gh: Git hunks
- gc: Git commits
- gl: Git blame
- gb: Git branches
- gt: Git tags
LSP Mappings (13):
- FzfLua commands for diagnostics, calls, actions, symbols, references, implementations, type definitions
Improvements
Cleaner documentation
- Removed Wezterm hotkeys section (not custom)
- Removed FzfLua additional commands section (hidden plugin commands)
- Better organization and readability
Markdown
Proper escaping for GitHub rendering.
Version 3.0.1: Documentation Improvements
Version 3.0.1 - Documentation enhancements and hotkey discovery.
New Documentation
Hidden Plugin Commands (FzfLua)
Complete table of 20+ FzfLua commands accessible via :
- Fuzzy finder everywhere
- File and directory navigation
- Git operations (files, status, diff, hunks, commits, blame, branches, tags, stash)
- LSP tools (finder, diagnostics, calls, actions, symbols, references)
- Help, keymaps, marks, quickfix, location list
Wezterm Hotkeys
Added documentation for default terminal hotkeys:
| Keybinding | Action |
|---|---|
| ALT+Enter | Disable default assignment |
Theme and Appearance:
- Color scheme: rose-pine
- Font: IosevkaTerm Nerd Font (17pt)
- Window decorations: TITLE | RESIZE
- Tab bar: Disabled
- Window padding: 0
Fixes
Markdown Rendering
- Escape special characters for proper GitHub rendering:
- Changed
<leader>to<Space> - Escaped backslash, comma, and dot in LSP mappings
- Used backticks for special characters
- Changed
Claude Code Integration
- Added missing section after Git Hooks with:
- Quality check hook example
- TDD guard description
- Deploy instructions
- Settings.json configuration
Benefits
Enhanced Discovery
Users can now quickly find:
- All available FzfLua commands
- Terminal default hotkeys
- Proper hotkey notation in documentation
Improved Documentation
- README renders correctly on GitHub
- All special characters properly escaped
- Complete hotkey reference
Upgrade
git pull origin mainFull Changelog
For complete details, see: