# general
CONFIG_BLK_DEV_INITRD=y
CONFIG_CGROUPS=y
CONFIG_CRYPTO_XTS=y
CONFIG_DEVTMPFS=y
CONFIG_DM_CRYPT=m
CONFIG_INPUT_EVDEV=y
CONFIG_SYSVIPC=y
CONFIG_TMPFS_POSIX_ACL=y
CONFIG_VT=y
CONFIG_BPF_SYSCALL=y
CONFIG_CGROUP_BPF=y
CONFIG_USB_CONFIGFS_NCM=y
CONFIG_BINFMT_ELF=y
CONFIG_BINFMT_SCRIPT=y
CONFIG_UEVENT_HELPER=y
CONFIG_USER_NS=y
CONFIG_DEVPTS_MULTIPLE_INSTANCES=y
CONFIG_SAMSUNG_TUI=n
CONFIG_TZDEV=n
CONFIG_HZ_1000=y

# filesystems
CONFIG_BTRFS_FS=m
CONFIG_EXFAT_FS=m
CONFIG_EXT4_FS=m
CONFIG_F2FS_FS=m
CONFIG_NLS_ASCII=y
CONFIG_NTFS3_FS=m
CONFIG_ISO9660_FS=m

# FDE
CONFIG_MD=y
CONFIG_CRYPTO_SHA256=y # TODO: make this module
CONFIG_CRYPTO_AES=y # TODO: make this module

# nftables
CONFIG_NETFILTER=y
CONFIG_NF_CONNTRACK=m
CONFIG_NF_TABLES=m
CONFIG_NF_TABLES_INET=y
CONFIG_NFT_CT=m
CONFIG_NFT_LOG=m
CONFIG_NFT_LIMIT=m
CONFIG_NFT_MASQ=m
CONFIG_NFT_NAT=m
CONFIG_NFT_REJECT=m
CONFIG_NF_TABLES_IPV4=y
CONFIG_NF_REJECT_IPV4=m
CONFIG_IP_NF_IPTABLES=m
CONFIG_IP_NF_FILTER=m
CONFIG_IP_NF_TARGET_REJECT=m
CONFIG_IP_NF_NAT=m
CONFIG_NF_TABLES_IPV6=y
CONFIG_NF_REJECT_IPV6=m
CONFIG_IP6_NF_IPTABLES=m
CONFIG_IP6_NF_FILTER=m
CONFIG_IP6_NF_TARGET_REJECT=m
CONFIG_IP6_NF_NAT=m

# wireguard
CONFIG_WIREGUARD=m
CONFIG_IP_ADVANCED_ROUTER=y
CONFIG_IP_MULTIPLE_TABLES=y
CONFIG_IPV6_MULTIPLE_TABLES=y
CONFIG_NF_TABLES=m
CONFIG_NF_TABLES_IPV4=y
CONFIG_NF_TABLES_IPV6=y
CONFIG_NFT_CT=m
CONFIG_NFT_FIB_IPV4=m
CONFIG_NFT_FIB_IPV6=m
CONFIG_NF_CONNTRACK_MARK=y

# waydroid
CONFIG_ANDROID_BINDERFS=n
CONFIG_ANDROID_BINDER_DEVICES="binder,hwbinder,vndbinder"
CONFIG_ANDROID_BINDER_IPC=y
CONFIG_ANDROID_BINDER_IPC_SELFTEST=n
CONFIG_BLK_DEV_LOOP=m
CONFIG_BPF_SYSCALL=y
CONFIG_BRIDGE=m
CONFIG_BRIDGE_VLAN_FILTERING=y
CONFIG_CGROUP_BPF=y
CONFIG_FUSE_FS=m
CONFIG_IP_NF_MANGLE=m
CONFIG_NETFILTER_XTABLES=m
CONFIG_NETFILTER_XT_MATCH_COMMENT=m
CONFIG_SQUASHFS=m
CONFIG_SQUASHFS_XATTR=y
CONFIG_SQUASHFS_XZ=y
CONFIG_TMPFS_XATTR=y
CONFIG_TUN=m
CONFIG_VETH=m
CONFIG_VLAN_8021Q=m # prerequisite for bridge

CONFIG_CROSS_MEMORY_ATTACH=y
CONFIG_PSI=y
CONFIG_PSI_DEFAULT_DISABLED=n

