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.