git clone https://github.com/kalindudc/shell.git
cd shell
# Install BATS and ShellCheck (or use task dev:deps)
# On macOS: brew install bats-core shellcheck
# On Arch: pacman -S bats shellcheck
# On Ubuntu: apt install bats shellchecktask --list| Task | Description |
|---|---|
task install |
Run installation |
task stow |
Re-stow dotfiles |
task clean |
Clean integration containers/images and temp logs |
task style |
Run ShellCheck and RuboCop |
task test |
Run default local tests (unit + bin) |
task test:unit |
Run Ruby installer tests and pi extension tests when bun is available |
task test:integration |
Run integration tests separately (requires Docker and task build) |
task build |
Build Docker images |
task generate |
Generate configs |
task test:unitRuby installer tests use Minitest in test/unit/test_installer.rb. Bin tests use BATS and Ruby under home/bin/test/.
task build # First time
task test:integration # All platforms
task test:integration -- ubuntu-22 # Single platformPlatforms: ubuntu-22, ubuntu-24, debian, arch, ubuntu-minimal. The minimal Ubuntu image starts without Ruby or Bundler so install.sh bootstrap assumptions stay covered.
TRACE=1 ./install.sh 2>&1 | tee install.log
cat "${XDG_STATE_HOME:-$HOME/.local/state}/shell/install.json" # Reboot continuation stateEdit packages.yml:
apt:
- new-package
custom_bootstrap:
- install_runtime_before_npm
machine_profiles:
default:
bootstrap:
apt:
- curlUse package_managers for required package-manager bootstrap and machine_profiles for host/profile-specific prerequisites. Profile selection order is SHELL_MACHINE_PROFILE, hostname, then default.
- Use
set -euo pipefail - Quote variables:
"$var" - Use
[[ ]]for tests - Pass ShellCheck:
task style