Task Reference¶
This dotfiles repository uses go-task/task for automation from inside the repo. The Taskfile is intentionally minimal - complex installation logic lives in dedicated shell scripts.
Every task here has a dotfiles CLI equivalent that works from any directory, and both call the same scripts under install/ops/. See Management Interface for the layering.
Available Tasks¶
Run task --list to see all available tasks:
Symlinks Management¶
task symlinks:link # Create symlinks from dotfiles to home directory
task symlinks:relink # Remove and recreate all symlinks
task symlinks:check # Verify symlinks are correct
task symlinks:show # Show all configured symlinks
task symlinks:unlink # Remove all symlinks
Symlinks use a two-layer system: common configs first, then platform-specific overlay.
Testing¶
task test # Run all BATS tests
task test:unit # Run unit tests
task test:integration # Run integration tests
task test:watch # Run tests on file changes (requires entr)
Documentation¶
task docs:serve # Serve documentation site locally (localhost:8000)
task docs:build # Build static documentation site
task docs:deploy # Deploy documentation to GitHub Pages
Philosophy¶
Tasks are for orchestration, not wrappers. The Taskfile coordinates multi-step workflows while keeping simple operations accessible via their native commands.
Minimal by design. Complex installation logic lives in shell scripts under install/, not in YAML. This keeps the Taskfile readable and the logic testable.
Platform detection is automatic. It lives in install/platform-detection.sh and is used by the install/ops/ scripts, not reimplemented in YAML.
Windows Setup (WSL only)¶
task windows:setup # One-time Git Bash setup via winget (run from WSL)
task windows:sync # Sync shell files to Windows Git Bash (run from WSL)
task windows:bundle # Bundle Windows tool binaries into a .tar.gz (any machine)
task windows:offline -- <archive> # Install tools from a bundle when winget is blocked (WSL)
windows:bundle downloads the Windows .exe for each shell tool from GitHub releases into a single archive that can be moved to a network-restricted machine, where windows:offline installs them without touching the network. Use this pair when winget is blocked; otherwise windows:setup handles everything online.
Installation¶
Full installation is handled by install.sh with a machine manifest, not Tasks:
Machine manifests in install/manifests/ define what gets installed per computer type. The install script reads the manifest to determine platform, tools, and configuration.
Direct Commands¶
For operations not covered by Tasks, use native commands:
# Package updates
brew update && brew upgrade # macOS
sudo apt update && sudo apt upgrade # WSL
sudo pacman -Syu # Arch
# Python tools
uv tool upgrade --all
uv tool list
# Node.js
npm update -g
npm list -g --depth=0
# Theme management
theme apply <name>
theme list
theme current
Package Definitions¶
All package versions and configurations are centralized in install/packages.yml:
- Runtime versions (Go, Node, Python)
- GitHub binaries (neovim, lazygit, yazi, fzf)
- Cargo packages
- npm global packages
- uv tools
- Shell and tmux plugins
Troubleshooting¶
Task Not Found¶
Install task:
Permission Errors¶
Some operations require sudo (apt/pacman). You'll be prompted when needed.
List All Tasks¶
See Also¶
- Platform Differences - Package managers per platform
- Symlinks Manager - Python symlinks tool
- Taskfile Documentation - Official Task docs