# Python CLI Template A minimal Cookiecutter template for building personal CLI tools with `uv`, Typer, and strict typing. ## Features - CLI with Typer - `uv_build` backend and lockfile-first reproducibility - Ruff for linting/formatting - MyPy strict mode - Pytest with coverage - Invoke tasks for common operations ## Quick Start 1. Generate a new project: ```bash cruft create git@git.roxautomation.com:sjev/python-cli-template.git ``` Or locally: ```bash cookiecutter /path/to/python-cli-template ``` 2. Post-generation hook runs `uv lock` to create `uv.lock`. 3. Bootstrap the generated project: ```bash uv sync --frozen --group dev uv run invoke lint uv run invoke test ``` ## Template Variables | Variable | Description | Example | |----------|-------------|---------| | `project_name` | Human-readable project name | "My CLI App" | | `project_slug` | Repository/directory name | "my-cli-app" | | `package_name` | Python package name | "my_cli_app" | | `description` | Short project description | "A modern CLI tool" | | `author_name` | Author's full name | "Your Name" | | `author_email` | Author's email | "your.email@example.com" | | `version` | Initial version | "0.1.0" | Python is fixed to 3.12+ by template policy. ## Generated Project Structure ``` your-project/ ├── README.md ├── pyproject.toml ├── tasks.py ├── uv.lock ├── src/ │ └── your_package/ │ ├── __init__.py │ ├── py.typed │ └── cli.py └── tests/ └── test_cli.py ``` ## Template Development To modify this template: 1. Edit files in `{{cookiecutter.project_slug}}/` 2. Update variables in `cookiecutter.json` 3. Test changes: ```bash ./test.sh ``` ## Requirements - Python 3.12+ - `uv` - `cruft` or `cookiecutter`