This note details the changes made to the Zen and ZMK codebase to improve the experience of e-ink displays.
Important
As of 2025-12, I no longer maintain the Zen branches under https://github.com/caksoylar/zmk. Please switch to the zen-display-patches branch maintained by @SethMilliken as noted below.
You can test out below changes using your Zen config repo by modifying your config/west.yml file, following ZMK instructions:
manifest:
remotes:
- name: SethMilliken
url-base: https://github.com/SethMilliken
projects:
- name: zmk
remote: SethMilliken
revision: zen-display-patches # custom branch name
import: app/west.yml
self:
path: config...or alternatively, you can cherry-pick specific commits noted below to your own fork of ZMK.
The improvements for Corne-ish Zen v2 (for R3 of the GB) and v1 (R1/R2 GB) are in the zen-display-patches branch of @SethMilliken's ZMK fork. (Note that you need to use corneish_zen_left@1 and corneish_zen_right@1 as the board names when building for v1.)
Below are the details of improvements, some are always in effect and some require setting corresponding config to be enabled, as detailed below.
- Avoid unnecessarily refreshing the battery level widget (reduce ghosting)
- Tweak battery level thresholds so the battery levels are more "accurate"
- Add option to hide layer changes that are momentary (using
&mo,<etc.) from the layer widget (reduces the number of partial refreshes)- https://github.com/SethMilliken/zmk/commit/ae968bd0fe34c52c5872f6190144c670cf498a95
- Add
CONFIG_ZMK_DISPLAY_HIDE_MOMENTARY_LAYERS=yto yourcorneish_zen.conffile to enable
- Add a periodic full display refresh (to clear up ghosting) using zmkfirmware/zmk#969
- https://github.com/SethMilliken/zmk/commit/0d75117e97688f1eb7b070fa49180067d7e82d2e
- Add
CONFIG_ZMK_DISPLAY_FULL_REFRESH_PERIOD=Nto yourcorneish_zen.conffile to refresh everyNseconds
- Add option to invert displays to white-on-black instead of black-on-white
- https://github.com/SethMilliken/zmk/commit/2d68f8e02c44144e60eb8dbd6ef9aaef275915f5
- Add
CONFIG_IL0323_INVERT=yto yourcorneish_zen.conffile to enable
- Add option to hide the "LAYER" heading in the layer widget and realign all widgets
- https://github.com/SethMilliken/zmk/commit/0a81b1832fd113a9ddd39ab776ae54720937dd9d
- Add
CONFIG_CUSTOM_WIDGET_LAYER_STATUS_HIDE_HEADING=yto yourcorneish_zen.conffile to enable
- Add options to select different logo images to replace the "Corne-ish Zen" logo on the right half, from @manna-harbour:
- https://github.com/SethMilliken/zmk/commit/1160c77055776181ce5831067116123c2dc32101
CONFIG_CUSTOM_WIDGET_LOGO_IMAGE_ZMK=yfor ZMK logo instead of ZenCONFIG_CUSTOM_WIDGET_LOGO_IMAGE_LPKB=yfor LowProKB logoCONFIG_CUSTOM_WIDGET_LOGO_IMAGE_MIRYOKU=yfor Miryoku logo
- Add option to enable @aumuell's driver tweak to reduce ghosting for partial refreshes
- https://github.com/SethMilliken/zmk/commit/02972a3cfb1c55689d4f6455d3fa5a01ca94f9b2
- This causes a different fading pattern on partial refreshes, with vertical/horizontal banding rather than full screen. However it can make the fading stronger for some screens
- Add
CONFIG_IL0323_ALTERNATIVE_REFRESH=yto yourcorneish_zen.confto enable
Hi there, thanks for the amazing work!
Do you mind briefly explaining the logo image format in case one would contribute/use different images?