# iwd
CONFIG_ASYMMETRIC_KEY_TYPE=y
CONFIG_ASYMMETRIC_PUBLIC_KEY_SUBTYPE=y
CONFIG_CRYPTO_AES=y # TODO: make this module
CONFIG_CRYPTO_CBC=y # TODO: make this module
CONFIG_CRYPTO_CMAC=y # TODO: make this module
CONFIG_CRYPTO_DES=y # TODO: make this module
CONFIG_CRYPTO_ECB=y # TODO: make this module
CONFIG_CRYPTO_HMAC=y
CONFIG_CRYPTO_MD5=y # TODO: make this module
CONFIG_CRYPTO_SHA1=y # TODO: make this module
CONFIG_CRYPTO_SHA256=y # TODO: make this module
CONFIG_CRYPTO_SHA512=y # TODO: make this module
CONFIG_CRYPTO_USER_API_HASH=m
CONFIG_CRYPTO_USER_API_SKCIPHER=m
CONFIG_KEYS=y
CONFIG_KEY_DH_OPERATIONS=y
CONFIG_PKCS7_MESSAGE_PARSER=y
CONFIG_PKCS8_PRIVATE_KEY_PARSER=m
CONFIG_X509_CERTIFICATE_PARSER=y
CONFIG_RFKILL=m

# containers (lxc, Docker)
CONFIG_BINFMT_MISC=m
CONFIG_NAMESPACES=y
CONFIG_NET_NS=y
CONFIG_PID_NS=y
CONFIG_IPC_NS=y
CONFIG_UTS_NS=y
CONFIG_CGROUPS=y
CONFIG_CGROUP_CPUACCT=y
CONFIG_CGROUP_DEVICE=y
CONFIG_CGROUP_FREEZER=y
CONFIG_CGROUP_SCHED=y
CONFIG_CPUSETS=y
CONFIG_KEYS=y
CONFIG_VETH=m
CONFIG_BRIDGE=m
CONFIG_BRIDGE_NETFILTER=m
CONFIG_IP_NF_FILTER=m
CONFIG_IP_NF_TARGET_MASQUERADE=m
CONFIG_NETFILTER_XT_MATCH_ADDRTYPE=m
CONFIG_NETFILTER_XT_MATCH_CONNTRACK=m
CONFIG_NETFILTER_XT_MATCH_IPVS=m
CONFIG_NETFILTER_XT_MARK=m
CONFIG_NETFILTER_XT_TARGET_CHECKSUM=m # needed for lxc
CONFIG_IP_NF_NAT=m
CONFIG_NF_NAT=m
CONFIG_POSIX_MQUEUE=y
CONFIG_BLK_DEV_DM=m # Storage Drivers
CONFIG_DUMMY=m # Network Drivers
CONFIG_USER_NS=y
CONFIG_BLK_CGROUP=y # Optional section
CONFIG_BLK_DEV_THROTTLING=y # Optional section
CONFIG_CGROUP_PERF=y # Optional section
CONFIG_NET_CLS_CGROUP=m # Optional section
CONFIG_NET_SCHED=y # Optional section
CONFIG_FAIR_GROUP_SCHED=y # Optional section
CONFIG_RT_GROUP_SCHED=y # Optional section
CONFIG_IP_NF_TARGET_REDIRECT=m # Optional section
CONFIG_IP_VS=m # Optional section
CONFIG_IP_VS_NFCT=y # Optional section
CONFIG_IP_VS_PROTO_TCP=y # Optional section
CONFIG_IP_VS_PROTO_UDP=y # Optional section
CONFIG_IP_VS_RR=m # Optional section
CONFIG_EXT4_FS=m
CONFIG_EXT4_FS_POSIX_ACL=y # Optional section
CONFIG_EXT4_FS_SECURITY=y # Optional section
CONFIG_CFS_BANDWIDTH=y # Optional section
CONFIG_CHECKPOINT_RESTORE=y # Needed for lxc
CONFIG_MEMCG=y
CONFIG_DM_THIN_PROVISIONING=m # Storage Drivers
CONFIG_SWAP=y
CONFIG_VXLAN=m # Network Drivers
CONFIG_IP6_NF_TARGET_MASQUERADE=m # Needed for lxc
CONFIG_BRIDGE_VLAN_FILTERING=y # This is already enabled
CONFIG_MACVLAN=m # Network Drivers
CONFIG_CGROUP_NET_PRIO=y # Optional section
CONFIG_OVERLAY_FS=m # Storage Drivers
CONFIG_IPVLAN=m # Network Drivers
CONFIG_SECCOMP=y # Optional section
CONFIG_CGROUP_PIDS=y # Optional section

