Removed all trimming/auto-trim logic. Build fails if compiled dict exceeds flash budget. CHD now uses spare slots (1.23x load factor) and fewer buckets (entry_count/5) for reliable construction at any entry count. Binary format bumped to v3: header stores slot_count and entry_count separately.
132 lines
3 KiB
Text
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.
|
|
Build fails if dict exceeds this — no trimming.
|
|
|
|
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
|