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.1.tar.gz (222.8 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.1-py3-none-any.whl (96.8 kB view details)

Uploaded Python 3

File details

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

File metadata

  • Download URL: parch-0.1.1.tar.gz
  • Upload date:
  • Size: 222.8 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.1.tar.gz
Algorithm Hash digest
SHA256 7094c4143adfa52084f2a3b5189f17efd56b6d452c93cafe1447ce9d12c6b97b
MD5 83d727cf24b904c621bf43e2921b6a51
BLAKE2b-256 02e32ecb94ef1c40b9d7915a519aba0e9cf6b46e82f5a1d1ebdbda76c667a764

See more details on using hashes here.

Provenance

The following attestation bundles were made for parch-0.1.1.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.1-py3-none-any.whl.

File metadata

  • Download URL: parch-0.1.1-py3-none-any.whl
  • Upload date:
  • Size: 96.8 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.1-py3-none-any.whl
Algorithm Hash digest
SHA256 a766ca2b90a73ada4ad03e08dd84e0af2d94cf62d730e956a32e9f2bb72c2988
MD5 65f2c3b437cebe0904975088ad7ec5a5
BLAKE2b-256 e59e7411acfed91e8864007b4903e951a29ad9570976a7999fb0e2e18c7219bc

See more details on using hashes here.

Provenance

The following attestation bundles were made for parch-0.1.1-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

This release

0.1.1 This release

2 files

0.1.0

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