mainmenu "ZMK Firmware"

config ZMK_KEYBOARD_NAME
	string "Keyboard Name"

config USB_DEVICE_PRODUCT
	default ZMK_KEYBOARD_NAME

config BT_DEVICE_NAME
	default ZMK_KEYBOARD_NAME

config ZMK_KSCAN_EVENT_QUEUE_SIZE
	int "Size of the event queue for KSCAN events to buffer events"
	default 4

menu "HID Output Types"

menuconfig ZMK_USB
	bool "USB"
	select USB
	select USB_DEVICE_STACK
	select USB_DEVICE_HID

if USB

config ZMK_USB_INIT_PRIORITY
	int "Init Priority"
	default 50

endif

if ZMK_USB

config USB_NUMOF_EP_WRITE_RETRIES
	default 10

endif

menuconfig ZMK_BLE
	bool "BLE (HID over GATT)"
	select BT
	select BT_SMP
	select BT_SMP_SC_PAIR_ONLY
	select BT_SMP_APP_PAIRING_ACCEPT
	select BT_PERIPHERAL
	select BT_GATT_DIS
	select BT_GATT_BAS
	select BT_SETTINGS
	select SETTINGS

if ZMK_BLE

config ZMK_BLE_INIT_PRIORITY
	int "Init Priority"
	default 50
	
config SYSTEM_WORKQUEUE_STACK_SIZE
	default 2048

config ZMK_BLE_CLEAR_BONDS_ON_START
	bool "Configuration that clears all bond information from the keyboard on startup."
	default n

# HID GATT notifications sent this way are *not* picked up by Linux, and possibly others.
config BT_GATT_NOTIFY_MULTIPLE
	default n

config BT_DEVICE_APPEARANCE
	default 961

config ZMK_BLE_PASSKEY_ENTRY
	bool "Experimental: Requiring typing passkey from host to pair BLE connection"
	default n

endif

endmenu

menuconfig ZMK_SLEEP
	bool "Enable deep sleep support"
	imply USB

if ZMK_SLEEP

config SYS_POWER_DEEP_SLEEP_STATES
	default y

choice SYS_PM_POLICY
	default SYS_PM_POLICY_APP
endchoice

config ZMK_IDLE_SLEEP_TIMEOUT
	int "Milliseconds to wait to sleep when going idle"
	default 900000

endif

config ZMK_DISPLAY
	bool "ZMK display support"
	default n
	select DISPLAY
	select LVGL
	select LVGL_THEMES
	select LVGL_THEME_MONO
	select LVGL_OBJ_LABEL

menu "Split Support"

config ZMK_SPLIT
	bool "Split keyboard support"
	default n

if ZMK_SPLIT

config ZMK_SPLIT_BLE
	bool "Split keyboard support via BLE transport"
	depends on ZMK_BLE
	default y
	select BT_USER_PHY_UPDATE

if ZMK_SPLIT_BLE

choice ZMK_SPLIT_BLE_ROLE
	bool "BLE Role For Split Communication"
	default ZMK_SPLIT_BLE_ROLE_CENTRAL

config ZMK_SPLIT_BLE_ROLE_CENTRAL
	bool "Central"
	select BT_CENTRAL
	select BT_GATT_CLIENT

config ZMK_SPLIT_BLE_ROLE_PERIPHERAL
	bool "Peripheral"

if ZMK_SPLIT_BLE_ROLE_PERIPHERAL

config ZMK_USB
	default n

config BT_MAX_PAIRED
	default 1

config BT_MAX_CONN
	default 1

config BT_GAP_AUTO_UPDATE_CONN_PARAMS
	default n

endif

endchoice

endif

endif 

if ZMK_BLE

if ZMK_SPLIT_BLE && ZMK_SPLIT_BLE_ROLE_CENTRAL

config BT_MAX_CONN
	default 6

config BT_MAX_PAIRED
	default 6

endif

if !ZMK_SPLIT_BLE

config BT_MAX_CONN
	default 5

config BT_MAX_PAIRED
	default 5

endif

endif

endmenu

config ZMK_KSCAN_MOCK_DRIVER
	bool "Enable mock kscan driver to simulate key presses"
	default n


config ZMK_KSCAN_COMPOSITE_DRIVER
	bool "Enable composite kscan driver to combine kscan devices"
	default n

menu "ZMK Actions"

config ZMK_ACTION_MOD_TAP
	bool "Enable the Mod-Tap Action"
	
endmenu

menu "ZMK Lighting"

menuconfig ZMK_RGB_UNDERGLOW
	bool "RGB Adressable LED Underglow"
	select LED_STRIP

if ZMK_RGB_UNDERGLOW

config ZMK_RGB_UNDERGLOW_HUE_STEP
	int "RGB underglow hue step in degrees of 360"
	default 10

config ZMK_RGB_UNDERGLOW_SAT_STEP
	int "RGB underglow sturation step in percent"
	default 10

config ZMK_RGB_UNDERGLOW_BRT_STEP
	int "RGB underglow brightness step in percent"
	default 10

endif

endmenu

config HEAP_MEM_POOL_SIZE
	default 8192

config KERNEL_BIN_NAME
	default "zmk"

config REBOOT
	default y

module = ZMK
module-str = zmk
source "subsys/logging/Kconfig.template.log_config"

rsource "boards/Kconfig"
rsource "boards/shields/*/Kconfig.defconfig"
rsource "boards/shields/*/Kconfig.shield"

osource "$(ZMK_CONFIG)/boards/shields/*/Kconfig.defconfig"
osource "$(ZMK_CONFIG)/boards/shields/*/Kconfig.shield"

source "Kconfig.zephyr"