A lightweight terminal workflow for daily Bible reading.
This project stores a day-by-day reading plan, shows one day at a time, and tracks your progress using standard Linux (XDG) directories.
- Imports a WorldBiblePlans-style EPUB into a normalized markdown plan.
- Splits a full markdown plan into one file per day with commentary.
- Extracts scripture-only files from commentary files.
- Shows today's reading in the terminal and optionally advances your day counter.
- Includes a command to prompt you to read only once per day, perfect for your shell startup file.
plan.md: Source markdown reading plan (generated or provided by you).days-commentary/: Per-day files containing label, reference, scripture, and commentary.days/: Per-day scripture-only files.src/bible_reader/: The core Python package containing all script logic.tests/: Unit tests for the package.
This project respects standard Linux directory structures to keep your home folder clean. Your reading progress and prompt history are stored here:
- Reading Progress:
~/.local/share/bible-reader/current_day.txt - Daily Prompt Stamp:
~/.local/state/bible-reader/last_prompt_date.txt
If you ever need to reset your local progress, you can edit or delete those specific files.
- Python 3.11+
- uv (Recommended for installation and dependency management)
This project is built as a modern Python package.
-
Clone the repository and move into the project directory:
git clone [https://github.com/RareBird15/bible-reader.git](https://github.com/RareBird15/bible-reader.git) cd bible-reader -
Install the package and its dependencies using
uv. The-eflag installs it in "editable" mode so any changes you pull from GitHub apply immediately.uv pip install -e .Note: If you do not use
uv, standardpip install -e .will also work.
Once installed, the tools are available as global terminal commands.
This project is actively developed.
Development cadence may be uneven, and there may be periods of slower progress or pauses due to health limitations. Bug reports and well-scoped contributions are still welcome during those periods.
Accessibility is a core project goal.
This project aims to provide an easy, low-friction, screen-reader-friendly way to read the Bible in a terminal workflow.
When changing output, prompts, or documentation, prefer:
- plain, readable text over decorative formatting.
- predictable headings and labels.
- wording that makes sense when read aloud by a screen reader.
- output that does not rely on visual alignment, color, or ASCII art to communicate meaning.
Contributors should treat regressions in accessibility as real regressions, not cosmetic issues.
Run these checks locally before committing:
uv run ruff check .
uv run python3 -m unittest discover tests -vBecause this is a Python package, you no longer need to type python3 path/to/script.py. You can use the installed commands from anywhere in your terminal.
If you are starting from a new WorldBiblePlans EPUB, run this sequence from the project root:
import-epub /path/to/plan.epub --output plan.md
split-plan
extract-scriptureTo read today's passage:
bible-readerWhen prompted:
- Enter
yto mark the reading complete and advance to the next day. - Enter
nto keep your current day.
If you want your terminal to prompt you to read when you open it, but only once per day, add this command to your .bashrc or .zshrc:
maybe-read-bibleAll commands support a --debug flag for verbose troubleshooting output.
Usage: import-epub /path/to/plan.epub --output plan.md
- Reads EPUB spine order from the package document.
- Detects day pages from
h1headings likeDay N:. - Writes normalized sections with scripture and commentary
##headings.
Usage: split-plan
- Splits
plan.mdand writesdays-commentary/day0001.txt,day0002.txt, etc. - Validates each non-cover section has at least two
##headings.
Usage: extract-scripture
- Extracts the text between the first and second
##headings from the commentary files. - Writes scripture-only files into
days/with matching day filenames.
Usage: bible-reader
- Initializes
current_day.txtin your XDG Data directory if missing. - Prints the day label, reference, and scripture text.
- Prompts to mark complete and increments the counter on
y. - Uses a file lock to prevent multiple terminal tabs from overwriting your progress concurrently.
Usage: maybe-read-bible
- Uses a date stamp in your XDG State directory to avoid prompting more than once per calendar date.
- Updates the stamp only when you mark the reading complete (
y). - Delegates locking and reading logic to the main
bible-readerworkflow.
The EPUB import flow is designed specifically for plans from WorldBiblePlans.com:
Current compatibility target:
- Plans that include full Bible text plus commentary in each day page.
Known-compatible sample:
New-Living-Translation-2015-Chuck-Smith-Commentary-Gen-to-Rev-Scriptures-1-Chapter-Daily-Verse-By-Day.epub
Important limitation: Other EPUB layouts (e.g., plans without commentary, alternate heading structures) are not guaranteed to parse correctly as they have not been broadly tested.
This repository is intended to distribute tooling only.
- Do not commit or publish copyrighted plan content (for example EPUB source files, generated
plan.md,days/, ordays-commentary/) unless you have explicit rights to do so. - The repository ignores those content paths by default so they stay local.
- Users should provide their own plan files and are responsible for ensuring they have permission to use that content.