zmk-steno-engine/Kconfig
afiqzudinhadi 0908dc7c85 Right-heavy dict partition: 150KB left, 500KB right
Central has more code overhead (behavior, formatter, output, undo,
BLE client) → smaller dict budget. Peripheral is lean → gets bulk
of dict. Ratio-based partition replaces fixed bytes-per-entry estimate.

Full 147K Plover dict, zero trimming target.
2026-07-02 14:30:12 +08:00

132 lines
3 KiB
Text

# Copyright (c) 2024 Afiq Zudin Hadi
# SPDX-License-Identifier: PolyForm-Noncommercial-1.0.0
menuconfig STENO_ENGINE
bool "Steno Engine"
default n
help
Enable the stenography engine for ZMK.
if STENO_ENGINE
choice STENO_DICT
prompt "Steno dictionary"
default STENO_DICT_PLOVER
config STENO_DICT_PLOVER
bool "Plover main dictionary (MPHF compressed)"
help
Use Plover main.json via MPHF compression.
config STENO_DICT_LAPWING
bool "Lapwing dictionary (MPHF compressed)"
config STENO_DICT_TEST
bool "Test dictionary (46 entries, simple format)"
help
Small built-in test dictionary for development.
endchoice
config STENO_DICT_MPHF
bool
default y if STENO_DICT_PLOVER || STENO_DICT_LAPWING
select ZLIB
help
Use MPHF (minimal perfect hash) dictionary format.
Selects ZLIB for block-compressed string table decompression.
config STENO_CUSTOM_KEYMAP
bool "Custom steno keymap"
default n
choice STENO_UNICODE_MODE
prompt "Unicode output mode"
default STENO_UNICODE_MODE_NONE
config STENO_UNICODE_MODE_NONE
bool "None (HID only)"
config STENO_UNICODE_MODE_LINUX
bool "Linux (IBus)"
config STENO_UNICODE_MODE_MACOS
bool "macOS"
config STENO_UNICODE_MODE_WINC
bool "Windows (WinCompose)"
endchoice
config STENO_HISTORY_SIZE
int "Stroke history size (undo depth)"
default 100
range 10 500
config STENO_KEY_DELAY_MS
int "Key output delay (ms)"
default 0
range 0 50
config STENO_MULTI_STROKE_TIMEOUT_MS
int "Multi-stroke timeout (ms)"
default 500
range 100 5000
config STENO_DICT_MAX_SIZE
int "Max dictionary binary size (bytes)"
default 473088
help
Max compiled dict size. 473088 = 462KB.
The MPHF compiler auto-trims to fit.
menuconfig STENO_SPLIT_DICT
bool "Split dictionary across both halves"
default n
select STENO_DICT_MPHF
help
Partition the steno dictionary across both keyboard halves.
Left (central) gets highest-importance entries for zero-latency
local lookup. Right (peripheral) gets remaining entries, queried
over BLE on local miss. Both halves have their own MPHF dict.
if STENO_SPLIT_DICT
config STENO_DICT_LEFT_MAX_SIZE
int "Left half dict budget (bytes)"
default 153600
help
Flash budget for left (central) partition. Default 150KB.
Central has more code overhead (behavior, formatter, output,
undo, BLE client) so gets a smaller dict partition.
Highest-importance entries fill this first.
config STENO_DICT_RIGHT_MAX_SIZE
int "Right half dict budget (bytes)"
default 512000
help
Flash budget for right (peripheral) partition. Default 500KB.
Peripheral has less code overhead so gets the bulk of the dict.
Remaining entries after left partition is filled.
config STENO_SPLIT_CACHE_SIZE
int "LRU cache entries on central side"
default 64
range 16 512
config STENO_SPLIT_PREFETCH
bool "Prefetch common follow-up strokes"
default y
config STENO_SPLIT_TIMEOUT_MS
int "BLE lookup timeout (ms)"
default 50
range 10 500
config STENO_SPLIT_LOG_LEVEL
int "Split dict log level"
default 3
endif # STENO_SPLIT_DICT
endif # STENO_ENGINE