# ๐Ÿงฐ TSYSDevStack Toolbox Base Daily-driver development container for ToolboxStack work. It provides a reproducible Ubuntu 24.04 environment with curated shell tooling, package managers, and helper scripts. --- ## ๐Ÿš€ Quick Start 1. **Build the image** ```bash ./build.sh ``` > Uses `docker buildx` with a local cache at `.build-cache/` for faster rebuilds. 2. **Start the container** ```bash ./run.sh up ``` > Mise runtimes persist to your host in `~/.local/share/mise` and `~/.cache/mise` so language/tool downloads are shared across projects. 3. **Attach to a shell** ```bash docker exec -it tsysdevstack-toolboxstack-toolbox-base zsh # or: bash / fish ``` 4. **Stop the container** ```bash ./run.sh down ``` The compose service mounts the current repo to `/workspace` (read/write) and runs as the mapped host user (`toolbox`). --- ## ๐Ÿงฉ Tooling Inventory | Category | Tooling | Notes | |----------|---------|-------| | **Shells & Prompts** | ๐Ÿš `zsh` โ€ข ๐ŸŸ `fish` โ€ข ๐Ÿง‘โ€๐Ÿ’ป `bash` โ€ข โญ `starship` โ€ข ๐Ÿ’Ž `oh-my-zsh` | Starship prompt enabled for all shells; oh-my-zsh configured with `git` + `fzf` plugins. | | **Runtime & CLI Managers** | ๐Ÿช„ `mise` โ€ข ๐Ÿ’ง `aqua` | `mise` handles language/tool runtimes (activation wired into zsh/bash/fish); `aqua` manages standalone CLIs with config at `~/.config/aquaproj-aqua/aqua.yaml`. | | **Core CLI Utilities** | ๐Ÿ“ฆ `curl` โ€ข ๐Ÿ“ฅ `wget` โ€ข ๐Ÿ” `ca-certificates` โ€ข ๐Ÿงญ `git` โ€ข ๐Ÿ”ง `build-essential` + headers (`pkg-config`, `libssl-dev`, `zlib1g-dev`, `libffi-dev`, `libsqlite3-dev`, `libreadline-dev`, `make`) โ€ข ๐Ÿ” `ripgrep` โ€ข ๐Ÿงญ `fzf` โ€ข ๐Ÿ“ `fd` โ€ข ๐Ÿ“– `bat` โ€ข ๐Ÿ”— `openssh-client` โ€ข ๐Ÿงต `tmux` โ€ข ๐Ÿ–ฅ๏ธ `screen` โ€ข ๐Ÿ“ˆ `htop` โ€ข ๐Ÿ“‰ `btop` โ€ข โ™ป๏ธ `entr` โ€ข ๐Ÿ“Š `jq` โ€ข ๐ŸŒ `httpie` โ€ข โ˜• `tea` โ€ข ๐Ÿงฎ `bc` | Provides ergonomic defaults plus toolchain deps for compiling runtimes (no global language installs). | | **Aqua-Managed CLIs** | ๐Ÿ™ `gh` โ€ข ๐ŸŒ€ `lazygit` โ€ข ๐Ÿช„ `direnv` โ€ข ๐ŸŽจ `git-delta` โ€ข ๐Ÿงญ `zoxide` โ€ข ๐Ÿงฐ `just` โ€ข ๐Ÿงพ `yq` โ€ข โšก `xh` โ€ข ๐ŸŒ `curlie` โ€ข ๐Ÿ  `chezmoi` โ€ข ๐Ÿ› ๏ธ `shfmt` โ€ข โœ… `shellcheck` โ€ข ๐Ÿณ `hadolint` โ€ข ๐Ÿ `uv` โ€ข ๐Ÿ” `watchexec` | Extend via `~/.config/aquaproj-aqua/aqua.yaml` and run `aqua install`. Direnv logging is muted and hooks for direnv/zoxide are pre-configured for zsh, bash, and fish. | | **Container Workflow** | ๐Ÿณ Docker socket mount (`/var/run/docker.sock`) | Enables Docker CLIs inside the container; host Docker daemon required. | | **Runtime Environment** | ๐Ÿ‘ค Non-root user `toolbox` (UID/GID mapped) โ€ข ๐Ÿ—‚๏ธ `/workspace` mount | Maintains host permissions and isolates artifacts under `artifacts/ToolboxStack/toolbox-base`. | --- ## ๐Ÿ› ๏ธ Extending the Sandbox - **Add a runtime**: `mise use python@3.12` (per project). Run inside `/workspace` to persist `.mise.toml`. - **Add a CLI tool**: update `~/.config/aquaproj-aqua/aqua.yaml`, then run `aqua install`. - **Adjust base image**: modify `Dockerfile`, run `./build.sh`, and keep this README & `PROMPT` in sync. > ๐Ÿ” **Documentation policy:** Whenever you add/remove tooling or change the developer experience, update both this README and the `PROMPT` file so the next collaborator has an accurate snapshot. --- ## ๐Ÿ“‚ Project Layout | Path | Purpose | |------|---------| | `Dockerfile` | Defines the toolbox-base image. | | `docker-compose.yml` | Compose service providing the container runtime. | | `build.sh` | Wrapper around `docker build` with host UID/GID mapping. | | `run.sh` | Helper to bring the compose service up/down (exports UID/GID env vars). | | `.devcontainer/devcontainer.json` | VS Code remote container definition. | | `aqua.yaml` | Default aqua configuration (gh, tea, lazygit). | | `PROMPT` | LLM onboarding prompt for future contributors (must remain current). | --- ## โœ… Verification Checklist After any image changes: 1. Run `./build.sh` and ensure it succeeds. 2. Optionally `./run.sh up` and sanity-check key tooling (e.g., `mise --version`, `gh --version`). 3. Update this README and the `PROMPT` with any new or removed tooling. --- ## ๐Ÿค Collaboration Notes - Container always runs as the mapped non-root user; avoid adding steps that require root login. - Prefer `mise`/`aqua` for new tooling to keep installations reproducible. - Keep documentation synchronized (README + PROMPT) so future contributors can resume quickly.