Before you start
You need these installed and signed in before running
init.sh. The bootstrap script exits early with a clear message if anything is missing.| Requirement | Why | Check |
|---|---|---|
git ≥ 2.30 | Submodule features required by init.sh | git --version |
gh CLI, authenticated | HTTPS git auth is delegated to gh auth git-credential — no tokens in dotfiles | gh auth status |
| Node 20+ | @khal-os/* packages target modern Node | node --version |
pnpm | Workspace package manager for the SDK | pnpm --version |
bun | Runtime + package manager for pack-* repos | bun --version |
Clone and bootstrap
Authenticate with GitHub
Skip if you’re already signed in (Git HTTPS requests will route through
gh auth status prints Logged in to github.com).gh auth git-credential, so you never need to paste a personal access token into a dotfile.Clone with submodules
khal-os by convention — every guide in these docs assumes the workspace lives in a directory called khal-os/.Bootstrap the workspace
init.sh is the single bootstrap command. It fetches every sibling repo, aligns each submodule to its tracked branch, verifies the working tree, and prints role-specific next-step hints. It is idempotent — re-run it any time you pull the meta-repo or suspect your submodules drifted.Run
./init.sh --help to see the available options, including --dry-run (preview actions) and --verbose (extra debug output).
What you get
Afterinit.sh finishes, the workspace materializes every KhalOS repo so you can jump between the SDK, reference packs, and your own pack freely — without ever needing to clone a second time. You’ll edit pack code in one directory, follow a symbol into the SDK in the next, and run everything from the same terminal.
Install dependencies
Which package manager to use where —
pnpm vs bun — and how to get the whole workspace compiling.Build your first pack
Scaffold from the template, rename, edit, build — you’ll have a running pack by the end of the page.
Troubleshooting
`gh: command not found`
`gh: command not found`
Install GitHub CLI from cli.github.com and re-run
gh auth login. The workspace does not support plain HTTPS with cached passwords — it expects gh auth git-credential to be wired up.`init.sh` aborts on git version
`init.sh` aborts on git version
Upgrade to git 2.30 or newer. Older git versions don’t honor the submodule flags
init.sh relies on.I prefer SSH remotes over HTTPS
I prefer SSH remotes over HTTPS
Swap remotes after the first successful Future
init.sh:init.sh runs will use SSH.What’s next
Install dependencies
pnpm + bun + the node versions your workspace actually needs.
Your first pack
Scaffold a pack from the template and run it in the shell.