Skip to main content

parch

Parch generates yearly planner PDFs for e-ink devices. Python port of Vitaliy Kudryk’s LYP: read a device profile, emit Typst, compile to PDF.

Formerly eink-planner.

This is a port of Vitaliy Kudryk's LYP (latex-yearly-planner) (fork point commit, MIT, 2026). LYP generates a yearly planner by emitting Typst, then compiling that to PDF. This package keeps that architecture: Python reads a TOML device profile, walks calendar entities, and writes index.typst + index.pdf. It does not draw PDFs with reportlab/fpdf.

Default device is the SuperNote Nomad (A6 X2), MOS strip on the left. A Nomad MOS-right sibling, Kindle Scribe, and 158×210 MOS-left/MOS-right profiles are also shipped.

Install

Needs uv and Python 3.12+.

uv tool install parch
parch generate supernote-nomad

typst is used to compile the PDF. If it is not on PATH, the compile step downloads the official Typst v0.15.1 binary for the current OS/arch into .tools/typst (.tools/typst.exe on Windows).

Generate

# SuperNote Nomad 2026 (default profile, MOS-left) → ./out/index.pdf
uv run parch generate supernote-nomad

# SuperNote Nomad 2027 from the shipped 2026 profile (CLI overlay)
uv run parch generate supernote-nomad --year 2027

# SuperNote Nomad MOS-right → ./out/nomad-mos-right/index.pdf
uv run parch generate supernote-nomad-mos-right -w out/nomad-mos-right

# 158×210 MOS-left → ./out/mos-left/index.pdf
uv run parch generate 158x210-mos-left -w out/mos-left

# 158×210 MOS-left lined → ./out/mos-left-lined/index.pdf
uv run parch generate 158x210-mos-left-lined -w out/mos-left-lined

# 158×210 MOS-right → ./out/mos-right/index.pdf
uv run parch generate 158x210-mos-right -w out/mos-right

# Kindle Scribe → ./out/scribe/index.pdf
uv run parch generate kindle-scribe -w out/scribe

Flags:

Flag Default Meaning
-w / --workdir ./out Where index.typst and index.pdf are written
-l / --locale en Locale code
-g / --with-ghostscript off Optional PDF shrink via gs
--debug off Draw MOS debug strokes (not a config key)
--year file year Overlay planner year (dates and cover title; not a config key)

--year also rewrites the cover title year when the old year is in the title.

Copy a shipped profile to start a new year or trim sections:

uv run parch new --from supernote-nomad --year 2027 --yes -o mine.toml

parch new without --yes asks for starting profile, year, sections, and output path. Locale stays parch generate -l.

A name in the top-level sections = ["cover", …] list is enabled, in that order. Comment a name out of sections to disable it. Details live under [section.<name>]. There is no enabled = true flag, and debug does not belong in the profile — use parch generate --debug. At least one section must remain.

Sample pages

2026 from 158x210-mos-left. MOS strip on the left. This profile ships cover, Contents, the calendar sections, and the colophon (no projects, habits, review, tasks, or meetings). Previews are Typst SVGs at half scale. Regenerate with:

uv run parch preview-svg 158x210-mos-left --samples
Section Page
Cover Cover
Contents Contents
Annual Annual
Quarterly Quarterly
Monthly Monthly
Weekly Weekly
Daily Daily
Daily notes Daily notes
Colophon Colophon

Device profiles

Sizes are 1:1 on glass at 300 PPI.

Device Pixels Page (pt) Page (mm) Config
SuperNote Nomad (A6 X2) 1404×1872 336.96×449.28 118.87×158.5 supernote-nomad
SuperNote Nomad MOS-right 1404×1872 336.96×449.28 118.87×158.5 supernote-nomad-mos-right
158×210 MOS-left 447.87×595.28 158×210 158x210-mos-left
158×210 MOS-left lined 447.87×595.28 158×210 158x210-mos-left-lined
158×210 MOS-right 447.87×595.28 158×210 158x210-mos-right
Kindle Scribe 1860×2480 446.4×595.2 157.48×209.97 kindle-scribe

Presets also live in parch.devices. The Nomad profile scales strokes, type, and gutters down slightly from the original 158×210 MOS-left gist so the MOS layout still fits the smaller page.

MOS is Months on the Side — the navigation style that places a vertical month menu on the side of the page (as opposed to a top breadcrumb trail).

