Files
xteink-plugins/README.md
T
2026-04-01 18:34:52 -07:00

3.6 KiB

xteink-plugins

A plugin system for customizing and extending CrossPoint Reader firmware on your xteink device. Plugins are applied as source-level patches before the firmware is compiled and flashed.

Plugins

Dark Mode

Adds a Dark Mode option to the Plugins settings tab. When enabled, the screen is inverted after each page render, producing white-on-black text across all reader formats (EPUB, TXT, and XTC).

State Effect
Disabled Normal display (default)
Enabled Screen inverted — white text on black background

Smaller Fonts

Adds a Smaller Fonts option to the Plugins settings tab. When enabled, your chosen reader font is transparently substituted with a smaller variant — no need to change your font preference.

Mode Effect
Disabled No change (default)
Smaller Drops the current font size down by one step (e.g. Bookerly 16 → 14)
Smallest Drops the current font size down by two steps (e.g. Bookerly 16 → 12)

Supports Bookerly, Noto Sans, and OpenDyslexic. The plugin also generates and embeds Bookerly at 8pt and 10pt — sizes not included in the stock firmware.

Requirements

  • Python 3.10+
  • PlatformIO (pio on your PATH)
  • git
  • Your xteink device connected via USB

Install Python dependencies with:

pip3 install -r requirements.txt

Usage

From the root of this repository, run:

python3 install.py

The installer will:

  1. Clone the CrossPoint Reader source repository
  2. Prompt you to select which plugins to install and apply them as patches
  3. Build the firmware with PlatformIO
  4. Auto-detect your device's serial port and flash the firmware

Note: This script modifies and flashes custom firmware to your device. The author accepts no responsibility for any damage that may occur to your device as a result of using this installer.

Repository Structure

xteink-plugins/
├── install.py              # Interactive installer: clone → patch → build → flash
└── plugins/
    ├── darkmode/
    │   ├── patch.py                      # Patch script applied to the CrossPoint source
    │   ├── DarkModePlugin.h/.cpp         # Dark mode state and screen inversion logic
    │   └── DarkModeSettingsPage.h/.cpp   # Settings UI activity
    └── smallerfonts/
        ├── patch.py                        # Patch script applied to the CrossPoint source
        ├── SmallerFontsPlugin.h/.cpp       # Font resolution logic
        └── SmallerFontsSettingsPage.h/.cpp # Settings UI activity

Troubleshooting

Linux: Permission denied when flashing

If you see an error like Could not open /dev/ttyACM0, the port is busy or doesn't exist or Permission denied, your user needs to be added to the dialout group:

sudo usermod -aG dialout $USER

Log out and log back in for the change to take effect, then re-run install.py.

Adding a Plugin

  1. Create a new directory under plugins/ with your plugin's name.
  2. Add a patch.py file with a patch(repo_dir: str) function. This function receives the absolute path to the cloned CrossPoint repository and should make all necessary modifications.

The installer will automatically discover and offer to install any directory under plugins/ that contains a patch.py.