From 60db39f9dae4c11792185609d4d90fc6dc1dea73 Mon Sep 17 00:00:00 2001 From: Sterling Archer Date: Thu, 16 Jul 2026 17:00:05 -0700 Subject: [PATCH] Update README.md --- README.md | 6 ------ 1 file changed, 6 deletions(-) diff --git a/README.md b/README.md index fa960d0..e58e873 100644 --- a/README.md +++ b/README.md @@ -179,12 +179,6 @@ xteink-plugins/ └── PongActivity.h/.cpp ``` -### Why plugin.py instead of patch.py - -Previously every plugin's `patch.py` directly rewrote CrossPoint's shared source files with hand-written string edits, and each one had to hardcode knowledge of every *other* plugin's edits to land in the right place (e.g. darkmode's patch literally contained smallerfonts' settings entry). That's fine as long as you always install every plugin together in the same order, but install any subset, or add a new plugin later, and those hardcoded assumptions stop holding - settings referenced fields that were never declared, and the build failed. - -`plugin.py` instead returns a declarative `PluginManifest` (see `framework/manifest.py`) describing *what* the plugin needs - a settings field, a row in the on-device "Plugins" tab, a new `SettingAction`, a boot-time hook, and so on. A single engine (`framework/engine.py`) collects the manifests of only the plugins you actually selected and writes each shared file exactly once, built fresh from that selection. Installing 1 plugin or all 7, in any combination, produces internally consistent output every time. - ## Troubleshooting ### Linux: Permission denied when flashing