# thesa

`thesa` is a Rust CLI that clones public GitHub repositories for a
person, organization, or a single repository.

## Install

`cargo install --path .`

From crates.io after publishing:

`cargo install thesa`

Then run:

`thesa`

## Usage

`thesa [TARGET] [options]`

Run with no arguments for interactive mode.

`TARGET` can be one of: `owner`, `owner/repo`, `https://github.com/owner`,
`https://github.com/owner/repo`.

Common options:

- `--depth <DEPTH>`: clone with commit depth
- `-c, --concurrency <N>`: number of repos cloned in parallel (default `4`)
- `--filter <PATTERN>`: filter repository names by substring
- `--skip-existing`: skip repos that are already present
- `--token <TOKEN>`: GitHub API token (or use `GITHUB_TOKEN` env)

Repo picker controls (TTY only):

- `Space`: check or uncheck a repo
- `a`: check all visible repos
- `c`: clear filter and checks
- `b`: open batch-size overlay (`1`, `2`, `3`, `6`, `8`)
- `Enter`: clone checked repos only, or visible repos when nothing is checked

Clone dashboard controls (TTY only):

- `t`: toggle repository detail lines in the live batch display
- `q`: request stop after current batch completes
- `m`: Matrix effect
- `b`: Burn effect
- `w`: Wipe effect

TTY clone runs use a Ratatui dashboard. Aisling renders the Matrix/Burn/Wipe
effect pane and the TQDM-style loader rows for concurrent repository pulls.

Examples:

- Start TUI and pick target/repo interactively:
  - `thesa`
- Clone one repo:
  - `thesa torvalds/linux --output ./repos`
- Clone all public repos for a user/org with shallow history:
  - `thesa octocat --output ./repos --depth 1`
- Clone with explicit concurrency:
  - `thesa octocat --concurrency 8 --output ./repos`
- Preview actions before cloning:
  - `thesa org-name --dry-run`

## Scripts

You can compile and run with helper scripts:

- Run from repo root (interactive target prompt):
  - `./run.sh`
- Pass a target directly:
  - `./run.sh <target> [output-root] [concurrency] [extra thesa flags]`

- Compile only:
  - `./scripts/compile.sh`
- Compile and run (default concurrency `4`):
  - `./scripts/run.sh <target> [output-root] [concurrency] [extra thesa flags excluding --output]`

- Publish release to crates.io:
  - `./scripts/publish.sh --allow-dirty`
  - `./scripts/publish.sh --dry-run` (safe checks only)

`run.sh` creates an output folder from the target name (for example `owner` or,
for `owner/repo`, just `repo`) and runs clones inside that folder.

## Notes

- `--concurrency` sets the concurrent clone batch size.
- private repositories are intentionally skipped/blocked.
