A modular, editor-agnostic build system for font development
curl https://www.hellbox.dev/install.sh -sSf | shtap hellboxpy/hellbox && brew install hellThe install command above installs hell, the CLI for managing Hellbox projects. Once installed, run hell init inside your project directory:
$ hell initThis creates a Hellfile.py where your tasks live, sets up an isolated virtual environment, and installs hellbox itself. If you're joining an existing Hellbox project, run hell install instead to install its pinned dependencies.
Hellbox tasks are pipelines made of chutes — small, single-purpose modules that pass files from one step to the next using the >>operator. Chutes can be mixed, matched, and shared across projects.
task.read("*.ufo")GenerateOtf()task.write("./otf")from hellbox import Hellbox
from hellbox_generate_otf import GenerateOtf
with Hellbox("build") as task:
task.describe("Builds .otf files from .ufo source")
task.read("*.ufo") >> GenerateOtf() >> task.write("./otf")Run with hell run build.
Subclass Chute and implement process, which is called once per file and returns the file, a list of files, or None to drop it. Optionally implement flush to operate on the full batch after all files have been processed.
from hellbox import Chute
class FilterByExt(Chute):
def __init__(self, *extensions):
self.extensions = extensions
def process(self, file):
if file.extension in self.extensions:
return file
return Nonehell CLI