Metadata-Version: 2.4
Name: buvis-gems
Version: 0.1.0
Summary: BUVIS Python toolkit and CLI tools
Project-URL: Repository, https://github.com/buvis/gems
Project-URL: Documentation, https://buvis.github.io/gems/
Author-email: Tomas Bouska <tomas@buvis.net>
License-Expression: MIT
License-File: LICENSE
Requires-Python: <4.0,>=3.10
Requires-Dist: click==8.3.1
Requires-Dist: inflection==0.5.1
Requires-Dist: pexpect==4.9.0
Requires-Dist: pydantic-settings==2.12.0
Requires-Dist: pydantic==2.12.5
Requires-Dist: pywin32==311; sys_platform == 'win32'
Requires-Dist: pyyaml==6.0.3
Requires-Dist: rich==14.3.2
Requires-Dist: tomli==2.4.0; python_version < '3.11'
Requires-Dist: tzlocal==5.3.1
Requires-Dist: xattr==1.3.0; sys_platform != 'win32'
Provides-Extra: all
Requires-Dist: fastapi==0.129.0; extra == 'all'
Requires-Dist: ffmpeg-python==0.2.0; extra == 'all'
Requires-Dist: fpdf2==2.8.5; extra == 'all'
Requires-Dist: jira==3.10.5; extra == 'all'
Requires-Dist: ping3==5.1.5; extra == 'all'
Requires-Dist: pyfiglet==1.0.4; extra == 'all'
Requires-Dist: requests==2.32.5; extra == 'all'
Requires-Dist: textual==3.7.1; extra == 'all'
Requires-Dist: uvicorn[standard]<1,>=0.34; extra == 'all'
Requires-Dist: watchfiles<2,>=1.0; extra == 'all'
Provides-Extra: bim
Requires-Dist: fpdf2==2.8.5; extra == 'bim'
Requires-Dist: jira==3.10.5; extra == 'bim'
Requires-Dist: textual==3.7.1; extra == 'bim'
Provides-Extra: bim-web
Requires-Dist: fastapi==0.129.0; extra == 'bim-web'
Requires-Dist: uvicorn[standard]<1,>=0.34; extra == 'bim-web'
Requires-Dist: watchfiles<2,>=1.0; extra == 'bim-web'
Provides-Extra: hello-world
Requires-Dist: pyfiglet==1.0.4; extra == 'hello-world'
Provides-Extra: muc
Requires-Dist: ffmpeg-python==0.2.0; extra == 'muc'
Provides-Extra: pinger
Requires-Dist: ping3==5.1.5; extra == 'pinger'
Provides-Extra: readerctl
Requires-Dist: requests==2.32.5; extra == 'readerctl'
Description-Content-Type: text/markdown

# buvis-gems

BUVIS Python toolkit and CLI tools, shipped as a single PyPI package.

[Documentation](https://buvis.github.io/gems/)

## Install

```bash
uv tool install buvis-gems              # all 9 CLIs, no optional deps
uv tool install buvis-gems[bim]         # + jira & textual deps for bim
uv tool install buvis-gems[bim,muc]     # combine extras
uv tool install buvis-gems[all]         # all optional deps
```

Pre-built wheels for Linux (x64, ARM), macOS (ARM), and Windows (x64). Python 3.10+.

All 9 CLIs (`bim`, `dot`, `fctracker`, `hello-world`, `muc`, `outlookctl`, `pinger`, `readerctl`, `zseq`) are always installed. Extras add optional dependencies some tools need:

| Extra | Dep | Tool |
|-------|-----|------|
| `bim` | jira, textual, fpdf2 | bim |
| `bim-web` | fastapi, uvicorn, watchfiles | bim (web UI) |
| `hello-world` | pyfiglet | hello-world |
| `muc` | ffmpeg-python | muc |
| `pinger` | ping3 | pinger |
| `readerctl` | requests | readerctl |
| `all` | all of the above | — |

## What's inside

**Library** (`src/lib/buvis/pybase/`) — shared adapters, CLI scaffolding, configuration, filesystem and formatting utilities, plus the zettel subsystem (domain logic, Jira integration, and a Rust extension via PyO3 for performance-critical parsing).

**Tools** (`src/tools/`) — 9 Click-based CLIs built on the library:

| Tool | Purpose |
|------|---------|
| bim | BUVIS InfoMesh (zettel integration) |
| dot | Dotfiles manager |
| fctracker | Foreign currency account tracker |
| hello_world | Sample script template |
| muc | Music collection tools |
| outlookctl | Outlook CLI |
| pinger | ICMP ping utilities |
| readerctl | Readwise Reader CLI |
| zseq | Zettelsequence utilities |

## Development

```bash
uv sync --all-groups --all-extras
pre-commit install
uv run pytest
uv run mypy src/lib/ src/tools/
```

## Release

```bash
release patch|minor|major              # bump, tag, push -> CI publishes to PyPI
release --pre rc1                      # pre-release current version to TestPyPI
release --pre rc1 minor                # bump + pre-release to TestPyPI
release                                # after rc: strip suffix, release stable to PyPI
```