Shipped configs keep the MOS (Months on the Side) layout: side menu on the physical left except 158×210 MOS-right and SuperNote Nomad MOS-right (physical right), reversed months/quarters, Monday week start, daily schedule 8–20, 5 priorities, 2 extra daily note pages, dotted scratch pad on most shipped configs (the 158×210 MOS-left lined sibling uses scratch_pad = "lined" under [style] with daily on-page notes still dotted). pattern is per notes area (dotted default; lined is the other option). MOS-left/MOS-right names are the physical MOS strip side (nav left / nav right), not which hand you write with. MOS-left is the right-handed writing layout (nav opposite the writing hand); MOS-right is the left-handed writing layout.

Device profiles and locale files are TOML. Config keys use underscores (week_starts, side_menu, daily_notes); filenames may still use hyphens (supernote-nomad.toml).

Development

cd parch
uv sync

Tests

uv run pytest

CI runs pytest and a Nomad parch generate. Visual design checks live in tests/visual.py and can be dropped with the tests that import them.

Layout of a generated planner

Enabled MOS (Months on the Side) sections, in order:

  1. Cover
  2. Annual (12 little calendars)
  3. Quarterly
  4. Monthly
  5. Weekly
  6. Daily (schedule + little calendar + priorities + notes)
  7. Daily notes (extra dotted pages)
  8. Projects (index of write-in names + one kanban board per project)
  9. Habits (index of 12 months + one habit-tracker grid per month)
  10. Review (index of weeks + one lined leftover-notes page per week; no MOS)
  11. Meetings (index of write-in names + one lined page per meeting)
  12. Colophon (quiet About page)

[section.projects] takes optional pages (default 16) and card_rows (default 5). Only Nomad ships projects enabled. [section.habits] takes optional habit_columns (default 6) and names (default []; first N header slots are typeset, the rest stay write-in). Enabled on both Nomad profiles. [section.review] takes optional weeks_per_page (default 13). The week field is lined by default and can be pattern = "dotted". Listing review without a table uses those defaults. Enabled on both Nomad profiles after Habits. [section.meetings] takes optional index_pages (default 1). Enabled on Nomad after Review.

Internal PDF links use Typst #padded_link / <label> the same way LYP does. A link is only emitted when the target page exists; otherwise the cell stays plain text.

License

MIT. This is a port of Vitaliy Kudryk's LYP (MIT 2026). See LICENSE.

Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

parch-0.1.0.tar.gz (222.6 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

parch-0.1.0-py3-none-any.whl (94.5 kB view details)

Uploaded Python 3

File details

Details for the file parch-0.1.0.tar.gz.

File metadata

  • Download URL: parch-0.1.0.tar.gz
  • Upload date:
  • Size: 222.6 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/7.0.0 CPython/3.13.14

File hashes

Hashes for parch-0.1.0.tar.gz
Algorithm Hash digest
SHA256 c6e91b674c40ccaf70e57d28d02b3e9edaecea802a55055267962408c8d63e47
MD5 6d638f570d222356d51b9a4ee4a3e3fe
BLAKE2b-256 456cc6bf0e56d1b4cbca61191da7a785ad74002989de21a58f5058efeaa62e08

See more details on using hashes here.

Provenance

The following attestation bundles were made for parch-0.1.0.tar.gz:

Publisher: publish.yml on yyolk/parch

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file parch-0.1.0-py3-none-any.whl.

File metadata

  • Download URL: parch-0.1.0-py3-none-any.whl
  • Upload date:
  • Size: 94.5 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/7.0.0 CPython/3.13.14

File hashes

Hashes for parch-0.1.0-py3-none-any.whl
Algorithm Hash digest
SHA256 3dd22ea42ad16295f597685075301bfa52a2962c535402fec0268ff0d1bc653f
MD5 7fe35e5f95473992b4f57f05a39c0095
BLAKE2b-256 b7623e12bde88cc9092ceed8251bff2bae342377e455bd5d9ba9b07b3e38eebc

See more details on using hashes here.

Provenance

The following attestation bundles were made for parch-0.1.0-py3-none-any.whl:

Publisher: publish.yml on yyolk/parch

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Release history Release notifications | RSS feed

0.2.8

2 files

0.2.7

2 files

0.2.6

2 files

0.2.5

2 files

0.2.4

2 files

0.2.3

2 files

0.2.2

2 files

0.2.1

2 files

0.2.0

2 files

0.1.2

2 files

0.1.1

2 files

This release

0.1.0 This release

2 files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page