Source: CSL Tools
Repo: VHCosta/csl-tools
Stack: Bash for Termux/Linux, PowerShell for Windows 11
Status: Live cross-repo operator tooling for the CSL workspace
Purpose
csl-tools is the versioned home for cross-repo workspace automation.
It is not a monorepo and it is not a source-of-truth repo for course content. Its job is orchestration:
- update all sibling repos in the workspace
- surface cross-repo status and logs
- run workspace-level build/export flows
- provide environment-specific operator commands
This repo exists because the real workspace root (csl/) is just a local folder
of sibling repos, not a git repo of its own.
Workspace model
Canonical shared-storage workspace on current Termux setup:
/storage/emulated/0/code/csl/
├── llc-course/
├── llc-companion/
├── llc-companion-pdf/
├── llc-wiki/
├── c-systems-lab-exercises/
└── scripts/csl-tools assumes a sibling-repo workspace like the above and provides the
commands that operate across it.
Main commands
csl-update
Pull latest changes across all direct child repos in the workspace.
- stashes local changes before pull
- runs
git pull --ff-only - restores the stash afterward
csl-update --setup
Runs the normal update flow, then runs csl-setup.
This is the standard “refresh my working environment” command on Termux.
csl-setup
Termux-focused internal-mirror setup.
It rebuilds $HOME/code/csl from the shared-storage workspace and then runs the
internal scripts/setup-all.sh there, so npm install happens off shared
storage and avoids Android filesystem limitations.
csl-status
Cross-repo status snapshot:
- recent commits per repo
- active branch
- dirty working tree count
- next-up items from status files where present
csl-log
Merged commit timeline across repos, sorted by commit date.
csl-build
Cross-repo build helper for the PDF/export path.
Today it primarily orchestrates llc-companion-pdf and llc-course/dist.sh.
csl-push
Convenience wrapper for stage → commit → push on a chosen repo.
Environment notes
Android / Termux
This is the most constrained environment.
- Shared storage (
/storage/emulated/0/...) is convenient for files and editors - But Node/Vite installs there fail on symlinks and native binary execution
- Therefore the workspace uses an internal mirror at
$HOME/code/csl
For this environment, csl-update --setup and csl-setup are first-class
commands, not optional niceties.
Omarchy Linux (Arch-based)
The internal mirror pattern is generally unnecessary.
The tooling still works, but the main value of csl-tools on Linux is:
- cross-repo update/status/log
- PDF/export orchestration
- one-command repo operations
Windows 11
Windows support lives in bin-win/.
PowerShell is the entrypoint, but some workflows still shell out to bash when the underlying project scripts are bash-based. This is intentional:
- PowerShell provides the user-facing wrappers
- bash is used where the project’s real build scripts are already in bash
Scope boundary
What belongs in csl-tools:
- cross-repo automation
- workspace update/setup commands
- environment-specific wrappers
- operator docs for commands
What does not belong in csl-tools:
- lesson content
- PDF chapter content
- canonical exercise source
- repo-internal architecture docs
Those stay in the actual source repos.
Related pages
- meta-workspace-tooling — how the whole workspace is operated across environments
- source-course-repo — web app and canonical exercise tree
- source-companion-pdf — Typst PDF repo
- source-exercise-plan — exercise/export architecture