Clean, straightforward dotfiles setup for Linux/WSL:
Supported OS: Ubuntu, Ubuntu (WSL), and macOS. Focus: A Homebrew-first, zsh-focused dotfiles toolkit.
--install-inference: ollama + llmfit)--report-json)chmod +x install.sh
# preview changes first
./install.sh --dry-run --verbose
# run install
./install.sh -y
By default, existing files like ~/.zshrc are kept as-is.
Use --override only when you intentionally want to replace files.
When --override modifies an existing config, a .bak.<date> backup is created.
curl -fsSL https://dot.rly.wtf/bootstrap.sh | bash -s -- --tag v1.0.0
.
├── bootstrap.sh
├── install.sh
├── inventory/
│ └── default.yaml
├── packages/
│ └── packages.yaml
├── scripts/
│ ├── lib/brew-env.sh
│ ├── setup-pyenv.sh
│ ├── setup-starship.sh
│ └── post-install-checks.sh
├── test/
│ ├── check-no-root-config-duplicates.sh
│ ├── lib/test-shims.sh
│ ├── test-backup-collision.sh
│ ├── test-install-lock.sh
│ ├── test-installer-idempotency.sh
│ ├── test-oh-my-tmux.sh
│ ├── test-report-json.sh
│ ├── test-skel-merge-behavior.sh
│ ├── test-ssh-config-migration.sh
│ ├── test-inference-opt-in.sh
│ ├── test-nanorc-optional-failure.sh
│ ├── verify-release-reproducible.sh
│ └── installer.bats
└── skel/
└── default/
├── .zshrc
├── .tmux.conf.local
├── .gitconfig
├── .ssh/config
└── .config/starship.toml
--verbose: extra 🔎 debug lines--dry-run: commands are printed with 🧪 and not executed🟢 / 🟡 / 🔴)--tag <tag>--host <host> (advanced optional profile name; most users can ignore this)--pyver <ver>--create-home-pyver--install-inference (use with -y for non-interactive runs)--dry-run--override (--force alias)--brew-only--no-apt--verbose--from-release (set internally by bootstrap)--report-json <path> (writes a JSON phase summary)--no-lock (advanced/debug; disables install lock guard)BOOTSTRAP_GPG_FINGERPRINT to enforce expected checksum signer fingerprint in bootstrap.shTAG=v1.0.0
REPO_NAME="$(basename "$PWD")"
mkdir -p dist
tar --sort=name --mtime='UTC 1970-01-01' --owner=0 --group=0 --numeric-owner \
--exclude='.git' --exclude='./dist' -cf - . | gzip -n > "dist/${REPO_NAME}-${TAG}.tar.gz"
(cd dist && sha256sum "${REPO_NAME}-${TAG}.tar.gz" > "${REPO_NAME}-${TAG}.tar.gz.sha256")
Verify deterministic archive output:
./test/verify-release-reproducible.sh "$TAG"
On macOS, install GNU tar first for deterministic-archive verification:
brew install gnu-tar
packages/packages.yaml is the single source of truth for package lists
(brew and apt_minimal sections).
The default brew set includes core tools like tmux, ripgrep, fzf, and fd.
Repository AI guidance lives in .github/copilot-instructions.md and includes:
$HOME are preserved by default; --override is opt-in.~/.ssh/config is auto-migrated to ~/.ssh/config.local when local file is absent;
managed ~/.ssh/config then includes ~/.ssh/config.local.GitHub Actions runs a CI workflow that checks:
bash -n).zshrc on reruns).bak.<date>[.<n>] namingtest/test-ssh-config-migration.sh)test/test-oh-my-tmux.sh)test/test-install-lock.sh)test/test-report-json.sh)test/test-inference-opt-in.sh)test/test-nanorc-optional-failure.sh)test/installer.bats) running all integration checkstest/verify-release-reproducible.sh, tag workflow)Release notes live in CHANGELOG.md.
Released under UNLICENSE. See UNLICENSE.