Appendix C — Contributing

Contributions are very welcome; please contact us by email or by filing an issue in our repository. All contributors must abide by our Code of Conduct.

C.1 Setup and Operation

  • Install uv.
  • Create a virtual environment: uv venv.
  • Activate it: source .venv/bin/activate.
  • Install dependencies: uv sync.
  • Run task --list to see a list of common commands.

C.2 Style and Structure

  • Lessons are written in Markdown and compiled to HTML using the mccole static site generator.
    • Each lesson should take about an hour to work through.
  • Lessons are in slug directories
    • slug is short mnemonic
    • Each lesson must have an index.md file containing its content
    • And may also have a slides.md file with Shower slides
  • Use @/some/path/ for internal links
    • The leading @ is translated into a relative reference to the project root
  • The Markdown link definitions in _extras/links.md are appended to all Markdown files
    • This helps ensure consistent link URLs across pages
  • Figures, code inclusions, citations, and glossary references are formatted using mccole shortcodes.
  • The home page for the site is generated from README.md
    • The navigation menus for lessons and appendices are generated from the lessons and appendices div elements in README.md
  • Diagrams should be SVG files created with draw.io
  • bibliography/index.md has the bibliography as a definition list
    • Citation keys have IDs for linking
    • Use an inline HTML link b:key in files to create links
  • glossary/index.md has the glossary as definition list
    • Reference keys have IDs for linking
    • Use an inline HTML link g:key in files to create links
  • The _static directory contains CSS and JavaScript files
  • The _templates directory contains Jinja templates used to generate HTML

C.3 FAQ

Do you need help?
Yes—please see the issues in our repository.
What sort of feedback would be useful?
Everything is welcome, from pointing out mistakes to suggestions for better explanations.
Can I add a new section?
Possibly, but please reach out before doing so.
Why is this material free?
Because if we all give a little, we all get a lot.