Usage#

Development#

The project uses uv for Python dependency management and direnv for automatic environment activation.

Make Targets#

Run make help for the full list:

  init            Install pre-commit hooks
  lint            Lint codebase with pre-commit
  type            Type-check Python scripts with mypy
  test            Run tests with pytest and coverage
  xdoc            Run xdoctest on scripts
  check           Run all checks (lint + type + test + cov)
  docs            Build Sphinx documentation
  bump            Bump version, update changelog, and tag release
  test-emacs      Run Emacs smoke tests
  upgrade-emacs   Full upgrade: update + smoke tests
  thaw-emacs      Restore straight.el repos to match lockfile
  clean           Remove temporary and cache files

Commit Conventions#

Follow Conventional Commits. Scopes reflect the configuration domain:

feat(emacs): add consult-ripgrep binding
fix(git): correct delta pager config
chore(deps): update uv.lock

Testing#

make test                # Python script tests
make test-emacs          # Emacs smoke tests (~70 checks)
make xdoc                # Run doctests
make check               # lint + type + test + coverage

CI / Automation#

Workflow

Trigger

Purpose

ci.yml

push, PR

pre-commit lint, pytest, auto-merge

update-emacs.yml

dispatch, push

Emacs smoke tests / package update + PR

cruft-update.yml

weekly, dispatch

Apply cookiecutter template updates

lockfile-update.yml

weekly, dispatch

uv lock --upgrade + PR

release.yml

tag push

Publish release