# zram
CONFIG_ZRAM=m
CONFIG_ZRAM_BACKEND_ZSTD=y
CONFIG_ZRAM_MULTI_COMP=y
CONFIG_ZSMALLOC=m
CONFIG_ZSMALLOC_STAT=y
CONFIG_ZRAM_MEMORY_TRACKING=y
CONFIG_CRYPTO_LZ4=m
CONFIG_LZ4_COMPRESS=m
CONFIG_SWAP=y

# usb gadgets
# disable legacy gadgets
CONFIG_USB_ETH=n
CONFIG_USB_FUNCTIONFS=n
CONFIG_USB_MASS_STORAGE=n
CONFIG_USB_G_SERIAL=n
# enable configfs gadgets
CONFIG_USB_CONFIGFS_NCM=y
CONFIG_USB_CONFIGFS_RNDIS=y
CONFIG_USB_OTG_FSM=y
CONFIG_USB_ULPI=y
CONFIG_USB_XHCI_HCD=y
CONFIG_USB_HIDDEV=y
CONFIG_USB_STORAGE=m

# Some UART adapters use this driver (suzy-Q)
CONFIG_USB_SERIAL_SIMPLE=m
CONFIG_USB_SERIAL_QUALCOMM=m

# Enable USB sound cards
CONFIG_SND_USB_AUDIO=m

# other
CONFIG_BLK_DEV_NBD=y # netboot
CONFIG_INPUT_UINPUT=m # fbkeyboard, buffyboard
CONFIG_LEDS_TRIGGER_TIMER=m # hfd-service
CONFIG_NETFILTER_XT_MATCH_TCPMSS=m # change MTU, e.g. for Wireguard
CONFIG_NETFILTER_XT_TARGET_TCPMSS=m # change MTU, e.g. for Wireguard
CONFIG_UCLAMP_TASK=y
CONFIG_UCLAMP_TASK_GROUP=y

# EFI
CONFIG_EFI_STUB=y
CONFIG_EFI=y
CONFIG_DMI=y
CONFIG_EFI_ESRT=y
CONFIG_PSTORE=y # dependency of CONFIG_EFI_VARS_PSTORE
CONFIG_EFI_VARS_PSTORE=y
CONFIG_EFI_PARAMS_FROM_FDT=y
CONFIG_EFI_RUNTIME_WRAPPERS=y
CONFIG_EFI_GENERIC_STUB=y

CONFIG_EFI_ZBOOT=y

# Compress modules
CONFIG_HAVE_KERNEL_ZSTD=y
# Doesn't seem to be working correctly
#CONFIG_MODULE_COMPRESS_ZSTD=y
CONFIG_ZSTD_COMMON=y
CONFIG_ZSTD_COMPRESS=y
CONFIG_ZSTD_DECOMPRESS=y
CONFIG_DECOMPRESS_ZSTD=y

# Enable dynamic debug
CONFIG_DYNAMIC_DEBUG=y

# Alpine uses zstd compressed firmware
CONFIG_FW_LOADER_COMPRESS=y
CONFIG_FW_LOADER_COMPRESS_ZSTD=y

# Persistent Memory support, allows the rootfs to
# be loaded into memory by the bootloader. Used
# for EFI HTTP booting.
CONFIG_ARM64_PMEM=y
CONFIG_LIBNVDIMM=y
CONFIG_OF_PMEM=y
CONFIG_BLK_DEV_PMEM=y
CONFIG_ZONE_DEVICE=y

# Rust
CONFIG_RUST=y
CONFIG_SAMPLES=y
CONFIG_SAMPLES_RUST=y
CONFIG_SAMPLE_RUST_MINIMAL=m
CONFIG_SAMPLE_RUST_PRINT=m
CONFIG_GENDWARFKSYMS=y

# HID

CONFIG_UHID=m
CONFIG_HIDRAW=y
CONFIG_INPUT_JOYSTICK=y
CONFIG_JOYSTICK_XPAD=m
CONFIG_JOYSTICK_XPAD_FF=y

# I2C
CONFIG_I2C_GPIO=y

# IIO
CONFIG_IIO=y
CONFIG_IIO_BUFFER=y
CONFIG_IIO_TRIGGER=y
CONFIG_IIO_TRIGGERED_BUFFER=y
