homebrew-fonts/CLAUDE.md
Matt Troutman 91d5ffad9d
Update Gitea URL from port 3002 to 8085 and add sha256 to formulae
All formulae were failing to download because the archive URL pointed to
the old Gitea port (3002). Updated to port 8085 and computed the correct
sha256 hash for the archive.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-07 21:18:58 -06:00

53 lines
2.7 KiB
Markdown

# CLAUDE.md
This file provides guidance to Claude Code (claude.ai/code) when working with code in this repository.
## What This Is
A Homebrew tap for custom fonts. Users `brew tap` and then `brew install font-<name>`. The repo contains font assets in `font_files/` and generated Ruby formulae in `Formula/`.
## Commands
```bash
# Add or update a font (cleanup + formula generation + tests + brew audit)
uv run add-font <path_or_name>
uv run add-font <path_or_name> --no-test --no-audit
# Run tests
uv run pytest tests/ -v --tb=short
# Run a single test file
uv run pytest tests/test_font_structure.py -v
# Run tests for a specific font
uv run pytest tests/ -v -k "font-acrylic-hand"
# Regenerate all formulae (without the full add-font flow)
python3 .fontfoldercleanup/create_homebrew_formula.py
# Reorganize font folders only
python3 .fontfoldercleanup/cleanup_font_folders.py --path font_files
```
## Architecture
- **`font_files/font-<name>/`** — Each font has exactly 4 subdirs: `ttf/`, `otf/`, `web/`, `other_files/`. No other top-level files allowed.
- **`Formula/font-<name>.rb`** — Generated Ruby formulae. **Never edit by hand.** Edits go in `.fontfoldercleanup/create_homebrew_formula.py`.
- **`tap_cli/main.py`** — The `add-font` CLI entry point. Copies font to `font_files/`, runs cleanup script, runs formula generator, then runs tests and `brew audit`.
- **`.fontfoldercleanup/cleanup_font_folders.py`** — Sorts loose font files into `ttf/`, `otf/`, `web/`, `other_files/` subdirs.
- **`.fontfoldercleanup/create_homebrew_formula.py`** — Scans `font_files/font-*` and writes one `.rb` per font. Contains `HomebrewFormulaGenerator` class and `formula_name_to_class()` for Ruby PascalCase conversion.
- **`tests/`** — Parametrized pytest suite. Tests validate: folder structure, formula existence, formula content (paths, class name), no orphan formulae, no duplicates.
- **`To Sort/`** — Staging area for new downloads not yet processed.
## Formula Naming Convention
`font-<name>` → Ruby class `Font<PascalCase>`. Split on hyphens/underscores, capitalize each part:
- `font-acrylic-hand``FontAcrylicHand`
- `font-graham_hand``FontGrahamHand`
## Key Constraints
- Python 3, standard library only (pathlib, shutil, argparse, re). pytest is the sole dependency.
- Formulae download from `http://clancy.genet-godzilla.ts.net:8085/Fonts/homebrew-fonts/archive/main.tar.gz` and expect the archive to unpack as `homebrew-fonts-main/`.
- CI runs `uv run pytest` on push/PR to main, plus `brew audit` on macOS (non-blocking).
- `PROJECT.md` is the canonical project description. When updating project rules, update `PROJECT.md` first, then sync `.cursorrules`, `.github/copilot-instructions.md`, and `.claude/skills/project-context/SKILL.md`.