Various programmer utilities
Project description
🛠️ 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.
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file curu-1.0.0.tar.gz.
File metadata
- Download URL: curu-1.0.0.tar.gz
- Upload date:
- Size: 14.7 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.14.5
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
3b75293d887c825bd370385e390c6c604c80efd77dcf046c13b474f16641d5da
|
|
| MD5 |
f9ff01688e7f874746bac160e554821d
|
|
| BLAKE2b-256 |
f3a7c3378bbf9839aff49caf6c4dfd8619067259182ac2f0f2cb4cc6412419c9
|
File details
Details for the file curu-1.0.0-py3-none-any.whl.
File metadata
- Download URL: curu-1.0.0-py3-none-any.whl
- Upload date:
- Size: 14.5 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.14.5
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
22b869e641d098abde2353aa01d9450d5f08928a77c11b20e93417e5e0c5cf17
|
|
| MD5 |
b70af12986a56fa5dd0f05aad6b69fb4
|
|
| BLAKE2b-256 |
491d5b881ba9377d3718dc15443badebe4119efbf9b7b952b834d74aa546439f
|