🛠️ Curu: Various Programming Utilities
Curu (Quenya “skill”, Sindarin “skill, craft, magic”) is a lightweight toolbox of Python helpers that simplify everyday programming. It currently provides these CLI tools:
| Command | What it does |
|---|---|
check-git |
Recursively finds Git repos under a folder, shows uncommitted changes and non-pushed commits. |
parse-nested |
Pretty-prints and colorizes nested/templated C++-like expressions (supports clipboard input). |
icon-scale |
Generates multiple icon PNGs at standard sizes from a single source image using libvips/pyvips. |
📦 Installation
Curu is available on PyPI and can be installed with pip, uv, or pipx:
pip install curu
# or
uv tool install curu
# or
pipx install curu
🚀 Usage
check-git
# Check a directory (recursively) for dirty Git repos and non-pushed commits
check-git path/to/folder
# Also update the default remote before checking
check-git --update-remote path/to/folder
Typical output:
/path/to/repo is dirty:
untracked: ['new_file.py']
unstaged: ['modified_file.py']
staged: ['staged_change.py']
/path/to/other_repo has non-pushed commits:
f3c2e1a Add new feature
...
parse-nested
# Format text passed as an argument
parse-nested "std::vector<std::pair<int, std::string>>"
# Format clipboard contents (no positional args → reads from clipboard)
parse-nested
# Limit maximum line width (default: 80)
parse-nested -w 100 "some very long templated type"
# Only print formatted output; do not overwrite clipboard
parse-nested -p
# Cut off nesting after a certain depth
parse-nested -d 3 "very deeply nested type..."
By default (no -p and no -d), when reading from the clipboard, it prints a colorized version to the terminal and copies a cleaned, uncolored version back to the clipboard.
icon-scale
# Generate multiple PNGs at standard sizes from one source image
icon-scale path/to/icon.png path/to/output/icon
# This writes files like:
# path/to/output/icon-512.png
# path/to/output/icon-384.png
# ...
# path/to/output/icon-48.png
The second argument is treated as a prefix: icon-scale src.png prefix
creates prefix-512.png, prefix-384.png, etc.
📜 Licence
This library is licensed under the terms of the Mozilla Public Licence 2.0, provided in License.
Metadata
Release files for curu 1.0.0
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| curu-1.0.0.tar.gz | 14.7 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| curu-1.0.0-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 29.2 kB
Release files / curu-1.0.0.tar.gz
| Download URL | curu-1.0.0.tar.gz |
|---|---|
| Size | 14.7 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
3b75293d887c825bd370385e390c6c604c80efd77dcf046c13b474f16641d5da
|
|
BLAKE2b-256 checksum How to use checksums |
f3a7c3378bbf9839aff49caf6c4dfd8619067259182ac2f0f2cb4cc6412419c9
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.2.0 CPython/3.14.5
|
Release files / curu-1.0.0-py3-none-any.whl
| Download URL | curu-1.0.0-py3-none-any.whl |
|---|---|
| Size | 14.5 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
22b869e641d098abde2353aa01d9450d5f08928a77c11b20e93417e5e0c5cf17
|
|
BLAKE2b-256 checksum How to use checksums |
491d5b881ba9377d3718dc15443badebe4119efbf9b7b952b834d74aa546439f
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.2.0 CPython/3.14.5
|