summaryrefslogtreecommitdiff
path: root/net-wireless
diff options
context:
space:
mode:
authorroot <root@alpha.trunkmasters.com>2026-06-12 19:09:37 -0500
committerroot <root@alpha.trunkmasters.com>2026-06-12 19:09:37 -0500
commitb590c8d7572b727d565cc0b8ff660d43569845de (patch)
tree06f7a4102ea4e845df8b66660f252920d52952f9 /net-wireless
parent24f9cbfc4c34fdb6a6e03311674414e881ceab47 (diff)
downloadbaldeagleos-repo-b590c8d7572b727d565cc0b8ff660d43569845de.tar.gz
baldeagleos-repo-b590c8d7572b727d565cc0b8ff660d43569845de.tar.xz
baldeagleos-repo-b590c8d7572b727d565cc0b8ff660d43569845de.zip
Adding metadata
Diffstat (limited to 'net-wireless')
-rw-r--r--net-wireless/aic8800/Manifest3
-rw-r--r--net-wireless/aic8800/aic8800-1.0.3.ebuild58
-rw-r--r--net-wireless/aic8800/aic8800-1.0.5.ebuild58
-rw-r--r--net-wireless/aic8800/aic8800-1.0.6.ebuild60
-rw-r--r--net-wireless/aic8800/files/aic8800-1.0.6-linux-6.12.patch47
-rw-r--r--net-wireless/aic8800/metadata.xml10
-rw-r--r--net-wireless/aircrack-ng/Manifest1
-rw-r--r--net-wireless/aircrack-ng/aircrack-ng-1.7-r3.ebuild111
-rw-r--r--net-wireless/aircrack-ng/aircrack-ng-9999.ebuild111
-rw-r--r--net-wireless/aircrack-ng/metadata.xml25
-rw-r--r--net-wireless/airspy/Manifest1
-rw-r--r--net-wireless/airspy/airspy-1.0.10.ebuild53
-rw-r--r--net-wireless/airspy/airspy-9999.ebuild53
-rw-r--r--net-wireless/airspy/files/airspy-1.0.10-remove-static-libs.patch41
-rw-r--r--net-wireless/airspy/metadata.xml8
-rw-r--r--net-wireless/airtraf/Manifest1
-rw-r--r--net-wireless/airtraf/airtraf-1.1-r5.ebuild58
-rw-r--r--net-wireless/airtraf/files/airtraf-1.1-c23.patch24
-rw-r--r--net-wireless/airtraf/files/airtraf-1.1-fno-common.patch21
-rw-r--r--net-wireless/airtraf/files/airtraf-1.1-fprintf-format.patch14
-rw-r--r--net-wireless/airtraf/files/airtraf-1.1-ncurses-opaque.patch94
-rw-r--r--net-wireless/airtraf/files/airtraf-1.1-off-by-one.patch29
-rw-r--r--net-wireless/airtraf/files/airtraf-1.1-sniffd.patch59
-rw-r--r--net-wireless/airtraf/files/airtraf-1.1-wformat-security.patch201
-rw-r--r--net-wireless/airtraf/metadata.xml16
-rw-r--r--net-wireless/b43-fwcutter/Manifest1
-rw-r--r--net-wireless/b43-fwcutter/b43-fwcutter-019.ebuild30
-rw-r--r--net-wireless/b43-fwcutter/metadata.xml9
-rw-r--r--net-wireless/bdaddr/Manifest2
-rw-r--r--net-wireless/bdaddr/bdaddr-0_p20210511.ebuild56
-rw-r--r--net-wireless/bdaddr/metadata.xml9
-rw-r--r--net-wireless/bladerf-firmware/Manifest1
-rw-r--r--net-wireless/bladerf-firmware/bladerf-firmware-2.6.0.ebuild32
-rw-r--r--net-wireless/bladerf-firmware/metadata.xml13
-rw-r--r--net-wireless/bladerf-fpga/Manifest6
-rw-r--r--net-wireless/bladerf-fpga/bladerf-fpga-0.16.0.ebuild39
-rw-r--r--net-wireless/bladerf-fpga/metadata.xml21
-rw-r--r--net-wireless/bladerf/Manifest4
-rw-r--r--net-wireless/bladerf/bladerf-2023.02-r1.ebuild77
-rw-r--r--net-wireless/bladerf/bladerf-2025.10.ebuild80
-rw-r--r--net-wireless/bladerf/bladerf-9999.ebuild80
-rw-r--r--net-wireless/bladerf/files/bladerf-2023.02-cmake4.patch399
-rw-r--r--net-wireless/bladerf/files/bladerf-cmake-glob.patch40
-rw-r--r--net-wireless/bladerf/metadata.xml16
-rw-r--r--net-wireless/blueman/Manifest1
-rw-r--r--net-wireless/blueman/blueman-2.4.6.ebuild177
-rw-r--r--net-wireless/blueman/blueman-9999.ebuild180
-rw-r--r--net-wireless/blueman/files/01-org.blueman.rules11
-rw-r--r--net-wireless/blueman/metadata.xml16
-rw-r--r--net-wireless/bluetui/Manifest342
-rw-r--r--net-wireless/bluetui/bluetui-0.7.2.ebuild307
-rw-r--r--net-wireless/bluetui/bluetui-0.8.0.ebuild304
-rw-r--r--net-wireless/bluetui/bluetui-0.8.1.ebuild300
-rw-r--r--net-wireless/bluetui/metadata.xml9
-rw-r--r--net-wireless/bluez-tools/Manifest1
-rw-r--r--net-wireless/bluez-tools/bluez-tools-0_p20201025-r1.ebuild28
-rw-r--r--net-wireless/bluez-tools/metadata.xml13
-rw-r--r--net-wireless/bluez/Manifest1
-rw-r--r--net-wireless/bluez/bluez-5.86-r1.ebuild278
-rw-r--r--net-wireless/bluez/bluez-5.86.ebuild270
-rw-r--r--net-wireless/bluez/files/bluetooth-conf.d1
-rw-r--r--net-wireless/bluez/files/bluetooth-init.d-r513
-rw-r--r--net-wireless/bluez/files/bluez-5.86-a2dp-connect-sink.patch35
-rw-r--r--net-wireless/bluez/files/bluez-5.86-big-endian.patch41
-rw-r--r--net-wireless/bluez/files/bluez-5.86-bluetoothctl-shell.patch79
-rw-r--r--net-wireless/bluez/files/bluez-udevadm-path-r1.patch10
-rw-r--r--net-wireless/bluez/metadata.xml26
-rw-r--r--net-wireless/broadcom-sta/Manifest3
-rw-r--r--net-wireless/broadcom-sta/broadcom-sta-6.30.223.271-r10.ebuild113
-rw-r--r--net-wireless/broadcom-sta/files/001-null-pointer-fix.patch42
-rw-r--r--net-wireless/broadcom-sta/files/002-rdtscl.patch21
-rw-r--r--net-wireless/broadcom-sta/files/003-linux47.patch109
-rw-r--r--net-wireless/broadcom-sta/files/004-linux48.patch58
-rw-r--r--net-wireless/broadcom-sta/files/005-debian-fix-kernel-warnings.patch161
-rw-r--r--net-wireless/broadcom-sta/files/006-linux411.patch25
-rw-r--r--net-wireless/broadcom-sta/files/007-linux412.patch72
-rw-r--r--net-wireless/broadcom-sta/files/008-linux415.patch46
-rw-r--r--net-wireless/broadcom-sta/files/009-fix_mac_profile_discrepancy.patch14
-rw-r--r--net-wireless/broadcom-sta/files/010-linux56.patch51
-rw-r--r--net-wireless/broadcom-sta/files/011-linux59.patch193
-rw-r--r--net-wireless/broadcom-sta/files/012-linux517.patch74
-rw-r--r--net-wireless/broadcom-sta/files/013-linux518.patch70
-rw-r--r--net-wireless/broadcom-sta/files/014-linux414.patch31
-rw-r--r--net-wireless/broadcom-sta/files/015-linux600.patch25
-rw-r--r--net-wireless/broadcom-sta/files/016-linux601.patch89
-rw-r--r--net-wireless/broadcom-sta/files/017-handle-new-header-name-6.12.patch33
-rw-r--r--net-wireless/broadcom-sta/files/018-broadcom-wl-fix-linux-6.13.patch27
-rw-r--r--net-wireless/broadcom-sta/files/019-broadcom-wl-fix-linux-6.14.patch40
-rw-r--r--net-wireless/broadcom-sta/files/020-broadcom-wl-fix-linux-6.15.patch122
-rw-r--r--net-wireless/broadcom-sta/files/021-broadcom-wl-fix-linux-6.17.patch77
-rw-r--r--net-wireless/broadcom-sta/files/broadcom-sta-modules.conf17
-rw-r--r--net-wireless/broadcom-sta/metadata.xml16
-rw-r--r--net-wireless/crackle/Manifest1
-rw-r--r--net-wireless/crackle/crackle-0.1-r1.ebuild31
-rw-r--r--net-wireless/crackle/files/flags.patch20
-rw-r--r--net-wireless/crackle/metadata.xml9
-rw-r--r--net-wireless/dump1090/Manifest2
-rw-r--r--net-wireless/dump1090/dump1090-10.2.ebuild117
-rw-r--r--net-wireless/dump1090/dump1090-11.0-r1.ebuild117
-rw-r--r--net-wireless/dump1090/dump1090-9999.ebuild120
-rw-r--r--net-wireless/dump1090/files/dump1090-10.0.1-gcc15.patch45
-rw-r--r--net-wireless/dump1090/files/dump1090-5.0.confd20
-rw-r--r--net-wireless/dump1090/files/dump1090-5.0.initd15
-rw-r--r--net-wireless/dump1090/files/dump1090-6.1-libdir.patch16
-rw-r--r--net-wireless/dump1090/files/tmpfilesd-dump1090-5.0.conf4
-rw-r--r--net-wireless/dump1090/metadata.xml19
-rw-r--r--net-wireless/gnome-bluetooth/Manifest2
-rw-r--r--net-wireless/gnome-bluetooth/gnome-bluetooth-47.1.ebuild79
-rw-r--r--net-wireless/gnome-bluetooth/gnome-bluetooth-47.2.ebuild78
-rw-r--r--net-wireless/gnome-bluetooth/metadata.xml12
-rw-r--r--net-wireless/gnuradio/Manifest1
-rw-r--r--net-wireless/gnuradio/files/gnuradio-3.10.12.0-boost-1.89.patch43
-rw-r--r--net-wireless/gnuradio/gnuradio-3.10.12.0-r2.ebuild251
-rw-r--r--net-wireless/gnuradio/gnuradio-3.10.12.0-r3.ebuild251
-rw-r--r--net-wireless/gnuradio/gnuradio-9999.ebuild247
-rw-r--r--net-wireless/gnuradio/metadata.xml31
-rw-r--r--net-wireless/gqrx-scanner/Manifest1
-rw-r--r--net-wireless/gqrx-scanner/gqrx-scanner-1.0.4.ebuild17
-rw-r--r--net-wireless/gqrx-scanner/metadata.xml13
-rw-r--r--net-wireless/gqrx/Manifest3
-rw-r--r--net-wireless/gqrx/gqrx-2.17.2-r1.ebuild56
-rw-r--r--net-wireless/gqrx/gqrx-2.17.6.ebuild56
-rw-r--r--net-wireless/gqrx/gqrx-2.17.7.ebuild56
-rw-r--r--net-wireless/gqrx/gqrx-9999.ebuild56
-rw-r--r--net-wireless/gqrx/metadata.xml13
-rw-r--r--net-wireless/gr-ieee802154/Manifest2
-rw-r--r--net-wireless/gr-ieee802154/gr-ieee802154-0.0_p20210719-r5.ebuild59
-rw-r--r--net-wireless/gr-ieee802154/gr-ieee802154-0.0_p20230828-r1.ebuild59
-rw-r--r--net-wireless/gr-ieee802154/gr-ieee802154-9999.ebuild59
-rw-r--r--net-wireless/gr-ieee802154/metadata.xml9
-rw-r--r--net-wireless/gr-iqbal/Manifest1
-rw-r--r--net-wireless/gr-iqbal/files/gr-iqbal-boost-no-system.patch22
-rw-r--r--net-wireless/gr-iqbal/gr-iqbal-0.38.3-r1.ebuild45
-rw-r--r--net-wireless/gr-iqbal/gr-iqbal-0.38.3.ebuild45
-rw-r--r--net-wireless/gr-iqbal/gr-iqbal-9999.ebuild45
-rw-r--r--net-wireless/gr-iqbal/metadata.xml13
-rw-r--r--net-wireless/gr-osmosdr/Manifest1
-rw-r--r--net-wireless/gr-osmosdr/files/gr-osmosdr-0.2.3_p20210128-fix-enable-python.patch15
-rw-r--r--net-wireless/gr-osmosdr/files/gr-osmosdr-0.2.6-boost-1.89.patch11
-rw-r--r--net-wireless/gr-osmosdr/gr-osmosdr-0.2.6-r1.ebuild88
-rw-r--r--net-wireless/gr-osmosdr/gr-osmosdr-0.2.6-r2.ebuild87
-rw-r--r--net-wireless/gr-osmosdr/gr-osmosdr-9999.ebuild87
-rw-r--r--net-wireless/gr-osmosdr/metadata.xml29
-rw-r--r--net-wireless/gr-paint/Manifest1
-rw-r--r--net-wireless/gr-paint/gr-paint-0.0_p20250824-r1.ebuild63
-rw-r--r--net-wireless/gr-paint/metadata.xml13
-rw-r--r--net-wireless/gr-rds/Manifest1
-rw-r--r--net-wireless/gr-rds/gr-rds-0.0_p20250404-r1.ebuild47
-rw-r--r--net-wireless/gr-rds/gr-rds-9999.ebuild47
-rw-r--r--net-wireless/gr-rds/metadata.xml9
-rw-r--r--net-wireless/gr-scopy/Manifest1
-rw-r--r--net-wireless/gr-scopy/gr-scopy-0.0_p20220602-r2.ebuild36
-rw-r--r--net-wireless/gr-scopy/gr-scopy-9999.ebuild36
-rw-r--r--net-wireless/gr-scopy/metadata.xml13
-rw-r--r--net-wireless/hackrf-tools/Manifest2
-rw-r--r--net-wireless/hackrf-tools/files/hackrf_easy_flash-r1170
-rw-r--r--net-wireless/hackrf-tools/hackrf-tools-2024.02.1-r1.ebuild54
-rw-r--r--net-wireless/hackrf-tools/hackrf-tools-2026.01.3.ebuild47
-rw-r--r--net-wireless/hackrf-tools/hackrf-tools-9999.ebuild47
-rw-r--r--net-wireless/hackrf-tools/metadata.xml13
-rw-r--r--net-wireless/hidclient/Manifest1
-rw-r--r--net-wireless/hidclient/files/README16
-rw-r--r--net-wireless/hidclient/files/hidclient-20120728-glibc-2.30.patch13
-rw-r--r--net-wireless/hidclient/hidclient-20120728.ebuild35
-rw-r--r--net-wireless/hidclient/metadata.xml9
-rw-r--r--net-wireless/horst/Manifest1
-rw-r--r--net-wireless/horst/files/horst-5.1-CC.patch14
-rw-r--r--net-wireless/horst/files/horst-5.1-pcap_bufsize.patch32
-rw-r--r--net-wireless/horst/files/horst-5.1-tinfo.patch11
-rw-r--r--net-wireless/horst/files/horst-9999-tinfo.patch11
-rw-r--r--net-wireless/horst/horst-5.1.ebuild45
-rw-r--r--net-wireless/horst/horst-9999.ebuild44
-rw-r--r--net-wireless/horst/metadata.xml12
-rw-r--r--net-wireless/hostap-utils/Manifest1
-rw-r--r--net-wireless/hostap-utils/files/hostap-utils-0.4.7-makefile.patch31
-rw-r--r--net-wireless/hostap-utils/hostap-utils-0.4.7-r1.ebuild28
-rw-r--r--net-wireless/hostap-utils/metadata.xml5
-rw-r--r--net-wireless/inspectrum/Manifest1
-rw-r--r--net-wireless/inspectrum/inspectrum-0.4.0.ebuild32
-rw-r--r--net-wireless/inspectrum/inspectrum-9999.ebuild32
-rw-r--r--net-wireless/inspectrum/metadata.xml13
-rw-r--r--net-wireless/iw/Manifest2
-rw-r--r--net-wireless/iw/iw-6.17.ebuild40
-rw-r--r--net-wireless/iw/iw-6.9.ebuild40
-rw-r--r--net-wireless/iw/metadata.xml12
-rw-r--r--net-wireless/iwd/Manifest5
-rw-r--r--net-wireless/iwd/files/ead.initd12
-rw-r--r--net-wireless/iwd/files/iwd.initd-r114
-rw-r--r--net-wireless/iwd/iwd-3.10.ebuild167
-rw-r--r--net-wireless/iwd/iwd-3.11.ebuild167
-rw-r--r--net-wireless/iwd/iwd-3.12.ebuild168
-rw-r--r--net-wireless/iwd/iwd-3.8.ebuild167
-rw-r--r--net-wireless/iwd/iwd-3.9.ebuild167
-rw-r--r--net-wireless/iwd/iwd-9999.ebuild167
-rw-r--r--net-wireless/iwd/metadata.xml17
-rw-r--r--net-wireless/iwgtk/Manifest1
-rw-r--r--net-wireless/iwgtk/iwgtk-0.9.ebuild35
-rw-r--r--net-wireless/iwgtk/metadata.xml9
-rw-r--r--net-wireless/kismet/Manifest3
-rw-r--r--net-wireless/kismet/files/0001-configure.ac-bashism-fix-critical-existence-failure-.patch280
-rw-r--r--net-wireless/kismet/files/gdb14
-rw-r--r--net-wireless/kismet/files/kismet-gdb2
-rw-r--r--net-wireless/kismet/files/kismet.confd-r211
-rw-r--r--net-wireless/kismet/files/kismet.initd-r311
-rw-r--r--net-wireless/kismet/kismet-2023.07.2.ebuild205
-rw-r--r--net-wireless/kismet/kismet-2025.09.1.ebuild202
-rw-r--r--net-wireless/kismet/kismet-9999.ebuild202
-rw-r--r--net-wireless/kismet/metadata.xml30
-rw-r--r--net-wireless/kismetmobiledashboard/Manifest1
-rw-r--r--net-wireless/kismetmobiledashboard/kismetmobiledashboard-1.5_beta1-r2.ebuild36
-rw-r--r--net-wireless/kismetmobiledashboard/kismetmobiledashboard-9999.ebuild36
-rw-r--r--net-wireless/kismetmobiledashboard/metadata.xml9
-rw-r--r--net-wireless/liblms7002m/Manifest1
-rw-r--r--net-wireless/liblms7002m/files/liblms7002m-cmake4.patch13
-rw-r--r--net-wireless/liblms7002m/liblms7002m-0.0_p20200518-r3.ebuild41
-rw-r--r--net-wireless/liblms7002m/liblms7002m-9999.ebuild41
-rw-r--r--net-wireless/liblms7002m/metadata.xml9
-rw-r--r--net-wireless/libusb3380/Manifest1
-rw-r--r--net-wireless/libusb3380/libusb3380-0.0_p20190125-r1.ebuild29
-rw-r--r--net-wireless/libusb3380/libusb3380-9999.ebuild29
-rw-r--r--net-wireless/libusb3380/metadata.xml9
-rw-r--r--net-wireless/libxtrx/Manifest1
-rw-r--r--net-wireless/libxtrx/files/libxtrx-cmake4.patch32
-rw-r--r--net-wireless/libxtrx/libxtrx-0.0_p20201202-r1.ebuild40
-rw-r--r--net-wireless/libxtrx/libxtrx-9999.ebuild40
-rw-r--r--net-wireless/libxtrx/metadata.xml9
-rw-r--r--net-wireless/libxtrxdsp/Manifest1
-rw-r--r--net-wireless/libxtrxdsp/libxtrxdsp-0.0_p20200830-r1.ebuild26
-rw-r--r--net-wireless/libxtrxdsp/libxtrxdsp-9999.ebuild26
-rw-r--r--net-wireless/libxtrxdsp/metadata.xml9
-rw-r--r--net-wireless/libxtrxll/Manifest1
-rw-r--r--net-wireless/libxtrxll/files/libxtrxll-cmake4.patch13
-rw-r--r--net-wireless/libxtrxll/libxtrxll-0.0_p20201202-r1.ebuild44
-rw-r--r--net-wireless/libxtrxll/libxtrxll-9999.ebuild44
-rw-r--r--net-wireless/libxtrxll/metadata.xml12
-rw-r--r--net-wireless/limesuite/Manifest2
-rw-r--r--net-wireless/limesuite/limesuite-23.11.0-r1.ebuild47
-rw-r--r--net-wireless/limesuite/limesuite-23.11.0_p20250714.ebuild49
-rw-r--r--net-wireless/limesuite/metadata.xml9
-rw-r--r--net-wireless/lorcon/Manifest1
-rw-r--r--net-wireless/lorcon/files/lorcon-2020.06.06_p20220216-C99-decls.patch20
-rw-r--r--net-wireless/lorcon/lorcon-2020.06.06_p20220216-r3.ebuild84
-rw-r--r--net-wireless/lorcon/lorcon-9999.ebuild82
-rw-r--r--net-wireless/lorcon/metadata.xml9
-rw-r--r--net-wireless/mfoc/Manifest1
-rw-r--r--net-wireless/mfoc/metadata.xml9
-rw-r--r--net-wireless/mfoc/mfoc-0.10.7-r1.ebuild23
-rw-r--r--net-wireless/nanovna-saver/Manifest2
-rw-r--r--net-wireless/nanovna-saver/files/nanovna-saver-0.7.3-TDR.patch18
-rw-r--r--net-wireless/nanovna-saver/files/nanovna-saver-0.7.3-pyproject.patch19
-rw-r--r--net-wireless/nanovna-saver/metadata.xml17
-rw-r--r--net-wireless/nanovna-saver/nanovna-saver-0.6.8-r1.ebuild47
-rw-r--r--net-wireless/nanovna-saver/nanovna-saver-0.6.8-r2.ebuild47
-rw-r--r--net-wireless/nanovna-saver/nanovna-saver-0.7.3-r1.ebuild60
-rw-r--r--net-wireless/nanovna-saver/nanovna-saver-9999.ebuild47
-rw-r--r--net-wireless/neard/Manifest1
-rw-r--r--net-wireless/neard/files/neard.confd8
-rw-r--r--net-wireless/neard/files/neard.rc22
-rw-r--r--net-wireless/neard/metadata.xml8
-rw-r--r--net-wireless/neard/neard-0.19.ebuild61
-rw-r--r--net-wireless/osmo-fl2k/Manifest1
-rw-r--r--net-wireless/osmo-fl2k/metadata.xml9
-rw-r--r--net-wireless/osmo-fl2k/osmo-fl2k-0.2.0.ebuild62
-rw-r--r--net-wireless/osmo-fl2k/osmo-fl2k-9999.ebuild62
-rw-r--r--net-wireless/portapack-firmware/Manifest1
-rw-r--r--net-wireless/portapack-firmware/metadata.xml9
-rw-r--r--net-wireless/portapack-firmware/portapack-firmware-20190405.ebuild22
-rw-r--r--net-wireless/portapack-havoc/Manifest1
-rw-r--r--net-wireless/portapack-havoc/metadata.xml9
-rw-r--r--net-wireless/portapack-havoc/portapack-havoc-0.0_p20180612.ebuild45
-rw-r--r--net-wireless/qdmr/Manifest3
-rw-r--r--net-wireless/qdmr/metadata.xml9
-rw-r--r--net-wireless/qdmr/qdmr-0.13.3.ebuild64
-rw-r--r--net-wireless/qdmr/qdmr-0.14.1.ebuild64
-rw-r--r--net-wireless/qdmr/qdmr-0.15.0.ebuild65
-rw-r--r--net-wireless/qdmr/qdmr-9999.ebuild64
-rw-r--r--net-wireless/reaver/Manifest1
-rw-r--r--net-wireless/reaver/files/reaver-1.6.5-confdir.patch10
-rw-r--r--net-wireless/reaver/metadata.xml13
-rw-r--r--net-wireless/reaver/reaver-1.6.5.ebuild33
-rw-r--r--net-wireless/rtl-sdr-blog/Manifest1
-rw-r--r--net-wireless/rtl-sdr-blog/files/rtl-sdr-blog-1.3.6-disable-static.patch55
-rw-r--r--net-wireless/rtl-sdr-blog/files/rtl-sdr-blog-1.3.6-pkgconfig-libdir.patch11
-rw-r--r--net-wireless/rtl-sdr-blog/files/rtl-sdr-blog-1.3.6-udev-rules-path.patch11
-rw-r--r--net-wireless/rtl-sdr-blog/files/rtl_tcp.confd7
-rw-r--r--net-wireless/rtl-sdr-blog/files/rtl_tcp.initd11
-rw-r--r--net-wireless/rtl-sdr-blog/metadata.xml18
-rw-r--r--net-wireless/rtl-sdr-blog/rtl-sdr-blog-1.3.6-r2.ebuild65
-rw-r--r--net-wireless/rtl-sdr/Manifest1
-rw-r--r--net-wireless/rtl-sdr/files/rtl-sdr-2.0.2-disable-static.patch55
-rw-r--r--net-wireless/rtl-sdr/files/rtl-sdr-2.0.2-pkgconfig-libdir.patch11
-rw-r--r--net-wireless/rtl-sdr/files/rtl-sdr-2.0.2-udev-rules-path.patch11
-rw-r--r--net-wireless/rtl-sdr/files/rtl_tcp.confd4
-rw-r--r--net-wireless/rtl-sdr/files/rtl_tcp.confd-r17
-rw-r--r--net-wireless/rtl-sdr/files/rtl_tcp.initd18
-rw-r--r--net-wireless/rtl-sdr/files/rtl_tcp.initd-r111
-rw-r--r--net-wireless/rtl-sdr/metadata.xml16
-rw-r--r--net-wireless/rtl-sdr/rtl-sdr-2.0.2-r3.ebuild72
-rw-r--r--net-wireless/rtl-sdr/rtl-sdr-9999.ebuild72
-rw-r--r--net-wireless/rtl_433/Manifest2
-rw-r--r--net-wireless/rtl_433/files/rtl_433-21.12-CVE.patch55
-rw-r--r--net-wireless/rtl_433/files/rtl_433-21.12-test-visibility.patch155
-rw-r--r--net-wireless/rtl_433/metadata.xml16
-rw-r--r--net-wireless/rtl_433/rtl_433-21.12.ebuild46
-rw-r--r--net-wireless/rtl_433/rtl_433-22.11.ebuild48
-rw-r--r--net-wireless/rtl_433/rtl_433-9999.ebuild44
-rw-r--r--net-wireless/sdrplay/Manifest3
-rw-r--r--net-wireless/sdrplay/files/20-sdrplay-3.15.2.hwdb24
-rw-r--r--net-wireless/sdrplay/files/66-sdrplay-3.15.2.rules8
-rw-r--r--net-wireless/sdrplay/files/sdrplay-3.15.2.service28
-rw-r--r--net-wireless/sdrplay/files/sdrplay.initd7
-rw-r--r--net-wireless/sdrplay/metadata.xml13
-rw-r--r--net-wireless/sdrplay/sdrplay-3.07.1.ebuild74
-rw-r--r--net-wireless/sdrplay/sdrplay-3.15.2.ebuild59
-rw-r--r--net-wireless/sigdigger/Manifest1
-rw-r--r--net-wireless/sigdigger/metadata.xml13
-rw-r--r--net-wireless/sigdigger/sigdigger-0.3.0_p20251029.ebuild45
-rw-r--r--net-wireless/sigutils/Manifest1
-rw-r--r--net-wireless/sigutils/files/sigutils-0.3.0_p20251029-fix-CMakeList.patch29
-rw-r--r--net-wireless/sigutils/metadata.xml13
-rw-r--r--net-wireless/sigutils/sigutils-0.3.0_p20251029-r1.ebuild27
-rw-r--r--net-wireless/soapybladerf/Manifest1
-rw-r--r--net-wireless/soapybladerf/metadata.xml13
-rw-r--r--net-wireless/soapybladerf/soapybladerf-0.4.2.ebuild30
-rw-r--r--net-wireless/soapybladerf/soapybladerf-9999.ebuild30
-rw-r--r--net-wireless/soapyhackrf/Manifest1
-rw-r--r--net-wireless/soapyhackrf/metadata.xml13
-rw-r--r--net-wireless/soapyhackrf/soapyhackrf-0.3.4-r1.ebuild30
-rw-r--r--net-wireless/soapyhackrf/soapyhackrf-9999.ebuild30
-rw-r--r--net-wireless/soapyplutosdr/Manifest1
-rw-r--r--net-wireless/soapyplutosdr/metadata.xml13
-rw-r--r--net-wireless/soapyplutosdr/soapyplutosdr-0.2.2-r1.ebuild32
-rw-r--r--net-wireless/soapyplutosdr/soapyplutosdr-9999.ebuild32
-rw-r--r--net-wireless/soapyremote/Manifest1
-rw-r--r--net-wireless/soapyremote/metadata.xml9
-rw-r--r--net-wireless/soapyremote/soapyremote-0.5.2.ebuild29
-rw-r--r--net-wireless/soapyremote/soapyremote-9999.ebuild29
-rw-r--r--net-wireless/soapyrtlsdr/Manifest1
-rw-r--r--net-wireless/soapyrtlsdr/files/soapyrtlsdr-0.3.3-cmake4.patch13
-rw-r--r--net-wireless/soapyrtlsdr/metadata.xml13
-rw-r--r--net-wireless/soapyrtlsdr/soapyrtlsdr-0.3.3-r3.ebuild28
-rw-r--r--net-wireless/soapyrtlsdr/soapyrtlsdr-9999.ebuild26
-rw-r--r--net-wireless/soapysdr/Manifest1
-rw-r--r--net-wireless/soapysdr/files/soapysdr-0.8.1-cmake4.patch39
-rw-r--r--net-wireless/soapysdr/files/soapysdr-0.8.1-python3.12-distutils.patch74
-rw-r--r--net-wireless/soapysdr/metadata.xml20
-rw-r--r--net-wireless/soapysdr/soapysdr-0.8.1-r2.ebuild61
-rw-r--r--net-wireless/soapysdr/soapysdr-0.8.1-r3.ebuild61
-rw-r--r--net-wireless/soapysdr/soapysdr-9999.ebuild61
-rw-r--r--net-wireless/soapysdrplay/Manifest2
-rw-r--r--net-wireless/soapysdrplay/metadata.xml13
-rw-r--r--net-wireless/soapysdrplay/soapysdrplay-0.5.2.ebuild26
-rw-r--r--net-wireless/soapysdrplay/soapysdrplay-0_p20220120.ebuild27
-rw-r--r--net-wireless/soapysdrplay/soapysdrplay-9999.ebuild26
-rw-r--r--net-wireless/soapyuhd/Manifest1
-rw-r--r--net-wireless/soapyuhd/metadata.xml13
-rw-r--r--net-wireless/soapyuhd/soapyuhd-0.4.1_p20251220.ebuild27
-rw-r--r--net-wireless/soapyuhd/soapyuhd-9999.ebuild27
-rw-r--r--net-wireless/suscan/Manifest1
-rw-r--r--net-wireless/suscan/files/suscan-0.3.0_p20251029-drop-ldconfig.patch13
-rw-r--r--net-wireless/suscan/metadata.xml13
-rw-r--r--net-wireless/suscan/suscan-0.3.0_p20251029.ebuild33
-rw-r--r--net-wireless/suwidgets/Manifest1
-rw-r--r--net-wireless/suwidgets/metadata.xml13
-rw-r--r--net-wireless/suwidgets/suwidgets-0.3.0_p20251029.ebuild37
-rw-r--r--net-wireless/tempestsdr/Manifest1
-rw-r--r--net-wireless/tempestsdr/metadata.xml12
-rw-r--r--net-wireless/tempestsdr/tempestsdr-0.0_p20260404.ebuild42
-rw-r--r--net-wireless/tempestsdr/tempestsdr-9999.ebuild42
-rw-r--r--net-wireless/ubertooth/Manifest1
-rw-r--r--net-wireless/ubertooth/metadata.xml13
-rw-r--r--net-wireless/ubertooth/ubertooth-2020.12.1-r1.ebuild80
-rw-r--r--net-wireless/ubertooth/ubertooth-9999.ebuild80
-rw-r--r--net-wireless/uhd/Manifest2
-rw-r--r--net-wireless/uhd/files/uhd-4.8.0.0-includes.patch36
-rw-r--r--net-wireless/uhd/metadata.xml28
-rw-r--r--net-wireless/uhd/uhd-4.9.0.1-r1.ebuild151
-rw-r--r--net-wireless/uhd/uhd-4.9.0.1.ebuild151
-rw-r--r--net-wireless/unifi/Manifest2
-rw-r--r--net-wireless/unifi/files/README.gentoo11
-rw-r--r--net-wireless/unifi/files/unifi-mongodb.initd25
-rw-r--r--net-wireless/unifi/files/unifi-mongodb.service15
-rw-r--r--net-wireless/unifi/files/unifi.confd6
-rw-r--r--net-wireless/unifi/files/unifi.initd-r222
-rw-r--r--net-wireless/unifi/files/unifi.service-r214
-rw-r--r--net-wireless/unifi/metadata.xml21
-rw-r--r--net-wireless/unifi/unifi-10.1.89.ebuild112
-rw-r--r--net-wireless/unifi/unifi-10.3.58.ebuild109
-rw-r--r--net-wireless/urh/Manifest1
-rw-r--r--net-wireless/urh/files/urh-2.9.7-no-numpy-setup.patch11
-rw-r--r--net-wireless/urh/metadata.xml32
-rw-r--r--net-wireless/urh/urh-2.10.0-r1.ebuild81
-rw-r--r--net-wireless/urh/urh-9999.ebuild81
-rw-r--r--net-wireless/wavemon/Manifest2
-rw-r--r--net-wireless/wavemon/metadata.xml13
-rw-r--r--net-wireless/wavemon/wavemon-0.9.5.ebuild59
-rw-r--r--net-wireless/wavemon/wavemon-0.9.6.ebuild59
-rw-r--r--net-wireless/wepattack/Manifest1
-rw-r--r--net-wireless/wepattack/files/wepattack-0.1.3-filter-mac-address.patch186
-rw-r--r--net-wireless/wepattack/files/wepattack-0.1.3-missed-string.h-warnings-fix.patch30
-rw-r--r--net-wireless/wepattack/files/wepattack-0.1.3-modern-c.patch33
-rw-r--r--net-wireless/wepattack/files/wepattack-0.1.3-seds.patch48
-rw-r--r--net-wireless/wepattack/files/wepattack-0.1.3-signals.patch13
-rw-r--r--net-wireless/wepattack/files/wepattack.conf9
-rw-r--r--net-wireless/wepattack/metadata.xml19
-rw-r--r--net-wireless/wepattack/wepattack-0.1.3-r6.ebuild69
-rw-r--r--net-wireless/wepattack/wepattack-0.1.3-r7.ebuild60
-rw-r--r--net-wireless/wepdecrypt/Manifest1
-rw-r--r--net-wireless/wepdecrypt/files/wepdecrypt-0.8-buffer.patch11
-rw-r--r--net-wireless/wepdecrypt/files/wepdecrypt-0.8-build.patch19
-rw-r--r--net-wireless/wepdecrypt/files/wepdecrypt-0.8-dyn.patch11
-rw-r--r--net-wireless/wepdecrypt/files/wepdecrypt-0.8-fltk.patch11
-rw-r--r--net-wireless/wepdecrypt/files/wepdecrypt-0.8-fno-common.patch12
-rw-r--r--net-wireless/wepdecrypt/metadata.xml5
-rw-r--r--net-wireless/wepdecrypt/wepdecrypt-0.8-r3.ebuild47
-rw-r--r--net-wireless/wireless-regdb/Manifest6
-rw-r--r--net-wireless/wireless-regdb/metadata.xml10
-rw-r--r--net-wireless/wireless-regdb/wireless-regdb-20240508.ebuild61
-rw-r--r--net-wireless/wireless-regdb/wireless-regdb-20250220.ebuild61
-rw-r--r--net-wireless/wireless-regdb/wireless-regdb-20250710.ebuild62
-rw-r--r--net-wireless/wireless-regdb/wireless-regdb-20251007.ebuild62
-rw-r--r--net-wireless/wireless-regdb/wireless-regdb-20260204.ebuild62
-rw-r--r--net-wireless/wireless-regdb/wireless-regdb-20260318.ebuild62
-rw-r--r--net-wireless/wireless-tools/Manifest1
-rw-r--r--net-wireless/wireless-tools/files/wireless-tools-29-asneeded.patch13
-rw-r--r--net-wireless/wireless-tools/files/wireless-tools-29-musl.patch20
-rw-r--r--net-wireless/wireless-tools/metadata.xml21
-rw-r--r--net-wireless/wireless-tools/wireless-tools-30_pre9-r1.ebuild60
-rw-r--r--net-wireless/wireless-tools/wireless-tools-30_pre9-r2.ebuild63
-rw-r--r--net-wireless/wpa_supplicant/Manifest1
-rw-r--r--net-wireless/wpa_supplicant/files/wpa_cli-r1.sh44
-rw-r--r--net-wireless/wpa_supplicant/files/wpa_cli.sh46
-rw-r--r--net-wireless/wpa_supplicant/files/wpa_supplicant-2.10-allow-legacy-renegotiation.patch30
-rw-r--r--net-wireless/wpa_supplicant/files/wpa_supplicant-2.10-use-qt6.patch311
-rw-r--r--net-wireless/wpa_supplicant/files/wpa_supplicant-2.11-Revert-Mark-authorization-completed-on-driver-indica.patch53
-rw-r--r--net-wireless/wpa_supplicant/files/wpa_supplicant-2.11-Send-CTRL-EVENT-SIGNAL-CHANGE-message-to-control-interfaces-only.patch50
-rw-r--r--net-wireless/wpa_supplicant/files/wpa_supplicant-2.11-broadcom-wl-scanning.patch224
-rw-r--r--net-wireless/wpa_supplicant/files/wpa_supplicant-2.6-do-not-call-dbus-functions-with-NULL-path.patch13
-rw-r--r--net-wireless/wpa_supplicant/files/wpa_supplicant-conf.d10
-rw-r--r--net-wireless/wpa_supplicant/files/wpa_supplicant-init.d70
-rw-r--r--net-wireless/wpa_supplicant/files/wpa_supplicant.conf7
-rw-r--r--net-wireless/wpa_supplicant/metadata.xml29
-rw-r--r--net-wireless/wpa_supplicant/wpa_supplicant-2.11-r4.ebuild452
-rw-r--r--net-wireless/wpa_supplicant/wpa_supplicant-2.11-r5.ebuild455
-rw-r--r--net-wireless/wpa_supplicant/wpa_supplicant-9999.ebuild446
445 files changed, 20291 insertions, 0 deletions
diff --git a/net-wireless/aic8800/Manifest b/net-wireless/aic8800/Manifest
new file mode 100644
index 000000000000..6b6acfebe0c5
--- /dev/null
+++ b/net-wireless/aic8800/Manifest
@@ -0,0 +1,3 @@
+DIST aic8800-1.0.3.deb 535400 BLAKE2B 0e337bded43f99a00fb3d786742418d7faf0adf3d6e517933d4d4a82e7e723e5f45798991238a02fb1836529a5d72cc56181356939eb150feb4c26f14dcd762e SHA512 0917ac4f5a594adb68c084f38bedacb92f3c0700d13dda497943d199bd883c18fc624ffc579091b40fdc6322dc2e5b81cc21add06b27ae8364ee2f8f9f119a7d
+DIST aic8800-1.0.5.deb 595050 BLAKE2B 551e9ad09814bcab5464a7bfe09b922e400253403568068b74d839b8d53261251424b571266abed907314d08b27ac5bdbd51abd493bec5d0a511363173635e42 SHA512 4b4917a510caf1104ae7124f883b958d6a936a6e172d1afcc79f58349a943e0feb9a8bb35d326f96c56e0b089d62e3359cf81967e01e1edb1a1ddfc6fe101da0
+DIST aic8800-1.0.6.deb 594776 BLAKE2B dc248a58424ad2d5a3824568da350dc8af37d81046a9dac67281ea88e4d7c8af11f3f514b60ad39bfa419ac8a086f09f9e349945a0ed300e622c16d8ffddc982 SHA512 b5bfb20d5ad128f66c923c5ee278acbcf29b406c17efe5cdd2b1e5838f44559f5e7e36926ef6eaa6c57df0183f5b26cbae42b9e34b62b0471193e2188e675a9c
diff --git a/net-wireless/aic8800/aic8800-1.0.3.ebuild b/net-wireless/aic8800/aic8800-1.0.3.ebuild
new file mode 100644
index 000000000000..79471e659a08
--- /dev/null
+++ b/net-wireless/aic8800/aic8800-1.0.3.ebuild
@@ -0,0 +1,58 @@
+# Copyright 1999-2024 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI="8"
+
+inherit linux-mod-r1 udev unpacker
+
+DESCRIPTION="aic8800 driver for AICSemi AIC8800/8801/8800DC/8800DW/8800FC Wifi/Bluetooth"
+HOMEPAGE="https://www.aicsemi.com/ https://linux.brostrend.com/troubleshooting/source-code/"
+
+SRC_URI="https://linux.brostrend.com/${PN}-dkms.deb -> ${P}.deb"
+
+LICENSE="GPL-2+ firmware? ( freedist )"
+SLOT="0"
+KEYWORDS="~amd64"
+
+IUSE="+firmware udev"
+
+CONFIG_CHECK="~MAC80211 ~BT_HCIBTUSB"
+
+BDEPEND+="
+ $(unpacker_src_uri_depends)"
+
+S="${WORKDIR}/usr/src/${P}"
+
+src_compile() {
+ MODULES_MAKEARGS+=(
+ KDIR="${KV_OUT_DIR}"
+ )
+ emake "${MODULES_MAKEARGS[@]}"
+}
+
+src_install() {
+ linux_moduleinto kernel/drivers/net/wireless/${PN}
+ linux_domodule aic8800_fdrv/aic8800_fdrv.ko aic_load_fw/aic_load_fw.ko
+ modules_post_process
+ if use firmware; then
+ insinto /lib/firmware
+ doins -r "${WORKDIR}/lib/firmware/aic8800DC"
+ fi
+ if use udev; then
+ # install udev rules for USB mode switching
+ udev_newrules "${WORKDIR}/lib/udev/rules.d/aic.rules" 99-aic-modeswitch.rules
+ fi
+}
+
+pkg_postinst() {
+ if use udev; then
+ udev_reload
+ fi
+ linux-mod-r1_pkg_postinst
+}
+
+pkg_postrm() {
+ if use udev; then
+ udev_reload
+ fi
+}
diff --git a/net-wireless/aic8800/aic8800-1.0.5.ebuild b/net-wireless/aic8800/aic8800-1.0.5.ebuild
new file mode 100644
index 000000000000..79471e659a08
--- /dev/null
+++ b/net-wireless/aic8800/aic8800-1.0.5.ebuild
@@ -0,0 +1,58 @@
+# Copyright 1999-2024 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI="8"
+
+inherit linux-mod-r1 udev unpacker
+
+DESCRIPTION="aic8800 driver for AICSemi AIC8800/8801/8800DC/8800DW/8800FC Wifi/Bluetooth"
+HOMEPAGE="https://www.aicsemi.com/ https://linux.brostrend.com/troubleshooting/source-code/"
+
+SRC_URI="https://linux.brostrend.com/${PN}-dkms.deb -> ${P}.deb"
+
+LICENSE="GPL-2+ firmware? ( freedist )"
+SLOT="0"
+KEYWORDS="~amd64"
+
+IUSE="+firmware udev"
+
+CONFIG_CHECK="~MAC80211 ~BT_HCIBTUSB"
+
+BDEPEND+="
+ $(unpacker_src_uri_depends)"
+
+S="${WORKDIR}/usr/src/${P}"
+
+src_compile() {
+ MODULES_MAKEARGS+=(
+ KDIR="${KV_OUT_DIR}"
+ )
+ emake "${MODULES_MAKEARGS[@]}"
+}
+
+src_install() {
+ linux_moduleinto kernel/drivers/net/wireless/${PN}
+ linux_domodule aic8800_fdrv/aic8800_fdrv.ko aic_load_fw/aic_load_fw.ko
+ modules_post_process
+ if use firmware; then
+ insinto /lib/firmware
+ doins -r "${WORKDIR}/lib/firmware/aic8800DC"
+ fi
+ if use udev; then
+ # install udev rules for USB mode switching
+ udev_newrules "${WORKDIR}/lib/udev/rules.d/aic.rules" 99-aic-modeswitch.rules
+ fi
+}
+
+pkg_postinst() {
+ if use udev; then
+ udev_reload
+ fi
+ linux-mod-r1_pkg_postinst
+}
+
+pkg_postrm() {
+ if use udev; then
+ udev_reload
+ fi
+}
diff --git a/net-wireless/aic8800/aic8800-1.0.6.ebuild b/net-wireless/aic8800/aic8800-1.0.6.ebuild
new file mode 100644
index 000000000000..78de93abdb02
--- /dev/null
+++ b/net-wireless/aic8800/aic8800-1.0.6.ebuild
@@ -0,0 +1,60 @@
+# Copyright 1999-2025 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI="8"
+
+inherit linux-mod-r1 udev unpacker
+
+DESCRIPTION="aic8800 driver for AICSemi AIC8800/8801/8800DC/8800DW/8800FC Wifi/Bluetooth"
+HOMEPAGE="https://www.aicsemi.com/ https://linux.brostrend.com/troubleshooting/source-code/"
+
+SRC_URI="https://linux.brostrend.com/${PN}-dkms.deb -> ${P}.deb"
+
+LICENSE="GPL-2+ firmware? ( freedist )"
+SLOT="0"
+KEYWORDS="~amd64"
+
+IUSE="+firmware udev"
+
+CONFIG_CHECK="MAC80211 USB ~BT_HCIBTUSB"
+
+PATCHES="${FILESDIR}/${PN}-1.0.6-linux-6.12.patch"
+
+BDEPEND+="
+ $(unpacker_src_uri_depends)"
+
+S="${WORKDIR}/usr/src/${P}"
+
+src_compile() {
+ MODULES_MAKEARGS+=(
+ KDIR="${KV_OUT_DIR}"
+ )
+ emake "${MODULES_MAKEARGS[@]}"
+}
+
+src_install() {
+ linux_moduleinto kernel/drivers/net/wireless/${PN}
+ linux_domodule aic8800_fdrv/aic8800_fdrv.ko aic_load_fw/aic_load_fw.ko
+ modules_post_process
+ if use firmware; then
+ insinto /lib/firmware
+ doins -r "${WORKDIR}/lib/firmware/aic8800DC"
+ fi
+ if use udev; then
+ # install udev rules for USB mode switching
+ udev_newrules "${WORKDIR}/lib/udev/rules.d/aic.rules" 99-aic-modeswitch.rules
+ fi
+}
+
+pkg_postinst() {
+ if use udev; then
+ udev_reload
+ fi
+ linux-mod-r1_pkg_postinst
+}
+
+pkg_postrm() {
+ if use udev; then
+ udev_reload
+ fi
+}
diff --git a/net-wireless/aic8800/files/aic8800-1.0.6-linux-6.12.patch b/net-wireless/aic8800/files/aic8800-1.0.6-linux-6.12.patch
new file mode 100644
index 000000000000..e94e2e6bfdd8
--- /dev/null
+++ b/net-wireless/aic8800/files/aic8800-1.0.6-linux-6.12.patch
@@ -0,0 +1,47 @@
+From 04dc3e356a45ffc42dd0363799af9a487f5e1bf0 Mon Sep 17 00:00:00 2001
+From: Shen Mintao <cx330.shen@autocore.ai>
+Date: Thu, 9 Jan 2025 11:06:42 +0800
+Subject: [PATCH] fix some source code for kernel 6.12
+
+--- a/aic8800_fdrv/rwnx_main.c
++++ b/aic8800_fdrv/rwnx_main.c
+@@ -4545,6 +4547,11 @@ int rwnx_cfg80211_start_radar_detection(struct wiphy *wiphy,
+ #if (LINUX_VERSION_CODE >= KERNEL_VERSION(3, 15, 0))
+ , u32 cac_time_ms
+ #endif
++ #if (LINUX_VERSION_CODE >= KERNEL_VERSION(6, 12, 0))
++ , int link_id
++ #endif
++
++
+ )
+ {
+ struct rwnx_hw *rwnx_hw = wiphy_priv(wiphy);
+--- a/aic8800_fdrv/rwnx_radar.c
++++ b/aic8800_fdrv/rwnx_radar.c
+@@ -1399,7 +1399,11 @@ static void rwnx_radar_cac_work(struct work_struct *ws)
+ #if LINUX_VERSION_CODE >= KERNEL_VERSION(3, 14, 0)
+ &ctxt->chan_def,
+ #endif
+- NL80211_RADAR_CAC_FINISHED, GFP_KERNEL);
++ NL80211_RADAR_CAC_FINISHED, GFP_KERNEL
++ #if LINUX_VERSION_CODE >= KERNEL_VERSION(6, 12, 0)
++ , 0
++ #endif
++ );
+ rwnx_send_apm_stop_cac_req(rwnx_hw, radar->cac_vif);
+ rwnx_chanctx_unlink(radar->cac_vif);
+
+@@ -1499,7 +1503,11 @@ void rwnx_radar_cancel_cac(struct rwnx_radar *radar)
+ #if LINUX_VERSION_CODE >= KERNEL_VERSION(3, 14, 0)
+ &ctxt->chan_def,
+ #endif
+- NL80211_RADAR_CAC_ABORTED, GFP_KERNEL);
++ NL80211_RADAR_CAC_ABORTED, GFP_KERNEL
++ #if LINUX_VERSION_CODE >= KERNEL_VERSION(6, 12, 0)
++ , 0
++ #endif
++ );
+ rwnx_chanctx_unlink(radar->cac_vif);
+ }
+
diff --git a/net-wireless/aic8800/metadata.xml b/net-wireless/aic8800/metadata.xml
new file mode 100644
index 000000000000..e4b4ae3668f9
--- /dev/null
+++ b/net-wireless/aic8800/metadata.xml
@@ -0,0 +1,10 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE pkgmetadata SYSTEM "https://docs.baldeagleos.com/dtd/metadata.dtd">
+<pkgmetadata>
+ <longdescription>Upstream out-of-tree aic8800 linux driver for the following chips:
+AIC8800 AIC8801 AIC8800DC AIC8800DW AIC8800FC</longdescription>
+ <use>
+ <flag name="firmware">Install device firmware</flag>
+ </use>
+ <origin>baldeagleos-repo</origin>
+</pkgmetadata>
diff --git a/net-wireless/aircrack-ng/Manifest b/net-wireless/aircrack-ng/Manifest
new file mode 100644
index 000000000000..55cb590f4361
--- /dev/null
+++ b/net-wireless/aircrack-ng/Manifest
@@ -0,0 +1 @@
+DIST aircrack-ng-1.7.tar.gz 7740634 BLAKE2B 4461af7b698d30c96e6f93494d5ee658bf8d7144d8b165e9b8aee1766a35dddded3bbb738237e1100dcf22167125aa7cf9149288bba1607fe778470b04596cb2 SHA512 3e6433cba1d6b122701245e8904480de9957dad033c1642cc45b30339e9391ffa21b39b2cc712bcba79bc2c2e26f2964be8f28a27081dc4bb323792cb7df2478
diff --git a/net-wireless/aircrack-ng/aircrack-ng-1.7-r3.ebuild b/net-wireless/aircrack-ng/aircrack-ng-1.7-r3.ebuild
new file mode 100644
index 000000000000..ba01a0588beb
--- /dev/null
+++ b/net-wireless/aircrack-ng/aircrack-ng-1.7-r3.ebuild
@@ -0,0 +1,111 @@
+# Copyright 1999-2025 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=8
+
+DISTUTILS_USE_PEP517=setuptools
+PYTHON_COMPAT=( python3_{11..12} )
+DISTUTILS_OPTIONAL=1
+
+inherit distutils-r1 autotools
+
+DESCRIPTION="WLAN tools for breaking 802.11 WEP/WPA keys"
+HOMEPAGE="http://www.aircrack-ng.org"
+
+if [[ ${PV} == "9999" ]] ; then
+ inherit git-r3
+ EGIT_REPO_URI="https://github.com/aircrack-ng/aircrack-ng.git"
+else
+ MY_PV=${PV/_/-}
+ SRC_URI="https://github.com/aircrack-ng/aircrack-ng/archive/refs/tags/${PV}.tar.gz -> ${P}.tar.gz"
+ KEYWORDS="amd64 arm ~arm64 ~ppc x86"
+fi
+
+LICENSE="GPL-2"
+SLOT="0"
+
+IUSE="+airdrop-ng +airgraph-ng +experimental +netlink +pcre +sqlite test"
+
+CDEPEND="net-libs/libpcap
+ sys-apps/hwloc:0=
+ dev-libs/libbsd
+ dev-libs/openssl:0=
+ netlink? ( dev-libs/libnl:3 )
+ pcre? ( dev-libs/libpcre )
+ airdrop-ng? ( ${PYTHON_DEPS} )
+ airgraph-ng? ( ${PYTHON_DEPS} )
+ experimental? ( virtual/zlib:= )
+ sqlite? ( >=dev-db/sqlite-3.4:3 )
+ "
+DEPEND="${CDEPEND}
+ test? ( dev-tcltk/expect )
+ "
+RDEPEND="${CDEPEND}
+ kernel_linux? (
+ net-wireless/iw
+ net-wireless/wireless-tools
+ sys-apps/ethtool
+ sys-apps/usbutils
+ sys-apps/pciutils )
+ sys-apps/hwdata
+ airdrop-ng? ( net-wireless/lorcon[python,${PYTHON_USEDEP}] )"
+BDEPEND="airdrop-ng? ( ${DISTUTILS_DEPS} )
+ airgraph-ng? ( ${DISTUTILS_DEPS} )"
+
+REQUIRED_USE="airdrop-ng? ( ${PYTHON_REQUIRED_USE} )
+ airgraph-ng? ( ${PYTHON_REQUIRED_USE} )"
+
+RESTRICT="!test? ( test )"
+
+src_prepare() {
+ default
+ eautoreconf
+ if use airgraph-ng || use airdrop-ng; then
+ distutils-r1_src_prepare
+ fi
+}
+
+src_configure() {
+ econf \
+ STATIC_LIBDIR_NAME="$(get_libdir)" \
+ --disable-asan \
+ --enable-shared \
+ --disable-static \
+ --without-opt \
+ --with-duma=no \
+ $(use_enable netlink libnl) \
+ $(use_with experimental) \
+ $(use_with sqlite sqlite3)
+}
+
+python_compile() {
+ if use airgraph-ng; then
+ cd "${S}/scripts/airgraph-ng" || die
+ distutils-r1_python_compile
+ fi
+ if use airdrop-ng; then
+ if [ -d "${BUILD_DIR}"/build ]; then
+ rm -r "${BUILD_DIR}"/build || die
+ fi
+ cd "${S}/scripts/airdrop-ng" || die
+ distutils-r1_python_compile
+ fi
+}
+
+src_compile() {
+ default
+ if use airgraph-ng || use airdrop-ng; then
+ distutils-r1_src_compile
+ fi
+}
+
+src_install() {
+ default
+ if use airgraph-ng || use airdrop-ng; then
+ distutils-r1_src_install
+ fi
+
+ # we don't need aircrack-ng's oui updater, we have our own
+ rm "${ED}"/usr/sbin/airodump-ng-oui-update || die
+ find "${D}" -xtype f -name '*.la' -delete || die
+}
diff --git a/net-wireless/aircrack-ng/aircrack-ng-9999.ebuild b/net-wireless/aircrack-ng/aircrack-ng-9999.ebuild
new file mode 100644
index 000000000000..8c131c3455f8
--- /dev/null
+++ b/net-wireless/aircrack-ng/aircrack-ng-9999.ebuild
@@ -0,0 +1,111 @@
+# Copyright 1999-2025 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=8
+
+DISTUTILS_USE_PEP517=setuptools
+PYTHON_COMPAT=( python3_{11..12} )
+DISTUTILS_OPTIONAL=1
+
+inherit distutils-r1 autotools
+
+DESCRIPTION="WLAN tools for breaking 802.11 WEP/WPA keys"
+HOMEPAGE="http://www.aircrack-ng.org"
+
+if [[ ${PV} == "9999" ]] ; then
+ inherit git-r3
+ EGIT_REPO_URI="https://github.com/aircrack-ng/aircrack-ng.git"
+else
+ MY_PV=${PV/_/-}
+ SRC_URI="https://github.com/aircrack-ng/aircrack-ng/archive/refs/tags/${PV}.tar.gz -> ${P}.tar.gz"
+ KEYWORDS="~amd64 ~arm ~arm64 ~ppc ~x86"
+fi
+
+LICENSE="GPL-2"
+SLOT="0"
+
+IUSE="+airdrop-ng +airgraph-ng +experimental +netlink +pcre +sqlite test"
+
+CDEPEND="net-libs/libpcap
+ sys-apps/hwloc:0=
+ dev-libs/libbsd
+ dev-libs/openssl:0=
+ netlink? ( dev-libs/libnl:3 )
+ pcre? ( dev-libs/libpcre2:= )
+ airdrop-ng? ( ${PYTHON_DEPS} )
+ airgraph-ng? ( ${PYTHON_DEPS} )
+ experimental? ( virtual/zlib:= )
+ sqlite? ( >=dev-db/sqlite-3.4:3 )
+ "
+DEPEND="${CDEPEND}
+ test? ( dev-tcltk/expect )
+ "
+RDEPEND="${CDEPEND}
+ kernel_linux? (
+ net-wireless/iw
+ net-wireless/wireless-tools
+ sys-apps/ethtool
+ sys-apps/usbutils
+ sys-apps/pciutils )
+ sys-apps/hwdata
+ airdrop-ng? ( net-wireless/lorcon[python,${PYTHON_USEDEP}] )"
+BDEPEND="airdrop-ng? ( ${DISTUTILS_DEPS} )
+ airgraph-ng? ( ${DISTUTILS_DEPS} )"
+
+REQUIRED_USE="airdrop-ng? ( ${PYTHON_REQUIRED_USE} )
+ airgraph-ng? ( ${PYTHON_REQUIRED_USE} )"
+
+RESTRICT="!test? ( test )"
+
+src_prepare() {
+ default
+ eautoreconf
+ if use airgraph-ng || use airdrop-ng; then
+ distutils-r1_src_prepare
+ fi
+}
+
+src_configure() {
+ econf \
+ STATIC_LIBDIR_NAME="$(get_libdir)" \
+ --disable-asan \
+ --enable-shared \
+ --disable-static \
+ --without-opt \
+ --with-duma=no \
+ $(use_enable netlink libnl) \
+ $(use_with experimental) \
+ $(use_with sqlite sqlite3)
+}
+
+python_compile() {
+ if use airgraph-ng; then
+ cd "${S}/scripts/airgraph-ng" || die
+ distutils-r1_python_compile
+ fi
+ if use airdrop-ng; then
+ if [ -d "${BUILD_DIR}"/build ]; then
+ rm -r "${BUILD_DIR}"/build || die
+ fi
+ cd "${S}/scripts/airdrop-ng" || die
+ distutils-r1_python_compile
+ fi
+}
+
+src_compile() {
+ default
+ if use airgraph-ng || use airdrop-ng; then
+ distutils-r1_src_compile
+ fi
+}
+
+src_install() {
+ default
+ if use airgraph-ng || use airdrop-ng; then
+ distutils-r1_src_install
+ fi
+
+ # we don't need aircrack-ng's oui updater, we have our own
+ rm "${ED}"/usr/sbin/airodump-ng-oui-update || die
+ find "${D}" -xtype f -name '*.la' -delete || die
+}
diff --git a/net-wireless/aircrack-ng/metadata.xml b/net-wireless/aircrack-ng/metadata.xml
new file mode 100644
index 000000000000..e022d84d698e
--- /dev/null
+++ b/net-wireless/aircrack-ng/metadata.xml
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE pkgmetadata SYSTEM "https://docs.baldeagleos.com/dtd/metadata.dtd">
+<pkgmetadata>
+ <maintainer type="person">
+ <email>zerochaos@gentoo.org</email>
+ <name>Rick Farina</name>
+ <description>Also on the upstream team</description>
+ </maintainer>
+ <maintainer type="project">
+ <email>netmon@gentoo.org</email>
+ <name>Gentoo network monitoring and analysis project</name>
+ </maintainer>
+ <longdescription>
+ aircrack is a set of tools for auditing wireless networks.
+ aircrack-ng is the next generation of aircrack with lots of new features.
+ (from http://www.aircrack-ng.org)
+</longdescription>
+ <use>
+ <flag name="airdrop-ng">Build airdrop-ng</flag>
+ <flag name="airgraph-ng">Build airgraph-ng</flag>
+ <flag name="experimental">Build the "experimental" tools which may randomly fail to run properly</flag>
+ <flag name="netlink">Use netlink for channel control instead of WEXT</flag>
+ </use>
+ <origin>baldeagleos-repo</origin>
+</pkgmetadata>
diff --git a/net-wireless/airspy/Manifest b/net-wireless/airspy/Manifest
new file mode 100644
index 000000000000..ca4303b22e84
--- /dev/null
+++ b/net-wireless/airspy/Manifest
@@ -0,0 +1 @@
+DIST airspy-1.0.10.tar.gz 238863 BLAKE2B 1cd257140094205ed5c9e574b6b77b297ff88d50e3dada639d6daea4aa6969a9470f7e68d505a88e04dd42b978263b83abb0d8f37399fdf0093823b9c24150a7 SHA512 61ea82e8b9892053b6fdccd7de05f248145bb5da0d4f63bb31d3a815fa739b248662a875d53d88de260cfa2a98ef266ea165ba50397e67822ea21ca273c93b24
diff --git a/net-wireless/airspy/airspy-1.0.10.ebuild b/net-wireless/airspy/airspy-1.0.10.ebuild
new file mode 100644
index 000000000000..405adaef5dc8
--- /dev/null
+++ b/net-wireless/airspy/airspy-1.0.10.ebuild
@@ -0,0 +1,53 @@
+# Copyright 1999-2025 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=8
+
+inherit cmake udev
+
+DESCRIPTION="Usemode driver and associated tools for airspy"
+HOMEPAGE="http://www.airspy.com"
+
+if [[ ${PV} == *9999 ]]; then
+ inherit git-r3
+ EGIT_REPO_URI="https://github.com/airspy/host.git"
+else
+ SRC_URI="https://github.com/airspy/host/archive/v${PV}.tar.gz -> ${P}.tar.gz"
+ S="${WORKDIR}/airspyone_host-${PV}"
+ KEYWORDS="amd64 ~arm ~riscv ~x86"
+fi
+
+LICENSE="GPL-2+"
+SLOT="0"
+IUSE="+udev"
+
+RDEPEND="
+ virtual/udev
+ virtual/libusb:1"
+DEPEND="${RDEPEND}"
+
+PATCHES=( "${FILESDIR}"/${PN}-1.0.10-remove-static-libs.patch )
+
+src_configure() {
+ local mycmakeargs=(
+ -DINSTALL_UDEV_RULES=$(usex udev)
+ )
+ cmake_src_configure
+}
+
+src_install() {
+ cmake_src_install
+
+ if use udev; then
+ udev_newrules "${ED}"/etc/udev/rules.d/52-airspy.rules 52-airspy.rules
+ rm -r "${ED}"/etc || die
+ fi
+}
+
+pkg_postinst() {
+ use udev && udev_reload
+}
+
+pkg_postrm() {
+ use udev && udev_reload
+}
diff --git a/net-wireless/airspy/airspy-9999.ebuild b/net-wireless/airspy/airspy-9999.ebuild
new file mode 100644
index 000000000000..36b566530a43
--- /dev/null
+++ b/net-wireless/airspy/airspy-9999.ebuild
@@ -0,0 +1,53 @@
+# Copyright 1999-2023 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=8
+
+inherit cmake udev
+
+DESCRIPTION="Usemode driver and associated tools for airspy"
+HOMEPAGE="http://www.airspy.com"
+
+if [[ ${PV} == *9999 ]]; then
+ inherit git-r3
+ EGIT_REPO_URI="https://github.com/airspy/host.git"
+else
+ SRC_URI="https://github.com/airspy/host/archive/v${PV}.tar.gz -> ${P}.tar.gz"
+ S="${WORKDIR}/airspyone_host-${PV}"
+ KEYWORDS="~amd64 ~arm ~riscv ~x86"
+fi
+
+LICENSE="GPL-2+"
+SLOT="0"
+IUSE="+udev"
+
+RDEPEND="
+ virtual/udev
+ virtual/libusb:1"
+DEPEND="${RDEPEND}"
+
+PATCHES=( "${FILESDIR}"/${PN}-1.0.10-remove-static-libs.patch )
+
+src_configure() {
+ local mycmakeargs=(
+ -DINSTALL_UDEV_RULES=$(usex udev)
+ )
+ cmake_src_configure
+}
+
+src_install() {
+ cmake_src_install
+
+ if use udev; then
+ udev_newrules "${ED}"/etc/udev/rules.d/52-airspy.rules 52-airspy.rules
+ rm -r "${ED}"/etc || die
+ fi
+}
+
+pkg_postinst() {
+ use udev && udev_reload
+}
+
+pkg_postrm() {
+ use udev && udev_reload
+}
diff --git a/net-wireless/airspy/files/airspy-1.0.10-remove-static-libs.patch b/net-wireless/airspy/files/airspy-1.0.10-remove-static-libs.patch
new file mode 100644
index 000000000000..ce4befc6cc29
--- /dev/null
+++ b/net-wireless/airspy/files/airspy-1.0.10-remove-static-libs.patch
@@ -0,0 +1,41 @@
+--- a/libairspy/src/CMakeLists.txt
++++ b/libairspy/src/CMakeLists.txt
+@@ -57,16 +57,7 @@
+ )
+ endif( ${WIN32} )
+
+-# Static library
+-add_library(airspy-static STATIC ${c_sources})
+-if(MSVC)
+- set_target_properties(airspy-static PROPERTIES OUTPUT_NAME "airspy_static")
+-else()
+- set_target_properties(airspy-static PROPERTIES OUTPUT_NAME "airspy")
+-endif()
+-
+ set_target_properties(airspy PROPERTIES CLEAN_DIRECT_OUTPUT 1)
+-set_target_properties(airspy-static PROPERTIES CLEAN_DIRECT_OUTPUT 1)
+
+ # Dependencies
+ target_link_libraries(airspy ${LIBUSB_LIBRARIES} ${CMAKE_THREAD_LIBS_INIT})
+@@ -82,10 +73,6 @@
+ LIBRARY DESTINATION lib${LIB_SUFFIX}
+ COMPONENT sharedlibs
+ )
+- install(TARGETS airspy-static
+- ARCHIVE DESTINATION lib${LIB_SUFFIX}
+- COMPONENT staticlibs
+- )
+ install(FILES ${c_headers}
+ DESTINATION include/${PROJECT_NAME}
+ COMPONENT headers
+@@ -97,10 +84,6 @@
+ DESTINATION bin
+ COMPONENT sharedlibs
+ )
+- install(TARGETS airspy-static
+- DESTINATION bin
+- COMPONENT staticlibs
+- )
+ install(FILES ${c_headers}
+ DESTINATION include/${PROJECT_NAME}
+ COMPONENT headers
diff --git a/net-wireless/airspy/metadata.xml b/net-wireless/airspy/metadata.xml
new file mode 100644
index 000000000000..8e7a3acb59e9
--- /dev/null
+++ b/net-wireless/airspy/metadata.xml
@@ -0,0 +1,8 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE pkgmetadata SYSTEM "https://docs.baldeagleos.com/dtd/metadata.dtd">
+<pkgmetadata>
+ <maintainer type="person">
+ <email>zerochaos@gentoo.org</email>
+ </maintainer>
+ <origin>baldeagleos-repo</origin>
+</pkgmetadata>
diff --git a/net-wireless/airtraf/Manifest b/net-wireless/airtraf/Manifest
new file mode 100644
index 000000000000..e74e5ecc25b0
--- /dev/null
+++ b/net-wireless/airtraf/Manifest
@@ -0,0 +1 @@
+DIST airtraf-1.1.tar.gz 136241 BLAKE2B 682516c6441efac8699fb15d40b99b50882d1c2d9e3acd344a979df080ca4f5532b0aa3247f37360f78ad2902018f907d6fe3e912b1d7b0df383c3bfe16f61a9 SHA512 7f341abb25e15dbdf510805230ee2f186a7a66d5c1e486bfdb978d3d8534d8b8c2cc1b5e0e323357c65af1eedbcb1da3e3e5f3ac8299db5f203f54b4a868f90b
diff --git a/net-wireless/airtraf/airtraf-1.1-r5.ebuild b/net-wireless/airtraf/airtraf-1.1-r5.ebuild
new file mode 100644
index 000000000000..0571660d503e
--- /dev/null
+++ b/net-wireless/airtraf/airtraf-1.1-r5.ebuild
@@ -0,0 +1,58 @@
+# Copyright 1999-2025 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=8
+
+inherit toolchain-funcs
+
+DESCRIPTION="AirTraf 802.11b Wireless traffic sniffer"
+HOMEPAGE="http://www.elixar.com/"
+SRC_URI="http://www.elixar.com/${P}.tar.gz"
+
+LICENSE="GPL-2"
+SLOT="0"
+KEYWORDS="amd64 ppc x86"
+
+RDEPEND="
+ net-libs/libpcap
+ sys-libs/ncurses:=
+"
+DEPEND="${RDEPEND}"
+BDEPEND="virtual/pkgconfig"
+
+PATCHES=(
+ "${FILESDIR}"/${P}-sniffd.patch
+ "${FILESDIR}"/${P}-off-by-one.patch
+ "${FILESDIR}"/${P}-fprintf-format.patch
+ "${FILESDIR}"/${P}-fno-common.patch
+ "${FILESDIR}"/${P}-c23.patch
+ "${FILESDIR}"/${P}-ncurses-opaque.patch
+ "${FILESDIR}"/${P}-wformat-security.patch
+)
+
+src_prepare() {
+ default
+
+ sed -i \
+ -e '/^LIBS/s|=.*|= $(shell $(PKG_CONFIG) --libs panel)|' \
+ src/libncurses/Makefile || die
+ sed -i \
+ -e 's|-lpanel -lncurses|$(shell $(PKG_CONFIG) --libs ncurses panel)|' \
+ src/sniffd/Makefile || die
+ tc-export PKG_CONFIG
+}
+
+src_compile() {
+ # parallel make (bug #297331)
+ emake -C src -j1 \
+ CC="$(tc-getCC)" \
+ CXX="$(tc-getCXX)" \
+ CFLAGS="${CFLAGS}" \
+ CXXFLAGS="${CXXFLAGS}" \
+ LDFLAGS="${LDFLAGS}"
+}
+
+src_install() {
+ dobin src/airtraf
+ dodoc Authors COMPATIBILITY docs/airtraf_doc.html
+}
diff --git a/net-wireless/airtraf/files/airtraf-1.1-c23.patch b/net-wireless/airtraf/files/airtraf-1.1-c23.patch
new file mode 100644
index 000000000000..5c797aa61780
--- /dev/null
+++ b/net-wireless/airtraf/files/airtraf-1.1-c23.patch
@@ -0,0 +1,24 @@
+--- a/src/libncurses/deskman.c
++++ b/src/libncurses/deskman.c
+@@ -123,7 +123,7 @@ void colorwin(WINDOW * win)
+ free(blankpad);
+ }
+
+-void coloreol()
++void coloreol(WINDOW * win)
+ {
+ char *blankpad;
+ int y, x;
+--- a/src/libncurses/deskman.h
++++ b/src/libncurses/deskman.h
+@@ -50,6 +50,6 @@ void show_paused_win(WINDOW ** win, PANEL ** panel, char * message, char *messag
+ void infobox(char *text, char *prompt);
+ void standardcolors(int color);
+ void refresh_screen(void);
+-void show_sort_statwin();
++void show_sort_statwin(WINDOW **statwin, PANEL **panel);
+
+ #endif
+--
+2.47.0
+
diff --git a/net-wireless/airtraf/files/airtraf-1.1-fno-common.patch b/net-wireless/airtraf/files/airtraf-1.1-fno-common.patch
new file mode 100644
index 000000000000..9945f170d53d
--- /dev/null
+++ b/net-wireless/airtraf/files/airtraf-1.1-fno-common.patch
@@ -0,0 +1,21 @@
+--- a/src/sniffd/capture_engine.c
++++ b/src/sniffd/capture_engine.c
+@@ -52,7 +52,6 @@
+ FILE * capture_stream;
+ FILE * error_stream;
+
+-char atime[TIME_TARGET_MAX];
+
+
+ ////////////////////////////////////////////////////////////////////////
+--- a/src/libcommon/logger.h
++++ b/src/libcommon/logger.h
+@@ -33,6 +33,8 @@
+ #ifndef __logger_h__
+ #define __logger_h__
+
++extern char atime[TIME_TARGET_MAX];
++
+ int init_log(int, char*);
+ int write_log(int, char*);
+ void flush_log(int);
diff --git a/net-wireless/airtraf/files/airtraf-1.1-fprintf-format.patch b/net-wireless/airtraf/files/airtraf-1.1-fprintf-format.patch
new file mode 100644
index 000000000000..ac5d174c0d6f
--- /dev/null
+++ b/net-wireless/airtraf/files/airtraf-1.1-fprintf-format.patch
@@ -0,0 +1,14 @@
+--- a/src/libcommon/logger.c
++++ b/src/libcommon/logger.c
+@@ -92,9 +92,9 @@
+
+ switch (type)
+ {
+- case CONNECT_LOG: status = fprintf(connect_log, text);
++ case CONNECT_LOG: status = fprintf(connect_log, "%s\n", text);
+ break;
+- case ERROR_LOG: status = fprintf(error_log, text);
++ case ERROR_LOG: status = fprintf(error_log, "%s\n", text);
+ break;
+ default: // do nothing?
+ break;
diff --git a/net-wireless/airtraf/files/airtraf-1.1-ncurses-opaque.patch b/net-wireless/airtraf/files/airtraf-1.1-ncurses-opaque.patch
new file mode 100644
index 000000000000..540b7b2772eb
--- /dev/null
+++ b/net-wireless/airtraf/files/airtraf-1.1-ncurses-opaque.patch
@@ -0,0 +1,94 @@
+https://bugs.gentoo.org/932138
+--- a/src/libncurses/deskman.c
++++ b/src/libncurses/deskman.c
+@@ -110,12 +110,12 @@ void colorwin(WINDOW * win)
+
+ strcpy(blankpad, "");
+
+- for (ctr = 0; ctr <= win->_maxx; ctr++) {
++ for (ctr = 0; ctr <= getmaxx(win); ctr++) {
+ strcat(blankpad, " ");
+ }
+
+ scrollok(win, 0);
+- for (ctr = 0; ctr <= win->_maxy; ctr++) {
++ for (ctr = 0; ctr <= getmaxy(win); ctr++) {
+ wmove(win, ctr, 0);
+ wprintw(win, "%s", blankpad);
+ }
+--- a/src/sniffd/gui_channel_scan.c
++++ b/src/sniffd/gui_channel_scan.c
+@@ -339,7 +339,7 @@ void make_status_window(WINDOW ** statuswin, PANEL ** statuspanel)
+ void fill_line_blank(WINDOW * win, int line)
+ {
+ int i;
+- for (i = 0; i < win->_maxx; i++)
++ for (i = 0; i < getmaxx(win); i++)
+ mvwprintw(win, line, i, " ");
+ }
+
+--- a/src/sniffd/gui_tcp_analysis_scan.c
++++ b/src/sniffd/gui_tcp_analysis_scan.c
+@@ -463,7 +463,7 @@ void print_tcp_nodelist_row(WINDOW *win, int row, bss_node_t *node, int id, int
+ void print_tcp_nodelist_results(WINDOW * win, int * selected_node, int offset)
+ {
+ int i;
+- int max_view = win->_maxy - 6;
++ int max_view = getmaxy(win) - 6;
+ int last_item = 0;
+ int selected = 0;
+
+@@ -476,7 +476,7 @@ void print_tcp_nodelist_results(WINDOW * win, int * selected_node, int offset)
+ wattrset(win, STDATTR);
+
+ if (ap->num < 2){
+- mvwprintw(win, 4, (win->_maxx - 26) /2, "No Detected Wireless Nodes!");
++ mvwprintw(win, 4, (getmaxx(win) - 26) /2, "No Detected Wireless Nodes!");
+ return;
+ }
+
+@@ -485,15 +485,15 @@ void print_tcp_nodelist_results(WINDOW * win, int * selected_node, int offset)
+ if (*selected_node == 0){
+ *selected_node = 1;
+ }
+- mvwprintw(win, 4, (win->_maxx - 26) /2, " ");
++ mvwprintw(win, 4, (getmaxx(win) - 26) /2, " ");
+
+ if ((offset + max_view) < ap->num){
+ last_item = offset + max_view;
+- mvwprintw(win, win->_maxy - 1, 4, ">> More >>");
++ mvwprintw(win, getmaxy(win) - 1, 4, ">> More >>");
+ }
+ else{
+ last_item = ap->num;
+- mvwprintw(win, win->_maxy - 1, 4, "-- End --");
++ mvwprintw(win, getmaxy(win) - 1, 4, "-- End --");
+ }
+ for (i = offset; i < last_item; i++){
+ if (node == NULL) break;
+@@ -542,7 +542,7 @@ void scrollbreakdownwin(int direction, int select_node, int * offset)
+
+ void scrollnodelistwin(WINDOW *win, int direction, int * select_node, int * list_pos)
+ {
+- int max_view = win->_maxy - 6;
++ int max_view = getmaxy(win) - 6;
+
+ bss_t * ap = get_detailed_snapshot()->bss_list_top;
+
+@@ -581,11 +581,11 @@ void reset_active_win(WINDOW *win, int toggle)
+ {
+ if (toggle){
+ wattrset(win, ACTIVEATTR);
+- mvwprintw(win, win->_maxy, win->_maxx - 10, " ACTIVE ");
++ mvwprintw(win, getmaxy(win), getmaxx(win) - 10, " ACTIVE ");
+ }
+ else{
+ wattrset(win, BOXATTR);
+- wmove(win, win->_maxy, win->_maxx - 10);
++ wmove(win, getmaxy(win), getmaxx(win) - 10);
+ whline(win, ACS_HLINE, 8);
+ }
+ }
+--
+2.47.0
+
diff --git a/net-wireless/airtraf/files/airtraf-1.1-off-by-one.patch b/net-wireless/airtraf/files/airtraf-1.1-off-by-one.patch
new file mode 100644
index 000000000000..571532b603ec
--- /dev/null
+++ b/net-wireless/airtraf/files/airtraf-1.1-off-by-one.patch
@@ -0,0 +1,29 @@
+--- a/src/sniffd/autoconfig.c
++++ b/src/sniffd/autoconfig.c
+@@ -68,7 +68,7 @@
+ struct ifreq ifr;
+
+ strncpy(ifr.ifr_name, ifname, IFNAMSIZ);
+- ifr.ifr_name[IFNAMSIZ] = '\0';
++ ifr.ifr_name[IFNAMSIZ -1] = '\0';
+ if (ioctl(skfd, SIOCGIFFLAGS, &ifr) < 0){
+ return (-1);
+ }
+@@ -89,7 +89,7 @@
+ struct ifreq ifr;
+
+ strncpy(ifr.ifr_name, ifname, IFNAMSIZ);
+- ifr.ifr_name[IFNAMSIZ] = '\0';
++ ifr.ifr_name[IFNAMSIZ -1] = '\0';
+ if (ioctl(skfd, SIOCGIFFLAGS, &ifr) < 0){
+ return (-1);
+ }
+@@ -129,7 +129,7 @@
+ {
+ /* Set device name */
+ strncpy(pwrq->ifr_name, ifname, IFNAMSIZ);
+- pwrq->ifr_name[IFNAMSIZ] = '\0';
++ pwrq->ifr_name[IFNAMSIZ -1] = '\0';
+
+ /* Do the request */
+ return(ioctl(skfd, request, pwrq));
diff --git a/net-wireless/airtraf/files/airtraf-1.1-sniffd.patch b/net-wireless/airtraf/files/airtraf-1.1-sniffd.patch
new file mode 100644
index 000000000000..e88ef52267c1
--- /dev/null
+++ b/net-wireless/airtraf/files/airtraf-1.1-sniffd.patch
@@ -0,0 +1,59 @@
+--- a/src/sniffd/autoconfig.c
++++ b/src/sniffd/autoconfig.c
+@@ -360,7 +360,7 @@
+ int check_drv_compat(char * drvname, int * id)
+ {
+ int i;
+- for (i=0; (int) compat_drivers[i] != -1; i++){
++ for (i=0; (long) compat_drivers[i] != -1; i++){
+ if (!strncmp(compat_drivers[i], drvname, DRVNAMSIZ +1)){
+ *id = i;
+ return (1); // just true...
+@@ -525,6 +525,7 @@
+ }
+ /* Close the socket. */
+ close(skfd);
++ return 0;
+ }
+
+ /**
+@@ -772,7 +773,7 @@
+ fclose(fh);
+ break;
+ case DRV_PRISM2:
+-
++ break;
+
+ }
+ /* update flag take off PROMISC */
+--- a/src/sniffd/gui_channel_scan.c
++++ b/src/sniffd/gui_channel_scan.c
+@@ -384,7 +384,7 @@
+ if (!beep()) flash();
+ wattrset(statuswin, STDATTR);
+ snprintf(message,100,"Detected new network '%s' (%s) on Channel %02d",
+- ((strlen(ap->ssid)==1)&&(!strncmp(" ",ap->ssid,1))) ? "<cloaked>" : ap->ssid,
++ ((strlen(ap->ssid)==1)&&(!strncmp(" ",(char *)ap->ssid,1))) ? "<cloaked>" : (char *)ap->ssid,
+ hexdump((__u8*)&ap->bssid,6), ap->channel);
+ print_status_msg(statuswin, location, message);
+ ap->status = AP_STATUS_ACTIVE;
+--- a/src/sniffd/server.c
++++ b/src/sniffd/server.c
+@@ -57,7 +57,7 @@
+
+ int process_command(int, char *);
+ int issue_get_cmd(int, char *);
+-int send_bss_info(int);
++ssize_t send_bss_info(int);
+ int send_ids_info(int);
+
+ /*=============================================================*/
+@@ -143,7 +143,7 @@
+ if (DEBUG) fprintf(stderr,"Error transmitting data\n");
+ }
+ } while (write_len == 0);
+- if (DEBUG) fprintf(stderr,"Data: %d bytes sent\n",length);
++ if (DEBUG) fprintf(stderr,"Data: %ld bytes sent\n",length);
+ }
+
+ /**
diff --git a/net-wireless/airtraf/files/airtraf-1.1-wformat-security.patch b/net-wireless/airtraf/files/airtraf-1.1-wformat-security.patch
new file mode 100644
index 000000000000..edd531258e66
--- /dev/null
+++ b/net-wireless/airtraf/files/airtraf-1.1-wformat-security.patch
@@ -0,0 +1,201 @@
+--- a/src/libncurses/deskman.c
++++ b/src/libncurses/deskman.c
+@@ -136,7 +136,7 @@ void coloreol(WINDOW * win)
+ for (i = x; i <= COLS - 1; i++)
+ strcat(blankpad, " ");
+
+- printw(blankpad);
++ printw("%s", blankpad);
+ free(blankpad);
+ }
+
+@@ -284,8 +284,8 @@ void indicate(char *message)
+ char sp_buf[10];
+ attrset(STATUSBARATTR);
+ sprintf(sp_buf, "%%%dc", COLS);
+- mvprintw(LINES - 1, 0, sp_buf, ' ');
+- mvprintw(LINES - 1, 1, message);
++ mvprintw(LINES - 1, 0, "%s%d", sp_buf, ' ');
++ mvprintw(LINES - 1, 1, "%s", message);
+ refresh();
+ }
+
+@@ -336,9 +336,9 @@ void infobox(char *text, char *prompt)
+ colorwin(win);
+ box(win, ACS_VLINE, ACS_HLINE);
+ wattrset(win, STDATTR);
+- mvwprintw(win, 1, 2, text);
++ mvwprintw(win, 1, 2, "%s", text);
+ wattrset(win, HIGHATTR);
+- mvwprintw(win, 2, 2, prompt);
++ mvwprintw(win, 2, 2, "%s", prompt);
+ update_panels();
+ doupdate();
+ wgetch(win);
+--- a/src/sniffd/gui_main.c
++++ b/src/sniffd/gui_main.c
+@@ -248,8 +248,8 @@ void print_selected_ap_results(WINDOW *win, PANEL *panel, struct access_point *a
+ mvwprintw(win, 3, 10, " ");
+ mvwprintw(win, 4, 10, " ");
+ mvwprintw(win, 6, 13, " ");
+- mvwprintw(win, 3, 10, ap->ssid);
+- mvwprintw(win, 4, 10, hexdump((__u8*)&ap->bssid,6));
++ mvwprintw(win, 3, 10, "%s", ap->ssid);
++ mvwprintw(win, 4, 10, "%s", hexdump((__u8*)&ap->bssid,6));
+ mvwprintw(win, 5, 10, "%s", ap->wep_status ? "encrypted " : "opensystem");
+ mvwprintw(win, 6, 13, "%02d", ap->channel);
+ }
+@@ -305,7 +305,7 @@ void print_system_results(WINDOW *win, PANEL *panel, struct SETTINGS *mySettings
+ else if (mySettings->card_type == WLANNG)
+ mvwprintw(win, 3, 19, "Wlan-ng ");
+
+- mvwprintw(win, 4, 19, mySettings->interface);
++ mvwprintw(win, 4, 19, "%s", mySettings->interface);
+
+ if (mySettings->capture_mode != CAPTURE_MODE_PLAYBACK)
+ mvwprintw(win, 5, 19, "Real-Time ");
+@@ -327,7 +327,7 @@ void print_system_results(WINDOW *win, PANEL *panel, struct SETTINGS *mySettings
+ else
+ mvwprintw(win, 8, 19, "OFF");
+
+- mvwprintw(win, 10, 12, uptime);
++ mvwprintw(win, 10, 12, "%s", uptime);
+
+ update_panels();
+ doupdate();
+@@ -373,7 +373,7 @@ void showcapturesetting(WINDOW *win, struct SETTINGS *mySettings)
+ {
+ wattrset(win, HIGHATTR);
+ mvwprintw(win, 1, 20, " ");
+- mvwprintw(win, 1, 20, mySettings->capture_file);
++ mvwprintw(win, 1, 20, "%s", mySettings->capture_file);
+ mvwprintw(win, 2, 20, "%s", mySettings->capture_overwrite ? "YES" : " NO");
+ mvwprintw(win, 3, 20, "%-5.1f", mySettings->capture_interval);
+ }
+--- a/src/sniffd/gui_channel_scan.c
++++ b/src/sniffd/gui_channel_scan.c
+@@ -286,8 +286,8 @@ void print_breakdown_results(WINDOW * win, int offset)
+ if (!strncmp(ap->ssid," ",32))
+ mvwprintw(win, position+3, 11, "<cloaked>");
+ else
+- mvwprintw(win, position+3, 11, ap->ssid);
+- mvwprintw(win, position+3, 39, hexdump((__u8*)&ap->bssid,6));
++ mvwprintw(win, position+3, 11, "%s", ap->ssid);
++ mvwprintw(win, position+3, 39, "%s", hexdump((__u8*)&ap->bssid,6));
+ mvwprintw(win, position+3, 53, "%s", ap->wep_status ? "crypt" : "open ");
+ mvwprintw(win, position+3, 59, "%5d", ap->mgmt_count);
+ mvwprintw(win, position+3, 65, "%4d", ap->ctrl_count);
+@@ -351,12 +351,12 @@ void print_status_msg(WINDOW * statuswin, int *location, char * msg)
+ scrollstatuswin(statuswin, SCROLLUP);
+ wmove(statuswin, 12, 0);
+ fill_line_blank(statuswin, 12);
+- mvwprintw(statuswin, 12, 2, msg);
++ mvwprintw(statuswin, 12, 2, "%s", msg);
+ }
+ else{
+ wmove(statuswin, *location, 0);
+ fill_line_blank(statuswin, *location);
+- mvwprintw(statuswin, *location, 2, msg);
++ mvwprintw(statuswin, *location, 2, "%s", msg);
+ }
+ *location = *location + 1;
+ update_panels();
+--- a/src/sniffd/gui_detailed_scan.c
++++ b/src/sniffd/gui_detailed_scan.c
+@@ -131,8 +131,8 @@ void printdetails(WINDOW * win)
+
+ wattrset(win, HIGHATTR);
+ if (info != NULL){
+- mvwprintw(win, 2, 10, hexdump((__u8*)&info->bssid,6));
+- mvwprintw(win, 2, 33, info->ssid);
++ mvwprintw(win, 2, 10, "%s", hexdump((__u8*)&info->bssid,6));
++ mvwprintw(win, 2, 33, "%s", info->ssid);
+ mvwprintw(win, 2, 61, "%s", info->wep_status ? "encrypted " : "opensystem");
+ mvwprintw(win, 2, 85, "%d", info->channel);
+
+--- a/src/sniffd/gui_gen_protocol_scan.c
++++ b/src/sniffd/gui_gen_protocol_scan.c
+@@ -150,8 +150,8 @@ void print_proto_activity_overview_results(WINDOW * win)
+
+ wattrset(win, HIGHATTR);
+ /** access point info **/
+- mvwprintw(win, 4, 10, ap->ssid);
+- mvwprintw(win, 5, 10, hexdump((__u8*)&ap->bssid,6));
++ mvwprintw(win, 4, 10, "%s", ap->ssid);
++ mvwprintw(win, 5, 10, "%s", hexdump((__u8*)&ap->bssid,6));
+ mvwprintw(win, 6, 10, "%s", ap->wep_status ? "encrypted " : "opensystem");
+ mvwprintw(win, 7, 13, "%02d", ap->channel);
+
+--- a/src/sniffd/gui_tcp_analysis_scan.c
++++ b/src/sniffd/gui_tcp_analysis_scan.c
+@@ -164,8 +164,8 @@ void print_tcp_activity_overview_results(WINDOW * win, int selected, int view)
+
+ wattrset(win, HIGHATTR);
+ /** access point info **/
+- mvwprintw(win, 4, 10, ap->ssid);
+- mvwprintw(win, 5, 10, hexdump((__u8*)&ap->bssid,6));
++ mvwprintw(win, 4, 10, "%s", ap->ssid);
++ mvwprintw(win, 5, 10, "%s", hexdump((__u8*)&ap->bssid,6));
+ mvwprintw(win, 6, 10, "%s", ap->wep_status ? "encrypted " : "opensystem");
+ mvwprintw(win, 7, 13, "%02d", ap->channel);
+ mvwprintw(win, 8, 18, "%3d", ap->num-1);
+--- a/src/sniffd/gui_tcp_analysis_scan.c
++++ b/src/sniffd/gui_tcp_analysis_scan.c
+@@ -437,7 +437,7 @@ void print_tcp_nodelist_row(WINDOW *win, int row, bss_node_t *node, int id, int
+ mvwprintw(win, row, 2, ">");
+ wattrset(win, STDATTR);
+ mvwprintw(win, row, 4, "%02d", id);
+- mvwprintw(win, row, 10, hexdump((__u8*)&node->mac_addr,6));
++ mvwprintw(win, row, 10, "%s", hexdump((__u8*)&node->mac_addr,6));
+ mvwprintw(win, row, 30, " ");
+ mvwprintw(win, row, 30, "%s", inet_ntoa(node->ip_addr));
+ mvwprintw(win, row, 48, "%6d", node->tcp_connections);
+@@ -447,7 +447,7 @@ void print_tcp_nodelist_row(WINDOW *win, int row, bss_node_t *node, int id, int
+ wattrset(win, HIGHATTR);
+ mvwprintw(win, row, 2, " ");
+ mvwprintw(win, row, 4, "%02d", id);
+- mvwprintw(win, row, 10, hexdump((__u8*)&node->mac_addr,6));
++ mvwprintw(win, row, 10, "%s", hexdump((__u8*)&node->mac_addr,6));
+ mvwprintw(win, row, 30, " ");
+ mvwprintw(win, row, 30, "%s", inet_ntoa(node->ip_addr));
+ mvwprintw(win, row, 48, "%6d", node->tcp_connections);
+--- a/src/sniffd/mon_ids.c
++++ b/src/sniffd/mon_ids.c
+@@ -76,9 +76,9 @@ void print_ids_statrow(WINDOW * win, node_stat_t * node, int seq_num)
+ int diagnosis = 0;
+
+ mvwprintw(win, seq_num, 2, "%2d: ", seq_num);
+- mvwprintw(win, seq_num, 6, hexdump((__u8*)&node->node_mac, 6));
++ mvwprintw(win, seq_num, 6, "%s", hexdump((__u8*)&node->node_mac, 6));
+ mvwprintw(win, seq_num, 18, " -> ");
+- mvwprintw(win, seq_num, 22, hexdump((__u8*)&node->dest_mac, 6));
++ mvwprintw(win, seq_num, 22, "%s", hexdump((__u8*)&node->dest_mac, 6));
+ mvwprintw(win, seq_num, 25 * COLS / 80, "%6d", node->probe_request);
+ mvwprintw(win, seq_num, 30 * COLS / 80, "%6d", node->assoc_request);
+ mvwprintw(win, seq_num, 35 * COLS / 80, "%6d", node->reassoc_request);
+@@ -93,10 +93,10 @@ void print_ids_statrow(WINDOW * win, node_stat_t * node, int seq_num)
+ node->deauth_status);
+ diagnosis = node->assoc_status + node->reassoc_status + node->auth_status;
+ if (diagnosis == 0){
+- mvwprintw(win, seq_num, 70 * COLS/ 80, " Normal ");
++ mvwprintw(win, seq_num, 70 * COLS/ 80, "%s", " Normal ");
+ }
+ else{
+- mvwprintw(win, seq_num, 70 * COLS/ 80, "Suspicious");
++ mvwprintw(win, seq_num, 70 * COLS/ 80, "%s", "Suspicious");
+ }
+ }
+
+@@ -115,10 +115,10 @@ void print_ids_details(WINDOW * win, ids_t *info, int page_num)
+ end_loc = MAX_STAT_ROW - 1;
+ }
+ if (end_loc < info->node_count){
+- mvwprintw(win, LINES * 0.6, 2, " >> More >> ");
++ mvwprintw(win, LINES * 0.6, 2, "%s", " >> More >> ");
+ }
+ else{
+- mvwprintw(win, LINES * 0.6, 2, " << END! >> ");
++ mvwprintw(win, LINES * 0.6, 2, "%s", " << END! >> ");
+ }
+ wattrset(win, HIGHATTR);
+ for (curr_loc = start_loc; curr_loc < end_loc; curr_loc++){
diff --git a/net-wireless/airtraf/metadata.xml b/net-wireless/airtraf/metadata.xml
new file mode 100644
index 000000000000..9ed80e42c11a
--- /dev/null
+++ b/net-wireless/airtraf/metadata.xml
@@ -0,0 +1,16 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE pkgmetadata SYSTEM "https://docs.baldeagleos.com/dtd/metadata.dtd">
+<pkgmetadata>
+ <maintainer type="project">
+ <email>netmon@gentoo.org</email>
+ <name>Gentoo network monitoring and analysis project</name>
+ </maintainer>
+ <longdescription>
+AirTraf 1.0 is a wireless sniffer that can detect and determine exactly what is
+being transmitted over 802.11 wireless networks. This open-source program
+tracks and identifies legitimate and rogue access points, keeps performance
+statistics on a by-user and by-protocol basis, measures the signal strength of
+network components, and more. Do you want to capture the sky?
+</longdescription>
+ <origin>baldeagleos-repo</origin>
+</pkgmetadata>
diff --git a/net-wireless/b43-fwcutter/Manifest b/net-wireless/b43-fwcutter/Manifest
new file mode 100644
index 000000000000..d76e391cfe29
--- /dev/null
+++ b/net-wireless/b43-fwcutter/Manifest
@@ -0,0 +1 @@
+DIST b43-fwcutter-019.tar.bz2 46769 BLAKE2B fc67d285ee1caa4cb17584cfbae21ff5852282a3565a8a21d5775b4ca734bec4c9e62281dffeaac884a85530b2ba70479620b8425abd73ce1e502ab032aaed42 SHA512 2a439d1583d1ee7b13dd6a7526b78b216073e044c3934adf6615b8d2ca9a4b8c74db9791182d27baf1690b5c5ff6ce1a9c8dd4fb796e47939d055fef5bb37960
diff --git a/net-wireless/b43-fwcutter/b43-fwcutter-019.ebuild b/net-wireless/b43-fwcutter/b43-fwcutter-019.ebuild
new file mode 100644
index 000000000000..e5e90f5475d5
--- /dev/null
+++ b/net-wireless/b43-fwcutter/b43-fwcutter-019.ebuild
@@ -0,0 +1,30 @@
+# Copyright 1999-2025 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=8
+
+inherit toolchain-funcs
+
+DESCRIPTION="Firmware tool for Broadcom 43xx-based wireless devices using mac80211"
+HOMEPAGE="https://bues.ch/b43/fwcutter/"
+SRC_URI="https://bues.ch/b43/fwcutter/${P}.tar.bz2"
+
+LICENSE="GPL-2"
+SLOT="0"
+KEYWORDS="amd64 ~arm arm64 ~loong ppc ppc64 x86"
+
+src_compile() {
+ emake CC="$(tc-getCC)" V=1
+}
+
+src_install() {
+ # Install fwcutter
+ dobin ${PN}
+ doman ${PN}.1
+ dodoc README
+}
+
+pkg_postinst() {
+ einfo "Firmware may be downloaded from http://linuxwireless.org."
+ einfo "This version of fwcutter works with all b43 driver versions."
+}
diff --git a/net-wireless/b43-fwcutter/metadata.xml b/net-wireless/b43-fwcutter/metadata.xml
new file mode 100644
index 000000000000..22d29be8fc24
--- /dev/null
+++ b/net-wireless/b43-fwcutter/metadata.xml
@@ -0,0 +1,9 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE pkgmetadata SYSTEM "https://docs.baldeagleos.com/dtd/metadata.dtd">
+<pkgmetadata>
+ <maintainer type="person">
+ <email>zerochaos@gentoo.org</email>
+ <name>Rick Farina</name>
+ </maintainer>
+ <origin>baldeagleos-repo</origin>
+</pkgmetadata>
diff --git a/net-wireless/bdaddr/Manifest b/net-wireless/bdaddr/Manifest
new file mode 100644
index 000000000000..180301cd51cb
--- /dev/null
+++ b/net-wireless/bdaddr/Manifest
@@ -0,0 +1,2 @@
+DIST bdaddr-0_p20210511-idiomatic-makefile-r1.patch 883 BLAKE2B 805f5faf7bc1260f7f415eb92d02e0269ec6b753e31106f81970c28e1692226ce2f6fb08eb05438b190a321a6789fe600fd9ae6006a1fb54d92a96f55a6db80c SHA512 1938644c359c061966e1278bf97cd622cfa9c74eac7e5c0373df1ce0bc6b36a3034e47bb95601d31d28ec2a0627e0e2b3bb2174d1613368fbf2f2eb0ec237043
+DIST bdaddr-0_p20210511.tar.gz 5236 BLAKE2B a445586cc016f57f1922d6cff9dcf3141d35122a0dd4a3c338cc98515dadcf40265c3f4dcb2da03d3cd4214ab3d57172d78677afe9099d380e1241677d13b486 SHA512 956e1207c4b082d6322ab0ce9cdc76c9c2c9f17fe4ecb3d03b4839025b49f102a4e35b05e2489eca3fee6fc4a611d942e598c97cab7db6b530e895818e33a150
diff --git a/net-wireless/bdaddr/bdaddr-0_p20210511.ebuild b/net-wireless/bdaddr/bdaddr-0_p20210511.ebuild
new file mode 100644
index 000000000000..b1c2edecc39d
--- /dev/null
+++ b/net-wireless/bdaddr/bdaddr-0_p20210511.ebuild
@@ -0,0 +1,56 @@
+# Copyright 1999-2024 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=8
+
+DESCRIPTION="Utility for changing the Bluetooth device address"
+HOMEPAGE="https://github.com/thxomas/bdaddr"
+
+if [[ ${PV} == "9999" ]]; then
+ inherit git-r3
+ EGIT_REPO_URI="https://github.com/thxomas/bdaddr"
+else
+ MY_COMMIT=53dae3f6a33bca202ddae0e7b14beeaf2d7d653b
+ SRC_URI="
+ https://github.com/thxomas/bdaddr/archive/${MY_COMMIT}.tar.gz
+ -> ${P}.tar.gz"
+ KEYWORDS="amd64 ~arm64"
+ S="${WORKDIR}/${PN}-${MY_COMMIT}"
+fi
+
+# https://github.com/thxomas/bdaddr/pull/6
+SRC_URI+="
+ https://github.com/Flowdalic/bdaddr/commit/85eeb2a13ab664432ce357cdb0641163fc541a99.patch
+ -> ${PN}-0_p20210511-idiomatic-makefile-r1.patch
+"
+
+LICENSE="GPL-2+"
+SLOT="0"
+
+COMMON_DEPEND="
+ net-wireless/bluez:=
+"
+RDEPEND="
+ ${COMMON_DEPEND}
+ sys-apps/hwdata
+"
+DEPEND="
+ ${COMMON_DEPEND}
+"
+BDEPEND="dev-go/go-md2man"
+
+PATCHES=(
+ "${DISTDIR}"/${PN}-0_p20210511-idiomatic-makefile-r1.patch
+)
+
+src_compile() {
+ emake
+
+ go-md2man -in README.md -out ${PN}.1 || die
+}
+
+src_install() {
+ dobin ${PN}
+ doman ${PN}.1
+ dosym ../hwdata/oui.txt usr/share/misc/oui.txt
+}
diff --git a/net-wireless/bdaddr/metadata.xml b/net-wireless/bdaddr/metadata.xml
new file mode 100644
index 000000000000..5a54444ca974
--- /dev/null
+++ b/net-wireless/bdaddr/metadata.xml
@@ -0,0 +1,9 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE pkgmetadata SYSTEM "https://docs.baldeagleos.com/dtd/metadata.dtd">
+<pkgmetadata>
+ <maintainer type="person">
+ <name>Florian Schmaus</name>
+ <email>flow@gentoo.org</email>
+ </maintainer>
+ <origin>baldeagleos-repo</origin>
+</pkgmetadata>
diff --git a/net-wireless/bladerf-firmware/Manifest b/net-wireless/bladerf-firmware/Manifest
new file mode 100644
index 000000000000..99666c10ea90
--- /dev/null
+++ b/net-wireless/bladerf-firmware/Manifest
@@ -0,0 +1 @@
+DIST bladeRF_fw_v2.6.0.img 123656 BLAKE2B 58e62fbfe156b06c1825a5dd41e1a7b9f225186f2400423dd632bfa0e01c2f153b46532763d6dced4668c18b0b415f1bdcf50f9da54b4cbbb040fecdb134b79e SHA512 ba8dfd4f99903cfeec496dbdfddb73d6037a74ad16337b19900abe925b3c69dcb8fc5d256b4a53beb08d5f8de8bcd36b0a9dab86d12eef135194d119d8b0c9e8
diff --git a/net-wireless/bladerf-firmware/bladerf-firmware-2.6.0.ebuild b/net-wireless/bladerf-firmware/bladerf-firmware-2.6.0.ebuild
new file mode 100644
index 000000000000..abcc9abfabec
--- /dev/null
+++ b/net-wireless/bladerf-firmware/bladerf-firmware-2.6.0.ebuild
@@ -0,0 +1,32 @@
+# Copyright 1999-2025 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=8
+
+DESCRIPTION="bladeRF FX3 firmware images"
+HOMEPAGE="https://nuand.com/fx3.php"
+
+#firmware is open source, but uses a proprietary toolchain to build
+#automated builds from git are available, but likely unneeded
+#http://hoopycat.com/bladerf_builds/
+SRC_URI="https://nuand.com/fx3/bladeRF_fw_v${PV}.img"
+
+S="${DISTDIR}"
+LICENSE="MIT"
+SLOT="0"
+KEYWORDS="amd64 ~arm ~riscv x86"
+
+src_unpack() {
+ true
+}
+
+src_install() {
+ insinto /usr/share/Nuand/bladeRF/
+ doins bladeRF_fw_v${PV}.img
+}
+
+pkg_postinst() {
+ elog "Please remember you have to actually flash this onto"
+ elog "your bladerf with the following command:"
+ elog "bladeRF-cli -f /usr/share/Nuand/bladeRF/bladeRF_fw_v${PV}.img"
+}
diff --git a/net-wireless/bladerf-firmware/metadata.xml b/net-wireless/bladerf-firmware/metadata.xml
new file mode 100644
index 000000000000..42f58171ab2f
--- /dev/null
+++ b/net-wireless/bladerf-firmware/metadata.xml
@@ -0,0 +1,13 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE pkgmetadata SYSTEM "https://docs.baldeagleos.com/dtd/metadata.dtd">
+<pkgmetadata>
+ <maintainer type="person">
+ <email>zerochaos@gentoo.org</email>
+ <name>Rick Farina</name>
+ </maintainer>
+ <maintainer type="project">
+ <email>radio@gentoo.org</email>
+ <name>Radio</name>
+ </maintainer>
+ <origin>baldeagleos-repo</origin>
+</pkgmetadata>
diff --git a/net-wireless/bladerf-fpga/Manifest b/net-wireless/bladerf-fpga/Manifest
new file mode 100644
index 000000000000..6f79147de9f8
--- /dev/null
+++ b/net-wireless/bladerf-fpga/Manifest
@@ -0,0 +1,6 @@
+DIST hostedx115-0.16.0.rbf 3571462 BLAKE2B a204a6bf039cb06040e5f222b02e3fa63dbab48fd81b89645c40985cc82b763de4f1145a67047375d60f03914e7aa8bd8ba89cf3b6dc86dabd76ce1225423cfe SHA512 ee5f51ed1ba17f1b2ab748406b998efe283acdeeb5a00e77863655168b91a5e9d9fbb3e74fdc4d404f08baf3ea3d0c0fd11084cf2366c34fdd82f7e9a4da97f9
+DIST hostedx40-0.16.0.rbf 1191788 BLAKE2B db9712c6985d56e3d86a52a665079d868eecb6cc58d6da214aa1580b8c3ed2f8fc6a4c62fba515f96a87ef4174d61ae09d92addbffb8996dd5166ff3a887a5cc SHA512 8bcba343a861d2fabf49d9f5b122ab67a8ce267409ba504bf28073d273918b99e2105ff3b2255d7b03bf37a1bc3d270493aad46e0414076f137371bf579eca04
+DIST hostedxA4-0.16.0.rbf 2632660 BLAKE2B f14be203019103950e630e4681c11e4f960691eb3bb37b96f8672cde01cf5eaae3f17be34e9179bdb52c60528ccc73df0aa166ba4de85ea1a5da81d288b70ddc SHA512 0a641309c5561f1d66e46c1a810963e68b556d4667c5e68e76b63b4b5f5c86af764fb274fbd77202d9324e5cf352512eab10f4583cb2d5a27c49e0bf06138465
+DIST hostedxA5-0.16.0.rbf 4244820 BLAKE2B 61603cff3c060286abede60fe22ed547c32d8bf320de05a458543f72031a34dd0f105361a66b9048b7a69ca072094253c1365b006e1617d802d0caa4e59d7cb2 SHA512 aaf99b2584bc599424c721616b02483a06f4efa887029ba1d3dd9ef5a54411bd6e922aa6d727b8dfbc38497a921585f09140db159fff0a0bf17bcda0e13c5e33
+DIST hostedxA9-0.16.0.rbf 12858972 BLAKE2B eaa24b1cb1fe3810b84d432c4e10ee394b358b604d6294ba11f5debff2761e67fbd716a66973463140294378defb829513efa8711ece2d49068d562ba40baed6 SHA512 4b17f4cb174291cce6b35889dc53c67652b41145c4f7e6a6759a1cb238368299b3deece77115117fc95afbb6176aea426754f59500fa4d3b84b3f72e413e9e63
+DIST wlanxA9-0.15.3.rbf 12858972 BLAKE2B 2190025905315a75c77003dd9812463417447230b377ef4a7f173327ee7cce1a3232b98a40decf67ae96445ce1e2427efe3c6ba98c51da91ed6b4eb7650e9231 SHA512 71d0486d690f5466862f393be137590cbf52203982b7cd009f84c30140fe610ad06498e5217dfa366a14ad676a947e80f68292482273fe358fa4dba5eff03910
diff --git a/net-wireless/bladerf-fpga/bladerf-fpga-0.16.0.ebuild b/net-wireless/bladerf-fpga/bladerf-fpga-0.16.0.ebuild
new file mode 100644
index 000000000000..b0e400f895d7
--- /dev/null
+++ b/net-wireless/bladerf-fpga/bladerf-fpga-0.16.0.ebuild
@@ -0,0 +1,39 @@
+# Copyright 1999-2025 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=8
+
+DESCRIPTION="bladeRF FPGA bitstreams"
+HOMEPAGE="https://nuand.com/fpga.php"
+
+#fpga code is open source, but uses a proprietary toolchain to build
+#automated builds from git are available, but likely unneeded
+#http://hoopycat.com/bladerf_builds/
+wlan_latest="0.15.3"
+SRC_URI="wlanxA9? ( https://www.nuand.com/fpga/v${wlan_latest}/wlanxA9.rbf -> wlanxA9-${wlan_latest}.rbf )
+ xA4? ( https://nuand.com/fpga/v${PV}/hostedxA4.rbf -> hostedxA4-${PV}.rbf )
+ xA5? ( https://nuand.com/fpga/v${PV}/hostedxA5.rbf -> hostedxA5-${PV}.rbf )
+ xA9? ( https://nuand.com/fpga/v${PV}/hostedxA9.rbf -> hostedxA9-${PV}.rbf )
+ x40? ( https://nuand.com/fpga/v${PV}/hostedx40.rbf -> hostedx40-${PV}.rbf )
+ x115? ( https://nuand.com/fpga/v${PV}/hostedx115.rbf -> hostedx115-${PV}.rbf )"
+
+S="${DISTDIR}"
+LICENSE="MIT"
+SLOT="0"
+KEYWORDS="amd64 ~arm ~riscv x86"
+IUSE="wlanxA9 +xA4 xA5 +xA9 +x40 +x115"
+REQUIRED_USE="|| ( wlanxA9 xA4 xA5 xA9 x40 x115 )"
+
+src_unpack() {
+ true
+}
+
+src_install() {
+ insinto /usr/share/Nuand/bladeRF/
+ use wlanxA9 && newins wlanxA9-${PV}.rbf wlanxA9.rbf
+ use xA4 && newins hostedxA4-${PV}.rbf hostedxA4.rbf
+ use xA5 && newins hostedxA5-${PV}.rbf hostedxA5.rbf
+ use xA9 && newins hostedxA9-${PV}.rbf hostedxA9.rbf
+ use x40 && newins hostedx40-${PV}.rbf hostedx40.rbf
+ use x115 && newins hostedx115-${PV}.rbf hostedx115.rbf
+}
diff --git a/net-wireless/bladerf-fpga/metadata.xml b/net-wireless/bladerf-fpga/metadata.xml
new file mode 100644
index 000000000000..35342e897145
--- /dev/null
+++ b/net-wireless/bladerf-fpga/metadata.xml
@@ -0,0 +1,21 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE pkgmetadata SYSTEM "https://docs.baldeagleos.com/dtd/metadata.dtd">
+<pkgmetadata>
+ <maintainer type="person">
+ <email>zerochaos@gentoo.org</email>
+ <name>Rick Farina</name>
+ </maintainer>
+ <maintainer type="project">
+ <email>radio@gentoo.org</email>
+ <name>Radio</name>
+ </maintainer>
+ <use>
+ <flag name="wlanxA9">bitstream for the xA9 to do wifi"</flag>
+ <flag name="xA4">bitstream for the xA4 49 kLE Cyclone V FPGA bladerf 2.0 micro model"</flag>
+ <flag name="xA5">bitstream for the xA5 77 kLE Cyclone V FPGA bladerf 2.0 micro model"</flag>
+ <flag name="xA9">bitstream for the xA9 301 kLE Cyclone V FPGA bladerf 2.0 micro model"</flag>
+ <flag name="x40">bitstream for the x40 kLE Cyclone IV FPGA bladerf model"</flag>
+ <flag name="x115">bitstream for the x115 kLE Cyclone IV FPGA bladerf model"</flag>
+ </use>
+ <origin>baldeagleos-repo</origin>
+</pkgmetadata>
diff --git a/net-wireless/bladerf/Manifest b/net-wireless/bladerf/Manifest
new file mode 100644
index 000000000000..189cecc47613
--- /dev/null
+++ b/net-wireless/bladerf/Manifest
@@ -0,0 +1,4 @@
+DIST analogdevices-no-OS-0bba46.tar.gz 44190321 BLAKE2B b5c31b4b9ed92e0ac9f1a4c1eda38e065f00e0ee8034a99615a2509a4c91c589faefaf2e42a8bd30e61eb36459fa264c6e1892577f759c2ca0810925cede163e SHA512 cf6f6d34fed9879ae7263782f20f33dd3af84201e3477fa0501e072eb08a8a545a07c496ad0ff3f7dc1a6ef407f136f843ba05942b4819e146c5fef023a3bb02
+DIST bladerf-2023.02.tar.gz 2308710 BLAKE2B 1cbc7eb7eb63a336e12ab2eae29760dc32e187005b93bb4c10032244649651484dbbb68644d2a9abca5488840134b336bfa54fdeb5f6331e9c440a9b5f302227 SHA512 af03141712886ea76952a5eea9ffb67b511b8ea196f2cf3349dab339b1964b3f296410acdc070304ffab71eb011830131373ad8c3b00a6cfec2773283082cc0d
+DIST bladerf-2025.10.tar.gz 2769136 BLAKE2B bb76bf8b27dcad7843649e4671c0ea070f556af3d10c2ce84ffb1e711e1e428fede02587c16a65ca24c810a292d2e9ee2169803efa2cb54b004334557df94895 SHA512 2a4909a94fd4c7dac99b282c850129bc57e9f81e164a5bfbc5ce3a54e130e49da4344c5e4707045a3157901a470054b4685ed83a6b940f7bcc01359c51f2945f
+DIST bladerf-fsk-fb90368.tar.gz 87533 BLAKE2B 995d210cbb1c8b6a1559bcc70bf325e80fcc5af7ece45f2cacb3f8dcdf7f7bb8117d46775f69e9e6c76c9c7313e49dfbd0b96294a47ffdfe8a8603e0f9e470a4 SHA512 361d0cf0f9304836c3306f6578820d05026508ddcc99e46eea08d60fdbdebac9c20bb9d0a9732ece350a6decbba0a03d049f92ef296f46d173154fd83e9c295d
diff --git a/net-wireless/bladerf/bladerf-2023.02-r1.ebuild b/net-wireless/bladerf/bladerf-2023.02-r1.ebuild
new file mode 100644
index 000000000000..db794158fa6f
--- /dev/null
+++ b/net-wireless/bladerf/bladerf-2023.02-r1.ebuild
@@ -0,0 +1,77 @@
+# Copyright 1999-2025 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=8
+
+inherit cmake flag-o-matic udev
+
+DESCRIPTION="Libraries for supporing the BladeRF hardware from Nuand"
+HOMEPAGE="https://nuand.com/"
+
+#lib is LGPL and cli tools are GPL
+LICENSE="GPL-2+ LGPL-2.1+"
+
+SLOT="0/${PV}"
+
+#maintainer notes:
+#doc use flag, looks like it can't be disabled right now and will
+# always build if pandoc and help2man are installed
+# also ignores when deps are missing and just disables docs
+IUSE="doc +tecla"
+
+MY_PN="bladeRF"
+
+if [[ ${PV} == "9999" ]] ; then
+ inherit git-r3
+ EGIT_REPO_URI="https://github.com/Nuand/${MY_PN}.git"
+else
+ MY_PV=${PV/\_/-}
+ S="${WORKDIR}/${MY_PN}-${MY_PV}"
+ SRC_URI="https://github.com/Nuand/${MY_PN}/archive/${MY_PV}.tar.gz -> ${P}.tar.gz \
+ https://github.com/analogdevicesinc/no-OS/archive/0bba46e6f6f75785a65d425ece37d0a04daf6157.tar.gz -> analogdevices-no-OS-0bba46.tar.gz"
+ KEYWORDS="amd64 ~arm ~riscv x86"
+fi
+
+BDEPEND="doc? ( app-text/doxygen )"
+CDEPEND=">=dev-libs/libusb-1.0.16:1
+ tecla? ( dev-libs/libtecla )"
+DEPEND="${CDEPEND}
+ virtual/pkgconfig"
+RDEPEND="${CDEPEND}
+ >=net-wireless/bladerf-firmware-2.4.0
+ >=net-wireless/bladerf-fpga-0.15.0"
+
+PATCHES=( "${FILESDIR}/bladerf-cmake-glob.patch"
+ "${FILESDIR}"/${PN}-2023.02-cmake4.patch )
+
+src_unpack() {
+ if [ "${PV}" = "9999" ]; then
+ git-r3_src_unpack
+ else
+ default
+ mv "${WORKDIR}/no-OS-0bba46e6f6f75785a65d425ece37d0a04daf6157/ad9361" "${S}/thirdparty/analogdevicesinc/no-OS/" || die
+ fi
+}
+
+src_configure() {
+ # -Werror=lto-type-mismatch
+ # https://bugs.gentoo.org/861872
+ # https://github.com/Nuand/bladeRF/issues/903
+ filter-lto
+
+ local mycmakeargs=(
+ -DVERSION_INFO_OVERRIDE:STRING="${PV}"
+ -DBUILD_DOCUMENTATION="$(usex doc)"
+ -DENABLE_LIBTECLA="$(usex tecla)"
+ -DTREAT_WARNINGS_AS_ERRORS=OFF
+ -DUDEV_RULES_PATH="$(get_udevdir)"/rules.d
+ )
+ cmake_src_configure
+}
+
+pkg_postinst() {
+ udev_reload
+}
+pkg_postrm() {
+ udev_reload
+}
diff --git a/net-wireless/bladerf/bladerf-2025.10.ebuild b/net-wireless/bladerf/bladerf-2025.10.ebuild
new file mode 100644
index 000000000000..0186c81ef280
--- /dev/null
+++ b/net-wireless/bladerf/bladerf-2025.10.ebuild
@@ -0,0 +1,80 @@
+# Copyright 1999-2026 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=8
+
+inherit cmake flag-o-matic udev
+
+DESCRIPTION="Libraries for supporing the BladeRF hardware from Nuand"
+HOMEPAGE="https://nuand.com/"
+
+#lib is LGPL and cli tools are GPL
+LICENSE="GPL-2+ LGPL-2.1+"
+
+SLOT="0/${PV}"
+
+#maintainer notes:
+#doc use flag, looks like it can't be disabled right now and will
+# always build if pandoc and help2man are installed
+# also ignores when deps are missing and just disables docs
+IUSE="doc +tecla"
+
+MY_PN="bladeRF"
+
+if [[ ${PV} == "9999" ]] ; then
+ inherit git-r3
+ EGIT_REPO_URI="https://github.com/Nuand/${MY_PN}.git"
+else
+ MY_PV=${PV/\_/-}
+ S="${WORKDIR}/${MY_PN}-${MY_PV}"
+ noOS_commit="0bba46e6f6f75785a65d425ece37d0a04daf6157"
+ bladeRFfsk_commit="fb903684036217b9db9dcd6be8007548e12a377e"
+ SRC_URI="https://github.com/Nuand/${MY_PN}/archive/${MY_PV}.tar.gz -> ${P}.tar.gz \
+ https://github.com/analogdevicesinc/no-OS/archive/${noOS_commit}.tar.gz -> analogdevices-no-OS-0bba46.tar.gz
+ https://github.com/Nuand/bladeRF-fsk/archive/${bladeRFfsk_commit}.tar.gz -> bladerf-fsk-fb90368.tar.gz"
+ KEYWORDS="amd64 ~arm ~riscv x86"
+fi
+
+BDEPEND="doc? ( app-text/doxygen )"
+CDEPEND=">=dev-libs/libusb-1.0.16:1
+ net-misc/curl
+ sys-libs/ncurses:=
+ tecla? ( dev-libs/libtecla )"
+DEPEND="${CDEPEND}
+ virtual/pkgconfig"
+RDEPEND="${CDEPEND}
+ >=net-wireless/bladerf-firmware-2.4.0
+ >=net-wireless/bladerf-fpga-0.15.0"
+
+src_unpack() {
+ if [ "${PV}" = "9999" ]; then
+ git-r3_src_unpack
+ else
+ default
+ cp -r "${WORKDIR}/no-OS-${noOS_commit}/ad9361" "${S}/thirdparty/analogdevicesinc/no-OS/" || die
+ cp -r "${WORKDIR}/bladeRF-fsk-${bladeRFfsk_commit}/"* "${S}/host/utilities/bladeRF-fsk/" || die
+ fi
+}
+
+src_configure() {
+ # -Werror=lto-type-mismatch
+ # https://bugs.gentoo.org/861872
+ # https://github.com/Nuand/bladeRF/issues/903
+ filter-lto
+
+ local mycmakeargs=(
+ -DVERSION_INFO_OVERRIDE:STRING="${PV}"
+ -DBUILD_DOCUMENTATION="$(usex doc)"
+ -DENABLE_LIBTECLA="$(usex tecla)"
+ -DTREAT_WARNINGS_AS_ERRORS=OFF
+ -DUDEV_RULES_PATH="$(get_udevdir)"/rules.d
+ )
+ cmake_src_configure
+}
+
+pkg_postinst() {
+ udev_reload
+}
+pkg_postrm() {
+ udev_reload
+}
diff --git a/net-wireless/bladerf/bladerf-9999.ebuild b/net-wireless/bladerf/bladerf-9999.ebuild
new file mode 100644
index 000000000000..0eb056e88d56
--- /dev/null
+++ b/net-wireless/bladerf/bladerf-9999.ebuild
@@ -0,0 +1,80 @@
+# Copyright 1999-2025 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=8
+
+inherit cmake flag-o-matic udev
+
+DESCRIPTION="Libraries for supporing the BladeRF hardware from Nuand"
+HOMEPAGE="https://nuand.com/"
+
+#lib is LGPL and cli tools are GPL
+LICENSE="GPL-2+ LGPL-2.1+"
+
+SLOT="0/${PV}"
+
+#maintainer notes:
+#doc use flag, looks like it can't be disabled right now and will
+# always build if pandoc and help2man are installed
+# also ignores when deps are missing and just disables docs
+IUSE="doc +tecla"
+
+MY_PN="bladeRF"
+
+if [[ ${PV} == "9999" ]] ; then
+ inherit git-r3
+ EGIT_REPO_URI="https://github.com/Nuand/${MY_PN}.git"
+else
+ MY_PV=${PV/\_/-}
+ S="${WORKDIR}/${MY_PN}-${MY_PV}"
+ noOS_commit="0bba46e6f6f75785a65d425ece37d0a04daf6157"
+ bladeRFfsk_commit="fb903684036217b9db9dcd6be8007548e12a377e"
+ SRC_URI="https://github.com/Nuand/${MY_PN}/archive/${MY_PV}.tar.gz -> ${P}.tar.gz \
+ https://github.com/analogdevicesinc/no-OS/archive/${noOS_commit}.tar.gz -> analogdevices-no-OS-0bba46.tar.gz
+ https://github.com/Nuand/bladeRF-fsk/archive/${bladeRFfsk_commit}.tar.gz -> bladerf-fsk-fb90368.tar.gz"
+ KEYWORDS="~amd64 ~arm ~riscv ~x86"
+fi
+
+BDEPEND="doc? ( app-text/doxygen )"
+CDEPEND=">=dev-libs/libusb-1.0.16:1
+ net-misc/curl
+ sys-libs/ncurses:=
+ tecla? ( dev-libs/libtecla )"
+DEPEND="${CDEPEND}
+ virtual/pkgconfig"
+RDEPEND="${CDEPEND}
+ >=net-wireless/bladerf-firmware-2.4.0
+ >=net-wireless/bladerf-fpga-0.15.0"
+
+src_unpack() {
+ if [ "${PV}" = "9999" ]; then
+ git-r3_src_unpack
+ else
+ default
+ cp -r "${WORKDIR}/no-OS-${noOS_commit}/ad9361" "${S}/thirdparty/analogdevicesinc/no-OS/" || die
+ cp -r "${WORKDIR}/bladeRF-fsk-${bladeRFfsk_commit}/"* "${S}/host/utilities/bladeRF-fsk/" || die
+ fi
+}
+
+src_configure() {
+ # -Werror=lto-type-mismatch
+ # https://bugs.gentoo.org/861872
+ # https://github.com/Nuand/bladeRF/issues/903
+ filter-lto
+
+ local mycmakeargs=(
+ -DVERSION_INFO_OVERRIDE:STRING="${PV}"
+ -DBUILD_DOCUMENTATION="$(usex doc)"
+ -DENABLE_LIBTECLA="$(usex tecla)"
+ -DTREAT_WARNINGS_AS_ERRORS=OFF
+ -DUDEV_RULES_PATH="$(get_udevdir)"/rules.d
+ )
+ cmake_src_configure
+}
+
+pkg_postinst() {
+ udev_reload
+}
+pkg_postrm() {
+ udev_reload
+}
diff --git a/net-wireless/bladerf/files/bladerf-2023.02-cmake4.patch b/net-wireless/bladerf/files/bladerf-2023.02-cmake4.patch
new file mode 100644
index 000000000000..d2f1ff89d03e
--- /dev/null
+++ b/net-wireless/bladerf/files/bladerf-2023.02-cmake4.patch
@@ -0,0 +1,399 @@
+diff --git a/CMakeLists.txt b/CMakeLists.txt
+index 12e7562..6c6601c 100644
+--- a/CMakeLists.txt
++++ b/CMakeLists.txt
+@@ -1,4 +1,4 @@
+-cmake_minimum_required(VERSION 2.8.12)
++cmake_minimum_required(VERSION 3.10)
+ project(bladeRF CXX C)
+ # Indicate that this is a top-level build
+ set(BLADERF_TOP_LEVEL_BUILD ON)
+diff --git a/fx3_firmware/CMakeLists.txt b/fx3_firmware/CMakeLists.txt
+index 85bb380..1c75428 100644
+--- a/fx3_firmware/CMakeLists.txt
++++ b/fx3_firmware/CMakeLists.txt
+@@ -1,7 +1,7 @@
+ ################################################################################
+ # Build bladeRF FX3 Firmware
+ ################################################################################
+-cmake_minimum_required(VERSION 2.8.12)
++cmake_minimum_required(VERSION 3.10)
+ project(bladeRF_fw C)
+
+ ################################################################################
+diff --git a/fx3_firmware/util/elf2img/CMakeLists.txt b/fx3_firmware/util/elf2img/CMakeLists.txt
+index 92c2c18..1762bff 100644
+--- a/fx3_firmware/util/elf2img/CMakeLists.txt
++++ b/fx3_firmware/util/elf2img/CMakeLists.txt
+@@ -1,7 +1,7 @@
+ ################################################################################
+ # Build for FX3 elf2img utility
+ ################################################################################
+-cmake_minimum_required(VERSION 2.8.12)
++cmake_minimum_required(VERSION 3.10)
+ project(elf2img C)
+
+ if(WIN32)
+diff --git a/hdl/fpga/ip/analogdevicesinc/no_OS/CMakeLists.txt b/hdl/fpga/ip/analogdevicesinc/no_OS/CMakeLists.txt
+index d745dae..79e0680 100644
+--- a/hdl/fpga/ip/analogdevicesinc/no_OS/CMakeLists.txt
++++ b/hdl/fpga/ip/analogdevicesinc/no_OS/CMakeLists.txt
+@@ -1,4 +1,4 @@
+-cmake_minimum_required(VERSION 2.8.12)
++cmake_minimum_required(VERSION 3.10)
+ project(ad936x C)
+
+ message(STATUS "libad936x: Configuring build...")
+diff --git a/host/CMakeLists.txt b/host/CMakeLists.txt
+index 6e3d97f..1a5bee2 100644
+--- a/host/CMakeLists.txt
++++ b/host/CMakeLists.txt
+@@ -1,4 +1,4 @@
+-cmake_minimum_required(VERSION 2.8.12)
++cmake_minimum_required(VERSION 3.10)
+ project(bladeRF C)
+
+ ################################################################################
+diff --git a/host/common/test/dc_calibration/CMakeLists.txt b/host/common/test/dc_calibration/CMakeLists.txt
+index 1ab124e..383a70b 100644
+--- a/host/common/test/dc_calibration/CMakeLists.txt
++++ b/host/common/test/dc_calibration/CMakeLists.txt
+@@ -1,4 +1,4 @@
+-cmake_minimum_required(VERSION 2.8.12)
++cmake_minimum_required(VERSION 3.10)
+ project(test_dc_calibration C)
+
+ set(INCLUDES
+diff --git a/host/libraries/CMakeLists.txt b/host/libraries/CMakeLists.txt
+index 5937fd1..6eb493d 100644
+--- a/host/libraries/CMakeLists.txt
++++ b/host/libraries/CMakeLists.txt
+@@ -1,3 +1,3 @@
+-cmake_minimum_required(VERSION 2.8.12)
++cmake_minimum_required(VERSION 3.10)
+ add_subdirectory(libbladeRF)
+ add_subdirectory(libbladeRF_test)
+diff --git a/host/libraries/libbladeRF/CMakeLists.txt b/host/libraries/libbladeRF/CMakeLists.txt
+index f280b07..e7be341 100644
+--- a/host/libraries/libbladeRF/CMakeLists.txt
++++ b/host/libraries/libbladeRF/CMakeLists.txt
+@@ -1,4 +1,4 @@
+-cmake_minimum_required(VERSION 2.8.12)
++cmake_minimum_required(VERSION 3.10)
+ project(libbladeRF C)
+
+
+diff --git a/host/libraries/libbladeRF/doc/examples/CMakeLists.txt b/host/libraries/libbladeRF/doc/examples/CMakeLists.txt
+index be0e41a..507d424 100644
+--- a/host/libraries/libbladeRF/doc/examples/CMakeLists.txt
++++ b/host/libraries/libbladeRF/doc/examples/CMakeLists.txt
+@@ -1,4 +1,4 @@
+-cmake_minimum_required(VERSION 2.8.12)
++cmake_minimum_required(VERSION 3.10)
+ project(libbladeRF_doc_examples C)
+
+ set(INCLUDES
+diff --git a/host/libraries/libbladeRF/include/CMakeLists.txt b/host/libraries/libbladeRF/include/CMakeLists.txt
+index 4decc6f..75706a1 100644
+--- a/host/libraries/libbladeRF/include/CMakeLists.txt
++++ b/host/libraries/libbladeRF/include/CMakeLists.txt
+@@ -1,4 +1,4 @@
+-cmake_minimum_required(VERSION 2.8.12)
++cmake_minimum_required(VERSION 3.10)
+
+ ################################################################################
+ # Install libbladeRF header files
+diff --git a/host/libraries/libbladeRF_test/CMakeLists.txt b/host/libraries/libbladeRF_test/CMakeLists.txt
+index 491c59f..9f0414d 100644
+--- a/host/libraries/libbladeRF_test/CMakeLists.txt
++++ b/host/libraries/libbladeRF_test/CMakeLists.txt
+@@ -1,4 +1,4 @@
+-cmake_minimum_required(VERSION 2.8.12)
++cmake_minimum_required(VERSION 3.10)
+
+ add_subdirectory(test_async)
+ add_subdirectory(test_bootloader_recovery)
+diff --git a/host/libraries/libbladeRF_test/test_async/CMakeLists.txt b/host/libraries/libbladeRF_test/test_async/CMakeLists.txt
+index a63869e..d327d31 100644
+--- a/host/libraries/libbladeRF_test/test_async/CMakeLists.txt
++++ b/host/libraries/libbladeRF_test/test_async/CMakeLists.txt
+@@ -1,4 +1,4 @@
+-cmake_minimum_required(VERSION 2.8.12)
++cmake_minimum_required(VERSION 3.10)
+ project(libbladeRF_test_async C)
+
+ set(INCLUDES
+diff --git a/host/libraries/libbladeRF_test/test_bootloader_recovery/CMakeLists.txt b/host/libraries/libbladeRF_test/test_bootloader_recovery/CMakeLists.txt
+index c0743cb..3abb120 100644
+--- a/host/libraries/libbladeRF_test/test_bootloader_recovery/CMakeLists.txt
++++ b/host/libraries/libbladeRF_test/test_bootloader_recovery/CMakeLists.txt
+@@ -1,4 +1,4 @@
+-cmake_minimum_required(VERSION 2.8.12)
++cmake_minimum_required(VERSION 3.10)
+ project(libbladeRF_test_bootloader_recovery C)
+
+ set(INCLUDES
+diff --git a/host/libraries/libbladeRF_test/test_c/CMakeLists.txt b/host/libraries/libbladeRF_test/test_c/CMakeLists.txt
+index 0c37db7..42f9b91 100644
+--- a/host/libraries/libbladeRF_test/test_c/CMakeLists.txt
++++ b/host/libraries/libbladeRF_test/test_c/CMakeLists.txt
+@@ -1,4 +1,4 @@
+-cmake_minimum_required(VERSION 2.8.12)
++cmake_minimum_required(VERSION 3.10)
+ project(libbladeRF_test_c C)
+
+ set(INCLUDES ${libbladeRF_SOURCE_DIR}/include)
+diff --git a/host/libraries/libbladeRF_test/test_config_file/CMakeLists.txt b/host/libraries/libbladeRF_test/test_config_file/CMakeLists.txt
+index e38697c..5169c29 100644
+--- a/host/libraries/libbladeRF_test/test_config_file/CMakeLists.txt
++++ b/host/libraries/libbladeRF_test/test_config_file/CMakeLists.txt
+@@ -1,4 +1,4 @@
+-cmake_minimum_required(VERSION 2.8.12)
++cmake_minimum_required(VERSION 3.10)
+ project(libbladeRF_test_config_file C)
+
+ set(TEST_CONFIG_FILE_INCLUDES
+diff --git a/host/libraries/libbladeRF_test/test_cpp/CMakeLists.txt b/host/libraries/libbladeRF_test/test_cpp/CMakeLists.txt
+index 660a9a7..b04d9c0 100644
+--- a/host/libraries/libbladeRF_test/test_cpp/CMakeLists.txt
++++ b/host/libraries/libbladeRF_test/test_cpp/CMakeLists.txt
+@@ -1,4 +1,4 @@
+-cmake_minimum_required(VERSION 2.8.12)
++cmake_minimum_required(VERSION 3.10)
+ project(libbladeRF_test_cpp CXX)
+
+ include_directories(${libbladeRF_SOURCE_DIR}/include)
+diff --git a/host/libraries/libbladeRF_test/test_ctrl/CMakeLists.txt b/host/libraries/libbladeRF_test/test_ctrl/CMakeLists.txt
+index b22a1e6..df91974 100644
+--- a/host/libraries/libbladeRF_test/test_ctrl/CMakeLists.txt
++++ b/host/libraries/libbladeRF_test/test_ctrl/CMakeLists.txt
+@@ -1,4 +1,4 @@
+-cmake_minimum_required(VERSION 2.8.12)
++cmake_minimum_required(VERSION 3.10)
+ project(libbladeRF_test_ctrl C)
+
+ set(INCLUDES
+diff --git a/host/libraries/libbladeRF_test/test_digital_loopback/CMakeLists.txt b/host/libraries/libbladeRF_test/test_digital_loopback/CMakeLists.txt
+index 728ae6d..391c0cd 100644
+--- a/host/libraries/libbladeRF_test/test_digital_loopback/CMakeLists.txt
++++ b/host/libraries/libbladeRF_test/test_digital_loopback/CMakeLists.txt
+@@ -1,4 +1,4 @@
+-cmake_minimum_required(VERSION 2.8.12)
++cmake_minimum_required(VERSION 3.10)
+ project(libbladeRF_test_digital_loopback C)
+
+ set(INCLUDES
+diff --git a/host/libraries/libbladeRF_test/test_freq_hop/CMakeLists.txt b/host/libraries/libbladeRF_test/test_freq_hop/CMakeLists.txt
+index ef93c28..e4f198b 100644
+--- a/host/libraries/libbladeRF_test/test_freq_hop/CMakeLists.txt
++++ b/host/libraries/libbladeRF_test/test_freq_hop/CMakeLists.txt
+@@ -1,4 +1,4 @@
+-cmake_minimum_required(VERSION 2.8.12)
++cmake_minimum_required(VERSION 3.10)
+ project(libbladeRF_test_freq_hop C)
+
+ set(INCLUDES
+diff --git a/host/libraries/libbladeRF_test/test_fw_check/CMakeLists.txt b/host/libraries/libbladeRF_test/test_fw_check/CMakeLists.txt
+index 4a8e221..f128923 100644
+--- a/host/libraries/libbladeRF_test/test_fw_check/CMakeLists.txt
++++ b/host/libraries/libbladeRF_test/test_fw_check/CMakeLists.txt
+@@ -1,4 +1,4 @@
+-cmake_minimum_required(VERSION 2.8.12)
++cmake_minimum_required(VERSION 3.10)
+ project(libbladeRF_test_fw_check C)
+
+ set(INCLUDES
+diff --git a/host/libraries/libbladeRF_test/test_interleaver/CMakeLists.txt b/host/libraries/libbladeRF_test/test_interleaver/CMakeLists.txt
+index 5825b25..b91e92e 100644
+--- a/host/libraries/libbladeRF_test/test_interleaver/CMakeLists.txt
++++ b/host/libraries/libbladeRF_test/test_interleaver/CMakeLists.txt
+@@ -1,4 +1,4 @@
+-cmake_minimum_required(VERSION 2.8.12)
++cmake_minimum_required(VERSION 3.10)
+ project(libbladeRF_test_interleaver C)
+
+ set(INCLUDES
+diff --git a/host/libraries/libbladeRF_test/test_open/CMakeLists.txt b/host/libraries/libbladeRF_test/test_open/CMakeLists.txt
+index abd1af5..46a5336 100644
+--- a/host/libraries/libbladeRF_test/test_open/CMakeLists.txt
++++ b/host/libraries/libbladeRF_test/test_open/CMakeLists.txt
+@@ -1,4 +1,4 @@
+-cmake_minimum_required(VERSION 2.8.12)
++cmake_minimum_required(VERSION 3.10)
+ project(libbladeRF_test_open C)
+
+ set(INCLUDES
+diff --git a/host/libraries/libbladeRF_test/test_parse/CMakeLists.txt b/host/libraries/libbladeRF_test/test_parse/CMakeLists.txt
+index 68adb19..b72a8e6 100644
+--- a/host/libraries/libbladeRF_test/test_parse/CMakeLists.txt
++++ b/host/libraries/libbladeRF_test/test_parse/CMakeLists.txt
+@@ -1,4 +1,4 @@
+-cmake_minimum_required(VERSION 2.8.12)
++cmake_minimum_required(VERSION 3.10)
+ project(libbladeRF_test_parse C)
+
+ set(INCLUDES
+diff --git a/host/libraries/libbladeRF_test/test_peripheral_timing/CMakeLists.txt b/host/libraries/libbladeRF_test/test_peripheral_timing/CMakeLists.txt
+index 1ab45b2..b378d10 100644
+--- a/host/libraries/libbladeRF_test/test_peripheral_timing/CMakeLists.txt
++++ b/host/libraries/libbladeRF_test/test_peripheral_timing/CMakeLists.txt
+@@ -5,7 +5,7 @@
+ # the NIOS II code, it probably won't get much general use, so we'll just
+ # leave this as-is for now.
+ if(${CMAKE_SYSTEM_NAME} MATCHES "Linux")
+- cmake_minimum_required(VERSION 2.8.12)
++ cmake_minimum_required(VERSION 3.10)
+ project(libbladeRF_test_peripheral_timing C)
+
+ set(INCLUDES
+diff --git a/host/libraries/libbladeRF_test/test_quick_retune/CMakeLists.txt b/host/libraries/libbladeRF_test/test_quick_retune/CMakeLists.txt
+index dcd447b..75bfdde 100644
+--- a/host/libraries/libbladeRF_test/test_quick_retune/CMakeLists.txt
++++ b/host/libraries/libbladeRF_test/test_quick_retune/CMakeLists.txt
+@@ -1,4 +1,4 @@
+-cmake_minimum_required(VERSION 2.8.12)
++cmake_minimum_required(VERSION 3.10)
+ project(libbladeRF_test_quick_retune C)
+
+ set(INCLUDES
+diff --git a/host/libraries/libbladeRF_test/test_repeated_stream/CMakeLists.txt b/host/libraries/libbladeRF_test/test_repeated_stream/CMakeLists.txt
+index 2030959..e5ba6a3 100644
+--- a/host/libraries/libbladeRF_test/test_repeated_stream/CMakeLists.txt
++++ b/host/libraries/libbladeRF_test/test_repeated_stream/CMakeLists.txt
+@@ -1,4 +1,4 @@
+-cmake_minimum_required(VERSION 2.8.12)
++cmake_minimum_required(VERSION 3.10)
+ project(libbladeRF_test_repeated_stream C)
+
+ set(INCLUDES
+diff --git a/host/libraries/libbladeRF_test/test_repeater/CMakeLists.txt b/host/libraries/libbladeRF_test/test_repeater/CMakeLists.txt
+index 64b09c4..dcf2762 100644
+--- a/host/libraries/libbladeRF_test/test_repeater/CMakeLists.txt
++++ b/host/libraries/libbladeRF_test/test_repeater/CMakeLists.txt
+@@ -1,4 +1,4 @@
+-cmake_minimum_required(VERSION 2.8.12)
++cmake_minimum_required(VERSION 3.10)
+ project(libbladeRF_test_repeater C)
+
+ if(MSVC)
+diff --git a/host/libraries/libbladeRF_test/test_rx_discont/CMakeLists.txt b/host/libraries/libbladeRF_test/test_rx_discont/CMakeLists.txt
+index 6c561c9..0c6298b 100644
+--- a/host/libraries/libbladeRF_test/test_rx_discont/CMakeLists.txt
++++ b/host/libraries/libbladeRF_test/test_rx_discont/CMakeLists.txt
+@@ -1,4 +1,4 @@
+-cmake_minimum_required(VERSION 2.8.12)
++cmake_minimum_required(VERSION 3.10)
+ project(libbladeRF_test_rx_discont C)
+
+ set(INCLUDES
+diff --git a/host/libraries/libbladeRF_test/test_scheduled_retune/CMakeLists.txt b/host/libraries/libbladeRF_test/test_scheduled_retune/CMakeLists.txt
+index 2d37ced..b3aaccb 100644
+--- a/host/libraries/libbladeRF_test/test_scheduled_retune/CMakeLists.txt
++++ b/host/libraries/libbladeRF_test/test_scheduled_retune/CMakeLists.txt
+@@ -1,4 +1,4 @@
+-cmake_minimum_required(VERSION 2.8.12)
++cmake_minimum_required(VERSION 3.10)
+ project(libbladeRF_test_scheduled_retune C)
+
+ include_directories(${libbladeRF_SOURCE_DIR}/include)
+diff --git a/host/libraries/libbladeRF_test/test_sync/CMakeLists.txt b/host/libraries/libbladeRF_test/test_sync/CMakeLists.txt
+index 7060186..75566ad 100644
+--- a/host/libraries/libbladeRF_test/test_sync/CMakeLists.txt
++++ b/host/libraries/libbladeRF_test/test_sync/CMakeLists.txt
+@@ -1,4 +1,4 @@
+-cmake_minimum_required(VERSION 2.8.12)
++cmake_minimum_required(VERSION 3.10)
+ project(libbladeRF_test_sync C)
+
+ set(TEST_SYNC_INCLUDES
+diff --git a/host/libraries/libbladeRF_test/test_timestamps/CMakeLists.txt b/host/libraries/libbladeRF_test/test_timestamps/CMakeLists.txt
+index 1718e12..bdf0f05 100644
+--- a/host/libraries/libbladeRF_test/test_timestamps/CMakeLists.txt
++++ b/host/libraries/libbladeRF_test/test_timestamps/CMakeLists.txt
+@@ -1,4 +1,4 @@
+-cmake_minimum_required(VERSION 2.8.12)
++cmake_minimum_required(VERSION 3.10)
+ project(libbladeRF_test_timestamps C)
+
+ include_directories(${libbladeRF_SOURCE_DIR}/include)
+diff --git a/host/libraries/libbladeRF_test/test_tune_timing/CMakeLists.txt b/host/libraries/libbladeRF_test/test_tune_timing/CMakeLists.txt
+index bcd0cc1..90a5763 100644
+--- a/host/libraries/libbladeRF_test/test_tune_timing/CMakeLists.txt
++++ b/host/libraries/libbladeRF_test/test_tune_timing/CMakeLists.txt
+@@ -5,7 +5,7 @@
+ # the NIOS II code, it probably won't get much general use, so we'll just
+ # leave this as-is for now.
+ if(${CMAKE_SYSTEM_NAME} MATCHES "Linux")
+- cmake_minimum_required(VERSION 2.8.12)
++ cmake_minimum_required(VERSION 3.10)
+ project(libbladeRF_test_tune_timing C)
+
+ set(INCLUDES
+diff --git a/host/libraries/libbladeRF_test/test_unused_sync/CMakeLists.txt b/host/libraries/libbladeRF_test/test_unused_sync/CMakeLists.txt
+index 5e82a01..3e65fcd 100644
+--- a/host/libraries/libbladeRF_test/test_unused_sync/CMakeLists.txt
++++ b/host/libraries/libbladeRF_test/test_unused_sync/CMakeLists.txt
+@@ -1,4 +1,4 @@
+-cmake_minimum_required(VERSION 2.8.12)
++cmake_minimum_required(VERSION 3.10)
+ project(libbladeRF_test_unused_sync C)
+
+ set(INCLUDES ${libbladeRF_SOURCE_DIR}/include)
+diff --git a/host/libraries/libbladeRF_test/test_version/CMakeLists.txt b/host/libraries/libbladeRF_test/test_version/CMakeLists.txt
+index 2d2a227..eaa08c2 100644
+--- a/host/libraries/libbladeRF_test/test_version/CMakeLists.txt
++++ b/host/libraries/libbladeRF_test/test_version/CMakeLists.txt
+@@ -1,4 +1,4 @@
+-cmake_minimum_required(VERSION 2.8.12)
++cmake_minimum_required(VERSION 3.10)
+ project(libbladeRF_test_version C)
+
+ set(INCLUDES ${libbladeRF_SOURCE_DIR}/include)
+diff --git a/host/misc/CMakeLists.txt b/host/misc/CMakeLists.txt
+index 7ac411d..4336fb0 100644
+--- a/host/misc/CMakeLists.txt
++++ b/host/misc/CMakeLists.txt
+@@ -1,2 +1,2 @@
+-cmake_minimum_required(VERSION 2.8.12)
++cmake_minimum_required(VERSION 3.10)
+ add_subdirectory(udev)
+diff --git a/host/misc/udev/CMakeLists.txt b/host/misc/udev/CMakeLists.txt
+index 99e1f69..a1d5ecd 100644
+--- a/host/misc/udev/CMakeLists.txt
++++ b/host/misc/udev/CMakeLists.txt
+@@ -1,4 +1,4 @@
+-cmake_minimum_required(VERSION 2.8.12)
++cmake_minimum_required(VERSION 3.10)
+
+ if(${CMAKE_SYSTEM_NAME} MATCHES "Linux")
+ SET(SYSTEM_IS_LINUX TRUE)
+diff --git a/host/utilities/CMakeLists.txt b/host/utilities/CMakeLists.txt
+index 5169cd4..24f88f5 100644
+--- a/host/utilities/CMakeLists.txt
++++ b/host/utilities/CMakeLists.txt
+@@ -1,4 +1,4 @@
+-cmake_minimum_required(VERSION 2.8.12)
++cmake_minimum_required(VERSION 3.10)
+
+ add_subdirectory(bladeRF-cli)
+ add_subdirectory(bladeRF-fsk/c)
+diff --git a/host/utilities/bladeRF-cli/CMakeLists.txt b/host/utilities/bladeRF-cli/CMakeLists.txt
+index 8c7faa1..e080757 100644
+--- a/host/utilities/bladeRF-cli/CMakeLists.txt
++++ b/host/utilities/bladeRF-cli/CMakeLists.txt
+@@ -1,4 +1,4 @@
+-cmake_minimum_required(VERSION 2.8.12)
++cmake_minimum_required(VERSION 3.10)
+ project(bladeRF-cli C)
+
+ ################################################################################
+diff --git a/host/utilities/bladeRF-fsk/c/CMakeLists.txt b/host/utilities/bladeRF-fsk/c/CMakeLists.txt
+index dc2f1cb..91e30e0 100644
+--- a/host/utilities/bladeRF-fsk/c/CMakeLists.txt
++++ b/host/utilities/bladeRF-fsk/c/CMakeLists.txt
+@@ -1,4 +1,4 @@
+-cmake_minimum_required(VERSION 2.8.12)
++cmake_minimum_required(VERSION 3.10)
+ project(bladeRF-fsk C)
+
+ ################################################################################
diff --git a/net-wireless/bladerf/files/bladerf-cmake-glob.patch b/net-wireless/bladerf/files/bladerf-cmake-glob.patch
new file mode 100644
index 000000000000..61a28468af19
--- /dev/null
+++ b/net-wireless/bladerf/files/bladerf-cmake-glob.patch
@@ -0,0 +1,40 @@
+From 12699a5cf89a00d63637eafc108515990d27c8fc Mon Sep 17 00:00:00 2001
+From: "Rick Farina (Zero_Chaos)" <zerochaos@gentoo.org>
+Date: Thu, 16 Feb 2023 12:04:13 -0500
+Subject: [PATCH] use file(GLOB) instead of just globbing
+
+While *.h works for make, it fails when using ninja. This fixes the bug
+using cmake's file(GLOB) as suggested by DarthGandalf in
+gentoo-dev-help on irc
+
+https://bugs.gentoo.org/800791
+---
+ host/libraries/libbladeRF/CMakeLists.txt | 12 ++++++++----
+ 1 file changed, 8 insertions(+), 4 deletions(-)
+
+diff --git a/host/libraries/libbladeRF/CMakeLists.txt b/host/libraries/libbladeRF/CMakeLists.txt
+index 4000a1555..f280b07cd 100644
+--- a/host/libraries/libbladeRF/CMakeLists.txt
++++ b/host/libraries/libbladeRF/CMakeLists.txt
+@@ -540,13 +540,17 @@ if(BUILD_LIBBLADERF_DOCUMENTATION)
+
+ set(LOGO_IMAGE "${CMAKE_CURRENT_SOURCE_DIR}/doc/images/logo.png")
+
++ file(GLOB INCLUDE_H ${CMAKE_CURRENT_SOURCE_DIR}/include/*.h)
++ file(GLOB DOC_DOX ${CMAKE_CURRENT_SOURCE_DIR}/doc/doxygen/*.dox)
++ file(GLOB DOC_EXAMPLES ${CMAKE_CURRENT_SOURCE_DIR}/doc/examples/*)
++ file(GLOB DOC_IMAGES ${CMAKE_CURRENT_SOURCE_DIR}/doc/images/*)
+ set(DOXYGEN_SOURCE_FILES
+ ${CMAKE_CURRENT_BINARY_DIR}/doc/doxygen/Doxyfile
+- ${CMAKE_CURRENT_SOURCE_DIR}/include/*.h
+- ${CMAKE_CURRENT_SOURCE_DIR}/doc/doxygen/*.dox
++ ${INCLUDE_H}
++ ${DOC_DOX}
+ ${CMAKE_CURRENT_SOURCE_DIR}/doc/doxygen/layout.xml
+- ${CMAKE_CURRENT_SOURCE_DIR}/doc/examples/*
+- ${CMAKE_CURRENT_SOURCE_DIR}/doc/images/*
++ ${DOC_EXAMPLES}
++ ${DOC_IMAGES}
+ )
+
+ configure_file(
diff --git a/net-wireless/bladerf/metadata.xml b/net-wireless/bladerf/metadata.xml
new file mode 100644
index 000000000000..dd8b5b7962fc
--- /dev/null
+++ b/net-wireless/bladerf/metadata.xml
@@ -0,0 +1,16 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE pkgmetadata SYSTEM "https://docs.baldeagleos.com/dtd/metadata.dtd">
+<pkgmetadata>
+ <maintainer type="person">
+ <email>zerochaos@gentoo.org</email>
+ <name>Rick Farina</name>
+ </maintainer>
+ <maintainer type="project">
+ <email>radio@gentoo.org</email>
+ <name>Radio</name>
+ </maintainer>
+ <use>
+ <flag name="tecla">use libtecla for command line editing, tab completion, and history</flag>
+ </use>
+ <origin>baldeagleos-repo</origin>
+</pkgmetadata>
diff --git a/net-wireless/blueman/Manifest b/net-wireless/blueman/Manifest
new file mode 100644
index 000000000000..d733d394fe7a
--- /dev/null
+++ b/net-wireless/blueman/Manifest
@@ -0,0 +1 @@
+DIST blueman-2.4.6.tar.xz 1599456 BLAKE2B df12a79a9886298fb3dab1a92d3eafc5a26ac45b049c61c34fbbe0505e36d6aec29bd80396e71684803ac27b7e06197edf4d27f6fa1542f504cbb50b654d6cb9 SHA512 6067a83b202748d743db91b61b6805f6800abb665304e4c34c598694f651a74bf8e3b9b355266621d01f0b34641b6ec7fb9f7ff073950993acfcddcdcae57b47
diff --git a/net-wireless/blueman/blueman-2.4.6.ebuild b/net-wireless/blueman/blueman-2.4.6.ebuild
new file mode 100644
index 000000000000..8d670e771845
--- /dev/null
+++ b/net-wireless/blueman/blueman-2.4.6.ebuild
@@ -0,0 +1,177 @@
+# Copyright 1999-2026 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=8
+
+DISTUTILS_EXT=1
+DISTUTILS_SINGLE_IMPL=1
+DISTUTILS_USE_PEP517=no
+PYTHON_COMPAT=( python3_{13..14} )
+
+inherit autotools distutils-r1 gnome2-utils linux-info systemd xdg-utils
+
+DESCRIPTION="Simple and intuitive GTK+ Bluetooth Manager"
+HOMEPAGE="https://github.com/blueman-project/blueman/"
+
+if [[ ${PV} == "9999" ]] ; then
+ inherit git-r3
+ EGIT_REPO_URI="https://github.com/blueman-project/blueman.git"
+else
+ SRC_URI="
+ https://github.com/blueman-project/blueman/releases/download/${PV/_/.}/${P/_/.}.tar.xz
+ "
+ S=${WORKDIR}/${P/_/.}
+ KEYWORDS="amd64 arm arm64 ~loong ppc ppc64 ~riscv x86"
+fi
+
+# icons are GPL-2
+# source files are mixed GPL-3+ and GPL-2+
+LICENSE="GPL-3+ GPL-2"
+SLOT="0"
+IUSE="network nls policykit pulseaudio selinux"
+
+DEPEND="
+ $(python_gen_cond_dep '
+ dev-python/pygobject:3[${PYTHON_USEDEP}]
+ ')
+ >=net-wireless/bluez-5:=
+"
+BDEPEND="
+ $(python_gen_cond_dep '
+ dev-python/cython[${PYTHON_USEDEP}]
+ test? (
+ dev-python/python-dbusmock[${PYTHON_USEDEP}]
+ media-libs/libpulse
+ >=net-misc/networkmanager-0.8[introspection]
+ )
+ ')
+ virtual/pkgconfig
+ nls? ( sys-devel/gettext )
+"
+RDEPEND="
+ ${DEPEND}
+ $(python_gen_cond_dep '
+ dev-python/pycairo[${PYTHON_USEDEP}]
+ ')
+ sys-apps/dbus
+ x11-libs/gtk+:3[introspection,X]
+ x11-libs/libnotify[introspection]
+ || (
+ x11-themes/adwaita-icon-theme
+ x11-themes/faenza-icon-theme
+ x11-themes/mate-icon-theme
+ )
+ network? (
+ net-firewall/iptables
+ || (
+ sys-apps/net-tools
+ sys-apps/iproute2
+ )
+ || (
+ net-dns/dnsmasq
+ net-misc/dhcp
+ >=net-misc/networkmanager-0.8[introspection]
+ )
+ )
+ policykit? (
+ sys-auth/polkit
+ )
+ pulseaudio? (
+ || (
+ media-video/pipewire[bluetooth]
+ media-sound/pulseaudio-daemon[bluetooth]
+ <media-sound/pulseaudio-15.99.1[bluetooth]
+ )
+ )
+ selinux? (
+ sec-policy/selinux-blueman
+ )
+"
+
+distutils_enable_tests unittest
+
+pkg_pretend() {
+ if use network; then
+ local CONFIG_CHECK="
+ ~BRIDGE
+ ~IP_NF_IPTABLES
+ ~IP_NF_NAT
+ ~IP_NF_TARGET_MASQUERADE
+ "
+ check_extra_config
+ fi
+}
+
+pkg_setup() {
+ python-single-r1_pkg_setup
+}
+
+src_prepare() {
+ # Run else fails on newer automake: https://bugs.gentoo.org/936065
+ eautoreconf
+ distutils-r1_src_prepare
+}
+
+python_configure() {
+ local myconf=(
+ --disable-runtime-deps-check
+ --disable-static
+ --with-systemdsystemunitdir="$(systemd_get_systemunitdir)"
+ --with-systemduserunitdir="$(systemd_get_userunitdir)"
+ --with-dhcp-config="/etc/dhcp/dhcpd.conf"
+ $(use_enable policykit polkit)
+ $(use_enable nls)
+ $(use_enable pulseaudio)
+ # thunar integration is a single data file with no extra deps
+ # so install it unconditionally
+ --enable-thunar-sendto
+ )
+ econf "${myconf[@]}"
+}
+
+python_compile() {
+ default
+}
+
+python_test() {
+ local -x PYTHONPATH=module/.libs
+
+ if [[ ! -f /dev/rfkill ]]; then
+ # Tests attempt to import these modules if present, but they
+ # require /dev/rfkill. Hide them to make the tests pass.
+ mv blueman/plugins/mechanism/RfKill.py{,~} || die
+ mv blueman/plugins/applet/KillSwitch.py{,~} || die
+ fi
+
+ local failed=
+ nonfatal eunittest || failed=1
+
+ if [[ ! -f /dev/rfkill ]]; then
+ mv blueman/plugins/mechanism/RfKill.py{~,} || die
+ mv blueman/plugins/applet/KillSwitch.py{~,} || die
+ fi
+
+ [[ ${failed} ]] && die "Tests failed with ${EPYTHON}"
+}
+
+python_install() {
+ default
+
+ if use policykit; then
+ # Allow users in plugdev group to modify connections
+ insinto /usr/share/polkit-1/rules.d
+ doins "${FILESDIR}/01-org.blueman.rules"
+ fi
+
+ find "${D}" -name '*.la' -delete || die
+}
+
+pkg_postinst() {
+ xdg_icon_cache_update
+ gnome2_schemas_update
+}
+
+pkg_postrm() {
+ xdg_icon_cache_update
+ gnome2_schemas_update
+}
diff --git a/net-wireless/blueman/blueman-9999.ebuild b/net-wireless/blueman/blueman-9999.ebuild
new file mode 100644
index 000000000000..c89205d411cd
--- /dev/null
+++ b/net-wireless/blueman/blueman-9999.ebuild
@@ -0,0 +1,180 @@
+# Copyright 1999-2026 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=8
+
+DISTUTILS_EXT=1
+DISTUTILS_SINGLE_IMPL=1
+DISTUTILS_USE_PEP517=no
+PYTHON_COMPAT=( python3_{13..14} )
+
+inherit autotools distutils-r1 gnome2-utils linux-info systemd xdg-utils
+
+DESCRIPTION="Simple and intuitive GTK+ Bluetooth Manager"
+HOMEPAGE="https://github.com/blueman-project/blueman/"
+
+if [[ ${PV} == "9999" ]] ; then
+ inherit git-r3
+ EGIT_REPO_URI="https://github.com/blueman-project/blueman.git"
+else
+ SRC_URI="
+ https://github.com/blueman-project/blueman/releases/download/${PV/_/.}/${P/_/.}.tar.xz
+ "
+ S=${WORKDIR}/${P/_/.}
+ KEYWORDS="~amd64 ~arm ~arm64 ~loong ~ppc ~ppc64 ~riscv ~x86"
+fi
+
+# icons are GPL-2
+# source files are mixed GPL-3+ and GPL-2+
+LICENSE="GPL-3+ GPL-2"
+SLOT="0"
+IUSE="network nls policykit pulseaudio selinux"
+
+DEPEND="
+ $(python_gen_cond_dep '
+ dev-python/pygobject:3[${PYTHON_USEDEP}]
+ ')
+ >=net-wireless/bluez-5:=
+"
+BDEPEND="
+ $(python_gen_cond_dep '
+ dev-python/cython[${PYTHON_USEDEP}]
+ test? (
+ dev-python/python-dbusmock[${PYTHON_USEDEP}]
+ media-libs/libpulse
+ >=net-misc/networkmanager-0.8[introspection]
+ )
+ ')
+ virtual/pkgconfig
+ nls? ( sys-devel/gettext )
+"
+RDEPEND="
+ ${DEPEND}
+ $(python_gen_cond_dep '
+ dev-python/pycairo[${PYTHON_USEDEP}]
+ ')
+ sys-apps/dbus
+ x11-libs/gtk+:3[introspection,X]
+ x11-libs/libnotify[introspection]
+ || (
+ x11-themes/adwaita-icon-theme
+ x11-themes/faenza-icon-theme
+ x11-themes/mate-icon-theme
+ )
+ network? (
+ net-firewall/iptables
+ || (
+ sys-apps/net-tools
+ sys-apps/iproute2
+ )
+ || (
+ net-dns/dnsmasq
+ net-misc/dhcp
+ >=net-misc/networkmanager-0.8[introspection]
+ )
+ )
+ policykit? (
+ sys-auth/polkit
+ )
+ pulseaudio? (
+ || (
+ media-video/pipewire[bluetooth]
+ media-sound/pulseaudio-daemon[bluetooth]
+ )
+ )
+ selinux? (
+ sec-policy/selinux-blueman
+ )
+"
+
+distutils_enable_tests unittest
+
+pkg_pretend() {
+ if use network; then
+ local CONFIG_CHECK="
+ ~BRIDGE
+ ~IP_NF_IPTABLES
+ ~IP_NF_NAT
+ ~IP_NF_TARGET_MASQUERADE
+ "
+ check_extra_config
+ fi
+}
+
+pkg_setup() {
+ python-single-r1_pkg_setup
+}
+
+src_prepare() {
+ if [[ ${PV} == 9999 ]]; then
+ eautoreconf
+ else
+ # remove this when upstream switches to automake with .pyc fix
+ eautomake
+ fi
+ distutils-r1_src_prepare
+}
+
+python_configure() {
+ local myconf=(
+ --disable-runtime-deps-check
+ --disable-static
+ --with-systemdsystemunitdir="$(systemd_get_systemunitdir)"
+ --with-systemduserunitdir="$(systemd_get_userunitdir)"
+ --with-dhcp-config="/etc/dhcp/dhcpd.conf"
+ $(use_enable policykit polkit)
+ $(use_enable nls)
+ $(use_enable pulseaudio)
+ # thunar integration is a single data file with no extra deps
+ # so install it unconditionally
+ --enable-thunar-sendto
+ )
+ econf "${myconf[@]}"
+}
+
+python_compile() {
+ default
+}
+
+python_test() {
+ local -x PYTHONPATH=module/.libs
+
+ if [[ ! -f /dev/rfkill ]]; then
+ # Tests attempt to import these modules if present, but they
+ # require /dev/rfkill. Hide them to make the tests pass.
+ mv blueman/plugins/mechanism/RfKill.py{,~} || die
+ mv blueman/plugins/applet/KillSwitch.py{,~} || die
+ fi
+
+ local failed=
+ nonfatal eunittest || failed=1
+
+ if [[ ! -f /dev/rfkill ]]; then
+ mv blueman/plugins/mechanism/RfKill.py{~,} || die
+ mv blueman/plugins/applet/KillSwitch.py{~,} || die
+ fi
+
+ [[ ${failed} ]] && die "Tests failed with ${EPYTHON}"
+}
+
+python_install() {
+ default
+
+ if use policykit; then
+ # Allow users in plugdev group to modify connections
+ insinto /usr/share/polkit-1/rules.d
+ doins "${FILESDIR}/01-org.blueman.rules"
+ fi
+
+ find "${D}" -name '*.la' -delete || die
+}
+
+pkg_postinst() {
+ xdg_icon_cache_update
+ gnome2_schemas_update
+}
+
+pkg_postrm() {
+ xdg_icon_cache_update
+ gnome2_schemas_update
+}
diff --git a/net-wireless/blueman/files/01-org.blueman.rules b/net-wireless/blueman/files/01-org.blueman.rules
new file mode 100644
index 000000000000..2f1a2bd36ee7
--- /dev/null
+++ b/net-wireless/blueman/files/01-org.blueman.rules
@@ -0,0 +1,11 @@
+// Let users in plugdev group modify network connections using blueman
+polkit.addRule(function(action, subject) {
+ if ((action.id == "org.blueman.network.setup" ||
+ action.id == "org.blueman.dhcp.client" ||
+ action.id == "org.blueman.rfkill.setstate" ||
+ action.id == "org.blueman.pppd.pppconnect") &&
+ subject.isInGroup("plugdev") && subject.active) {
+
+ return polkit.Result.YES;
+ }
+});
diff --git a/net-wireless/blueman/metadata.xml b/net-wireless/blueman/metadata.xml
new file mode 100644
index 000000000000..51152faeb5e2
--- /dev/null
+++ b/net-wireless/blueman/metadata.xml
@@ -0,0 +1,16 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE pkgmetadata SYSTEM "https://docs.baldeagleos.com/dtd/metadata.dtd">
+<pkgmetadata>
+ <maintainer type="person">
+ <email>mgorny@gentoo.org</email>
+ <name>Michał Górny</name>
+ </maintainer>
+ <use>
+ <flag name="network">Add functionality to setup (host) PAN connections using either <pkg>net-dns/dnsmasq</pkg> or <pkg>net-misc/dhcp</pkg>
+ </flag>
+ </use>
+ <upstream>
+ <remote-id type="cpe">cpe:/a:blueman_project:blueman</remote-id>
+ </upstream>
+ <origin>baldeagleos-repo</origin>
+</pkgmetadata>
diff --git a/net-wireless/bluetui/Manifest b/net-wireless/bluetui/Manifest
new file mode 100644
index 000000000000..f64365becbab
--- /dev/null
+++ b/net-wireless/bluetui/Manifest
@@ -0,0 +1,342 @@
+DIST aho-corasick-1.1.4.crate 184015 BLAKE2B 088766e505a828a221a9bca29cb1833ac3964a538cda62d12b723a263fe0e588406af0b710cf87ef67b0ccb9aa3bf69f42e0e5225ade47abe93c73fcaca69ec1 SHA512 c77e35191b00546f5e499fab154170cedd619599e7250f92db9fba0a41c833eb426f214e58b00c5c39f8757406b33492b3241cb8cb233ce384ad0683c3ee4b62
+DIST allocator-api2-0.2.21.crate 63622 BLAKE2B 983897fc977118f220dc4af7e801ac08eba77bfde2a25d756bad3e77f849418e74e7c67eaed68e2d719ca7fc6e1e9ce151dd7dbe8707dc43d4a6400294c8fc8e SHA512 1bb5711ed6041b0d7eae2ec784b8aa9d215db0f49cf79c692946eeb0db545d358cbcaa8156ae34e51d05287c08574f1da251ee574f2392949e4ed26d04770d03
+DIST anstream-0.6.21.crate 29516 BLAKE2B ddab9728a4824b1682a84339e2c5212904fcf878867c8ed7604ce045d4ba6bae0f129e73968e20d58a9b2e297ad1b6ddd5557907d3b6ae9253e3127ea901d40b SHA512 909059510b778f606df779d5f8ee69cf721072e81f933eb5f5fddaa4d1586a0040ba7456165d5db16c812dd654c2dda6b929ccb997310b507f1b79846ca1f402
+DIST anstyle-1.0.13.crate 17651 BLAKE2B 026d4163f4bc8d1677d0830dbe46fd335d18e50420d2d809a675609c1e020f7e3c5e69b8d0a7baf5f42fa2321b6230c619a93aaf8e02ceaef638f8006dbf479b SHA512 1a92c4bf6ff7262c0f5fe72ff66eaf11f0c84e84a06746767918903c0416ba5d33ac54ff9a2c6cde37e26bb2287675d3f0a8a7efa95eb013c9be388b8139661e
+DIST anstyle-parse-0.2.7.crate 21707 BLAKE2B 41d51d4c026e548a9428f5fd8dc85fce964e3f1cf709820dd53d216af3065a4ee069de8c5bcec5eae19b99172f60e89034a2ded6bc787f3ea4159d5d30de3984 SHA512 3e0920594dfa15f16dd308d0da81d784e6a5d6fd7a3b12cc1512fb625369ea7b4550df549e3be961906e2d3105f72ecb86b89dd6f5817c2c982929ea26d605fa
+DIST anstyle-query-1.1.4.crate 10192 BLAKE2B c5672d2982bef5702f5d592bea8b4336df3f24edad35656873accb4491c0b6f323189c6721a7f722e6aae31ea8c183a93e3d59a123dc1c150ad1c85640906e40 SHA512 b94c550b865d17c15b2ff1a41da4f7aaf3a5c0694b2188c7238cae8212d8390f759381a3ae5598c13396a728aed8bffd4e32fe06da51af0ba92c334124d26641
+DIST anstyle-query-1.1.5.crate 10264 BLAKE2B e1c1bad89ad4c09e48f9d7c417713953f7f468f10f7f61e351137be801b5986ab3d21406411b0b23c42af4a2b5881b85aa68dfc66d23cafca7dfcb88180104b7 SHA512 3b7b888df0b678bd4560981dd94a51a6af9a535cc1a869bb4577e832492bb6de718a3ac80ecf61f8857b3d0ed7b95e444e85bd00ef65a46c6a244d0b0eadd95d
+DIST anstyle-wincon-3.0.10.crate 12558 BLAKE2B eddfdfd0bf8ec9520319c3bc54d627be3ecc4d931181e629f5ae4f1352a1662476060a25639f390825405691ef22befbc6f1b51d79047690fadbc90993b9ff5d SHA512 bee4e8a76185a359e6f6c0cca11ca322a8ff6eb92a1659986bbb2287c5e198f3e9cf3e48c9d980b18fa012b5d52f97cd017770736be27e550cf61be553982c8c
+DIST anstyle-wincon-3.0.11.crate 12638 BLAKE2B 01f1ce85205ed3e573daca145ae420e9f7d78867fc036133be74bbcc9b83231ecbc681b57eb98bec622bcbaaf4bb293d05d3021a29b49a0a71b8ab89b0ae9dfd SHA512 09c3215dc6cef75d6282078e68c5dbd51580b6c8db79a77932d2e74a51d29cb0ef23c31b8a73a71896a45eb5dc5f94aee209bd8f6e5df4c675dabe3cd304a96b
+DIST anyhow-1.0.100.crate 54059 BLAKE2B 3089cd4bac1a3ede11c5849fabf12735392ba2910f5d5c1117cbbc9fe2491855745879690522988ac343e210783f8d885f13593b4d0f3a3816b9a8c35ef2eb7d SHA512 1f0c072aab9490d68db3783f078c6f8a4d96360908fc6ee3e971b02fb72b9dd5e689dd385f0e93388a87e0dfbd8cff0e14a280b40d55f87646f3c0e558e779ca
+DIST async-channel-2.5.0.crate 18624 BLAKE2B d835b923d9c99100e499d72d34515bbd041bfd087572ba681f0a61c9237f5d2af1d4abbeb9572ada694a3609aa19a14ba1160deb0d6411a542ee73cb6234c5fd SHA512 621e9540972a4a5d1b6cc0fb02a507cf66d704dab5411b60c44c2b65ab21c3f7f7bdf9c093e7498a71ada6573e429a4b426506c96c5fd9e3e297a76930ca2f83
+DIST atomic-0.6.1.crate 15243 BLAKE2B 68934373e2f7ec150a2d41ca1a3db23d01acc5caf43a55b72ac83dc03d5cad0a058c62369105db1901f60cd27b7a37ecaafd272d4904b802e0af61e00d25d316 SHA512 ece971998331bc4f552f7271e7a479555e8c0de2b5fd122b24c218743557c5bee05d49501313e64b5ce7dfc0221f8184b57ed449157812b11856452cfa8fbc19
+DIST autocfg-1.5.0.crate 18729 BLAKE2B 27580e39b366c6fca02c9db09997b6415c409f12068f1249184268bf96fd85ba659e25ec730f99e10caf452f96c486f3d7442bf09c4552b5f39519b21d6f88cc SHA512 f279856f234d39d369623576acf9546a1ca24d7fe449f36d4fb93ea75a7efaf2c4015b9616a69bbbed358c5e5882e16b045352f046aa4c049b3d13b1e8257b08
+DIST base64-0.22.1.crate 81597 BLAKE2B 6f216a560bd36e6e6b74e908344b457594cc768d9763070e269b56a14b150cbfc4b7f599d4c2a0a5f783638170ee132f0796fefb14fcac7fd73c58db0791007a SHA512 91cf2e4e7fc8815f9b8a86a7fa722a20eee3dc1dd57111b29e420de87ce7836bcdb1db01d3cafb9a977710ef63e7cc41b7772762323e68e0e832156858aace20
+DIST bit-set-0.5.3.crate 14470 BLAKE2B f6525500a494236103df2b27e964bae0b2caf718156879f972b9972fa509794bcc663c2130e3d872ecadb7ead0982b415dfa4468ef12523ee248fb1bbec2559e SHA512 c5ce7ef71559706d996505e138ce95d9f008ac3375928012a36339bfec48986ad935b384e2d21fa0d505d4cf98bd3e93be15955ecd9607d253b8a276351334c6
+DIST bit-vec-0.6.3.crate 19927 BLAKE2B f5bd3bb9c87fdf3b206739b74df20cab50a1a45af3a58b2642a5a061c26207884be58ef8369a3cd06dfd3615bff0ce15915fdd4b6b6f03facc4a0f86c0b7e910 SHA512 b4b4a82c80d0ff13527ae4fff449ac9c1c7bc519c013af6ea3428348e0e5b9306b725c0a13a42d7d9dcf0f895a9eee0c63695a2503eb7fd2200083c9ea3a9aa8
+DIST bitflags-1.3.2.crate 23021 BLAKE2B eb990bb27b2bdeb66fd7212ce582cb36e1c616debbac85df642d0c82b25439e6bf9b1e811fac76b59e58ea3c1bbea6170d03a61e8f9a395e4334a0e2e2987eda SHA512 3c698f757b5cc62f815f9a1cce365c3d2dd88e4db71f331dff8bba86c2865f755b81cb4c9bfc59bd86b7643b0943f9e09a7c4f8ad75eb2ab0e714803d0129f62
+DIST bitflags-2.10.0.crate 48427 BLAKE2B 238a6da813eb2c5541ad470b97b9cf6ad8004095d2a8e865b88eb2301290b7bda22e5b062ba66a04ff0f3108a84d4799af0786b76f785fb5782bd847876549c9 SHA512 6fcdaf250ca6e74b65ecba755d62c3e78f6c02ce1a9562a3b17bb2d6068a0df480ad9c838ce427dc2d2869a9dd1f86f2fb1dc1e50a114def77fd24154b2b86b0
+DIST block-buffer-0.10.4.crate 10538 BLAKE2B d819c4f9c4be85868e8b105fb7e479d2e58d3ed85c3339bd677a3e111f85cb1ff624a54d7802ab79a6e1d9221115f66388568340480fe83eae1cb448f19f5b11 SHA512 b7d436d8e627e16e6ddc300ee8f706a6cef28ff6f09eff848eedee46f84bdcd03601303c92ab8996042e55922866a59259948177c0a4496eed723523e77f6fdb
+DIST bluer-0.17.4.crate 168365 BLAKE2B 04679ac8b7da267e2fe4de97ec9eaa3747fe52fb58c2e927fd196893c36f5586a3053395871d3b1f74671b90f9db4b3323cd09c48e6f1504affc49b674192191 SHA512 fa04072598479d9402d45b6995447aa7a655333989e751c658e866c996623ffe75d8120ae1ddaaef9f74ddac35b8ef7cd1b0e6a2281148cdb84fbc20c9b8d808
+DIST bluetui-0.7.2.tar.gz 49616 BLAKE2B 7dc73dc8f4cfff6d9e1d5274b88816e588ee5fa864ade74e8d673516fe1b6ac9ceb88f2a99d98f7febd1c9dc2391e93065c428489b300c2bc8aa4fdfaacebf89 SHA512 7d0c0be33280bafab15e4826d7555cac477a80cef04be8df1528c30ad70777608f135da53bbaf4f1a80f125bede39eeb30c073ea551b5b8dd7379d06cfc80de5
+DIST bluetui-0.8.0.tar.gz 52543 BLAKE2B 830a8dfb9e330bccaceb0f760ae15bca8fd33da523d0c241168c4bfbd504fd790d64507c48895e3b4651030ee4e1076085c708d712f3923475aafc08b480eed1 SHA512 f8fba48b2cfd8b696b7864c3298453f7d0f712787a451ea8ba3a6f4532ed2956f608c4b7a13eac7e10191b4eb46074d9cfe0803299efcdf8f54f84a120cbac62
+DIST bluetui-0.8.1.tar.gz 53962 BLAKE2B efc49b079fbeea516d26f57e4d44eedabf17d8013dd1313fc48e554ee7b7f3f37300919564af22feb0b59112efde6a0c74ef6bd9728fcedf6cb24565147019c1 SHA512 d131fba89e65a1bbfbb67de3e3a0d0db262bf7cb9dc795de1a63af2cf47b2c8bd73f5da4604059991796442dcbfd1ea5e7063f5988b53bd03b8b2fd16d5756ad
+DIST bumpalo-3.19.0.crate 96414 BLAKE2B f8c155f77cf977d72749f3cb943a6b171dfc4f67135da345a935ba603f2b52b5feafbba908b31feff391128196c7b0088f6f62d5b37bc4d2277fc0fb9c560b54 SHA512 58db27a643c55adae07061100e3604dad0056bacd42ce1142bcc34249645e9313e886c3174a755593544684fcc632f134f9c6066752ac695254fb9ecd40878cf
+DIST bumpalo-3.19.1.crate 96477 BLAKE2B 8716eecc9918c69dd07d6840f9b55114e290de053fddd11c187e11fb396d8a8825422378ec7a2e131674546d158b909a1a4c3e29d52cf3ed001658333c153807 SHA512 105a84bbf8c2b8fc130055713eab7b598c67d34ac01fe95b4c9f10fe956130870c0d12ac237c5dad3a44991a1b8611e5028e749024b6497d6b2f8a2702a4f655
+DIST bytemuck-1.24.0.crate 53243 BLAKE2B 472563c13565b62378576597a98c8050117940842846f2fb711fe4fc251e3bab19ed8f0d7e8215c880f06638684f1b8090afee598c730dacfe536f53287dcd69 SHA512 4e3b8071b7dc3b88104786f007f2fb8930cf252fc6cc04ff0c1a13873cd272971edcedcc9231a2a44bbdeca9c831f4c732e6917581420f209003b47761a8ced8
+DIST bytes-1.10.1.crate 76779 BLAKE2B 96573ff7852cd2d4f37a68cb4d76bc43d2018dc25b7b7e2164df022de4e1974f22d4d3ea7cbfb280667650cdb5063d600f4f76cbdca43dae508f29ced449b0f7 SHA512 03429f01927b94ba6c958c46b2e5bf92a23b39ce9385689e21accd34a5d3be01fd0f665f4bbffb1f7c5bdf1edfb1bf11d5ccad00eff0f9388be39fe2f753d296
+DIST bytes-1.11.0.crate 78391 BLAKE2B 9efcb5e5b93097d7405543fecb8962f5794c91b5e7186f4582e4d6886075a5bb5d3502c09ea0a3fc72c1381862f8700312a27607ff3534e7b476bac330924a4b SHA512 0f9315b9e6bc54b7339314c0ca2e01af61b4e59548f9e72ed54990e281266f614ec78917529779fb33cc2037a6ecc9595d531674a23eb3884e72759907b4a883
+DIST cassowary-0.3.0.crate 22876 BLAKE2B 7e74a08e02050548ade7dd1ebba7ce4e4360d258ea6acf126453889dbf16df433bed7b68789736881c957f4c09eead1f763a0c02f2474157b1650a1e77e6eca9 SHA512 0838c0b79ed31f0c514fe4ac82633976e34b0d6cb08616313cda0e00623514fc6498c6c308cfef54ea029f1fdbaafe2991ca8ac3c38437a113ac62e37f9397f8
+DIST castaway-0.2.4.crate 12546 BLAKE2B 22f5199928387778df87086aa786bb25b79e77040d7408b601a2c5d07968ea79c018d3c69b3dbb6a785edbecab000621d5921b69d628ab6b3a9ce43c79615d51 SHA512 15b88016bbeae50146401607549b077b329c9bbae25768536360a964bd5c3b598feedce0365ca4b2662c7b94081062fc469f6a1049fc38187d79daac77b20481
+DIST cc-1.2.53.crate 93555 BLAKE2B 1d76b368a2aa6b7e07db3a1c1050ecb9932f698d6870e436015649adc1744155ebfe0a25d1c5803bca024db5b39b9c6092779c9937a8fc89c0da11d6ecfa0a2f SHA512 a1759e2f5f43198f6084752600fed136f360d5722cd11466f5653f401eaf33371f31d0583112c122d58c81c4638afb856f23e1662f38ed97e98bc426cc87da0b
+DIST cfg-if-1.0.4.crate 9360 BLAKE2B beadbfb273ee97cbb6e3740891fbace57511399ad203459b66b397587d794677a9515cde4e9ec4320c3795518bf1551d72b9a889f8ac4b225168f493288b7c19 SHA512 176e04df7ba783b7143bb84397b777f5c5a1305c08a5c3a218d4a66830620be89ed68992ba27686165bcd3fb2f34b2daf80b2a1d4b481ecc267c988e84d28e9d
+DIST cfg_aliases-0.2.1.crate 6355 BLAKE2B a758d9c88527f0e6e7cfd6d4c83eda1bcb4d6e2438189fe08e8ecbcaa78d56afc5a4873f3b82bf7da96afd690b44cdf1e44466b6da0f37c358b340481017103e SHA512 74969d12d5d24002a29e08d52e30fbce014dd481a7c35ee0162e69333c5f2d7755f3b02439b31522e12444cf1ac8e65880ce33fe6778dac03757e362cbf8a72c
+DIST clap-4.5.51.crate 62030 BLAKE2B d5f917b94fb1b565e7f8c546f10fa9f7703a576ad80dacc49cdaefe56cef2727167fe6bc1114db08bb7a82cbc9e3517a9996907558947b758b5870dd63de6b0a SHA512 8bd93b9b466d3508b376d6c8c0ae56bfab0d975b8ef8398861ff6cfbd133681c2bec6b224446f54cbbbd74e37c9079c14f90d798193726d59ce291f49a11d071
+DIST clap-4.5.54.crate 62028 BLAKE2B eb0a5188ee58f582013cd9c46c92831ae8c8e21f0ada88ec4201a48d47cf2775df2c581c49e6119ca9ce97d2329d72aa1535165063c58dccda6bad9a83fbc85e SHA512 a97624ba82ae13a9f112f6c3d23a8eb4e6ab21304340553a2d34ef13e472f67685d68ebe2ff48e8b25d197bb7c3eeae0a3adfa69f2adc1ab4e6def3edf86d523
+DIST clap_builder-4.5.51.crate 171077 BLAKE2B 81acdf463aea8672c9a54339bc56d802f1cd6a64bbe85bb1b460423ce7d617fbc6ce5dc0aa890d53eb771e317a2d32f057e98fc0572a9df91a051c103b42caec SHA512 7adbaae4e4a01e0aa65908b13a1ccc072ba3711c56b20602b726e2e81c6923803dfa47607e61b662efd6dec6d93a070d2aed4664252eab97d5c80bb6550f9208
+DIST clap_builder-4.5.54.crate 170854 BLAKE2B 68ccc19d273270913e282c71bab509e59d46038dfa38db68b99fb02c3e09752e04c2e98af279022fdbb19b29d621939a35049b460a91432bc10a37af2fe3c18f SHA512 6b567a2fea4e85b28d054b0432f527aadd735f730604534ab632ae7c70578bb46635d409d5cc28081d32bb6ca02ecdd17063115ad02996eff8006099d2dd838c
+DIST clap_derive-4.5.49.crate 33559 BLAKE2B 453aa3774705de9c8cd77a25931deecc085efc85f9e63dea413c9989e445cd79886bd05c8f871f0203ee3003fe48805151fc42e50c66a1e05e6f6f01c5fc5e48 SHA512 61d2b9597bb521cfd31a2c77af687832dd5e48f8b80dacce3079f165d6629d58f000c18a956fe948b1ad99776d75caf4e6b9004f63d861b8ab3b68b5260376dc
+DIST clap_lex-0.7.6.crate 13466 BLAKE2B 723f306a9ae6c1fedd6b85fade039cc2a1dba51aa4412972025e0ff1aa8f15742e090dec61df3ac17ea9aae426e96049a673f5b944cb164b649ec1809477ab88 SHA512 d248b65234f201b2cb867562ca3d8299e79d348874547639b31883c6eac8416d3d6394e5b0047ad74f1a2c37e7721375c76bcaed1e60d13c3f1937b20ad9c54e
+DIST clap_lex-0.7.7.crate 13474 BLAKE2B 609eeecb32aef3e1b3ee773af7f554867e8a06d4c5d1d2f42b0137c65825fa27d50a4438b6186bdfe790ad19abda6f32880e679361d9647b0dc197d3d3869392 SHA512 08dd03c26213527f3900a47b011b17de36c3cb50405adc0ea8ea6d06000d8d8b7fde1ea84bf9c426e6e8dfa8cb6b4396bf4291a9058815b93f546c069ac4ff66
+DIST colorchoice-1.0.4.crate 8196 BLAKE2B be97be7d875cdd09cdf3f2594f0e7ed80601de62bc907ff70053317b9d48e889b3fd2fa0da5e6a681fcf80b24be5e16089289e3dbdb68255b486c18c517c55f1 SHA512 0bc6e55c3909e7bcfdf198d5d68ed8b588b82a72f53aaa41efeecf9dae2d31e6c172a7ba922e000fd7cdf6373c13371a98e7da08e6988fdcfbf20782dda8e4e5
+DIST compact_str-0.8.1.crate 71371 BLAKE2B de7fd2b980a4b34b323010fe559a94e8b1aafa30456debc039aefcdaaefa48439353139a071e440b3bb136df166aabe096774bf3f6a7b91669cd5d80e4a24408 SHA512 146e2a6be6cf948981d51f9034f0aaa1a1563debef58ca7fd3110093b0f4333a9a6a3c5dc7cde25b936d8dfba72254bfacb7814f86167043431ded9c5797417a
+DIST compact_str-0.9.0.crate 72135 BLAKE2B 11b283ad67c3f70f0d311393f82e24751475a884b78c7055ea9a4708c8b2837a0fd6f1553436ead2f0994828235d6462e8d3b832f1f7fe1b5be5204ea2099321 SHA512 b5de4798ed088d4bf15d39bd57bd390f1cae946176b7a5d3576fc56493775eeed832d851c552d847c2f66717e15052b39ddebe6ca5ae68664dd759a226f5fbcf
+DIST concurrent-queue-2.5.0.crate 22654 BLAKE2B b490e76804e45d6a7af6bb4ec074fb370d9ec7cd67c7ecfb55d5ed53b9b437c174e678add915303559e902ac81c8751dccb2c5ef0543d5961713372fd2b08d3c SHA512 235704f9161dfac60d2a6d2cf96425e39c097dcde2f005187c1f044704eec66d8303d59352cd414a81a3ed0eed60421054b0070a9b8f69065a79a2519e913e5a
+DIST convert_case-0.10.0.crate 24083 BLAKE2B 62d541eb28d7ee69664a4344d794e19adf27ab770c39a536cc490d6c91f3d6d522cb788bfe2cf694ecb02e1c8059f4df321ec2b52e8d722df02866e30f11b758 SHA512 f96a54fed1a158c007cf32d68e0ebdb94482c36e53cb5ac0af0ede5970094f2eeae76f161d56a7fd9766d0ada199c65d850d50dd2edd8db661cbfbf80903b9b4
+DIST convert_case-0.7.1.crate 23816 BLAKE2B d2e0328f32b0a928e8dff24a3b6ec98d7675c0a7980071cdcc40ac7502448e50f34c6a4d5978cf15b1ab942c8b3bdf8b15e7ac9265f6d8ffe74979c8f6e5ffbb SHA512 1ab8fcda989f6f6c660be5f450b3bad594da4578f5aa2f067ebc3a132117dedb50d993f97ea11e3d6b31e6aff2dee0077d6f02782b5ce3e1efca7c1c96d420e9
+DIST coolor-1.1.0.crate 137173 BLAKE2B 99f31ce8603bcd971f6807d7a8d99a8c11c5ddee5917d0324d6920cbfedd1df4f60e14ab6cbf748dae7fac5a01f5402c45496d13f41f5850a3bd35f506304ce6 SHA512 0e8a080b207c8f3ea4c9410ff5050aa759895aba56bf36afd9ae4edaeb967aaf2f8bb0423d39e84f10dc77251b0282259bcbbdce4d9383d9f2957d6eb288cf0d
+DIST cpufeatures-0.2.17.crate 13466 BLAKE2B c6392b635542a6fe29958fabe7ce725354a31e24f6f144718553218247881013f56659d2efc671d47394294373db2d4ff8f45c7cb520ac22f2ee5c462858a1dc SHA512 9ae64656a21cfdd0528d87ba95f6213860bf72ccdf866019e65ed6662633e73490f92c42c80125559b3dbb7822090b5faa8ea564c562e04041232809ec2f58a2
+DIST crossbeam-utils-0.8.21.crate 42691 BLAKE2B cd9015c41f532eb3c90101603f32d383f01e6880718b727d6d1fe46872ae276cda685e1b548cf77dd22bb1a05f0d4c4982332c2bde90e1743dbd7f51919022a7 SHA512 6f4aa7ca10c20da291c4714b56ceb1fab1c06b03b2f4e28e474e9aeb95ab6615a25462dc7819713652c3b5f6a06fa0f24ebc92c533fcf35dfcf2655857d975f8
+DIST crossterm-0.28.1.crate 132275 BLAKE2B 30a5bf5b48a4bddbfb53726b675adfdf6d64cc387e027a69d6ab721f5ebe574abed3a862504f0db723a733662fbf0ed13163730a7ab49ac9c7fc05681a3545dd SHA512 0d53e328eb606cabc3e309cc6193b34a14c8746081a7b2c9645c1c03d66dbcda99656d629c0dcfcd43bada7a863df3e83fded6b642b2474035165ed7b16f7931
+DIST crossterm-0.29.0.crate 136635 BLAKE2B 1a2e26ed0b04d4c712fcdbdda0c57eda292068fac60bbf65710de8b4ad9f0a59237bbdb010185cea65e913cd49b356f0072f75274b363b0b05d06aba640a61c6 SHA512 7dfac3f43b8a78573660efa2f87907ca00cead1fddab1edc9333277d8a2e83f50268859d0be979ae50106893047166c65aeee78fdf5fa941261698b1b66488d0
+DIST crossterm_winapi-0.9.1.crate 16027 BLAKE2B ea63abf751aeab203f326e77260cfbd1de286be26acf714a083ae1262b0cc2a35b5cb6d0bd54f45b33c1942eb22f916141c5870aab34149fdb30faccf4d4642e SHA512 48eee242f477f43b69c00e3a5d4d255de2ce1774f6e73d869c5472b35d85af0b63f3a607097da8ace437b1e52a524ded4106767b83d4ec53c30c2e37ac4b46a7
+DIST crypto-common-0.1.6.crate 8760 BLAKE2B f2422bfb89c15d47a8f91c8f6695e05eb56990a922e3cdf3d426044736f9932324c0d899a151a6df4d6683e6a6b21659c657d3988734014c02cd854bb4b924e7 SHA512 471dbc43f517089d2cfe0868e29510c6ca579875b3bb5d013c70796db969b609b6c4bb35c9a07b9a2917012dc5708b717d48e317a20038adbe7e7039bf3ada6f
+DIST crypto-common-0.1.7.crate 9619 BLAKE2B b9a31ed6f3f06e0709e7c5a86a146018c9ef67e366f27c1d4fe07461d97810951eec60e92ec1531e365bfb9ab1b4cfbdd86b6cefd8b06ef2aa170c38f3c9cae0 SHA512 dcf3a6fc81f2b6528696dc762427fb198faa9b5effe1ee9fbda795da08b0560cfd6c286b55f1360864e95284bd9a52edabcf39fa9bcce71ff0621dbfef538c82
+DIST csscolorparser-0.6.2.crate 16859 BLAKE2B 54ed61cc815eb8b46ee0d8f708a1fbc59cb688a70d1ffa5c0b934e5c422dcefa1349ec4af8dcbe2574847cb1d9f9b7c51d7b8e49334baaf2a0f4630687ad9b89 SHA512 4debf9354da3be93da9dbf497ea7a92f367d84ef07f6eae893e06c818e02914846c34099327a1426f9268d38510d5e254eb02952e312c38ce6d30cf859571d95
+DIST custom_debug-0.6.2.crate 3676 BLAKE2B dee7c086656bfd66b3d123c8f592098fe0a54b02286d8b49e0bf0f1593d8fc3bf0fb73f7b38a783447a9ffccb994cff733076157b79e04e014a4b48b99af8f0e SHA512 c4530657bbacac82388afa67f165cf46854eba3a1253553d272c82779ad798826dbf51c4d8e898f095c5430c4e9f853aefff4ac0503a6a96309185e40f03899a
+DIST custom_debug_derive-0.6.2.crate 4804 BLAKE2B 133e96ca73078f581d1d29992e65af1c0e368c532587f2e89aea2cd2cfe41a53eaa441b79a046ca3a9a5ca575c76120b97b569eec86b51d0b460635b22faa66c SHA512 3aea8af51649d3d4366943283c79f3a11c288ee295967178bca276293745ba693e3f625593ec41d8db56715f48e2efa47a5fd4683f07d8437c45df843f19cac3
+DIST darling-0.20.11.crate 37614 BLAKE2B 9bec875e60dd2971ad97a3098ec6060d16ddae7b4f85c0daa1326ab2411516c2da2eff283fcdfd091087402643d1a8db5db151c7792b97f75ef9722ef8219eff SHA512 62532fb9ff5f63592ac61d55a3f899ab90bddd380212637f380ae49e4037c3a3058055f88a5b5fe9c707c2884dc1333756364ba7acff74b0184050d9a063d596
+DIST darling-0.23.0.crate 43298 BLAKE2B a207ed640665664402ee07eda679af83e498c3de79a9e41c3fe1fec4b28071ba52acdb1f790d46b6c6c1744da96991c14f96002cf149e080a4982d5a74280b9e SHA512 6257756befa2e6a8b17ee21d64e8430071bfd1e8f72c680f67b3c15934e726ec24e30da37fcb5ea4f4b3d925f81cf4ea22d6c85788f101090b32d95f08bdb2e5
+DIST darling_core-0.20.11.crate 68006 BLAKE2B 7a112380a91d9e8bb5ab84ac50ee1e21e25aaee4757cd976e82fca912eb17941799f3367250af10ea36182c26ab4289d51bd003f6aa7fe686587c696f4e87910 SHA512 aa2a8ca52bf3513711ed97fda6825d9139e0bcc818d4bac7023455a96c035e7cd676d6e3ed9bf594a6725353923de7c2e8474de3081f6d35f0c5dd507b2ca1d2
+DIST darling_core-0.23.0.crate 74564 BLAKE2B cb5d45b08fa8927d91f113a37a8eb77f632713e3feaa629d37a6a0fd20112a202bb8ad574a096f0ba7b3b870e7a9982c86641e1cb4f9e33fcee59a65524b5406 SHA512 52ac3dac977b7f1cbdc3c0ee545356495216af6d8a4f179cbb51c8bc80253cf028bd9b624b6f42d6354d913e7fc5ea980234aa2ccf383c8779ca70fde72591a9
+DIST darling_macro-0.20.11.crate 2532 BLAKE2B 18b7a038f1a3aa245f1089f5608d859982eb82f76c9085e96f21f42ba83a65a076d5810842a4fd952dd4ee65392fd5d4e478f067de31ffcbffa34db2ce933d64 SHA512 4884d05a87ba1638b7cdc0a3ee2718c38aa255aa19547388aa834abe95159a72128817494f4184dfd1aa811f1eda385ed4d4f3e65fc8735effa01769fbbacccd
+DIST darling_macro-0.23.0.crate 2480 BLAKE2B e81f6bb801e5fabf71fbaf966735e5388023f75e12b8f9bd32e2cd49608ce05625849ecea54db3d682a9d091f8f0348dd60777c316c91af5186aeb0b97e4cf1b SHA512 f6565876c9846b1295be23eda6decbba817c64c3e2ba56fb0009c2acb68d542481dbb033b0e753dfb1eb967f24f87b781869c8bd5018a7789066229a4919c8c3
+DIST dbus-0.9.10.crate 106248 BLAKE2B 7824b53f2621bef9f041ffa57fe28402ab47c34e24c47662362e3ec54e6e6c6f0442cf25b8f31522716a5f542718e96e14a1e86b8dc88a5140c565f05b8fea42 SHA512 1f76ccf1140f612e79cb07ca878fedb263096ff9e07364bbb0b8a9dbf30e465e7e6896d4f863a030d262055cf2522b42556d201c945cb0c63e761aeecc824dde
+DIST dbus-0.9.9.crate 106151 BLAKE2B 213b47aac901b34f5c5dd6ada695e75460d29f999c67b8d8a5c03f4d92335b3f930efef49ba379b61b3ccd7ac882867f64858d2379ea4f9c3a5996f41fefa14a SHA512 86292e2843fbbdd34b73c1b386f347096520b18a33c13d201502aa2a98dd1587f5f145826a91840e9cbe65a53663a21f0fa19e1efee56b31c32380b93189d021
+DIST dbus-crossroads-0.5.2.crate 44664 BLAKE2B 3f3e330dc7c93acc0566c20b44dcda01c36cc507cc7907fb1f730448e1648546fc3ce31fcc59283bf6b8b375cdcb49ae0f248df02e01f7430c590e8eca9c54f7 SHA512 987b80358831ff77392b622a5a86577e3e156bb793810185c432eb345ab99f98ef97ba8e483b9a1443307f3fba12d8d20ed8b570f55c6f1a5cbb511febb1cfd6
+DIST dbus-crossroads-0.5.3.crate 45418 BLAKE2B c7e770700fdaf5ae6fcff8536867f07732454707dc867e7f39fe98231bdb3ea91cc85f7628b1ff74b219bb21e03056de4e0beac936cda4e182cf01598e8f320f SHA512 4f28afdf06f59bd69260501f98a822fe396446994d3804ee4eef08655535ebc85a17d5c318cd067dc079aa80f1c081b7be2604bb39240a73be2f1a0af37bd969
+DIST dbus-tokio-0.7.6.crate 17545 BLAKE2B 67b874844d2120824101845d0022b4f75c1318658db52a1491bfccb462f476be7022bf3eb2c3fec1639eedb3ac0caf3c0468f034ab981d4c87f56cecc88f8709 SHA512 4c88cd8e88bcb86c519009150c2256a3b5cb129f75b762104536943201d387cde154ae26b75193f8156dcf85b745973a929c5b87ff70835e983995bb586cfec6
+DIST deltae-0.3.2.crate 1918626 BLAKE2B cf9ea441e735b4d480ff2be16dbd120520e8c6d8fb62aef5e2593f8e4384a17582c61978f57a70b9452e5774e00e4a0189c6c7c399016766512610a3d50915fc SHA512 d48d5afe625168ca87af8a759b7245e0e324ab78b57714d55ae19363d9ba74d7eb7a6c641fe2a3af5567ad0b47be8aeaf2ddf48080be355561a2e9a03e1076ba
+DIST deranged-0.5.5.crate 24438 BLAKE2B e0e825fdae479fbfb057fa084882eb58836490b5158205d55b4adb593882fe70f10f9b1b6c2ebd3ab6a61673dbb3a56e4f5af32b154c645fff3b53a814e5e648 SHA512 c19b716727b904f1c3dcf4e0b5489ca3a7540925f2c633f827ce6fff7a2649bc22835b433fc06376dfd0fed48b232f70aa23b24fd0e834692f96f1d6a319f266
+DIST derive_more-2.0.1.crate 70127 BLAKE2B cf20f53528e07ea53a8ad4e0cd9698eb44dd95a711ae5a969322518e5b545d4355d1ef396584bac07e73805cb44443a737a3f21e279654faab79b29e6d19093f SHA512 eb80e75fa43bda291b1437dc4df48d39570c3d9f94c758be5560bddc29170ceac6d9a2b51bf414729b8b7331d60998caf930b905951156aee0d07a5b62eb8028
+DIST derive_more-2.1.1.crate 88632 BLAKE2B c875dd4b0718ab1ee2e6faa74e1e1206b972f90dc0541dddd97dbcb6e3d2a7489ec55a7d4d6c27371a3d308e0e58d135ad5d0bb050777b5b60d75466a3a9e626 SHA512 cb4de4ead185ad40c6e9e0fe316f16ada2070d5ebc336dcb73dfd8def87605d8ef9beb454c9202096aa4da8da0c32307fd02054f290722b561d6fff83bb91dff
+DIST derive_more-impl-2.0.1.crate 78233 BLAKE2B 84d195fb78479ecde38abfb5311fb220835f4150a301ed01c0aae6058ac00f04ef5a9daf122ddeb180b18bd0eb714fd24a5ba72cf9100896a7bcc1787532ed01 SHA512 e776a931e98b1cd37a8410f6376831c7e3c5704deb57b8c21aa6ff6546b9764c32e705f9055b14cff6b0c802f19ddc7254c14b60082acc176f33ec33f781fdc4
+DIST derive_more-impl-2.1.1.crate 99094 BLAKE2B 9fe9720e2cc9b66e849b8598e28d949bdf5422c34945227ca12c2626f80c564ff78edc59ab57863c18c11ef558c4b3e5629bbe037c4fcc0ba323679d04d26880 SHA512 07a6d6c5be2968ee0bc6847ba5bb4809a80a769743868068a71d72fc376516724df5855edb6ebc2ef569ac8f79bf632f34ca30640fa54f030d58ce301de44b89
+DIST digest-0.10.7.crate 19557 BLAKE2B 61e69d78cb8d6850ae26ad7ff2d52dd6dce820d8c621230def11cc0e8aa6d883a6e1b25340fb45748db52a8ccf3c8d36a8aa0c8cdf4d4eeb4e3f870d86abe09a SHA512 0dd8c012468ab9011b89413ea4d3647d95b1f683b020a0e6274c95ed5148638b56fef19cd9044c837ad53715b582b88eed277fe96e917c27c5d7abdbf7c3794c
+DIST dirs-6.0.0.crate 14190 BLAKE2B e214cf0c4669fa149d1e3eda1f6ba5b10a4a4b7d13a9050e63c13a4b605aae5d545bb711fb659312dabad26028f190853764acf74c1f6f31014e57c0a53a2281 SHA512 f29f0f932aa627bada67db5bd9d2661b5fb3b18d07030f5d88da28de7049eb872a2f35756cf29c094aacbc2429a3a333b54fb94d70e470288d3ca091cf6d4aa8
+DIST dirs-sys-0.5.0.crate 10157 BLAKE2B 0808bd5c7bfaceef00d62476ff459a8f3ab19fdd4d3a860b04698e51c390285ab8f01690fdec7faf01ccee5734b28c44e50a4358f30de1193a0d54ae5c6622c3 SHA512 c2ca362ad04e92c929e2cea4db359de689e512b7c76246c408f40d10f1d47c5dbbd49238e67edc0a251bd642ee292cae88992e5755035c632baec36cd77c10b2
+DIST displaydoc-0.2.5.crate 24219 BLAKE2B ba3396c93d27a99a92ff4a0f01a8d192b419bad25e48d9427b76260ebf2f9982291d77f2eb24d239c0b1fbb097e866a20bc46dc1879fdfc6637ea49928444a92 SHA512 5ca35fa59f263162389c1180331e9df607d9374bcb056cb04bc46c98e4d87277162ddb2335ffa8a8c5f69218abc3eabccdcaa71c21b8dd9081cc4146f266b948
+DIST document-features-0.2.12.crate 14739 BLAKE2B 75d279017eae0877aaecb3dd953ea9a19083f5affe9215e623a9235ca97b156484b1bef8e682b5e81859e914841c951be035a24ffe0afca419ef2721949d1411 SHA512 2991ae0f22656cde0aba8d8d76745a0316febe1d5ffa31e9d57ef5800fdbd10d7949d34b12024981610c7ff983c92f97f0fe432f8a75ff1b7da5e3531f01e677
+DIST either-1.15.0.crate 20114 BLAKE2B 2f87cb6408b1e1a15ea19d930cfca3948d867d268c8ff18cbaf39dcb7f7fdc628811575ec87a7728940dfb2c26775995a3165ab9c17dd42880d56569b22c6f88 SHA512 d70c34d903e8e5088fd065a6da6673eadb569a20af183fa9bd6418940b37c8c2a777c44dbdab1b9960890cba5cb7464b805667ac42f4e05499ddcd4277d24e3f
+DIST equivalent-1.0.2.crate 7419 BLAKE2B 7ce4fb7b911961cd4ccfb48323eea4952110a069789c6bd177a63391c270df861afadd00c07db7b22768f0864f320e429e0200c433284f528336e2f81d071eff SHA512 8e0e2dc070794a85b276e93f9e4a65d3bbb8587b33fda211c34479a0b88504c913d8bef9e84d7996254aeabe1efe4ff1ef6259ff4fe3f9ccb90dd90070b3e4d4
+DIST errno-0.3.14.crate 12002 BLAKE2B 57fd842a717086ffdcfa5102a8c52bf8210672820366d78aadb6f159055917477e6771e9fbda88787278bf3a116bc7253dcb705b601e54038a93a1820c3c287a SHA512 1de95c9806323d63e7cc95111e67b3ba1ee4b9d47b70cec33485194574d6b584d22ff877dfbc244317822721291d537d9509ae5e46f1b45169cb478a78322366
+DIST euclid-0.22.11.crate 79261 BLAKE2B 4a8fb6c372b77eb871235b32ee2e6ec0c481efe6f2b84970078fab3a0260f8da0f5d12128605f2a97beb8b2cc1af0a743fedf0380e3d534131e4c730d9097483 SHA512 864e69a769e218a989bb83a5f4846a4b882d94eeb35cde24cc7ac715c8977c9d325ed070de00c32a564ee75246a860d47da6973e23e79d744c1520011d6e94d4
+DIST event-listener-5.4.1.crate 43782 BLAKE2B b43523d0166d1e89f4957d718a54af9c31a52ca860bc5cf645e093670e5d0e4bdbc5f8f57de9eabd8b8c5b54df4090bea68adc8bfde8b9d23203b737580e4fce SHA512 99677a81a7abc04d6386db78fbda40ce5a9e4b628d0a1b171150b5be12e336fad04f2f8ac94e62d732dc90b0c65279bf28904e77f19c5cb6f0cad6298d97c394
+DIST event-listener-strategy-0.5.4.crate 16179 BLAKE2B b516f4b14bace1dcc9e7e6ad3c7b8ed1855530d0aecd1ed480b4392bc5e414a92634ca91b73e521e0344e264da2d7bb92ba6dc260cb38d532ac5b782569f7ea6 SHA512 bd5259083e87d6fe04fd0c3ff2b5a5ac3e6550ea05bf623b3c535465a2c1f2766bb66ee73444a80075efaa59a73b064def1f034e91e64c66aff4921eefc54caf
+DIST fancy-regex-0.11.0.crate 82918 BLAKE2B 55cff8d2ec3152fe46fc6ea2a6fcd13714b35a5c056739a9a15d7754badaf66873ca1093f96f61529f2b0ba0279a193754a053ed9d5dbbfcd72faef545f092c4 SHA512 7d35306e596543ac63a7b0fab145a401b8eceae08c6d7564dc46aa6f28269acabe59135b30dab20f3ffa6779f5a0d3fcd0264d8b5c19be56fd66dbf6e5c2092b
+DIST filedescriptor-0.8.3.crate 12635 BLAKE2B 603c15f2a83bdfa190c882cb9dd6a84ef3617898fa0969f45d19a6448ce98b0a139708aed3441fc8b5de5ecd49de0b06404412a8f2e199488c4487dc5ca4e16b SHA512 1d403271dcbb846666acc8df2b2f738c35c1ff3f37af8a87c7c0cee3b73bef1b7b75885e426d27c5ec0ee1f3c4f1a31ba63b5a11eb3805eb675a399d1b5f9b40
+DIST find-msvc-tools-0.1.8.crate 31151 BLAKE2B b2d29513fd7122b0c6a7d6044411a00afab33095e48ee1509eed6e10103d4ab60060f9495be4ac2eb0081707e8cc99624bd286258ca6a6b516c9100aa1584211 SHA512 cf103ee75e8f387904561fc75d03b9a29a7e81705bf6c11bc520e73e7f645937b8346c2854361f3325ffcbebf9874ce68df82d9cdca9b8f19d4d882548453d68
+DIST finl_unicode-1.4.0.crate 66414 BLAKE2B 148990b59fc594571195bd9ff3482de9d286993564eaec065957cd7bad548613d4eb5a71574809cee3eed8384d95768e91a88569028fe0ce3de91cde3fa11055 SHA512 19a635185007adbb58bba2784887560d6fd9c7da8a991b3cb84d89a680a28ba9ac6de17f4e19396969efc1143eeaf0b3b5f09953d1e6f74e5e0e1dbd7b78011d
+DIST fixedbitset-0.4.2.crate 15954 BLAKE2B 91270883db5ad0e999ebbca1123d8729d3040eb936034ab8da3cda72a830e45fcb977b3fe3c2b94e870c1fbc366ee8602357bb77e8b9a40cc41a04afad1b266b SHA512 57c5d756b0a202b2506270f0d5e890f7617a1e0c015b6059ea23fab49cf7af47fd06927eb56feb03b37cb2b6c467e326b3f0da1e32cfcb6339cf11a130a3ccab
+DIST fnv-1.0.7.crate 11266 BLAKE2B 81da85889c91b6567e0f555e37dd915f1bd919719d1ca10c31a6861d7aec29a49ae9c1e8bc500791bf9d6b8dbb318c096d04872c5872a4b1f7d45fbd8e12842d SHA512 2195a4b34a78e2dd9838caf0ee556bf87cbb4a8ef5505aac663b614eb59dcfc0c40f432463ede41ecca57bfe7711f72673d39a85fe03d426f1324097d5628334
+DIST foldhash-0.1.5.crate 21901 BLAKE2B 22c3a266becac17995ac996f5c9caa8dea77e36786c50464e4e7750d8f3f13321a0a1abd3a9abcfd6ff441ddea257066b2dfb7fc6fcf7468f537dbd1b0db737d SHA512 3a634fdec410d87ffced8aa1bf8dacd9316a04c51424563d60b4dd611617041f09085edfd0ec96e6bb0e0db74a0e950b0616d1fb94a31667af35af1637604c22
+DIST foldhash-0.2.0.crate 23329 BLAKE2B 49af83a79ca7954f05d8a52566d7d20cbe057c89c2c767ef76b4c8d83bf099196d053054c8fbaac74da7fd5eb0224fe43731102f2f0bcb18ccdbc0c8150774c3 SHA512 1495281089a8a1b7bbacf8004a5e8051bb00bf37718e9ddce9d43e4e198f529135f864b6850ee4422456b0d4731ae58647f0a1aaae0d67921c389f5d108fc163
+DIST futures-0.3.31.crate 54953 BLAKE2B 4b91470d3c85b9260c734dc6be8c985f78491b599d2a6ec0d1e824b82f684cd030be6f64179f7aa7c1d1fbc7cf0c5a1bc5bd045123b73461f490d7c2b9011f9a SHA512 a08d23cdac9e162d0e6ae72bd792201ff4e13d7ade6b498cc597149b3df2062b06814804c0750d941d8b5be5d2ab4cfebbe2d08a98d875d2092bf25e6e71a51d
+DIST futures-channel-0.3.31.crate 31971 BLAKE2B 2a59ebb73f998ec307bef01e997bf2922556d6dea10e2e6e8da9e1b4cd05a8bcfeef01bc1cc57d79c39bbd98b8a0d26871dca5c7641a9d4e9c2bacbb3feb4eeb SHA512 87e49e661cb12c1e03a07d3c94ca9bf5954344a51fa11639a118f5a49877c883387343af54639ad80e7196062a77fa7c9b9aff9804fb1e6ea3d0eb09efc53c69
+DIST futures-core-0.3.31.crate 14318 BLAKE2B 613d16e4f18547e45ed0dd56a7b908306393e479c379ff64f358844eacb1f8d37008ffbbfe6b1a4ed184e501ee9214db149d9cca31651b7d353ab4a99c8f5ee1 SHA512 d2f4c2476c4f480f724a880ee16566fcdd545579d3cacd2f16745812eed9ac4a7a88d59d4a38b163ef466c6f6b612b9cb06308a09d52256506a8a90e358db935
+DIST futures-executor-0.3.31.crate 17965 BLAKE2B e111467391cc99d1b6a1f5fd3aafdb86922a2d2d9e360112402d68489577527aa35f4f65e6c0dc8f48372927e6d7a6a4a97c7b9525c369cb14e34ca2dafbe64c SHA512 337e70bd3a3bd3075b51e2afe8f157902ebe486696587cc2706b6a5770478ee2ee4216aa9e155e9821ed1d02ba437cdd3abd0c05aa960378ea192e2ed39af564
+DIST futures-io-0.3.31.crate 9047 BLAKE2B 667e62b50be304b68b8437d93b734a0e2433d88a3b410010ed0b04eb2bbfbc9984454c3f0a591f720c9983582c6421d7f870f0733c31337c4c518112f52aea54 SHA512 16d21388f7ca083d2c618ec140cb2c0807ca621b8c338698c367d862b99133ec9edda828f051f3f666472c929e7bf7a5cb334fcf167109c7c392c5cc60b54fdf
+DIST futures-macro-0.3.31.crate 11341 BLAKE2B d91ace97b854cbfeba1df90468fabf6313721ef72bb408ca6bee1c110b0162fe91da18d371b628513644f9d3956540d93c3e13bc9917550338f797967acc3967 SHA512 26c45dd8c037831ce3c41a326ddfd581784c2e7aa2805ca4d93b91e439f4d8c078293cd328bcd66d0283cbd5a14724bc624ec607c343d15193b00bd644b86166
+DIST futures-sink-0.3.31.crate 7958 BLAKE2B 7d42180cfe19ae42e2ff486d83ed46f3aaa4b333256d4c30c5a2ce0e0d0b05ae93516b029e6d07105b4296bf23ba29e6fcce19f0e38ecf59b53c6ec9cfe2e188 SHA512 79a57dbee5cfe98f2c003bd463d252648743f70d13e2054af072978b758c7cb8e5fb652fd2f36c760df358ad23d2893cef24ca6ae3df44def28f1d39bcf348a9
+DIST futures-task-0.3.31.crate 11217 BLAKE2B 8c0e0aa0aa14bfc28e668af00a3fcc2532950ca865a9f3935717a4a3770cb60477cd8f4cd080675379315b649fbdc5fee9dce49502f0f24f44db481a24c884bf SHA512 4872fd2f24b07c626efc6fd76c01b44d56efecb9697f972d0877307b38d3ccb06277ff029df38981470ba1f8ac5f93086123ab3af44d3c49bd9c10b6c9158a81
+DIST futures-util-0.3.31.crate 162124 BLAKE2B 69ca647a261fe24f90a4221d8629169a8dc7eff9dd1c4e07cc700a52a8609ce9b8aa3974b9b09e1ee64d0121d7bcb3efeee6fc15983347aaa0b0b23b068afc34 SHA512 429b1de584546b931b17d475aacbdb0c14824a57d960c44e615aa808e8c0f9c126473e313a7150b3de87ea91b7eebebb1041509f61b3493fee8a9cd2c75c4df3
+DIST generic-array-0.14.7.crate 15950 BLAKE2B e74c785e3127095625951da192a018281ea9976aaeb11019f9088c3f27748c5fed1ef25d577150864486dc48b5138d6892e42f99979339f711a66fc70756c82b SHA512 363a7b04e4102f9ca63d429721c1ada6272be6bf0a2e97da681faf76381f73f0e3acb86623b9ce2dae441de9fda704088391779b9769ec02b3c8c9f9f35f897d
+DIST generic-array-0.14.9.crate 17439 BLAKE2B 881593869e9a357ecfa470b8c8aaf4038899d4ed5f5faaf8e167a108f62abc7a1a270cae8cb15d402537f2f837ff19b2e79e4e9cdc057fafb97be93074881c3a SHA512 113c841fb2c484f3a1f65be6a509738b530d0abf8952974e00225d2e031dc7e53256ddb650448e1e7dd069b786195ac2ff1eb0fcef6b3549ddc4014c1631b60d
+DIST getrandom-0.2.16.crate 40163 BLAKE2B cf95b380a610313eaf068fa210bdb4a9e0b9211321d708f9877cd9e1901df0f6b7f57462a4937da3419c7547ef300291deb5367f4dce4ff776e7f0d9d36dcd8d SHA512 6391d5322f8ce2ea7d14062d378ae2ffad66622afd58b9f1732e5314b27d3a554c8a008f6d0d133640f11d769ac51ea4acd24e40259e14e2ffce93d5c3c1eb1e
+DIST getrandom-0.2.17.crate 40780 BLAKE2B 49168490a12561828bb324273c1a2dcb98017577f8500fe08a8bb7c3accc37afdc459af264da7b95a4608e53c4edf8fcec3cb240741b2ee7b128012fab975ede SHA512 23033dde606eaeacc0557e21b3c5ef732e083b17ae086dc95ac7d1a8bc1b695a9a6a7073b8ae774ec62e7477a8ea0644d417fa5da7841a3c8118694c21813d1a
+DIST getrandom-0.3.4.crate 50932 BLAKE2B 34165a6994877aeaf3063affd48eb499512371a1fdc0d890feee598b5e22c14cb8347642a0e9374cd5d8a59a8281db839e45923769260312379321bef54c687d SHA512 43c44ec3ba0668f388519b2cefbee63f959f0e078730b3f7563742522e5f4b120472024b95fc94aeb90900a15d327c3573271bb26b2de4785e589a8bc1bc9da8
+DIST hashbrown-0.15.5.crate 140908 BLAKE2B 6a360eaa2e174ddd1e9761bc19edc4b57b80f84c36bb5d64003c7206755d4175a05f39c001acaf000ec69ced9e28c3853bd64702e2927aa7c38527a53abf2201 SHA512 654682535882733b56dad632851fed93a17ad0b2d3e13e3390d7802450781501e275b0e0b39fa32a6eae092132858ed79b305238cd5771c08987c5d26af6d692
+DIST hashbrown-0.16.0.crate 141708 BLAKE2B 260b2ae46c2c376f32aba951ef562b41e40aa1159b170a966429263df5d81359d1d7861076e2b12a88fca612374fd9b3d7265af891d55c077dce041e180c854d SHA512 ad819a3eb38bd2939e08686789529172f146fa77911cc9dd61ddbde4600d49af79fbade6fd53187906a8b7766aff057187171e2dcb2d07e1079e4dde6104d615
+DIST hashbrown-0.16.1.crate 147785 BLAKE2B c506e64340b65fb462545c52e85a192b21e33025c91adf1d8255e799e8a5743814c60be971db56c0b9b1208dff8147ed4a28d8e37caf8f5646fd367d8d0bc9d7 SHA512 0739f1b2101488f88778e221d86738ce557b8ae12470e2a4444099eb90d876382030d00e789dd4ee44dcd7833a87a6e570fa11ba5823beb1cab3a56784ec2669
+DIST heck-0.5.0.crate 11517 BLAKE2B 5365ec43b2239a76b33a174f1a4292ece4147f9d382a68c6c60db78fdc8bad0afb1d51a65bcb25e96675372faa4ea37c318265030b0546ba51942f7c929e1835 SHA512 f044fc9c3d22466629fd8f772ec0555350fd611c0cfadca51d99a3d2f10e155f77c1091916c8a95a6b9b499f366c2e99a5fbf45b010f988bfb9b2501bf9f6a76
+DIST hex-0.4.3.crate 13299 BLAKE2B deab49bf3d97f6fd7c0a0855b50232422443b226362bc7a4a19e57c2e662fff2cb046d4c5bd7618ddd523045f3d8c78754508f862f9a8ca29ca9247da6d6ec79 SHA512 fd8ff33b68eea2d6f2c6b02a6d82a2807cbcdc209ca5a76e3e3e5d006917ee151f236b6d18e2646cc9a9674bcdda1d6ce6ee363a89cadd99bef00d0eea9989e6
+DIST ident_case-1.0.1.crate 3492 BLAKE2B bc79ebeefbb7e3ed1139e3f41d8d20fb175786bb123bdb9c1a92ea70effb4a0e5e798f24b068cd66a1bf20d53eea4bf24de495b5568c2d649ea804389a1327ab SHA512 81003a43f18da5997d644319274502e2066af9f9fd1400afda7cf2986b3ae0b7355b932302723cd3bda2d46b264340434d9279dea58425bad13785698d5808a9
+DIST indexmap-2.12.0.crate 100446 BLAKE2B 3fad12a9daa3c5c8b3db1926391bc770c9b1b133455ddb9ff4157f212176351ac1d00c50c8fadf2afa0557487e5633648d8c6a1cdf80211b974d2ff0f773eb06 SHA512 3ceb00f2cadf667e6e7893178c43f68776c2d97ef899209ffc83cf4f536172cde52bf73f8d512a9bba8119bb77f6b6c2a920b8edbc1875b1ee31033830917c33
+DIST indexmap-2.13.0.crate 102206 BLAKE2B 7f3d070b645741f5960647f64759840b1941c1e28f61ee04d44d7eba0d8f600949cf139bec5fddb1507e4d5a9e12fb709a16415aa014eaff8f5e87cce41a9394 SHA512 f5efe0010603a3f1da8955f5f97c9a39e4d2c5042c0829c057ad739687d990c100d1276022dec23e7cd70efecceca07ad735693bd8a1b21b507b8892110198ad
+DIST indoc-2.0.7.crate 17184 BLAKE2B aae454874b44dbc908a75b64626e608e04017c1407daff9a2e2dd12a337ac04db594540d2f31bfc590d6f37f0d711ff2d3054352ff1b33e736c36620404be0a0 SHA512 6e80cf927001821606488a822fd0f67ae1a569b022c98e727e6b1571c88d87775166f088322bd5f17abb8fc1fde62c9d14fb2e99f1e50918487252d823e48f73
+DIST instability-0.3.11.crate 14472 BLAKE2B 9ceb89cd7e4e75076c421b64cdc1622f6a01010db76c73d15e11be849290dbb2e871c5a0ccc16146487b7a59ec57fcaf37af67d7b86fdecafb4d0f0fd7bf9a10 SHA512 d5a55c7e89fef192910528616a80a8b03898819e0c8561d4c3401432b117d1c4b3d921eef9e5eca34978bbe914aa2f67b8338402eda45ae90df982f3b0fffd59
+DIST instability-0.3.9.crate 14451 BLAKE2B e45163b3d73ed63c3df11147f5540a94b2b67ae7e977d6ba1b9ec80544898082c948b7909f4a770f76b8e60bea7ebf52d81ed36b28366b458a34b6e68cb0e5c3 SHA512 1a710c6be8eadf481e505854d7fc614f983d410caf56516a35c36cbf637b04290c7d4ec9d4ab6398151a645a962b1af8824c69078a180856eebec1033fdffde0
+DIST is_terminal_polyfill-1.70.2.crate 7548 BLAKE2B d84c45a94bc0ede333843ddb5206379f1a7d9df742c7f7940374d6b17b0a9c300e32fed5fe2bc58e6b3bc5d18b5fc58dd4e283c01c2f3b4f10f254b3cf7668c3 SHA512 d62f444e83950bdd441215c0ce681ff774692b35fec2af7181dfa243dd43fe42ff7e10a6e3b1d578712e4130dbfdf471ecdae73a3a584a2856a848d387b6c261
+DIST itertools-0.13.0.crate 146261 BLAKE2B b23d59a87f80d24925bc868c0ac7abb6b9d05aad5ca08833634ef760ce228a1b753062ec4bd22237d0e74727edecd7ba3df9789cee896345b69780d7de66866c SHA512 c6cb8f93a93b6ac1a2cbb3033e66fc81a39f83be773b734bea3311332b96bc71bbb518aae3e6b40cb537590c23de1ca4964361c336795c3985bde63232d410c4
+DIST itertools-0.14.0.crate 152715 BLAKE2B 3c075b735a6ae4b66980b1f7ca0ccf4237286b140268ea179e4ac01b1349105da227f03ea9ea721d3e762c3cf8b736cc48b6902148eae73addd864b9c79aa219 SHA512 bb168e21281ef3e43f9c93a079fc1938d79b6db2366fe17e26a90f7ce6fa55df73e54a06334cdb2a7b208b0a64473b5af9de76827a9ecb49378a5f9073d2e645
+DIST itoa-1.0.15.crate 11231 BLAKE2B 17c261baf95bff2f6cf0dbc33ab78ebbab0cf5dc56aeb7f8977377af868deb5957918f1763c2fe8c080e931489ea89ebcc16b3ebd976eeeb7663ff74989a1071 SHA512 158ca5dd4b04cb12d9292a4df63c72443adaf5aab1bd9aacdb964dc58878d847a64251f84897cb25c34648d4c973b44fef5b4c175d7c04cabc2c13b4631c2e42
+DIST itoa-1.0.17.crate 15905 BLAKE2B 105796a6438bfccbb4676cc0beefd89abb05dedf077794dae48dcebd63cc745bfa4664c0eaf7bacaf989ea9051c98703e7ce85683f5c8c234fd1639c391aa3fb SHA512 4f1b09fd0152a8c837c40045c46779c992b8b5a4737565b8ce3a92bf2fb884bc6609bc597c2b54c33855bd108311adf46471b5ed5ff7ce32549b8c72c8119c04
+DIST js-sys-0.3.82.crate 56436 BLAKE2B 9f7b485177d1a3ade0f1c47becb114ba3dded7fe308420e56e1784199cd9cfcc1fd773a53fe4cc30132ec6579454936ae2be641ab3007c07658c9d525d73394a SHA512 ded31e414e3921c583358032b3e70895e570750f7b3913d685b2582a45b350e854acce64348f1c46692d910d4c7b366b6748574ec993c197b18e87870a52657b
+DIST js-sys-0.3.85.crate 56436 BLAKE2B a5c35cde1d01b7e5eac3bf59f360e9f8b418009a3b30c81af850a181f14596fca25a4cacec213844b4d59f9ac21e154531700f223fc6e3a22047a5f43833c6e9 SHA512 dc7361feebd63457e0e3aafac86653297994004bc61b3734d1b9ffd05312c2c9b2a2708ad07ad469b326811598925b7f07e49fce2e7c611c8138210bd70fecae
+DIST kasuari-0.4.10.crate 32339 BLAKE2B 4bee61dbc89be486e18449839b4bbaa5da58f80fecf3a864ab53723952a59c32f70827a3da52ea3db410354d740594640f62fd24f639172d88a031ee0709edcf SHA512 d3dd7ece8573ebe59b91887fe4b94d6e388caa4897260041c24f355777194424dd419d5b290f5c236c769dceb0b33f65d87c1e25c0641d58ba6538bd95ff6d17
+DIST kasuari-0.4.11.crate 32486 BLAKE2B 7bfb415b80c6eccb66197f5cd48fb49cf3c98f49bd1135c0c8884a554b3af6fb2b9867fbb3835497cc497c87c9d084bc5787076007e5e99b333295214c90f971 SHA512 448ed2569fbce1dced170dbdd96310da3e5aacb1056303d3e9272f38bed31b391108b24c806985d42e8921cbbe559f1d5805d27da571d19818802bd32a684cdd
+DIST lab-0.11.0.crate 15140 BLAKE2B 28763aba9809eaf8ee5d90438ed973fbcde5861d78f51757a23840e5c1823ac30e53cfdcd88c6a8f0cc44c6b0d9ea7e8e50192f40c290c8ef1e93c9c58b35a7b SHA512 bb56ba0af097c5822f6e9ad51f0e4202ddd740953336f9da79af072feb0b40fcb18863f17df4ea8a076e5af719144037303b0fff4fcc0e5c37a018129a08fa91
+DIST lazy_static-1.5.0.crate 14025 BLAKE2B df29e0e3d1c061815bdd608b41074436024dc407d454f32517705ab04b2fe06075e310086c5e4961df0b4885e91021589d0bca2c1cbe6f0aeffa3ff1b3fd4637 SHA512 6d2f9887cd7f34f019644e42f02f2bf0111accd73aeaa60973ba0b039b6774670debece1ea9a6978e923208ef5d3ab7326473ee3560c078817f0f7ab8ed0f65f
+DIST libc-0.2.177.crate 792045 BLAKE2B ecea1ade26b0faa9cb5fb025e237f3a59dfb562e7b3de3682b42a41038b1d436e83b42b53158c1fc1cc4b1cc64ab55ba1497e869ae850a677c089fcce9138912 SHA512 9d737091dba80244137987d06a52ffcd44a968c96b59ae9af9cfa40c38cb9675d023f6324fbf25c436ce1b9592ebf26248f85b0a7c97ee02360ca624b0efb3e0
+DIST libc-0.2.180.crate 812207 BLAKE2B 086681e1f488aa2ab8a477655e01bc27dc6c578fbf9eb2bb429828164825a5d450dee9bf1bc38afc8e1be5d849eddf384db75b9f4d3c64a0fde6cc37919c1b80 SHA512 5427ac2a7c03d02f14acc66c3a187fbb4e336a88e8cccf7f8281fe95f958b845c0205ec47aac2f6ba6ab8b8c4b5cd0d943205c3f78ad2830d44c3b7779c317ef
+DIST libdbus-sys-0.2.6.crate 1105988 BLAKE2B 63452c0c239b32adda03f46d7495fbbda894611ffff15636f73b75f7d644fa9c71600dc6f3391914f4a4e269be2826c890503ce5d245082d3f8ee331a12d3a5b SHA512 b12a56cb3297b21d79dc6d63167db16c4955eb846b3470e7a7e46a696483d30e702b3c2a1642d0b4edbb81dbea570c7194208f8ab2ecc535dfbd297c6101434d
+DIST libdbus-sys-0.2.7.crate 1105992 BLAKE2B 3824453f436ccdd667a4c8dc993bda9f5ee7b2e16dd588e08679c90d50399a5317834d8433b927e80f73cecdc901105957adc20591546c7676edbbf5bd95d530 SHA512 85227b2afcc59d69bf581bc1e371802bbdcadc79aee67b7f9c70b7bab6046fa60eecd3ec529dc5e623d0c837d3a267fe2e49efbc171a57670761006bb9b67bbc
+DIST libredox-0.1.10.crate 7332 BLAKE2B b3dec5511df635f98f1424d9765724a8313b85ed73bbc6fc736a57b5b0a49972cf02d546654c88562846dd6bb2eb3701d4e14312eda85b173336167104687899 SHA512 3cf139189f8ae2ff77fa9663d1a5405ac3047d5cbab76b6497038631e2070fc2b637f9aab5001756d2f0d2f34e820a909de19da68a59c903ecc3bf80d8e80680
+DIST libredox-0.1.12.crate 7469 BLAKE2B 93ef90131d6de7b49f1c720f3b01f18856e825479f53fb173fec67d3b2c7d6eea86a8dd4789752dfd8f59b7668be82ba834c662a86c0196181f7822f418f323b SHA512 8206d0cd3faacccb681551d20d9cae977a9fbbb4801aa53daa124633925bae73d1967f6c75ac9718527cd567dc39239a8e97e12e0747bfb3d53b9bb33bcdbc4f
+DIST line-clipping-0.3.4.crate 15214 BLAKE2B aff8709cb453105aad5247424eed0c606a05769140bfe9071c93db3fc11680c81b33bf54790af5aed06d95e23775733325b1f9a406aa0d8b267e16157182d9d6 SHA512 f6d1b80c222b89db3c5de95c60f0146bfeeeefbe0bd20812dd89a670c3f9ad6ccc89d4ff94fd9d689d7b8e1f447fffb26397db95646a96f454f4f981600a3cf6
+DIST line-clipping-0.3.5.crate 15498 BLAKE2B 102f3f413fe020616e637afeb3d51d979853ac58397bd5f638ff67dc1c14a3017c23c36b14d293cff66e2c68566de36d29de94560946da89fb617186c02c67b2 SHA512 adc5b85d2bf9415f815bc93aae5e802572c2da63251fb0f6a441ac4b4e56110f35b3191fbe5c0a3ac76cea126a66be672a213031b067fce0bec6286c7b3977df
+DIST linux-raw-sys-0.11.0.crate 2659624 BLAKE2B 0852bb981c64b8e70c7037a3da13a6a16b7a89190bc50a07159d28a797e6d1ef2f2010383df5a43cda19fa291ee5eb4c6365a51f5d9fd31f204544ac7e115129 SHA512 b16261142f3cbd1caa4e0a17ba06dea49f0d4514f583ca511d9c7ba6ef231f18322f37303b7ffacc73ae7f22b81dfd740584ef7bfaf67a9eaf43859d2de1f941
+DIST linux-raw-sys-0.4.15.crate 2150898 BLAKE2B d1936eb74377d9bfddccef3830b56eb716c38ea3cb7e13b73325dfd00f9fc0df74bae49e4214dd7f27c257403b8b12cd1ef332d53336279d13f7e9497caf4135 SHA512 b5c39181fb6b901abddd8b2e7b449142e2e5691cddadb8e6b74ddc3b53076b1d410522cfa45af68dd18befd24ff12313c2494cf2cb0cf142e2228bfe42014309
+DIST litrs-1.0.0.crate 46610 BLAKE2B 9ab4a7f701ff0c586fd59a3be684bc94fe27d159e5a44cc3268cf9957dc4dcb8bc7fe8b47d32ca60ad77e1b9024a192cb022a2bac64b1247bee9ab5710769b93 SHA512 8dd223e742e80cfb29ce49c93459ade63798e4977c028d85214ac439773a37a331e9ce375cb9f7f814ac2279770d0c3bb8b4e60a118585d6d0f9e7ae08539f0a
+DIST lock_api-0.4.14.crate 29249 BLAKE2B 52d2f3a3eb5c3cbb4e7f01a2932f90200e3361155f53f282228f436211c54d1e429bddfd9e305a78b9c26b022b3234ae8ad3bee209bd4feed5b64a86af5b3d85 SHA512 73164d411c9899323b3bbff4fd6824e2b9ff44971ddd267629ae5a70b456c1ca945716e952412790d35331993ae71600b0e6a2aeefcdda117b26a7222ed97bf0
+DIST log-0.4.28.crate 51131 BLAKE2B 2911509cabe6a69b60945e798f2afee934d865d21efa22d150288de6a27a797fe00ee4f249fc6f6d7a02e2efb7377d2a7188a8ed8cb692f76b94a0df56d74d83 SHA512 cea74c92c80f291360a7cdf022e3ce2f509b9051b415840ab2a159585384f3fe606289da00a6def0c3d666416c5fcda865e2ae4ad48df07618818e8486cd0209
+DIST log-0.4.29.crate 51515 BLAKE2B 3f5dc889e895428f27ef107a63004c1b321793b865c29b20293adca81db4e25443e24354af37018c9a60dff1d54897c3b7b2c014a64280523f4a3586a7eeed24 SHA512 31bcf1669c27980f0a8500082c4d0cc500f6cc943518a3dacacc3ad4d8a0c238517f23c2c1969e5a22dbb5d25614adbf4e914c0557e45e1ebc8e7385b2ed14b3
+DIST lru-0.12.5.crate 16047 BLAKE2B b5d7d77b4b29973fde0854f55c395edb6ea6e3a309fd33f0c43a6680955bdeb60fab624f02135b637d95e5a0e9da79890a71290c19d797f758c73d16c3d44a27 SHA512 a77230403b1ccb5aa3ed1ed89e7e6af53b3b34d4373e663c1a9789dada12c252e2b5d8b7ac78717c4c4909203c7ea2ce5743ee6cb414aa268c329b889d66a982
+DIST lru-0.16.2.crate 16627 BLAKE2B c1e5e8c8458a5dea058ef128519c338b08b7c7246f163f41555da0423850a7c41d2c9ff2532612714ba884730f4faf47fe5c0c969dbc4ba2859303f33369db5e SHA512 e995c1c38489578668172c1650b90eaad36f63e9fee68a177079884c2bde617a27db1845ed44c6c439543b79211f23f0b002f57e10b4b272860e547e3df796d1
+DIST lru-0.16.3.crate 16743 BLAKE2B 0574e82714425293593e399930903da1004062ce84e5b90126c66d004e872ac580c6f474f7c39e1a8eafc9f78c6fe7a3049b50f248e8f3a9ecd03e9f04133b9b SHA512 5092b87dfbb7666e224dc6d8ed01fb8276929a2d1a31173034155afadb90e0762dbe6d5ce263bbf0353c079bb249027eff71dcac87228514a5406ef67dd06c15
+DIST mac_address-1.1.8.crate 12876 BLAKE2B c0e91482dc2aa5697188b747fc4544dbc787ee203821f7c2651b996d5041c7ae80ba02ad87b8ac447b16191644e3633136bea22cc379c3edcb669be499703eee SHA512 bc267a2347aa81e479f831ac6a06830176c7d5e97d85ec213c2845b30824585fb240111d3a8fbc2aee6b53dc6941d51f57c08dc4461d0293e945fc51f9d7bb35
+DIST macaddr-1.0.1.crate 11162 BLAKE2B 7c3af87c657999f1f34974b9393391779f85e2ad778117ec33c11d116d83103fee965a72ef655b70d4c9ce8e21f3d76a2b44a961adbe7c0061d879b1105ead54 SHA512 268dce94149b78d3ca7988fea8906589c4f5c5cd7209b9c3b5e7850028296b70a959df0ebfc082476552f82b21c81e187e984aec545599e347dc7bc86c911e75
+DIST memchr-2.7.6.crate 97616 BLAKE2B 3429786e97f1aa078892e417c8ed8198ec727969517309049b842e44097e58038583508aa974e6246888c18e11f9d23863c1bb012b542c5685250fe34e250d7b SHA512 38843817334da88ad74ce679b4401cf948cf8138815f3acc5eb0d005da3aabceb2216e20887e79344396569a2fa136e3aa1f7f3251a00d07dd6934cee79f4fad
+DIST memmem-0.1.1.crate 10665 BLAKE2B 430da33ee602a8aefb0a827afd288cbf0ec16f1d5377f38d17e44dd1d4cf5847b2123f50385c911423ad4b72721fa5b244e4bf093fb2fb1d3ceb53a3782a6152 SHA512 f4ee8123e0263c30898ff1e397bb3daf4e027aadf520977ccaf5bfc4ec8158b398a19bae6d48a85a084e43d80d5ddcbb3cbfdf986080041ce958d2c8f5eb897a
+DIST memoffset-0.9.1.crate 9032 BLAKE2B 0aab55fe084134bb599c52d77c96400db40949b1013e7037747ada4fcec8dc4a124b6f3755f04b36e057eb2fb4a6bd6f07d6eebcf166f8a71405ef434d802fbf SHA512 3a236c0f481e36973b9f805e454c2efe4dd375e6b4ee406b57145136c70d5fbf4e1183d563ebf3b5fbde7363bbf5f08f0d88e507aae5bda4cc75664ecd0e33aa
+DIST minimal-lexical-0.2.1.crate 94841 BLAKE2B e6b8919b80d938d0b98d60d4f5f29ce43d77ebfcf8b18bde08909141915c6ef4f0d07a543538d4f3ba8527a9f55926d4a8e83473248469d087e80b274d701d61 SHA512 385fab51884bdcc7b0f2728a219ab164d0dc8efe42160b918f2c09f79ecf853fb12bda006d11e649f097bae1499dcd41ddf2a8784ee7d178cf2c28059e46078c
+DIST mio-1.1.0.crate 105232 BLAKE2B 22c96a2ef27327c27176651d957ba9e8f6159406e5f83aa39b1fc81efde17a60b4d5e5802382b45c51594d1f3361da99b5433518c096f6edc650bbfb7843c7e7 SHA512 7fb0d6ecc9c7d5854c0da8c2d683012a86a427f752b47592cd392c44a7a06bf84360f559198d685e47ec937ae6517c0a279c362d6b47fef6d4ab6edbd858e944
+DIST mio-1.1.1.crate 105630 BLAKE2B db279c3e46108375f5391a5ebc3ae07e8ccbcc9f6a71aa41996adb862c5d2b965af3cb0da25becdadb16d401ae69ccf5a07e21b0b6fb36e07294633cdf690141 SHA512 0b1c82773f5cc3f33ccb80a2cfbd58e48ffac82934afa7d9ec632b36484f8a13a079802dd8a658dbc94fc158e597e4d7a2c02a799f7b506a7de98fe74e80e684
+DIST nix-0.29.0.crate 318248 BLAKE2B 3a13a88375a359cf77b28d7f77f47f178bd31ef74b7627b6701bc6fc601024706be4e9ac1a076c7cba26b64d3bac4de17aab45fe3c045aa7a36e2d9232e872ca SHA512 86c05084aa0e6238f8d48df0f5ce6e6d7661b589f4f3fbdad43387c59c0d6afafea4badf25d31db1611615de19a0b9ef18ce614846b79a47cad4e2c9367dbe7f
+DIST nom-7.1.3.crate 117570 BLAKE2B 5643b67990b7305e101b16b8cd27c447e162a7adc6d0dfac00920b0cb50fea98c9d4edca63c34f6845cba05f8d0acb407cf3045cf64a4cb28e53c8b6bc9090cf SHA512 1ffce08dde299bc0e0367ad59c7b6a83e23decfa11115ee076ab91ec53cdd9ef37e4c2103c96eff23a7b6b8b5c3f67c83ce1917928c7d4c6462083bdfa0c9cad
+DIST num-conv-0.1.0.crate 7444 BLAKE2B 4f5c4695006aa3ae77aaf5c55999a07d8ddfab294584fe10d73eb6abbb3f551846646156581599f966a28c74d80d3ac4373c49d2099991f7ed9edb56d36feec4 SHA512 7884c0c6599c66e40b9a79435e1bbcec60aa7e68b59686922dfab19ccbcac6a6e54f208cfb3d5a8a12e86e4dd67e09977d60b69ef6940e308a28256733f36100
+DIST num-derive-0.4.2.crate 14709 BLAKE2B be4abc3c51647f2d4ebe0c0619948cdc994c6ef808d768dd2b9274410716f524ec73c75440f7a780e4871f33055c81f800b0171e4b7a4e2214da5a3007393dab SHA512 55b951470a07dbce489ee43e1540056123d3eb7b5240903cd348951b81ef5aa5b2b1db311d1219bec8ad191373d0079bf40861e3f45380f8d8132f39d33b4f4c
+DIST num-traits-0.2.19.crate 51631 BLAKE2B 78637360cbf32d172510a62bd9442708af9730c0296a2bb4ebd200c08facd49bc31bf8ddd58967e0df7273a938832b620265d9f8f4d26ad16049bf6dac1cb4e5 SHA512 180018a5eceb45085e4e8d103ff21bb4d5079cea874c42a0ad4c76c99d275d434bbc1cc289f0cdec172866daa89dbfe0871410b2cc3407233fe1129786905956
+DIST num_threads-0.1.7.crate 7455 BLAKE2B 282514d1c6ebe67ab2c30f91efd5b6c8880baa078265e22d5d7200eca4f96702aad8b537ba772e5d4e680a6e90fa6919fecfcf37a060668b2a618bb01bbabf2a SHA512 60eecfe49c1afca8efa320c5f4d0cd794f6adf8924193682c903307f484ca0a1ddb56102a772232aca040f29651bbe26ddc1c4939e1f030e229d179837e06bda
+DIST once_cell-1.21.3.crate 34534 BLAKE2B 3578aaef305cad2fdffdc40c392775a3540bfab3f3aeafd22466d9507bf8346b9fcc200929d48525b051070c0aaa423ecbcaa12868b34dca007991effb224166 SHA512 32a87506c6f4598f3ca2c88556014ef2093d5db9a08602335e847caa537a866492fa74c894e7e1da2e4289a1d3dbffcb90a9e37a4a1453203832f434b8206990
+DIST once_cell_polyfill-1.70.2.crate 7448 BLAKE2B 5a90f8eeff25a555987b84b9800f9e0b2aa94fb4827f76678ef45d344c4baeae5a079a288fd02a570d0f0099e9b2842d32dd206dbd609212496e77ede47a4d21 SHA512 9e0d07bcd40e4a5c271646d6fce71677acbfa4439b4e818bb4df823eb31eff976ba78239e3a7e0ad21e80ea8d0d3af3e74a7d0a0a55b308d4c777b9b5e1ef8ad
+DIST option-ext-0.2.0.crate 7345 BLAKE2B cbfc03e7c960fe3023512a4ad816d657b4f54f8ecbde9f9c4df4c5fee3b36b68ab463c67ad650778279e01c7ffaa63a0dacbd0c080c8c3d15b1611de0e71f92d SHA512 f8539f97b01af97e0b80fc96556002251befa60f8ddd19613311e62f9dc9834d71c22f5d8e7c53c4925046e38cdcf834c3c28042a4da862d6f6a21ddff8d8e56
+DIST ordered-float-4.6.0.crate 23633 BLAKE2B caf4d17734044d863fc4f3f1a7f140eb38a19e2d8503e77e163915383f971ad28ecaded594dbf345ef7e9b3c55104365160172c6c976dbf3de1b53c5821b556b SHA512 57282f48284630fd17d65727e54470e63f92ad83f7eeaf83a179747a3de3c635a91d6f3836d5e01355d0b2c1a33d4c0e4d931951495e3b8b838d8f058cbd2887
+DIST parking-2.2.1.crate 10685 BLAKE2B 3af8020bc27ea921d6023c14f20545f70a5a5a5a216d5f97458d76d3bfc8d9de937f3c92668d31a79de85ce08ed0236d440c64ca1e4fe0a7748f412b941c052b SHA512 2e49137b59000f0467aa9ee0648d53e06cd2b8319d6ea28bf04c621b873469739a34186840b02f08d770d109cca26e161b3de3e4341dd729701885307a6a8177
+DIST parking_lot-0.12.5.crate 46735 BLAKE2B 36d82b682f7cd0a2c308fbc672f0c7023a3b6ba6ff0f9de75067bb26227d2ca460a09ba37a0a5b3867ed788d72a523a5900b99241bc30a67606481aaec30536c SHA512 432639d4a14acfa20127f03741e1101fa591fc63048b0b0369b44ad269d3dcb6fbab7947eb9995c7948f6fba90245abf82154a70df2b7a99aa7365b0b88666ca
+DIST parking_lot_core-0.9.12.crate 34110 BLAKE2B 4c1b3fe163c843c05effee9cd0a0461e39875040298b8a8b880c05a7db038c55ed84d1e4534417fa0e7a0395e06200d909fc16031514e3ba0ec03f011a86598e SHA512 6ce29df4aa9eb0ccfe9020b066832f2ba27afe41a48792d935d0051a595367f71d50f6862b921d91312a1ea80f087a416388d4b29a11de17373483e529f12d8d
+DIST paste-1.0.15.crate 18374 BLAKE2B 69ee7def55e658a9aa72405bad62325e8d6021a4989fbf11c88d1bf05fbac520f7b04d467bc3c6eb45043a41119f65aceecc4a6a1418a9192d73f33134545062 SHA512 5026d3ec7141ec4e2517a0b1283912d0801e9356f77b703d954b379439b8d85e3886d42fb28f7835edaeeac465582da14233564fb010c71425a59c9e1cbd46b4
+DIST pest-2.8.3.crate 130311 BLAKE2B 4475198275da8598c5dc11e65de454e4b0d786bf5b70bdfa6c1e46289d541c9fd795c37a4ec74d5856cd8bcc6c0f52803bd1d72569d045e77b33b83448cd5bc8 SHA512 d82373f2d06adf4e0ec705fa946f9e4784add89afa5c4278e4912a6c1df3da6ff0be531ac1aa0a270f2598263399c8b0520b5711921fcc51c23479749580d4d7
+DIST pest-2.8.5.crate 129838 BLAKE2B d0b000538ae6c74dcb4de6aed1a6fefd88e1cda6ce04dbbf0bc937fd1b11c1c4cc71ddd65aaa920767e9f3d8652b82fa0f412dd1c0ec87d6aa0c67941e534f60 SHA512 f53751f0c142771573341f4849db7cfe3e5d8f130ee8c78937c285bbc7ba46e153d896143e8d132e6617b2ebd3c36826e81f96a2ae3f24c255981bddbf8945ff
+DIST pest_derive-2.8.3.crate 43363 BLAKE2B d2fb3562dad273df1955afea43a38a925fa35bb5837deb1214c69fe2de88163537687261faebce293e63e04a320f847afb63ce1616c0164caf03360b8987bc6e SHA512 245867dc29ec381871fe8bb4535848ade4a0c6affa4208f1fcae8444ba0444a484de958b8f761ee4880bd42a72aef4b4e4f0c93e169eb3b01b2937387a6dcc6d
+DIST pest_derive-2.8.5.crate 43550 BLAKE2B e72db62bba6924b519bcf4c0c9f41ec306f4a954fce35bc0498b509f1d28542f33e9746fb0c55333fa61bb5612bebd2dd39bf99b5ac47992cdfc9463b716271e SHA512 bc36d726f9d8a5a64f1464fe914a02755301f4c1a78c5969d792f3f98285a34269a0fff1b8f5d3a5d79ce69cc2e02ec58edd1f4895b2d15e4d11c974bed42f08
+DIST pest_generator-2.8.3.crate 43010 BLAKE2B ccf41c8c89db9cc87b7ef50da302d5b77c37b533cf51a0e548e88f646cdd65b18da3a7dd21891e6f541ad33c10eaf4d72205dd497e5faf8078d2a85753402a48 SHA512 64fcde2cddff2d9794d90b5bb9406c69c67afd07586fe7d51e08bc6a158c4e05e94490a50900d6d9de48d36550ccdc2dbd5c5d8c8a874f811fabbbf7210a0eb6
+DIST pest_generator-2.8.5.crate 18653 BLAKE2B 7564d43ea0de93db83eb468a3f871cd94e2e0da9cca5ee5ac210c0c052f5604e53fc4fdabfc30290c18b2b76bd08ad5eb04d1d110a8e735d2660fbf2632d5320 SHA512 a3714d32a19db7e65e3f0674656464a12317c589588505623706c35e43f7062feba0ceecd57873575629c73c47c02426c65799a991d1ceba372a06c07ee0009b
+DIST pest_meta-2.8.3.crate 67289 BLAKE2B 32678a85e4b2e7423be562519a603814d5b1d04c99f12e986aded858d78815b0738256b5f6346d17e5456ebce102630280a0cbba4f7c7872c281802acd993a6c SHA512 cd9670c418efa69386b80c2ff3a3816a79d72954c3db749428ef5f2911218f9c72b8c8f70bbc670d0551325ec7841e845a758efa372a652422e7d1858922d5af
+DIST pest_meta-2.8.5.crate 42953 BLAKE2B 15c8b602e75b1b888b90430fbd8a92b4813589844f9fb70f64eaf13a38a663b4fe5518a41551e59c856a8e84e0f9c3fede3a14431fff6e23173e5c94157cfaab SHA512 e740e05bd6ed1e6ce50c4699d567b0a4366913099d8b8a5e6f100d24e3c828720bf542c0dd07f5c96fb5f977a1750d8bf25f2eb92c48facb8d849064e1757cce
+DIST phf-0.11.3.crate 23231 BLAKE2B 588ff9dfc05a3d2cbe223d97c36c8a596d89cd421b568a0526992a089958e4b4ae8f7d33b3f15cf935d20bffea8f60d39ef2d2e1904101f285ca9b8b8155ecb0 SHA512 20a834481bc43ac8c560b00e337294d3c14d1fe359e7f78ed08166b096305e40277f4cd3c179a740911b5c241aeb4e263afa1a50d37f383ef63da113bd6270a9
+DIST phf_codegen-0.11.3.crate 13741 BLAKE2B 88b6f0c206a95945c115401a30ba1bbf6a74e3acd4458f892fcd1eae5312765ed4e17272a814b6242240b97cc0d4eaedbf8c1c37a090d9aeda6ab23bd2280e78 SHA512 e86c3b73de198aa0ac67beb6eeebb88865f77d075b9d7f290eb9b73bfdd6728d9479f796d56e4f3358226ee88b877d848017cd951a14804534e4cb656eed209e
+DIST phf_generator-0.11.3.crate 15431 BLAKE2B 0c8fa88e391141d36d6f128fdc3708a87e34ebd56e201ad56d62de8c05e9bff62258dd7f3a03b432ddcbd83c4f61fb9a57d93574a9f9a68e931720733ecfe1c6 SHA512 52998e20648b6ecd1eaafa407f7da4667fa829d48fe0c9f8f718377cc86a232a6261fc2f831ffc7051b62dbdb880654b1207ac314e57b23d2b70f634d07c2115
+DIST phf_macros-0.11.3.crate 18436 BLAKE2B f52beba12088a40eb532da1dabab5d633c1c90fe143ea0367afd7ad8263c42336fa81974fb122ae0d30eb45f13a257c7fef85f03b0aee8de45d3cf3b9e903d30 SHA512 331d3392dfd3e48eab0e65c3daca469c3abaf902989ed912e394175876f36c14d06fd1ba4ed03e01234608faf1189743e6dcde75eccdf2f4fe0dc8ffb15e720f
+DIST phf_shared-0.11.3.crate 15199 BLAKE2B 82441a3f6db12e9021552b51ef4ad8b564532833dce782938d7d721e9f2d8b7015eee7483724552b8fcfeeed365259cdfd5044e9d2a999f42baf476df8141db4 SHA512 34bc3c0dff5568f0276777614d92d87882ca6be9e3d405c1e7de90ac16ec52a12acc30ea9ab2033074d0e988fa514247f37de1a21a3727de0ef43f42f477e27e
+DIST pin-project-1.1.10.crate 56348 BLAKE2B 2737430821b6f9552b224dc03273e56061ef732da90a14df477fb9a8c4ecc74bb4346ffc3f507297d4ae01014f2a1dd754ef76c0af2c3cea6cc889d77ed2fcd1 SHA512 6b99941a43287849a9c1b8fd09e3991cac3ab3f8811641d29ec4228bf1ec727cd8845fbf747859bc2bc7dde715af5b1129654336208b37a86b641a8765071d1e
+DIST pin-project-internal-1.1.10.crate 29162 BLAKE2B 2f9175f5419c7995caff2e2a243cef44a724b8d94f4cbcb5c1378166d03950d77d054b75aaa6c90f991d1b4ec4ce3cf7b04b24e4ba44f3c1d633ff7d7f80980a SHA512 40799f5b9e3129859a50312e19e47b546c345e5fdde5b308dc07042afd28f66279fa936da5beb83a43721b698c913f2c487610b047459ee6b7211eb890b97e96
+DIST pin-project-lite-0.2.16.crate 30504 BLAKE2B efd0b426fcc6ea8852bce499fac61f9755a11c6a2999cbec514f093ba7b3f94b1f2d437ee9abb243e31f3838ac1c74491a212851d7798eb249e209b35e015332 SHA512 971adfe54cfed304647fd944c1c915e78b37eaf0de3a582fb984a5e91f1b7d4db2cf0f53a9a64b64427062d4b41c0a36baddef782411a76ae3be0f8ca45f0718
+DIST pin-utils-0.1.0.crate 7580 BLAKE2B 457e1287202f16d1873b24bf4f1de1828300128c4ba3131758e64f9784d36d47365f22d85493c3a85d854f0d8dbb4c6cef3a0f5b064014dc03943e58b7ba9178 SHA512 828422b8440cc82ac6b0743e0112fa7540d437aed457564999092b1462cd7672cd6b1f0201b67075431aeedd3d9c5127468a3dd028744109944f7f023c82fd70
+DIST pkg-config-0.3.32.crate 21370 BLAKE2B 74ded191f066bc223739b3d4afec58f23de57566e7604e3dd62001d9a095a7b6a3633fdb01fdc46960c8134a694d6bf097d9ecec62b38c4f14acafbbabd6e893 SHA512 59569110185fa665f76a13e884a67ad1578c55246abacfc18cb9f037b2d2d9ec3f2078a3adfe5cc82a451892c9ad55f918ee01362a741f57dc9ff6846a4e32e5
+DIST portable-atomic-1.11.1.crate 185506 BLAKE2B 953bb1f2059dc1d891305eb89945f1f6a172fa50972725aee499de72b5dd9b4ad8ccefe4e891183ff8e6b64f4d1bb45ec33b06e0f5af34c940f817b290f746d9 SHA512 4c037ae0b4aef43077bdbf803389bc078d963f20d023e2e1d339a54f67fa9b27c174e7c1b6eca8881ecf301e30c431632d2c0dcedfb5b19552892fac0f81e2e1
+DIST portable-atomic-1.13.0.crate 195086 BLAKE2B 232b1d78c459067819dd6662ed14d4aaa1bb8157cafdeb8a61b4726ecda05068350a6e53158d2eb321cea544c688e0b3d5ac05aea77f8259ee342430c91b01e6 SHA512 1eae32e2f45a3ab92a7aaa4914995927d99b7ae4c9d4e5bc817436a06583298a1557a94b4857649356d82178125493e6c5030750b5a489c3c4e6fc3f8d501bd7
+DIST powerfmt-0.2.0.crate 15165 BLAKE2B a3e1ce63f5866f75526eeb749bec6607e42cb495bbb953082cde7e98e6aa429ecaa41889d98ff7ed4cf5031258b4f7e0553ff8fc435b3b6f8b4ef2b6d53d9b61 SHA512 0623f92e4d6ab284b3f6dae58220d79d9185df4a738999d68040c50d72fe0380d70358cb622f079c629bab53bb03c6e085e165d5bddfbeea84245864fed90029
+DIST proc-macro2-1.0.103.crate 60024 BLAKE2B e5ce5f77838fd063b5615b1555db02175621135132de6aa7479d67fd0a34c15e8235290112a728f3251cf913a835bf0aafaf6930880511427143b63152047259 SHA512 9a6964a2ad24dbb1108b7018882ddb48cb6e6f652d1c5eed1cac94602539fc71f011a0a276765778df161edbd6387bf03a8505d93565e0c106f09e98d7d6efce
+DIST proc-macro2-1.0.105.crate 60319 BLAKE2B 0c67b9c5561234d78c3bbe71e2774877b01c5798c6def669accc273dfb1188b360627aac9303157bc27fa85de84ec7b87d0cf6e1d1b07d19527983e721609681 SHA512 520f9af4f0e9b56ac9ca7a05649aeb538d235c4f53b85a4a9a2474998ad8b96a5f97aa4e117a949adb087fc908f6150fcea783950189f1772097a986eec564c9
+DIST quote-1.0.41.crate 31408 BLAKE2B 9d496e0878fc329ac9492ecbd470e762bd807ec8ca4e17a856b4d1c776351434778f519977137a67b8c143ee60b20774c09768d480cff51b22f2cfcb364a20d9 SHA512 64374d70eb29f7d7e02e535ba383586d93f68a9b6464c79840fa6c42a1ac47be7ba14e415a40e158f845e486ed33d5c564c882913780d296360b30a56301ff7e
+DIST quote-1.0.42.crate 31504 BLAKE2B a8106c0fe3953bcc2aa421516dfbaad6d6cb2ea839b2ce1447a45b8732dad40a921c2008b477bc0fa029dc0e0357a339db543b1f90bb9da77a5a3681fc16bed0 SHA512 6d55047312de6bab660459750c54213e986f0a80b4458fdb706c2fb3bab83b8239cd230dd9291662076d395c818a391142af1228ae3158cfa4960d6c74d531ba
+DIST quote-1.0.43.crate 31587 BLAKE2B 98b16b90a6f4a2c17fe4c3b428874265cd550e96db116642bcf9ca5300780115c11baa591858fbd92e024ca0d59a385275e33b7b5ba4da946e07d1f0df6e245f SHA512 ecceef4e34e0ccf260e2f958fc8b6595f488a6cf6b2d9230bdea33aedf3b41ccb2e72f8810ffda8607bde9be5a3aaac518d6f3e48e41e5040915cad26083889e
+DIST r-efi-5.3.0.crate 64532 BLAKE2B 54bc882e333f7ba52b6dd6ac92b8a282581c10b47de91a4c4b71b15a27b2df885ab52ae2fcc8a546367ee1ce98300dcaec3c33cbd7393b134383528540bb7d14 SHA512 e748db9729dbddf215d5c37630fa272197dd2921297800209ca7bfcd6ffd8530b598b944d95547ad9723655cafdfb69b1c1fade9ba5f8c2ac5c55ec38258fdad
+DIST rand-0.8.5.crate 87113 BLAKE2B 516f26bb2a969d0d79e957818133f35d2c0b4d9f1b401098ea23c5b80d27599e842b9298c0c5e46e2a6cb6953857bf8a9fb71ec9366c5ce6708cf17df14f179c SHA512 8b33a8988906ba5e2057a9a84bdd11f867a5536c22f5056eec59ed4ec4e3a6da2fd773da4c0510d343762e5a4ea0f007db4c4a7cef87a47f90e36c1a84d86fb2
+DIST rand_core-0.6.4.crate 22666 BLAKE2B 8b6b66d50aade877f2779c006f8038db450f808c66d73d79efa66c4178dc03db06f12201bf0e7930181c4b0f4030c49b20cce6eb7839763cf2217cad9710789a SHA512 36c67eb845aa2ccca49d6d680f28d418229bbc5a050729e487fe6b9f9f384fdd7b8d67fc6508b90b79ffb3c26688e72feceb3ecae57d3d7f59338aeb62296f79
+DIST ratatui-0.29.0.crate 543514 BLAKE2B d5e7de30e0c7f077ea5a4d13ce5417ab5221e0afa7d819c5706b711a843eced0d7bcef9f2d64bee5e74892ac9f6431d8ebf1f6b326e467e08e948ed0b86ded2f SHA512 0825af0b840e83e6a4aef9e631ae8840e8f7fe4ecc80dfe24b093488a95e1710d11c9a99f92690b0028f106b3d2351949a2b64016369a1fdf822eb4a2381eeb6
+DIST ratatui-0.30.0-beta.0.crate 70506 BLAKE2B 4789e287f9bef09709bedf33cca70964a3a3d89bf9a62802d6ae9e0690536bc2e5c1502d58547584a300c87cb61ba51baf3ee22cf8316a74dfb3b3de605e88a6 SHA512 c3c765be3ec206c98386154dc2c044efd020ebea389f727925b50595eba65013ba8ff291228778e1a84351d4d48ed2942e4824f82d50e2174bc1d0fdf864b273
+DIST ratatui-0.30.0.crate 70528 BLAKE2B dd75ac882c8b9bddee196a8d16b953ef8eef8bdbf3d010151988f044fd211d4377fef5da8b2636e4db80b4d0333dbbf494424f4f5a45af5ec76f2d7198702ba1 SHA512 eaa10e6383eba9166fe7b3ce93ee5715c5af3ffeaa75a724f140e7c83e4428504faddb20e3cf5f36d83a245e1b0297abfaec5e0e07d70ab193d0ccb9443cc23a
+DIST ratatui-core-0.1.0-beta.0.crate 153611 BLAKE2B 7670db9d9b9246289fe012506314c692c2ca95cb7d7b931706ade9e8b6e352d7011dc2782691015fbb34c965b233f01897521b98a4e912d6e464c121cca16a4b SHA512 4d791af3142f5a6c35c4841fbc6c045c8c4afe8163d6dfc0a35b424b7de1be9346d8268c660417ee7ef93e0aaf177a9668d477cc1b56ea02b34060233f536a08
+DIST ratatui-core-0.1.0.crate 159099 BLAKE2B f058ae843ea5d87c50652441e26467a364a1f8ee4e52f31c5cb352022828b4d060bbc9d1be64c115b3b05b9d618685473afeb188152b3dac3c217e73f13f9d80 SHA512 5ced009edeb109f327bf478067e138acaa8c83cab5be95144a5ea8e46ea3ab43d9feb50760eb606ee3cbfbc1b80c739297fd3ca8c4bc3c78a4c8c39f2b0e2a20
+DIST ratatui-crossterm-0.1.0-beta.0.crate 16598 BLAKE2B 3612520ef98f21be1b1203a0dbefa8d116bb4834e78ef78ee59f7f11b3080aa744fb6b5c8c528c8f16e4364cb5492f870591e4c1e938f21e8f7183b5a04d9388 SHA512 99e20daae683d9ad0e0193bce043d7bd03fba6282a2eef8ea151a797616e5df222301619ecff3204ee3b3ae29b96c2f245ee41f7e7730b5b245b0c9854e456e8
+DIST ratatui-crossterm-0.1.0.crate 17118 BLAKE2B 0896fcd3598f7bf11569ddd065c6652f461cdeb9ac9d5f8ef7dcdcda17bd2b25e441c18aacb3123b0184968de50784c64169866119e9251d5ca94632472684c3 SHA512 fc013df77d14c4b336cc32432ffe7f9f867742c3d934f3b464cbfdee60d38ed51002072d36d3305db94fe16af1c099a58d965a06420b95d6bed69c01d8d36108
+DIST ratatui-macros-0.7.0-beta.0.crate 16614 BLAKE2B 3df5dada85998d170c97217f4208f84c2ab6896e402d634a7890c373808ada07cf3c99d2b29b4be8770a52e4aa3a2e5d750a3a0ce06a4bb8a31c355ee22b70f0 SHA512 a548dd8f4a10bf1de5a917ae68763bc814dab906c29759056f1fe032ead02271939efc2989998287f5294e7782f2bcfb933d207a99fe05de968babcaed2946e2
+DIST ratatui-macros-0.7.0.crate 16599 BLAKE2B 7ed349433ca89eef6c726a27c4d768f34e9ed75c8968c29bb980f605e8cf994b1c12ee55eb8d2d5d78f7867b3074ee4ad3a0ffa973549a9931a34b8fc8b73510 SHA512 2936bb17a9f578e3f5ac1cc812e26856eebbf5d7b35f8d14371650a1bfc2968051c480e3405845766c4398ffb23f6b3128daafc63999379212c4fd92aed32328
+DIST ratatui-termwiz-0.1.0-beta.0.crate 17371 BLAKE2B 99980feff4663d330b6ed501a558e18d55f7b525786cb71c856c1ad42ae2c3a98c20a2d1c02121435ced7428f4cec6e3a92d4db8404db0458cf2fd4e866c169b SHA512 a6397337906b85f9eef24b4766411de41c2bfd77ae098ade3023398e307d0f626110c239f0259a9b5f89dcf49d0f7b21c479f0a82a6d2987bf355adaa3c59786
+DIST ratatui-termwiz-0.1.0.crate 17360 BLAKE2B 1c6c93687f9e8cbe0c10fe7a2e9982844ee1f9c57e6d3eb3964e04b4069fab0b96b45c1f9ee7a617b95323b0c200af7e92cc3c3c7f64b5564c9bcff082f459a9 SHA512 3a0fd4adcfebd387f2969046eaea51ffb791d63ea9c0d2afc03e77c9bfb47a971e708795359d4cf3b1ee689617513aa0959e9122dc8dcd039afa454cdf1f618a
+DIST ratatui-widgets-0.3.0-beta.0.crate 213178 BLAKE2B 9024d72573d24662ff15c9609484ad10406b29d60ffe8646a939e0caa565cbaae50a42ef904fa8003dc2b6759c204598dbe05812387fe90cb69501bae978bc99 SHA512 a15dea8f7c0e5298b81caf774fb098ea9714051460b624de6ee6ccb07a92a212aaffa113240041d454feb051ae7e19c771c97bef72a6b4fe56d615fefa47956e
+DIST ratatui-widgets-0.3.0.crate 216270 BLAKE2B ae18bbe7a0b10c8f63fde07d28958da7371a4c025c418dc6951ea9d7dc5f643ebdf325945e6272473b65d14981c5f2a69a29c2ff54dcddc67caf79d8222e5b35 SHA512 b765e08c1a999a78619de6a7eafa562759d44ac38095baf4463e56a7e14d6ebb3401a122ecf520e448d0dd201b09b012954e82d777c195df2263f7da02c59da7
+DIST redox_syscall-0.5.18.crate 30747 BLAKE2B b9507a055aa34178982f0b5861602d2e11e13c2604f905c9b747c39aa6c45f06e60cf5c9d17d914712a815fc5e9ad75bf648c300e7265fd4afbac0b0c207afa6 SHA512 69f1cfb215666f1243616366711dbd8cadd6bb411121f48f6e4ffd7b25479efa6f900dd072d7cc6e6fb8130d95cdb42f4c0cb4ba9e05b09b1fa676ca32932101
+DIST redox_users-0.5.2.crate 17280 BLAKE2B 7dcb0b6727d4d4a9b2e3b9a2410a53eaa1b0cca807010446f36a658f062f0f33b07475e61f549922a7c5ef4e7ee3693fc154ba33bf7aec710c8053d03ae284ed SHA512 0468d42c9a5aa9b8811d00b4126115bd7e92f96af4ee136cf5387939474e351fa2c01251473691aeb34f5e4c8e8804938adf1bc83b5edffb6d06869b4b816b7b
+DIST regex-1.12.2.crate 163843 BLAKE2B 4e36124886e35c2e06ecf3310c32f45bb80fff978a99509abd7d7eb6378f81123819470c227d5c234fd6e3bc7a8e7baa331ee0ed3137f9256c76cb32413ecb7f SHA512 c459657944679350369462c3c7686dcdf412597f75bc13c450a131bfceebfe2cd1e1d7f95f0f55b4aa16bfc1acb5c777f344fcfd6a5927aa76b8a2d7aa954d3c
+DIST regex-automata-0.4.13.crate 625250 BLAKE2B e8682eff5df93737430a783cd913265dd45a9692fc4623a956557cd7d6553f34eff731f6f3ec5fed5c0dc6b7f8f31236203ad9f459a998fede053d990d9faea6 SHA512 f76939dc573a88d17b4cf37fedfcdf95202171ca8607374a5c2bcdc515abd1ef9231376175c6cf11cc567eddda34e0c5f90ed1c592f2c5efbd1dee883954a932
+DIST regex-syntax-0.8.8.crate 359141 BLAKE2B db4a6a76dfd7d2619fffb7fddd8a82411afad16bc8b1a8501628e872c9b3e0a4fe71947a135900442590b944a623c5e9253e36bab865703bd5b5150aa2a65e51 SHA512 337ca84af81f2c5cd7d213e3ad96a1facba2917f135c4c1ef03571160d24e4ae47186ad07e421a7a4ff0baadbe95d34365e69400f3c36ef39ebeb3e7c14224e4
+DIST rustc_version-0.4.1.crate 12245 BLAKE2B 0ed627c560d88e5ade830cc5f72c62f6ba88be3e30d0f8db34761fcd0b284e5b2fc063c240149aabdfb12c8410ecdbe50cb10a3544500b5a020f95a31cd6709c SHA512 7aa8a487ca7411b6d23cae62f7568fa3474a7b1fd1589621071be3428a550ed3b7c4ad68277a8f86849e5900397d7d0e9d678f5d423742a045dc7c660fa6c598
+DIST rustix-0.38.44.crate 379347 BLAKE2B 780efaa7c9e7fb78782c552345ead692e4dc87a6e68fe9c972097ed4ef9066b54633c565d4f1b4752e08a1ceceef15ed5d8c11286c7cf17d971648ac5f9d399f SHA512 b7e66a27c9188eff307aa9912852706f686864852a97af0696ac5fc5dccdf2e4d22a69266fa74ac71aa123e2831f24b898b7ee9121850d65cfb56e12bd647d8f
+DIST rustix-1.1.2.crate 422717 BLAKE2B 603a41f610c6a2be2ee170f6d35ce1683a50590d909ba5444c1777b9c00b584f4544868f4c4d3b2397ca8b77da2d8a40154ccc6f0f2f6affd2353aebfd6b4515 SHA512 4a5ebae0902c7ce683acf5c2a0ee62a4903ccdd7f147ab5b1a657ae6d4b468beca31a15c473f02bb2f9e81c2b07924c23b31ff860482a711808a774dfb5af5bf
+DIST rustix-1.1.3.crate 423447 BLAKE2B 0148cc9c0941d416c7ec0b47685210e898ac4fb5ab91e2fb7489aaedfafdd266965ac494c14706c48f7f323e4e7719001744c25697c046f8c8013c080c2fab53 SHA512 00f22451577b2b0cd789a651e6317c26ab1760f92df1283f23aef97703e75e61147a10143f85130f4c82487711d8cf439ccb1ac8b17167e00ca64c210a8a65c6
+DIST rustversion-1.0.22.crate 21096 BLAKE2B cdf773cda21ebde50da897c0af0e4af14660ce953d3037054a99d8adc3db2dc6e30a57201a45676abfb183c62016a68069848e7537f711b1752339d194b0a378 SHA512 7929352df3e5279ac88cebb26ca89bb13c755f46986d2d1f514d18a3239a63638bf64f8ff153920569d173185d988d692ee676335afba0bf72d47f71babe0e15
+DIST ryu-1.0.20.crate 48738 BLAKE2B b126085448cb58639a7b5867fe313dcaabaf19df478f67fcb6cf15b8e881a21e641878345e0bf1fea7d24b56b921e667fd26a39cb81fca7ea02585332068263f SHA512 329c581429d9b8baa7d9edd9cf20e23fb8002f339d9fb3d50ed4c7eb68fb19c1ba966d52a9c9602265ca5f59f2bd4393ddcb3a7ac20c64aee3096e137eb2a384
+DIST ryu-1.0.22.crate 51321 BLAKE2B 1d575969b18e385b9805ada6d5acdeb1d1fb306da425b10378d13ecd619553d9cd07b9e134cb46d11ab956a19690c066ffd50848f713c63602a0fc20a885419d SHA512 542a991b438de374a8377dcc1501e55d919d480d3a0503097c24710472adca732c4de4f1e623b28b67763ab425aa8e234080a5abf222b5ead77a9352f617c2fa
+DIST scopeguard-1.2.0.crate 11619 BLAKE2B 8b7e9ed6cefef9ee55407fb9690d57a2a98bb93e5105aeebdb475a52485e9e185255249e1dce8f83cd80534e7402d485aac3efa7e8493b13135de27550cd4bc4 SHA512 6247719a15fe1e4e2d179127b9a934bd2f99367724f41175ed9522f58824b6bc69b35002eae66b35880375ff61d77ac43ddaa78cbde7160a35183a1da32d3fbb
+DIST semver-1.0.27.crate 30081 BLAKE2B 760cd2994baba2ab8d63656b39f281304b309152cb3c576a0cf31ebf57294bdb6a10ad73e61f974688b0dd80490e0f4da004f3396cb6988bc90af8eee0961ed9 SHA512 8492a2ce5adf32cf6183d03509766f169b323a9376b061c9659a8752f69de5f45f7c64f474fa907fd9261fe3e9a7691a39c8a603d0c2e8d9484f5946bc27d78c
+DIST serde-1.0.228.crate 83652 BLAKE2B d1909d671ea6d5c2eb4ce34ee4493ecaf665d416111b4cac754b5d33b85f916296110bae7aa961efd987a2ceb4a31ba645752ce99dd28dedb9f1eecdd4d7b1b2 SHA512 9b645d6214203533b303fc5e88ad4f7686c22df084878d18a0209a92304a340fcb62fdde88a7080cf7a7348d47b9b363885c4e1da90dba08cc99ff620f375e97
+DIST serde_core-1.0.228.crate 63111 BLAKE2B 8a64e4627ad21a3d16dd37d53fb809d11171bf337ec16bb1223075cbf81b6b85cd1c8d19abadf42460d0fbea323e2f351eeb6ef823389d519121b74e68edb215 SHA512 43897e3a7ebdc85d81d1cb30cda8f0a11610f6f551529c8a21462c24fb83110652b462846aa3e1bed5fbf8b5d7927018845a524ee9e079e2c8acf2c687efd6c4
+DIST serde_derive-1.0.228.crate 59605 BLAKE2B 166ee2f9ff9f7a0928d0a65a72db3d9226c377bca2a1771956e8ecd9c7faf0544673c9c21be2a5553e621b55c74c7b958052592a1cf6eb6427a2d4f3e3dc6bb8 SHA512 8bfdfeee10ee7ef0670972aa963ef63b13e8eb2c8a09b9e0b717f92551aa89b3dd2a0dcbae6ccf20a1caece07e6adb18f0db56fdac020e4e0281b0d24e376003
+DIST serde_json-1.0.145.crate 155748 BLAKE2B fdb06251cf3a18f2f3685823585f4ac16f2f3b762e528e3f815168a6d7991d384eb140698f9f5c39c4ce04e17fbe062f3f9c07cfea9915415a7e1f9046b6a83e SHA512 e2054b7914e6cde0c58e952d9c129f7fe8c55981b74a9700cb282480688868ebedeb44281c1e3ccef2e2a04a9a18fbdafc8a4d43169f4d09ce905808e4e056be
+DIST serde_json-1.0.149.crate 155994 BLAKE2B 7564c287a05c95feeba2b3a17e2e43ba047b0132b40fc4dd0c09141c2aac559c00bf4c63cbd24c17f12f5e6b49cf38b240d2c6c66677ee7a9edb197aba7d57fd SHA512 85fa8cb7b479f8241a4fd2255dd80e346fa5cde103aa7f25c14ccbcdf0e3276578fd0645e1d2542ee07c7e08c32058ff662bbf03926cd796c38622a12f423d43
+DIST serde_spanned-1.0.3.crate 11011 BLAKE2B 95c3bd4717544595b6c376d20ea169b3a92ead2437cc7b15b8052412e6b79225bc407f4ff20aafc9eab438f9771c3fa857d84814249436e57868c502cb4658d1 SHA512 4021188c75aca535b6726c4cf682099aba8e0f08c7ad5bf89f2dac719387000e74d9af060fd4850968a61df8f3c4f3c9bf823abc6375dd1c9b14fc7e74bdf971
+DIST serde_spanned-1.0.4.crate 11032 BLAKE2B 7f3f5297c30c6e90ebb007c4d2e413b15519befb3cd95c9b7dde758887345c774bd8e4595dd8746d0853eaf81134c4fd22c253f1c9b747060b4e7fe0d3913b52 SHA512 41e4b0f25b030a75e7bf39f3c1929d7c34e53a1d9513b614f2bfdeca1fef181c9fd95bd19f70a8cd6c64b0d4538fd8f76f946b76478d42a13ebf8c2a82194ac0
+DIST sha2-0.10.9.crate 29271 BLAKE2B 1d614e0efe085cdb40e05726578a9b4ca6bce93f6d3324f5dc0444cb37054912cdaf5d28d468eac2c0046030d920fced2ccd006953b80865ce8a2d43ef3daa81 SHA512 963adeeb4ed8b0e7fc19085e8721ea13e9b3aea5d115ca1b3dbca495ad14810c6450991dd3753807c293c415aaeb1054b8b4124c72e7090cd9e86f09fcbb4f80
+DIST shlex-1.3.0.crate 18713 BLAKE2B 18800c364d3a628f1a3125097ea82fe6286550c2997235df0bf8483a3906aacabc81308cb239887d46ba2f457cc6f8acd5aca78316707eea5098cd5666aea67d SHA512 5c8cedbe666a14b8a0874defb9208146ce64579cde52ed483e4a794cac5dde6a24bf8d684404edff582f842e1fd4fa3fbeddbe074f191e4ec4aa517aa456fe8a
+DIST signal-hook-0.3.18.crate 50862 BLAKE2B a0ae80afc2de0e3eb8b3c10241617cda08dcf2a6c06da3b385dfaf098ea4fb6c14f5d1aa6720325cff15d8ab195bf4d05966dc5a9e7155a1e43fcaf238ffb654 SHA512 1955288d7f47738007252ac2aed0fd05d1c16f1726ae2a97ac35b0ba5a6a82620b26ecc03c4760b12d86d4b83c7484a3830aa84530dc010d398fff436fda3137
+DIST signal-hook-mio-0.2.5.crate 14373 BLAKE2B 64cd21c7d5512c9315c6c19357d879e46c61935370dd5b0d97fc479e868654450efa52ba91a6c6810fbdbedef58c1a64188bf57b04aad105031763ba64aeb882 SHA512 0750e14b58cc61315738a4e7cf624c19f657d8480c76edb60c333dc0686f9dd4086264488c1dba7bba9a01053f69f9999ab157051524e2eba0299e7542c0a8c7
+DIST signal-hook-registry-1.4.6.crate 19277 BLAKE2B 0ae8056e09cd2a036cbbba5d654a480e58a31d3f39e2654e991c03f628e3c755cff692c4bf984f8f033a30085abc9fd2164e4d31e13c5e8115b61deaf83e4886 SHA512 58b60f104bbc529ef5c207c25f1f9805be08a5162c4e4c7ebbec486834eb39882f6be8d6e8b1dc3cf56774ed46aff2cd22dc69fc9c22ef1f2cff6e22878f9fec
+DIST signal-hook-registry-1.4.8.crate 21668 BLAKE2B abaed3ca8f07e1631aecaa4bfcc9dea94f2bcd2ab227c9e44d543663392d5e7c7b3beea4d0624ff48637d4fc7544a722ba3d4113d109a77ec1a3b3c0d06580c5 SHA512 6625d842e5040fb15c3a6a03994aabe8b3d0b752773805866858452fb03e5cab2663c89367caa15a34dc0ee7c2b830e302d9be664130c093bdbc17d7b61f045c
+DIST siphasher-1.0.1.crate 10351 BLAKE2B 6653898cf0eb071fe83b7c317f93ffb73bd26ed601961173875b26ec8851632599891ec178b7e14318abb9eb98d522db8022deb852af9ad9f6bf38a5a5708e82 SHA512 d230991add51a555af95b30ef104c0e5ed7011fafb92d6ac9ba0f238c8bf4d2fbd39f4b04dbbe960453f8fdd16d3768ba39f39e4877ad453562e689ec8f24a28
+DIST slab-0.4.11.crate 18549 BLAKE2B a4895b6dc87790946621e1d52b5bbdc0fd78db238d9164121a380f298b85be94eb3424405067e3a6d96ef42747680a8b2b5341373bf5733d5a62a4ae383fdd5b SHA512 b2f199651b1d0f0eacca534ac2da714a2e9f642608c4874e7a1440ba7f035d061e117f518c51915f982befa2269da747c9e12e3b0599675e6218cdd8e30bfdcf
+DIST smallvec-1.15.1.crate 38116 BLAKE2B 8dd779d7726694672945e928399e0459f4973d284a6c2d664c2fc757ebb1177658f47c812d9800e982479cbd7413fd4283c64a4d248ba5cff6397f96b758676e SHA512 c26b097a063353beedfcc921129cd0fb838c1c9420218993a05b2655b47b6ec16f11e0054312018658b4abd893beee140c5d2739401a5e5aea2e64575f237047
+DIST socket2-0.6.1.crate 58486 BLAKE2B 990bc645f361576edfeda680cd4b6a0a29d6de80bda1164954369aa572bd702db5d92cfd26e68842aa0978df351d9b52f2900a4bf1f6d4aa5bb0f31d259ff48e SHA512 cafaf371870a8d85bee30d1a8341c25ec023f6031eaae96f783f0486e2c9b0ff7a6d742d40500f9c772472805d8de9f36a163405a476c57b254249992a5477de
+DIST static_assertions-1.1.0.crate 18480 BLAKE2B 358dd5ac413d06f62da0388e2016c5fcb8ec68fd7dceb0dbbcb97665c032b7509b7e083c20701648b6a9174485f117c02682ae4bde7ef037e80a85cdf6a0c86e SHA512 46d0e35f77941dee6f60f574c130472248063dc38494c1c4f84f7c048244cc2a58a86fe17c0990e3f0f01406b75ed385a13d00058612b27cf0e867c8d31c92ee
+DIST strsim-0.11.1.crate 14266 BLAKE2B 252a9ede4241b165525486aa8855dece37af77f5b28e0e1858c4a5d2047db9fa958328db10989234aad69463ab51b2303785ec056c63ea8c95bf95e111ddabf2 SHA512 0cebe0155a92640e56db9a599ae62078cbb32e1d2da8bfa67ed0e8f410a7558dfcf7b3c2720ff5913282e291ecf076aed9fe9bf84c8d44e814a642b1bed3335c
+DIST strum-0.26.3.crate 7237 BLAKE2B bdc348c718c39609c00b9fa7d47b7090b1467022b7a8a28cc7c8a72a0aef20569c6ab22a8a8d26c2d9272f18d000e4ce94858a6647194f0a7b86d812d52b05a9 SHA512 62f116d5bbc6167a6ac68b049f8045bc660901f1ce1252f8bdcd91cb28bef821aad8098905369db6c2fe74c134a5d549e55ddd28e383d7d78f7175258924b268
+DIST strum-0.27.2.crate 8489 BLAKE2B 9931a92e30d058cac6feb1919558d33c9901d401bd0bd17193b19e775471aa3b63313861df6211fc9c7323a2553957604e82ee828fa39c2083be1f088a7d1621 SHA512 3ebb77220243b0e101ab65159512ca44c7e4a13a0d842a9356484fd5fd9a34afb5b0d230992b3bdf2e2c997833cabc8679e13e3949925b321c4f807e293d0371
+DIST strum_macros-0.26.4.crate 27531 BLAKE2B 7f7d57c957a1591054288fcae6590a5e669fba1b47d8f1a52371ce60fd84f91fdb430e48cc7edbb5fc72914be5ce12af29758b653680da3f4177339b31206750 SHA512 77a17ce47d5e8fe8a89cb6aa6c3ca5d5c2625aea0f93456f05a9994238cd3b08b3f7c6a45e9b3db21bca8fb5759f505f15cc111ac84acbbb34d59cdae8307b0b
+DIST strum_macros-0.27.2.crate 30522 BLAKE2B c70e2f27074e04b796f2b0e1a1856e95fa7716d847789f66b27d8457efda0569826e6d3cea51621615709674b6f800cbe877498c55be5286efc0222fe7179686 SHA512 fa1a2d63cc18d9947e3bbe65777dca621a06814f48d09cea0679b09271559867bff23a95690858639e3e26fde5a252ee7548c75240b13acd907001a1e38a0ed6
+DIST syn-1.0.109.crate 237611 BLAKE2B e827445d00c79a8eeb91eacde472f1987addd6ce9e1df95d7abf6446a77ff4173a8006845f3ae71c1da47193cfb72e0ead9a6d6bad2573be12c17e90735d9ad9 SHA512 12816b9e8cf984024b2fbce9f0ae14cf94d4d2c06f08cc54fb793ce78770bb4cc1288eb7df0ba5e8e937756e1e8e295c53fe07a0c5dde1ea8ddba03b6203b37d
+DIST syn-2.0.108.crate 301754 BLAKE2B 627699ade4dcd89157c64628e7243be829d79e5e1800c3da82f2da24628e8895809f3b250e9cdcfaa3c69d2d2deb7d4db8868767961c25ce6ad71baebd995ad6 SHA512 27ca199db662f3d06de9f139b9707fc30e9719556831b9fcb78f7108f61cdf186cbead48ebd4b684bdcb96944552ba4340a4bd154556cc08d0698f65c9332aaa
+DIST syn-2.0.110.crate 302184 BLAKE2B 68135017080bbdcee324fc4c98a719d70f9abe3f0a0913b82ad5dd96c8969712bb50d1bb387ed5e60b9fb64e69d6a1e0070361b4c41bc7c0804a4b674099222f SHA512 f9a393a3edcb49d039926bafa46f8befcb840da2af80329eb8b0efa1a2911e5db3e531d1866341f78cb4c28b7a122a07e269263262ff372c27334c7988f536e1
+DIST syn-2.0.114.crate 304636 BLAKE2B 88ec8c2a781cf33b9961744166ec8d3acd46e770fc56d2d4353d8d1578bf0b629bbd294db3334379fa8570b7537e26f72872ee18a92b037499bf746eac81cd3e SHA512 42d935971246f1bc605f0d0a960c143dc31c96d27ed5427d3bb2baf46a3871852450a47556cb0eeab1e1333b208ed6fbb3832c1038e91f874680f8c68719d184
+DIST synstructure-0.13.2.crate 18950 BLAKE2B c475f370d901a371262f466dd98e3914dd6f36aa473a33362866c0f781d27b1813233f96b02208f3463a825e8012cab0f8872eed848d9aa0eac88b581a0d261e SHA512 2698f4e80b93f7cf1d8ae97c4c42a7f61e7b7081f7f1bbb94d7f48ab7ae813a666d73c49ba3812cda9155e0138b55cc246fb96e5858e411a8d32bafb3e2b2afb
+DIST terminal-light-1.8.0.crate 40098 BLAKE2B e2d2ac05c553ca4f559ae8d15fa5d5fe05768eef4bfa160150e4c634dfc58bda8d7f3700b40dbdf7eb61ae0f6bc108a9dea10fbd042bac320f990f80b1bcf731 SHA512 f130fc771999dfc77b8854a2ddc1a839b8bd15f02f408373ba3932d26f47e42ff03ac7d291a66dbb6d9f6d32a644478f41fc8eec85aa151787f2013b7da2eadc
+DIST terminfo-0.9.0.crate 45420 BLAKE2B db73b1857fff94a86aa8b840759dcbc7521bc30cfcf021c55aa6dcffb265042ed698b2a249ab3142c1761602984f510073d7cd73f818685153f0793c99e0593c SHA512 f22b16f93b2b7758b41ad393d580eeef067daada996e41056f21e110bf53fcc9a4bdd309518d338c5afcdc7484e2d36b2947d9c49b0ac0709448ceb00525e849
+DIST termios-0.3.3.crate 17103 BLAKE2B 855b1115d02dcb275ea772dec3db383f9a6f84c14876ac037a5e3bbd1e71e26d3adc64e41521145093256acbea56c28b6c14f7e3e2bc9fda37e7cea113abe214 SHA512 3d4cacdaa8bbbd9083a050e723c93510829210f5ca8eb806e661a3a1e3c8aee33565142c5df34fca74aad0d26319525ee70ca6faf3f55a29427423d37fda43ff
+DIST termwiz-0.23.3.crate 400004 BLAKE2B d7f4d00d6e095c48d561b4eb33e7ffca672a694f4a1993991db699aed4963475a855bda15272323c5c756b300446ce1f223827dc2aae470469ec3c27bd7f01b6 SHA512 937c49e22e0004c4a235ff7bbfab7e053477444c2ce0a0873bc17aa6e7165413d07412f6a09630c6b3883d85264d7a3cc88651ec5b8fe8e52e51f1ffa7924701
+DIST thiserror-1.0.69.crate 22198 BLAKE2B fdd8ca8c8ca78702377d0bf7b253440519018275b105db980d63229d0d44aa5c39a703e14aa6fe453c779b3c864d8044009dfef893d2a5294950f067656d7a80 SHA512 ef50d2867d965da1dfb29d26faf6de273b5fadf78f95313f6caf44d68bfc610b9bd4b7544200b05bb0861231cfc84e961007f8db83c7905244c492037fd31899
+DIST thiserror-2.0.17.crate 28857 BLAKE2B ea60d7597439a703f50faf77dfc1cba7cf4ee5c9f7a28b9c553099fddf0534be55e484f4d0761639c845596ee4b4f2b273169cad6c1d36e1a06c775ea79554d9 SHA512 1a20ecdee9e0cef6f4af845255bf7664c77f55a8e6d878ef9c398c42d6c6f6e3deaaf606d7739df3a157f55c5be8bd0ae1af9e9bd7a66cd218e9a6268f7fab91
+DIST thiserror-impl-1.0.69.crate 18365 BLAKE2B 51663251ea6ec99c59aec35fe73c5f9760809d6b6b7eaa8ecbc8f6939acdc4d0ebc11f9034d9204dde7bd689d5e8303ae0be86e298745e9ef96825bf73453a08 SHA512 579eb796c8885feb01d27638862823acd96c79440655bb444c3445ac00121852603396ce7439aed617c0a0ac69f62102167fde5845411c906997574a46d6d9e3
+DIST thiserror-impl-2.0.17.crate 21344 BLAKE2B cc54f1423307f64857c67eebc2ae0537ffe9ad65a0443ba31c35ce20a7e4de96ad29a18237be48fad998e509cc4262e1483d4a983efc606b6714ed11bab9cd1e SHA512 3e1185fafd0c77acf6f79ead5633ff756c55e88f83285e10e2dfb9e58155b3c1c1b637a0bb7cd5d36a07cc9b014401942aa5b0709b6387e44d37c2b407e012ec
+DIST time-0.3.44.crate 143200 BLAKE2B b8b17a189a5aa95177b63aa303421aeacbc7172aa82760ce5b222ef82a8b083b9ae63746bcacfa9aeaad5caca5c398c818e5d761499810f10e9e0fe48369679d SHA512 c29f40e41e963df4d6f5407d892a98ccd148678e0cbf1db2ec6cc60f09f210822b7e211563845a4944ec290af4971e0fed3e46cb5192473408596d98583e2e6b
+DIST time-0.3.45.crate 216365 BLAKE2B 6adec1666699a3605c5e24cdf5703f9bb82771626175879642e48fed20805df6a9c0fae724e7df44852e50874b26615e16c37616b9c91deab273507c126dd450 SHA512 b63be4cba51952e8f17304e04912246f997168c3338ff6a0ddc4f2df87e7eb4534adf62f53bf6e8e25807391b0ac4a7bf77ed5e2c6f687d5bc7d53ce90573dad
+DIST time-core-0.1.6.crate 9105 BLAKE2B bf34fb3ff2afc5120a394129728c5e7806084df16f04427e3fa70104c68de414da69addbb651fac60923248b37ee146a0e73e124542369c6f68fd5fda9ecef2e SHA512 135f25c99620788a8548027c04bfb94152681d291848b69650ff6dea3aad42fcd974a2d0e5ede8b091f37d4d80d97804e1aca70f353f5970402ef545a5f1d407
+DIST time-core-0.1.7.crate 9261 BLAKE2B 8bb9cba40ad301a18fa3903da6656a60150af77a2652798ec78078fd2268675a66c10b3ea94ada3515fef525a2488bc24cea618773c7f4713e17fff6f9c18b3a SHA512 bd00a349a9f6659dbcf17ce9234d37f1b8450db5621eec7d3a33be3671e40eb43f0b72f204e5aaf7580b1fec102ba80513730883bd5634476c434e7d178bb94f
+DIST tokio-1.48.0.crate 843434 BLAKE2B 4a2e3221f6820f2b092275fceef9bf295e35e445d81238f9f71679033b499610696d8882da118279b9cbb3fffb2383afbbf9cdded910546933072f70e77ffcca SHA512 7e275ed26e857d42255dd27e8704bcb0a5daa8658c5a00f9798f4522265006a91e04d6a06512a87f30e0ad090a1676c03d3b02fe8d60263e4ba793940a85b98b
+DIST tokio-1.49.0.crate 857029 BLAKE2B 77d4fa2f6cc822c6c2040819648ac29b6241f75a527c681217b8b959fa7c450524bd4f8d9ff42a21a0b2f56cb76a1f3a0d1b62e811f34397261d08bae645d12e SHA512 f7bcb51fb940964be99200e6a9adc45fe1ab13aef8aafc121a2035f1d76686915ca1087dbe3d78497abef86f374b2f737358e5107bfdf4357f511d87e6af6432
+DIST tokio-macros-2.6.0.crate 16505 BLAKE2B 9a6ac1a92c2ca1cf2a51b7f78e4e043e086f595f3d7ab3d543b6d16df306721f56ee3e02b87f568374fb95d8a06dd47090169a3e60b749eaa2f80551dd97e490 SHA512 626e2dddbd80cd4bc365a93dcd4906752c6a1d0f2698daa007deb64596f518b420e5a0374ca415044d5c8acd247a83e3190ca5611ef9185f46785f8194d380a2
+DIST tokio-stream-0.1.17.crate 38477 BLAKE2B 9b8d7307ad8194145ff8afe682874d9f4cc7b06a11429005912dd9bfe1bbfb980876bf831b7d715552bc86ee18344eec331fc18c8871681d58171abcda7252e7 SHA512 c44c5da6f916ce128e8a13025d9c3e92ddb4c82d2cad52bde4bfb982e6f83eb89125b616f89f2fbbf9ba8b7f800ce46e33f43104a59153db2e950bc2f0d570c4
+DIST tokio-stream-0.1.18.crate 44366 BLAKE2B 39878493a2ca35ea95fcf9612825b85fd82ee457ac12fa61fd512ab2f7c0242e1a6d91ca2ad997be83f8cc7461c1075be11c9f204ffb3046018e8cfbed84776f SHA512 679a17e530a84f38538af9952496d0258550252f4978075fec468380b4500ee6449a266c0e6439de4faef7aa3bde3a5baf04559fe43736f745406bd6dd4e4c00
+DIST toml-0.9.11+spec-1.1.0.crate 56484 BLAKE2B 0efa0d7957b5f5fff81d355a1af1d3163f42df65df4e3afef55da71eac37daf66219c76fc3d239ca04269f7b2bb81771999f73f75d2b5c061cf13014f14ec4ee SHA512 635b45316d55c1e9634319ce1e7f79312c9acf03a8292c08e3a08662c4da47021203049fe18bf3487dc92d0312671b309f5ac50bc2c10e3fdea38c3e899c0e0f
+DIST toml-0.9.8.crate 56104 BLAKE2B 216327936f6973ed5f45a4200253b1c48f3138f993a9207c057fefe0540793f79d285731396462f4f4c95f5a69430e52896f574492cad760058a1535de81462f SHA512 e7ea1ec2aadc2bba833e9c42d3b2636a5d77cef2fccc4147fc327db4d0e1ac39508954597b040bdc88af4d8c9294334f12ea48ad977550087afa30778fd3b53d
+DIST toml_datetime-0.7.3.crate 17827 BLAKE2B 1e2f419d7338f27dc2f0f3d9f484a863c0dea555e4510880b6c0887654b5a742b1f4560d9051cafd25e9af024a92d99d62736423c522bcb86356bcacddda8bdc SHA512 feb8c7559a7e14aa2d52fe6236a406feebd499b03c37e1dc50e5a116a43d317046d5b6ab6326a4193c066692e02ec9d30104991a501d9d7347ceef5cae4bd520
+DIST toml_datetime-0.7.5+spec-1.1.0.crate 17975 BLAKE2B 78f3ba1af90ef25ba23491c1828e8c64d70ae9fdd4718e58c689c17848f9b74469d62471c7ba447dada7d749e1c63b153bc2850b9966cf1ac7ce87a6c7916861 SHA512 4db08a8865011ebec8351a5c42c7c9ce862956c04cf80d10644f68d727362699a4240db9e210cb6d558fecadb63da0fb41b356b5f0cd1142303069988a8642b0
+DIST toml_parser-1.0.4.crate 34978 BLAKE2B c0951a7bce851de56273dfc51e83925e7eb10005038a173d2e0084c503f3a41cf74574519876e64ff2683953ab29ca3a980eb32fc54d7dbcb7d27662d40321df SHA512 00416ae9ce4202855a0ee4ac9a704379d1eb151ae0e9e05c8d3eaaee06d97bbe427a0fe668a4134ad38382b1e248659f575bcf50071681d55dfd609b64908370
+DIST toml_parser-1.0.6+spec-1.1.0.crate 34897 BLAKE2B 1cdc6e777678b2b70bd0418df9a21e19e52c448da185d6635d160c9fd79b08a8368f80565d8201c75a17b2874a3f642ed7c416127b14d237a58f375872586777 SHA512 16d8239dfc00dc55271ef0b5d7c4d7c87833b86a6204266f9edf94d5e2bf2cddf698b65383b53eca87da28b35162a28edea62f039e024883a2501fbb13122dbd
+DIST toml_writer-1.0.4.crate 17146 BLAKE2B 7715af600465bd322b59095fbd629b58eff8183b88a2c844561a034a22102cfa254c31329e7162feecdb48fa8daf34c7beef13f927265d1364043fc4ed83885b SHA512 92f058981fa8685bdbb891838c5580f8315f70d69fff565949e1ca1d00924370ed4927052ff145b1867229a100aacd2dc8918f102001053180755b2544ac3eea
+DIST toml_writer-1.0.6+spec-1.1.0.crate 17187 BLAKE2B 7786c6a4ea68ba0d478244dea241c4909906f286c46d1276b33c4af7b14cff6d9c77c1c6dfc070fd4c5c02f89cff4917bc166f91de4a3cf27a2b77b3dc15b27c SHA512 c10836e5e69a052806dda9490dab4458532a0bd8bad31a33834b48ceeef25c2020caf3dd1300aea5ebaf87c1f367e18a357ee9ecc8956553a63685d283a822d6
+DIST tui-input-0.12.1.crate 20188 BLAKE2B ae1703c9ef988c8b32fd8c915a3ae5b6087a828e8b6310e4fe27639ec9808f20ee8754b43b9887e08ddfdcf4058f455d16a5629113cfbc7623db80f1da6aab3f SHA512 ecffd170a13a25e0aeaa17cfbf02e30153049c9467577ae46fd78e4e26e3e8328002e965e816620a288cebbe60a1c330a78855f0653259c13e70d60cd696d757
+DIST tui-input-0.15.0.crate 21031 BLAKE2B 57d95aec081de7a8be5eeb7c1497086d52bbeeed1252487f2d912fe3dd06f7892cae956457348b47184ff3fd9d056329e6056e0f344ad500d77a6bfaed6b4a8a SHA512 ac6763f040975a09d5032cafb768ae619056e68f4f2874173968af997811ed043019158f97d8c0ec7f82e2ceed2b3492ab3a62ca82eef53d86f0e632fa46d23e
+DIST typenum-1.19.0.crate 76414 BLAKE2B 8083988e0bf1d7927377112b8939607f32af098f198a2bfcc2c5302170d9f6e5b29cf02d3cab16c1ecd0fb9f0a45ea3c6bd4a4e4baaf2dfdf8f694093300deeb SHA512 09ebcd7a2cc11f422469cf4fe706f1988bcd81d628e2bab3f54ae82b0aa5486d03a4392187a3736c13dc0c2027053387f89ac656caff72f36365c8be38bc7ff4
+DIST ucd-trie-0.1.7.crate 46795 BLAKE2B 1901b49ae246f0d9628b675d4320c1005707bf97d4c8b0ff99e916d198e31698fddfdb0551222f36b73b9ec7d9e648d679848841d81e975bb9ea69bd1e30aea7 SHA512 382a832e38654a9159ebb40a8e8bf6e7f2f3108940e5b9c388f3a1441848a241201e7e5cfb125e098f04f0b2893da231b8a0e5124270e774215374bff3c5445f
+DIST unicode-ident-1.0.22.crate 47919 BLAKE2B 766f52249631092af952df717e09e1eb0d2a8e87c45e65113f0b2b88b42e8b406a87241fadd368ceb9e13339362b48cdbbc6f699f95f448ab45dbbd861615d62 SHA512 81666679aaa2eebfe1429827fa2a88ee0b52bd69723067132c24252070133b3731287bcd880ba16d16274f038c7b27bcf637e9150b6cd955fb4ff49642078125
+DIST unicode-segmentation-1.12.0.crate 106323 BLAKE2B 268b60aff6694434f05afb7e2b8187eeccdceb77460f8ce2ac0f84d470f8a4e03182ce3f7906177cd2f00f989273a7e69061a763006245f0876bf21b15076804 SHA512 55eebfe5e9972b39d7c0011d80eb5f517d636de37870999119a3d8f064f21f67b66a5ba9761d562738b05f220e21d56b5be7bbd9cc51662994e40dd67c38f946
+DIST unicode-truncate-1.1.0.crate 12529 BLAKE2B 908c794c44d4928bcb73e3cb7f89a5f57ec39bb0a2931db282849d547fee1e228f0ae01d50421b86a5d08c4860c4960d96909f1444e00179ee7309e25e1a7fd6 SHA512 090050af06ec187902102b07b2caa4f5c4d1a046d013aa1fabef9d18fd3679a6dc4dde6b55b9f606dfb057349fb5c10e2c229d3577116c9fcff07f1099fdf4f2
+DIST unicode-truncate-2.0.0.crate 12904 BLAKE2B 13630bebcf5128157768acd3644d6bbea8589842e57d89c767c7a247beb5095a771c601bc1724636a9000960c4e1ac6f65086246fe641defee886fa3f2bed49d SHA512 46fd9df702fd5c702b7a0ef5b8eca5ec7547e942f20be6a739cca7dc097af88fbea763b2c10321a39c837746ba56ed390dea31baf5a255f0ac5d84da967340fc
+DIST unicode-truncate-2.0.1.crate 18182 BLAKE2B 01de873d921f29aa118ccb7f5bf67a677a3e4f2f4f4846bf9a9cb866249c84dbb7b9e5cadbb3f2104d9a32cc04a8fb5178138a84e08855d4bf03ca5071da4367 SHA512 cbf016811444fef1252e6553756f22889ed92bd328c51b45a88afdec370b2cddb64e27ec5a2bc5bae7748f76cd896e462fdbcdfedf7bda0f0555194bd60b0c3d
+DIST unicode-width-0.1.14.crate 271615 BLAKE2B dd2e1504caedecb5d37c397ba05446d3d762b8b6833a8032ebbc213e324d53d89db5e96ed2f7223096e5754d800b39a54105906effc88d9437d7acb9e7beb81e SHA512 3c58a18776aa82cc13c761789a47901616cd98a30356f93d7eb05ae457314209d0a66213e2bbfa5eb8b59be6beacf62438234ce8daafa31b128dbf7d5d6fcadb
+DIST unicode-width-0.2.0.crate 271509 BLAKE2B 53015f24c57ba65d7ffc6e15e947f5ab96fa272996fe5a4d2f9203051972238ea7591c99f1d8ae5d2610c7b83c215b6912eff7aaae034237aec8d79620bfb843 SHA512 38149ad512a44fc79b2c991c6b5667da2e8f8b442ab6bb7e4f404e7fbb034f7540c7e0e8b9e72a1ff6117b899d6034862239f43b6423fa89d55dcf489caff37d
+DIST unicode-width-0.2.2.crate 282768 BLAKE2B c03a04bb159969f32447c7823f50b2686c515dff4f7778d2cac07a87cb9488d44844b0bb0b51c6996d8fa1fcb65cf4e6a8a9e697d95c1be8373535bc8d7c4215 SHA512 a0ff6ccc1d154e5a100808d3109fe30afa048c3ff402f0a0de34dbff2d58a7403903002185b33bee7b04dcb578c9dea66225a8697f3cd997205680ae3abce965
+DIST utf8parse-0.2.2.crate 13499 BLAKE2B 095b5d219ab8ff04c06fd6303e03d913ae36a57845f0b2ca3217a40e31a54cb0fb5ecedbde165d28f5f60f1553d8252986d7098fa83befc84a7cb20bf3b76144 SHA512 f3dbf78fe924f1dc3cf9498b6e43fb10174699463f31091a7a8136d8f31ec84fc00e80e3d8551b7e86257e8b3573cfddb56fc0de797fdb2cde0e962a8f239266
+DIST uuid-1.18.1.crate 60468 BLAKE2B 0e70361595e8d0baf8c4c69a09878fd39fee414d404a7b3cb457ad60cd3cd351418a8981090f4c3d507fee42c575eaf6699f494a604da0470573e81b7a56366e SHA512 2a088f752c4dc05291b8563f83ff8efd6534697f55da76baa89d64122ae436a7f0e19fa46a9e615d4e9b013bbc575bbe0f7646c182b37a6c24edcfe24e518400
+DIST uuid-1.19.0.crate 60244 BLAKE2B b9ba5d4a0ffdebedeee286f9e9135bbfb4041295b3a742d08c205d8fb2daffedca78d379168562beeb982612c45cc77d2168be9c045c36373e2293c58bc15619 SHA512 5b2a4aeb75efb08390567aa058e97895f30c45aad59465fcc85dae6a8e9a169c2297e332512ccce3735b8bf26d71973baf3f6687ee7ae4d9aabccbdbcff1fba8
+DIST version_check-0.9.5.crate 15554 BLAKE2B 131e75cc287518831e142430e2a39b48e4275874f4473780d47a27552294097aa1cddb65c385583e1022478f940b495eb43c24a8b1617b8ac5a24af3340c0d72 SHA512 d11d5a2240ab0c67ea69db56561ce202201edeef9a8e5eda3d9ae7ab7bb5752d8f343fe7f6536d8383de8d55f9024efa84f66a0c21e69563b7a38c4a628014db
+DIST vtparse-0.6.2.crate 11448 BLAKE2B fe3422789dbda377be9cded973323149b296785adf184357ff3d134b4c39ba364cedf0fe1260f077a4e4f807ab4589cb1a5b886768e503a73285b24ecf89c62b SHA512 32214ee2d8216b8e7e7a329ba98805e9c6c78102e0bfb6ab34a7b2947cae0329f706862b349600088b6255b0440bc1e5fb818e477b126a569a0f9ad94222b3a3
+DIST wasi-0.11.1+wasi-snapshot-preview1.crate 28477 BLAKE2B bcc773ba28cbe8d820e9e9fbb275fb4451bc7f39b3bd88bcd93850bf2bdb5300489bd8eca27489ccc5f6269b00f4e1b505ae3a33a35d708cd5a414ad307be149 SHA512 29e3c903763db2580a15f50db487c5e1d4e90763e48d90a5b3f681e468a24f9df1a01773bd1ffa0e3cd293dd8cb4d6fbabfaa63c0e13889c811a56f4554ada49
+DIST wasip2-1.0.1+wasi-0.2.4.crate 132087 BLAKE2B 9ae5188981d55ab0cfc52668cd822bedde6b03104990bcd070f459a39ef75699a792bfbd33766cdfae852147c2f3ea236aa1d1b792e85c56be21b74aee2232af SHA512 56b88f97224b6b9763f4d2572e986609fc86a98f597930b5cbc8095d4184a0279286c8c79f6ace19bb08ba08854a408a61004bdc6b2f3b72d4f3fcb5e43edceb
+DIST wasip2-1.0.2+wasi-0.2.9.crate 129778 BLAKE2B f41afceba3c586d12829d2c59f45198c61ae04a0dfe72d6bad6176a3d38189a097cf633f34accff83d7ccc238a35a833381e98291e5fd37f2f4d6e08138af2c4 SHA512 284571c833a1770fcadd9a70155d8b507e9f7f0590015e1a07ad0512ac0a7f0ca4693ccd1aa1ab27e74ec58cb75f314770b66562a2167cd6b5086a7871527eb1
+DIST wasm-bindgen-0.2.105.crate 48215 BLAKE2B 1246bf578db288dfe1f441ed307d781c8c3b593343eaa70efdb602dfaf7eb20ac52ca5744c9ecd03784e4c61d166401db66cf7599b1385d1e15133b47cf2ec0d SHA512 f79d9c1251c005f8ae3a6f7e364c54a34eb80f445bf5a23de0428114dd5dd6f5f74b76c92df784f7b54a0d978c02d5df932626819bd26a97fe90fbbd3d6f8396
+DIST wasm-bindgen-0.2.108.crate 49120 BLAKE2B 7cda1630cf38a776750f91d5811a55f955fc05f8460bb5ec12f147b37763ab73c0f40bfab4ae85d9cff93c80a6d0845916d47d61f4eb1750844c9459254bfb75 SHA512 d938d6fee0e9018cf3e1d3bf736b3ef9fbad3b20854917c93409bb4baad70c3a8220646ad3aa8e340d91c655eb7d0ccde01f4f38eb6941780c88c70989616716
+DIST wasm-bindgen-macro-0.2.105.crate 9264 BLAKE2B e2c4327e94482a8f1a22cc5bd2a67a7af96290c365bfaffe9e07acb1fb71034bda67dbb97e03e9239c8ef0be06a967ae5e1072f88a35ecb61b110a1ad122e243 SHA512 5f3ddd3dfd3060210e63f5da5384a308dcb1466d6c0435e30b4b0183b34284fa972aa70224c6c8f7cf19058e08b6945bafb17ad4d008312eb7b30d26f66fbb3c
+DIST wasm-bindgen-macro-0.2.108.crate 9283 BLAKE2B 89ae171ed3418bcf27f3a55a8fb03c9d8983bfd16254e9419fe93671ea68532d83a24a6e4b6834a291e4fd068049216c84272f041cd99f76a620f7bbf5f2dde9 SHA512 5b154c3010a31bb7338d16e559a9b3d2d69cab7681914d22e8b4331cafbc2e6d8b5913fcfbdf5a3ee0e793918affc94ae0dac76fa407f02881ba4642ed1a2b66
+DIST wasm-bindgen-macro-support-0.2.105.crate 49633 BLAKE2B 36c59a0fffe14cb6b5cc767285e6533aac2f1832ca91da5f535779d51323433a324bc07f351d491a151a8f6a67e234e75bf07d508494c314f483bc5d2882b03d SHA512 a579183f46e5e3a9ef32183166b443050af50b8df84ca4cc25cc5a6787e8e45fc1fc3b74c29e3fcdf44fd7b522627252c4894205c693317f27eb475a1b0d9b4e
+DIST wasm-bindgen-macro-support-0.2.108.crate 49855 BLAKE2B 5282f38ec1f5de7f1147145e9083863965e047e75c0b5cfbd46231619ace34b59a2a4db6d3298d265df35dd40de48a8cce2a47678644af432cf28368d3c9345c SHA512 8ccbf76754e3d62df3f157e397a3b560083e429840be50f38dd77cf737eb892db3054295d62f0df2a6cb78589a9abda6e9bc2fbcb2fd431ea74dcae46470b2e6
+DIST wasm-bindgen-shared-0.2.105.crate 9269 BLAKE2B c67cbf7f2eda35a29c0c60313e9887bc4e44ce0233cd9387f30fce55bfe173551b06f3b0e0d1834dd7c2a0e6383ce0b28390cf05e9ff692245fe4e38751e0b17 SHA512 a3604dd72ed83a627a1b708f1b268693c93a56cf1851823398e43da066f87a25535222cfdf987153d12f948cd7e316e5c2382d12273c63317025ad774411c079
+DIST wasm-bindgen-shared-0.2.108.crate 10121 BLAKE2B c7e80b0eed58bae092167450b44dde4d351188115c5b5d966ed2ce39b4fdeea77ceba89d7bd28400ea92f639b17cdc557a57428da8f4a379d2ecb90ad847f13c SHA512 97fea5811a789c68c8a9b19587450d69b40bf2b76e38efcbb12f4864ffc2ca38a5d3deb5d9d437f47458d44f05afcfc5078c748996c3fcefd65e15bbdf9b226a
+DIST wezterm-bidi-0.2.3.crate 73214 BLAKE2B 821dbe5750763c6b99ae4ff71260140dc9caffa3b0bcad048dd28664bf8528f20b0315199886a7188afa301b6c32728ff7caf8cec56445fb566cceb2db462bff SHA512 37950db06980a60ce7a5cf2a2ac55aafb3d16d02b650dbb938f28d60217f4c51e1fbfe21d53898078336f68538e97f8a061e7b6c7eb238427651ff8673d6c45f
+DIST wezterm-blob-leases-0.1.1.crate 9305 BLAKE2B e798c8990115b1143021d478bdd1fd8515a2042b69a3f241bb9482a00a8b3e4b356c0f08d51fa3769d0b3461c711447e951e03926242f0b8c706c8c0a2440932 SHA512 9d96c81528e0d772acec0efcf8f1bf065b1c8f81f613e24b5fbe63a38aedbf5d4aa9208aa04bd901b39c5e458fac78a9c1d278732b97d8b62a31f96f85f21423
+DIST wezterm-color-types-0.3.0.crate 14631 BLAKE2B dca0918ec140f4d3970f7de16398d084861c0d64be0d7a84d43360faabd319f15717bb857aab74f2d6fc8f69f48a724dc291eb26db186c15c1961a1eb5f2c159 SHA512 d18569f3748482685b3712d6df585e3684c212ca2e36fe526b85c09da60112f1419f4d77fcd5c1dab85966a84b9109df1583946a239ce1e320ca9928a76ca680
+DIST wezterm-dynamic-0.2.1.crate 11528 BLAKE2B abaea601dcfede5ed51af4c2485694e12fa1e0975c54da76058cce0e94e1d15444e8751f00dd1d9969edb3f4516fc66091938d71337c8ab5bca79d7f04eec9b8 SHA512 77d0eb8b455639e66ff1ba6805c59990696fc73829ade3b7083ddda42503e84e666dd7c88790f807063b272c970c2aaee98fb6ee0c6210da68d9b2cb73e3133d
+DIST wezterm-dynamic-derive-0.1.1.crate 6960 BLAKE2B 79cfffff56d05eb7dacc55ca4158f973a9511953c711a1cf8ddd65b3bb21e43417c46613d0b53ccbd3f77c185e7e0a31fc867e5218a0f2a417e2b309c9177d88 SHA512 9d7941de94bb9c358c27f3ab4cc8283a02beb29f6daecf69b196d599b2ad9aff2032d43e7623bf30bff8bc9239ff3dc9baf1dac9ac99cf34c3f5e17227757808
+DIST wezterm-input-types-0.1.0.crate 16748 BLAKE2B c88a8baef405d73c74466cb75f3e4fe03eefba0dbed3276da95727e5cb4444f03f891f23707e58547a782cb89a4504a8fe7daf623026ba6608ccbb898cae2d3a SHA512 55eac90c5757b2439d720b6a3dd95760e9b7fad695e7261f9f5be2e5d8eb74a875a95d6a7746d6d4291187f7d171e2ddfca9ac04784604436b7bc6947dbd12e8
+DIST winapi-0.3.9.crate 1200382 BLAKE2B cb5799749ccd935ea2d7068d953cecf19f543d9db7dc16ad4584bb7005373ada34937a3ced7225544d8bc765da599911c7a3190efefb3a25b7c1bb7123b4f673 SHA512 ff8b7b78065f3d8999ec03c725a0460ebc059771bf071c7a3df3f0ecd733edf3b0a2450024d4e24e1aedddaecd9038ce1376c0d8bbf45132068cf45cf4a53a97
+DIST winapi-i686-pc-windows-gnu-0.4.0.crate 2918815 BLAKE2B 4d357e4d30f9552972170d65b9a5358b69c46a3e772fe05efc22f3d4ffc1caeeaad7aacdc7abd503a7ad0545f8bd7d22bf351dcb6df76f812fa4d45c34d65df0 SHA512 a672ccefd0730a8166fef1d4e39f9034d9ae426a3f5e28d1f4169fa5c5790767693f281d890e7804773b34acdb0ae1febac33cde8c50c0044a5a6152c7209ec2
+DIST winapi-x86_64-pc-windows-gnu-0.4.0.crate 2947998 BLAKE2B 2ad1ea8b5fa07d544e910ccba043ae925269b76b26c9da356305b34b86741dd8b9aff0b9ffe3d562db4fcd7d7c46a11ce9e3168b782b1d89ae6881742b7ede82 SHA512 4a654af6a5d649dc87e00497245096b35a2894ae66f155cb62389902c3b93ddcc5cf7d0d8b9dd97b291d2d80bc686af2298e80abef6ac69883f4a54e79712513
+DIST windows-link-0.2.1.crate 6133 BLAKE2B d1ca714178e6fe12bb3b4caeed9a52a36890989e77ae2dcd6f2d18ae4a21fb8479d304cdff63bb0a5f28acf44eaf104821cff83cd66b3a0406a5f33a800e3641 SHA512 afb0c87beb8914fd9a3e52db6f2f64a840470b9751b66c83892c24cb1c46cda63fb16b1aeafcaa5a1fc7c5ba01da46be63e5227cc108dede8b0bd27785498a6b
+DIST windows-sys-0.59.0.crate 2387323 BLAKE2B 3110c8cd2bc005f8c95cd038a8d574af648dc19788fe4485f977376f92e36b911b1a542d669a07ae9cd4ea72a884ab01ec78b8a2b5587456eb202452d1d8fa0d SHA512 d35e009e979633a1f3c8468cd038bd5c8c0381405165ce03497decd7d9edaaac485d704487e4a61d9aaf4e4d011b4248408912df6a0044d50e8457259867e061
+DIST windows-sys-0.60.2.crate 2518479 BLAKE2B c2e2f614066e5a9d7ec461d9d25bd441188797ad85e1e923baeb0193e82f5c138ae7fb4ad0255d483f60f7a94e3f5cd8373d01b7485c052c9498937bc40da992 SHA512 a48aa1b66479451e431032737b63dc62eac6f63c251534e258de75bbee4858829faf5e641756566f00e153b08548ba32beb437b5ea42e9531e3fcbd8eb25209d
+DIST windows-sys-0.61.2.crate 2517186 BLAKE2B f4eab0b365aa1df8a353d634da5081237bef0f7b69f02ffcaba232a688e59dfe877c47114de64c81e3cbb929c2fea1143ed6bda56ce935e66d871a993ac29106 SHA512 e6c8f61f0724dafca7821ee9b9c07237ccfee69be269be2fa7318eb48b151285ecf63e860aa1fe303639222fe11268e3773f37c2dd79f923029af58c645edb3f
+DIST windows-targets-0.52.6.crate 6403 BLAKE2B eb98d0a8daeed5fe76e7fa8edb2743e2a3e77dfb9c4ea68605a6ab10532cb7cfc43bc1cea0180869445bd940be762a40136500e26b84ca88b5e0c502004c7a4c SHA512 d6d2dbd96096c6c396dba141a9817e377c35877f3b2fe58b2553280c7cfcb1ed6ee75bd4d62c9b882662de67ddaf0c1049b91530d29c94dd709c230e08eb895f
+DIST windows-targets-0.53.5.crate 7126 BLAKE2B 17a0452fe72a42df4aec8b4ae7798bd611df4f3b093709aee7b8dc991fbc2351edd23e134d12412fb47e9930ae30476b55841d52be5e764fc42a7922e3134ad3 SHA512 285a2ad1c370d8485a84c3921b180416c79ad596ace5ce30a1100fe0d9725139e9302f5728d4874789d8abe5c53e9b30ff4738d969da1c07940bde2b01c7a203
+DIST windows_aarch64_gnullvm-0.52.6.crate 435718 BLAKE2B 8b12ae02892cb69401329034bbca671d13bd268a112120b56b90504707cef89decfbd2560492844a9f0588fab62dc1476ab7e931126b939015d25a8cc91ca334 SHA512 f62b2d942bdb3a9353465b07d47b93de179bb706511aa497e4addd74cff95e689a9b633e7801ce786e73b5ae5f30b506b6faa199c5ab86eefdc1d94652df79c5
+DIST windows_aarch64_gnullvm-0.53.1.crate 787748 BLAKE2B 78729e1107cf64ffc6a3d70c14cc93e7867578be51d3f6f442914a5f2d065fa86be843b72cd24d707eb59b779e9a719eb28d025619cdc219e379827acb4a16c2 SHA512 5e480e54af09c142ff75e77f733327dd3862f32620e0b075e02bf8119e955ef2f3acfa00f7c7a4d6a2b034d03d70c45e191a40c8af628484d0e76a0b15870cdc
+DIST windows_aarch64_msvc-0.52.6.crate 832615 BLAKE2B adc8ff61b6dc96d39c92c7d4221ae6aa0575edfc016cfcd046067ca5d8fcfd56d10e8e227be1c038ce34684be22c7ccaf5f18cd5a7638d28fbff4ba15b48b90b SHA512 a3e21305ad0e6de38f5b5ed5d37ee5825b7521064163bcdf31d63341cd87983f54377865d2daf3bb480d2d0aa66d6f598fa09540ec1d71baea74569c86bd213b
+DIST windows_aarch64_msvc-0.53.1.crate 838009 BLAKE2B 0a04f6d80bd0ab41964e9932040d6c748b6bf10d609bdd35074ba26d245a98281739c8ac68a3fe251d36148a53e1730b0ea2dd5347279e74dea881be43d67707 SHA512 81175036792cab41ede4e3a21ae324e638c39604e14c7a3dae8db4090cec45b385aca32416ccad50ab194ce06d3a71f2e12473767d680348795383dbb2d17426
+DIST windows_i686_gnu-0.52.6.crate 880402 BLAKE2B 5aab8ee07132eccb7695807eb44811beeb0657aadfb672c54e99b6ae39c067ba9b93e38fc69bb5b9b14a9759f263ccd5e301597d2727d83b31b49a409b6bd405 SHA512 a1f6b5dd23d17ec3567bc9d11a4be6f35e196eee21ca342e9b88dbaa6a5f7c46e439c834b77e724f32ac22c0d81573746b3b513a6c944a221b92b2c76fe98822
+DIST windows_i686_gnu-0.53.1.crate 939775 BLAKE2B c6abfbe7b82c7fd95a483da467ce8f12a3777572e34c42777e6378976344c95e5a56e3e7ae47049e14de81aa26f276a723ac5cb61f2c62b141020a97a91f137b SHA512 5af8519d1e0d9947738d5aa339091695467a55b62fe97bac680eb469679180a54e9f65e2ef8d0c34d4e63ede8c16f34a0fbd1f54ff53924ebcd6cef17c3474d2
+DIST windows_i686_gnullvm-0.52.6.crate 475940 BLAKE2B fec4fda8bb2bf319a501a22372fa642ae682e4dee3235b258a028190ee73220bfc55b3142f06249bb4579b17e5fde662bb2b121aefe18544653350d7d0fe7d8e SHA512 95f13af855d530acc0b856214478d4b11b8dbab3f8f79dd223d0b009790c0e46d096fc1773e0277997deb2d5b96c704f17f23c7df11411524629f75415dec99f
+DIST windows_i686_gnullvm-0.53.1.crate 857396 BLAKE2B 4fcc61c3634d7b905c946ccaa2f6d03ccf0feb6f8080337d5618959a532fddd5989dbc95d8559bbfb06335865387900e7cfe942cfb67a7724c3c00dc99b1d603 SHA512 492bee10b669c799a93b7ad98ee7a15c0ccde4d13697408612cd345cca2b7efc38b85c550eaf1b83470bee53ff3324045b7b751c3a31ac0e214b9965e05bbffc
+DIST windows_i686_msvc-0.52.6.crate 901163 BLAKE2B 99ed34e052db5ba77bab240ed5d38ce450be347a794d63ec39b719304c32722c9999b540ab40abe0216318900b7412970df99dfb36d1516a9517cae0c77d1bdc SHA512 ca97913ce202d73266cf55947b868bea7e964a4516b6a096a81aeab6a60ee73867171032ced35e3afccff741ddfb2def7468343b6eceb95253e4d4f349efbf96
+DIST windows_i686_msvc-0.53.1.crate 907688 BLAKE2B f6ae6032836367e9a42261779661abd028d303cfb13c016dd1a745b21b58d62531dd0d7658a6c133d2bf1dd95c538cf24340bb50e6743a82d6be9a622ff371b7 SHA512 b78f2a21e88adb65bf8a81bfa8a133d6ebe18b8394220421bd5f10b619528f118a255dacf6e78014ddb4db8a27b936be7af6e137133d914e1cc0902139a0e0cd
+DIST windows_x86_64_gnu-0.52.6.crate 836363 BLAKE2B e2335829155cdbd4a55cc9f9babc237e14e32aab97f6f91afabcdf80d2aee37d6fb4b8669aaf433ff532c85dba59b3d366c7d41b61a2f29b96f960169c900687 SHA512 c4086bb0280042f2bef9b556283b67f8a5cacddd209e1c5fabec63decec6d4fd2d6a7071407973981b98ae0c0cf7034fc612f9e70dc6d3eed9acdec771ae31cb
+DIST windows_x86_64_gnu-0.53.1.crate 903712 BLAKE2B b5a86bd4a760fb6d937dc5285d2c594245ed6bbc541ffd6cf6d169c7e4e8c4334523c06c7a59c52f100a05da7976193fbb535ff3bf7db30897d9940d4d5648a4 SHA512 e4c5bbc49202636c03953aa0fff1f1affed69970aae198cb4d1eeb5dda63b9e07b0cfaf46015bca3b8c48fd90d3552488a6a7b17b53aebf9776e996ccbf9c7d5
+DIST windows_x86_64_gnullvm-0.52.6.crate 435707 BLAKE2B ab77dccd06328cdb00175f41cdbc120594050a9678b7f9820444391fb50aada3911a91ea00f3a6db2b4fa1820fd23bc9a007dfbe65ad41417c26ee1137ef9b96 SHA512 67681f5859e249c56b0183181811f6212cc7008d6471dad78aecc7ebe3d027686b19210b8aa9014c554410f69f913d21ce2aca928eea905eab779bea26464cbd
+DIST windows_x86_64_gnullvm-0.53.1.crate 787739 BLAKE2B b5e3aaba4ecd1e5e21a0b9ce5beaad3f9ef78249f21b3dbdb69af98d5f36d01f2ce65d3188788392b866f296548075857e2f904e30cb79db33fb3134fd78e946 SHA512 30b8919ee9ad36acfac4e28a3b22378ce11ee73d35de60dd9c9217adf14e85222da5526100b0252372e039e559a5bf734ba134b10f707657d542341056947588
+DIST windows_x86_64_msvc-0.52.6.crate 832564 BLAKE2B 8e9a3044654c6de99a9153e7cacd575474e7a8a3d883c67b02132af5d3fc99d03cd5f7a4dd666a3947451d11218e6acc6eb5e2526f012481106cc13453839719 SHA512 21944cd8e3a481b514509e73ae3f62722fe7ed380d37ea0c25f8fbdeba79174dd52ff65d898838da5df4197894b74e00f45d47489418e978753b4e55c7e623e7
+DIST windows_x86_64_msvc-0.53.1.crate 837950 BLAKE2B 5775d30ce763835fa26376d85e9ae6f598b817b8d32b01147e5d197c364a5071ce7b5b09ee6f611fcf30790af79c4e4282e04ced620190629eebcbccabb8d720 SHA512 bb724f4051db90ce49b552021e746769e5dfe3792b522416539960c27f9ace14f63c47f0f240d6563257377129b5f3ba2c262c6fea9610428aa860fe035f189c
+DIST winnow-0.7.13.crate 174454 BLAKE2B 037d07cc421502502b5fc99e2640e3d78b476229071ba44252da52e368f9a46607b6fd3b6e0c0be2f201beb7502850ae01ddf24e0fdb4f4585c05805bcbd19b2 SHA512 dd8b5fb359f894e17e4737d29ae9629125d2f9578abdbfd5214c333be8faa2860f5345e4383f207129ac4f0e6e419d681c59375ba8b78604e9230835d77867ab
+DIST winnow-0.7.14.crate 184718 BLAKE2B 6bff099d199831a72ff677db3e4de2feaa5a0b6aad782051c9af629459faebcd131518e20d6bb8f3f7f44b708284e6ba54f2ad7e0811bc0bf1df89899ff561c1 SHA512 ffa96e23707d87d5bf0f0e0c8aefbbbe4e3d2219fa5fd6a1535cb3c7b049a8481ef6f9f9fd69c78be855f36b242476f3b4462f2536925d48953afebe00bb50cb
+DIST wit-bindgen-0.46.0.crate 60508 BLAKE2B 4422fb47880ecd70749d615ea6ed0a8bcb5941bd9de2c2164a6f1248574363408fcb634e0e9aa0af3e0f278c9311a81212818dff70ef39614646ffdd646b1fe7 SHA512 5d37ac5855797cfb906c983a70780d7cd29d70c4e5b6e54328fc18297feeb89ceda0aa732123280a12610015fbdb42bcd76aae12b1debb281b0a848016134548
+DIST wit-bindgen-0.51.0.crate 68035 BLAKE2B 0cb5e191f866c3782b6a1e822ecbae6e618e08371867462addb027dd5510638e72438d991777877d5754b2932afcb41f2edc1ec1426334a69311905f0f309b6a SHA512 61380c309630ad7f415d467daf1d639ad7a3e8dcd26e5f88aacf0230b52600f150e804821b6a1df9b79cc7fdd4f1d800d043ee7eca770b1947a3cf06f893711e
+DIST xterm-query-0.5.2.crate 7398 BLAKE2B f44829f885ccc8d3dc71bce77b3c1910d9bbacb689baba22ab8242658d7723c0a085102e3713a2a8ca590d2c55bf44846565e12e43908f98416ef986140efdee SHA512 b750d61cf042d8a91b9c47e337cac0f16186409feff6681c1b021820b1fb6a928e117b0b393eabce91d586c1fd9042ffe93b836e6b152c8bd30c54c52ac69788
+DIST zmij-1.0.14.crate 23701 BLAKE2B 50aa01fd5b7bd2289ac3687473ac285b954f92691f05e208d0661c892fe12c1e8ae73b0bef3c7bb3e908e22698570a5b456100cbc0875210213c080c483c3647 SHA512 4b692bfd003d5e998e0a95bfe077788a5870ff9a00200619cf6320199c60e6087c7bacd84bccd22acffb8482df952233cee323b95126a9b37f45dae41373d6c2
diff --git a/net-wireless/bluetui/bluetui-0.7.2.ebuild b/net-wireless/bluetui/bluetui-0.7.2.ebuild
new file mode 100644
index 000000000000..700e23d5ce1b
--- /dev/null
+++ b/net-wireless/bluetui/bluetui-0.7.2.ebuild
@@ -0,0 +1,307 @@
+# Copyright 2025 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+# Autogenerated by pycargoebuild 0.15.0
+
+EAPI=8
+
+CRATES="
+ aho-corasick@1.1.4
+ allocator-api2@0.2.21
+ anstream@0.6.21
+ anstyle-parse@0.2.7
+ anstyle-query@1.1.4
+ anstyle-wincon@3.0.10
+ anstyle@1.0.13
+ anyhow@1.0.100
+ async-channel@2.5.0
+ atomic@0.6.1
+ autocfg@1.5.0
+ base64@0.22.1
+ bit-set@0.5.3
+ bit-vec@0.6.3
+ bitflags@1.3.2
+ bitflags@2.10.0
+ block-buffer@0.10.4
+ bluer@0.17.4
+ bumpalo@3.19.0
+ bytemuck@1.24.0
+ bytes@1.10.1
+ cassowary@0.3.0
+ castaway@0.2.4
+ cfg-if@1.0.4
+ cfg_aliases@0.2.1
+ clap@4.5.51
+ clap_builder@4.5.51
+ clap_derive@4.5.49
+ clap_lex@0.7.6
+ colorchoice@1.0.4
+ compact_str@0.8.1
+ compact_str@0.9.0
+ concurrent-queue@2.5.0
+ convert_case@0.7.1
+ coolor@1.1.0
+ cpufeatures@0.2.17
+ crossbeam-utils@0.8.21
+ crossterm@0.28.1
+ crossterm@0.29.0
+ crossterm_winapi@0.9.1
+ crypto-common@0.1.6
+ csscolorparser@0.6.2
+ custom_debug@0.6.2
+ custom_debug_derive@0.6.2
+ darling@0.20.11
+ darling_core@0.20.11
+ darling_macro@0.20.11
+ dbus-crossroads@0.5.2
+ dbus-tokio@0.7.6
+ dbus@0.9.9
+ deltae@0.3.2
+ deranged@0.5.5
+ derive_more-impl@2.0.1
+ derive_more@2.0.1
+ digest@0.10.7
+ dirs-sys@0.5.0
+ dirs@6.0.0
+ displaydoc@0.2.5
+ document-features@0.2.12
+ either@1.15.0
+ equivalent@1.0.2
+ errno@0.3.14
+ euclid@0.22.11
+ event-listener-strategy@0.5.4
+ event-listener@5.4.1
+ fancy-regex@0.11.0
+ filedescriptor@0.8.3
+ finl_unicode@1.4.0
+ fixedbitset@0.4.2
+ fnv@1.0.7
+ foldhash@0.1.5
+ foldhash@0.2.0
+ futures-channel@0.3.31
+ futures-core@0.3.31
+ futures-executor@0.3.31
+ futures-io@0.3.31
+ futures-macro@0.3.31
+ futures-sink@0.3.31
+ futures-task@0.3.31
+ futures-util@0.3.31
+ futures@0.3.31
+ generic-array@0.14.9
+ getrandom@0.2.16
+ getrandom@0.3.4
+ hashbrown@0.15.5
+ hashbrown@0.16.0
+ heck@0.5.0
+ hex@0.4.3
+ ident_case@1.0.1
+ indexmap@2.12.0
+ indoc@2.0.7
+ instability@0.3.9
+ is_terminal_polyfill@1.70.2
+ itertools@0.13.0
+ itertools@0.14.0
+ itoa@1.0.15
+ js-sys@0.3.82
+ kasuari@0.4.10
+ lab@0.11.0
+ lazy_static@1.5.0
+ libc@0.2.177
+ libdbus-sys@0.2.6
+ libredox@0.1.10
+ line-clipping@0.3.4
+ linux-raw-sys@0.11.0
+ linux-raw-sys@0.4.15
+ litrs@1.0.0
+ lock_api@0.4.14
+ log@0.4.28
+ lru@0.12.5
+ lru@0.16.2
+ mac_address@1.1.8
+ macaddr@1.0.1
+ memchr@2.7.6
+ memmem@0.1.1
+ memoffset@0.9.1
+ minimal-lexical@0.2.1
+ mio@1.1.0
+ nix@0.29.0
+ nom@7.1.3
+ num-conv@0.1.0
+ num-derive@0.4.2
+ num-traits@0.2.19
+ num_threads@0.1.7
+ once_cell@1.21.3
+ once_cell_polyfill@1.70.2
+ option-ext@0.2.0
+ ordered-float@4.6.0
+ parking@2.2.1
+ parking_lot@0.12.5
+ parking_lot_core@0.9.12
+ paste@1.0.15
+ pest@2.8.3
+ pest_derive@2.8.3
+ pest_generator@2.8.3
+ pest_meta@2.8.3
+ phf@0.11.3
+ phf_codegen@0.11.3
+ phf_generator@0.11.3
+ phf_macros@0.11.3
+ phf_shared@0.11.3
+ pin-project-internal@1.1.10
+ pin-project-lite@0.2.16
+ pin-project@1.1.10
+ pin-utils@0.1.0
+ pkg-config@0.3.32
+ portable-atomic@1.11.1
+ powerfmt@0.2.0
+ proc-macro2@1.0.103
+ quote@1.0.41
+ r-efi@5.3.0
+ rand@0.8.5
+ rand_core@0.6.4
+ ratatui-core@0.1.0-beta.0
+ ratatui-crossterm@0.1.0-beta.0
+ ratatui-macros@0.7.0-beta.0
+ ratatui-termwiz@0.1.0-beta.0
+ ratatui-widgets@0.3.0-beta.0
+ ratatui@0.29.0
+ ratatui@0.30.0-beta.0
+ redox_syscall@0.5.18
+ redox_users@0.5.2
+ regex-automata@0.4.13
+ regex-syntax@0.8.8
+ regex@1.12.2
+ rustix@0.38.44
+ rustix@1.1.2
+ rustversion@1.0.22
+ ryu@1.0.20
+ scopeguard@1.2.0
+ serde@1.0.228
+ serde_core@1.0.228
+ serde_derive@1.0.228
+ serde_json@1.0.145
+ serde_spanned@1.0.3
+ sha2@0.10.9
+ signal-hook-mio@0.2.5
+ signal-hook-registry@1.4.6
+ signal-hook@0.3.18
+ siphasher@1.0.1
+ slab@0.4.11
+ smallvec@1.15.1
+ socket2@0.6.1
+ static_assertions@1.1.0
+ strsim@0.11.1
+ strum@0.26.3
+ strum@0.27.2
+ strum_macros@0.26.4
+ strum_macros@0.27.2
+ syn@1.0.109
+ syn@2.0.108
+ synstructure@0.13.2
+ terminal-light@1.8.0
+ terminfo@0.9.0
+ termios@0.3.3
+ termwiz@0.23.3
+ thiserror-impl@1.0.69
+ thiserror-impl@2.0.17
+ thiserror@1.0.69
+ thiserror@2.0.17
+ time-core@0.1.6
+ time@0.3.44
+ tokio-macros@2.6.0
+ tokio-stream@0.1.17
+ tokio@1.48.0
+ toml@0.9.8
+ toml_datetime@0.7.3
+ toml_parser@1.0.4
+ toml_writer@1.0.4
+ tui-input@0.12.1
+ typenum@1.19.0
+ ucd-trie@0.1.7
+ unicode-ident@1.0.22
+ unicode-segmentation@1.12.0
+ unicode-truncate@1.1.0
+ unicode-truncate@2.0.0
+ unicode-width@0.1.14
+ unicode-width@0.2.0
+ utf8parse@0.2.2
+ uuid@1.18.1
+ version_check@0.9.5
+ vtparse@0.6.2
+ wasi@0.11.1+wasi-snapshot-preview1
+ wasip2@1.0.1+wasi-0.2.4
+ wasm-bindgen-macro-support@0.2.105
+ wasm-bindgen-macro@0.2.105
+ wasm-bindgen-shared@0.2.105
+ wasm-bindgen@0.2.105
+ wezterm-bidi@0.2.3
+ wezterm-blob-leases@0.1.1
+ wezterm-color-types@0.3.0
+ wezterm-dynamic-derive@0.1.1
+ wezterm-dynamic@0.2.1
+ wezterm-input-types@0.1.0
+ winapi-i686-pc-windows-gnu@0.4.0
+ winapi-x86_64-pc-windows-gnu@0.4.0
+ winapi@0.3.9
+ windows-link@0.2.1
+ windows-sys@0.59.0
+ windows-sys@0.60.2
+ windows-sys@0.61.2
+ windows-targets@0.52.6
+ windows-targets@0.53.5
+ windows_aarch64_gnullvm@0.52.6
+ windows_aarch64_gnullvm@0.53.1
+ windows_aarch64_msvc@0.52.6
+ windows_aarch64_msvc@0.53.1
+ windows_i686_gnu@0.52.6
+ windows_i686_gnu@0.53.1
+ windows_i686_gnullvm@0.52.6
+ windows_i686_gnullvm@0.53.1
+ windows_i686_msvc@0.52.6
+ windows_i686_msvc@0.53.1
+ windows_x86_64_gnu@0.52.6
+ windows_x86_64_gnu@0.53.1
+ windows_x86_64_gnullvm@0.52.6
+ windows_x86_64_gnullvm@0.53.1
+ windows_x86_64_msvc@0.52.6
+ windows_x86_64_msvc@0.53.1
+ winnow@0.7.13
+ wit-bindgen@0.46.0
+ xterm-query@0.5.2
+"
+
+RUST_MIN_VER="1.85.0"
+
+inherit desktop cargo
+
+DESCRIPTION="TUI for managing bluetooth on Linux"
+HOMEPAGE="https://github.com/pythops/bluetui"
+SRC_URI="
+ https://github.com/pythops/bluetui/archive/refs/tags/v${PV}.tar.gz -> ${P}.tar.gz
+ ${CARGO_CRATE_URIS}
+"
+
+LICENSE="GPL-3"
+# Dependent crate licenses
+LICENSE+="
+ BSD-2 MIT MPL-2.0 Unicode-3.0 Unicode-DFS-2016 WTFPL-2 ZLIB
+ || ( Apache-2.0 Boost-1.0 )
+"
+SLOT="0"
+KEYWORDS="~amd64"
+
+QA_FLAGS_IGNORED="usr/bin/bluetui"
+QA_PRESTRIPPED="usr/bin/bluetui"
+
+DOCS=(
+ Readme.md
+ Release.md
+)
+
+src_install() {
+ cargo_src_install
+
+ dodoc -r "${DOCS[@]}"
+ domenu bluetui.desktop
+ doicon assets/bluetui-logo-anim.svg
+}
diff --git a/net-wireless/bluetui/bluetui-0.8.0.ebuild b/net-wireless/bluetui/bluetui-0.8.0.ebuild
new file mode 100644
index 000000000000..1aac372256a8
--- /dev/null
+++ b/net-wireless/bluetui/bluetui-0.8.0.ebuild
@@ -0,0 +1,304 @@
+# Copyright 2025 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+# Autogenerated by pycargoebuild 0.15.0
+
+EAPI=8
+
+CRATES="
+ aho-corasick@1.1.4
+ allocator-api2@0.2.21
+ anstream@0.6.21
+ anstyle-parse@0.2.7
+ anstyle-query@1.1.5
+ anstyle-wincon@3.0.11
+ anstyle@1.0.13
+ anyhow@1.0.100
+ async-channel@2.5.0
+ atomic@0.6.1
+ autocfg@1.5.0
+ base64@0.22.1
+ bit-set@0.5.3
+ bit-vec@0.6.3
+ bitflags@1.3.2
+ bitflags@2.10.0
+ block-buffer@0.10.4
+ bluer@0.17.4
+ bumpalo@3.19.0
+ bytemuck@1.24.0
+ bytes@1.10.1
+ cassowary@0.3.0
+ castaway@0.2.4
+ cfg-if@1.0.4
+ cfg_aliases@0.2.1
+ clap@4.5.51
+ clap_builder@4.5.51
+ clap_derive@4.5.49
+ clap_lex@0.7.6
+ colorchoice@1.0.4
+ compact_str@0.8.1
+ compact_str@0.9.0
+ concurrent-queue@2.5.0
+ convert_case@0.7.1
+ cpufeatures@0.2.17
+ crossbeam-utils@0.8.21
+ crossterm@0.28.1
+ crossterm@0.29.0
+ crossterm_winapi@0.9.1
+ crypto-common@0.1.7
+ csscolorparser@0.6.2
+ custom_debug@0.6.2
+ custom_debug_derive@0.6.2
+ darling@0.20.11
+ darling_core@0.20.11
+ darling_macro@0.20.11
+ dbus-crossroads@0.5.2
+ dbus-tokio@0.7.6
+ dbus@0.9.9
+ deltae@0.3.2
+ deranged@0.5.5
+ derive_more-impl@2.0.1
+ derive_more@2.0.1
+ digest@0.10.7
+ dirs-sys@0.5.0
+ dirs@6.0.0
+ displaydoc@0.2.5
+ document-features@0.2.12
+ either@1.15.0
+ equivalent@1.0.2
+ errno@0.3.14
+ euclid@0.22.11
+ event-listener-strategy@0.5.4
+ event-listener@5.4.1
+ fancy-regex@0.11.0
+ filedescriptor@0.8.3
+ finl_unicode@1.4.0
+ fixedbitset@0.4.2
+ fnv@1.0.7
+ foldhash@0.1.5
+ foldhash@0.2.0
+ futures-channel@0.3.31
+ futures-core@0.3.31
+ futures-executor@0.3.31
+ futures-io@0.3.31
+ futures-macro@0.3.31
+ futures-sink@0.3.31
+ futures-task@0.3.31
+ futures-util@0.3.31
+ futures@0.3.31
+ generic-array@0.14.7
+ getrandom@0.2.16
+ getrandom@0.3.4
+ hashbrown@0.15.5
+ hashbrown@0.16.0
+ heck@0.5.0
+ hex@0.4.3
+ ident_case@1.0.1
+ indexmap@2.12.0
+ indoc@2.0.7
+ instability@0.3.9
+ is_terminal_polyfill@1.70.2
+ itertools@0.13.0
+ itertools@0.14.0
+ itoa@1.0.15
+ js-sys@0.3.82
+ kasuari@0.4.10
+ lab@0.11.0
+ lazy_static@1.5.0
+ libc@0.2.177
+ libdbus-sys@0.2.6
+ libredox@0.1.10
+ line-clipping@0.3.4
+ linux-raw-sys@0.11.0
+ linux-raw-sys@0.4.15
+ litrs@1.0.0
+ lock_api@0.4.14
+ log@0.4.28
+ lru@0.12.5
+ lru@0.16.2
+ mac_address@1.1.8
+ macaddr@1.0.1
+ memchr@2.7.6
+ memmem@0.1.1
+ memoffset@0.9.1
+ minimal-lexical@0.2.1
+ mio@1.1.0
+ nix@0.29.0
+ nom@7.1.3
+ num-conv@0.1.0
+ num-derive@0.4.2
+ num-traits@0.2.19
+ num_threads@0.1.7
+ once_cell@1.21.3
+ once_cell_polyfill@1.70.2
+ option-ext@0.2.0
+ ordered-float@4.6.0
+ parking@2.2.1
+ parking_lot@0.12.5
+ parking_lot_core@0.9.12
+ paste@1.0.15
+ pest@2.8.3
+ pest_derive@2.8.3
+ pest_generator@2.8.3
+ pest_meta@2.8.3
+ phf@0.11.3
+ phf_codegen@0.11.3
+ phf_generator@0.11.3
+ phf_macros@0.11.3
+ phf_shared@0.11.3
+ pin-project-internal@1.1.10
+ pin-project-lite@0.2.16
+ pin-project@1.1.10
+ pin-utils@0.1.0
+ pkg-config@0.3.32
+ portable-atomic@1.11.1
+ powerfmt@0.2.0
+ proc-macro2@1.0.103
+ quote@1.0.42
+ r-efi@5.3.0
+ rand@0.8.5
+ rand_core@0.6.4
+ ratatui-core@0.1.0-beta.0
+ ratatui-crossterm@0.1.0-beta.0
+ ratatui-macros@0.7.0-beta.0
+ ratatui-termwiz@0.1.0-beta.0
+ ratatui-widgets@0.3.0-beta.0
+ ratatui@0.29.0
+ ratatui@0.30.0-beta.0
+ redox_syscall@0.5.18
+ redox_users@0.5.2
+ regex-automata@0.4.13
+ regex-syntax@0.8.8
+ regex@1.12.2
+ rustix@0.38.44
+ rustix@1.1.2
+ rustversion@1.0.22
+ ryu@1.0.20
+ scopeguard@1.2.0
+ serde@1.0.228
+ serde_core@1.0.228
+ serde_derive@1.0.228
+ serde_json@1.0.145
+ serde_spanned@1.0.3
+ sha2@0.10.9
+ signal-hook-mio@0.2.5
+ signal-hook-registry@1.4.6
+ signal-hook@0.3.18
+ siphasher@1.0.1
+ slab@0.4.11
+ smallvec@1.15.1
+ socket2@0.6.1
+ static_assertions@1.1.0
+ strsim@0.11.1
+ strum@0.26.3
+ strum@0.27.2
+ strum_macros@0.26.4
+ strum_macros@0.27.2
+ syn@1.0.109
+ syn@2.0.110
+ synstructure@0.13.2
+ terminfo@0.9.0
+ termios@0.3.3
+ termwiz@0.23.3
+ thiserror-impl@1.0.69
+ thiserror-impl@2.0.17
+ thiserror@1.0.69
+ thiserror@2.0.17
+ time-core@0.1.6
+ time@0.3.44
+ tokio-macros@2.6.0
+ tokio-stream@0.1.17
+ tokio@1.48.0
+ toml@0.9.8
+ toml_datetime@0.7.3
+ toml_parser@1.0.4
+ toml_writer@1.0.4
+ tui-input@0.12.1
+ typenum@1.19.0
+ ucd-trie@0.1.7
+ unicode-ident@1.0.22
+ unicode-segmentation@1.12.0
+ unicode-truncate@1.1.0
+ unicode-truncate@2.0.0
+ unicode-width@0.1.14
+ unicode-width@0.2.0
+ utf8parse@0.2.2
+ uuid@1.18.1
+ version_check@0.9.5
+ vtparse@0.6.2
+ wasi@0.11.1+wasi-snapshot-preview1
+ wasip2@1.0.1+wasi-0.2.4
+ wasm-bindgen-macro-support@0.2.105
+ wasm-bindgen-macro@0.2.105
+ wasm-bindgen-shared@0.2.105
+ wasm-bindgen@0.2.105
+ wezterm-bidi@0.2.3
+ wezterm-blob-leases@0.1.1
+ wezterm-color-types@0.3.0
+ wezterm-dynamic-derive@0.1.1
+ wezterm-dynamic@0.2.1
+ wezterm-input-types@0.1.0
+ winapi-i686-pc-windows-gnu@0.4.0
+ winapi-x86_64-pc-windows-gnu@0.4.0
+ winapi@0.3.9
+ windows-link@0.2.1
+ windows-sys@0.59.0
+ windows-sys@0.60.2
+ windows-sys@0.61.2
+ windows-targets@0.52.6
+ windows-targets@0.53.5
+ windows_aarch64_gnullvm@0.52.6
+ windows_aarch64_gnullvm@0.53.1
+ windows_aarch64_msvc@0.52.6
+ windows_aarch64_msvc@0.53.1
+ windows_i686_gnu@0.52.6
+ windows_i686_gnu@0.53.1
+ windows_i686_gnullvm@0.52.6
+ windows_i686_gnullvm@0.53.1
+ windows_i686_msvc@0.52.6
+ windows_i686_msvc@0.53.1
+ windows_x86_64_gnu@0.52.6
+ windows_x86_64_gnu@0.53.1
+ windows_x86_64_gnullvm@0.52.6
+ windows_x86_64_gnullvm@0.53.1
+ windows_x86_64_msvc@0.52.6
+ windows_x86_64_msvc@0.53.1
+ winnow@0.7.13
+ wit-bindgen@0.46.0
+"
+
+RUST_MIN_VER="1.85.0"
+
+inherit desktop cargo
+
+DESCRIPTION="TUI for managing bluetooth on Linux"
+HOMEPAGE="https://github.com/pythops/bluetui"
+SRC_URI="
+ https://github.com/pythops/bluetui/archive/refs/tags/v${PV}.tar.gz -> ${P}.tar.gz
+ ${CARGO_CRATE_URIS}
+"
+
+LICENSE="GPL-3"
+# Dependent crate licenses
+LICENSE+="
+ BSD-2 MIT MPL-2.0 Unicode-3.0 Unicode-DFS-2016 WTFPL-2 ZLIB
+ || ( Apache-2.0 Boost-1.0 )
+"
+SLOT="0"
+KEYWORDS="~amd64"
+
+QA_FLAGS_IGNORED="usr/bin/bluetui"
+QA_PRESTRIPPED="usr/bin/bluetui"
+
+DOCS=(
+ Readme.md
+ Release.md
+)
+
+src_install() {
+ cargo_src_install
+
+ dodoc -r "${DOCS[@]}"
+ domenu bluetui.desktop
+ doicon assets/bluetui-logo-anim.svg
+}
diff --git a/net-wireless/bluetui/bluetui-0.8.1.ebuild b/net-wireless/bluetui/bluetui-0.8.1.ebuild
new file mode 100644
index 000000000000..0412623c2439
--- /dev/null
+++ b/net-wireless/bluetui/bluetui-0.8.1.ebuild
@@ -0,0 +1,300 @@
+# Copyright 2025-2026 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+# Autogenerated by pycargoebuild 0.15.0
+
+EAPI=8
+
+CRATES="
+ aho-corasick@1.1.4
+ allocator-api2@0.2.21
+ anstream@0.6.21
+ anstyle-parse@0.2.7
+ anstyle-query@1.1.5
+ anstyle-wincon@3.0.11
+ anstyle@1.0.13
+ anyhow@1.0.100
+ async-channel@2.5.0
+ atomic@0.6.1
+ autocfg@1.5.0
+ base64@0.22.1
+ bit-set@0.5.3
+ bit-vec@0.6.3
+ bitflags@1.3.2
+ bitflags@2.10.0
+ block-buffer@0.10.4
+ bluer@0.17.4
+ bumpalo@3.19.1
+ bytemuck@1.24.0
+ bytes@1.11.0
+ castaway@0.2.4
+ cc@1.2.53
+ cfg-if@1.0.4
+ cfg_aliases@0.2.1
+ clap@4.5.54
+ clap_builder@4.5.54
+ clap_derive@4.5.49
+ clap_lex@0.7.7
+ colorchoice@1.0.4
+ compact_str@0.9.0
+ concurrent-queue@2.5.0
+ convert_case@0.10.0
+ cpufeatures@0.2.17
+ crossbeam-utils@0.8.21
+ crossterm@0.29.0
+ crossterm_winapi@0.9.1
+ crypto-common@0.1.7
+ csscolorparser@0.6.2
+ custom_debug@0.6.2
+ custom_debug_derive@0.6.2
+ darling@0.20.11
+ darling@0.23.0
+ darling_core@0.20.11
+ darling_core@0.23.0
+ darling_macro@0.20.11
+ darling_macro@0.23.0
+ dbus-crossroads@0.5.3
+ dbus-tokio@0.7.6
+ dbus@0.9.10
+ deltae@0.3.2
+ deranged@0.5.5
+ derive_more-impl@2.1.1
+ derive_more@2.1.1
+ digest@0.10.7
+ dirs-sys@0.5.0
+ dirs@6.0.0
+ displaydoc@0.2.5
+ document-features@0.2.12
+ either@1.15.0
+ equivalent@1.0.2
+ errno@0.3.14
+ euclid@0.22.11
+ event-listener-strategy@0.5.4
+ event-listener@5.4.1
+ fancy-regex@0.11.0
+ filedescriptor@0.8.3
+ find-msvc-tools@0.1.8
+ finl_unicode@1.4.0
+ fixedbitset@0.4.2
+ fnv@1.0.7
+ foldhash@0.2.0
+ futures-channel@0.3.31
+ futures-core@0.3.31
+ futures-executor@0.3.31
+ futures-io@0.3.31
+ futures-macro@0.3.31
+ futures-sink@0.3.31
+ futures-task@0.3.31
+ futures-util@0.3.31
+ futures@0.3.31
+ generic-array@0.14.7
+ getrandom@0.2.17
+ getrandom@0.3.4
+ hashbrown@0.16.1
+ heck@0.5.0
+ hex@0.4.3
+ ident_case@1.0.1
+ indexmap@2.13.0
+ indoc@2.0.7
+ instability@0.3.11
+ is_terminal_polyfill@1.70.2
+ itertools@0.14.0
+ itoa@1.0.17
+ js-sys@0.3.85
+ kasuari@0.4.11
+ lab@0.11.0
+ lazy_static@1.5.0
+ libc@0.2.180
+ libdbus-sys@0.2.7
+ libredox@0.1.12
+ line-clipping@0.3.5
+ linux-raw-sys@0.11.0
+ litrs@1.0.0
+ lock_api@0.4.14
+ log@0.4.29
+ lru@0.16.3
+ mac_address@1.1.8
+ macaddr@1.0.1
+ memchr@2.7.6
+ memmem@0.1.1
+ memoffset@0.9.1
+ minimal-lexical@0.2.1
+ mio@1.1.1
+ nix@0.29.0
+ nom@7.1.3
+ num-conv@0.1.0
+ num-derive@0.4.2
+ num-traits@0.2.19
+ num_threads@0.1.7
+ once_cell@1.21.3
+ once_cell_polyfill@1.70.2
+ option-ext@0.2.0
+ ordered-float@4.6.0
+ parking@2.2.1
+ parking_lot@0.12.5
+ parking_lot_core@0.9.12
+ pest@2.8.5
+ pest_derive@2.8.5
+ pest_generator@2.8.5
+ pest_meta@2.8.5
+ phf@0.11.3
+ phf_codegen@0.11.3
+ phf_generator@0.11.3
+ phf_macros@0.11.3
+ phf_shared@0.11.3
+ pin-project-internal@1.1.10
+ pin-project-lite@0.2.16
+ pin-project@1.1.10
+ pin-utils@0.1.0
+ pkg-config@0.3.32
+ portable-atomic@1.13.0
+ powerfmt@0.2.0
+ proc-macro2@1.0.105
+ quote@1.0.43
+ r-efi@5.3.0
+ rand@0.8.5
+ rand_core@0.6.4
+ ratatui-core@0.1.0
+ ratatui-crossterm@0.1.0
+ ratatui-macros@0.7.0
+ ratatui-termwiz@0.1.0
+ ratatui-widgets@0.3.0
+ ratatui@0.30.0
+ redox_syscall@0.5.18
+ redox_users@0.5.2
+ regex-automata@0.4.13
+ regex-syntax@0.8.8
+ regex@1.12.2
+ rustc_version@0.4.1
+ rustix@1.1.3
+ rustversion@1.0.22
+ ryu@1.0.22
+ scopeguard@1.2.0
+ semver@1.0.27
+ serde@1.0.228
+ serde_core@1.0.228
+ serde_derive@1.0.228
+ serde_json@1.0.149
+ serde_spanned@1.0.4
+ sha2@0.10.9
+ shlex@1.3.0
+ signal-hook-mio@0.2.5
+ signal-hook-registry@1.4.8
+ signal-hook@0.3.18
+ siphasher@1.0.1
+ slab@0.4.11
+ smallvec@1.15.1
+ socket2@0.6.1
+ static_assertions@1.1.0
+ strsim@0.11.1
+ strum@0.26.3
+ strum@0.27.2
+ strum_macros@0.26.4
+ strum_macros@0.27.2
+ syn@1.0.109
+ syn@2.0.114
+ synstructure@0.13.2
+ terminfo@0.9.0
+ termios@0.3.3
+ termwiz@0.23.3
+ thiserror-impl@1.0.69
+ thiserror-impl@2.0.17
+ thiserror@1.0.69
+ thiserror@2.0.17
+ time-core@0.1.7
+ time@0.3.45
+ tokio-macros@2.6.0
+ tokio-stream@0.1.18
+ tokio@1.49.0
+ toml@0.9.11+spec-1.1.0
+ toml_datetime@0.7.5+spec-1.1.0
+ toml_parser@1.0.6+spec-1.1.0
+ toml_writer@1.0.6+spec-1.1.0
+ tui-input@0.15.0
+ typenum@1.19.0
+ ucd-trie@0.1.7
+ unicode-ident@1.0.22
+ unicode-segmentation@1.12.0
+ unicode-truncate@2.0.1
+ unicode-width@0.2.2
+ utf8parse@0.2.2
+ uuid@1.19.0
+ version_check@0.9.5
+ vtparse@0.6.2
+ wasi@0.11.1+wasi-snapshot-preview1
+ wasip2@1.0.2+wasi-0.2.9
+ wasm-bindgen-macro-support@0.2.108
+ wasm-bindgen-macro@0.2.108
+ wasm-bindgen-shared@0.2.108
+ wasm-bindgen@0.2.108
+ wezterm-bidi@0.2.3
+ wezterm-blob-leases@0.1.1
+ wezterm-color-types@0.3.0
+ wezterm-dynamic-derive@0.1.1
+ wezterm-dynamic@0.2.1
+ wezterm-input-types@0.1.0
+ winapi-i686-pc-windows-gnu@0.4.0
+ winapi-x86_64-pc-windows-gnu@0.4.0
+ winapi@0.3.9
+ windows-link@0.2.1
+ windows-sys@0.59.0
+ windows-sys@0.60.2
+ windows-sys@0.61.2
+ windows-targets@0.52.6
+ windows-targets@0.53.5
+ windows_aarch64_gnullvm@0.52.6
+ windows_aarch64_gnullvm@0.53.1
+ windows_aarch64_msvc@0.52.6
+ windows_aarch64_msvc@0.53.1
+ windows_i686_gnu@0.52.6
+ windows_i686_gnu@0.53.1
+ windows_i686_gnullvm@0.52.6
+ windows_i686_gnullvm@0.53.1
+ windows_i686_msvc@0.52.6
+ windows_i686_msvc@0.53.1
+ windows_x86_64_gnu@0.52.6
+ windows_x86_64_gnu@0.53.1
+ windows_x86_64_gnullvm@0.52.6
+ windows_x86_64_gnullvm@0.53.1
+ windows_x86_64_msvc@0.52.6
+ windows_x86_64_msvc@0.53.1
+ winnow@0.7.14
+ wit-bindgen@0.51.0
+ zmij@1.0.14
+"
+
+RUST_MIN_VER="1.88.0"
+
+inherit desktop cargo
+
+DESCRIPTION="TUI for managing bluetooth on Linux"
+HOMEPAGE="https://github.com/pythops/bluetui"
+SRC_URI="
+ https://github.com/pythops/bluetui/archive/refs/tags/v${PV}.tar.gz -> ${P}.tar.gz
+ ${CARGO_CRATE_URIS}
+"
+
+LICENSE="GPL-3"
+# Dependent crate licenses
+LICENSE+="
+ BSD-2 MIT MPL-2.0 Unicode-3.0 Unicode-DFS-2016 WTFPL-2 ZLIB
+ || ( Apache-2.0 Boost-1.0 )
+"
+SLOT="0"
+KEYWORDS="~amd64"
+
+QA_FLAGS_IGNORED="usr/bin/bluetui"
+QA_PRESTRIPPED="usr/bin/bluetui"
+
+DOCS=(
+ Readme.md
+ Release.md
+)
+
+src_install() {
+ cargo_src_install
+
+ dodoc -r "${DOCS[@]}"
+ doicon assets/bluetui-logo-anim.svg
+ make_desktop_entry usr/bin/bluetui BlueTUI bluetui-logo-anim HardwareSettings
+}
diff --git a/net-wireless/bluetui/metadata.xml b/net-wireless/bluetui/metadata.xml
new file mode 100644
index 000000000000..56e379f48d61
--- /dev/null
+++ b/net-wireless/bluetui/metadata.xml
@@ -0,0 +1,9 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE pkgmetadata SYSTEM "https://docs.baldeagleos.com/dtd/metadata.dtd">
+<pkgmetadata>
+ <maintainer type="person">
+ <email>chutzpah@gentoo.org</email>
+ <name>Patrick McLean</name>
+ </maintainer>
+ <origin>baldeagleos-repo</origin>
+</pkgmetadata>
diff --git a/net-wireless/bluez-tools/Manifest b/net-wireless/bluez-tools/Manifest
new file mode 100644
index 000000000000..e73715c1b798
--- /dev/null
+++ b/net-wireless/bluez-tools/Manifest
@@ -0,0 +1 @@
+DIST bluez-tools-0_p20201025.tar.gz 126646 BLAKE2B 6deea6a12ee1050cbe12592fe202be60f032a7ee9a8f790537ef24c3a2562d90abf88f69690e6dd53f16841a256fc82dcfb078b2d708531ca6c50f63b6e84274 SHA512 631dfa7ee7e1bfe487db90f9df692c4136d6258ddd34cda269e3a9538a3c8fe8bad3bac595e57d74789df2da4e15fa0ca7b83374e7f6457695701852b3744b12
diff --git a/net-wireless/bluez-tools/bluez-tools-0_p20201025-r1.ebuild b/net-wireless/bluez-tools/bluez-tools-0_p20201025-r1.ebuild
new file mode 100644
index 000000000000..104441ec067c
--- /dev/null
+++ b/net-wireless/bluez-tools/bluez-tools-0_p20201025-r1.ebuild
@@ -0,0 +1,28 @@
+# Copyright 1999-2025 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=8
+
+inherit autotools
+
+COMMIT="f65321736475429316f07ee94ec0deac8e46ec4a"
+DESCRIPTION="Set of tools to manage bluetooth devices for Linux"
+HOMEPAGE="https://github.com/khvzak/bluez-tools"
+SRC_URI="https://github.com/khvzak/${PN}/archive/${COMMIT}.tar.gz -> ${P}.tar.gz"
+S="${WORKDIR}/${PN}-${COMMIT}"
+
+LICENSE="GPL-2+"
+SLOT="0"
+KEYWORDS="~amd64 ~arm ~arm64 ~riscv ~x86"
+
+RDEPEND="
+ dev-libs/glib:2
+ net-wireless/bluez[obex]
+ sys-libs/readline:=
+"
+DEPEND="${RDEPEND}"
+
+src_prepare() {
+ default
+ eautoreconf
+}
diff --git a/net-wireless/bluez-tools/metadata.xml b/net-wireless/bluez-tools/metadata.xml
new file mode 100644
index 000000000000..6a713d623d5e
--- /dev/null
+++ b/net-wireless/bluez-tools/metadata.xml
@@ -0,0 +1,13 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE pkgmetadata SYSTEM "https://docs.baldeagleos.com/dtd/metadata.dtd">
+<pkgmetadata>
+ <maintainer type="person" proxied="yes">
+ <email>olivier.laurantin@laposte.net</email>
+ <name>Olivier Laurantin</name>
+ </maintainer>
+ <maintainer type="project" proxied="proxy">
+ <email>proxy-maint@gentoo.org</email>
+ <name>Proxy Maintainers</name>
+ </maintainer>
+ <origin>baldeagleos-repo</origin>
+</pkgmetadata>
diff --git a/net-wireless/bluez/Manifest b/net-wireless/bluez/Manifest
new file mode 100644
index 000000000000..7fc648038440
--- /dev/null
+++ b/net-wireless/bluez/Manifest
@@ -0,0 +1 @@
+DIST bluez-5.86.tar.xz 2254292 BLAKE2B 2070508e67fa446eb34019bc015a47c7e63aaaed445c82ec31fa10b83da86edcec1a7dc184b1ba225ffb40fadef6e9a6d381387e5b4533082b550416596b9ee7 SHA512 d3268be43ad869dabd9d9eabc7a0da699837bb5432ecf61e1756e03f9b867a1d989299db1493bd349d73b495d736f55d7518fbb9ee664de49e5d1cf7c2156df7
diff --git a/net-wireless/bluez/bluez-5.86-r1.ebuild b/net-wireless/bluez/bluez-5.86-r1.ebuild
new file mode 100644
index 000000000000..a1906c7b485d
--- /dev/null
+++ b/net-wireless/bluez/bluez-5.86-r1.ebuild
@@ -0,0 +1,278 @@
+# Copyright 1999-2026 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=8
+PYTHON_COMPAT=( python3_{13..14} )
+
+inherit autotools flag-o-matic linux-info optfeature python-single-r1 systemd udev multilib-minimal #readme.gentoo-r1
+
+DESCRIPTION="Bluetooth Tools and System Daemons for Linux"
+HOMEPAGE="https://www.bluez.org https://github.com/bluez/bluez"
+SRC_URI="https://www.kernel.org/pub/linux/bluetooth/${P}.tar.xz"
+
+LICENSE="GPL-2+ LGPL-2.1+"
+SLOT="0/3"
+KEYWORDS="amd64 arm arm64 ~hppa ~loong ~mips ppc ppc64 ~riscv x86"
+IUSE="btpclient cups doc debug deprecated extra-tools experimental man +mesh midi +obex +readline selinux systemd test test-programs +udev"
+
+# Since this release all remaining extra-tools need readline support, but this could
+# change in the future, hence, this REQUIRED_USE constraint could be dropped
+# again in the future.
+# btpclient needs mesh, bug #790587
+REQUIRED_USE="
+ btpclient? ( mesh )
+ extra-tools? ( deprecated readline )
+ test? ( ${PYTHON_REQUIRED_USE} )
+ test-programs? ( ${PYTHON_REQUIRED_USE} )
+"
+
+TEST_DEPS="${PYTHON_DEPS}
+ $(python_gen_cond_dep '
+ >=dev-python/dbus-python-1[${PYTHON_USEDEP}]
+ dev-python/pygobject:3[${PYTHON_USEDEP}]
+ ')
+"
+BDEPEND="
+ virtual/pkgconfig
+ man? ( dev-python/docutils )
+ test? ( ${TEST_DEPS} )
+"
+DEPEND="
+ >=dev-libs/glib-2.36:2[${MULTILIB_USEDEP}]
+ >=sys-apps/dbus-1.6:=[${MULTILIB_USEDEP}]
+ btpclient? ( >=dev-libs/ell-0.39 )
+ cups? ( net-print/cups:= )
+ mesh? (
+ >=dev-libs/ell-0.39
+ >=dev-libs/json-c-0.13:=
+ sys-libs/readline:0=
+ )
+ midi? ( media-libs/alsa-lib )
+ obex? ( dev-libs/libical:= )
+ readline? ( sys-libs/readline:0= )
+ systemd? ( sys-apps/systemd )
+ udev? ( >=virtual/udev-196 )
+"
+RDEPEND="${DEPEND}
+ selinux? (
+ sec-policy/selinux-bluetooth
+ obex? ( sec-policy/selinux-obex )
+ )
+ test-programs? ( ${TEST_DEPS} )
+"
+
+RESTRICT="!test? ( test )"
+
+PATCHES=(
+ # Try both udevadm paths to cover udev/systemd vs. eudev locations (#539844)
+ # http://www.spinics.net/lists/linux-bluetooth/msg58739.html
+ # https://bugs.gentoo.org/539844
+ # https://github.com/bluez/bluez/issues/1650
+ "${FILESDIR}"/${PN}-udevadm-path-r1.patch
+
+ # Upstream fixes included in the next release.
+ "${FILESDIR}"/${P}-a2dp-connect-sink.patch
+ "${FILESDIR}"/${P}-big-endian.patch
+ "${FILESDIR}"/${P}-bluetoothctl-shell.patch
+)
+
+pkg_setup() {
+ # From http://www.linuxfromscratch.org/blfs/view/svn/general/bluez.html
+ # to prevent bugs like:
+ # https://bugzilla.kernel.org/show_bug.cgi?id=196621
+ CONFIG_CHECK="~NET ~BT ~BT_RFCOMM ~BT_RFCOMM_TTY ~BT_BNEP ~BT_BNEP_MC_FILTER
+ ~BT_BNEP_PROTO_FILTER ~BT_HIDP ~CRYPTO_USER_API_HASH ~CRYPTO_USER_API_SKCIPHER
+ ~UHID ~RFKILL"
+ # https://bugzilla.kernel.org/show_bug.cgi?id=196621
+ # https://bugzilla.kernel.org/show_bug.cgi?id=206815
+ if use mesh || use test; then
+ CONFIG_CHECK="${CONFIG_CHECK} ~CRYPTO_USER
+ ~CRYPTO_USER_API ~CRYPTO_USER_API_AEAD ~CRYPTO_AES ~CRYPTO_CCM ~CRYPTO_AEAD ~CRYPTO_CMAC
+ ~CRYPTO_MD5 ~CRYPTO_SHA1 ~KEY_DH_OPERATIONS"
+ fi
+ linux-info_pkg_setup
+
+ if use test || use test-programs; then
+ python-single-r1_pkg_setup
+ fi
+
+ if ! use udev; then
+ ewarn
+ ewarn "You are installing ${PN} with USE=-udev. This means various bluetooth"
+ ewarn "devices and adapters from Apple, Dell, Logitech etc. will not work,"
+ ewarn "and hid2hci will not be available."
+ ewarn
+ fi
+}
+
+src_prepare() {
+ default
+
+ eautoreconf
+
+ multilib_copy_sources
+}
+
+multilib_src_configure() {
+ # unit/test-vcp test fails with LTO (bug #925745)
+ filter-lto
+
+ local myconf=(
+ # readline is automagic when client is enabled
+ # --enable-client always needs readline, bug #504038
+ # --enable-mesh is handled in the same way
+ ac_cv_header_readline_readline_h=$(multilib_native_usex readline)
+ ac_cv_header_readline_readline_h=$(multilib_native_usex mesh)
+ )
+
+ if ! multilib_is_native_abi; then
+ myconf+=(
+ # deps not used for the library
+ {DBUS,GLIB}_{CFLAGS,LIBS}=' '
+ )
+ fi
+
+ econf \
+ --localstatedir=/var \
+ --enable-datafiles \
+ --enable-optimization \
+ $(use_enable debug) \
+ --enable-pie \
+ --enable-threads \
+ --enable-library \
+ --enable-tools \
+ --enable-monitor \
+ --with-systemdsystemunitdir="$(systemd_get_systemunitdir)" \
+ --with-systemduserunitdir="$(systemd_get_userunitdir)" \
+ $(multilib_native_use_enable btpclient) \
+ $(multilib_native_use_enable btpclient external-ell) \
+ $(multilib_native_use_enable cups) \
+ $(multilib_native_use_enable deprecated) \
+ $(multilib_native_use_enable experimental) \
+ $(multilib_native_use_enable man manpages) \
+ $(multilib_native_use_enable mesh) \
+ $(multilib_native_use_enable mesh external-ell) \
+ $(multilib_native_use_enable midi) \
+ $(multilib_native_use_enable obex) \
+ $(multilib_native_use_enable readline client) \
+ $(multilib_native_use_enable systemd) \
+ $(multilib_native_use_enable test-programs test) \
+ $(multilib_native_use_enable udev) \
+ $(multilib_native_use_enable udev hid2hci) \
+ $(multilib_native_use_enable udev sixaxis)
+}
+
+multilib_src_compile() {
+ if multilib_is_native_abi; then
+ default
+ else
+ emake -f Makefile -f - libs \
+ <<<'libs: $(lib_LTLIBRARIES)'
+ fi
+}
+
+multilib_src_test() {
+ multilib_is_native_abi && default
+}
+
+multilib_src_install() {
+ if multilib_is_native_abi; then
+ emake DESTDIR="${D}" install
+
+ # Only install extra-tools when relevant USE flag is enabled
+ if use extra-tools; then
+ ewarn "Upstream doesn't support using this tools and their bugs are"
+ ewarn "likely to be ignored forever, also they can break without"
+ ewarn "previous announcement."
+ ewarn "Upstream also states all this tools are not really needed,"
+ ewarn "then, if you still need to rely on them, you must ask them"
+ ewarn "to either install that tool by default or add the needed"
+ ewarn "functionality to the existing 'official' tools."
+ ewarn "Please report this issues to:"
+ ewarn "http://www.bluez.org/development/lists/"
+
+ # Upstream doesn't install this, bug #524640
+ # http://permalink.gmane.org/gmane.linux.bluez.kernel/53115
+ # http://comments.gmane.org/gmane.linux.bluez.kernel/54564
+ dobin tools/btmgmt
+ # gatttool is only built with readline, bug #530776
+ # https://bugzilla.redhat.com/show_bug.cgi?id=1141909
+ # https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=720486
+ # https://bugs.archlinux.org/task/37686
+ dobin attrib/gatttool
+ # https://bugzilla.redhat.com/show_bug.cgi?id=1699680
+ dobin tools/avinfo
+ fi
+
+ # Not installed by default after being built, bug #666756
+ use btpclient && dobin tools/btpclient
+
+ # Unittests are not that useful once installed, so make them optional
+ if use test-programs; then
+ # Drop python2 only test tools
+ # https://bugzilla.kernel.org/show_bug.cgi?id=206819
+ rm "${ED}"/usr/$(get_libdir)/bluez/test/simple-player || die
+ # https://bugzilla.kernel.org/show_bug.cgi?id=206821
+ rm "${ED}"/usr/$(get_libdir)/bluez/test/test-hfp || die
+
+ python_fix_shebang "${ED}"/usr/$(get_libdir)/bluez/test
+
+ for i in $(find "${ED}"/usr/$(get_libdir)/bluez/test -maxdepth 1 -type f ! -name "*.*"); do
+ dosym "${i#${ED}}" /usr/bin/bluez-"${i##*/}"
+ done
+ fi
+ else
+ emake DESTDIR="${D}" \
+ install-pkgincludeHEADERS \
+ install-libLTLIBRARIES \
+ install-pkgconfigDATA
+ fi
+}
+
+multilib_src_install_all() {
+ # We need to ensure obexd can be spawned automatically by systemd
+ # when user-session is enabled:
+ # http://marc.info/?l=linux-bluetooth&m=148096094716386&w=2
+ # https://bugs.gentoo.org/show_bug.cgi?id=577842
+ # https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=804908
+ # https://bugs.archlinux.org/task/45816
+ # https://bugzilla.redhat.com/show_bug.cgi?id=1318441
+ # https://bugzilla.redhat.com/show_bug.cgi?id=1389347
+ if use systemd; then
+ dosym obex.service /usr/lib/systemd/user/dbus-org.bluez.obex.service
+ fi
+
+ find "${D}" -name '*.la' -type f -delete || die
+
+ # Setup auto enable as Fedora does for allowing to use
+ # keyboards/mouse as soon as possible
+ insinto /etc/bluetooth
+ doins src/main.conf
+
+ newinitd "${FILESDIR}"/bluetooth-init.d-r5 bluetooth
+ newconfd "${FILESDIR}"/bluetooth-conf.d bluetooth
+
+ einstalldocs
+ use doc && dodoc doc/*.txt
+
+ # https://bugs.gentoo.org/929017
+ # https://github.com/bluez/bluez/issues/329#issuecomment-1102459104
+ fperms 0555 /etc/bluetooth
+
+ # https://bugs.gentoo.org/932172
+ if ! use systemd; then
+ keepdir /var/lib/bluetooth
+ fperms 0700 /var/lib/bluetooth
+ fi
+}
+
+pkg_postinst() {
+ use udev && udev_reload
+ systemd_reenable bluetooth.service
+
+ optfeature "Dial-up networking" net-dialup/ppp
+}
+
+pkg_postrm() {
+ use udev && udev_reload
+}
diff --git a/net-wireless/bluez/bluez-5.86.ebuild b/net-wireless/bluez/bluez-5.86.ebuild
new file mode 100644
index 000000000000..20f43961511d
--- /dev/null
+++ b/net-wireless/bluez/bluez-5.86.ebuild
@@ -0,0 +1,270 @@
+# Copyright 1999-2026 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=8
+PYTHON_COMPAT=( python3_{13..14} )
+
+inherit autotools flag-o-matic linux-info optfeature python-single-r1 systemd udev multilib-minimal #readme.gentoo-r1
+
+DESCRIPTION="Bluetooth Tools and System Daemons for Linux"
+HOMEPAGE="https://www.bluez.org https://github.com/bluez/bluez"
+SRC_URI="https://www.kernel.org/pub/linux/bluetooth/${P}.tar.xz"
+
+LICENSE="GPL-2+ LGPL-2.1+"
+SLOT="0/3"
+KEYWORDS="amd64 arm arm64 ~hppa ~loong ~mips ppc ppc64 ~riscv x86"
+IUSE="btpclient cups doc debug deprecated extra-tools experimental man +mesh midi +obex +readline selinux systemd test test-programs +udev"
+
+# Since this release all remaining extra-tools need readline support, but this could
+# change in the future, hence, this REQUIRED_USE constraint could be dropped
+# again in the future.
+# btpclient needs mesh, bug #790587
+REQUIRED_USE="
+ btpclient? ( mesh )
+ extra-tools? ( deprecated readline )
+ test? ( ${PYTHON_REQUIRED_USE} )
+ test-programs? ( ${PYTHON_REQUIRED_USE} )
+"
+
+TEST_DEPS="${PYTHON_DEPS}
+ $(python_gen_cond_dep '
+ >=dev-python/dbus-python-1[${PYTHON_USEDEP}]
+ dev-python/pygobject:3[${PYTHON_USEDEP}]
+ ')
+"
+BDEPEND="
+ virtual/pkgconfig
+ man? ( dev-python/docutils )
+ test? ( ${TEST_DEPS} )
+"
+DEPEND="
+ >=dev-libs/glib-2.36:2[${MULTILIB_USEDEP}]
+ >=sys-apps/dbus-1.6:=[${MULTILIB_USEDEP}]
+ btpclient? ( >=dev-libs/ell-0.39 )
+ cups? ( net-print/cups:= )
+ mesh? (
+ >=dev-libs/ell-0.39
+ >=dev-libs/json-c-0.13:=
+ sys-libs/readline:0=
+ )
+ midi? ( media-libs/alsa-lib )
+ obex? ( dev-libs/libical:= )
+ readline? ( sys-libs/readline:0= )
+ systemd? ( sys-apps/systemd )
+ udev? ( >=virtual/udev-196 )
+"
+RDEPEND="${DEPEND}
+ selinux? ( sec-policy/selinux-bluetooth )
+ test-programs? ( ${TEST_DEPS} )
+"
+
+RESTRICT="!test? ( test )"
+
+PATCHES=(
+ # Try both udevadm paths to cover udev/systemd vs. eudev locations (#539844)
+ # http://www.spinics.net/lists/linux-bluetooth/msg58739.html
+ # https://bugs.gentoo.org/539844
+ # https://github.com/bluez/bluez/issues/1650
+ "${FILESDIR}"/${PN}-udevadm-path-r1.patch
+)
+
+pkg_setup() {
+ # From http://www.linuxfromscratch.org/blfs/view/svn/general/bluez.html
+ # to prevent bugs like:
+ # https://bugzilla.kernel.org/show_bug.cgi?id=196621
+ CONFIG_CHECK="~NET ~BT ~BT_RFCOMM ~BT_RFCOMM_TTY ~BT_BNEP ~BT_BNEP_MC_FILTER
+ ~BT_BNEP_PROTO_FILTER ~BT_HIDP ~CRYPTO_USER_API_HASH ~CRYPTO_USER_API_SKCIPHER
+ ~UHID ~RFKILL"
+ # https://bugzilla.kernel.org/show_bug.cgi?id=196621
+ # https://bugzilla.kernel.org/show_bug.cgi?id=206815
+ if use mesh || use test; then
+ CONFIG_CHECK="${CONFIG_CHECK} ~CRYPTO_USER
+ ~CRYPTO_USER_API ~CRYPTO_USER_API_AEAD ~CRYPTO_AES ~CRYPTO_CCM ~CRYPTO_AEAD ~CRYPTO_CMAC
+ ~CRYPTO_MD5 ~CRYPTO_SHA1 ~KEY_DH_OPERATIONS"
+ fi
+ linux-info_pkg_setup
+
+ if use test || use test-programs; then
+ python-single-r1_pkg_setup
+ fi
+
+ if ! use udev; then
+ ewarn
+ ewarn "You are installing ${PN} with USE=-udev. This means various bluetooth"
+ ewarn "devices and adapters from Apple, Dell, Logitech etc. will not work,"
+ ewarn "and hid2hci will not be available."
+ ewarn
+ fi
+}
+
+src_prepare() {
+ default
+
+ eautoreconf
+
+ multilib_copy_sources
+}
+
+multilib_src_configure() {
+ # unit/test-vcp test fails with LTO (bug #925745)
+ filter-lto
+
+ local myconf=(
+ # readline is automagic when client is enabled
+ # --enable-client always needs readline, bug #504038
+ # --enable-mesh is handled in the same way
+ ac_cv_header_readline_readline_h=$(multilib_native_usex readline)
+ ac_cv_header_readline_readline_h=$(multilib_native_usex mesh)
+ )
+
+ if ! multilib_is_native_abi; then
+ myconf+=(
+ # deps not used for the library
+ {DBUS,GLIB}_{CFLAGS,LIBS}=' '
+ )
+ fi
+
+ econf \
+ --localstatedir=/var \
+ --enable-datafiles \
+ --enable-optimization \
+ $(use_enable debug) \
+ --enable-pie \
+ --enable-threads \
+ --enable-library \
+ --enable-tools \
+ --enable-monitor \
+ --with-systemdsystemunitdir="$(systemd_get_systemunitdir)" \
+ --with-systemduserunitdir="$(systemd_get_userunitdir)" \
+ $(multilib_native_use_enable btpclient) \
+ $(multilib_native_use_enable btpclient external-ell) \
+ $(multilib_native_use_enable cups) \
+ $(multilib_native_use_enable deprecated) \
+ $(multilib_native_use_enable experimental) \
+ $(multilib_native_use_enable man manpages) \
+ $(multilib_native_use_enable mesh) \
+ $(multilib_native_use_enable mesh external-ell) \
+ $(multilib_native_use_enable midi) \
+ $(multilib_native_use_enable obex) \
+ $(multilib_native_use_enable readline client) \
+ $(multilib_native_use_enable systemd) \
+ $(multilib_native_use_enable test-programs test) \
+ $(multilib_native_use_enable udev) \
+ $(multilib_native_use_enable udev hid2hci) \
+ $(multilib_native_use_enable udev sixaxis)
+}
+
+multilib_src_compile() {
+ if multilib_is_native_abi; then
+ default
+ else
+ emake -f Makefile -f - libs \
+ <<<'libs: $(lib_LTLIBRARIES)'
+ fi
+}
+
+multilib_src_test() {
+ multilib_is_native_abi && default
+}
+
+multilib_src_install() {
+ if multilib_is_native_abi; then
+ emake DESTDIR="${D}" install
+
+ # Only install extra-tools when relevant USE flag is enabled
+ if use extra-tools; then
+ ewarn "Upstream doesn't support using this tools and their bugs are"
+ ewarn "likely to be ignored forever, also they can break without"
+ ewarn "previous announcement."
+ ewarn "Upstream also states all this tools are not really needed,"
+ ewarn "then, if you still need to rely on them, you must ask them"
+ ewarn "to either install that tool by default or add the needed"
+ ewarn "functionality to the existing 'official' tools."
+ ewarn "Please report this issues to:"
+ ewarn "http://www.bluez.org/development/lists/"
+
+ # Upstream doesn't install this, bug #524640
+ # http://permalink.gmane.org/gmane.linux.bluez.kernel/53115
+ # http://comments.gmane.org/gmane.linux.bluez.kernel/54564
+ dobin tools/btmgmt
+ # gatttool is only built with readline, bug #530776
+ # https://bugzilla.redhat.com/show_bug.cgi?id=1141909
+ # https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=720486
+ # https://bugs.archlinux.org/task/37686
+ dobin attrib/gatttool
+ # https://bugzilla.redhat.com/show_bug.cgi?id=1699680
+ dobin tools/avinfo
+ fi
+
+ # Not installed by default after being built, bug #666756
+ use btpclient && dobin tools/btpclient
+
+ # Unittests are not that useful once installed, so make them optional
+ if use test-programs; then
+ # Drop python2 only test tools
+ # https://bugzilla.kernel.org/show_bug.cgi?id=206819
+ rm "${ED}"/usr/$(get_libdir)/bluez/test/simple-player || die
+ # https://bugzilla.kernel.org/show_bug.cgi?id=206821
+ rm "${ED}"/usr/$(get_libdir)/bluez/test/test-hfp || die
+
+ python_fix_shebang "${ED}"/usr/$(get_libdir)/bluez/test
+
+ for i in $(find "${ED}"/usr/$(get_libdir)/bluez/test -maxdepth 1 -type f ! -name "*.*"); do
+ dosym "${i#${ED}}" /usr/bin/bluez-"${i##*/}"
+ done
+ fi
+ else
+ emake DESTDIR="${D}" \
+ install-pkgincludeHEADERS \
+ install-libLTLIBRARIES \
+ install-pkgconfigDATA
+ fi
+}
+
+multilib_src_install_all() {
+ # We need to ensure obexd can be spawned automatically by systemd
+ # when user-session is enabled:
+ # http://marc.info/?l=linux-bluetooth&m=148096094716386&w=2
+ # https://bugs.gentoo.org/show_bug.cgi?id=577842
+ # https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=804908
+ # https://bugs.archlinux.org/task/45816
+ # https://bugzilla.redhat.com/show_bug.cgi?id=1318441
+ # https://bugzilla.redhat.com/show_bug.cgi?id=1389347
+ if use systemd; then
+ dosym obex.service /usr/lib/systemd/user/dbus-org.bluez.obex.service
+ fi
+
+ find "${D}" -name '*.la' -type f -delete || die
+
+ # Setup auto enable as Fedora does for allowing to use
+ # keyboards/mouse as soon as possible
+ insinto /etc/bluetooth
+ doins src/main.conf
+
+ newinitd "${FILESDIR}"/bluetooth-init.d-r5 bluetooth
+ newconfd "${FILESDIR}"/bluetooth-conf.d bluetooth
+
+ einstalldocs
+ use doc && dodoc doc/*.txt
+
+ # https://bugs.gentoo.org/929017
+ # https://github.com/bluez/bluez/issues/329#issuecomment-1102459104
+ fperms 0555 /etc/bluetooth
+
+ # https://bugs.gentoo.org/932172
+ if ! use systemd; then
+ keepdir /var/lib/bluetooth
+ fperms 0700 /var/lib/bluetooth
+ fi
+}
+
+pkg_postinst() {
+ use udev && udev_reload
+ systemd_reenable bluetooth.service
+
+ optfeature "Dial-up networking" net-dialup/ppp
+}
+
+pkg_postrm() {
+ use udev && udev_reload
+}
diff --git a/net-wireless/bluez/files/bluetooth-conf.d b/net-wireless/bluez/files/bluetooth-conf.d
new file mode 100644
index 000000000000..d5b5005ce7fc
--- /dev/null
+++ b/net-wireless/bluez/files/bluetooth-conf.d
@@ -0,0 +1 @@
+#BLUETOOTH_OPTS="-E"
diff --git a/net-wireless/bluez/files/bluetooth-init.d-r5 b/net-wireless/bluez/files/bluetooth-init.d-r5
new file mode 100644
index 000000000000..4d60234e0304
--- /dev/null
+++ b/net-wireless/bluez/files/bluetooth-init.d-r5
@@ -0,0 +1,13 @@
+#!/sbin/openrc-run
+# Copyright 1999-2021 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+pidfile="/run/bluetoothd.pid"
+command="/usr/libexec/bluetooth/bluetoothd"
+command_args="${BLUETOOTH_OPTS}"
+command_background=1
+
+depend() {
+ after coldplug
+ need dbus localmount hostname
+}
diff --git a/net-wireless/bluez/files/bluez-5.86-a2dp-connect-sink.patch b/net-wireless/bluez/files/bluez-5.86-a2dp-connect-sink.patch
new file mode 100644
index 000000000000..26a8986979a7
--- /dev/null
+++ b/net-wireless/bluez/files/bluez-5.86-a2dp-connect-sink.patch
@@ -0,0 +1,35 @@
+From 066a164a524e4983b850f5659b921cb42f84a0e0 Mon Sep 17 00:00:00 2001
+From: Pauli Virtanen <pav@iki.fi>
+Date: Mon, 16 Feb 2026 18:17:08 +0200
+Subject: [PATCH] a2dp: connect source profile after sink
+
+Since cdcd845f87ee the order in which profiles with the same priority
+are connected is the same order as btd_profile_register() is called,
+instead of being the opposite order. When initiating connections, we
+want to prefer a2dp-sink profile over a2dp-source, as connecting both at
+the same time does not work currently.
+
+Add .after_services to specify the order.
+
+Fixes: https://github.com/bluez/bluez/issues/1898
+---
+ profiles/audio/a2dp.c | 3 +++
+ 1 file changed, 3 insertions(+)
+
+diff --git a/profiles/audio/a2dp.c b/profiles/audio/a2dp.c
+index 7a37003a2b25..c7e0fc75c09e 100644
+--- a/profiles/audio/a2dp.c
++++ b/profiles/audio/a2dp.c
+@@ -3769,6 +3769,9 @@ static struct btd_profile a2dp_source_profile = {
+
+ .adapter_probe = a2dp_sink_server_probe,
+ .adapter_remove = a2dp_sink_server_remove,
++
++ /* Connect source after sink, to prefer sink when conflicting */
++ .after_services = BTD_PROFILE_UUID_CB(NULL, A2DP_SINK_UUID),
+ };
+
+ static struct btd_profile a2dp_sink_profile = {
+--
+2.53.0
+
diff --git a/net-wireless/bluez/files/bluez-5.86-big-endian.patch b/net-wireless/bluez/files/bluez-5.86-big-endian.patch
new file mode 100644
index 000000000000..a0f83e4a5079
--- /dev/null
+++ b/net-wireless/bluez/files/bluez-5.86-big-endian.patch
@@ -0,0 +1,41 @@
+From 3a5c4d311755910f07e60fd30d4736ac98bea8eb Mon Sep 17 00:00:00 2001
+From: Bastien Nocera <hadess@hadess.net>
+Date: Tue, 10 Feb 2026 10:06:28 +0100
+Subject: [PATCH] emulator: Fix compilation on big endian systems
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+This fixes the build on big endian systems like s390x:
+
+Remove the "static" so the array doesn't need to be initialised
+with constants.
+
+emulator/bthost.c: In function ‘bthost_setup_sco’:
+./src/shared/util.h:43:26: error: initializer element is not constant
+ 43 | #define cpu_to_le32(val) bswap_32(val)
+ | ^~~~~~~~
+etc.
+
+Fixes: 85888a8357ea ("bthost: add bthost_setup_sco() and accept
+incoming eSCO")
+---
+ emulator/bthost.c | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/emulator/bthost.c b/emulator/bthost.c
+index d09ad1e76c50..53b12f828675 100644
+--- a/emulator/bthost.c
++++ b/emulator/bthost.c
+@@ -3560,7 +3560,7 @@ void bthost_hci_disconnect(struct bthost *bthost, uint16_t handle,
+ int bthost_setup_sco(struct bthost *bthost, uint16_t acl_handle,
+ uint16_t setting)
+ {
+- static const struct bt_hci_cmd_setup_sync_conn settings[] = {
++ const struct bt_hci_cmd_setup_sync_conn settings[] = {
+ {
+ .tx_bandwidth = cpu_to_le32(0x00001f40),
+ .rx_bandwidth = cpu_to_le32(0x00001f40),
+--
+2.52.0
+
diff --git a/net-wireless/bluez/files/bluez-5.86-bluetoothctl-shell.patch b/net-wireless/bluez/files/bluez-5.86-bluetoothctl-shell.patch
new file mode 100644
index 000000000000..11a184bc79dd
--- /dev/null
+++ b/net-wireless/bluez/files/bluez-5.86-bluetoothctl-shell.patch
@@ -0,0 +1,79 @@
+From 33dd33a23ff250902eafa94fce5ea8178de50112 Mon Sep 17 00:00:00 2001
+From: Bastien Nocera <hadess@hadess.net>
+Date: Fri, 27 Feb 2026 12:07:14 +0100
+Subject: [PATCH 1/2] Revert "shared/shell: Don't init input for
+ non-interactive shells"
+
+This reverts commit e73bf582dae60356641a32fc27ae03d359ec4c47.
+
+The fix caused "bluetoothctl list" to not output any text, breaking
+a lot of existing scripts.
+
+Closes: https://bugzilla.redhat.com/show_bug.cgi?id=2440346
+---
+ src/shared/shell.c | 10 +++++-----
+ 1 file changed, 5 insertions(+), 5 deletions(-)
+
+diff --git a/src/shared/shell.c b/src/shared/shell.c
+index 78d58c513d3e..b061f8001414 100644
+--- a/src/shared/shell.c
++++ b/src/shared/shell.c
+@@ -1642,13 +1642,13 @@ static bool shell_quit(void *data)
+
+ bool bt_shell_attach(int fd)
+ {
+- if (data.mode == MODE_INTERACTIVE) {
+- struct input *input;
++ struct input *input;
+
+- input = input_new(fd);
+- if (!input)
+- return false;
++ input = input_new(fd);
++ if (!input)
++ return false;
+
++ if (data.mode == MODE_INTERACTIVE) {
+ io_set_read_handler(input->io, input_read, input, NULL);
+ io_set_disconnect_handler(input->io, input_hup, input, NULL);
+
+--
+2.53.0
+
+
+From 0178bc8bda31cf60837fcce91b33e009bc3f7d7d Mon Sep 17 00:00:00 2001
+From: Bastien Nocera <hadess@hadess.net>
+Date: Fri, 27 Feb 2026 12:24:13 +0100
+Subject: [PATCH 2/2] tools: Work-around broken stdin handling in home-made
+ mainloop
+
+bluetoothd has 3 mainloop implementations, one relying on ell, one
+relying on glib, and another home-made.
+
+The home-made mainloop handler use epoll() without any fallbacks, and
+will hang if one tries to epoll() an stdin that redirects from
+/dev/null.
+
+Closes: https://github.com/bluez/bluez/issues/700
+---
+ Makefile.tools | 4 ++--
+ 1 file changed, 2 insertions(+), 2 deletions(-)
+
+diff --git a/Makefile.tools b/Makefile.tools
+index 589f7c94f9df..7c52e053ffee 100644
+--- a/Makefile.tools
++++ b/Makefile.tools
+@@ -531,8 +531,8 @@ tools_obexctl_LDADD = gdbus/libgdbus-internal.la src/libshared-glib.la \
+
+ tools_btmgmt_SOURCES = tools/btmgmt.c src/uuid-helper.c client/display.c \
+ client/mgmt.c
+-tools_btmgmt_LDADD = lib/libbluetooth-internal.la src/libshared-mainloop.la \
+- -lreadline
++tools_btmgmt_LDADD = lib/libbluetooth-internal.la src/libshared-glib.la \
++ $(GLIB_LIBS) -lreadline
+ if DEPRECATED
+ noinst_PROGRAMS += attrib/gatttool
+
+--
+2.53.0
+
diff --git a/net-wireless/bluez/files/bluez-udevadm-path-r1.patch b/net-wireless/bluez/files/bluez-udevadm-path-r1.patch
new file mode 100644
index 000000000000..ac1c94ccd219
--- /dev/null
+++ b/net-wireless/bluez/files/bluez-udevadm-path-r1.patch
@@ -0,0 +1,10 @@
+--- a/tools/hid2hci.rules
++++ b/tools/hid2hci.rules
+@@ -20,6 +20,7 @@
+ # Unfortunately the only event seen is the BT device disappearing, so the mouse
+ # device needs to be chased down on the USB bus.
+ ATTR{bDeviceClass}=="e0", ATTR{bDeviceSubClass}=="01", ATTR{bDeviceProtocol}=="01", ATTR{idVendor}=="413c", \
++ ENV{REMOVE_CMD}="/bin/udevadm trigger --action=change --subsystem-match=usb --property-match=HID2HCI_SWITCH=1" \
+ ENV{REMOVE_CMD}="/sbin/udevadm trigger --action=change --subsystem-match=usb --property-match=HID2HCI_SWITCH=1"
+
+ # CSR devices
diff --git a/net-wireless/bluez/metadata.xml b/net-wireless/bluez/metadata.xml
new file mode 100644
index 000000000000..227a4acbe99c
--- /dev/null
+++ b/net-wireless/bluez/metadata.xml
@@ -0,0 +1,26 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE pkgmetadata SYSTEM "https://docs.baldeagleos.com/dtd/metadata.dtd">
+<pkgmetadata>
+ <maintainer type="person">
+ <email>pacho@gentoo.org</email>
+ <name>Pacho Ramos</name>
+ </maintainer>
+ <use>
+ <flag name="btpclient">Enable BTP client</flag>
+ <flag name="deprecated">Build deprecated plugins</flag>
+ <flag name="experimental">Build experimental plugins</flag>
+ <flag name="extra-tools">Install tools that upstream doesn't install on
+ purpose by default. All this tools shouldn't be used. Then, please
+ notify upstream about you still need them to let them know the
+ situation.</flag>
+ <flag name="mesh">Add support for Bluetooth Mesh control application and advertising bearer.</flag>
+ <flag name="midi">Enable MIDI support</flag>
+ <flag name="obex">Enable OBEX transfer support</flag>
+ <flag name="test-programs">Install tools for testing of various Bluetooth functions</flag>
+ </use>
+ <upstream>
+ <remote-id type="cpe">cpe:/a:bluez:bluez</remote-id>
+ <remote-id type="cpe">cpe:/a:bluez:bluez</remote-id>
+ </upstream>
+ <origin>baldeagleos-repo</origin>
+</pkgmetadata>
diff --git a/net-wireless/broadcom-sta/Manifest b/net-wireless/broadcom-sta/Manifest
new file mode 100644
index 000000000000..58d156ff2d71
--- /dev/null
+++ b/net-wireless/broadcom-sta/Manifest
@@ -0,0 +1,3 @@
+DIST README-broadcom-sta-6.30.223.271.txt 17216 BLAKE2B af6db6e129911d1589d7d6cb7166bee32ce1ca98a4e5c9b3515a44e48681d8a7a7a6b697419b2bcd9c46f0f4ca1f7ece632b63531b4a4ecd91df4f9dddf043c9 SHA512 672ecc5afcd8535a9f8beb4baea5a40c584b7682844e9ff0e4f66b7406b42118a99dce1fcd580118187fdc506781334b8243082def2b78dce916d90c55ab3663
+DIST hybrid-v35-nodebug-pcoem-6_30_223_271.tar.gz 2869247 BLAKE2B 2e3189c468cec50b1a980452a4b2bd0f9657d9adf6fae2a95a8b1c2d1df2f5f6beb4cb903f72f444eddf823fe4375299864cd62191c9d59c4f77598b5d3aa246 SHA512 0361ba30d97bcb1dedf46c11ef1b9a16f09cde3faa6be87b3ccc28679f34183c2fdf511e7c3b5c26b304f6961da454ccf71844b92bbb2f25aa876249496a2f1b
+DIST hybrid-v35_64-nodebug-pcoem-6_30_223_271.tar.gz 2928541 BLAKE2B e9d01c1a1a63c07f720e3ee53ee3ef634ab12694135300cb0ce47ade0e9e0084967a0b6df64d983e8184240eb3defb128f650bddb7727e901d50315307f3398a SHA512 6855781f7c69a9aecb9461932423688964879d5a4df571f01ae7adaa7bf21a410bef839605d555afb6c8f4eec92fe8510af6cb120930095617ff6cdcccedaf17
diff --git a/net-wireless/broadcom-sta/broadcom-sta-6.30.223.271-r10.ebuild b/net-wireless/broadcom-sta/broadcom-sta-6.30.223.271-r10.ebuild
new file mode 100644
index 000000000000..d87ca0e8f3ea
--- /dev/null
+++ b/net-wireless/broadcom-sta/broadcom-sta-6.30.223.271-r10.ebuild
@@ -0,0 +1,113 @@
+# Copyright 1999-2026 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=8
+
+inherit linux-mod-r1
+
+DESCRIPTION="Broadcom's IEEE 802.11a/b/g/n hybrid Linux device driver"
+HOMEPAGE="https://www.broadcom.com/support/802.11"
+SRC_BASE="https://docs.broadcom.com/docs-and-downloads/docs/linux_sta/hybrid-v35"
+SRC_URI="
+ x86? ( ${SRC_BASE}-nodebug-pcoem-${PV//\./_}.tar.gz )
+ amd64? ( ${SRC_BASE}_64-nodebug-pcoem-${PV//\./_}.tar.gz )
+ https://docs.broadcom.com/docs-and-downloads/docs/linux_sta/README_${PV}.txt -> README-${P}.txt
+"
+
+S="${WORKDIR}"
+LICENSE="Broadcom"
+SLOT="0"
+
+KEYWORDS="-* ~amd64 ~x86"
+
+RESTRICT="mirror"
+
+DEPEND="virtual/linux-sources"
+
+PATCHES=(
+ "${FILESDIR}/001-null-pointer-fix.patch"
+ "${FILESDIR}/002-rdtscl.patch"
+ "${FILESDIR}/003-linux47.patch"
+ "${FILESDIR}/004-linux48.patch"
+ "${FILESDIR}/005-debian-fix-kernel-warnings.patch"
+ "${FILESDIR}/006-linux411.patch"
+ "${FILESDIR}/007-linux412.patch"
+ "${FILESDIR}/008-linux415.patch"
+ "${FILESDIR}/009-fix_mac_profile_discrepancy.patch"
+ "${FILESDIR}/010-linux56.patch"
+ "${FILESDIR}/011-linux59.patch"
+ "${FILESDIR}/012-linux517.patch"
+ "${FILESDIR}/013-linux518.patch"
+ "${FILESDIR}/014-linux414.patch"
+ "${FILESDIR}/015-linux600.patch"
+ "${FILESDIR}/016-linux601.patch"
+ "${FILESDIR}/017-handle-new-header-name-6.12.patch"
+ "${FILESDIR}/018-broadcom-wl-fix-linux-6.13.patch"
+ "${FILESDIR}/019-broadcom-wl-fix-linux-6.14.patch"
+ "${FILESDIR}/020-broadcom-wl-fix-linux-6.15.patch"
+ "${FILESDIR}/021-broadcom-wl-fix-linux-6.17.patch"
+)
+
+pkg_pretend() {
+ ewarn
+ ewarn "If you are stuck using this unmaintained driver (likely in a MacBook),"
+ ewarn "you may be interested to know that a newer compatible wireless card"
+ ewarn "is supported by the in-tree brcmfmac driver. It has a model number "
+ ewarn "BCM943602CS and is for sale on the second hand market for less than "
+ ewarn "20 USD."
+ ewarn
+ ewarn "See https://wikidevi.com/wiki/Broadcom_Wireless_Adapters and"
+ ewarn " https://wikidevi.com/wiki/Broadcom_BCM943602CS"
+ ewarn "for more information."
+ ewarn
+}
+
+pkg_setup() {
+ # bug #300570
+ # NOTE<lxnay>: module builds correctly anyway with b43 and SSB enabled
+ # make checks non-fatal. The correct fix is blackisting ssb and, perhaps
+ # b43 via udev rules. Moreover, previous fix broke binpkgs support.
+ CONFIG_CHECK="~!B43 ~!BCMA ~!SSB ~!X86_INTEL_LPSS"
+ CONFIG_CHECK2="LIB80211 ~!MAC80211 ~LIB80211_CRYPT_TKIP"
+ CONFIG_CHECK3="~!MAC80211"
+ ERROR_B43="B43: If you insist on building this, you must blacklist it!"
+ ERROR_BCMA="BCMA: If you insist on building this, you must blacklist it!"
+ ERROR_SSB="SSB: If you insist on building this, you must blacklist it!"
+ ERROR_LIB80211="LIB80211: Please enable it. If you can't find it: enabling the driver for \"Intel PRO/Wireless 2100\" or \"Intel PRO/Wireless 2200BG\" (IPW2100 or IPW2200) should suffice."
+ ERROR_MAC80211="MAC80211: If you insist on building this, you must blacklist it!"
+ ERROR_PREEMPT_RCU="PREEMPT_RCU: Please do not set the Preemption Model to \"Preemptible Kernel\"; choose something else."
+ ERROR_LIB80211_CRYPT_TKIP="LIB80211_CRYPT_TKIP: You will need this for WPA."
+ ERROR_X86_INTEL_LPSS="X86_INTEL_LPSS: Please disable it. The module does not work with it enabled."
+ if kernel_is ge 6 1 127; then
+ CONFIG_CHECK="${CONFIG_CHECK} ${CONFIG_CHECK3} CFG80211 ~!PREEMPT_RCU ~!PREEMPT"
+ elif kernel_is ge 3 8 8; then
+ CONFIG_CHECK="${CONFIG_CHECK} ${CONFIG_CHECK2} CFG80211 ~!PREEMPT_RCU ~!PREEMPT"
+ elif kernel_is ge 2 6 32; then
+ CONFIG_CHECK="${CONFIG_CHECK} ${CONFIG_CHECK2} CFG80211"
+ elif kernel_is ge 2 6 31; then
+ CONFIG_CHECK="${CONFIG_CHECK} ${CONFIG_CHECK2} WIRELESS_EXT ~!MAC80211"
+ elif kernel_is ge 2 6 29; then
+ CONFIG_CHECK="${CONFIG_CHECK} ${CONFIG_CHECK2} WIRELESS_EXT COMPAT_NET_DEV_OPS"
+ else
+ CONFIG_CHECK="${CONFIG_CHECK} IEEE80211 IEEE80211_CRYPT_TKIP"
+ fi
+
+ linux-mod-r1_pkg_setup
+}
+
+src_compile() {
+ local modlist=( wl )
+ local modargs=(
+ -C ${KV_DIR} M="${S}"
+ )
+
+ linux-mod-r1_src_compile
+}
+
+src_install() {
+ linux-mod-r1_src_install
+
+ insinto /etc/modprobe.d
+ newins "${FILESDIR}"/broadcom-sta-modules.conf wl.conf
+ dodoc "${DISTDIR}/README-${P}.txt"
+}
diff --git a/net-wireless/broadcom-sta/files/001-null-pointer-fix.patch b/net-wireless/broadcom-sta/files/001-null-pointer-fix.patch
new file mode 100644
index 000000000000..6b1bb33180ff
--- /dev/null
+++ b/net-wireless/broadcom-sta/files/001-null-pointer-fix.patch
@@ -0,0 +1,42 @@
+Description: Fixing null pointer crash
+
+Origin: https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=773713
+Bug-Ubuntu: https://launchpad.net/bugs/1415880
+Last-Update: 2015-08-18
+
+--- a/src/wl/sys/wl_linux.c
++++ b/src/wl/sys/wl_linux.c
+@@ -2157,8 +2157,8 @@ wl_start(struct sk_buff *skb, struct net_device *dev)
+ wlif = WL_DEV_IF(dev);
+ wl = WL_INFO(dev);
+
++ skb->prev = NULL;
+ if (WL_ALL_PASSIVE_ENAB(wl) || (WL_RTR() && WL_CONFIG_SMP())) {
+- skb->prev = NULL;
+
+ TXQ_LOCK(wl);
+
+--
+1.9.1
+
+--- a/src/wl/sys/wl_linux.a
++++ b/src/wl/sys/wl_linux.c
+@@ -737,9 +737,6 @@
+ dev->name, device,
+ WL_ALL_PASSIVE_ENAB(wl) ? ", Passive Mode" : "", EPI_VERSION_STR);
+
+-#ifdef BCMDBG
+- printf(" (Compiled in " SRCBASE " at " __TIME__ " on " __DATE__ ")");
+-#endif
+ printf("\n");
+
+ wl_found++;
+@@ -2098,7 +2095,7 @@
+ wl_dump_ver(wl_info_t *wl, struct bcmstrbuf *b)
+ {
+ bcm_bprintf(b, "wl%d: %s %s version %s\n", wl->pub->unit,
+- __DATE__, __TIME__, EPI_VERSION_STR);
++ "X", "Y", EPI_VERSION_STR);
+ }
+
+ #if defined(BCMDBG)
diff --git a/net-wireless/broadcom-sta/files/002-rdtscl.patch b/net-wireless/broadcom-sta/files/002-rdtscl.patch
new file mode 100644
index 000000000000..8612895d7082
--- /dev/null
+++ b/net-wireless/broadcom-sta/files/002-rdtscl.patch
@@ -0,0 +1,21 @@
+Since Linux 4.3, rdtscl() is no longer available and native_read_tsc()
+is renamed to rdtsc(). Move the macro contents in-line and call the
+new function. References:
+
+https://git.kernel.org/cgit/linux/kernel/git/torvalds/linux.git/commit?id=fe47ae6e1a5005b2e82f7eab57b5c3820453293a
+https://git.kernel.org/cgit/linux/kernel/git/torvalds/linux.git/commit?id=4ea1636b04dbd66536fa387bae2eea463efc705b
+
+--- a/src/shared/linux_osl.c
++++ b/src/shared/linux_osl.c
+@@ -932,7 +932,11 @@
+ uint cycles;
+
+ #if defined(__i386__)
++#if LINUX_VERSION_CODE >= KERNEL_VERSION(4, 3, 0)
++ cycles = (u32)rdtsc();
++#else
+ rdtscl(cycles);
++#endif
+ #else
+ cycles = 0;
+ #endif
diff --git a/net-wireless/broadcom-sta/files/003-linux47.patch b/net-wireless/broadcom-sta/files/003-linux47.patch
new file mode 100644
index 000000000000..3ad02380ebdb
--- /dev/null
+++ b/net-wireless/broadcom-sta/files/003-linux47.patch
@@ -0,0 +1,109 @@
+Since Linux 4.7, the enum ieee80211_band is no longer used
+
+This shall cause no problem's since both enums ieee80211_band
+and nl80211_band were added in the same commit:
+https://git.kernel.org/cgit/linux/kernel/git/torvalds/linux.git/commit?id=13ae75b103e07304a34ab40c9136e9f53e06475c
+
+This patch refactors the references of IEEE80211_BAND_* to NL80211_BAND_*
+
+Reference:
+https://git.kernel.org/cgit/linux/kernel/git/torvalds/linux.git/commit?id=57fbcce37be7c1d2622b56587c10ade00e96afa3
+
+--- a/src/wl/sys/wl_cfg80211_hybrid.c
++++ b/src/wl/sys/wl_cfg80211_hybrid.c
+@@ -236,7 +236,7 @@
+ #endif
+
+ #define CHAN2G(_channel, _freq, _flags) { \
+- .band = IEEE80211_BAND_2GHZ, \
++ .band = NL80211_BAND_2GHZ, \
+ .center_freq = (_freq), \
+ .hw_value = (_channel), \
+ .flags = (_flags), \
+@@ -245,7 +245,7 @@
+ }
+
+ #define CHAN5G(_channel, _flags) { \
+- .band = IEEE80211_BAND_5GHZ, \
++ .band = NL80211_BAND_5GHZ, \
+ .center_freq = 5000 + (5 * (_channel)), \
+ .hw_value = (_channel), \
+ .flags = (_flags), \
+@@ -379,7 +379,7 @@
+ };
+
+ static struct ieee80211_supported_band __wl_band_2ghz = {
+- .band = IEEE80211_BAND_2GHZ,
++ .band = NL80211_BAND_2GHZ,
+ .channels = __wl_2ghz_channels,
+ .n_channels = ARRAY_SIZE(__wl_2ghz_channels),
+ .bitrates = wl_g_rates,
+@@ -387,7 +387,7 @@
+ };
+
+ static struct ieee80211_supported_band __wl_band_5ghz_a = {
+- .band = IEEE80211_BAND_5GHZ,
++ .band = NL80211_BAND_5GHZ,
+ .channels = __wl_5ghz_a_channels,
+ .n_channels = ARRAY_SIZE(__wl_5ghz_a_channels),
+ .bitrates = wl_a_rates,
+@@ -395,7 +395,7 @@
+ };
+
+ static struct ieee80211_supported_band __wl_band_5ghz_n = {
+- .band = IEEE80211_BAND_5GHZ,
++ .band = NL80211_BAND_5GHZ,
+ .channels = __wl_5ghz_n_channels,
+ .n_channels = ARRAY_SIZE(__wl_5ghz_n_channels),
+ .bitrates = wl_a_rates,
+@@ -1876,8 +1876,8 @@
+ wdev->wiphy->max_num_pmkids = WL_NUM_PMKIDS_MAX;
+ #endif
+ wdev->wiphy->interface_modes = BIT(NL80211_IFTYPE_STATION) | BIT(NL80211_IFTYPE_ADHOC);
+- wdev->wiphy->bands[IEEE80211_BAND_2GHZ] = &__wl_band_2ghz;
+- wdev->wiphy->bands[IEEE80211_BAND_5GHZ] = &__wl_band_5ghz_a;
++ wdev->wiphy->bands[NL80211_BAND_2GHZ] = &__wl_band_2ghz;
++ wdev->wiphy->bands[NL80211_BAND_5GHZ] = &__wl_band_5ghz_a;
+ wdev->wiphy->signal_type = CFG80211_SIGNAL_TYPE_MBM;
+ wdev->wiphy->cipher_suites = __wl_cipher_suites;
+ wdev->wiphy->n_cipher_suites = ARRAY_SIZE(__wl_cipher_suites);
+@@ -2000,7 +2000,7 @@
+ #if LINUX_VERSION_CODE >= KERNEL_VERSION(2, 6, 39)
+ freq = ieee80211_channel_to_frequency(notif_bss_info->channel,
+ (notif_bss_info->channel <= CH_MAX_2G_CHANNEL) ?
+- IEEE80211_BAND_2GHZ : IEEE80211_BAND_5GHZ);
++ NL80211_BAND_2GHZ : NL80211_BAND_5GHZ);
+ #else
+ freq = ieee80211_channel_to_frequency(notif_bss_info->channel);
+ #endif
+@@ -2116,7 +2116,7 @@
+ return err;
+ }
+ chan = wf_chspec_ctlchan(chanspec);
+- band = (chan <= CH_MAX_2G_CHANNEL) ? IEEE80211_BAND_2GHZ : IEEE80211_BAND_5GHZ;
++ band = (chan <= CH_MAX_2G_CHANNEL) ? NL80211_BAND_2GHZ : NL80211_BAND_5GHZ;
+ freq = ieee80211_channel_to_frequency(chan, band);
+ channel = ieee80211_get_channel(wiphy, freq);
+ cfg80211_ibss_joined(ndev, (u8 *)&wl->bssid, channel, GFP_KERNEL);
+@@ -2250,10 +2250,10 @@
+ join_params->params.chanspec_list[0] =
+ ieee80211_frequency_to_channel(chan->center_freq);
+
+- if (chan->band == IEEE80211_BAND_2GHZ) {
++ if (chan->band == NL80211_BAND_2GHZ) {
+ chanspec |= WL_CHANSPEC_BAND_2G;
+ }
+- else if (chan->band == IEEE80211_BAND_5GHZ) {
++ else if (chan->band == NL80211_BAND_5GHZ) {
+ chanspec |= WL_CHANSPEC_BAND_5G;
+ }
+ else {
+@@ -2885,7 +2885,7 @@
+
+ if (phy == 'n' || phy == 'a' || phy == 'v') {
+ wiphy = wl_to_wiphy(wl);
+- wiphy->bands[IEEE80211_BAND_5GHZ] = &__wl_band_5ghz_n;
++ wiphy->bands[NL80211_BAND_5GHZ] = &__wl_band_5ghz_n;
+ }
+
+ return err;
diff --git a/net-wireless/broadcom-sta/files/004-linux48.patch b/net-wireless/broadcom-sta/files/004-linux48.patch
new file mode 100644
index 000000000000..10315f7f2326
--- /dev/null
+++ b/net-wireless/broadcom-sta/files/004-linux48.patch
@@ -0,0 +1,58 @@
+From d3f93542326a06d920c6eb89b703384290d37b8b Mon Sep 17 00:00:00 2001
+From: Alberto Milone <alberto.milone@canonical.com>
+Date: Fri, 2 Sep 2016 17:35:34 +0200
+Subject: [PATCH 1/1] Add support for Linux 4.8
+
+Orginal author: Krzysztof Kolasa
+--- a/src/wl/sys/wl_cfg80211_hybrid.c
++++ b/src/wl/sys/wl_cfg80211_hybrid.c
+@@ -2388,8 +2388,16 @@ wl_bss_connect_done(struct wl_cfg80211_priv *wl, struct net_device *ndev,
+ s32 err = 0;
+
+ if (wl->scan_request) {
++#if LINUX_VERSION_CODE >= KERNEL_VERSION(4, 8, 0)
++ struct cfg80211_scan_info info = {
++ .aborted = true,
++ };
++ WL_DBG(("%s: Aborting scan\n", __FUNCTION__));
++ cfg80211_scan_done(wl->scan_request, &info);
++#else
+ WL_DBG(("%s: Aborting scan\n", __FUNCTION__));
+ cfg80211_scan_done(wl->scan_request, true);
++#endif
+ wl->scan_request = NULL;
+ }
+
+@@ -2490,7 +2498,14 @@ wl_notify_scan_status(struct wl_cfg80211_priv *wl, struct net_device *ndev,
+
+ scan_done_out:
+ if (wl->scan_request) {
++#if LINUX_VERSION_CODE >= KERNEL_VERSION(4, 8, 0)
++ struct cfg80211_scan_info info = {
++ .aborted = false,
++ };
++ cfg80211_scan_done(wl->scan_request, &info);
++#else
+ cfg80211_scan_done(wl->scan_request, false);
++#endif
+ wl->scan_request = NULL;
+ }
+ rtnl_unlock();
+@@ -2909,7 +2924,14 @@ s32 wl_cfg80211_down(struct net_device *ndev)
+ s32 err = 0;
+
+ if (wl->scan_request) {
++#if LINUX_VERSION_CODE >= KERNEL_VERSION(4, 8, 0)
++ struct cfg80211_scan_info info = {
++ .aborted = true,
++ };
++ cfg80211_scan_done(wl->scan_request, &info);
++#else
+ cfg80211_scan_done(wl->scan_request, true);
++#endif
+ wl->scan_request = NULL;
+ }
+
+--
+2.7.4
+
diff --git a/net-wireless/broadcom-sta/files/005-debian-fix-kernel-warnings.patch b/net-wireless/broadcom-sta/files/005-debian-fix-kernel-warnings.patch
new file mode 100644
index 000000000000..e9bf66a959b8
--- /dev/null
+++ b/net-wireless/broadcom-sta/files/005-debian-fix-kernel-warnings.patch
@@ -0,0 +1,161 @@
+--- a/src/wl/sys/wl_cfg80211_hybrid.c
++++ b/src/wl/sys/wl_cfg80211_hybrid.c
+@@ -1968,7 +1968,7 @@
+
+ if (dtoh32(bi->length) > WL_BSS_INFO_MAX) {
+ WL_DBG(("Beacon is larger than buffer. Discarding\n"));
+- return err;
++ return -E2BIG;
+ }
+ notif_bss_info = kzalloc(sizeof(*notif_bss_info) + sizeof(*mgmt) - sizeof(u8) +
+ WL_BSS_INFO_MAX, GFP_KERNEL);
+@@ -1992,9 +1992,15 @@
+ beacon_proberesp->capab_info = cpu_to_le16(bi->capability);
+ wl_rst_ie(wl);
+
+- wl_mrg_ie(wl, ((u8 *) bi) + bi->ie_offset, bi->ie_length);
+- wl_cp_ie(wl, beacon_proberesp->variable, WL_BSS_INFO_MAX -
++ err = wl_mrg_ie(wl, ((u8 *) bi) + bi->ie_offset, bi->ie_length);
++ if (err)
++ goto inform_single_bss_out;
++
++ err = wl_cp_ie(wl, beacon_proberesp->variable, WL_BSS_INFO_MAX -
+ offsetof(struct wl_cfg80211_bss_info, frame_buf));
++ if (err)
++ goto inform_single_bss_out;
++
+ notif_bss_info->frame_len = offsetof(struct ieee80211_mgmt, u.beacon.variable) +
+ wl_get_ielen(wl);
+ #if LINUX_VERSION_CODE >= KERNEL_VERSION(2, 6, 39)
+@@ -2006,14 +2012,14 @@
+ #endif
+ if (freq == 0) {
+ WL_ERR(("Invalid channel, fail to chcnage channel to freq\n"));
+- kfree(notif_bss_info);
+- return -EINVAL;
++ err = -EINVAL;
++ goto inform_single_bss_out;
+ }
+ channel = ieee80211_get_channel(wiphy, freq);
+ if (unlikely(!channel)) {
+ WL_ERR(("ieee80211_get_channel error\n"));
+- kfree(notif_bss_info);
+- return -EINVAL;
++ err = -EINVAL;
++ goto inform_single_bss_out;
+ }
+
+ WL_DBG(("SSID : \"%s\", rssi %d, channel %d, capability : 0x04%x, bssid %pM\n",
+@@ -2021,28 +2027,37 @@
+ mgmt->u.beacon.capab_info, &bi->BSSID));
+
+ signal = notif_bss_info->rssi * 100;
+- cbss = cfg80211_inform_bss_frame(wiphy, channel, mgmt,
+- le16_to_cpu(notif_bss_info->frame_len), signal, GFP_KERNEL);
+- if (unlikely(!cbss)) {
+- WL_ERR(("cfg80211_inform_bss_frame error\n"));
+- kfree(notif_bss_info);
+- return -EINVAL;
+- }
+
+- notify_ie = (u8 *)bi + le16_to_cpu(bi->ie_offset);
+- notify_ielen = le32_to_cpu(bi->ie_length);
++ if (!wl->scan_request) {
++ cbss = cfg80211_inform_bss_frame(wiphy, channel, mgmt,
++ le16_to_cpu(notif_bss_info->frame_len), signal, GFP_KERNEL);
++ if (unlikely(!cbss)) {
++ WL_ERR(("cfg80211_inform_bss_frame error\n"));
++ err = -ENOMEM;
++ goto inform_single_bss_out;
++ }
++ } else {
++ notify_ie = (u8 *)bi + le16_to_cpu(bi->ie_offset);
++ notify_ielen = le32_to_cpu(bi->ie_length);
+ #if LINUX_VERSION_CODE < KERNEL_VERSION(3, 18, 0)
+- cbss = cfg80211_inform_bss(wiphy, channel, (const u8 *)(bi->BSSID.octet),
+- 0, beacon_proberesp->capab_info, beacon_proberesp->beacon_int,
+- (const u8 *)notify_ie, notify_ielen, signal, GFP_KERNEL);
++ cbss = cfg80211_inform_bss(wiphy, channel, (const u8 *)(bi->BSSID.octet),
++ 0, beacon_proberesp->capab_info, beacon_proberesp->beacon_int,
++ (const u8 *)notify_ie, notify_ielen, signal, GFP_KERNEL);
+ #else
+- cbss = cfg80211_inform_bss(wiphy, channel, CFG80211_BSS_FTYPE_UNKNOWN, (const u8 *)(bi->BSSID.octet),
+- 0, beacon_proberesp->capab_info, beacon_proberesp->beacon_int,
+- (const u8 *)notify_ie, notify_ielen, signal, GFP_KERNEL);
++ cbss = cfg80211_inform_bss(wiphy, channel,
++ wl->active_scan ?
++ CFG80211_BSS_FTYPE_PRESP : CFG80211_BSS_FTYPE_BEACON,
++ (const u8 *)(bi->BSSID.octet), 0,
++ beacon_proberesp->capab_info,
++ beacon_proberesp->beacon_int,
++ (const u8 *)notify_ie, notify_ielen, signal, GFP_KERNEL);
+ #endif
+-
+- if (unlikely(!cbss))
+- return -ENOMEM;
++ if (unlikely(!cbss)) {
++ WL_ERR(("cfg80211_inform_bss error\n"));
++ err = -ENOMEM;
++ goto inform_single_bss_out;
++ }
++ }
+
+ #if LINUX_VERSION_CODE >= KERNEL_VERSION(3, 9, 0)
+ cfg80211_put_bss(wiphy, cbss);
+@@ -2050,6 +2065,7 @@
+ cfg80211_put_bss(cbss);
+ #endif
+
++inform_single_bss_out:
+ kfree(notif_bss_info);
+
+ return err;
+@@ -2316,6 +2332,9 @@
+ if (err)
+ goto update_bss_info_out;
+
++ bss = cfg80211_get_bss(wl_to_wiphy(wl), NULL, (s8 *)&wl->bssid,
++ ssid->SSID, ssid->SSID_len, WLAN_CAPABILITY_ESS, WLAN_CAPABILITY_ESS);
++
+ ie = ((u8 *)bi) + bi->ie_offset;
+ ie_len = bi->ie_length;
+ } else {
+@@ -2328,11 +2347,18 @@
+ ie_len = bss->len_information_elements;
+ #endif
+ wl->conf->channel = *bss->channel;
++ }
++
++ if (bss) {
+ #if LINUX_VERSION_CODE >= KERNEL_VERSION(3, 9, 0)
+ cfg80211_put_bss(wiphy, bss);
+ #else
+ cfg80211_put_bss(bss);
+ #endif
++ } else {
++ WL_DBG(("Could not update BSS\n"));
++ err = -EINVAL;
++ goto update_bss_info_out;
+ }
+
+ tim = bcm_parse_tlvs(ie, ie_len, WLAN_EID_TIM);
+@@ -2360,10 +2386,17 @@
+ struct wl_cfg80211_connect_info *conn_info = wl_to_conn(wl);
+ s32 err = 0;
+
+- wl_get_assoc_ies(wl);
++ err = wl_get_assoc_ies(wl);
++ if (err)
++ return err;
++
+ memcpy(wl->profile->bssid, &e->addr, ETHER_ADDR_LEN);
+ memcpy(&wl->bssid, &e->addr, ETHER_ADDR_LEN);
+- wl_update_bss_info(wl);
++
++ err = wl_update_bss_info(wl);
++ if (err)
++ return err;
++
+ cfg80211_roamed(ndev,
+ #if LINUX_VERSION_CODE > KERNEL_VERSION(2, 6, 39)
+ &wl->conf->channel,
diff --git a/net-wireless/broadcom-sta/files/006-linux411.patch b/net-wireless/broadcom-sta/files/006-linux411.patch
new file mode 100644
index 000000000000..87715a9c8e2a
--- /dev/null
+++ b/net-wireless/broadcom-sta/files/006-linux411.patch
@@ -0,0 +1,25 @@
+--- a/src/wl/sys/wl_cfg80211_hybrid.c
++++ b/src/wl/sys/wl_cfg80211_hybrid.c
+@@ -39,6 +39,10 @@
+ #include <proto/802.11.h>
+ #include <wl_cfg80211_hybrid.h>
+
++#if LINUX_VERSION_CODE >= KERNEL_VERSION(4, 11, 0)
++#include <linux/sched/signal.h>
++#endif
++
+ #define EVENT_TYPE(e) dtoh32((e)->event_type)
+ #define EVENT_FLAGS(e) dtoh16((e)->flags)
+ #define EVENT_STATUS(e) dtoh32((e)->status)
+--- a/src/wl/sys/wl_linux.c
++++ b/src/wl/sys/wl_linux.c
+@@ -2915,7 +2915,9 @@
+ if (skb == NULL) return;
+
+ skb->dev = wl->monitor_dev;
++#if LINUX_VERSION_CODE < KERNEL_VERSION(4, 11, 0)
+ skb->dev->last_rx = jiffies;
++#endif
+ #if LINUX_VERSION_CODE >= KERNEL_VERSION(2, 6, 22)
+ skb_reset_mac_header(skb);
+ #else
diff --git a/net-wireless/broadcom-sta/files/007-linux412.patch b/net-wireless/broadcom-sta/files/007-linux412.patch
new file mode 100644
index 000000000000..8fb62bdfde5f
--- /dev/null
+++ b/net-wireless/broadcom-sta/files/007-linux412.patch
@@ -0,0 +1,72 @@
+From 0b888bf115612074df99654140a1980111c29748 Mon Sep 17 00:00:00 2001
+From: Antoine Cotten <tonio.cotten@gmail.com>
+Date: Fri, 7 Jul 2017 15:17:47 +0200
+Subject: [PATCH] Apply patch from Debian bug #867258
+
+Compile fix with kernel 4.12
+https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=867258
+--- a/src/wl/sys/wl_cfg80211_hybrid.c
++++ b/src/wl/sys/wl_cfg80211_hybrid.c
+@@ -53,7 +53,11 @@ u32 wl_dbg_level = WL_DBG_ERR;
+ #endif
+
+ static s32 wl_cfg80211_change_iface(struct wiphy *wiphy, struct net_device *ndev,
+- enum nl80211_iftype type, u32 *flags, struct vif_params *params);
++ enum nl80211_iftype type,
++#if LINUX_VERSION_CODE < KERNEL_VERSION(4, 12, 0)
++ u32 *flags,
++#endif
++ struct vif_params *params);
+ #if LINUX_VERSION_CODE >= KERNEL_VERSION(3, 6, 0)
+ static s32
+ wl_cfg80211_scan(struct wiphy *wiphy,
+@@ -466,8 +470,11 @@ wl_dev_ioctl(struct net_device *dev, u32 cmd, void *arg, u32 len)
+
+ static s32
+ wl_cfg80211_change_iface(struct wiphy *wiphy, struct net_device *ndev,
+- enum nl80211_iftype type, u32 *flags,
+- struct vif_params *params)
++ enum nl80211_iftype type,
++#if LINUX_VERSION_CODE < KERNEL_VERSION(4, 12, 0)
++ u32 *flags,
++#endif
++ struct vif_params *params)
+ {
+ struct wl_cfg80211_priv *wl = wiphy_to_wl(wiphy);
+ struct wireless_dev *wdev;
+@@ -2387,6 +2394,15 @@ wl_bss_roaming_done(struct wl_cfg80211_priv *wl, struct net_device *ndev,
+ const wl_event_msg_t *e, void *data)
+ {
+ struct wl_cfg80211_connect_info *conn_info = wl_to_conn(wl);
++#if LINUX_VERSION_CODE >= KERNEL_VERSION(4, 12, 0)
++ struct cfg80211_roam_info roam_info = {
++ .bssid = wl->profile->bssid,
++ .req_ie = conn_info->req_ie,
++ .req_ie_len = conn_info->req_ie_len,
++ .resp_ie = conn_info->resp_ie,
++ .resp_ie_len = conn_info->resp_ie_len,
++ };
++#endif
+ s32 err = 0;
+
+ err = wl_get_assoc_ies(wl);
+@@ -2401,12 +2417,17 @@ wl_bss_roaming_done(struct wl_cfg80211_priv *wl, struct net_device *ndev,
+ return err;
+
+ cfg80211_roamed(ndev,
++#if LINUX_VERSION_CODE >= KERNEL_VERSION(4, 12, 0)
++ &roam_info,
++#else
+ #if LINUX_VERSION_CODE > KERNEL_VERSION(2, 6, 39)
+ &wl->conf->channel,
+ #endif
+ (u8 *)&wl->bssid,
+ conn_info->req_ie, conn_info->req_ie_len,
+- conn_info->resp_ie, conn_info->resp_ie_len, GFP_KERNEL);
++ conn_info->resp_ie, conn_info->resp_ie_len,
++#endif
++ GFP_KERNEL);
+ WL_DBG(("Report roaming result\n"));
+
+ set_bit(WL_STATUS_CONNECTED, &wl->status);
+
diff --git a/net-wireless/broadcom-sta/files/008-linux415.patch b/net-wireless/broadcom-sta/files/008-linux415.patch
new file mode 100644
index 000000000000..fbaa08bc7057
--- /dev/null
+++ b/net-wireless/broadcom-sta/files/008-linux415.patch
@@ -0,0 +1,46 @@
+--- a/src/wl/sys/wl_linux.c
++++ b/src/wl/sys/wl_linux.c
+@@ -93,7 +93,11 @@
+
+ #include <wlc_wowl.h>
+
++#if LINUX_VERSION_CODE >= KERNEL_VERSION(4, 15, 0)
++static void wl_timer(struct timer_list *tl);
++#else
+ static void wl_timer(ulong data);
++#endif
+ static void _wl_timer(wl_timer_t *t);
+ static struct net_device *wl_alloc_linux_if(wl_if_t *wlif);
+
+@@ -2297,10 +2301,17 @@
+ atomic_dec(&t->wl->callbacks);
+ }
+
++#if LINUX_VERSION_CODE >= KERNEL_VERSION(4, 15, 0)
++static void
++wl_timer(struct timer_list *tl)
++{
++ wl_timer_t *t = (wl_timer_t *)tl;
++#else
+ static void
+ wl_timer(ulong data)
+ {
+ wl_timer_t *t = (wl_timer_t *)data;
++#endif
+
+ if (!WL_ALL_PASSIVE_ENAB(t->wl))
+ _wl_timer(t);
+@@ -2352,9 +2363,13 @@
+
+ bzero(t, sizeof(wl_timer_t));
+
++#if LINUX_VERSION_CODE >= KERNEL_VERSION(4, 15, 0)
++ timer_setup(&t->timer, wl_timer, 0);
++#else
+ init_timer(&t->timer);
+ t->timer.data = (ulong) t;
+ t->timer.function = wl_timer;
++#endif
+ t->wl = wl;
+ t->fn = fn;
+ t->arg = arg;
diff --git a/net-wireless/broadcom-sta/files/009-fix_mac_profile_discrepancy.patch b/net-wireless/broadcom-sta/files/009-fix_mac_profile_discrepancy.patch
new file mode 100644
index 000000000000..bcc6d50dc8ac
--- /dev/null
+++ b/net-wireless/broadcom-sta/files/009-fix_mac_profile_discrepancy.patch
@@ -0,0 +1,14 @@
+--- a/src/wl/sys/wl_cfg80211_hybrid.c
++++ b/src/wl/sys/wl_cfg80211_hybrid.c
+@@ -1444,11 +1444,10 @@
+ s32 rate;
+ s32 err = 0;
+
+ if (memcmp(mac, wl->profile->bssid, ETHER_ADDR_LEN)) {
+ WL_ERR(("Wrong Mac address, mac = %pM profile =%pM\n", mac, wl->profile->bssid));
+- return -ENOENT;
+ }
+
+ err = wl_dev_ioctl(dev, WLC_GET_RATE, &rate, sizeof(rate));
+ if (err) {
+ WL_DBG(("Could not get rate (%d)\n", err));
diff --git a/net-wireless/broadcom-sta/files/010-linux56.patch b/net-wireless/broadcom-sta/files/010-linux56.patch
new file mode 100644
index 000000000000..4cee72e9081d
--- /dev/null
+++ b/net-wireless/broadcom-sta/files/010-linux56.patch
@@ -0,0 +1,51 @@
+--- a/src/shared/linux_osl.c
++++ b/src/shared/linux_osl.c
+@@ -942,7 +942,7 @@ osl_getcycles(void)
+ void *
+ osl_reg_map(uint32 pa, uint size)
+ {
+- return (ioremap_nocache((unsigned long)pa, (unsigned long)size));
++ return (ioremap((unsigned long)pa, (unsigned long)size));
+ }
+
+ void
+--- a/src/wl/sys/wl_linux.c
++++ b/src/wl/sys/wl_linux.c
+@@ -582,7 +582,7 @@ wl_attach(uint16 vendor, uint16 device, ulong regs,
+ }
+ wl->bcm_bustype = bustype;
+
+- if ((wl->regsva = ioremap_nocache(dev->base_addr, PCI_BAR0_WINSZ)) == NULL) {
++ if ((wl->regsva = ioremap(dev->base_addr, PCI_BAR0_WINSZ)) == NULL) {
+ WL_ERROR(("wl%d: ioremap() failed\n", unit));
+ goto fail;
+ }
+@@ -772,7 +772,7 @@ wl_pci_probe(struct pci_dev *pdev, const struct pci_device_id *ent)
+ if ((val & 0x0000ff00) != 0)
+ pci_write_config_dword(pdev, 0x40, val & 0xffff00ff);
+ bar1_size = pci_resource_len(pdev, 2);
+- bar1_addr = (uchar *)ioremap_nocache(pci_resource_start(pdev, 2),
++ bar1_addr = (uchar *)ioremap(pci_resource_start(pdev, 2),
+ bar1_size);
+ wl = wl_attach(pdev->vendor, pdev->device, pci_resource_start(pdev, 0), PCI_BUS, pdev,
+ pdev->irq, bar1_addr, bar1_size);
+@@ -3335,12 +3335,19 @@ wl_proc_write(struct file *filp, const char __user *buff, size_t length, loff_t
+ }
+
+ #if LINUX_VERSION_CODE >= KERNEL_VERSION(3, 10, 0)
++#if LINUX_VERSION_CODE >= KERNEL_VERSION(5, 6, 0)
++static struct proc_ops wl_fops = {
++ .proc_read = wl_proc_read,
++ .proc_write = wl_proc_write,
++};
++#else
+ static const struct file_operations wl_fops = {
+ .owner = THIS_MODULE,
+ .read = wl_proc_read,
+ .write = wl_proc_write,
+ };
+ #endif
++#endif
+
+ static int
+ wl_reg_proc_entry(wl_info_t *wl)
diff --git a/net-wireless/broadcom-sta/files/011-linux59.patch b/net-wireless/broadcom-sta/files/011-linux59.patch
new file mode 100644
index 000000000000..9494ed6f1f50
--- /dev/null
+++ b/net-wireless/broadcom-sta/files/011-linux59.patch
@@ -0,0 +1,193 @@
+From f3d652840f8dd959395065a1cf67ca40b04ec69b Mon Sep 17 00:00:00 2001
+From: Joan Bruguera <joanbrugueram@gmail.com>
+Date: Tue, 13 Oct 2020 19:35:55 +0200
+Subject: [PATCH] Get rid of get_fs/set_fs calls in Broadcom WL driver.
+
+Tentative patch for broadcom-wl 6.30.223.271 driver for Linux 5.10 (tested -rc1 up to 5.10.1)
+
+Applies on top of all the patches applied to broadcom-wl-dkms 6.30.223.271-23 on Arch Linux.
+
+NB: Some checks in wlc_ioctl_internal are likely superfluous,
+ but I'm not familiar enough with the driver to remove them with confidence.
+
+See also: https://lwn.net/Articles/722267/
+ https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=47058bb54b57962b3958a936ddbc59355e4c5504
+ https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=5e6e9852d6f76e01b2e6803c74258afa5b432bc5
+
+Signed-off-by: Joan Bruguera <joanbrugueram@gmail.com>
+--- a/src/wl/sys/wl_cfg80211_hybrid.c
++++ b/src/wl/sys/wl_cfg80211_hybrid.c
+@@ -38,6 +38,7 @@
+ #include <wlioctl.h>
+ #include <proto/802.11.h>
+ #include <wl_cfg80211_hybrid.h>
++#include <wl_linux.h>
+
+ #define EVENT_TYPE(e) dtoh32((e)->event_type)
+ #define EVENT_FLAGS(e) dtoh16((e)->flags)
+@@ -435,30 +436,7 @@ static void key_endian_to_host(struct wl_wsec_key *key)
+ static s32
+ wl_dev_ioctl(struct net_device *dev, u32 cmd, void *arg, u32 len)
+ {
+- struct ifreq ifr;
+- struct wl_ioctl ioc;
+- mm_segment_t fs;
+- s32 err = 0;
+-
+- BUG_ON(len < sizeof(int));
+-
+- memset(&ioc, 0, sizeof(ioc));
+- ioc.cmd = cmd;
+- ioc.buf = arg;
+- ioc.len = len;
+- strcpy(ifr.ifr_name, dev->name);
+- ifr.ifr_data = (caddr_t)&ioc;
+-
+- fs = get_fs();
+- set_fs(get_ds());
+-#if defined(WL_USE_NETDEV_OPS)
+- err = dev->netdev_ops->ndo_do_ioctl(dev, &ifr, SIOCDEVPRIVATE);
+-#else
+- err = dev->do_ioctl(dev, &ifr, SIOCDEVPRIVATE);
+-#endif
+- set_fs(fs);
+-
+- return err;
++ return wlc_ioctl_internal(dev, cmd, arg, len);
+ }
+
+ static s32
+--- a/src/wl/sys/wl_iw.c
++++ b/src/wl/sys/wl_iw.c
+@@ -37,6 +37,7 @@ typedef const struct si_pub si_t;
+
+ #include <wl_dbg.h>
+ #include <wl_iw.h>
++#include <wl_linux.h>
+
+ extern bool wl_iw_conn_status_str(uint32 event_type, uint32 status,
+ uint32 reason, char* stringBuf, uint buflen);
+@@ -103,29 +104,7 @@ dev_wlc_ioctl(
+ int len
+ )
+ {
+- struct ifreq ifr;
+- wl_ioctl_t ioc;
+- mm_segment_t fs;
+- int ret;
+-
+- memset(&ioc, 0, sizeof(ioc));
+- ioc.cmd = cmd;
+- ioc.buf = arg;
+- ioc.len = len;
+-
+- strcpy(ifr.ifr_name, dev->name);
+- ifr.ifr_data = (caddr_t) &ioc;
+-
+- fs = get_fs();
+- set_fs(get_ds());
+-#if defined(WL_USE_NETDEV_OPS)
+- ret = dev->netdev_ops->ndo_do_ioctl(dev, &ifr, SIOCDEVPRIVATE);
+-#else
+- ret = dev->do_ioctl(dev, &ifr, SIOCDEVPRIVATE);
+-#endif
+- set_fs(fs);
+-
+- return ret;
++ return wlc_ioctl_internal(dev, cmd, arg, len);
+ }
+
+ static int
+--- a/src/wl/sys/wl_linux.c
++++ b/src/wl/sys/wl_linux.c
+@@ -1643,10 +1643,7 @@ wl_ioctl(struct net_device *dev, struct ifreq *ifr, int cmd)
+ goto done2;
+ }
+
+- if (segment_eq(get_fs(), KERNEL_DS))
+- buf = ioc.buf;
+-
+- else if (ioc.buf) {
++ if (ioc.buf) {
+ if (!(buf = (void *) MALLOC(wl->osh, MAX(ioc.len, WLC_IOCTL_MAXLEN)))) {
+ bcmerror = BCME_NORESOURCE;
+ goto done2;
+@@ -1667,7 +1664,7 @@ wl_ioctl(struct net_device *dev, struct ifreq *ifr, int cmd)
+ WL_UNLOCK(wl);
+
+ done1:
+- if (ioc.buf && (ioc.buf != buf)) {
++ if (ioc.buf) {
+ if (copy_to_user(ioc.buf, buf, ioc.len))
+ bcmerror = BCME_BADADDR;
+ MFREE(wl->osh, buf, MAX(ioc.len, WLC_IOCTL_MAXLEN));
+@@ -1680,6 +1677,39 @@ done2:
+ return (OSL_ERROR(bcmerror));
+ }
+
++int
++wlc_ioctl_internal(struct net_device *dev, int cmd, void *buf, int len)
++{
++ wl_info_t *wl;
++ wl_if_t *wlif;
++ int bcmerror;
++
++ if (!dev)
++ return -ENETDOWN;
++
++ wl = WL_INFO(dev);
++ wlif = WL_DEV_IF(dev);
++ if (wlif == NULL || wl == NULL || wl->dev == NULL)
++ return -ENETDOWN;
++
++ bcmerror = 0;
++
++ WL_TRACE(("wl%d: wlc_ioctl_internal: cmd 0x%x\n", wl->pub->unit, cmd));
++
++ WL_LOCK(wl);
++ if (!capable(CAP_NET_ADMIN)) {
++ bcmerror = BCME_EPERM;
++ } else {
++ bcmerror = wlc_ioctl(wl->wlc, cmd, buf, len, wlif->wlcif);
++ }
++ WL_UNLOCK(wl);
++
++ ASSERT(VALID_BCMERROR(bcmerror));
++ if (bcmerror != 0)
++ wl->pub->bcmerror = bcmerror;
++ return (OSL_ERROR(bcmerror));
++}
++
+ static struct net_device_stats*
+ wl_get_stats(struct net_device *dev)
+ {
+--- a/src/wl/sys/wl_linux.h
++++ b/src/wl/sys/wl_linux.h
+@@ -22,6 +22,7 @@
+ #define _wl_linux_h_
+
+ #include <wlc_types.h>
++#include <wlc_pub.h>
+
+ typedef struct wl_timer {
+ struct timer_list timer;
+@@ -187,6 +188,7 @@ extern irqreturn_t wl_isr(int irq, void *dev_id, struct pt_regs *ptregs);
+ extern int __devinit wl_pci_probe(struct pci_dev *pdev, const struct pci_device_id *ent);
+ extern void wl_free(wl_info_t *wl);
+ extern int wl_ioctl(struct net_device *dev, struct ifreq *ifr, int cmd);
++extern int wlc_ioctl_internal(struct net_device *dev, int cmd, void *buf, int len);
+ extern struct net_device * wl_netdev_get(wl_info_t *wl);
+
+ #endif
+--- a/src/wl/sys/wlc_pub.h
++++ b/src/wl/sys/wlc_pub.h
+@@ -24,6 +24,7 @@
+
+ #include <wlc_types.h>
+ #include <wlc_utils.h>
++#include <siutils.h>
+ #include "proto/802.11.h"
+ #include "proto/bcmevent.h"
+
+--
+2.28.0
diff --git a/net-wireless/broadcom-sta/files/012-linux517.patch b/net-wireless/broadcom-sta/files/012-linux517.patch
new file mode 100644
index 000000000000..9bc7a11d79cc
--- /dev/null
+++ b/net-wireless/broadcom-sta/files/012-linux517.patch
@@ -0,0 +1,74 @@
+From 31b7849092c43805c7fbaf7518b99874aa1b310c Mon Sep 17 00:00:00 2001
+From: Joan Bruguera <joanbrugueram@gmail.com>
+Date: Wed, 12 Jan 2022 20:49:20 +0100
+Subject: [PATCH] Tentative fix for broadcom-wl 6.30.223.271 driver for Linux 5.17-rc1
+
+Set netdev->dev_addr through dev_addr_mod + PDE_DATA fix
+
+Since Linux 5.17 netdev->dev_addr is const and must be changed through
+dev_addr_mod, otherwise a warning is logged in dmesg and bad things may happen.
+
+NB: The #if is not wrong, dev_addr_mod is defined since Linux 5.15-rc1
+
+Plus a trivial fix for PDE_DATA.
+
+Applies on top of all the patches applied to broadcom-wl-dkms 6.30.223.271-28 on Arch Linux.
+
+See also: https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=adeef3e32146a8d2a73c399dc6f5d76a449131b1
+ https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=359745d78351c6f5442435f81549f0207ece28aa
+--- a/src/wl/sys/wl_linux.c
++++ b/src/wl/sys/wl_linux.c
+@@ -93,6 +93,10 @@ struct iw_statistics *wl_get_wireless_stats(struct net_device *dev);
+
+ #include <wlc_wowl.h>
+
++#if (LINUX_VERSION_CODE >= KERNEL_VERSION(5, 17, 0))
++#define PDE_DATA pde_data
++#endif
++
+ #if LINUX_VERSION_CODE >= KERNEL_VERSION(4, 15, 0)
+ static void wl_timer(struct timer_list *tl);
+ #else
+@@ -490,6 +494,12 @@ wl_if_setup(struct net_device *dev)
+ #endif
+ }
+
++#if LINUX_VERSION_CODE < KERNEL_VERSION(5, 15, 0)
++static inline void eth_hw_addr_set(struct net_device *dev, const void *addr) {
++ memcpy(dev->dev_addr, addr, ETHER_ADDR_LEN);
++}
++#endif
++
+ static wl_info_t *
+ wl_attach(uint16 vendor, uint16 device, ulong regs,
+ uint bustype, void *btparam, uint irq, uchar* bar1_addr, uint32 bar1_size)
+@@ -634,7 +644,7 @@ wl_attach(uint16 vendor, uint16 device, ulong regs,
+ WL_ERROR(("wl%d: Error setting MAC ADDRESS\n", unit));
+ }
+ #endif
+- bcopy(&wl->pub->cur_etheraddr, dev->dev_addr, ETHER_ADDR_LEN);
++ eth_hw_addr_set(dev, wl->pub->cur_etheraddr.octet);
+
+ online_cpus = 1;
+
+@@ -1835,7 +1845,7 @@ wl_set_mac_address(struct net_device *dev, void *addr)
+
+ WL_LOCK(wl);
+
+- bcopy(sa->sa_data, dev->dev_addr, ETHER_ADDR_LEN);
++ eth_hw_addr_set(dev, sa->sa_data);
+ err = wlc_iovar_op(wl->wlc, "cur_etheraddr", NULL, 0, sa->sa_data, ETHER_ADDR_LEN,
+ IOV_SET, (WL_DEV_IF(dev))->wlcif);
+ WL_UNLOCK(wl);
+@@ -3010,7 +3020,7 @@ _wl_add_monitor_if(wl_task_t *task)
+ else
+ dev->type = ARPHRD_IEEE80211_RADIOTAP;
+
+- bcopy(wl->dev->dev_addr, dev->dev_addr, ETHER_ADDR_LEN);
++ eth_hw_addr_set(dev, wl->dev->dev_addr);
+
+ #if defined(WL_USE_NETDEV_OPS)
+ dev->netdev_ops = &wl_netdev_monitor_ops;
+--
+2.35.1
+
diff --git a/net-wireless/broadcom-sta/files/013-linux518.patch b/net-wireless/broadcom-sta/files/013-linux518.patch
new file mode 100644
index 000000000000..dbac7f85c9ad
--- /dev/null
+++ b/net-wireless/broadcom-sta/files/013-linux518.patch
@@ -0,0 +1,70 @@
+--- a/src/shared/linux_osl.c
++++ b/src/shared/linux_osl.c
+@@ -599,6 +599,8 @@
+ va = kmalloc(size, GFP_ATOMIC | __GFP_ZERO);
+ if (va)
+ *pap = (ulong)__virt_to_phys(va);
++#elif LINUX_VERSION_CODE >= KERNEL_VERSION(5, 18, 0)
++ va = dma_alloc_coherent(&((struct pci_dev *)osh->pdev)->dev, size, (dma_addr_t*)pap, GFP_ATOMIC);
+ #else
+ va = pci_alloc_consistent(osh->pdev, size, (dma_addr_t*)pap);
+ #endif
+@@ -612,6 +614,8 @@
+
+ #ifdef __ARM_ARCH_7A__
+ kfree(va);
++#elif LINUX_VERSION_CODE >= KERNEL_VERSION(5, 18, 0)
++ dma_free_coherent(&((struct pci_dev *)osh->pdev)->dev, size, va, (dma_addr_t)pa);
+ #else
+ pci_free_consistent(osh->pdev, size, va, (dma_addr_t)pa);
+ #endif
+@@ -623,7 +627,11 @@
+ int dir;
+
+ ASSERT((osh && (osh->magic == OS_HANDLE_MAGIC)));
++#if LINUX_VERSION_CODE >= KERNEL_VERSION(5, 18, 0)
++ dir = (direction == DMA_TX)? DMA_TO_DEVICE: DMA_FROM_DEVICE;
++#else
+ dir = (direction == DMA_TX)? PCI_DMA_TODEVICE: PCI_DMA_FROMDEVICE;
++#endif
+
+ #if defined(__ARM_ARCH_7A__) && defined(BCMDMASGLISTOSL)
+ if (dmah != NULL) {
+@@ -641,7 +649,11 @@
+ ASSERT(totsegs + nsegs <= MAX_DMA_SEGS);
+ sg->page_link = 0;
+ sg_set_buf(sg, PKTDATA(osh, skb), PKTLEN(osh, skb));
++#if LINUX_VERSION_CODE >= KERNEL_VERSION(5, 18, 0)
++ dma_map_single(&((struct pci_dev *)osh->pdev)->dev, PKTDATA(osh, skb), PKTLEN(osh, skb), dir);
++#else
+ pci_map_single(osh->pdev, PKTDATA(osh, skb), PKTLEN(osh, skb), dir);
++#endif
+ }
+ totsegs += nsegs;
+ totlen += PKTLEN(osh, skb);
+@@ -656,7 +668,11 @@
+ }
+ #endif
+
++#if LINUX_VERSION_CODE >= KERNEL_VERSION(5, 18, 0)
++ return (dma_map_single(&((struct pci_dev *)osh->pdev)->dev, va, size, dir));
++#else
+ return (pci_map_single(osh->pdev, va, size, dir));
++#endif
+ }
+
+ void BCMFASTPATH
+@@ -665,8 +681,13 @@
+ int dir;
+
+ ASSERT((osh && (osh->magic == OS_HANDLE_MAGIC)));
++#if LINUX_VERSION_CODE >= KERNEL_VERSION(5, 18, 0)
++ dir = (direction == DMA_TX)? DMA_TO_DEVICE: DMA_FROM_DEVICE;
++ dma_unmap_single(&((struct pci_dev *)osh->pdev)->dev, (uint32)pa, size, dir);
++#else
+ dir = (direction == DMA_TX)? PCI_DMA_TODEVICE: PCI_DMA_FROMDEVICE;
+ pci_unmap_single(osh->pdev, (uint32)pa, size, dir);
++#endif
+ }
+
+ #if defined(BCMDBG_ASSERT)
diff --git a/net-wireless/broadcom-sta/files/014-linux414.patch b/net-wireless/broadcom-sta/files/014-linux414.patch
new file mode 100644
index 000000000000..256a4d90216b
--- /dev/null
+++ b/net-wireless/broadcom-sta/files/014-linux414.patch
@@ -0,0 +1,31 @@
+From: Gerardo Esteban Malazdrewicz <gerardo@malazdrewicz.com.ar>
+Date: Fri, 29 Dec 2017 23:44:24 -0400
+Subject: linux414
+Origin: https://bugs.debian.org/885885
+
+linux 4.14 changed the kernel_read function prototype.
+--- a/src/shared/linux_osl.c
++++ b/src/shared/linux_osl.c
+@@ -1076,11 +1076,21 @@ osl_os_get_image_block(char *buf, int len, void *image)
+ {
+ struct file *fp = (struct file *)image;
+ int rdlen;
++ loff_t pos;
+
+ if (!image)
+ return 0;
+
+- rdlen = kernel_read(fp, fp->f_pos, buf, len);
++ pos = fp->f_pos;
++ rdlen = kernel_read(fp,
++#if LINUX_VERSION_CODE < KERNEL_VERSION(4, 14, 0)
++ pos,
++#endif
++ buf, len
++#if LINUX_VERSION_CODE >= KERNEL_VERSION(4, 14, 0)
++ ,&pos
++#endif
++ );
+ if (rdlen > 0)
+ fp->f_pos += rdlen;
+
diff --git a/net-wireless/broadcom-sta/files/015-linux600.patch b/net-wireless/broadcom-sta/files/015-linux600.patch
new file mode 100644
index 000000000000..2b02046cb328
--- /dev/null
+++ b/net-wireless/broadcom-sta/files/015-linux600.patch
@@ -0,0 +1,25 @@
+From 933540c63f33e6ac2825d65c4b681ef3387d9146 Mon Sep 17 00:00:00 2001
+From: Antoine Cotten <hello@acotten.com>
+Date: Mon, 15 Aug 2022 17:53:51 +0200
+Subject: [PATCH] cfg80211_roam_info compat for MLO APIs in Linux >= 6.0
+
+The 'bssid' struct field is now under 'links.bssid'.
+
+See also: https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=efbabc11650040c64884ff3019b88c7bcc0ceb1d
+
+Original patch by Joan Bruguera:
+https://gist.github.com/joanbm/207210d74637870c01ef5a3c262a597d
+--- a/src/wl/sys/wl_cfg80211_hybrid.c
++++ b/src/wl/sys/wl_cfg80211_hybrid.c
+@@ -2412,7 +2412,11 @@ wl_bss_roaming_done(struct wl_cfg80211_priv *wl, struct net_device *ndev,
+ struct wl_cfg80211_connect_info *conn_info = wl_to_conn(wl);
+ #if LINUX_VERSION_CODE >= KERNEL_VERSION(4, 12, 0)
+ struct cfg80211_roam_info roam_info = {
++#if LINUX_VERSION_CODE < KERNEL_VERSION(6, 0, 0)
+ .bssid = wl->profile->bssid,
++#else
++ .links[0].bssid = wl->profile->bssid,
++#endif
+ .req_ie = conn_info->req_ie,
+ .req_ie_len = conn_info->req_ie_len,
+ .resp_ie = conn_info->resp_ie,
diff --git a/net-wireless/broadcom-sta/files/016-linux601.patch b/net-wireless/broadcom-sta/files/016-linux601.patch
new file mode 100644
index 000000000000..e099b789bd6c
--- /dev/null
+++ b/net-wireless/broadcom-sta/files/016-linux601.patch
@@ -0,0 +1,89 @@
+--- a/src/wl/sys/wl_cfg80211_hybrid.c
++++ b/src/wl/sys/wl_cfg80211_hybrid.c
+@@ -105,14 +105,28 @@ static s32 wl_cfg80211_get_tx_power(stru
+ static s32 wl_cfg80211_get_tx_power(struct wiphy *wiphy, s32 *dbm);
+ #endif
+
+-#if LINUX_VERSION_CODE >= KERNEL_VERSION(2, 6, 38)
++#if LINUX_VERSION_CODE >= KERNEL_VERSION(6, 1, 0)
++static s32 wl_cfg80211_config_default_key(struct wiphy *wiphy,
++ struct net_device *dev, int link_id, u8 key_idx, bool unicast,
++ bool multicast);
++#elif LINUX_VERSION_CODE >= KERNEL_VERSION(2, 6, 38)
+ static s32 wl_cfg80211_config_default_key(struct wiphy *wiphy,
+ struct net_device *dev, u8 key_idx, bool unicast, bool multicast);
+ #else
+ static s32 wl_cfg80211_config_default_key(struct wiphy *wiphy,
+ struct net_device *dev, u8 key_idx);
+ #endif
+-#if LINUX_VERSION_CODE >= KERNEL_VERSION(2, 6, 37)
++#if LINUX_VERSION_CODE >= KERNEL_VERSION(6, 1, 0)
++static s32 wl_cfg80211_add_key(struct wiphy *wiphy, struct net_device *dev,
++ int link_id, u8 key_idx, bool pairwise, const u8 *mac_addr,
++ struct key_params *params);
++static s32 wl_cfg80211_del_key(struct wiphy *wiphy, struct net_device *dev,
++ int link_id, u8 key_idx, bool pairwise, const u8 *mac_addr);
++static s32 wl_cfg80211_get_key(struct wiphy *wiphy, struct net_device *dev,
++ int link_id, u8 key_idx, bool pairwise, const u8 *mac_addr,
++ void *cookie,
++ void (*callback) (void *cookie, struct key_params *params));
++#elif LINUX_VERSION_CODE >= KERNEL_VERSION(2, 6, 37)
+ static s32 wl_cfg80211_add_key(struct wiphy *wiphy, struct net_device *dev,
+ u8 key_idx, bool pairwise, const u8 *mac_addr, struct key_params *params);
+ static s32 wl_cfg80211_del_key(struct wiphy *wiphy, struct net_device *dev,
+@@ -1161,7 +1175,12 @@ static s32 wl_cfg80211_get_tx_power(stru
+ return err;
+ }
+
+-#if LINUX_VERSION_CODE >= KERNEL_VERSION(2, 6, 38)
++#if LINUX_VERSION_CODE >= KERNEL_VERSION(6, 1, 0)
++static s32
++wl_cfg80211_config_default_key(struct wiphy *wiphy,
++ struct net_device *dev, int link_id, u8 key_idx, bool unicast,
++ bool multicast)
++#elif LINUX_VERSION_CODE >= KERNEL_VERSION(2, 6, 38)
+ static s32
+ wl_cfg80211_config_default_key(struct wiphy *wiphy,
+ struct net_device *dev, u8 key_idx, bool unicast, bool multicast)
+@@ -1186,7 +1205,12 @@ wl_cfg80211_config_default_key(struct wi
+ return 0;
+ }
+
+-#if LINUX_VERSION_CODE >= KERNEL_VERSION(2, 6, 37)
++#if LINUX_VERSION_CODE >= KERNEL_VERSION(6, 1, 0)
++static s32
++wl_cfg80211_add_key(struct wiphy *wiphy, struct net_device *dev,
++ int link_id, u8 key_idx, bool pairwise, const u8 *mac_addr,
++ struct key_params *params)
++#elif LINUX_VERSION_CODE >= KERNEL_VERSION(2, 6, 37)
+ static s32
+ wl_cfg80211_add_key(struct wiphy *wiphy, struct net_device *dev,
+ u8 key_idx, bool pairwise, const u8 *mac_addr, struct key_params *params)
+@@ -1307,7 +1331,11 @@ wl_cfg80211_add_key(struct wiphy *wiphy,
+ return err;
+ }
+
+-#if LINUX_VERSION_CODE >= KERNEL_VERSION(2, 6, 37)
++#if LINUX_VERSION_CODE >= KERNEL_VERSION(6, 1, 0)
++static s32
++wl_cfg80211_del_key(struct wiphy *wiphy, struct net_device *dev,
++ int link_id, u8 key_idx, bool pairwise, const u8 *mac_addr)
++#elif LINUX_VERSION_CODE >= KERNEL_VERSION(2, 6, 37)
+ static s32
+ wl_cfg80211_del_key(struct wiphy *wiphy, struct net_device *dev,
+ u8 key_idx, bool pairwise, const u8 *mac_addr)
+@@ -1350,7 +1378,13 @@ wl_cfg80211_del_key(struct wiphy *wiphy,
+ return err;
+ }
+
+-#if LINUX_VERSION_CODE >= KERNEL_VERSION(2, 6, 37)
++#if LINUX_VERSION_CODE >= KERNEL_VERSION(6, 1, 0)
++static s32
++wl_cfg80211_get_key(struct wiphy *wiphy, struct net_device *dev,
++ int link_id, u8 key_idx, bool pairwise, const u8 *mac_addr,
++ void *cookie,
++ void (*callback) (void *cookie, struct key_params * params))
++#elif LINUX_VERSION_CODE >= KERNEL_VERSION(2, 6, 37)
+ static s32
+ wl_cfg80211_get_key(struct wiphy *wiphy, struct net_device *dev,
+ u8 key_idx, bool pairwise, const u8 *mac_addr, void *cookie,
diff --git a/net-wireless/broadcom-sta/files/017-handle-new-header-name-6.12.patch b/net-wireless/broadcom-sta/files/017-handle-new-header-name-6.12.patch
new file mode 100644
index 000000000000..f9906f16aeb0
--- /dev/null
+++ b/net-wireless/broadcom-sta/files/017-handle-new-header-name-6.12.patch
@@ -0,0 +1,33 @@
+https://bugs.gentoo.org/947928
+
+Adds support for the new name of the asm/unaligned.h header file for kernels >=6.12.0 (header file was renamed to "linux/unaligned.h")
+Bug found by Sam Petch
+Patch by Sam Petch
+
+TESTING DETAILS:
+
+Bugfix tested by Sam Petch on kernels: gentoo-sources:6.6.67, gentoo-sources:6.12.4-r1, gentoo-sources:6.12.9
+
+Patch tested on kernels: gentoo-sources:6.6.67, gentoo-sources:6.12.9
+
+Bugfix and patch tested on device: 2012 Macbook Pro (A1278) running Gentoo Linux with Gnome Desktop / OpenRC profile
+
+Chipset: BCM4331 (Broadcom)
+
+Contact: sam.petch.recall824@passinbox.com
+
+--- a/src/wl/sys/wl_linux.c
++++ b/src/wl/sys/wl_linux.c
+@@ -56,7 +56,12 @@
+ #include <asm/irq.h>
+ #include <asm/pgtable.h>
+ #include <asm/uaccess.h>
++
++#if LINUX_VERSION_CODE >= KERNEL_VERSION(6, 12, 0)
++#include <linux/unaligned.h>
++#else
+ #include <asm/unaligned.h>
++#endif
+
+ #include <proto/802.1d.h>
+
diff --git a/net-wireless/broadcom-sta/files/018-broadcom-wl-fix-linux-6.13.patch b/net-wireless/broadcom-sta/files/018-broadcom-wl-fix-linux-6.13.patch
new file mode 100644
index 000000000000..940eb7978c53
--- /dev/null
+++ b/net-wireless/broadcom-sta/files/018-broadcom-wl-fix-linux-6.13.patch
@@ -0,0 +1,27 @@
+From https://gist.github.com/joanbm/72189c81ff67b39d36a660cf00483ccb
+From: =?UTF-8?q?Joan=20Bruguera=20Mic=C3=B3?= <joanbrugueram@gmail.com>
+Date: Sat, 12 Oct 2024 11:54:40 +0000
+Subject: [PATCH] Tentative patch for broadcom-wl 6.30.223.271 driver for Linux
+ 6.13-rc1
+
+The net/lib80211.h header has been removed by commit
+"wifi: ipw2x00/lib80211: move remaining lib80211 into libipw"
+(Johannes Berg, 7 Oct 2024).
+The header does not appear to be actually used anywhere, so remove it.
+
+ #include <asm/irq.h>
+ #include <asm/pgtable.h>
+--- a/src/include/linuxver.h
++++ b/src/include/linuxver.h
+@@ -147,7 +147,7 @@ typedef irqreturn_t(*FN_ISR) (int irq, void *dev_id, struct pt_regs *ptregs);
+ #include <linux/sched.h>
+ #endif
+
+-#if LINUX_VERSION_CODE >= KERNEL_VERSION(2, 6, 29)
++#if LINUX_VERSION_CODE >= KERNEL_VERSION(2, 6, 29) && LINUX_VERSION_CODE < KERNEL_VERSION(6, 13, 0)
+ #include <net/lib80211.h>
+ #endif
+ #if LINUX_VERSION_CODE >= KERNEL_VERSION(2, 6, 29)
+--
+2.47.0
+
diff --git a/net-wireless/broadcom-sta/files/019-broadcom-wl-fix-linux-6.14.patch b/net-wireless/broadcom-sta/files/019-broadcom-wl-fix-linux-6.14.patch
new file mode 100644
index 000000000000..a431b8f060d8
--- /dev/null
+++ b/net-wireless/broadcom-sta/files/019-broadcom-wl-fix-linux-6.14.patch
@@ -0,0 +1,40 @@
+From https://gist.github.com/joanbm/b711bafdcb065d57364a701061b902a3
+From: =?UTF-8?q?Joan=20Bruguera=20Mic=C3=B3?= <joanbrugueram@gmail.com>
+Date: Sun, 8 Dec 2024 17:57:43 +0000
+Subject: [PATCH] Tentative fix for broadcom-wl 6.30.223.271 driver for Linux
+ 6.14-rc1
+
+Related to the new parameter for get_tx_power introduced in
+"wifi: cfg80211: send MLO links tx power info in GET_INTERFACE"
+(Rameshkumar Sundaram, 25 Nov 2024).
+
+As the driver doesn't support Multi-Link, we just ignore it afterwards.
+--- a/src/wl/sys/wl_cfg80211_hybrid.c
++++ b/src/wl/sys/wl_cfg80211_hybrid.c
+@@ -99,7 +99,10 @@ static s32 wl_cfg80211_set_tx_power(struct wiphy *wiphy,
+ enum tx_power_setting type, s32 dbm);
+ #endif
+
+-#if LINUX_VERSION_CODE >= KERNEL_VERSION(3, 8, 0)
++#if LINUX_VERSION_CODE >= KERNEL_VERSION(6, 14, 0)
++static s32 wl_cfg80211_get_tx_power(struct wiphy *wiphy, struct wireless_dev *wdev,
++ unsigned int link_id, s32 *dbm);
++#elif LINUX_VERSION_CODE >= KERNEL_VERSION(3, 8, 0)
+ static s32 wl_cfg80211_get_tx_power(struct wiphy *wiphy, struct wireless_dev *wdev, s32 *dbm);
+ #else
+ static s32 wl_cfg80211_get_tx_power(struct wiphy *wiphy, s32 *dbm);
+@@ -1152,7 +1155,10 @@ wl_cfg80211_set_tx_power(struct wiphy *wiphy, enum tx_power_setting type, s32 db
+ return err;
+ }
+
+-#if LINUX_VERSION_CODE >= KERNEL_VERSION(3, 8, 0)
++#if LINUX_VERSION_CODE >= KERNEL_VERSION(6, 14, 0)
++static s32 wl_cfg80211_get_tx_power(struct wiphy *wiphy, struct wireless_dev *wdev,
++ unsigned int link_id, s32 *dbm)
++#elif LINUX_VERSION_CODE >= KERNEL_VERSION(3, 8, 0)
+ static s32 wl_cfg80211_get_tx_power(struct wiphy *wiphy, struct wireless_dev *wdev, s32 *dbm)
+ #else
+ static s32 wl_cfg80211_get_tx_power(struct wiphy *wiphy, s32 *dbm)
+--
+2.48.1
+
diff --git a/net-wireless/broadcom-sta/files/020-broadcom-wl-fix-linux-6.15.patch b/net-wireless/broadcom-sta/files/020-broadcom-wl-fix-linux-6.15.patch
new file mode 100644
index 000000000000..4f3353389f29
--- /dev/null
+++ b/net-wireless/broadcom-sta/files/020-broadcom-wl-fix-linux-6.15.patch
@@ -0,0 +1,122 @@
+From: https://gist.githubusercontent.com/joanbm/438536d70b6b55f69d3974d936aea1f7/raw/d2f4f1c6ce15046f7ce2906415a93cdf40a8f564/broadcom-wl-fix-linux-6.15.patch
+Date: Sun, 23 Feb 2025 14:29:21 +0000
+Subject: [PATCH] Tentative patch for broadcom-wl 6.30.223.271 driver for Linux
+ 6.15-rc1
+
+Due to the fact that the driver is unmaintained, and can't be adapted
+to the current Linux kernel security standards (e.g. IBT), as it has a
+proprietary blob; and this is likely to be an ever-growing security
+risk, I have added a warning when the module is loaded.
+Use at your own risk; no warranty of any kind is provided.
+See also the objtool changes on the Makefile below.
+
+The changes to replace EXTRA_CFLAGS and EXTRA_LDFLAGS with ccflags-y
+and ldflags-y are rel. commit "kbuild: remove EXTRA_*FLAGS support"
+(Masahiro Yamada, 6 Feb 2025), according to which they have been
+deprecated since 2007, so no need to add any fallback for old kernels.
+
+NB: If the package build also contains references to EXTRA_*FLAGS
+(e.g. Arch Linux's broadcom-wl-dkms PKGBUILD), replace those as well!
+--- a/Makefile
++++ b/Makefile
+@@ -117,15 +117,15 @@ GCCVERSION := $(subst $(space),$(empty),$(GCCVERSION))
+ GCCVERSION := $(shell expr `echo $(GCCVERSION)` | cut -b1-3)
+ GE_49 := $(shell expr `echo $(GCCVERSION)` \>= 490)
+
+-EXTRA_CFLAGS :=
++ccflags-y :=
+
+ ifeq ($(APIFINAL),CFG80211)
+- EXTRA_CFLAGS += -DUSE_CFG80211
++ ccflags-y += -DUSE_CFG80211
+ $(info Using CFG80211 API)
+ endif
+
+ ifeq ($(APIFINAL),WEXT)
+- EXTRA_CFLAGS += -DUSE_IW
++ ccflags-y += -DUSE_IW
+ $(info Using Wireless Extension API)
+ endif
+
+@@ -137,15 +137,15 @@ wl-objs += src/wl/sys/wl_linux.o
+ wl-objs += src/wl/sys/wl_iw.o
+ wl-objs += src/wl/sys/wl_cfg80211_hybrid.o
+
+-EXTRA_CFLAGS += -I$(src)/src/include -I$(src)/src/common/include
+-EXTRA_CFLAGS += -I$(src)/src/wl/sys -I$(src)/src/wl/phy -I$(src)/src/wl/ppr/include
+-EXTRA_CFLAGS += -I$(src)/src/shared/bcmwifi/include
+-#EXTRA_CFLAGS += -DBCMDBG_ASSERT -DBCMDBG_ERR
++ccflags-y += -I$(src)/src/include -I$(src)/src/common/include
++ccflags-y += -I$(src)/src/wl/sys -I$(src)/src/wl/phy -I$(src)/src/wl/ppr/include
++ccflags-y += -I$(src)/src/shared/bcmwifi/include
++#ccflags-y += -DBCMDBG_ASSERT -DBCMDBG_ERR
+ ifeq "$(GE_49)" "1"
+-EXTRA_CFLAGS += -Wno-date-time
++ccflags-y += -Wno-date-time
+ endif
+
+-EXTRA_LDFLAGS := $(src)/lib/wlc_hybrid.o_shipped
++ldflags-y := $(src)/lib/wlc_hybrid.o_shipped
+
+ KBASE ?= /lib/modules/`uname -r`
+ KBUILD_DIR ?= $(KBASE)/build
+@@ -155,6 +155,21 @@ MDEST_DIR ?= $(KBASE)/kernel/drivers/net/wireless
+ CROSS_TOOLS = /path/to/tools
+ CROSS_KBUILD_DIR = /path/to/kernel/tree
+
++# Rel. commit "objtool: Always fail on fatal errors" (Josh Poimboeuf, 31 Mar 2025)
++# This is a *ugly* hack to disable objtool during the final processing of wl.o.
++# Since is embeds the proprietary blob (wlc_hybrid.o_shipped), objtool can't
++# process it, as it does not follow the requirements of current kernels,
++# including support for critical security features. As of Linux v6.15+, it causes
++# a build error. Disable it, at your own risk. Note the MIT license applies:
++# THE SOFTWARE IS PROVIDED “AS IS”, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
++# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
++# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
++# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
++# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
++# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
++# SOFTWARE.
++wl.o: override objtool-enabled =
++
+ all:
+ KBUILD_NOPEDANTIC=1 make -C $(KBUILD_DIR) M=`pwd`
+
+--- a/src/wl/sys/wl_linux.c
++++ b/src/wl/sys/wl_linux.c
+@@ -168,6 +168,8 @@ static int wl_set_radio_block(void *data, bool blocked);
+ static void wl_report_radio_state(wl_info_t *wl);
+ #endif
+
++// Rel. commit "modpost: require a MODULE_DESCRIPTION()" (Jeff Johnson, 11 Mar 2025)
++MODULE_DESCRIPTION("Broadcom-wl wireless driver [unmaintained, out-of-tree]");
+ MODULE_LICENSE("MIXED/Proprietary");
+
+ static struct pci_device_id wl_id_table[] =
+@@ -914,6 +916,10 @@ static struct pci_driver wl_pci_driver __refdata = {
+ static int __init
+ wl_module_init(void)
+ {
++ printk(KERN_WARNING "You are using the broadcom-wl driver, which is not "
++ "maintained and is incompatible with Linux kernel security mitigations. "
++ "It is heavily recommended to replace the hardware and remove the driver. "
++ "Proceed at your own risk!");
+ int error = -ENODEV;
+
+ #ifdef BCMDBG
+@@ -2457,7 +2463,12 @@ wl_del_timer(wl_info_t *wl, wl_timer_t *t)
+ ASSERT(t);
+ if (t->set) {
+ t->set = FALSE;
++#if LINUX_VERSION_CODE >= KERNEL_VERSION(6, 15, 0)
++ // Rel. commit "treewide: Switch/rename to timer_delete[_sync]()" (Thomas Gleixner, 5 Apr 2025)
++ if (!timer_delete(&t->timer)) {
++#else
+ if (!del_timer(&t->timer)) {
++#endif
+ #ifdef BCMDBG
+ WL_INFORM(("wl%d: Failed to delete timer %s\n", wl->unit, t->name));
+ #endif
+--
+2.49.0
+
diff --git a/net-wireless/broadcom-sta/files/021-broadcom-wl-fix-linux-6.17.patch b/net-wireless/broadcom-sta/files/021-broadcom-wl-fix-linux-6.17.patch
new file mode 100644
index 000000000000..ca51a6d14d9f
--- /dev/null
+++ b/net-wireless/broadcom-sta/files/021-broadcom-wl-fix-linux-6.17.patch
@@ -0,0 +1,77 @@
+patch based on https://gist.github.com/joanbm/4e7f18febc2c25f5fdf8143a739dccd1
+
+diff -urN works/src/wl/sys/wl_cfg80211_hybrid.c fixed/src/wl/sys/wl_cfg80211_hybrid.c
+--- works/src/wl/sys/wl_cfg80211_hybrid.c 2026-02-25 21:07:31.214177735 +0600
++++ fixed/src/wl/sys/wl_cfg80211_hybrid.c 2026-02-25 21:19:10.577143276 +0600
+@@ -68,7 +68,11 @@
+ static s32 wl_cfg80211_scan(struct wiphy *wiphy, struct net_device *ndev,
+ struct cfg80211_scan_request *request);
+ #endif
++#if LINUX_VERSION_CODE >= KERNEL_VERSION(6, 17, 0)
++static s32 wl_cfg80211_set_wiphy_params(struct wiphy *wiphy, int radio_idx, u32 changed);
++#else
+ static s32 wl_cfg80211_set_wiphy_params(struct wiphy *wiphy, u32 changed);
++#endif
+ static s32 wl_cfg80211_join_ibss(struct wiphy *wiphy, struct net_device *dev,
+ struct cfg80211_ibss_params *params);
+ static s32 wl_cfg80211_leave_ibss(struct wiphy *wiphy, struct net_device *dev);
+@@ -87,7 +91,10 @@
+ struct cfg80211_connect_params *sme);
+ static s32 wl_cfg80211_disconnect(struct wiphy *wiphy, struct net_device *dev, u16 reason_code);
+
+-#if LINUX_VERSION_CODE >= KERNEL_VERSION(3, 8, 0)
++#if LINUX_VERSION_CODE >= KERNEL_VERSION(6, 17, 0)
++static s32 wl_cfg80211_set_tx_power(struct wiphy *wiphy, struct wireless_dev *wdev, int radio_idx,
++ enum nl80211_tx_power_setting type, s32 dbm);
++#elif LINUX_VERSION_CODE >= KERNEL_VERSION(3, 8, 0)
+ static s32
+ wl_cfg80211_set_tx_power(struct wiphy *wiphy, struct wireless_dev *wdev,
+ enum nl80211_tx_power_setting type, s32 dbm);
+@@ -99,7 +106,10 @@
+ enum tx_power_setting type, s32 dbm);
+ #endif
+
+-#if LINUX_VERSION_CODE >= KERNEL_VERSION(6, 14, 0)
++#if LINUX_VERSION_CODE >= KERNEL_VERSION(6, 17, 0)
++static s32 wl_cfg80211_get_tx_power(struct wiphy *wiphy, struct wireless_dev *wdev, int radio_idx,
++ u32 link_id, s32 *dbm);
++#elif LINUX_VERSION_CODE >= KERNEL_VERSION(6, 14, 0)
+ static s32 wl_cfg80211_get_tx_power(struct wiphy *wiphy, struct wireless_dev *wdev,
+ unsigned int link_id, s32 *dbm);
+ #elif LINUX_VERSION_CODE >= KERNEL_VERSION(3, 8, 0)
+@@ -660,7 +670,11 @@
+ return err;
+ }
+
++#if LINUX_VERSION_CODE >= KERNEL_VERSION(6, 17, 0)
++static s32 wl_cfg80211_set_wiphy_params(struct wiphy *wiphy, int radio_idx, u32 changed)
++#else
+ static s32 wl_cfg80211_set_wiphy_params(struct wiphy *wiphy, u32 changed)
++#endif
+ {
+ struct wl_cfg80211_priv *wl = wiphy_to_wl(wiphy);
+ struct net_device *ndev = wl_to_ndev(wl);
+@@ -1094,7 +1108,10 @@
+ return err;
+ }
+
+-#if LINUX_VERSION_CODE >= KERNEL_VERSION(3, 8, 0)
++#if LINUX_VERSION_CODE >= KERNEL_VERSION(6, 17, 0)
++static s32 wl_cfg80211_set_tx_power(struct wiphy *wiphy, struct wireless_dev *wdev, int radio_idx,
++ enum nl80211_tx_power_setting type, s32 dbm)
++#elif LINUX_VERSION_CODE >= KERNEL_VERSION(3, 8, 0)
+ static s32
+ wl_cfg80211_set_tx_power(struct wiphy *wiphy, struct wireless_dev *wdev,
+ enum nl80211_tx_power_setting type, s32 dbm)
+@@ -1155,7 +1172,10 @@
+ return err;
+ }
+
+-#if LINUX_VERSION_CODE >= KERNEL_VERSION(6, 14, 0)
++#if LINUX_VERSION_CODE >= KERNEL_VERSION(6, 17, 0)
++static s32 wl_cfg80211_get_tx_power(struct wiphy *wiphy, struct wireless_dev *wdev, int radio_idx,
++ u32 link_id, s32 *dbm)
++#elif LINUX_VERSION_CODE >= KERNEL_VERSION(6, 14, 0)
+ static s32 wl_cfg80211_get_tx_power(struct wiphy *wiphy, struct wireless_dev *wdev,
+ unsigned int link_id, s32 *dbm)
+ #elif LINUX_VERSION_CODE >= KERNEL_VERSION(3, 8, 0)
diff --git a/net-wireless/broadcom-sta/files/broadcom-sta-modules.conf b/net-wireless/broadcom-sta/files/broadcom-sta-modules.conf
new file mode 100644
index 000000000000..458947e335b4
--- /dev/null
+++ b/net-wireless/broadcom-sta/files/broadcom-sta-modules.conf
@@ -0,0 +1,17 @@
+# modprobe.d configuration file for WL
+
+# Internal Aliases - Do not edit
+# ------------------------------
+alias wlan0 wl
+
+
+# Configurable module parameters
+# ------------------------------
+# passivemode: (int)
+# wl_txq_thresh: (int)
+# oneonly: (int)
+# piomode: (int)
+# instance_base: (int)
+# nompc: (int)
+# intf_name: (string)
+
diff --git a/net-wireless/broadcom-sta/metadata.xml b/net-wireless/broadcom-sta/metadata.xml
new file mode 100644
index 000000000000..f9d39aa7105b
--- /dev/null
+++ b/net-wireless/broadcom-sta/metadata.xml
@@ -0,0 +1,16 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE pkgmetadata SYSTEM "https://docs.baldeagleos.com/dtd/metadata.dtd">
+<pkgmetadata>
+ <maintainer type="person" proxied="yes">
+ <email>immoloism@gmail.com</email>
+ <name>Ian Jordan</name>
+ </maintainer>
+ <maintainer type="project" proxied="proxy">
+ <email>proxy-maint@gentoo.org</email>
+ <name>Proxy Maintainers</name>
+ </maintainer>
+ <upstream>
+ <remote-id type="launchpad">~albertomilone</remote-id>
+ </upstream>
+ <origin>baldeagleos-repo</origin>
+</pkgmetadata>
diff --git a/net-wireless/crackle/Manifest b/net-wireless/crackle/Manifest
new file mode 100644
index 000000000000..cb0b87b590c7
--- /dev/null
+++ b/net-wireless/crackle/Manifest
@@ -0,0 +1 @@
+DIST crackle-0.1.tgz 27015 BLAKE2B 90cf55c24afd2327f0400d5fa0418a7d6f73f5c81dfe04bd795b76bd6f437b1c9ce11a139c8e0076b3752e3c73d66d3610ea7421e08cbce9e77260551e27bc89 SHA512 e60341e1fae6a3212028714a7bdba2c8f65d4b92d3d670194954df0e11e1f69a1bb6a5bcbdd5c4db54774cfe60955d50fbd2bfaff5fa615bf253f57283cfa17b
diff --git a/net-wireless/crackle/crackle-0.1-r1.ebuild b/net-wireless/crackle/crackle-0.1-r1.ebuild
new file mode 100644
index 000000000000..6c0f1f76dee8
--- /dev/null
+++ b/net-wireless/crackle/crackle-0.1-r1.ebuild
@@ -0,0 +1,31 @@
+# Copyright 1999-2022 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=8
+
+inherit toolchain-funcs
+
+DESCRIPTION="Crackle cracks BLE Encryption (AKA Bluetooth Smart)"
+HOMEPAGE="http://lacklustre.net/projects/crackle/"
+SRC_URI="http://lacklustre.net/projects/crackle/${P}.tgz"
+
+LICENSE="BSD"
+SLOT="0"
+KEYWORDS="~amd64 ~x86"
+
+DEPEND="net-libs/libpcap"
+RDEPEND="${DEPEND}"
+
+RESTRICT="test"
+
+PATCHES=(
+ "${FILESDIR}"/flags.patch
+)
+
+src_configure() {
+ tc-export CC
+}
+
+src_install() {
+ dobin crackle
+}
diff --git a/net-wireless/crackle/files/flags.patch b/net-wireless/crackle/files/flags.patch
new file mode 100644
index 000000000000..c1c0bd570d36
--- /dev/null
+++ b/net-wireless/crackle/files/flags.patch
@@ -0,0 +1,20 @@
+diff -Naur crackle-0.1/Makefile crackle-0.1-patched/Makefile
+--- crackle-0.1/Makefile 2013-02-15 01:04:24.000000000 -0500
++++ crackle-0.1-patched/Makefile 2014-03-05 11:30:20.907003818 -0500
+@@ -4,13 +4,13 @@
+
+ OBJS = crackle.o aes.o aes-ccm.o aes-enc.o test.o
+
+-CFLAGS = -Wall -Werror -g
+-LDFLAGS = -lpcap
++CFLAGS ?= -Wall -Werror -g
++LDFLAGS ?=
+
+ all: crackle
+
+ crackle: $(OBJS)
+- $(CC) -o crackle $(OBJS) $(LDFLAGS)
++ $(CC) $(CFLAGS) -o crackle $(OBJS) -lpcap $(LDFLAGS)
+
+ install: crackle
+ $(INSTALL) -m 0755 crackle $(INSTALL_DIR)
diff --git a/net-wireless/crackle/metadata.xml b/net-wireless/crackle/metadata.xml
new file mode 100644
index 000000000000..22d29be8fc24
--- /dev/null
+++ b/net-wireless/crackle/metadata.xml
@@ -0,0 +1,9 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE pkgmetadata SYSTEM "https://docs.baldeagleos.com/dtd/metadata.dtd">
+<pkgmetadata>
+ <maintainer type="person">
+ <email>zerochaos@gentoo.org</email>
+ <name>Rick Farina</name>
+ </maintainer>
+ <origin>baldeagleos-repo</origin>
+</pkgmetadata>
diff --git a/net-wireless/dump1090/Manifest b/net-wireless/dump1090/Manifest
new file mode 100644
index 000000000000..c7bd79f9e634
--- /dev/null
+++ b/net-wireless/dump1090/Manifest
@@ -0,0 +1,2 @@
+DIST dump1090-10.2.tar.gz 5777409 BLAKE2B 865f44e31d5626a2a0d24e247936119911ff02e852ebbdb98453d5f5ac051445d7c9794bdfd2afe15794c91440d33fd031c31800901d5dced46135b0a284c04c SHA512 367958e624447b9ae9d5ab523c68662c94343579f644f5ea8382c3822c973622085634c76ddd2dec6d0f910cd4f18880b6e0d62b3af9899bee4adfad2e2a18e5
+DIST dump1090-11.0.tar.gz 5870954 BLAKE2B 9c0837e6ede3b8344a7f6a7c3b7d5755de630e3bddf7156d5df599c17d4fa077708c5a39d315c2c9d7ffc634ae89368897f4f10c1830a5fae1d27961e837a3ca SHA512 16acb78f2576cb07935a2611630e4462f0e8a6b7b8d62617bd9bab9ee424625af58b13fe24ae6147e4976f19750a15322116b653d7dc8b0c1bfed27d1897cda5
diff --git a/net-wireless/dump1090/dump1090-10.2.ebuild b/net-wireless/dump1090/dump1090-10.2.ebuild
new file mode 100644
index 000000000000..f58f38667d3a
--- /dev/null
+++ b/net-wireless/dump1090/dump1090-10.2.ebuild
@@ -0,0 +1,117 @@
+# Copyright 1999-2025 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=8
+
+inherit tmpfiles toolchain-funcs
+
+DESCRIPTION="Simple Mode S decoder for RTLSDR devices"
+HOMEPAGE="https://github.com/flightaware/dump1090"
+
+if [[ ${PV} == *9999 ]] ; then
+ inherit git-r3
+ EGIT_REPO_URI="https://github.com/flightaware/${PN}.git"
+else
+ KEYWORDS="amd64 x86"
+ SRC_URI="https://github.com/flightaware/dump1090/archive/v${PV}.tar.gz -> ${P}.tar.gz"
+fi
+
+LICENSE="BSD GPL-2+"
+SLOT="0"
+IUSE="bladerf hackrf minimal +rtlsdr"
+
+DEPEND="
+ sys-libs/ncurses:=[tinfo]
+ bladerf? (
+ net-wireless/bladerf:=
+ virtual/libusb:1
+ )
+ hackrf? (
+ net-libs/libhackrf:=
+ virtual/libusb:1
+ )
+ rtlsdr? (
+ net-wireless/rtl-sdr:=
+ virtual/libusb:1
+ )
+"
+RDEPEND="${DEPEND}"
+BDEPEND="virtual/pkgconfig"
+
+PATCHES=(
+ "${FILESDIR}"/${PN}-6.1-libdir.patch
+ "${FILESDIR}"/${PN}-10.0.1-gcc15.patch
+)
+
+src_prepare() {
+ default
+
+ sed \
+ -e '/CFLAGS/s/-Werror//g' \
+ -e "/LIBS_CURSES/s|-lncurses|$($(tc-getPKG_CONFIG) --libs ncurses)|g" \
+ -i Makefile || die
+}
+
+src_compile() {
+ myemakeargs=(
+ BLADERF="$(usex bladerf)"
+ CC="$(tc-getCC)"
+ CPUFEATURES="yes"
+ HACKRF="$(usex hackrf)"
+ LIMESDR="no"
+ RTLSDR="$(usex rtlsdr)"
+ )
+
+ emake "${myemakeargs[@]}"
+}
+
+src_install() {
+ dobin dump1090 view1090
+
+ # DSP config files for bladeRF
+ if use bladerf; then
+ insinto usr/share/dump1090/bladerf
+ doins bladerf/*
+ fi
+
+ newtmpfiles "${FILESDIR}"/tmpfilesd-dump1090-5.0.conf dump1090.conf
+ newconfd "${FILESDIR}"/dump1090-5.0.confd dump1090
+ newinitd "${FILESDIR}"/dump1090-5.0.initd dump1090
+
+ einstalldocs
+
+ if use !minimal; then
+ # Install tools
+ insinto /usr/share/dump1090
+ doins -r tools
+
+ # Install lighthttps example files
+ insinto /usr/share/dump1090/lighttpd
+ doins debian/lighttpd/{88-dump1090-fa-statcache.conf,89-skyaware.conf}
+
+ # Some tooling expects the -fa variant directory to contain the files
+ dosym ../../usr/share/dump1090 /usr/share/dump1090-fa
+
+ # Install html docs
+ docinto html
+ doins -r public_html/*
+
+ # See README.md for how to use custom wisdom files
+ exeinto /usr/share/dump1090/wisdom
+ doexe debian/generate-wisdom
+ insinto /usr/share/dump1090/wisdom
+ doins wisdom.*
+ doins wisdom/wisdom.*
+
+ # For /etc/dump1090-fa/wisdom.local
+ keepdir /etc/dump1090-fa/
+
+ # Tooling to generate custom wisdom:
+ exeinto /usr/libexec/dump1090
+ doexe starch-benchmark
+ fi
+}
+
+pkg_postinst() {
+ tmpfiles_process dump1090.conf
+}
diff --git a/net-wireless/dump1090/dump1090-11.0-r1.ebuild b/net-wireless/dump1090/dump1090-11.0-r1.ebuild
new file mode 100644
index 000000000000..86933a7eb689
--- /dev/null
+++ b/net-wireless/dump1090/dump1090-11.0-r1.ebuild
@@ -0,0 +1,117 @@
+# Copyright 1999-2026 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=8
+
+inherit tmpfiles toolchain-funcs
+
+DESCRIPTION="Simple Mode S decoder for RTLSDR devices"
+HOMEPAGE="https://github.com/flightaware/dump1090"
+
+if [[ ${PV} == *9999 ]] ; then
+ inherit git-r3
+ EGIT_REPO_URI="https://github.com/flightaware/${PN}.git"
+else
+ KEYWORDS="~amd64 ~x86"
+ SRC_URI="https://github.com/flightaware/dump1090/archive/v${PV}.tar.gz -> ${P}.tar.gz"
+fi
+
+LICENSE="BSD GPL-2+"
+SLOT="0"
+IUSE="bladerf hackrf minimal +rtlsdr"
+
+DEPEND="
+ sys-libs/ncurses:=[tinfo]
+ bladerf? (
+ net-wireless/bladerf:=
+ virtual/libusb:1
+ )
+ hackrf? (
+ net-libs/libhackrf:=
+ virtual/libusb:1
+ )
+ rtlsdr? (
+ || (
+ net-wireless/rtl-sdr
+ net-wireless/rtl-sdr-blog
+ )
+ virtual/libusb:1
+ )
+"
+RDEPEND="${DEPEND}"
+BDEPEND="virtual/pkgconfig"
+
+PATCHES=( "${FILESDIR}"/${PN}-6.1-libdir.patch )
+
+src_prepare() {
+ default
+
+ sed \
+ -e '/CFLAGS/s/-Werror//g' \
+ -e "/LIBS_CURSES/s|-lncurses|$($(tc-getPKG_CONFIG) --libs ncurses)|g" \
+ -i Makefile || die
+}
+
+src_compile() {
+ myemakeargs=(
+ BLADERF="$(usex bladerf)"
+ CC="$(tc-getCC)"
+ CPUFEATURES="yes"
+ HACKRF="$(usex hackrf)"
+ LIMESDR="no"
+ RTLSDR="$(usex rtlsdr)"
+ )
+
+ emake "${myemakeargs[@]}"
+}
+
+src_install() {
+ dobin dump1090 view1090
+
+ # DSP config files for bladeRF
+ if use bladerf; then
+ insinto usr/share/dump1090/bladerf
+ doins bladerf/*
+ fi
+
+ newtmpfiles "${FILESDIR}"/tmpfilesd-dump1090-5.0.conf dump1090.conf
+ newconfd "${FILESDIR}"/dump1090-5.0.confd dump1090
+ newinitd "${FILESDIR}"/dump1090-5.0.initd dump1090
+
+ einstalldocs
+
+ if use !minimal; then
+ # Install tools
+ insinto /usr/share/dump1090
+ doins -r tools
+
+ # Install lighthttps example files
+ insinto /usr/share/dump1090/lighttpd
+ doins debian/lighttpd/{88-dump1090-fa-statcache.conf,89-skyaware.conf}
+
+ # Some tooling expects the -fa variant directory to contain the files
+ dosym ../../usr/share/dump1090 /usr/share/dump1090-fa
+
+ # Install html docs
+ docinto html
+ doins -r public_html/*
+
+ # See README.md for how to use custom wisdom files
+ exeinto /usr/share/dump1090/wisdom
+ doexe debian/generate-wisdom
+ insinto /usr/share/dump1090/wisdom
+ doins wisdom.*
+ doins wisdom/wisdom.*
+
+ # For /etc/dump1090-fa/wisdom.local
+ keepdir /etc/dump1090-fa/
+
+ # Tooling to generate custom wisdom:
+ exeinto /usr/libexec/dump1090
+ doexe starch-benchmark
+ fi
+}
+
+pkg_postinst() {
+ tmpfiles_process dump1090.conf
+}
diff --git a/net-wireless/dump1090/dump1090-9999.ebuild b/net-wireless/dump1090/dump1090-9999.ebuild
new file mode 100644
index 000000000000..e1886a6dfb2a
--- /dev/null
+++ b/net-wireless/dump1090/dump1090-9999.ebuild
@@ -0,0 +1,120 @@
+# Copyright 1999-2026 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=8
+
+inherit tmpfiles toolchain-funcs
+
+DESCRIPTION="Simple Mode S decoder for RTLSDR devices"
+HOMEPAGE="https://github.com/flightaware/dump1090"
+
+if [[ ${PV} == *9999 ]] ; then
+ inherit git-r3
+ EGIT_REPO_URI="https://github.com/flightaware/${PN}.git"
+else
+ KEYWORDS="~amd64 ~x86"
+ SRC_URI="https://github.com/flightaware/dump1090/archive/v${PV}.tar.gz -> ${P}.tar.gz"
+fi
+
+LICENSE="BSD GPL-2+"
+SLOT="0"
+IUSE="bladerf hackrf minimal +rtlsdr"
+
+DEPEND="
+ sys-libs/ncurses:=[tinfo]
+ bladerf? (
+ net-wireless/bladerf:=
+ virtual/libusb:1
+ )
+ hackrf? (
+ net-libs/libhackrf:=
+ virtual/libusb:1
+ )
+ rtlsdr? (
+ || (
+ net-wireless/rtl-sdr
+ net-wireless/rtl-sdr-blog
+ )
+ virtual/libusb:1
+ )
+"
+RDEPEND="${DEPEND}"
+BDEPEND="virtual/pkgconfig"
+
+PATCHES=(
+ "${FILESDIR}"/${PN}-6.1-libdir.patch
+ "${FILESDIR}"/${PN}-10.0.1-gcc15.patch
+)
+
+src_prepare() {
+ default
+
+ sed \
+ -e '/CFLAGS/s/-Werror//g' \
+ -e "/LIBS_CURSES/s|-lncurses|$($(tc-getPKG_CONFIG) --libs ncurses)|g" \
+ -i Makefile || die
+}
+
+src_compile() {
+ myemakeargs=(
+ BLADERF="$(usex bladerf)"
+ CC="$(tc-getCC)"
+ CPUFEATURES="yes"
+ HACKRF="$(usex hackrf)"
+ LIMESDR="no"
+ RTLSDR="$(usex rtlsdr)"
+ )
+
+ emake "${myemakeargs[@]}"
+}
+
+src_install() {
+ dobin dump1090 view1090
+
+ # DSP config files for bladeRF
+ if use bladerf; then
+ insinto usr/share/dump1090/bladerf
+ doins bladerf/*
+ fi
+
+ newtmpfiles "${FILESDIR}"/tmpfilesd-dump1090-5.0.conf dump1090.conf
+ newconfd "${FILESDIR}"/dump1090-5.0.confd dump1090
+ newinitd "${FILESDIR}"/dump1090-5.0.initd dump1090
+
+ einstalldocs
+
+ if use !minimal; then
+ # Install tools
+ insinto /usr/share/dump1090
+ doins -r tools
+
+ # Install lighthttps example files
+ insinto /usr/share/dump1090/lighttpd
+ doins debian/lighttpd/{88-dump1090-fa-statcache.conf,89-skyaware.conf}
+
+ # Some tooling expects the -fa variant directory to contain the files
+ dosym ../../usr/share/dump1090 /usr/share/dump1090-fa
+
+ # Install html docs
+ docinto html
+ doins -r public_html/*
+
+ # See README.md for how to use custom wisdom files
+ exeinto /usr/share/dump1090/wisdom
+ doexe debian/generate-wisdom
+ insinto /usr/share/dump1090/wisdom
+ doins wisdom.*
+ doins wisdom/wisdom.*
+
+ # For /etc/dump1090-fa/wisdom.local
+ keepdir /etc/dump1090-fa/
+
+ # Tooling to generate custom wisdom:
+ exeinto /usr/libexec/dump1090
+ doexe starch-benchmark
+ fi
+}
+
+pkg_postinst() {
+ tmpfiles_process dump1090.conf
+}
diff --git a/net-wireless/dump1090/files/dump1090-10.0.1-gcc15.patch b/net-wireless/dump1090/files/dump1090-10.0.1-gcc15.patch
new file mode 100644
index 000000000000..ed0431405c21
--- /dev/null
+++ b/net-wireless/dump1090/files/dump1090-10.0.1-gcc15.patch
@@ -0,0 +1,45 @@
+From 93be1da123215e8ac15a0deaffedd480e8899f77 Mon Sep 17 00:00:00 2001
+From: Conrad Kostecki <conrad@kostecki.com>
+Date: Tue, 22 Apr 2025 00:41:31 +0200
+Subject: [PATCH] Fix compilation with GCC15
+
+---
+ ais_charset.c | 2 +-
+ ais_charset.h | 2 +-
+ interactive.c | 2 +-
+ 3 files changed, 3 insertions(+), 3 deletions(-)
+
+diff --git a/ais_charset.c b/ais_charset.c
+index a487e3cc7..0d3af0392 100644
+--- a/ais_charset.c
++++ b/ais_charset.c
+@@ -1,3 +1,3 @@
+ #include "ais_charset.h"
+
+-char ais_charset[64] = "@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_ !\"#$%&'()*+,-./0123456789:;<=>?";
++char ais_charset[65] = "@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_ !\"#$%&'()*+,-./0123456789:;<=>?";
+diff --git a/ais_charset.h b/ais_charset.h
+index 93d4a7293..95ef373dc 100644
+--- a/ais_charset.h
++++ b/ais_charset.h
+@@ -1,6 +1,6 @@
+ #ifndef AIS_CHARSET_H
+ #define AIS_CHARSET_H
+
+-extern char ais_charset[64];
++extern char ais_charset[65];
+
+ #endif
+diff --git a/interactive.c b/interactive.c
+index 8761c955d..75775ad35 100644
+--- a/interactive.c
++++ b/interactive.c
+@@ -140,7 +140,7 @@ void interactiveShowData(void) {
+ static bool need_clear = true;
+ uint64_t now = mstime();
+ char progress;
+- char spinner[4] = "|/-\\";
++ char spinner[5] = "|/-\\";
+ int valid = 0;
+ double signalMax = -100.0;
+ double signalMin = +100.0;
diff --git a/net-wireless/dump1090/files/dump1090-5.0.confd b/net-wireless/dump1090/files/dump1090-5.0.confd
new file mode 100644
index 000000000000..3350294ae8c0
--- /dev/null
+++ b/net-wireless/dump1090/files/dump1090-5.0.confd
@@ -0,0 +1,20 @@
+# These variable names are chose to be as close as possible to the upstream & Debian options.
+RECEIVER_OPTIONS="--device-index 0 --gain -10 --ppm 0"
+DECODER_OPTIONS="--max-range 360 --fix"
+NET_OPTIONS="--net --net-heartbeat 60 --net-ro-size 1300 --net-ro-interval 0.2 --net-ri-port 0 --net-ro-port 30002 --net-sbs-port 30003 --net-bi-port 30004,30104 --net-bo-port 30005"
+JSON_OPTIONS="--json-location-accuracy 1 --write-json /run/dump1090/"
+
+# See README.md for custom wisdom, or use one of the bundled wisdom files
+WISDOM_FILE=
+[ -f /etc/dump1090-fa/wisdom.local ] && WISDOM_FILE=/etc/dump1090-fa/wisdom.local
+
+# Optional, populate these with your location
+#PIAWARE_LAT=
+#PIAWARE_LON=
+# Or populate file /var/cache/piaware/location.env
+[ -f /var/cache/piaware/location.env ] && source /var/cache/piaware/location.env
+
+if [ -n "$PIAWARE_LAT" -a -n "$PIAWARE_LON" ]
+then
+ POSITION="--lat $PIAWARE_LAT --lon $PIAWARE_LON"
+fi
diff --git a/net-wireless/dump1090/files/dump1090-5.0.initd b/net-wireless/dump1090/files/dump1090-5.0.initd
new file mode 100644
index 000000000000..47c2d240bb54
--- /dev/null
+++ b/net-wireless/dump1090/files/dump1090-5.0.initd
@@ -0,0 +1,15 @@
+#!/sbin/openrc-run
+# Copyright 2021 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+name="dump1090"
+description=""
+command=/usr/bin/dump1090
+command_args="$RECEIVER_OPTIONS $DECODER_OPTIONS $NET_OPTIONS $JSON_OPTIONS $POSITION ${WISDOM_FILE:+--wisdom} ${WISDOM_FILE}"
+
+depend() {
+ use rtl_tcp
+}
+pre_start() {
+ mkdir -p /run/dump1090/
+}
diff --git a/net-wireless/dump1090/files/dump1090-6.1-libdir.patch b/net-wireless/dump1090/files/dump1090-6.1-libdir.patch
new file mode 100644
index 000000000000..b55fa95d2ea3
--- /dev/null
+++ b/net-wireless/dump1090/files/dump1090-6.1-libdir.patch
@@ -0,0 +1,16 @@
+diff --git a/Makefile b/Makefile
+index d4a5ff6..5d69505 100644
+--- a/Makefile
++++ b/Makefile
+@@ -99,9 +99,9 @@ ifeq ($(RTLSDR), yes)
+ ifdef RTLSDR_PREFIX
+ CPPFLAGS += -I$(RTLSDR_PREFIX)/include
+ ifeq ($(STATIC), yes)
+- LIBS_SDR += -L$(RTLSDR_PREFIX)/lib -Wl,-Bstatic -lrtlsdr -Wl,-Bdynamic $(LIBS_USB)
++ LIBS_SDR += -Wl,-Bstatic -lrtlsdr -Wl,-Bdynamic $(LIBS_USB)
+ else
+- LIBS_SDR += -L$(RTLSDR_PREFIX)/lib -lrtlsdr $(LIBS_USB)
++ LIBS_SDR += -lrtlsdr $(LIBS_USB)
+ endif
+ else
+ # some packaged .pc files are massively broken, try to handle it
diff --git a/net-wireless/dump1090/files/tmpfilesd-dump1090-5.0.conf b/net-wireless/dump1090/files/tmpfilesd-dump1090-5.0.conf
new file mode 100644
index 000000000000..67341178bfe2
--- /dev/null
+++ b/net-wireless/dump1090/files/tmpfilesd-dump1090-5.0.conf
@@ -0,0 +1,4 @@
+# The daemon will write out JSON files for the webserver here
+d /run/dump1090/ 755 root root -
+# The some upstream configs expect it to be in /run/dump1090-fa/
+L /run/dump1090-fa - - - - /run/dump1090/
diff --git a/net-wireless/dump1090/metadata.xml b/net-wireless/dump1090/metadata.xml
new file mode 100644
index 000000000000..e6cfd4369eb1
--- /dev/null
+++ b/net-wireless/dump1090/metadata.xml
@@ -0,0 +1,19 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE pkgmetadata SYSTEM "https://docs.baldeagleos.com/dtd/metadata.dtd">
+<pkgmetadata>
+ <maintainer type="project">
+ <email>radio@gentoo.org</email>
+ <name>Radio</name>
+ </maintainer>
+ <maintainer type="person">
+ <email>conikost@gentoo.org</email>
+ <name>Conrad kostecki</name>
+ </maintainer>
+ <use>
+ <flag name="bladerf">Build with Nuand BladeRF support</flag>
+ <flag name="hackrf">Build with Great Scott Gadgets HackRF support</flag>
+ <flag name="minimal">Exclude all HTML/webserver extras for a tiny build, e.g. to export data only</flag>
+ <flag name="rtlsdr">Build with Realtek RTL2832U (rtlsdr) support</flag>
+ </use>
+ <origin>baldeagleos-repo</origin>
+</pkgmetadata>
diff --git a/net-wireless/gnome-bluetooth/Manifest b/net-wireless/gnome-bluetooth/Manifest
new file mode 100644
index 000000000000..1dfc1dff1631
--- /dev/null
+++ b/net-wireless/gnome-bluetooth/Manifest
@@ -0,0 +1,2 @@
+DIST gnome-bluetooth-47.1.tar.xz 297800 BLAKE2B f111a46cf56bc3614dac448297c2cd5fadbe0a3c3f75c2130542e9cbf88d3a6a167c6d59416ffede12945310e6720aedfc9181f3a71ca1e8bd4b61e14df9ab6b SHA512 474f8687e8d1c1a10ce5690a8e7c57e6afd29d55c9777820fad3b6d21ec07bab4ac31ab0ea9dd7d9a0e93a60b933913f5a54df69dc7d348d95098cc289c2e6b4
+DIST gnome-bluetooth-47.2.tar.xz 298012 BLAKE2B 7169e561e1c4b4d7dc0e02e247dec9f740d5837bd808211944cd4861424007f0b6f72b2738b93622f8cb1c7457992aace4fcbd330b2fe9d4dcbe7a06b83102c3 SHA512 bd86e314afa6979655e643c8d7566504b92ec0b29ad44d1a9bd12e67913b9dad44b3ed57ef67330abe368948ba0e14e59a8fd2bb2a542252a8b885f8c4aee413
diff --git a/net-wireless/gnome-bluetooth/gnome-bluetooth-47.1.ebuild b/net-wireless/gnome-bluetooth/gnome-bluetooth-47.1.ebuild
new file mode 100644
index 000000000000..7b500e859bee
--- /dev/null
+++ b/net-wireless/gnome-bluetooth/gnome-bluetooth-47.1.ebuild
@@ -0,0 +1,79 @@
+# Copyright 1999-2026 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=8
+PYTHON_COMPAT=( python3_{13..14} )
+inherit gnome.org gnome2-utils meson python-any-r1 xdg
+
+DESCRIPTION="Bluetooth graphical utilities integrated with GNOME"
+HOMEPAGE="https://gitlab.gnome.org/GNOME/gnome-bluetooth"
+
+LICENSE="GPL-2+ LGPL-2.1+ FDL-1.1+"
+SLOT="3/13" # subslot = libgnome-bluetooth-3 soname version
+KEYWORDS="amd64 ~arm arm64 ~loong ~ppc ~ppc64 ~riscv x86"
+IUSE="gtk-doc +introspection sendto test"
+RESTRICT="!test? ( test )"
+
+DEPEND="
+ >=dev-libs/glib-2.44:2
+ >=gui-libs/gtk-4.15.2:4[introspection?]
+ media-libs/gsound
+ >=gui-libs/libadwaita-1.6_beta:1
+ >=x11-libs/libnotify-0.7.0
+ virtual/libudev:=
+ >=sys-power/upower-0.99.14:=
+ introspection? ( >=dev-libs/gobject-introspection-1.82.0-r2:= )
+"
+RDEPEND="${DEPEND}
+ acct-group/plugdev
+ virtual/udev
+ >=net-wireless/bluez-5
+ sendto? ( !net-wireless/gnome-bluetooth:2 )
+"
+BDEPEND="
+ ${PYTHON_DEPS}
+ dev-libs/libxml2:2
+ >=dev-util/gdbus-codegen-2.80.5-r1
+ dev-util/glib-utils
+ gtk-doc? ( >=dev-util/gtk-doc-1.9 )
+ virtual/pkgconfig
+ test? (
+ $(python_gen_any_dep '
+ >=dev-python/python-dbusmock-0.26.0[${PYTHON_USEDEP}]
+ dev-python/dbus-python[${PYTHON_USEDEP}]
+ ')
+ )
+"
+
+python_check_deps() {
+ if use test; then
+ python_has_version ">=dev-python/python-dbusmock-0.26.0[${PYTHON_USEDEP}]" &&
+ python_has_version "dev-python/dbus-python[${PYTHON_USEDEP}]"
+ fi
+}
+
+pkg_setup() {
+ # Check for python is unconditional
+ python-any-r1_pkg_setup
+}
+
+src_configure() {
+ local emesonargs=(
+ $(meson_use sendto)
+ $(meson_use gtk-doc gtk_doc)
+ $(meson_use introspection)
+ )
+ meson_src_configure
+}
+
+src_test() {
+ # Workaround test failures caused by flatpak being installed that adds to XDG_DATA_DIRS
+ gnome2_environment_reset
+ export XDG_DATA_DIRS="${EPREFIX}"/usr/share
+
+ meson_src_test
+}
+
+pkg_postinst() {
+ xdg_pkg_postinst
+}
diff --git a/net-wireless/gnome-bluetooth/gnome-bluetooth-47.2.ebuild b/net-wireless/gnome-bluetooth/gnome-bluetooth-47.2.ebuild
new file mode 100644
index 000000000000..78dc5e1f3cd8
--- /dev/null
+++ b/net-wireless/gnome-bluetooth/gnome-bluetooth-47.2.ebuild
@@ -0,0 +1,78 @@
+# Copyright 1999-2026 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=8
+PYTHON_COMPAT=( python3_{13..14} )
+inherit gnome.org gnome2-utils meson python-any-r1 xdg
+
+DESCRIPTION="Bluetooth graphical utilities integrated with GNOME"
+HOMEPAGE="https://gitlab.gnome.org/GNOME/gnome-bluetooth"
+
+LICENSE="GPL-2+ LGPL-2.1+ FDL-1.1+"
+SLOT="3/13" # subslot = libgnome-bluetooth-3 soname version
+KEYWORDS="amd64 ~arm ~arm64 ~loong ~ppc ~ppc64 ~riscv x86"
+IUSE="gtk-doc +introspection test"
+RESTRICT="!test? ( test )"
+
+DEPEND="
+ >=dev-libs/glib-2.44:2
+ >=gui-libs/gtk-4.15.2:4[introspection?]
+ media-libs/gsound
+ >=gui-libs/libadwaita-1.6_beta:1
+ >=x11-libs/libnotify-0.7.0
+ virtual/libudev:=
+ >=sys-power/upower-0.99.14:=
+ introspection? ( >=dev-libs/gobject-introspection-1.82.0-r2:= )
+"
+RDEPEND="${DEPEND}
+ acct-group/plugdev
+ virtual/udev
+ >=net-wireless/bluez-5
+"
+BDEPEND="
+ ${PYTHON_DEPS}
+ dev-libs/libxml2:2
+ >=dev-util/gdbus-codegen-2.80.5-r1
+ dev-util/glib-utils
+ gtk-doc? ( >=dev-util/gtk-doc-1.9 )
+ virtual/pkgconfig
+ test? (
+ $(python_gen_any_dep '
+ >=dev-python/python-dbusmock-0.26.0[${PYTHON_USEDEP}]
+ dev-python/dbus-python[${PYTHON_USEDEP}]
+ ')
+ )
+"
+
+python_check_deps() {
+ if use test; then
+ python_has_version ">=dev-python/python-dbusmock-0.26.0[${PYTHON_USEDEP}]" &&
+ python_has_version "dev-python/dbus-python[${PYTHON_USEDEP}]"
+ fi
+}
+
+pkg_setup() {
+ # Check for python is unconditional
+ python-any-r1_pkg_setup
+}
+
+src_configure() {
+ local emesonargs=(
+ -Dsendto=true
+ $(meson_use gtk-doc gtk_doc)
+ $(meson_use introspection)
+ )
+ meson_src_configure
+}
+
+src_test() {
+ # Workaround test failures caused by flatpak being installed that adds to XDG_DATA_DIRS
+ gnome2_environment_reset
+ export XDG_DATA_DIRS="${EPREFIX}"/usr/share
+
+ meson_src_test
+}
+
+pkg_postinst() {
+ xdg_pkg_postinst
+}
diff --git a/net-wireless/gnome-bluetooth/metadata.xml b/net-wireless/gnome-bluetooth/metadata.xml
new file mode 100644
index 000000000000..7ec41bfb16d5
--- /dev/null
+++ b/net-wireless/gnome-bluetooth/metadata.xml
@@ -0,0 +1,12 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE pkgmetadata SYSTEM "https://docs.baldeagleos.com/dtd/metadata.dtd">
+<pkgmetadata>
+ <maintainer type="project">
+ <email>gnome@gentoo.org</email>
+ <name>Gentoo GNOME Desktop</name>
+ </maintainer>
+ <use>
+ <flag name="sendto">Build the bluetooth-sendto application to send files to various locations/devices</flag>
+ </use>
+ <origin>baldeagleos-repo</origin>
+</pkgmetadata>
diff --git a/net-wireless/gnuradio/Manifest b/net-wireless/gnuradio/Manifest
new file mode 100644
index 000000000000..52ad6646b96c
--- /dev/null
+++ b/net-wireless/gnuradio/Manifest
@@ -0,0 +1 @@
+DIST gnuradio-3.10.12.0.tar.gz 4978802 BLAKE2B 9dd2a0b410e9f42b1f1447242b13223bb7e9b11f6343496e77d7681de4ecfa514e3838e21db5fb0ce45b5589c136902f13a1e9efb42bc206fc8ee7fbf5a8e0a3 SHA512 6d94d5f755a12d79ea38b84ac869dbce86b66813ac40f7204afb24d6f70f867a258e9efde0cc24fcb1ab814129da6b941970b0c736870f99139ee65a7a8effa7
diff --git a/net-wireless/gnuradio/files/gnuradio-3.10.12.0-boost-1.89.patch b/net-wireless/gnuradio/files/gnuradio-3.10.12.0-boost-1.89.patch
new file mode 100644
index 000000000000..6e7b65f08492
--- /dev/null
+++ b/net-wireless/gnuradio/files/gnuradio-3.10.12.0-boost-1.89.patch
@@ -0,0 +1,43 @@
+From a166bdf73d3e3bfd362c239bbd58852faaad39c4 Mon Sep 17 00:00:00 2001
+From: Michael Cho <michael@michaelcho.dev>
+Date: Mon, 11 Aug 2025 22:04:59 -0400
+Subject: [PATCH] cmake: fix build with Boost 1.89.0
+
+Boost.System has been header-only since Boost 1.69 and will be dropping
+the compatibility stub library in Boost 1.89 (boostorg/system@7a495bb).
+Since GNU Radio uses Boost >= 1.69, the easy fix is to drop `system`
+from the `COMPONENTS` as recommended by upstream:
+`https://github.com/boostorg/system/issues/132#issuecomment-3146378680`
+
+Signed-off-by: Michael Cho <michael@michaelcho.dev>
+---
+ cmake/Modules/GnuradioConfig.cmake.in | 2 +-
+ cmake/Modules/GrBoost.cmake | 2 +-
+ 2 files changed, 2 insertions(+), 2 deletions(-)
+
+diff --git a/cmake/Modules/GnuradioConfig.cmake.in b/cmake/Modules/GnuradioConfig.cmake.in
+index 35042b74e95..91018562d57 100644
+--- a/cmake/Modules/GnuradioConfig.cmake.in
++++ b/cmake/Modules/GnuradioConfig.cmake.in
+@@ -13,7 +13,7 @@ list(INSERT CMAKE_MODULE_PATH 0 "${CMAKE_CURRENT_LIST_DIR}")
+ find_dependency(spdlog)
+ find_dependency(MPLIB)
+
+-set(BOOST_REQUIRED_COMPONENTS date_time program_options system regex thread)
++set(BOOST_REQUIRED_COMPONENTS date_time program_options regex thread)
+
+ if(NOT ENABLE_TESTING)
+ set(ENABLE_TESTING
+diff --git a/cmake/Modules/GrBoost.cmake b/cmake/Modules/GrBoost.cmake
+index 580d7100621..c7d85355284 100644
+--- a/cmake/Modules/GrBoost.cmake
++++ b/cmake/Modules/GrBoost.cmake
+@@ -14,7 +14,7 @@ set(__INCLUDED_GR_BOOST_CMAKE TRUE)
+ # Setup Boost and handle some system specific things
+ ########################################################################
+
+-set(BOOST_REQUIRED_COMPONENTS date_time program_options system regex thread)
++set(BOOST_REQUIRED_COMPONENTS date_time program_options regex thread)
+
+ if(UNIX
+ AND NOT BOOST_ROOT
diff --git a/net-wireless/gnuradio/gnuradio-3.10.12.0-r2.ebuild b/net-wireless/gnuradio/gnuradio-3.10.12.0-r2.ebuild
new file mode 100644
index 000000000000..e7967568275e
--- /dev/null
+++ b/net-wireless/gnuradio/gnuradio-3.10.12.0-r2.ebuild
@@ -0,0 +1,251 @@
+# Copyright 1999-2026 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=8
+
+PYTHON_COMPAT=( python3_{13..14} )
+inherit cmake desktop python-single-r1 virtualx xdg-utils
+
+DESCRIPTION="Toolkit that provides signal processing blocks to implement software radios"
+HOMEPAGE="https://www.gnuradio.org/"
+LICENSE="GPL-3"
+SLOT="0/${PV}"
+
+if [[ ${PV} =~ "9999" ]]; then
+ EGIT_REPO_URI="https://github.com/gnuradio/gnuradio.git"
+ EGIT_BRANCH="maint-3.10"
+ inherit git-r3
+else
+ SRC_URI="https://github.com/gnuradio/gnuradio/archive/refs/tags/v${PV}.tar.gz -> ${P}.tar.gz"
+ KEYWORDS="amd64 ~arm ~riscv ~x86"
+fi
+
+IUSE="+audio +alsa +analog +digital channels ctrlport doc dtv examples fec +filter grc iio jack modtool network oss performance-counters portaudio +qt5 sdl soapy test trellis uhd vocoder +utils wavelet zeromq"
+
+#RESTRICT="!test? ( test )"
+# Tests are pulling in the installed python libs and breaking
+# https://github.com/gnuradio/gnuradio/issues/7568
+RESTRICT="test"
+
+REQUIRED_USE="${PYTHON_REQUIRED_USE}
+ alsa? ( audio )
+ analog? ( filter )
+ audio? ( || ( alsa oss jack portaudio ) )
+ channels? ( filter analog qt5 )
+ digital? ( filter analog )
+ dtv? ( filter analog fec )
+ jack? ( audio )
+ modtool? ( utils )
+ oss? ( audio )
+ portaudio? ( audio )
+ qt5? ( filter )
+ test? ( channels )
+ trellis? ( analog digital )
+ uhd? ( filter analog )
+ vocoder? ( filter analog )
+ wavelet? ( analog )
+"
+
+RDEPEND="${PYTHON_DEPS}
+ $(python_gen_cond_dep 'dev-libs/boost:=[python,${PYTHON_USEDEP}]')
+ dev-libs/gmp:=
+ dev-libs/log4cpp:=
+ $(python_gen_cond_dep 'dev-python/jsonschema[${PYTHON_USEDEP}]')
+ dev-libs/spdlog:=
+ dev-libs/libfmt:=
+ sci-libs/fftw:3.0=
+ sci-libs/volk:=
+ media-libs/libsndfile
+ sys-libs/libunwind
+ alsa? ( media-libs/alsa-lib:= )
+ ctrlport? (
+ $(python_gen_cond_dep 'dev-python/thrift[${PYTHON_USEDEP}]')
+ )
+ fec? (
+ sci-libs/gsl:=
+ $(python_gen_cond_dep 'dev-python/scipy[${PYTHON_USEDEP}]')
+ )
+ filter? (
+ $(python_gen_cond_dep 'dev-python/scipy[${PYTHON_USEDEP}]')
+ qt5? ( $(python_gen_cond_dep 'dev-python/pyqtgraph[qt5,${PYTHON_USEDEP}]') )
+ )
+ grc? (
+ $(python_gen_cond_dep 'dev-python/mako[${PYTHON_USEDEP}]
+ dev-python/numpy[${PYTHON_USEDEP}]
+ dev-python/pygobject:3[${PYTHON_USEDEP}]
+ dev-python/pyyaml[${PYTHON_USEDEP}]')
+ x11-libs/gtk+:3[introspection]
+ x11-libs/pango[introspection]
+ )
+ iio? (
+ net-libs/libiio:=
+ net-libs/libad9361-iio:=
+ )
+ jack? ( virtual/jack )
+ portaudio? ( >=media-libs/portaudio-19_pre )
+ qt5? (
+ $(python_gen_cond_dep 'dev-python/pyqt5[opengl,${PYTHON_USEDEP}]')
+ dev-qt/qtcore:5
+ dev-qt/qtgui:5
+ x11-libs/qwt:6=[qt5(-)]
+ dev-qt/qtwidgets:5
+ )
+ soapy? (
+ net-wireless/soapysdr:=[${PYTHON_SINGLE_USEDEP}]
+ )
+ sdl? ( >=media-libs/libsdl-1.2.0 )
+ trellis? ( dev-python/scipy )
+ uhd? (
+ >=net-wireless/uhd-3.9.6:=[${PYTHON_SINGLE_USEDEP}]
+ )
+ utils? (
+ $(python_gen_cond_dep 'dev-python/click[${PYTHON_USEDEP}]
+ dev-python/click-plugins[${PYTHON_USEDEP}]
+ dev-python/mako[${PYTHON_USEDEP}]
+ dev-python/matplotlib[${PYTHON_USEDEP}]')
+ )
+ vocoder? (
+ media-sound/gsm
+ >=media-libs/codec2-0.8.1:=
+ )
+ wavelet? (
+ sci-libs/gsl:=
+ sci-libs/lapack
+ )
+ zeromq? ( >=net-libs/zeromq-2.1.11:= )
+"
+
+DEPEND="${RDEPEND}
+ app-text/docbook-xml-dtd:4.2
+ $(python_gen_cond_dep 'dev-python/pybind11[${PYTHON_USEDEP}]')
+ virtual/pkgconfig
+ doc? (
+ >=app-text/doxygen-1.5.7.1
+ <dev-libs/mathjax-3
+ )
+ grc? ( x11-misc/xdg-utils )
+ modtool? ( $(python_gen_cond_dep 'dev-python/pygccxml[${PYTHON_USEDEP}]') )
+ oss? ( virtual/os-headers )
+ test? (
+ >=dev-util/cppunit-1.9.14
+ dev-python/pyzmq
+ )
+ zeromq? ( net-libs/cppzmq )
+"
+
+PATCHES=( "${FILESDIR}/${P}-boost-1.89.patch" ) # bug 969063
+
+src_prepare() {
+ xdg_environment_reset #534582
+
+ use !alsa && sed -i 's#version.h#version-nonexistent.h#' cmake/Modules/FindALSA.cmake
+ use !jack && sed -i 's#jack.h#jack-nonexistent.h#' cmake/Modules/FindJACK.cmake
+ use !oss && sed -i 's#soundcard.h#oss-nonexistent.h#g' cmake/Modules/FindOSS.cmake
+ use !portaudio && sed -i 's#portaudio.h#portaudio-nonexistent.h#g' cmake/Modules/FindPORTAUDIO.cmake
+
+ cmake_src_prepare
+}
+
+src_configure() {
+ local mycmakeargs=(
+ -DENABLE_DEFAULT=OFF
+ -DENABLE_GNURADIO_RUNTIME=ON
+ -DENABLE_PYTHON=ON
+ -DENABLE_GR_BLOCKS=ON
+ -DENABLE_GR_ANALOG="$(usex analog ON OFF)"
+ -DENABLE_GR_AUDIO=ON
+ -DENABLE_GR_CHANNELS="$(usex channels ON OFF)"
+ -DENABLE_GR_CTRLPORT="$(usex ctrlport ON OFF)"
+ -DENABLE_GR_DIGITAL="$(usex digital ON OFF)"
+ -DENABLE_DOXYGEN="$(usex doc ON OFF)"
+ -DENABLE_GR_DTV="$(usex dtv ON OFF)"
+ -DENABLE_GR_FEC="$(usex fec ON OFF)"
+ -DENABLE_GR_FFT=ON
+ -DENABLE_GR_FILTER="$(usex filter ON OFF)"
+ -DENABLE_GRC="$(usex grc ON OFF)"
+ -DENABLE_GR_IIO="$(usex iio ON OFF)"
+ -DENABLE_GR_MODTOOL="$(usex modtool ON OFF)"
+ -DENABLE_GR_BLOCKTOOL="$(usex modtool ON OFF)"
+ -DENABLE_GR_NETWORK="$(usex network ON OFF)"
+ -DENABLE_GR_PDU=ON
+ -DENABLE_PERFORMANCE_COUNTERS="$(usex performance-counters ON OFF)"
+ -DENABLE_TESTING="$(usex test ON OFF)"
+ -DENABLE_GR_QTGUI="$(usex qt5 ON OFF)"
+ -DENABLE_GR_SOAPY="$(usex soapy ON OFF)"
+ -DENABLE_GR_TRELLIS="$(usex trellis ON OFF)"
+ -DENABLE_GR_UHD="$(usex uhd ON OFF)"
+ -DENABLE_GR_UTILS="$(usex utils ON OFF)"
+ -DENABLE_GR_VIDEO_SDL="$(usex sdl ON OFF)"
+ -DENABLE_GR_VOCODER="$(usex vocoder ON OFF)"
+ -DENABLE_GR_WAVELET="$(usex wavelet ON OFF)"
+ -DENABLE_GR_ZEROMQ="$(usex zeromq ON OFF)"
+ -DSYSCONFDIR="${EPREFIX}"/etc
+ -DPYTHON_EXECUTABLE="${PYTHON}"
+ -DGR_PYTHON_DIR="$(python_get_sitedir)"
+ -DGR_PKG_DOC_DIR="${EPREFIX}/usr/share/doc/${PF}"
+ -DMATHJAX2_ROOT="${EPREFIX}/usr/share/mathjax"
+ )
+ # replace -DSYSCONFDIR in 3.10.13.0
+ #-DGR_CONF_DIR="${EPREFIX}"/etc
+ cmake_src_configure
+}
+
+src_install() {
+ cmake_src_install
+
+ if use examples ; then
+ dodir /usr/share/doc/${PF}/
+ mv "${ED}"/usr/share/${PN}/examples "${ED}"/usr/share/doc/${PF}/ || die
+ docompress -x /usr/share/doc/${PF}/examples
+ else
+ # It seems that the examples are always installed
+ rm -rf "${ED}"/usr/share/${PN}/examples || die
+ fi
+
+ if use doc || use examples; then
+ #this doesn't appear useful
+ rm -rf "${ED}"/usr/share/doc/${PF}/xml || die
+ fi
+
+ # Remove duplicated icons, MIME and desktop files and installation script
+ rm -rf "${ED}"/usr/share/${PN}/grc/freedesktop || die
+ rm -f "${ED}"/usr/libexec/${PN}/grc_setup_freedesktop || die
+
+ # Install icons, menu items and mime-types for GRC
+ if use grc ; then
+ local fd_path="${S}/grc/scripts/freedesktop"
+ insinto /usr/share/mime/packages
+ doins "${fd_path}/${PN}-grc.xml"
+
+ domenu "${fd_path}/${PN}-grc.desktop"
+ for size in 16 24 32 48 64 128 256; do
+ newicon -s $size "${fd_path}/"grc-icon-$size.png ${PN}-grc.png
+ done
+ fi
+
+ python_fix_shebang "${ED}"
+ # Remove incorrectly byte-compiled Python files and replace
+ find "${ED}"/usr/lib* -name "*.py[co]" -exec rm {} \; || die
+ python_optimize
+}
+
+src_test() {
+ # skip test which needs internet (metainfo_test)
+ virtx cmake_src_test -E 'metainfo_test' --output-on-failure
+}
+
+pkg_postinst() {
+ if use grc ; then
+ xdg_desktop_database_update
+ xdg_icon_cache_update
+ xdg_mimeinfo_database_update
+ fi
+}
+
+pkg_postrm() {
+ if use grc ; then
+ xdg_desktop_database_update
+ xdg_icon_cache_update
+ xdg_mimeinfo_database_update
+ fi
+}
diff --git a/net-wireless/gnuradio/gnuradio-3.10.12.0-r3.ebuild b/net-wireless/gnuradio/gnuradio-3.10.12.0-r3.ebuild
new file mode 100644
index 000000000000..e9d135594ea2
--- /dev/null
+++ b/net-wireless/gnuradio/gnuradio-3.10.12.0-r3.ebuild
@@ -0,0 +1,251 @@
+# Copyright 1999-2026 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=8
+
+PYTHON_COMPAT=( python3_{13..14} )
+inherit cmake desktop python-single-r1 virtualx xdg-utils
+
+DESCRIPTION="Toolkit that provides signal processing blocks to implement software radios"
+HOMEPAGE="https://www.gnuradio.org/"
+LICENSE="GPL-3"
+SLOT="0/${PV}"
+
+if [[ ${PV} =~ "9999" ]]; then
+ EGIT_REPO_URI="https://github.com/gnuradio/gnuradio.git"
+ EGIT_BRANCH="maint-3.10"
+ inherit git-r3
+else
+ SRC_URI="https://github.com/gnuradio/gnuradio/archive/refs/tags/v${PV}.tar.gz -> ${P}.tar.gz"
+ KEYWORDS="~amd64 ~arm ~riscv ~x86"
+fi
+
+IUSE="+audio +alsa +analog +digital channels ctrlport doc dtv examples fec +filter grc iio jack modtool network oss performance-counters portaudio +qt5 sdl soapy test trellis uhd vocoder +utils wavelet zeromq"
+
+#RESTRICT="!test? ( test )"
+# Tests are pulling in the installed python libs and breaking
+# https://github.com/gnuradio/gnuradio/issues/7568
+RESTRICT="test"
+
+REQUIRED_USE="${PYTHON_REQUIRED_USE}
+ alsa? ( audio )
+ analog? ( filter )
+ audio? ( || ( alsa oss jack portaudio ) )
+ channels? ( filter analog qt5 )
+ digital? ( filter analog )
+ dtv? ( filter analog fec )
+ jack? ( audio )
+ modtool? ( utils )
+ oss? ( audio )
+ portaudio? ( audio )
+ qt5? ( filter )
+ test? ( channels )
+ trellis? ( analog digital )
+ uhd? ( filter analog )
+ vocoder? ( filter analog )
+ wavelet? ( analog )
+"
+
+RDEPEND="${PYTHON_DEPS}
+ $(python_gen_cond_dep 'dev-libs/boost:=[python,${PYTHON_USEDEP}]')
+ dev-libs/gmp:=
+ dev-libs/log4cpp:=
+ $(python_gen_cond_dep 'dev-python/jsonschema[${PYTHON_USEDEP}]')
+ dev-libs/spdlog:=
+ dev-libs/libfmt:=
+ sci-libs/fftw:3.0=
+ sci-libs/volk:=
+ media-libs/libsndfile
+ sys-libs/libunwind
+ alsa? ( media-libs/alsa-lib:= )
+ ctrlport? (
+ $(python_gen_cond_dep 'dev-python/thrift[${PYTHON_USEDEP}]')
+ )
+ fec? (
+ sci-libs/gsl:=
+ $(python_gen_cond_dep 'dev-python/scipy[${PYTHON_USEDEP}]')
+ )
+ filter? (
+ $(python_gen_cond_dep 'dev-python/scipy[${PYTHON_USEDEP}]')
+ qt5? ( $(python_gen_cond_dep 'dev-python/pyqtgraph[qt5,${PYTHON_USEDEP}]') )
+ )
+ grc? (
+ $(python_gen_cond_dep 'dev-python/mako[${PYTHON_USEDEP}]
+ dev-python/numpy[${PYTHON_USEDEP}]
+ dev-python/pygobject:3[${PYTHON_USEDEP}]
+ dev-python/pyyaml[${PYTHON_USEDEP}]')
+ x11-libs/gtk+:3[introspection]
+ x11-libs/pango[introspection]
+ )
+ iio? (
+ net-libs/libiio:=
+ net-libs/libad9361-iio:=
+ )
+ jack? ( virtual/jack )
+ portaudio? ( >=media-libs/portaudio-19_pre )
+ qt5? (
+ $(python_gen_cond_dep 'dev-python/pyqt5[opengl,${PYTHON_USEDEP}]')
+ dev-qt/qtcore:5
+ dev-qt/qtgui:5
+ x11-libs/qwt:6=[qt5(-)]
+ dev-qt/qtwidgets:5
+ )
+ soapy? (
+ net-wireless/soapysdr:=[${PYTHON_SINGLE_USEDEP}]
+ )
+ sdl? ( >=media-libs/libsdl-1.2.0 )
+ trellis? ( dev-python/scipy )
+ uhd? (
+ >=net-wireless/uhd-3.9.6:=[${PYTHON_SINGLE_USEDEP}]
+ )
+ utils? (
+ $(python_gen_cond_dep 'dev-python/click[${PYTHON_USEDEP}]
+ dev-python/click-plugins[${PYTHON_USEDEP}]
+ dev-python/mako[${PYTHON_USEDEP}]
+ dev-python/matplotlib[${PYTHON_USEDEP}]')
+ )
+ vocoder? (
+ media-sound/gsm
+ >=media-libs/codec2-0.8.1:=
+ )
+ wavelet? (
+ sci-libs/gsl:=
+ sci-libs/lapack
+ )
+ zeromq? ( >=net-libs/zeromq-2.1.11:= )
+"
+
+DEPEND="${RDEPEND}
+ app-text/docbook-xml-dtd:4.2
+ $(python_gen_cond_dep 'dev-python/pybind11[${PYTHON_USEDEP}]')
+ virtual/pkgconfig
+ doc? (
+ >=app-text/doxygen-1.5.7.1
+ <dev-libs/mathjax-3
+ )
+ grc? ( x11-misc/xdg-utils )
+ modtool? ( $(python_gen_cond_dep 'dev-python/pygccxml[${PYTHON_USEDEP}]') )
+ oss? ( virtual/os-headers )
+ test? (
+ >=dev-util/cppunit-1.9.14
+ dev-python/pyzmq
+ )
+ zeromq? ( net-libs/cppzmq )
+"
+
+PATCHES=( "${FILESDIR}/${P}-boost-1.89.patch" ) # bug 969063
+
+src_prepare() {
+ xdg_environment_reset #534582
+
+ use !alsa && sed -i 's#version.h#version-nonexistent.h#' cmake/Modules/FindALSA.cmake
+ use !jack && sed -i 's#jack.h#jack-nonexistent.h#' cmake/Modules/FindJACK.cmake
+ use !oss && sed -i 's#soundcard.h#oss-nonexistent.h#g' cmake/Modules/FindOSS.cmake
+ use !portaudio && sed -i 's#portaudio.h#portaudio-nonexistent.h#g' cmake/Modules/FindPORTAUDIO.cmake
+
+ cmake_src_prepare
+}
+
+src_configure() {
+ local mycmakeargs=(
+ -DENABLE_DEFAULT=OFF
+ -DENABLE_GNURADIO_RUNTIME=ON
+ -DENABLE_PYTHON=ON
+ -DENABLE_GR_BLOCKS=ON
+ -DENABLE_GR_ANALOG="$(usex analog ON OFF)"
+ -DENABLE_GR_AUDIO=ON
+ -DENABLE_GR_CHANNELS="$(usex channels ON OFF)"
+ -DENABLE_GR_CTRLPORT="$(usex ctrlport ON OFF)"
+ -DENABLE_GR_DIGITAL="$(usex digital ON OFF)"
+ -DENABLE_DOXYGEN="$(usex doc ON OFF)"
+ -DENABLE_GR_DTV="$(usex dtv ON OFF)"
+ -DENABLE_GR_FEC="$(usex fec ON OFF)"
+ -DENABLE_GR_FFT=ON
+ -DENABLE_GR_FILTER="$(usex filter ON OFF)"
+ -DENABLE_GRC="$(usex grc ON OFF)"
+ -DENABLE_GR_IIO="$(usex iio ON OFF)"
+ -DENABLE_GR_MODTOOL="$(usex modtool ON OFF)"
+ -DENABLE_GR_BLOCKTOOL="$(usex modtool ON OFF)"
+ -DENABLE_GR_NETWORK="$(usex network ON OFF)"
+ -DENABLE_GR_PDU=ON
+ -DENABLE_PERFORMANCE_COUNTERS="$(usex performance-counters ON OFF)"
+ -DENABLE_TESTING="$(usex test ON OFF)"
+ -DENABLE_GR_QTGUI="$(usex qt5 ON OFF)"
+ -DENABLE_GR_SOAPY="$(usex soapy ON OFF)"
+ -DENABLE_GR_TRELLIS="$(usex trellis ON OFF)"
+ -DENABLE_GR_UHD="$(usex uhd ON OFF)"
+ -DENABLE_GR_UTILS="$(usex utils ON OFF)"
+ -DENABLE_GR_VIDEO_SDL="$(usex sdl ON OFF)"
+ -DENABLE_GR_VOCODER="$(usex vocoder ON OFF)"
+ -DENABLE_GR_WAVELET="$(usex wavelet ON OFF)"
+ -DENABLE_GR_ZEROMQ="$(usex zeromq ON OFF)"
+ -DSYSCONFDIR="${EPREFIX}"/etc
+ -DPYTHON_EXECUTABLE="${PYTHON}"
+ -DGR_PYTHON_DIR="$(python_get_sitedir)"
+ -DGR_PKG_DOC_DIR="${EPREFIX}/usr/share/doc/${PF}"
+ -DMATHJAX2_ROOT="${EPREFIX}/usr/share/mathjax"
+ )
+ # replace -DSYSCONFDIR in 3.10.13.0
+ #-DGR_CONF_DIR="${EPREFIX}"/etc
+ cmake_src_configure
+}
+
+src_install() {
+ cmake_src_install
+
+ if use examples ; then
+ dodir /usr/share/doc/${PF}/
+ mv "${ED}"/usr/share/${PN}/examples "${ED}"/usr/share/doc/${PF}/ || die
+ docompress -x /usr/share/doc/${PF}/examples
+ else
+ # It seems that the examples are always installed
+ rm -rf "${ED}"/usr/share/${PN}/examples || die
+ fi
+
+ if use doc || use examples; then
+ #this doesn't appear useful
+ rm -rf "${ED}"/usr/share/doc/${PF}/xml || die
+ fi
+
+ # Remove duplicated icons, MIME and desktop files and installation script
+ rm -rf "${ED}"/usr/share/${PN}/grc/freedesktop || die
+ rm -f "${ED}"/usr/libexec/${PN}/grc_setup_freedesktop || die
+
+ # Install icons, menu items and mime-types for GRC
+ if use grc ; then
+ local fd_path="${S}/grc/scripts/freedesktop"
+ insinto /usr/share/mime/packages
+ doins "${fd_path}/${PN}-grc.xml"
+
+ domenu "${fd_path}/${PN}-grc.desktop"
+ for size in 16 24 32 48 64 128 256; do
+ newicon -s $size "${fd_path}/"grc-icon-$size.png ${PN}-grc.png
+ done
+ fi
+
+ python_fix_shebang "${ED}"
+ # Remove incorrectly byte-compiled Python files and replace
+ find "${ED}"/usr/lib* -name "*.py[co]" -exec rm {} \; || die
+ python_optimize
+}
+
+src_test() {
+ # skip test which needs internet (metainfo_test)
+ virtx cmake_src_test -E 'metainfo_test' --output-on-failure
+}
+
+pkg_postinst() {
+ if use grc ; then
+ xdg_desktop_database_update
+ xdg_icon_cache_update
+ xdg_mimeinfo_database_update
+ fi
+}
+
+pkg_postrm() {
+ if use grc ; then
+ xdg_desktop_database_update
+ xdg_icon_cache_update
+ xdg_mimeinfo_database_update
+ fi
+}
diff --git a/net-wireless/gnuradio/gnuradio-9999.ebuild b/net-wireless/gnuradio/gnuradio-9999.ebuild
new file mode 100644
index 000000000000..533c313e2896
--- /dev/null
+++ b/net-wireless/gnuradio/gnuradio-9999.ebuild
@@ -0,0 +1,247 @@
+# Copyright 1999-2026 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=8
+
+PYTHON_COMPAT=( python3_{13..14} )
+inherit cmake desktop python-single-r1 virtualx xdg-utils
+
+DESCRIPTION="Toolkit that provides signal processing blocks to implement software radios"
+HOMEPAGE="https://www.gnuradio.org/"
+LICENSE="GPL-3"
+SLOT="0/${PV}"
+
+if [[ ${PV} =~ "9999" ]]; then
+ EGIT_REPO_URI="https://github.com/gnuradio/gnuradio.git"
+ EGIT_BRANCH="maint-3.10"
+ inherit git-r3
+else
+ SRC_URI="https://github.com/gnuradio/gnuradio/archive/refs/tags/v${PV}.tar.gz -> ${P}.tar.gz"
+ KEYWORDS="~amd64 ~arm ~riscv ~x86"
+fi
+
+IUSE="+audio +alsa +analog +digital channels ctrlport doc dtv examples fec +filter grc iio jack modtool network oss performance-counters portaudio +qt5 sdl soapy test trellis uhd vocoder +utils wavelet zeromq"
+
+#RESTRICT="!test? ( test )"
+# Tests are pulling in the installed python libs and breaking
+# https://github.com/gnuradio/gnuradio/issues/7568
+RESTRICT="test"
+
+REQUIRED_USE="${PYTHON_REQUIRED_USE}
+ alsa? ( audio )
+ analog? ( filter )
+ audio? ( || ( alsa oss jack portaudio ) )
+ channels? ( filter analog qt5 )
+ digital? ( filter analog )
+ dtv? ( filter analog fec )
+ jack? ( audio )
+ modtool? ( utils )
+ oss? ( audio )
+ portaudio? ( audio )
+ qt5? ( filter )
+ test? ( channels )
+ trellis? ( analog digital )
+ uhd? ( filter analog )
+ vocoder? ( filter analog )
+ wavelet? ( analog )
+"
+
+RDEPEND="${PYTHON_DEPS}
+ $(python_gen_cond_dep 'dev-libs/boost:=[python,${PYTHON_USEDEP}]')
+ dev-libs/gmp:=
+ dev-libs/log4cpp:=
+ $(python_gen_cond_dep 'dev-python/jsonschema[${PYTHON_USEDEP}]')
+ dev-libs/spdlog:=
+ dev-libs/libfmt:=
+ sci-libs/fftw:3.0=
+ sci-libs/volk:=
+ media-libs/libsndfile
+ sys-libs/libunwind
+ alsa? ( media-libs/alsa-lib:= )
+ ctrlport? (
+ $(python_gen_cond_dep 'dev-python/thrift[${PYTHON_USEDEP}]')
+ )
+ fec? (
+ sci-libs/gsl:=
+ $(python_gen_cond_dep 'dev-python/scipy[${PYTHON_USEDEP}]')
+ )
+ filter? (
+ $(python_gen_cond_dep 'dev-python/scipy[${PYTHON_USEDEP}]')
+ qt5? ( $(python_gen_cond_dep 'dev-python/pyqtgraph[qt5,${PYTHON_USEDEP}]') )
+ )
+ grc? (
+ $(python_gen_cond_dep 'dev-python/mako[${PYTHON_USEDEP}]
+ dev-python/numpy[${PYTHON_USEDEP}]
+ dev-python/pygobject:3[${PYTHON_USEDEP}]
+ dev-python/pyyaml[${PYTHON_USEDEP}]')
+ x11-libs/gtk+:3[introspection]
+ x11-libs/pango[introspection]
+ )
+ iio? (
+ net-libs/libiio:=
+ net-libs/libad9361-iio:=
+ )
+ jack? ( virtual/jack )
+ portaudio? ( >=media-libs/portaudio-19_pre )
+ qt5? (
+ $(python_gen_cond_dep 'dev-python/pyqt5[opengl,${PYTHON_USEDEP}]')
+ dev-qt/qtcore:5
+ dev-qt/qtgui:5
+ x11-libs/qwt:6=[qt5(-)]
+ dev-qt/qtwidgets:5
+ )
+ soapy? (
+ net-wireless/soapysdr:=[${PYTHON_SINGLE_USEDEP}]
+ )
+ sdl? ( >=media-libs/libsdl-1.2.0 )
+ trellis? ( dev-python/scipy )
+ uhd? (
+ >=net-wireless/uhd-3.9.6:=[${PYTHON_SINGLE_USEDEP}]
+ )
+ utils? (
+ $(python_gen_cond_dep 'dev-python/click[${PYTHON_USEDEP}]
+ dev-python/click-plugins[${PYTHON_USEDEP}]
+ dev-python/mako[${PYTHON_USEDEP}]
+ dev-python/matplotlib[${PYTHON_USEDEP}]')
+ )
+ vocoder? (
+ media-sound/gsm
+ >=media-libs/codec2-0.8.1:=
+ )
+ wavelet? (
+ sci-libs/gsl:=
+ sci-libs/lapack
+ )
+ zeromq? ( >=net-libs/zeromq-2.1.11:= )
+"
+
+DEPEND="${RDEPEND}
+ app-text/docbook-xml-dtd:4.2
+ $(python_gen_cond_dep 'dev-python/pybind11[${PYTHON_USEDEP}]')
+ virtual/pkgconfig
+ doc? (
+ >=app-text/doxygen-1.5.7.1
+ <dev-libs/mathjax-3
+ )
+ grc? ( x11-misc/xdg-utils )
+ modtool? ( $(python_gen_cond_dep 'dev-python/pygccxml[${PYTHON_USEDEP}]') )
+ oss? ( virtual/os-headers )
+ test? (
+ >=dev-util/cppunit-1.9.14
+ dev-python/pyzmq
+ )
+ zeromq? ( net-libs/cppzmq )
+"
+
+src_prepare() {
+ xdg_environment_reset #534582
+
+ use !alsa && sed -i 's#version.h#version-nonexistent.h#' cmake/Modules/FindALSA.cmake
+ use !jack && sed -i 's#jack.h#jack-nonexistent.h#' cmake/Modules/FindJACK.cmake
+ use !oss && sed -i 's#soundcard.h#oss-nonexistent.h#g' cmake/Modules/FindOSS.cmake
+ use !portaudio && sed -i 's#portaudio.h#portaudio-nonexistent.h#g' cmake/Modules/FindPORTAUDIO.cmake
+
+ cmake_src_prepare
+}
+
+src_configure() {
+ local mycmakeargs=(
+ -DENABLE_DEFAULT=OFF
+ -DENABLE_GNURADIO_RUNTIME=ON
+ -DENABLE_PYTHON=ON
+ -DENABLE_GR_BLOCKS=ON
+ -DENABLE_GR_ANALOG="$(usex analog ON OFF)"
+ -DENABLE_GR_AUDIO=ON
+ -DENABLE_GR_CHANNELS="$(usex channels ON OFF)"
+ -DENABLE_GR_CTRLPORT="$(usex ctrlport ON OFF)"
+ -DENABLE_GR_DIGITAL="$(usex digital ON OFF)"
+ -DENABLE_DOXYGEN="$(usex doc ON OFF)"
+ -DENABLE_GR_DTV="$(usex dtv ON OFF)"
+ -DENABLE_GR_FEC="$(usex fec ON OFF)"
+ -DENABLE_GR_FFT=ON
+ -DENABLE_GR_FILTER="$(usex filter ON OFF)"
+ -DENABLE_GRC="$(usex grc ON OFF)"
+ -DENABLE_GR_IIO="$(usex iio ON OFF)"
+ -DENABLE_GR_MODTOOL="$(usex modtool ON OFF)"
+ -DENABLE_GR_BLOCKTOOL="$(usex modtool ON OFF)"
+ -DENABLE_GR_NETWORK="$(usex network ON OFF)"
+ -DENABLE_GR_PDU=ON
+ -DENABLE_PERFORMANCE_COUNTERS="$(usex performance-counters ON OFF)"
+ -DENABLE_TESTING="$(usex test ON OFF)"
+ -DENABLE_GR_QTGUI="$(usex qt5 ON OFF)"
+ -DENABLE_GR_SOAPY="$(usex soapy ON OFF)"
+ -DENABLE_GR_TRELLIS="$(usex trellis ON OFF)"
+ -DENABLE_GR_UHD="$(usex uhd ON OFF)"
+ -DENABLE_GR_UTILS="$(usex utils ON OFF)"
+ -DENABLE_GR_VIDEO_SDL="$(usex sdl ON OFF)"
+ -DENABLE_GR_VOCODER="$(usex vocoder ON OFF)"
+ -DENABLE_GR_WAVELET="$(usex wavelet ON OFF)"
+ -DENABLE_GR_ZEROMQ="$(usex zeromq ON OFF)"
+ -DSYSCONFDIR="${EPREFIX}"/etc
+ -DPYTHON_EXECUTABLE="${PYTHON}"
+ -DGR_PYTHON_DIR="$(python_get_sitedir)"
+ -DGR_PKG_DOC_DIR="${EPREFIX}/usr/share/doc/${PF}"
+ -DMATHJAX2_ROOT="${EPREFIX}/usr/share/mathjax"
+ )
+ cmake_src_configure
+}
+
+src_install() {
+ cmake_src_install
+
+ if use examples ; then
+ dodir /usr/share/doc/${PF}/
+ mv "${ED}"/usr/share/${PN}/examples "${ED}"/usr/share/doc/${PF}/ || die
+ docompress -x /usr/share/doc/${PF}/examples
+ else
+ # It seems that the examples are always installed
+ rm -rf "${ED}"/usr/share/${PN}/examples || die
+ fi
+
+ if use doc || use examples; then
+ #this doesn't appear useful
+ rm -rf "${ED}"/usr/share/doc/${PF}/xml || die
+ fi
+
+ # Remove duplicated icons, MIME and desktop files and installation script
+ rm -rf "${ED}"/usr/share/${PN}/grc/freedesktop || die
+ rm -f "${ED}"/usr/libexec/${PN}/grc_setup_freedesktop || die
+
+ # Install icons, menu items and mime-types for GRC
+ if use grc ; then
+ local fd_path="${S}/grc/scripts/freedesktop"
+ insinto /usr/share/mime/packages
+ doins "${fd_path}/${PN}-grc.xml"
+
+ domenu "${fd_path}/${PN}-grc.desktop"
+ for size in 16 24 32 48 64 128 256; do
+ newicon -s $size "${fd_path}/"grc-icon-$size.png ${PN}-grc.png
+ done
+ fi
+
+ python_fix_shebang "${ED}"
+ # Remove incorrectly byte-compiled Python files and replace
+ find "${ED}"/usr/lib* -name "*.py[co]" -exec rm {} \; || die
+ python_optimize
+}
+
+src_test() {
+ # skip test which needs internet (metainfo_test)
+ virtx cmake_src_test -E 'metainfo_test' --output-on-failure
+}
+
+pkg_postinst() {
+ if use grc ; then
+ xdg_desktop_database_update
+ xdg_icon_cache_update
+ xdg_mimeinfo_database_update
+ fi
+}
+
+pkg_postrm() {
+ if use grc ; then
+ xdg_desktop_database_update
+ xdg_icon_cache_update
+ xdg_mimeinfo_database_update
+ fi
+}
diff --git a/net-wireless/gnuradio/metadata.xml b/net-wireless/gnuradio/metadata.xml
new file mode 100644
index 000000000000..b2c1b5b52663
--- /dev/null
+++ b/net-wireless/gnuradio/metadata.xml
@@ -0,0 +1,31 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE pkgmetadata SYSTEM "https://docs.baldeagleos.com/dtd/metadata.dtd">
+<pkgmetadata>
+ <maintainer type="project">
+ <email>radio@gentoo.org</email>
+ <name>Radio</name>
+ </maintainer>
+ <use>
+ <flag name="analog">enable analog signal processing blocks</flag>
+ <flag name="audio">enable blocks to connect to audio sources (mic-in) and sinks (speaker-out) ports on a computer</flag>
+ <flag name="channels">enable channel mode blocks</flag>
+ <flag name="ctrlport">enable control port interface</flag>
+ <flag name="digital">enable digital signal processing blocks</flag>
+ <flag name="dtv">enable digital tv signal processing blocks</flag>
+ <flag name="fec">enable block for convolutional encoding using the CCSDS standard polynomial ("Voyager")</flag>
+ <flag name="filter">enable filter signal processing blocks</flag>
+ <flag name="grc">enable GNU Radio Companion graphical tool to design signal processing flow graphs</flag>
+ <flag name="iio">enable enable support for IIO devices</flag>
+ <flag name="modtool">enable modtool for editing GNU Radio modules and components</flag>
+ <flag name="network">enable block for networking support</flag>
+ <flag name="performance-counters">enable block performance counters</flag>
+ <flag name="soapy">enable support for SoapySDR blocks</flag>
+ <flag name="trellis">enable trellis blocks for FSM</flag>
+ <flag name="uhd">install UHD source and sink blocks</flag>
+ <flag name="utils">install scripts to enable viewing and analysis of files produced by flow graphs</flag>
+ <flag name="vocoder">enable blocks for audio voice encoders</flag>
+ <flag name="wavelet">enable wavelet signal processing blocks</flag>
+ <flag name="zeromq">enable zeromq message passing blocks</flag>
+ </use>
+ <origin>baldeagleos-repo</origin>
+</pkgmetadata>
diff --git a/net-wireless/gqrx-scanner/Manifest b/net-wireless/gqrx-scanner/Manifest
new file mode 100644
index 000000000000..9668830f3dc2
--- /dev/null
+++ b/net-wireless/gqrx-scanner/Manifest
@@ -0,0 +1 @@
+DIST gqrx-scanner-1.0.4.tar.gz 18602 BLAKE2B 6c45424a08f7c192ff09712d809fcacf6a99fcfb370039321ebddf9d4a357c56eba2cf040661bcc212b47ad61227965c7654cc035b3122249faed8c90a4d3b04 SHA512 9c47686ae38927193f5689f6f946f6ef28798823ecebeec075f852566dcf118cf46fd4c138116071c60fa2d926673962517900758d73f9e5c53637e5fe3d7139
diff --git a/net-wireless/gqrx-scanner/gqrx-scanner-1.0.4.ebuild b/net-wireless/gqrx-scanner/gqrx-scanner-1.0.4.ebuild
new file mode 100644
index 000000000000..f88678e92090
--- /dev/null
+++ b/net-wireless/gqrx-scanner/gqrx-scanner-1.0.4.ebuild
@@ -0,0 +1,17 @@
+# Copyright 2019-2023 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=8
+
+inherit cmake
+
+DESCRIPTION="frequency scanner for Gqrx Software Defined Radio receiver"
+HOMEPAGE="https://github.com/neural75/gqrx-scanner"
+SRC_URI="https://github.com/neural75/gqrx-scanner/archive/v${PV}.tar.gz -> ${P}.tar.gz"
+
+LICENSE="MIT"
+SLOT="0"
+KEYWORDS="~amd64 ~riscv ~x86"
+IUSE=""
+
+RDEPEND="net-wireless/gqrx"
diff --git a/net-wireless/gqrx-scanner/metadata.xml b/net-wireless/gqrx-scanner/metadata.xml
new file mode 100644
index 000000000000..42f58171ab2f
--- /dev/null
+++ b/net-wireless/gqrx-scanner/metadata.xml
@@ -0,0 +1,13 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE pkgmetadata SYSTEM "https://docs.baldeagleos.com/dtd/metadata.dtd">
+<pkgmetadata>
+ <maintainer type="person">
+ <email>zerochaos@gentoo.org</email>
+ <name>Rick Farina</name>
+ </maintainer>
+ <maintainer type="project">
+ <email>radio@gentoo.org</email>
+ <name>Radio</name>
+ </maintainer>
+ <origin>baldeagleos-repo</origin>
+</pkgmetadata>
diff --git a/net-wireless/gqrx/Manifest b/net-wireless/gqrx/Manifest
new file mode 100644
index 000000000000..2dae1fc0f6c1
--- /dev/null
+++ b/net-wireless/gqrx/Manifest
@@ -0,0 +1,3 @@
+DIST gqrx-2.17.2.tar.gz 3620793 BLAKE2B a8354212c5084160315581840a19a28f737d2492f16aad2f58f4e508e0ac4dfda7fa139eccd38694ebd0777a4c2062f984840baa2cc2313524e0566e695dc638 SHA512 7e387dd909d0dda710e8fb7766bcd6f26abc2a6bef73d2bdf4d9c96b8cf698d3b6c6c1b2fbd51e91f907f446bb1e551b9fb99503851e02777599193717a72e35
+DIST gqrx-2.17.6.tar.gz 3627214 BLAKE2B 16d362249ae8b46c19b58b1b146c79d2d34f4cca4b38aae826f781c493201b3a2a41df9b46309d8396795507c2b61c053506738eb791cd89fd4b8d2f3e2246fa SHA512 626a7c842e9848fa3eb0326f0ebdee3d1b78eda36f3d378676dc10baf9a799ffd3cd6e3e78d992474443108a7f71d29a39eadd73821432846d8465eff1946974
+DIST gqrx-2.17.7.tar.gz 3626389 BLAKE2B 32b4a9fa903b3ed37a0786d241c3307279b5dcd30863205bb9a6a82d0c16426640172154827bf9371f160aeb43f59bf78ed228c7d54d0741ff18ff45027e5a34 SHA512 a3b253dbf34d9efd5fad2309774acb1242e3ef6c41692272035b020d65622e3e0db12d84f9b5e07254337e3d9669f9d512b014c483f955ab237876e1ea0424b6
diff --git a/net-wireless/gqrx/gqrx-2.17.2-r1.ebuild b/net-wireless/gqrx/gqrx-2.17.2-r1.ebuild
new file mode 100644
index 000000000000..8add0b3ddd79
--- /dev/null
+++ b/net-wireless/gqrx/gqrx-2.17.2-r1.ebuild
@@ -0,0 +1,56 @@
+# Copyright 1999-2025 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=8
+
+inherit cmake
+
+DESCRIPTION="Software defined radio receiver powered by GNU Radio and Qt"
+HOMEPAGE="https://gqrx.dk/"
+
+if [[ ${PV} == *9999* ]] ; then
+ EGIT_REPO_URI="https://github.com/gqrx-sdr/gqrx.git"
+ inherit git-r3
+else
+ SRC_URI="https://github.com/gqrx-sdr/gqrx/archive/v${PV}.tar.gz -> ${P}.tar.gz"
+ KEYWORDS="~amd64 ~arm ~riscv ~x86"
+fi
+
+LICENSE="GPL-3"
+SLOT="0"
+IUSE="portaudio pulseaudio"
+REQUIRED_USE="?? ( pulseaudio portaudio )"
+
+RDEPEND="
+ dev-qt/qtbase:6[gui,network,widgets]
+ dev-qt/qtsvg:6
+ >=net-wireless/gnuradio-3.10:0=[audio,analog,filter,network]
+ >=net-wireless/gr-osmosdr-0.1.0:=
+ sci-libs/volk:=
+ pulseaudio? ( media-libs/libpulse )
+ portaudio? ( media-libs/portaudio:= )"
+DEPEND="${RDEPEND}
+ dev-libs/boost
+ dev-libs/log4cpp
+"
+
+src_configure() {
+ if use pulseaudio; then
+ LINUX_AUDIO_BACKEND=Pulseaudio
+ elif use portaudio; then
+ LINUX_AUDIO_BACKEND=Portaudio
+ else
+ LINUX_AUDIO_BACKEND=Gr-audio
+ fi
+
+ local mycmakeargs=(
+ -DFORCE_QT6=ON
+ -DFORCE_QT5=OFF
+ -DLINUX_AUDIO_BACKEND="${LINUX_AUDIO_BACKEND}"
+ )
+ cmake_src_configure
+}
+
+src_install() {
+ dobin "${BUILD_DIR}"/src/gqrx
+}
diff --git a/net-wireless/gqrx/gqrx-2.17.6.ebuild b/net-wireless/gqrx/gqrx-2.17.6.ebuild
new file mode 100644
index 000000000000..8add0b3ddd79
--- /dev/null
+++ b/net-wireless/gqrx/gqrx-2.17.6.ebuild
@@ -0,0 +1,56 @@
+# Copyright 1999-2025 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=8
+
+inherit cmake
+
+DESCRIPTION="Software defined radio receiver powered by GNU Radio and Qt"
+HOMEPAGE="https://gqrx.dk/"
+
+if [[ ${PV} == *9999* ]] ; then
+ EGIT_REPO_URI="https://github.com/gqrx-sdr/gqrx.git"
+ inherit git-r3
+else
+ SRC_URI="https://github.com/gqrx-sdr/gqrx/archive/v${PV}.tar.gz -> ${P}.tar.gz"
+ KEYWORDS="~amd64 ~arm ~riscv ~x86"
+fi
+
+LICENSE="GPL-3"
+SLOT="0"
+IUSE="portaudio pulseaudio"
+REQUIRED_USE="?? ( pulseaudio portaudio )"
+
+RDEPEND="
+ dev-qt/qtbase:6[gui,network,widgets]
+ dev-qt/qtsvg:6
+ >=net-wireless/gnuradio-3.10:0=[audio,analog,filter,network]
+ >=net-wireless/gr-osmosdr-0.1.0:=
+ sci-libs/volk:=
+ pulseaudio? ( media-libs/libpulse )
+ portaudio? ( media-libs/portaudio:= )"
+DEPEND="${RDEPEND}
+ dev-libs/boost
+ dev-libs/log4cpp
+"
+
+src_configure() {
+ if use pulseaudio; then
+ LINUX_AUDIO_BACKEND=Pulseaudio
+ elif use portaudio; then
+ LINUX_AUDIO_BACKEND=Portaudio
+ else
+ LINUX_AUDIO_BACKEND=Gr-audio
+ fi
+
+ local mycmakeargs=(
+ -DFORCE_QT6=ON
+ -DFORCE_QT5=OFF
+ -DLINUX_AUDIO_BACKEND="${LINUX_AUDIO_BACKEND}"
+ )
+ cmake_src_configure
+}
+
+src_install() {
+ dobin "${BUILD_DIR}"/src/gqrx
+}
diff --git a/net-wireless/gqrx/gqrx-2.17.7.ebuild b/net-wireless/gqrx/gqrx-2.17.7.ebuild
new file mode 100644
index 000000000000..8add0b3ddd79
--- /dev/null
+++ b/net-wireless/gqrx/gqrx-2.17.7.ebuild
@@ -0,0 +1,56 @@
+# Copyright 1999-2025 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=8
+
+inherit cmake
+
+DESCRIPTION="Software defined radio receiver powered by GNU Radio and Qt"
+HOMEPAGE="https://gqrx.dk/"
+
+if [[ ${PV} == *9999* ]] ; then
+ EGIT_REPO_URI="https://github.com/gqrx-sdr/gqrx.git"
+ inherit git-r3
+else
+ SRC_URI="https://github.com/gqrx-sdr/gqrx/archive/v${PV}.tar.gz -> ${P}.tar.gz"
+ KEYWORDS="~amd64 ~arm ~riscv ~x86"
+fi
+
+LICENSE="GPL-3"
+SLOT="0"
+IUSE="portaudio pulseaudio"
+REQUIRED_USE="?? ( pulseaudio portaudio )"
+
+RDEPEND="
+ dev-qt/qtbase:6[gui,network,widgets]
+ dev-qt/qtsvg:6
+ >=net-wireless/gnuradio-3.10:0=[audio,analog,filter,network]
+ >=net-wireless/gr-osmosdr-0.1.0:=
+ sci-libs/volk:=
+ pulseaudio? ( media-libs/libpulse )
+ portaudio? ( media-libs/portaudio:= )"
+DEPEND="${RDEPEND}
+ dev-libs/boost
+ dev-libs/log4cpp
+"
+
+src_configure() {
+ if use pulseaudio; then
+ LINUX_AUDIO_BACKEND=Pulseaudio
+ elif use portaudio; then
+ LINUX_AUDIO_BACKEND=Portaudio
+ else
+ LINUX_AUDIO_BACKEND=Gr-audio
+ fi
+
+ local mycmakeargs=(
+ -DFORCE_QT6=ON
+ -DFORCE_QT5=OFF
+ -DLINUX_AUDIO_BACKEND="${LINUX_AUDIO_BACKEND}"
+ )
+ cmake_src_configure
+}
+
+src_install() {
+ dobin "${BUILD_DIR}"/src/gqrx
+}
diff --git a/net-wireless/gqrx/gqrx-9999.ebuild b/net-wireless/gqrx/gqrx-9999.ebuild
new file mode 100644
index 000000000000..8add0b3ddd79
--- /dev/null
+++ b/net-wireless/gqrx/gqrx-9999.ebuild
@@ -0,0 +1,56 @@
+# Copyright 1999-2025 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=8
+
+inherit cmake
+
+DESCRIPTION="Software defined radio receiver powered by GNU Radio and Qt"
+HOMEPAGE="https://gqrx.dk/"
+
+if [[ ${PV} == *9999* ]] ; then
+ EGIT_REPO_URI="https://github.com/gqrx-sdr/gqrx.git"
+ inherit git-r3
+else
+ SRC_URI="https://github.com/gqrx-sdr/gqrx/archive/v${PV}.tar.gz -> ${P}.tar.gz"
+ KEYWORDS="~amd64 ~arm ~riscv ~x86"
+fi
+
+LICENSE="GPL-3"
+SLOT="0"
+IUSE="portaudio pulseaudio"
+REQUIRED_USE="?? ( pulseaudio portaudio )"
+
+RDEPEND="
+ dev-qt/qtbase:6[gui,network,widgets]
+ dev-qt/qtsvg:6
+ >=net-wireless/gnuradio-3.10:0=[audio,analog,filter,network]
+ >=net-wireless/gr-osmosdr-0.1.0:=
+ sci-libs/volk:=
+ pulseaudio? ( media-libs/libpulse )
+ portaudio? ( media-libs/portaudio:= )"
+DEPEND="${RDEPEND}
+ dev-libs/boost
+ dev-libs/log4cpp
+"
+
+src_configure() {
+ if use pulseaudio; then
+ LINUX_AUDIO_BACKEND=Pulseaudio
+ elif use portaudio; then
+ LINUX_AUDIO_BACKEND=Portaudio
+ else
+ LINUX_AUDIO_BACKEND=Gr-audio
+ fi
+
+ local mycmakeargs=(
+ -DFORCE_QT6=ON
+ -DFORCE_QT5=OFF
+ -DLINUX_AUDIO_BACKEND="${LINUX_AUDIO_BACKEND}"
+ )
+ cmake_src_configure
+}
+
+src_install() {
+ dobin "${BUILD_DIR}"/src/gqrx
+}
diff --git a/net-wireless/gqrx/metadata.xml b/net-wireless/gqrx/metadata.xml
new file mode 100644
index 000000000000..42f58171ab2f
--- /dev/null
+++ b/net-wireless/gqrx/metadata.xml
@@ -0,0 +1,13 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE pkgmetadata SYSTEM "https://docs.baldeagleos.com/dtd/metadata.dtd">
+<pkgmetadata>
+ <maintainer type="person">
+ <email>zerochaos@gentoo.org</email>
+ <name>Rick Farina</name>
+ </maintainer>
+ <maintainer type="project">
+ <email>radio@gentoo.org</email>
+ <name>Radio</name>
+ </maintainer>
+ <origin>baldeagleos-repo</origin>
+</pkgmetadata>
diff --git a/net-wireless/gr-ieee802154/Manifest b/net-wireless/gr-ieee802154/Manifest
new file mode 100644
index 000000000000..2c07ec64900c
--- /dev/null
+++ b/net-wireless/gr-ieee802154/Manifest
@@ -0,0 +1,2 @@
+DIST gr-ieee802154-0.0_p20210719.tar.gz 155040 BLAKE2B c198de71391ddc2ad32255476b8b9ba0e13bd3eb3c674b21846174cd3d8804c68e407f4e019cc164b1d10eae5ee672ae31a5f23a450d08abd477aa244ef479fb SHA512 77f746832bfaec53ad6439b69de8712fb444d7b45fdc9937445c6df5d6a5a9a19363ab180c063b6c0647dff8c0404797d190730124a2248418e0fee5daff26f7
+DIST gr-ieee802154-0.0_p20230828.tar.gz 155040 BLAKE2B c198de71391ddc2ad32255476b8b9ba0e13bd3eb3c674b21846174cd3d8804c68e407f4e019cc164b1d10eae5ee672ae31a5f23a450d08abd477aa244ef479fb SHA512 77f746832bfaec53ad6439b69de8712fb444d7b45fdc9937445c6df5d6a5a9a19363ab180c063b6c0647dff8c0404797d190730124a2248418e0fee5daff26f7
diff --git a/net-wireless/gr-ieee802154/gr-ieee802154-0.0_p20210719-r5.ebuild b/net-wireless/gr-ieee802154/gr-ieee802154-0.0_p20210719-r5.ebuild
new file mode 100644
index 000000000000..42e10fe62162
--- /dev/null
+++ b/net-wireless/gr-ieee802154/gr-ieee802154-0.0_p20210719-r5.ebuild
@@ -0,0 +1,59 @@
+# Copyright 1999-2026 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=8
+PYTHON_COMPAT=( python3_{13..14} )
+
+inherit cmake python-single-r1
+
+DESCRIPTION="IEEE 802.15.4 ZigBee Transceiver"
+HOMEPAGE="https://github.com/bastibl/gr-ieee802-15-4"
+
+if [[ ${PV} == 9999* ]]; then
+ inherit git-r3
+ EGIT_REPO_URI="https://github.com/bastibl/gr-ieee802-15-4.git"
+ EGIT_BRANCH="maint-3.9"
+else
+ COMMIT="1a2999ce2778df279870f028a4ce15d94e60fbd9"
+ SRC_URI="https://github.com/bastibl/gr-ieee802-15-4/archive/${COMMIT}.tar.gz -> ${P}.tar.gz"
+ S="${WORKDIR}/gr-ieee802-15-4-${COMMIT}"
+ KEYWORDS="~amd64 ~x86"
+fi
+
+LICENSE="GPL-3"
+SLOT="0/${PV}"
+
+RDEPEND="net-wireless/gnuradio:0=[${PYTHON_SINGLE_USEDEP}]
+ $(python_gen_cond_dep '
+ dev-libs/boost:=[python,${PYTHON_USEDEP}]
+ dev-python/pybind11[${PYTHON_USEDEP}]
+ ')
+ dev-libs/gmp
+ dev-libs/spdlog:=
+ sci-libs/volk:=
+ ${PYTHON_DEPS}"
+DEPEND="${RDEPEND}"
+BDEPEND="dev-lang/swig"
+
+REQUIRED_USE="${PYTHON_REQUIRED_USE}"
+
+src_prepare() {
+ # fix path for doc files
+ sed -i "s/802_15_4 CXX/802154 CXX/" CMakeLists.txt || die
+ cmake_src_prepare
+}
+
+src_configure() {
+ local mycmakeargs=(
+ -DPYTHON_EXECUTABLE="${PYTHON}"
+ )
+ cmake_src_configure
+}
+
+src_install() {
+ cmake_src_install
+ # Remove stray python files generated by the build system
+ find "${ED}" -name '*.pyc' -exec rm -f {} \; || die
+ find "${ED}" -name '*.pyo' -exec rm -f {} \; || die
+ python_optimize
+}
diff --git a/net-wireless/gr-ieee802154/gr-ieee802154-0.0_p20230828-r1.ebuild b/net-wireless/gr-ieee802154/gr-ieee802154-0.0_p20230828-r1.ebuild
new file mode 100644
index 000000000000..42e10fe62162
--- /dev/null
+++ b/net-wireless/gr-ieee802154/gr-ieee802154-0.0_p20230828-r1.ebuild
@@ -0,0 +1,59 @@
+# Copyright 1999-2026 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=8
+PYTHON_COMPAT=( python3_{13..14} )
+
+inherit cmake python-single-r1
+
+DESCRIPTION="IEEE 802.15.4 ZigBee Transceiver"
+HOMEPAGE="https://github.com/bastibl/gr-ieee802-15-4"
+
+if [[ ${PV} == 9999* ]]; then
+ inherit git-r3
+ EGIT_REPO_URI="https://github.com/bastibl/gr-ieee802-15-4.git"
+ EGIT_BRANCH="maint-3.9"
+else
+ COMMIT="1a2999ce2778df279870f028a4ce15d94e60fbd9"
+ SRC_URI="https://github.com/bastibl/gr-ieee802-15-4/archive/${COMMIT}.tar.gz -> ${P}.tar.gz"
+ S="${WORKDIR}/gr-ieee802-15-4-${COMMIT}"
+ KEYWORDS="~amd64 ~x86"
+fi
+
+LICENSE="GPL-3"
+SLOT="0/${PV}"
+
+RDEPEND="net-wireless/gnuradio:0=[${PYTHON_SINGLE_USEDEP}]
+ $(python_gen_cond_dep '
+ dev-libs/boost:=[python,${PYTHON_USEDEP}]
+ dev-python/pybind11[${PYTHON_USEDEP}]
+ ')
+ dev-libs/gmp
+ dev-libs/spdlog:=
+ sci-libs/volk:=
+ ${PYTHON_DEPS}"
+DEPEND="${RDEPEND}"
+BDEPEND="dev-lang/swig"
+
+REQUIRED_USE="${PYTHON_REQUIRED_USE}"
+
+src_prepare() {
+ # fix path for doc files
+ sed -i "s/802_15_4 CXX/802154 CXX/" CMakeLists.txt || die
+ cmake_src_prepare
+}
+
+src_configure() {
+ local mycmakeargs=(
+ -DPYTHON_EXECUTABLE="${PYTHON}"
+ )
+ cmake_src_configure
+}
+
+src_install() {
+ cmake_src_install
+ # Remove stray python files generated by the build system
+ find "${ED}" -name '*.pyc' -exec rm -f {} \; || die
+ find "${ED}" -name '*.pyo' -exec rm -f {} \; || die
+ python_optimize
+}
diff --git a/net-wireless/gr-ieee802154/gr-ieee802154-9999.ebuild b/net-wireless/gr-ieee802154/gr-ieee802154-9999.ebuild
new file mode 100644
index 000000000000..e6bb7d9e9fb1
--- /dev/null
+++ b/net-wireless/gr-ieee802154/gr-ieee802154-9999.ebuild
@@ -0,0 +1,59 @@
+# Copyright 1999-2026 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=8
+PYTHON_COMPAT=( python3_{13..14} )
+
+inherit cmake python-single-r1
+
+DESCRIPTION="IEEE 802.15.4 ZigBee Transceiver"
+HOMEPAGE="https://github.com/bastibl/gr-ieee802-15-4"
+
+if [[ ${PV} == 9999* ]]; then
+ inherit git-r3
+ EGIT_REPO_URI="https://github.com/bastibl/gr-ieee802-15-4.git"
+ EGIT_BRANCH="maint-3.10"
+else
+ COMMIT="1a2999ce2778df279870f028a4ce15d94e60fbd9"
+ SRC_URI="https://github.com/bastibl/gr-ieee802-15-4/archive/${COMMIT}.tar.gz -> ${P}.tar.gz"
+ S="${WORKDIR}/gr-ieee802-15-4-${COMMIT}"
+ KEYWORDS="~amd64 ~x86"
+fi
+
+LICENSE="GPL-3"
+SLOT="0/${PV}"
+
+RDEPEND="net-wireless/gnuradio:0=[${PYTHON_SINGLE_USEDEP}]
+ $(python_gen_cond_dep '
+ dev-libs/boost:=[python,${PYTHON_USEDEP}]
+ dev-python/pybind11[${PYTHON_USEDEP}]
+ ')
+ dev-libs/gmp:=
+ dev-libs/spdlog:=
+ sci-libs/volk:=
+ ${PYTHON_DEPS}"
+DEPEND="${RDEPEND}"
+BDEPEND="dev-lang/swig"
+
+REQUIRED_USE="${PYTHON_REQUIRED_USE}"
+
+src_prepare() {
+ # fix path for doc files
+ sed -i "s/802_15_4 CXX/802154 CXX/" CMakeLists.txt || die
+ cmake_src_prepare
+}
+
+src_configure() {
+ local mycmakeargs=(
+ -DPYTHON_EXECUTABLE="${PYTHON}"
+ )
+ cmake_src_configure
+}
+
+src_install() {
+ cmake_src_install
+ # Remove stray python files generated by the build system
+ find "${ED}" -name '*.pyc' -exec rm -f {} \; || die
+ find "${ED}" -name '*.pyo' -exec rm -f {} \; || die
+ python_optimize
+}
diff --git a/net-wireless/gr-ieee802154/metadata.xml b/net-wireless/gr-ieee802154/metadata.xml
new file mode 100644
index 000000000000..484ffb011945
--- /dev/null
+++ b/net-wireless/gr-ieee802154/metadata.xml
@@ -0,0 +1,9 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE pkgmetadata SYSTEM "https://docs.baldeagleos.com/dtd/metadata.dtd">
+<pkgmetadata>
+ <maintainer type="project">
+ <email>radio@gentoo.org</email>
+ <name>Radio</name>
+ </maintainer>
+ <origin>baldeagleos-repo</origin>
+</pkgmetadata>
diff --git a/net-wireless/gr-iqbal/Manifest b/net-wireless/gr-iqbal/Manifest
new file mode 100644
index 000000000000..f679beeee073
--- /dev/null
+++ b/net-wireless/gr-iqbal/Manifest
@@ -0,0 +1 @@
+DIST gr-iqbal-0.38.3.gh.tar.gz 84530 BLAKE2B c0830c9b75714b3b71a87ef3be6a012b13b2aa309d102398a5b2accf6539c8c9346cb2e17f9497ddc655533980edd745b668149e27143e6b79a8ee3b40a7347f SHA512 00f544a132e7e3628f0e511942d0201d2c8fe39aa848212b36f494caa4ed1a1f5e6d37c3e61491ab97edb863b719c844cc517c3d14917bd126e875e9a689feb8
diff --git a/net-wireless/gr-iqbal/files/gr-iqbal-boost-no-system.patch b/net-wireless/gr-iqbal/files/gr-iqbal-boost-no-system.patch
new file mode 100644
index 000000000000..f9b5dfffcd2d
--- /dev/null
+++ b/net-wireless/gr-iqbal/files/gr-iqbal-boost-no-system.patch
@@ -0,0 +1,22 @@
+From 92fd7a9b4fde6f7f84bb4350d6622ec87ad87ed0 Mon Sep 17 00:00:00 2001
+From: "Rick Farina (Zero_Chaos)" <zerochaos@gentoo.org>
+Date: Sat, 4 Apr 2026 14:47:01 -0400
+Subject: [PATCH] support new boost with no system lib
+
+---
+ CMakeLists.txt | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/CMakeLists.txt b/CMakeLists.txt
+index bde2b8d..a706322 100644
+--- a/CMakeLists.txt
++++ b/CMakeLists.txt
+@@ -71,7 +71,7 @@ endif()
+ ########################################################################
+ # Find boost
+ ########################################################################
+-find_package(Boost "1.65" REQUIRED system)
++find_package(Boost "1.65" REQUIRED)
+
+ if(NOT Boost_FOUND)
+ message(FATAL_ERROR "Boost required to compile iqbalance")
diff --git a/net-wireless/gr-iqbal/gr-iqbal-0.38.3-r1.ebuild b/net-wireless/gr-iqbal/gr-iqbal-0.38.3-r1.ebuild
new file mode 100644
index 000000000000..5190c229f9d3
--- /dev/null
+++ b/net-wireless/gr-iqbal/gr-iqbal-0.38.3-r1.ebuild
@@ -0,0 +1,45 @@
+# Copyright 1999-2026 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=8
+PYTHON_COMPAT=( python3_{13..14} )
+
+inherit cmake python-single-r1
+
+DESCRIPTION="gnuradio I/Q balancing"
+HOMEPAGE="http://git.osmocom.org/gr-iqbal/"
+
+if [[ ${PV} == 9999* ]]; then
+ inherit git-r3
+ EGIT_REPO_URI="https://github.com/osmocom/gr-iqbal.git"
+else
+ SRC_URI="https://github.com/osmocom/gr-iqbal/archive/refs/tags/v${PV}.tar.gz -> "${P}.gh.tar.gz""
+ KEYWORDS="~amd64 ~arm ~riscv ~x86"
+fi
+
+LICENSE="GPL-3"
+SLOT="0/${PV}"
+IUSE="doc"
+
+REQUIRED_USE="${PYTHON_REQUIRED_USE}"
+RDEPEND=">=net-wireless/gnuradio-3.9.0.0:0=[${PYTHON_SINGLE_USEDEP}]
+ net-libs/libosmo-dsp:=
+ ${PYTHON_DEPS}"
+DEPEND="${RDEPEND}
+ dev-libs/boost"
+
+PATCHES=( "${FILESDIR}/${PN}-boost-no-system.patch" )
+
+src_configure() {
+ local mycmakeargs=(
+ -DENABLE_DOXYGEN="$(usex doc)"
+ )
+ cmake_src_configure
+}
+
+src_install() {
+ cmake_src_install
+ find "${D}" -name '__init__.py[co]' -delete || die
+ python_optimize
+ mv "${ED}/usr/share/doc/gr-iqbalance" "${ED}/usr/share/doc/${P}"
+}
diff --git a/net-wireless/gr-iqbal/gr-iqbal-0.38.3.ebuild b/net-wireless/gr-iqbal/gr-iqbal-0.38.3.ebuild
new file mode 100644
index 000000000000..6042d7dc28cb
--- /dev/null
+++ b/net-wireless/gr-iqbal/gr-iqbal-0.38.3.ebuild
@@ -0,0 +1,45 @@
+# Copyright 1999-2026 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=8
+PYTHON_COMPAT=( python3_{13..14} )
+
+inherit cmake python-single-r1
+
+DESCRIPTION="gnuradio I/Q balancing"
+HOMEPAGE="http://git.osmocom.org/gr-iqbal/"
+
+if [[ ${PV} == 9999* ]]; then
+ inherit git-r3
+ EGIT_REPO_URI="https://github.com/osmocom/gr-iqbal.git"
+else
+ SRC_URI="https://github.com/osmocom/gr-iqbal/archive/refs/tags/v${PV}.tar.gz -> "${P}.gh.tar.gz""
+ KEYWORDS="amd64 ~arm ~riscv ~x86"
+fi
+
+LICENSE="GPL-3"
+SLOT="0/${PV}"
+IUSE="doc"
+
+REQUIRED_USE="${PYTHON_REQUIRED_USE}"
+RDEPEND=">=net-wireless/gnuradio-3.9.0.0:0=[${PYTHON_SINGLE_USEDEP}]
+ net-libs/libosmo-dsp:=
+ ${PYTHON_DEPS}"
+DEPEND="${RDEPEND}
+ dev-libs/boost"
+
+PATCHES=( "${FILESDIR}/${PN}-boost-no-system.patch" )
+
+src_configure() {
+ local mycmakeargs=(
+ -DENABLE_DOXYGEN="$(usex doc)"
+ )
+ cmake_src_configure
+}
+
+src_install() {
+ cmake_src_install
+ find "${D}" -name '__init__.py[co]' -delete || die
+ python_optimize
+ mv "${ED}/usr/share/doc/gr-iqbalance" "${ED}/usr/share/doc/${P}"
+}
diff --git a/net-wireless/gr-iqbal/gr-iqbal-9999.ebuild b/net-wireless/gr-iqbal/gr-iqbal-9999.ebuild
new file mode 100644
index 000000000000..5190c229f9d3
--- /dev/null
+++ b/net-wireless/gr-iqbal/gr-iqbal-9999.ebuild
@@ -0,0 +1,45 @@
+# Copyright 1999-2026 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=8
+PYTHON_COMPAT=( python3_{13..14} )
+
+inherit cmake python-single-r1
+
+DESCRIPTION="gnuradio I/Q balancing"
+HOMEPAGE="http://git.osmocom.org/gr-iqbal/"
+
+if [[ ${PV} == 9999* ]]; then
+ inherit git-r3
+ EGIT_REPO_URI="https://github.com/osmocom/gr-iqbal.git"
+else
+ SRC_URI="https://github.com/osmocom/gr-iqbal/archive/refs/tags/v${PV}.tar.gz -> "${P}.gh.tar.gz""
+ KEYWORDS="~amd64 ~arm ~riscv ~x86"
+fi
+
+LICENSE="GPL-3"
+SLOT="0/${PV}"
+IUSE="doc"
+
+REQUIRED_USE="${PYTHON_REQUIRED_USE}"
+RDEPEND=">=net-wireless/gnuradio-3.9.0.0:0=[${PYTHON_SINGLE_USEDEP}]
+ net-libs/libosmo-dsp:=
+ ${PYTHON_DEPS}"
+DEPEND="${RDEPEND}
+ dev-libs/boost"
+
+PATCHES=( "${FILESDIR}/${PN}-boost-no-system.patch" )
+
+src_configure() {
+ local mycmakeargs=(
+ -DENABLE_DOXYGEN="$(usex doc)"
+ )
+ cmake_src_configure
+}
+
+src_install() {
+ cmake_src_install
+ find "${D}" -name '__init__.py[co]' -delete || die
+ python_optimize
+ mv "${ED}/usr/share/doc/gr-iqbalance" "${ED}/usr/share/doc/${P}"
+}
diff --git a/net-wireless/gr-iqbal/metadata.xml b/net-wireless/gr-iqbal/metadata.xml
new file mode 100644
index 000000000000..42f58171ab2f
--- /dev/null
+++ b/net-wireless/gr-iqbal/metadata.xml
@@ -0,0 +1,13 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE pkgmetadata SYSTEM "https://docs.baldeagleos.com/dtd/metadata.dtd">
+<pkgmetadata>
+ <maintainer type="person">
+ <email>zerochaos@gentoo.org</email>
+ <name>Rick Farina</name>
+ </maintainer>
+ <maintainer type="project">
+ <email>radio@gentoo.org</email>
+ <name>Radio</name>
+ </maintainer>
+ <origin>baldeagleos-repo</origin>
+</pkgmetadata>
diff --git a/net-wireless/gr-osmosdr/Manifest b/net-wireless/gr-osmosdr/Manifest
new file mode 100644
index 000000000000..2ad5708427ff
--- /dev/null
+++ b/net-wireless/gr-osmosdr/Manifest
@@ -0,0 +1 @@
+DIST gr-osmosdr-0.2.6.tar.gz 268003 BLAKE2B e9826301e2836dbe937aa69bcc8078769a44889b19aa8981224ab4b0de96bd93cd3b6a0b42366b85e44854fc4300c5846cd07fdd5d9e3f7695082be3a29cb249 SHA512 2afac3503e74b67c8fb20b51dbe3c4d25f8247a9da4bfd9aec6d68412381e5e2319e8cc5b411faa9909a6c2b00c4844307c94d63e4efd613a2ddba027fd2e570
diff --git a/net-wireless/gr-osmosdr/files/gr-osmosdr-0.2.3_p20210128-fix-enable-python.patch b/net-wireless/gr-osmosdr/files/gr-osmosdr-0.2.3_p20210128-fix-enable-python.patch
new file mode 100644
index 000000000000..2bf79b1fe20e
--- /dev/null
+++ b/net-wireless/gr-osmosdr/files/gr-osmosdr-0.2.3_p20210128-fix-enable-python.patch
@@ -0,0 +1,15 @@
+diff --git a/CMakeLists.txt b/CMakeLists.txt
+index 96a2c90..a3836f8 100644
+--- a/CMakeLists.txt
++++ b/CMakeLists.txt
+@@ -187,9 +187,7 @@ find_package(Doxygen)
+
+ # Python
+ ##########
+-
+-find_package(PythonLibs 3)
+-find_package(pybind11)
++include(GrPybind)
+
+ GR_REGISTER_COMPONENT("Python support" ENABLE_PYTHON
+ PYTHONLIBS_FOUND
diff --git a/net-wireless/gr-osmosdr/files/gr-osmosdr-0.2.6-boost-1.89.patch b/net-wireless/gr-osmosdr/files/gr-osmosdr-0.2.6-boost-1.89.patch
new file mode 100644
index 000000000000..5d405651b81a
--- /dev/null
+++ b/net-wireless/gr-osmosdr/files/gr-osmosdr-0.2.6-boost-1.89.patch
@@ -0,0 +1,11 @@
+--- a/CMakeLists.txt
++++ b/CMakeLists.txt
+@@ -119,7 +119,7 @@
+ ########################################################################
+ # Find boost
+ ########################################################################
+-find_package(Boost "1.65" REQUIRED chrono thread system)
++find_package(Boost "1.69" CONFIG REQUIRED chrono thread)
+
+ if(NOT Boost_FOUND)
+ message(FATAL_ERROR "Boost required to compile osmosdr")
diff --git a/net-wireless/gr-osmosdr/gr-osmosdr-0.2.6-r1.ebuild b/net-wireless/gr-osmosdr/gr-osmosdr-0.2.6-r1.ebuild
new file mode 100644
index 000000000000..cfce9e6d325f
--- /dev/null
+++ b/net-wireless/gr-osmosdr/gr-osmosdr-0.2.6-r1.ebuild
@@ -0,0 +1,88 @@
+# Copyright 1999-2026 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=8
+
+PYTHON_COMPAT=( python3_{13..14} )
+inherit cmake python-single-r1
+
+DESCRIPTION="GNU Radio source block for OsmoSDR and rtlsdr and hackrf"
+HOMEPAGE="
+ https://sdr.osmocom.org/trac/wiki/GrOsmoSDR
+ https://gitea.osmocom.org/sdr/gr-osmosdr
+"
+
+if [[ ${PV} == *9999* ]]; then
+ inherit git-r3
+ EGIT_REPO_URI="https://gitea.osmocom.org/sdr/gr-osmosdr.git"
+else
+ SRC_URI="https://gitea.osmocom.org/sdr/gr-osmosdr/archive/v${PV}.tar.gz -> ${P}.tar.gz"
+ KEYWORDS="amd64 ~arm ~riscv ~x86"
+ S="${WORKDIR}/${PN}"
+fi
+
+LICENSE="GPL-3"
+SLOT="0/${PV}"
+IUSE="airspy bladerf doc hackrf iqbalance rtlsdr sdrplay soapy uhd xtrx"
+REQUIRED_USE="${PYTHON_REQUIRED_USE}"
+
+RDEPEND="${PYTHON_DEPS}
+ dev-libs/boost:=
+ dev-libs/log4cpp
+ net-wireless/gnuradio:0=[${PYTHON_SINGLE_USEDEP}]
+ sci-libs/volk:=
+ airspy? ( net-wireless/airspy )
+ bladerf? ( >=net-wireless/bladerf-2018.08_rc1:= )
+ hackrf? ( net-libs/libhackrf:= )
+ iqbalance? ( net-wireless/gr-iqbal:=[${PYTHON_SINGLE_USEDEP}] )
+ rtlsdr? (
+ || (
+ net-wireless/rtl-sdr
+ net-wireless/rtl-sdr-blog
+ )
+ )
+ sdrplay? ( net-wireless/sdrplay )
+ soapy? ( net-wireless/soapysdr:= )
+ uhd? ( net-wireless/uhd:=[${PYTHON_SINGLE_USEDEP}] )
+ xtrx? ( net-wireless/libxtrx )
+"
+DEPEND="${RDEPEND}"
+BDEPEND="
+ $(python_gen_cond_dep 'dev-python/pybind11[${PYTHON_USEDEP}]')
+ doc? ( app-text/doxygen )
+"
+
+PATCHES=(
+ "${FILESDIR}/${PN}-0.2.3_p20210128-fix-enable-python.patch"
+ "${FILESDIR}/${P}-boost-1.89.patch" # bug #969160
+)
+
+src_configure() {
+ local mycmakeargs=(
+ -DENABLE_DEFAULT=OFF
+ -DPYTHON_EXECUTABLE="${PYTHON}"
+ -DENABLE_FILE=ON
+ -DENABLE_AIRSPY="$(usex airspy ON OFF)"
+ -DENABLE_BLADERF="$(usex bladerf ON OFF)"
+ -DENABLE_HACKRF="$(usex hackrf ON OFF)"
+ -DENABLE_IQBALANCE="$(usex iqbalance ON OFF)"
+ -DENABLE_PYTHON=ON
+ -DENABLE_RTL="$(usex rtlsdr ON OFF)"
+ -DENABLE_RTL_TCP="$(usex rtlsdr ON OFF)"
+ -DENABLE_SDRPLAY="$(usex sdrplay ON OFF)"
+ -DENABLE_NONFREE="$(usex sdrplay ON OFF)"
+ -DENABLE_SOAPY="$(usex soapy ON OFF)"
+ -DENABLE_UHD="$(usex uhd ON OFF)"
+ -DENABLE_XTRX="$(usex xtrx ON OFF)"
+ -DENABLE_DOXYGEN="$(usex doc ON OFF)"
+ )
+
+ cmake_src_configure
+}
+
+src_install() {
+ cmake_src_install
+ find "${ED}" -name '*.py[oc]' -delete || die
+ python_fix_shebang "${ED}"/usr/bin
+ python_optimize
+}
diff --git a/net-wireless/gr-osmosdr/gr-osmosdr-0.2.6-r2.ebuild b/net-wireless/gr-osmosdr/gr-osmosdr-0.2.6-r2.ebuild
new file mode 100644
index 000000000000..6949cfbc6063
--- /dev/null
+++ b/net-wireless/gr-osmosdr/gr-osmosdr-0.2.6-r2.ebuild
@@ -0,0 +1,87 @@
+# Copyright 1999-2026 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=8
+
+PYTHON_COMPAT=( python3_{13..14} )
+inherit cmake python-single-r1
+
+DESCRIPTION="GNU Radio source block for OsmoSDR and rtlsdr and hackrf"
+HOMEPAGE="
+ https://sdr.osmocom.org/trac/wiki/GrOsmoSDR
+ https://gitea.osmocom.org/sdr/gr-osmosdr
+"
+
+if [[ ${PV} == *9999* ]]; then
+ inherit git-r3
+ EGIT_REPO_URI="https://gitea.osmocom.org/sdr/gr-osmosdr.git"
+else
+ SRC_URI="https://gitea.osmocom.org/sdr/gr-osmosdr/archive/v${PV}.tar.gz -> ${P}.tar.gz"
+ KEYWORDS="~amd64 ~arm ~riscv ~x86"
+ S="${WORKDIR}/${PN}"
+fi
+
+LICENSE="GPL-3"
+SLOT="0/${PV}"
+IUSE="airspy bladerf doc hackrf iqbalance rtlsdr sdrplay soapy uhd xtrx"
+REQUIRED_USE="${PYTHON_REQUIRED_USE}"
+
+RDEPEND="${PYTHON_DEPS}
+ dev-libs/boost:=
+ net-wireless/gnuradio:0=[${PYTHON_SINGLE_USEDEP}]
+ sci-libs/volk:=
+ airspy? ( net-wireless/airspy )
+ bladerf? ( >=net-wireless/bladerf-2018.08_rc1:= )
+ hackrf? ( net-libs/libhackrf:= )
+ iqbalance? ( net-wireless/gr-iqbal:=[${PYTHON_SINGLE_USEDEP}] )
+ rtlsdr? (
+ || (
+ net-wireless/rtl-sdr
+ net-wireless/rtl-sdr-blog
+ )
+ )
+ sdrplay? ( net-wireless/sdrplay )
+ soapy? ( net-wireless/soapysdr:= )
+ uhd? ( net-wireless/uhd:=[${PYTHON_SINGLE_USEDEP}] )
+ xtrx? ( net-wireless/libxtrx )
+"
+DEPEND="${RDEPEND}"
+BDEPEND="
+ $(python_gen_cond_dep 'dev-python/pybind11[${PYTHON_USEDEP}]')
+ doc? ( app-text/doxygen )
+"
+
+PATCHES=(
+ "${FILESDIR}/${PN}-0.2.3_p20210128-fix-enable-python.patch"
+ "${FILESDIR}/${P}-boost-1.89.patch" # bug #969160
+)
+
+src_configure() {
+ local mycmakeargs=(
+ -DENABLE_DEFAULT=OFF
+ -DPYTHON_EXECUTABLE="${PYTHON}"
+ -DENABLE_FILE=ON
+ -DENABLE_AIRSPY="$(usex airspy ON OFF)"
+ -DENABLE_BLADERF="$(usex bladerf ON OFF)"
+ -DENABLE_HACKRF="$(usex hackrf ON OFF)"
+ -DENABLE_IQBALANCE="$(usex iqbalance ON OFF)"
+ -DENABLE_PYTHON=ON
+ -DENABLE_RTL="$(usex rtlsdr ON OFF)"
+ -DENABLE_RTL_TCP="$(usex rtlsdr ON OFF)"
+ -DENABLE_SDRPLAY="$(usex sdrplay ON OFF)"
+ -DENABLE_NONFREE="$(usex sdrplay ON OFF)"
+ -DENABLE_SOAPY="$(usex soapy ON OFF)"
+ -DENABLE_UHD="$(usex uhd ON OFF)"
+ -DENABLE_XTRX="$(usex xtrx ON OFF)"
+ -DENABLE_DOXYGEN="$(usex doc ON OFF)"
+ )
+
+ cmake_src_configure
+}
+
+src_install() {
+ cmake_src_install
+ find "${ED}" -name '*.py[oc]' -delete || die
+ python_fix_shebang "${ED}"/usr/bin
+ python_optimize
+}
diff --git a/net-wireless/gr-osmosdr/gr-osmosdr-9999.ebuild b/net-wireless/gr-osmosdr/gr-osmosdr-9999.ebuild
new file mode 100644
index 000000000000..18e77eb1e0c6
--- /dev/null
+++ b/net-wireless/gr-osmosdr/gr-osmosdr-9999.ebuild
@@ -0,0 +1,87 @@
+# Copyright 1999-2026 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=8
+
+PYTHON_COMPAT=( python3_{13..14} )
+inherit cmake python-single-r1
+
+DESCRIPTION="GNU Radio source block for OsmoSDR and rtlsdr and hackrf"
+HOMEPAGE="
+ https://sdr.osmocom.org/trac/wiki/GrOsmoSDR
+ https://gitea.osmocom.org/sdr/gr-osmosdr
+"
+
+if [[ ${PV} == *9999* ]]; then
+ inherit git-r3
+ EGIT_REPO_URI="https://gitea.osmocom.org/sdr/gr-osmosdr.git"
+else
+ SRC_URI="https://gitea.osmocom.org/sdr/gr-osmosdr/archive/v${PV}.tar.gz -> ${P}.tar.gz"
+ KEYWORDS="~amd64 ~arm ~riscv ~x86"
+ S="${WORKDIR}/${PN}"
+fi
+
+LICENSE="GPL-3"
+SLOT="0/${PV}"
+IUSE="airspy bladerf doc hackrf iqbalance rtlsdr sdrplay soapy uhd xtrx"
+REQUIRED_USE="${PYTHON_REQUIRED_USE}"
+
+RDEPEND="${PYTHON_DEPS}
+ dev-libs/boost:=
+ net-wireless/gnuradio:0=[${PYTHON_SINGLE_USEDEP}]
+ sci-libs/volk:=
+ airspy? ( net-wireless/airspy )
+ bladerf? ( >=net-wireless/bladerf-2018.08_rc1:= )
+ hackrf? ( net-libs/libhackrf:= )
+ iqbalance? ( net-wireless/gr-iqbal:=[${PYTHON_SINGLE_USEDEP}] )
+ rtlsdr? (
+ || (
+ net-wireless/rtl-sdr
+ net-wireless/rtl-sdr-blog
+ )
+ )
+ sdrplay? ( net-wireless/sdrplay )
+ soapy? ( net-wireless/soapysdr:= )
+ uhd? ( net-wireless/uhd:=[${PYTHON_SINGLE_USEDEP}] )
+ xtrx? ( net-wireless/libxtrx )
+"
+DEPEND="${RDEPEND}"
+BDEPEND="
+ $(python_gen_cond_dep 'dev-python/pybind11[${PYTHON_USEDEP}]')
+ doc? ( app-text/doxygen )
+"
+
+PATCHES=(
+ "${FILESDIR}/${PN}-0.2.3_p20210128-fix-enable-python.patch"
+ "${FILESDIR}/${PN}-0.2.6-boost-1.89.patch" # bug #969160
+)
+
+src_configure() {
+ local mycmakeargs=(
+ -DENABLE_DEFAULT=OFF
+ -DPYTHON_EXECUTABLE="${PYTHON}"
+ -DENABLE_FILE=ON
+ -DENABLE_AIRSPY="$(usex airspy ON OFF)"
+ -DENABLE_BLADERF="$(usex bladerf ON OFF)"
+ -DENABLE_HACKRF="$(usex hackrf ON OFF)"
+ -DENABLE_IQBALANCE="$(usex iqbalance ON OFF)"
+ -DENABLE_PYTHON=ON
+ -DENABLE_RTL="$(usex rtlsdr ON OFF)"
+ -DENABLE_RTL_TCP="$(usex rtlsdr ON OFF)"
+ -DENABLE_SDRPLAY="$(usex sdrplay ON OFF)"
+ -DENABLE_NONFREE="$(usex sdrplay ON OFF)"
+ -DENABLE_SOAPY="$(usex soapy ON OFF)"
+ -DENABLE_UHD="$(usex uhd ON OFF)"
+ -DENABLE_XTRX="$(usex xtrx ON OFF)"
+ -DENABLE_DOXYGEN="$(usex doc ON OFF)"
+ )
+
+ cmake_src_configure
+}
+
+src_install() {
+ cmake_src_install
+ find "${ED}" -name '*.py[oc]' -delete || die
+ python_fix_shebang "${ED}"/usr/bin
+ python_optimize
+}
diff --git a/net-wireless/gr-osmosdr/metadata.xml b/net-wireless/gr-osmosdr/metadata.xml
new file mode 100644
index 000000000000..47aa25015537
--- /dev/null
+++ b/net-wireless/gr-osmosdr/metadata.xml
@@ -0,0 +1,29 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE pkgmetadata SYSTEM "https://docs.baldeagleos.com/dtd/metadata.dtd">
+<pkgmetadata>
+ <maintainer type="project">
+ <email>radio@gentoo.org</email>
+ <name>Radio</name>
+ </maintainer>
+ <use>
+ <flag name="airspy">Build with Airspy support through <pkg>net-wireless/airspy</pkg>
+ </flag>
+ <flag name="bladerf">Build with Nuand BladeRF support through <pkg>net-wireless/bladerf</pkg>
+ </flag>
+ <flag name="hackrf">Build with Great Scott Gadgets HackRF support through <pkg>net-libs/libhackrf</pkg>
+ </flag>
+ <flag name="iqbalance">Enable support for I/Q balancing using gr-iqbal through <pkg>net-wireless/gr-iqbal</pkg>
+ </flag>
+ <flag name="rtlsdr">Build with Realtek RTL2832U support through <pkg>net-wireless/rtl-sdr</pkg>
+ </flag>
+ <flag name="sdrplay">Enable support for SDRplay devices through <pkg>net-wireless/sdrplay</pkg>
+ </flag>
+ <flag name="soapy">Build with SoapySDR support through <pkg>net-wireless/soapysdr</pkg>
+ </flag>
+ <flag name="uhd">Build with Ettus Research USRP Hardware Driver support through <pkg>net-wireless/uhd</pkg>
+ </flag>
+ <flag name="xtrx">Build with xtrx Hardware Driver support through <pkg>net-wireless/libxtrx</pkg>
+ </flag>
+ </use>
+ <origin>baldeagleos-repo</origin>
+</pkgmetadata>
diff --git a/net-wireless/gr-paint/Manifest b/net-wireless/gr-paint/Manifest
new file mode 100644
index 000000000000..b3517a92f2c5
--- /dev/null
+++ b/net-wireless/gr-paint/Manifest
@@ -0,0 +1 @@
+DIST gr-paint-0.0_p20250824.tar.gz 2095255 BLAKE2B a85a5909d664f0803e640502dbe08980fb6b8252f2b1e3abe3453903f56627cc85c549899c41443d1ab32c302907ebc3389a5dd616d7a98ba42110b57968c9eb SHA512 9ac34d9a29c9032b1b490347d5fe626a77d3c746201c0a62f13cf8fbf55b0548f0796d952832d81f2a4298f8bbf9217a3c66fdeca27418771ed03efd43497bf9
diff --git a/net-wireless/gr-paint/gr-paint-0.0_p20250824-r1.ebuild b/net-wireless/gr-paint/gr-paint-0.0_p20250824-r1.ebuild
new file mode 100644
index 000000000000..8199a1d32e20
--- /dev/null
+++ b/net-wireless/gr-paint/gr-paint-0.0_p20250824-r1.ebuild
@@ -0,0 +1,63 @@
+# Copyright 1999-2026 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=8
+
+PYTHON_COMPAT=( python3_{13..14} )
+
+if [[ ${PV} == 9999* ]]; then
+ inherit git-r3
+ EGIT_REPO_URI="https://github.com/drmpeg/gr-paint.git"
+else
+ COMMIT="c443e36e8ab22ea7819db28df7b69378027dd5b5"
+ SRC_URI="https://github.com/drmpeg/gr-paint/archive/${COMMIT}.tar.gz -> ${P}.tar.gz"
+ S="${WORKDIR}/${PN}-${COMMIT}"
+ KEYWORDS="~amd64"
+fi
+inherit cmake python-single-r1
+
+DESCRIPTION="Paints monochrome images into the waterfall of a receiver"
+HOMEPAGE="https://github.com/drmpeg/gr-paint"
+
+LICENSE="GPL-3+"
+SLOT="0"
+IUSE="doc"
+
+REQUIRED_USE="${PYTHON_REQUIRED_USE}"
+#< drmpeg> What tests?
+RESTRICT="test"
+
+DEPEND="${PYTHON_DEPS}
+ $(python_gen_cond_dep '
+ dev-libs/boost:=[python,${PYTHON_USEDEP}]
+ ')
+ dev-libs/gmp
+ dev-libs/spdlog:=
+ sci-libs/volk:=
+ sci-libs/fftw
+ >=net-wireless/gnuradio-3.9:=[${PYTHON_SINGLE_USEDEP}]
+ $(python_gen_cond_dep 'dev-python/pygccxml[${PYTHON_USEDEP}]')
+"
+
+RDEPEND="${DEPEND}"
+
+BDEPEND="
+ $(python_gen_cond_dep 'dev-python/pybind11[${PYTHON_USEDEP}]')
+ virtual/pkgconfig
+ doc? ( app-text/doxygen )
+"
+
+src_configure() {
+ local mycmakeargs=(
+ -DENABLE_DOXYGEN=$(usex doc)
+ -DPYTHON_EXECUTABLE="${PYTHON}"
+ )
+ cmake_src_configure
+}
+
+src_install() {
+ cmake_src_install
+ find "${D}" -name '*.py[oc]' -delete || die
+ python_optimize
+ mv "${ED}/usr/share/doc/gr-paint" "${ED}/usr/share/doc/${PF}"
+}
diff --git a/net-wireless/gr-paint/metadata.xml b/net-wireless/gr-paint/metadata.xml
new file mode 100644
index 000000000000..42f58171ab2f
--- /dev/null
+++ b/net-wireless/gr-paint/metadata.xml
@@ -0,0 +1,13 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE pkgmetadata SYSTEM "https://docs.baldeagleos.com/dtd/metadata.dtd">
+<pkgmetadata>
+ <maintainer type="person">
+ <email>zerochaos@gentoo.org</email>
+ <name>Rick Farina</name>
+ </maintainer>
+ <maintainer type="project">
+ <email>radio@gentoo.org</email>
+ <name>Radio</name>
+ </maintainer>
+ <origin>baldeagleos-repo</origin>
+</pkgmetadata>
diff --git a/net-wireless/gr-rds/Manifest b/net-wireless/gr-rds/Manifest
new file mode 100644
index 000000000000..1d00708eec61
--- /dev/null
+++ b/net-wireless/gr-rds/Manifest
@@ -0,0 +1 @@
+DIST gr-rds-0.0_p20250404.tar.gz 278830 BLAKE2B ede49538aa3e35e1f822fe2731cd213b448cf14ca0a428b0a05c288f9efc241254a317c50610b91a27d62c07572dc46bef6fff56b45e929c31fdf2fb3faf9be3 SHA512 06106930fecea7c77a3bcaa077dca9e1158b95ae94958a984be563bbbb5e90f6f7bedbab640f576dff36247c0b5d9bed6a4536d74e73ee3ffb5a4d2b5392fe85
diff --git a/net-wireless/gr-rds/gr-rds-0.0_p20250404-r1.ebuild b/net-wireless/gr-rds/gr-rds-0.0_p20250404-r1.ebuild
new file mode 100644
index 000000000000..22ed1ae966d6
--- /dev/null
+++ b/net-wireless/gr-rds/gr-rds-0.0_p20250404-r1.ebuild
@@ -0,0 +1,47 @@
+# Copyright 1999-2026 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=8
+
+PYTHON_COMPAT=( python3_{13..14} )
+
+if [[ ${PV} == 9999* ]]; then
+ inherit git-r3
+ EGIT_REPO_URI="https://github.com/bastibl/${PN}"
+ EGIT_BRANCH="maint-3.10"
+else
+ KEYWORDS="~amd64 ~x86"
+ COMMIT="c1cba54dfac0661c088c44a120eeb38c300f6c01"
+ SRC_URI="https://github.com/bastibl/gr-rds/archive/${COMMIT}.tar.gz -> ${P}.tar.gz"
+ S="${WORKDIR}/${PN}-${COMMIT}"
+fi
+inherit cmake python-single-r1
+
+DESCRIPTION="GNU Radio FM RDS Receiver"
+HOMEPAGE="https://github.com/bastibl/gr-rds"
+
+LICENSE="GPL-3"
+SLOT="0/${PV}"
+
+REQUIRED_USE="${PYTHON_REQUIRED_USE}"
+
+RDEPEND="${PYTHON_DEPS}
+ $(python_gen_cond_dep '
+ dev-libs/boost:=[python,${PYTHON_USEDEP}]
+ ')
+ net-wireless/gnuradio:0=[${PYTHON_SINGLE_USEDEP}]
+"
+DEPEND="${RDEPEND}"
+BDEPEND="
+ dev-lang/swig:0
+"
+
+src_configure() {
+ local mycmakeargs=( -DPYTHON_EXECUTABLE="${PYTHON}" )
+ cmake_src_configure
+}
+
+src_install() {
+ cmake_src_install
+ python_optimize
+}
diff --git a/net-wireless/gr-rds/gr-rds-9999.ebuild b/net-wireless/gr-rds/gr-rds-9999.ebuild
new file mode 100644
index 000000000000..22ed1ae966d6
--- /dev/null
+++ b/net-wireless/gr-rds/gr-rds-9999.ebuild
@@ -0,0 +1,47 @@
+# Copyright 1999-2026 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=8
+
+PYTHON_COMPAT=( python3_{13..14} )
+
+if [[ ${PV} == 9999* ]]; then
+ inherit git-r3
+ EGIT_REPO_URI="https://github.com/bastibl/${PN}"
+ EGIT_BRANCH="maint-3.10"
+else
+ KEYWORDS="~amd64 ~x86"
+ COMMIT="c1cba54dfac0661c088c44a120eeb38c300f6c01"
+ SRC_URI="https://github.com/bastibl/gr-rds/archive/${COMMIT}.tar.gz -> ${P}.tar.gz"
+ S="${WORKDIR}/${PN}-${COMMIT}"
+fi
+inherit cmake python-single-r1
+
+DESCRIPTION="GNU Radio FM RDS Receiver"
+HOMEPAGE="https://github.com/bastibl/gr-rds"
+
+LICENSE="GPL-3"
+SLOT="0/${PV}"
+
+REQUIRED_USE="${PYTHON_REQUIRED_USE}"
+
+RDEPEND="${PYTHON_DEPS}
+ $(python_gen_cond_dep '
+ dev-libs/boost:=[python,${PYTHON_USEDEP}]
+ ')
+ net-wireless/gnuradio:0=[${PYTHON_SINGLE_USEDEP}]
+"
+DEPEND="${RDEPEND}"
+BDEPEND="
+ dev-lang/swig:0
+"
+
+src_configure() {
+ local mycmakeargs=( -DPYTHON_EXECUTABLE="${PYTHON}" )
+ cmake_src_configure
+}
+
+src_install() {
+ cmake_src_install
+ python_optimize
+}
diff --git a/net-wireless/gr-rds/metadata.xml b/net-wireless/gr-rds/metadata.xml
new file mode 100644
index 000000000000..484ffb011945
--- /dev/null
+++ b/net-wireless/gr-rds/metadata.xml
@@ -0,0 +1,9 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE pkgmetadata SYSTEM "https://docs.baldeagleos.com/dtd/metadata.dtd">
+<pkgmetadata>
+ <maintainer type="project">
+ <email>radio@gentoo.org</email>
+ <name>Radio</name>
+ </maintainer>
+ <origin>baldeagleos-repo</origin>
+</pkgmetadata>
diff --git a/net-wireless/gr-scopy/Manifest b/net-wireless/gr-scopy/Manifest
new file mode 100644
index 000000000000..9426081f5c6c
--- /dev/null
+++ b/net-wireless/gr-scopy/Manifest
@@ -0,0 +1 @@
+DIST gr-scopy-0.0_p20220602.tar.gz 213557 BLAKE2B 9dcd1b1beb62fa8f18c478f8990339cbe064a6c60c2e68516f49634d838f42559f2b25527fed78b124b9373be5f9c475c66a4dcc57ea30e69127e7227220742f SHA512 28983f1380943b1cc02c34fe21c7f295e5d4bbf4611fdddc313b9f63624845485a8366bcae6e215d9fe228a51f004d051895af756b157d382c6da2f51a1ca432
diff --git a/net-wireless/gr-scopy/gr-scopy-0.0_p20220602-r2.ebuild b/net-wireless/gr-scopy/gr-scopy-0.0_p20220602-r2.ebuild
new file mode 100644
index 000000000000..ecd80eefe2f5
--- /dev/null
+++ b/net-wireless/gr-scopy/gr-scopy-0.0_p20220602-r2.ebuild
@@ -0,0 +1,36 @@
+# Copyright 1999-2026 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=8
+
+PYTHON_COMPAT=( python3_{13..14} )
+
+inherit cmake python-single-r1
+
+DESCRIPTION="Scopy IIO blocks for GNU Radio"
+HOMEPAGE="https://github.com/analogdevicesinc/gr-scopy"
+if [ "${PV}" = "9999" ]; then
+ EGIT_REPO_URI="https://github.com/analogdevicesinc/gr-scopy.git"
+ EGIT_BRANCH="3.10"
+ inherit git-r3
+else
+ COMMIT="a69ccb22578621a69acc187fc0d006b5a030a744"
+ SRC_URI="https://github.com/analogdevicesinc/gr-scopy/archive/${COMMIT}.tar.gz -> ${P}.tar.gz"
+ S="${WORKDIR}/${PN}-${COMMIT}"
+ KEYWORDS="~amd64 ~x86"
+fi
+LICENSE="GPL-3+"
+SLOT="0"
+REQUIRED_USE=${PYTHON_REQUIRED_USE}
+
+RDEPEND="${PYTHON_DEPS}
+ >=net-wireless/gnuradio-3.9.0.0:=[analog]
+ sci-libs/volk:=
+ "
+DEPEND="${RDEPEND}"
+
+src_install() {
+ cmake_src_install
+ python_optimize
+ mv "${ED}/usr/share/doc/${PN}" "${ED}/usr/share/doc/${PF}"
+}
diff --git a/net-wireless/gr-scopy/gr-scopy-9999.ebuild b/net-wireless/gr-scopy/gr-scopy-9999.ebuild
new file mode 100644
index 000000000000..ecd80eefe2f5
--- /dev/null
+++ b/net-wireless/gr-scopy/gr-scopy-9999.ebuild
@@ -0,0 +1,36 @@
+# Copyright 1999-2026 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=8
+
+PYTHON_COMPAT=( python3_{13..14} )
+
+inherit cmake python-single-r1
+
+DESCRIPTION="Scopy IIO blocks for GNU Radio"
+HOMEPAGE="https://github.com/analogdevicesinc/gr-scopy"
+if [ "${PV}" = "9999" ]; then
+ EGIT_REPO_URI="https://github.com/analogdevicesinc/gr-scopy.git"
+ EGIT_BRANCH="3.10"
+ inherit git-r3
+else
+ COMMIT="a69ccb22578621a69acc187fc0d006b5a030a744"
+ SRC_URI="https://github.com/analogdevicesinc/gr-scopy/archive/${COMMIT}.tar.gz -> ${P}.tar.gz"
+ S="${WORKDIR}/${PN}-${COMMIT}"
+ KEYWORDS="~amd64 ~x86"
+fi
+LICENSE="GPL-3+"
+SLOT="0"
+REQUIRED_USE=${PYTHON_REQUIRED_USE}
+
+RDEPEND="${PYTHON_DEPS}
+ >=net-wireless/gnuradio-3.9.0.0:=[analog]
+ sci-libs/volk:=
+ "
+DEPEND="${RDEPEND}"
+
+src_install() {
+ cmake_src_install
+ python_optimize
+ mv "${ED}/usr/share/doc/${PN}" "${ED}/usr/share/doc/${PF}"
+}
diff --git a/net-wireless/gr-scopy/metadata.xml b/net-wireless/gr-scopy/metadata.xml
new file mode 100644
index 000000000000..42f58171ab2f
--- /dev/null
+++ b/net-wireless/gr-scopy/metadata.xml
@@ -0,0 +1,13 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE pkgmetadata SYSTEM "https://docs.baldeagleos.com/dtd/metadata.dtd">
+<pkgmetadata>
+ <maintainer type="person">
+ <email>zerochaos@gentoo.org</email>
+ <name>Rick Farina</name>
+ </maintainer>
+ <maintainer type="project">
+ <email>radio@gentoo.org</email>
+ <name>Radio</name>
+ </maintainer>
+ <origin>baldeagleos-repo</origin>
+</pkgmetadata>
diff --git a/net-wireless/hackrf-tools/Manifest b/net-wireless/hackrf-tools/Manifest
new file mode 100644
index 000000000000..4ee5181caff2
--- /dev/null
+++ b/net-wireless/hackrf-tools/Manifest
@@ -0,0 +1,2 @@
+DIST hackrf-2024.02.1.tar.xz 21734672 BLAKE2B 493a886719aa90e1b52229beaec45cb9db315dc91d001c275dd3989cde56fe6a312d4fca1c27b4c1366a4653880e74ab3d1e4363ee392d0f93deb631b7fddac4 SHA512 d057574f1e9b1bc2cebcd06773054b7fcba55d44e4c028f4f95e67874b71bd0a83906795a391e283c15d2b21ad7f3e8337be5aa0ee2f6a3c57632a70da10e2e4
+DIST hackrf-2026.01.3.tar.xz 25945024 BLAKE2B e861d2250c59006fa42b63666c629bca2186d79a408dd7d0615023790434c3c06611e985da5a6c4bcbb776017d46ba7b90ba1d99825caa018318e361dbb0741f SHA512 776aab11d23976ba87bf9c8af9c669b1e4967540a5b48d23d355cd0759d08b7fb36c88675082819fbca4cfd2fcdd19afbd79dea04f79128c23063334c45dd6b9
diff --git a/net-wireless/hackrf-tools/files/hackrf_easy_flash-r1 b/net-wireless/hackrf-tools/files/hackrf_easy_flash-r1
new file mode 100644
index 000000000000..deece5e31891
--- /dev/null
+++ b/net-wireless/hackrf-tools/files/hackrf_easy_flash-r1
@@ -0,0 +1,170 @@
+#!/bin/sh
+
+DFU_MODE=0
+CPLD=0
+
+get_dfu() {
+ if [ -r "/usr/share/hackrf/hackrf_one_usb.dfu" ]; then
+ ram_firmware="/usr/share/hackrf/hackrf_one_usb.dfu"
+ else
+ printf "Unable to find hackrf_one_usb.dfu in the search path\n"
+ exit 1
+ fi
+ export ram_firmware
+}
+
+get_cpld() {
+ if [ -r "/usr/share/hackrf/hackrf_cpld_default.xsvf" ]; then
+ cpld="/usr/share/hackrf/hackrf_cpld_default.xsvf"
+ else
+ printf "Unable to find default.xsvf in the search path\n"
+ exit 1
+ fi
+ export cpld
+}
+
+usage() {
+ printf "hackrf_easy_flash list\n"
+ printf "hackrf_easy_flash upgrade\n"
+}
+
+if [ -z "${1}" ]; then
+ usage
+ exit 0
+fi
+
+list_firmware() {
+ if [ ${DFU_MODE} = 1 ]; then
+ if [ -z "${ram_firmware}" ]; then
+ get_dfu
+ fi
+ printf "Best DFU found: ${ram_firmware}\n"
+ fi
+ printf "Available firmware options:\n"
+ if [ -r "/usr/share/hackrf/hackrf_one_usb.bin" ]; then
+ printf "hackrf (default)\n"
+ fi
+ if [ -r "/usr/share/hackrf/portapack-h1-firmware.bin" ]; then
+ printf "portapack (--portapack)\n"
+ fi
+ if [ -r "/usr/share/hackrf/portapack-h1-havoc.bin" ]; then
+ printf "portapack-havoc (--havoc)\n"
+ fi
+ if [ -r "/usr/share/hackrf/portapack-h1_h2-mayhem.bin" ]; then
+ printf "portapack-mayhem (--mayhem)\n"
+ fi
+}
+
+#parse args
+while [ -n "${1}" ]; do
+ case $1 in
+ -h|--help)
+ usage
+ exit 0
+ ;;
+ list|--list)
+ list_firmware
+ exit 0
+ ;;
+ update|--update|upgrade|--upgrade|hackrf|--hackrf)
+ firmware="/usr/share/hackrf/hackrf_one_usb.bin"
+ TARGET=hackrf
+ shift
+ ;;
+ portapack|--portapack)
+ firmware="/usr/share/hackrf/portapack-h1-firmware.bin"
+ TARGET=portapack
+ shift
+ ;;
+ havoc|--havoc)
+ firmware="/usr/share/hackrf/portapack-h1-havoc.bin"
+ TARGET=havoc
+ shift
+ ;;
+ mayhem|--mayhem)
+ firmware="/usr/share/hackrf/portapack-h1_h2-mayhem.bin"
+ TARGET=mayhem
+ shift
+ ;;
+ cpld|--cpld)
+ CPLD=1
+ get_cpld
+ shift
+ ;;
+ dfu|--dfu)
+ DFU_MODE=1
+ get_dfu
+ shift
+ ;;
+ --)
+ shift
+ break
+ ;;
+ *)
+ break
+ ;;
+ esac
+done
+
+if [ -z "${firmware}" ]; then
+ firmware="/usr/share/hackrf/hackrf_one_usb.bin"
+ TARGET="hackrf"
+fi
+
+if [ ! -r "${firmware}" ]; then
+ printf "Unable to find or read ${firmware}\n"
+ printf "Please ensure the requested firmware is installed and readable\n"
+ exit 1
+fi
+
+if [ "${CPLD}" = 1 ] && [ "${TARGET}" != "hackrf" ]; then
+ printf "To update the CPLD you must use the stock hackrf firmware or do this update manually\n"
+ printf "Try \"$(basename $0) --cpld && $(basename $0) ${TARGET}\"\n"
+ exit 1
+fi
+
+printf "This tool is provided by Gentoo, please report bugs on https://bugs.gentoo.org/\n\n"
+if [ ${DFU_MODE} = 1 ]; then
+ printf "Preparing to reset hackrf with DFU ${ram_firmware}\n"
+ printf "Then flashing with ${firmware}\n\n"
+ printf "Hold down the HackRF's DFU button (the button closest to the antenna jack)\n"
+ printf "then plug the HackRF into a USB port on your computer.\n"
+ printf "After the HackRF is plugged in, you may release the DFU button.\n"
+ printf "Press any key to continue or ^c to abort\n"
+ read
+ if ! dfu-util --device 1fc9:000c --download "${ram_firmware}" --reset; then
+ printf "dfu-util reported failure, quitting\n"
+ exit 1
+ fi
+ sleep 2s
+else
+ if hackrf_info | grep -q 'No HackRF boards found.'; then
+ printf "No hackrf found, please ensure you are in hackrf mode or try --dfu\n"
+ exit 1
+ fi
+fi
+if hackrf_spiflash -w "${firmware}"; then
+ sleep 3s
+ hackrf_spiflash -R
+ sleep 3s
+else
+ printf "hackrf_spiflash reported failure, quitting\n"
+ exit 1
+fi
+if [ "${CPLD}" = 1 ]; then
+ #printf "To update the cpld, please reset your hackrf into it's new firmware before updating the cpld\n"
+ #printf "Please reset your hackrf by pressing the button furthest from the antenna or power cycling it.\n"
+ #printf "Press any key to continue or ^c to abort\n"
+ #read
+ if hackrf_cpldjtag -x "${cpld}"; then
+ sleep 3s
+ hackrf_spiflash -R
+ else
+ printf "hackrf_cpldjtag reported failure\n"
+ exit 1
+ fi
+fi
+if [ "${TARGET}" = "hackrf" ]; then
+ hackrf_info
+fi
+printf "If you saw no errors, you are up to date with the requested firmware\n"
diff --git a/net-wireless/hackrf-tools/hackrf-tools-2024.02.1-r1.ebuild b/net-wireless/hackrf-tools/hackrf-tools-2024.02.1-r1.ebuild
new file mode 100644
index 000000000000..60dec329a9f3
--- /dev/null
+++ b/net-wireless/hackrf-tools/hackrf-tools-2024.02.1-r1.ebuild
@@ -0,0 +1,54 @@
+# Copyright 1999-2025 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=8
+
+inherit cmake
+
+DESCRIPTION="tools for communicating with HackRF SDR platform"
+HOMEPAGE="http://greatscottgadgets.com/hackrf/"
+
+if [[ ${PV} == "9999" ]] ; then
+ EGIT_REPO_URI="https://github.com/greatscottgadgets/hackrf.git"
+ inherit git-r3
+ EGIT_CHECKOUT_DIR="${WORKDIR}/hackrf"
+ S="${WORKDIR}/hackrf/host/hackrf-tools"
+else
+ S="${WORKDIR}/hackrf-${PV}/host/hackrf-tools"
+ SRC_URI="https://github.com/greatscottgadgets/hackrf/releases/download/v${PV}/hackrf-${PV}.tar.xz"
+ KEYWORDS="amd64 arm ppc x86"
+fi
+
+LICENSE="BSD"
+SLOT="0"
+
+DEPEND="~net-libs/libhackrf-${PV}:=
+ sci-libs/fftw:3.0="
+RDEPEND="${DEPEND}"
+
+# Fix build with cmake4 i
+# (see https://github.com/greatscottgadgets/hackrf/pull/1514)
+src_prepare() {
+ sed -i -e "s/2.8.12/3.8/" CMakeLists.txt || die
+ cmake_src_prepare
+}
+
+src_install() {
+ cmake_src_install
+ newsbin "${FILESDIR}/hackrf_easy_flash-r1" hackrf_easy_flash
+ if [[ ${PV} != "9999" ]] ; then
+ insinto /usr/share/hackrf
+ newins "${WORKDIR}/hackrf-${PV}/firmware-bin/hackrf_jawbreaker_usb.bin" hackrf_jawbreaker_usb-${PV}.bin
+ newins "${WORKDIR}/hackrf-${PV}/firmware-bin/hackrf_jawbreaker_usb.dfu" hackrf_jawbreaker_usb-${PV}.dfu
+ newins "${WORKDIR}/hackrf-${PV}/firmware-bin/hackrf_one_usb.bin" hackrf_one_usb-${PV}.bin
+ newins "${WORKDIR}/hackrf-${PV}/firmware-bin/hackrf_one_usb.dfu" hackrf_one_usb-${PV}.dfu
+ newins "${WORKDIR}/hackrf-${PV}/firmware/cpld/sgpio_if/default.xsvf" hackrf_cpld_default-${PV}.xsvf
+ ln -s hackrf_one_usb-${PV}.bin "${ED}/usr/share/hackrf/hackrf_one_usb_rom_to_ram.bin"
+ ln -s hackrf_one_usb-${PV}.bin "${ED}/usr/share/hackrf/hackrf_one_usb.bin"
+ ln -s hackrf_one_usb-${PV}.dfu "${ED}/usr/share/hackrf/hackrf_one_usb_ram.dfu"
+ ln -s hackrf_one_usb-${PV}.dfu "${ED}/usr/share/hackrf/hackrf_one_usb.dfu"
+ else
+ ewarn "The compiled firmware files are only available in the versioned releases, you are on your own for this."
+ ewarn "A hackrf-firmware ebuild is available in the pentoo overlay, if you feel adventurous."
+ fi
+}
diff --git a/net-wireless/hackrf-tools/hackrf-tools-2026.01.3.ebuild b/net-wireless/hackrf-tools/hackrf-tools-2026.01.3.ebuild
new file mode 100644
index 000000000000..6d4a46c32b67
--- /dev/null
+++ b/net-wireless/hackrf-tools/hackrf-tools-2026.01.3.ebuild
@@ -0,0 +1,47 @@
+# Copyright 1999-2026 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=8
+
+inherit cmake
+
+DESCRIPTION="tools for communicating with HackRF SDR platform"
+HOMEPAGE="http://greatscottgadgets.com/hackrf/"
+
+if [[ ${PV} == "9999" ]] ; then
+ EGIT_REPO_URI="https://github.com/greatscottgadgets/hackrf.git"
+ inherit git-r3
+ EGIT_CHECKOUT_DIR="${WORKDIR}/hackrf"
+ S="${WORKDIR}/hackrf/host/hackrf-tools"
+else
+ S="${WORKDIR}/hackrf-${PV}/host/hackrf-tools"
+ SRC_URI="https://github.com/greatscottgadgets/hackrf/releases/download/v${PV}/hackrf-${PV}.tar.xz"
+ KEYWORDS="~amd64 ~arm ~ppc ~x86"
+fi
+
+LICENSE="BSD"
+SLOT="0"
+
+DEPEND="~net-libs/libhackrf-${PV}:=
+ sci-libs/fftw:3.0="
+RDEPEND="${DEPEND}"
+
+src_install() {
+ cmake_src_install
+ newsbin "${FILESDIR}/hackrf_easy_flash-r1" hackrf_easy_flash
+ if [[ ${PV} != "9999" ]] ; then
+ insinto /usr/share/hackrf
+ newins "${WORKDIR}/hackrf-${PV}/firmware-bin/hackrf_jawbreaker_usb.bin" hackrf_jawbreaker_usb-${PV}.bin
+ newins "${WORKDIR}/hackrf-${PV}/firmware-bin/hackrf_jawbreaker_usb.dfu" hackrf_jawbreaker_usb-${PV}.dfu
+ newins "${WORKDIR}/hackrf-${PV}/firmware-bin/hackrf_one_usb.bin" hackrf_one_usb-${PV}.bin
+ newins "${WORKDIR}/hackrf-${PV}/firmware-bin/hackrf_one_usb.dfu" hackrf_one_usb-${PV}.dfu
+ newins "${WORKDIR}/hackrf-${PV}/firmware/cpld/sgpio_if/default.xsvf" hackrf_cpld_default-${PV}.xsvf
+ ln -s hackrf_one_usb-${PV}.bin "${ED}/usr/share/hackrf/hackrf_one_usb_rom_to_ram.bin"
+ ln -s hackrf_one_usb-${PV}.bin "${ED}/usr/share/hackrf/hackrf_one_usb.bin"
+ ln -s hackrf_one_usb-${PV}.dfu "${ED}/usr/share/hackrf/hackrf_one_usb_ram.dfu"
+ ln -s hackrf_one_usb-${PV}.dfu "${ED}/usr/share/hackrf/hackrf_one_usb.dfu"
+ else
+ ewarn "The compiled firmware files are only available in the versioned releases, you are on your own for this."
+ ewarn "A hackrf-firmware ebuild is available in the pentoo overlay, if you feel adventurous."
+ fi
+}
diff --git a/net-wireless/hackrf-tools/hackrf-tools-9999.ebuild b/net-wireless/hackrf-tools/hackrf-tools-9999.ebuild
new file mode 100644
index 000000000000..6d4a46c32b67
--- /dev/null
+++ b/net-wireless/hackrf-tools/hackrf-tools-9999.ebuild
@@ -0,0 +1,47 @@
+# Copyright 1999-2026 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=8
+
+inherit cmake
+
+DESCRIPTION="tools for communicating with HackRF SDR platform"
+HOMEPAGE="http://greatscottgadgets.com/hackrf/"
+
+if [[ ${PV} == "9999" ]] ; then
+ EGIT_REPO_URI="https://github.com/greatscottgadgets/hackrf.git"
+ inherit git-r3
+ EGIT_CHECKOUT_DIR="${WORKDIR}/hackrf"
+ S="${WORKDIR}/hackrf/host/hackrf-tools"
+else
+ S="${WORKDIR}/hackrf-${PV}/host/hackrf-tools"
+ SRC_URI="https://github.com/greatscottgadgets/hackrf/releases/download/v${PV}/hackrf-${PV}.tar.xz"
+ KEYWORDS="~amd64 ~arm ~ppc ~x86"
+fi
+
+LICENSE="BSD"
+SLOT="0"
+
+DEPEND="~net-libs/libhackrf-${PV}:=
+ sci-libs/fftw:3.0="
+RDEPEND="${DEPEND}"
+
+src_install() {
+ cmake_src_install
+ newsbin "${FILESDIR}/hackrf_easy_flash-r1" hackrf_easy_flash
+ if [[ ${PV} != "9999" ]] ; then
+ insinto /usr/share/hackrf
+ newins "${WORKDIR}/hackrf-${PV}/firmware-bin/hackrf_jawbreaker_usb.bin" hackrf_jawbreaker_usb-${PV}.bin
+ newins "${WORKDIR}/hackrf-${PV}/firmware-bin/hackrf_jawbreaker_usb.dfu" hackrf_jawbreaker_usb-${PV}.dfu
+ newins "${WORKDIR}/hackrf-${PV}/firmware-bin/hackrf_one_usb.bin" hackrf_one_usb-${PV}.bin
+ newins "${WORKDIR}/hackrf-${PV}/firmware-bin/hackrf_one_usb.dfu" hackrf_one_usb-${PV}.dfu
+ newins "${WORKDIR}/hackrf-${PV}/firmware/cpld/sgpio_if/default.xsvf" hackrf_cpld_default-${PV}.xsvf
+ ln -s hackrf_one_usb-${PV}.bin "${ED}/usr/share/hackrf/hackrf_one_usb_rom_to_ram.bin"
+ ln -s hackrf_one_usb-${PV}.bin "${ED}/usr/share/hackrf/hackrf_one_usb.bin"
+ ln -s hackrf_one_usb-${PV}.dfu "${ED}/usr/share/hackrf/hackrf_one_usb_ram.dfu"
+ ln -s hackrf_one_usb-${PV}.dfu "${ED}/usr/share/hackrf/hackrf_one_usb.dfu"
+ else
+ ewarn "The compiled firmware files are only available in the versioned releases, you are on your own for this."
+ ewarn "A hackrf-firmware ebuild is available in the pentoo overlay, if you feel adventurous."
+ fi
+}
diff --git a/net-wireless/hackrf-tools/metadata.xml b/net-wireless/hackrf-tools/metadata.xml
new file mode 100644
index 000000000000..42f58171ab2f
--- /dev/null
+++ b/net-wireless/hackrf-tools/metadata.xml
@@ -0,0 +1,13 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE pkgmetadata SYSTEM "https://docs.baldeagleos.com/dtd/metadata.dtd">
+<pkgmetadata>
+ <maintainer type="person">
+ <email>zerochaos@gentoo.org</email>
+ <name>Rick Farina</name>
+ </maintainer>
+ <maintainer type="project">
+ <email>radio@gentoo.org</email>
+ <name>Radio</name>
+ </maintainer>
+ <origin>baldeagleos-repo</origin>
+</pkgmetadata>
diff --git a/net-wireless/hidclient/Manifest b/net-wireless/hidclient/Manifest
new file mode 100644
index 000000000000..0d428a181b8d
--- /dev/null
+++ b/net-wireless/hidclient/Manifest
@@ -0,0 +1 @@
+DIST hidclient-20120728.tar.bz2 12563 BLAKE2B 7192a92c8673d533d35110b893c784272ef15530763815311cfe81b0e22b81fd6211aab6ee40b948f187c7e4d3884663750f3a11c07e60ab474ad900ff1508fe SHA512 c928d5844c7ed0cb20421c9241a938d39bb7d65accf9493817c6d9e1de9049a5e8256838b086ff6a44023259656c0c985c2155ed125838c6a2d73439c21884d4
diff --git a/net-wireless/hidclient/files/README b/net-wireless/hidclient/files/README
new file mode 100644
index 000000000000..20497fa7dc44
--- /dev/null
+++ b/net-wireless/hidclient/files/README
@@ -0,0 +1,16 @@
+Maintainer note: I copied this from the homepage for reference
+
+Command-line parameter "-l" to list input devices
+-e<NUM> to ONLY bind to device Number NUM (see -l List)
+-x will "mute" the device(s) for X11 so you can start hidclient while having a X11 session.
+-fFIFONAME will read data from a FIFO instead of event devices.
+
+You don't need to copy anything into /etc/bluetooth. Might be a good idea to edit /etc/bluetooth/main.conf and set "DisabledPlugins=input" there, and "Class=0x000540" - that helps
+identifying the device as a "keyboard". Now run
+sudo hidclient -l
+to list the available input devices. If you have for example two usb mice and want to export only one (while working locally on the other), select the ID number from the first column. Start
+hidclient with
+sudo hidclient -e4 -x
+where 4 is the number of your mouse. Hidclient will wait for bluetooth connections. The mouse should stop working on the local PC, so it will not interfere with your normal computer usage
+while it is connected to another device.
+With the -x parameter, you can ignore the "openvt" mentioned above.
diff --git a/net-wireless/hidclient/files/hidclient-20120728-glibc-2.30.patch b/net-wireless/hidclient/files/hidclient-20120728-glibc-2.30.patch
new file mode 100644
index 000000000000..7e8376faaed1
--- /dev/null
+++ b/net-wireless/hidclient/files/hidclient-20120728-glibc-2.30.patch
@@ -0,0 +1,13 @@
+https://bugs.gentoo.org/692250
+
+--- a/hidclient.c
++++ b/hidclient.c
+@@ -102,7 +102,7 @@
+ #include <stdlib.h>
+ #include <string.h>
+ #include <unistd.h>
+-#include <stropts.h>
++//#include <stropts.h>
+ #include <sys/stat.h>
+ #include <sys/time.h>
+ #include <sys/types.h>
diff --git a/net-wireless/hidclient/hidclient-20120728.ebuild b/net-wireless/hidclient/hidclient-20120728.ebuild
new file mode 100644
index 000000000000..77d1882e7720
--- /dev/null
+++ b/net-wireless/hidclient/hidclient-20120728.ebuild
@@ -0,0 +1,35 @@
+# Copyright 1999-2020 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=7
+
+DESCRIPTION="Use your machine as a bluetooh keyboard/mouse"
+HOMEPAGE="http://anselm.hoffmeister.be/computer/hidclient/"
+SRC_URI="http://anselm.hoffmeister.be/computer/${PN}/${P}.tar.bz2"
+
+LICENSE="GPL-2+"
+SLOT="0"
+KEYWORDS="~amd64 ~x86"
+IUSE=""
+
+DEPEND="net-wireless/bluez"
+RDEPEND="${DEPEND}
+ x11-apps/xinput"
+
+S="${WORKDIR}"
+
+src_prepare() {
+ eapply_user
+ eapply "${FILESDIR}"/${P}-glibc-2.30.patch
+ sed -i 's#gcc#$(CC)#' Makefile
+ sed -i 's#-O2#$(CFLAGS) $(LDFLAGS)#' Makefile
+}
+
+src_compile() {
+ emake hidclient
+}
+
+src_install() {
+ dosbin hidclient
+ dodoc "${FILESDIR}"/README
+}
diff --git a/net-wireless/hidclient/metadata.xml b/net-wireless/hidclient/metadata.xml
new file mode 100644
index 000000000000..22d29be8fc24
--- /dev/null
+++ b/net-wireless/hidclient/metadata.xml
@@ -0,0 +1,9 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE pkgmetadata SYSTEM "https://docs.baldeagleos.com/dtd/metadata.dtd">
+<pkgmetadata>
+ <maintainer type="person">
+ <email>zerochaos@gentoo.org</email>
+ <name>Rick Farina</name>
+ </maintainer>
+ <origin>baldeagleos-repo</origin>
+</pkgmetadata>
diff --git a/net-wireless/horst/Manifest b/net-wireless/horst/Manifest
new file mode 100644
index 000000000000..ca861a95a40a
--- /dev/null
+++ b/net-wireless/horst/Manifest
@@ -0,0 +1 @@
+DIST horst-5.1.tar.gz 117392 BLAKE2B 4e21a1cb4d508c8ed6e63fe975a30299452c706aec1a83125acabc547ab8718bbae66d546d973bc10af1f0b6c885a20193c584312c30f5ecaef9d86156c0b12b SHA512 d2889a8c42c31bea72d4e0efd7141ca56c96953b37d2476793ef52d019720059eb57e48b72fa5d720e0c5518a9b0b8dee1a105828d581655c0fbf4dfb29698c4
diff --git a/net-wireless/horst/files/horst-5.1-CC.patch b/net-wireless/horst/files/horst-5.1-CC.patch
new file mode 100644
index 000000000000..f9c2e5120ac8
--- /dev/null
+++ b/net-wireless/horst/files/horst-5.1-CC.patch
@@ -0,0 +1,14 @@
+--- a/Makefile
++++ b/Makefile
+@@ -99,9 +99,9 @@
+ all: $(NAME)
+
+ .objdeps.mk: $(OBJS:%.o=%.c)
+- gcc -MM -I. $^ >$@
++ $(CC) -MM -I. $^ >$@
+ ifeq ($(OSX),1)
+- gcc -MM -I. ifctrl-osx.m >>$@
++ $(CC) -MM -I. ifctrl-osx.m >>$@
+ endif
+
+ -include .objdeps.mk
diff --git a/net-wireless/horst/files/horst-5.1-pcap_bufsize.patch b/net-wireless/horst/files/horst-5.1-pcap_bufsize.patch
new file mode 100644
index 000000000000..35f3f59dd98a
--- /dev/null
+++ b/net-wireless/horst/files/horst-5.1-pcap_bufsize.patch
@@ -0,0 +1,32 @@
+--- a/capture-pcap.c
++++ b/capture-pcap.c
+@@ -32,16 +32,16 @@
+ #define PCAP_TIMEOUT 200
+
+ static unsigned char* pcap_buffer;
+-static size_t pcap_bufsize;
++static size_t horst_pcap_bufsize;
+ static pcap_t *pcap_fp = NULL;
+
+ static void handler(u_char *user, const struct pcap_pkthdr *h, const u_char *bytes)
+ {
+ *((int *)user) = h->len;
+- if (pcap_bufsize < h->len) {
++ if (horst_pcap_bufsize < h->len) {
+ printlog("ERROR: Buffer(%d) too small for %d bytes",
+- (int)pcap_bufsize, h->len);
+- *((int *)user) = pcap_bufsize;
++ (int)horst_pcap_bufsize, h->len);
++ *((int *)user) = horst_pcap_bufsize;
+ }
+ memmove(pcap_buffer, bytes, *((int *)user));
+ }
+@@ -98,7 +98,7 @@
+ {
+ int ret = 0;
+ pcap_buffer = buffer;
+- pcap_bufsize = bufsize;
++ horst_pcap_bufsize = bufsize;
+ if (0 == pcap_dispatch(pcap_fp, 1, handler, (u_char *)&ret))
+ return -1;
+ return ret;
diff --git a/net-wireless/horst/files/horst-5.1-tinfo.patch b/net-wireless/horst/files/horst-5.1-tinfo.patch
new file mode 100644
index 000000000000..059158e58cfc
--- /dev/null
+++ b/net-wireless/horst/files/horst-5.1-tinfo.patch
@@ -0,0 +1,11 @@
+--- a/Makefile
++++ b/Makefile
+@@ -54,7 +54,7 @@
+ radiotap/radiotap.o \
+ util.o \
+ wlan_util.o
+-LIBS=-lncurses -lm
++LIBS=$(shell $(PKG_CONFIG) --libs ncurses ) -lm
+ CFLAGS+=-std=gnu99 -Wall -Wextra -g -I. -DVERSION=\"$(VERSION)\"
+
+ ifeq ($(OSX),1)
diff --git a/net-wireless/horst/files/horst-9999-tinfo.patch b/net-wireless/horst/files/horst-9999-tinfo.patch
new file mode 100644
index 000000000000..eb623d67b133
--- /dev/null
+++ b/net-wireless/horst/files/horst-9999-tinfo.patch
@@ -0,0 +1,11 @@
+--- a/Makefile
++++ b/Makefile
+@@ -41,7 +41,7 @@
+ SRC += network.c
+ SRC += protocol_parser.c
+
+-LIBS = -lncurses -lm -luwifi
++LIBS = $(shell $(PKG_CONFIG) --libs ncurses ) -lm -luwifi
+ LDFLAGS += -Wl,-rpath,/usr/local/lib
+
+ INCLUDES = -I.
diff --git a/net-wireless/horst/horst-5.1.ebuild b/net-wireless/horst/horst-5.1.ebuild
new file mode 100644
index 000000000000..3776eec855a7
--- /dev/null
+++ b/net-wireless/horst/horst-5.1.ebuild
@@ -0,0 +1,45 @@
+# Copyright 1999-2023 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=8
+
+inherit toolchain-funcs
+
+DESCRIPTION="Small 802.11 wireless LAN analyzer"
+HOMEPAGE="https://github.com/br101/horst/"
+SRC_URI="https://github.com/br101/${PN}/archive/v${PV}.tar.gz -> ${P}.tar.gz"
+
+LICENSE="GPL-2+"
+SLOT="0"
+KEYWORDS="~amd64 ~x86"
+IUSE="debug +pcap test"
+
+RDEPEND="
+ dev-libs/libnl:3
+ sys-libs/ncurses:0
+ pcap? ( net-libs/libpcap )
+"
+DEPEND="${RDEPEND}"
+BEDEPEND="
+ virtual/pkgconfig
+ test? ( sys-devel/sparse )
+"
+
+RESTRICT="test" #just semantic tests, no functional tests
+
+PATCHES=(
+ "${FILESDIR}"/${PN}-5.1-CC.patch
+ "${FILESDIR}"/${PN}-5.1-pcap_bufsize.patch
+ "${FILESDIR}"/${PN}-5.1-tinfo.patch
+)
+
+src_compile() {
+ tc-export CC PKG_CONFIG
+ emake PCAP=$(usex pcap 1 0) DEBUG=$(usex debug 1 0)
+}
+
+src_install() {
+ dosbin ${PN}{,.sh}
+ dodoc README.md
+ doman ${PN}.8
+}
diff --git a/net-wireless/horst/horst-9999.ebuild b/net-wireless/horst/horst-9999.ebuild
new file mode 100644
index 000000000000..d0a33a2fedb9
--- /dev/null
+++ b/net-wireless/horst/horst-9999.ebuild
@@ -0,0 +1,44 @@
+# Copyright 1999-2023 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=8
+
+inherit git-r3 toolchain-funcs
+
+DESCRIPTION="Small 802.11 wireless LAN analyzer"
+HOMEPAGE="https://github.com/br101/horst/"
+EGIT_REPO_URI="https://github.com/br101/${PN}/"
+
+LICENSE="GPL-2+"
+SLOT="0"
+IUSE="debug +pcap test"
+
+RDEPEND="
+ dev-libs/libnl:3
+ sys-libs/ncurses:0
+ pcap? ( net-libs/libpcap )
+"
+DEPEND="${RDEPEND}"
+BEDEPEND="
+ virtual/pkgconfig
+ test? ( sys-devel/sparse )
+"
+
+RESTRICT=test #just semantic tests, no functional tests
+
+PATCHES=(
+ "${FILESDIR}"/${PN}-9999-tinfo.patch
+)
+
+src_compile() {
+ tc-export CC PKG_CONFIG
+ emake PCAP=$(usex pcap 1 0) DEBUG=$(usex debug 1 0)
+}
+
+src_install() {
+ dosbin ${PN}{,.sh}
+ dodoc README.md
+ doman ${PN}.8
+ insinto /etc
+ doins ${PN}.conf
+}
diff --git a/net-wireless/horst/metadata.xml b/net-wireless/horst/metadata.xml
new file mode 100644
index 000000000000..7ffb619f1177
--- /dev/null
+++ b/net-wireless/horst/metadata.xml
@@ -0,0 +1,12 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE pkgmetadata SYSTEM "https://docs.baldeagleos.com/dtd/metadata.dtd">
+<pkgmetadata>
+ <maintainer type="project">
+ <email>netmon@gentoo.org</email>
+ </maintainer>
+ <use>
+ <flag name="pcap">Add support for network packet capture via <pkg>net-libs/libpcap</pkg>
+ </flag>
+ </use>
+ <origin>baldeagleos-repo</origin>
+</pkgmetadata>
diff --git a/net-wireless/hostap-utils/Manifest b/net-wireless/hostap-utils/Manifest
new file mode 100644
index 000000000000..0b1ebb36dce3
--- /dev/null
+++ b/net-wireless/hostap-utils/Manifest
@@ -0,0 +1 @@
+DIST hostap-utils-0.4.7.tar.gz 60782 BLAKE2B 6e56488df1bde9de13724df39606a8eb125a67d9f1b14e80fd58cc8ff5c5fd703713e565db49d82d00acacc0275c9ca38d38d81a026ccc30d27db82bf3d351a8 SHA512 1a54c5d84b02d2dc96c33d6463af775212e09a20ac85367184636d364f17a09e48f937417dd9c43148663d242b3fc5f2f13835ec5331bd0600ef31797c414d44
diff --git a/net-wireless/hostap-utils/files/hostap-utils-0.4.7-makefile.patch b/net-wireless/hostap-utils/files/hostap-utils-0.4.7-makefile.patch
new file mode 100644
index 000000000000..e6838ba27c2f
--- /dev/null
+++ b/net-wireless/hostap-utils/files/hostap-utils-0.4.7-makefile.patch
@@ -0,0 +1,31 @@
+--- a/Makefile 2012-11-20 12:16:39.747881769 +0400
++++ b/Makefile 2012-11-20 12:17:39.248881307 +0400
+@@ -1,7 +1,3 @@
+-ifndef CFLAGS
+-CFLAGS = -O2 -Wall
+-endif
+-
+ # Include directory for CVS version
+ CFLAGS += -I../driver/modules
+
+@@ -14,17 +10,17 @@
+ hostap_crypt_conf: hostap_crypt_conf.c
+
+ hostap_diag: hostap_diag.o util.o
+- $(CC) -o hostap_diag $(CFLAGS) hostap_diag.o util.o
++ $(CC) -o hostap_diag $(CFLAGS) $(LDFLAGS) hostap_diag.o util.o
+
+ hostap_diag.o: hostap_diag.c util.h
+
+ util.o: util.c util.h
+
+ hostap_io_debug: hostap_io_debug.c
+- $(CC) -o hostap_io_debug $(CFLAGS) hostap_io_debug.c
++ $(CC) -o hostap_io_debug $(CFLAGS) $(LDFLAGS) hostap_io_debug.c
+
+ hostap_rid: hostap_rid.o util.o
+- $(CC) -o hostap_rid $(CFLAGS) hostap_rid.o util.o
++ $(CC) -o hostap_rid $(CFLAGS) $(LDFLAGS) hostap_rid.o util.o
+
+ hostap_rid.o: hostap_rid.c util.h
+
diff --git a/net-wireless/hostap-utils/hostap-utils-0.4.7-r1.ebuild b/net-wireless/hostap-utils/hostap-utils-0.4.7-r1.ebuild
new file mode 100644
index 000000000000..d19fb6ee3ac5
--- /dev/null
+++ b/net-wireless/hostap-utils/hostap-utils-0.4.7-r1.ebuild
@@ -0,0 +1,28 @@
+# Copyright 1999-2020 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=7
+
+inherit toolchain-funcs
+
+DESCRIPTION="Utilities for Intersil Prism2/2.5/3 based IEEE 802.11b wireless LAN products"
+HOMEPAGE="https://hostap.epitest.fi/"
+SRC_URI="https://hostap.epitest.fi/releases/${P}.tar.gz"
+
+LICENSE="GPL-2"
+SLOT="0"
+KEYWORDS="amd64 ppc x86"
+
+PATCHES=( "${FILESDIR}/${P}-makefile.patch" )
+
+src_compile() {
+ emake CC="$(tc-getCC)"
+}
+
+src_install() {
+ dosbin hostap_{crypt_conf,diag,fw_load,io_debug,rid}
+ dosbin prism2_{param,srec}
+ dosbin split_combined_hex
+
+ dodoc README
+}
diff --git a/net-wireless/hostap-utils/metadata.xml b/net-wireless/hostap-utils/metadata.xml
new file mode 100644
index 000000000000..5f33304011d5
--- /dev/null
+++ b/net-wireless/hostap-utils/metadata.xml
@@ -0,0 +1,5 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE pkgmetadata SYSTEM "https://docs.baldeagleos.com/dtd/metadata.dtd">
+<pkgmetadata>
+ <origin>baldeagleos-repo</origin>
+</pkgmetadata>
diff --git a/net-wireless/inspectrum/Manifest b/net-wireless/inspectrum/Manifest
new file mode 100644
index 000000000000..776dc57b9a3f
--- /dev/null
+++ b/net-wireless/inspectrum/Manifest
@@ -0,0 +1 @@
+DIST inspectrum-0.4.0.tar.gz 112782 BLAKE2B d3f44a06f596c8b6df098f42fc91f20068cac3d1349cdc80c6326a2d19335c85eb2de3c97d0aba89cd4bfc8f96943a894eafe549ca7e6a682333a653f51b65a4 SHA512 fba27cd3ae655739fecfc3e10983e012173e781e1fe4d57644dafd3f298116e96a0a13a72cf857e3b6ded400d58e986436ebfe7b6aff45a28c89a00ad6f5ae66
diff --git a/net-wireless/inspectrum/inspectrum-0.4.0.ebuild b/net-wireless/inspectrum/inspectrum-0.4.0.ebuild
new file mode 100644
index 000000000000..88a03351d932
--- /dev/null
+++ b/net-wireless/inspectrum/inspectrum-0.4.0.ebuild
@@ -0,0 +1,32 @@
+# Copyright 1999-2025 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=8
+
+inherit cmake
+
+DESCRIPTION="Tool for analysing captured signals from software-defined radio receivers"
+HOMEPAGE="https://github.com/miek/inspectrum"
+
+if [[ ${PV} == *9999* ]] ; then
+ EGIT_REPO_URI="https://github.com/miek/inspectrum.git"
+ inherit git-r3
+else
+ SRC_URI="https://github.com/miek/${PN}/archive/v${PV}.tar.gz -> ${P}.tar.gz"
+ KEYWORDS="~amd64 ~x86"
+fi
+
+LICENSE="GPL-3+"
+SLOT="0"
+
+RDEPEND="
+ dev-qt/qtbase:6[concurrent,gui,widgets]
+ net-libs/liquid-dsp
+ sci-libs/fftw:3.0="
+DEPEND="${RDEPEND}"
+BDEPEND="virtual/pkgconfig"
+
+src_prepare() {
+ sed -i -e "s/3.5/3.10/" CMakeLists.txt || die
+ cmake_src_prepare
+}
diff --git a/net-wireless/inspectrum/inspectrum-9999.ebuild b/net-wireless/inspectrum/inspectrum-9999.ebuild
new file mode 100644
index 000000000000..88a03351d932
--- /dev/null
+++ b/net-wireless/inspectrum/inspectrum-9999.ebuild
@@ -0,0 +1,32 @@
+# Copyright 1999-2025 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=8
+
+inherit cmake
+
+DESCRIPTION="Tool for analysing captured signals from software-defined radio receivers"
+HOMEPAGE="https://github.com/miek/inspectrum"
+
+if [[ ${PV} == *9999* ]] ; then
+ EGIT_REPO_URI="https://github.com/miek/inspectrum.git"
+ inherit git-r3
+else
+ SRC_URI="https://github.com/miek/${PN}/archive/v${PV}.tar.gz -> ${P}.tar.gz"
+ KEYWORDS="~amd64 ~x86"
+fi
+
+LICENSE="GPL-3+"
+SLOT="0"
+
+RDEPEND="
+ dev-qt/qtbase:6[concurrent,gui,widgets]
+ net-libs/liquid-dsp
+ sci-libs/fftw:3.0="
+DEPEND="${RDEPEND}"
+BDEPEND="virtual/pkgconfig"
+
+src_prepare() {
+ sed -i -e "s/3.5/3.10/" CMakeLists.txt || die
+ cmake_src_prepare
+}
diff --git a/net-wireless/inspectrum/metadata.xml b/net-wireless/inspectrum/metadata.xml
new file mode 100644
index 000000000000..42f58171ab2f
--- /dev/null
+++ b/net-wireless/inspectrum/metadata.xml
@@ -0,0 +1,13 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE pkgmetadata SYSTEM "https://docs.baldeagleos.com/dtd/metadata.dtd">
+<pkgmetadata>
+ <maintainer type="person">
+ <email>zerochaos@gentoo.org</email>
+ <name>Rick Farina</name>
+ </maintainer>
+ <maintainer type="project">
+ <email>radio@gentoo.org</email>
+ <name>Radio</name>
+ </maintainer>
+ <origin>baldeagleos-repo</origin>
+</pkgmetadata>
diff --git a/net-wireless/iw/Manifest b/net-wireless/iw/Manifest
new file mode 100644
index 000000000000..2113e4f820b1
--- /dev/null
+++ b/net-wireless/iw/Manifest
@@ -0,0 +1,2 @@
+DIST iw-6.17.tar.xz 163756 BLAKE2B b19a584de98701b0da12df0d6000f995b19616d2afc031d200d7a3204029026b5e623bd63f4761c24c55d9144bde2c3684c96d5a71fb8e477f61897857f20594 SHA512 4c0d80d54e69dddc4c70469fad6a647199f98223835dd36dc174b82e425492779330a0fa3d7287190ccf02c597cb78c4bfa97b7c1f1e0a27335edb56c9f831d1
+DIST iw-6.9.tar.xz 159480 BLAKE2B 90fca854795fb7e32675d14158250c0b0b06b0d757f375636bcf538fc5f9a658eab8ee39331465b93545e0b0b49ad29f92f5119a6f4e187fb84eca9c9e5151c2 SHA512 cbafa54cffa6098a727edd8fb90382ab9f08d2db999811e543bcdaf8de41386c87a34504cf8965340839445929879a608faf51314b7335783beab403cf3f9cbc
diff --git a/net-wireless/iw/iw-6.17.ebuild b/net-wireless/iw/iw-6.17.ebuild
new file mode 100644
index 000000000000..356c6591b816
--- /dev/null
+++ b/net-wireless/iw/iw-6.17.ebuild
@@ -0,0 +1,40 @@
+# Copyright 1999-2026 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=8
+
+inherit toolchain-funcs
+
+DESCRIPTION="nl80211 configuration utility for wireless devices using the mac80211 stack"
+HOMEPAGE="https://wireless.docs.kernel.org/en/latest/en/users/documentation/iw.html"
+SRC_URI="https://mirrors.edge.kernel.org/pub/software/network/${PN}/${P}.tar.xz"
+
+LICENSE="ISC"
+SLOT="0"
+KEYWORDS="amd64 arm arm64 ~loong ppc ppc64 ~riscv x86"
+
+DEPEND="dev-libs/libnl:="
+RDEPEND="
+ ${DEPEND}
+ net-wireless/wireless-regdb
+"
+BDEPEND="virtual/pkgconfig"
+
+src_prepare() {
+ default
+ tc-export CC LD PKG_CONFIG
+
+ # do not compress man pages by default.
+ sed 's@\(iw\.8\)\.gz@\1@' -i Makefile || die
+}
+
+src_compile() {
+ # Set flags prior so they are honored
+ CFLAGS="${CFLAGS:+${CFLAGS} }${CPPFLAGS}"
+ LDFLAGS="${CFLAGS:+${CFLAGS} }${LDFLAGS}"
+ emake V=1
+}
+
+src_install() {
+ emake V=1 DESTDIR="${D}" PREFIX="${EPREFIX}/usr" install
+}
diff --git a/net-wireless/iw/iw-6.9.ebuild b/net-wireless/iw/iw-6.9.ebuild
new file mode 100644
index 000000000000..2eda9b8aba82
--- /dev/null
+++ b/net-wireless/iw/iw-6.9.ebuild
@@ -0,0 +1,40 @@
+# Copyright 1999-2025 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=8
+
+inherit toolchain-funcs
+
+DESCRIPTION="nl80211 configuration utility for wireless devices using the mac80211 stack"
+HOMEPAGE="https://wireless.docs.kernel.org/en/latest/en/users/documentation/iw.html"
+SRC_URI="https://mirrors.edge.kernel.org/pub/software/network/${PN}/${P}.tar.xz"
+
+LICENSE="ISC"
+SLOT="0"
+KEYWORDS="amd64 arm arm64 ~loong ppc ppc64 ~riscv x86"
+
+DEPEND="dev-libs/libnl:="
+RDEPEND="
+ ${DEPEND}
+ net-wireless/wireless-regdb
+"
+BDEPEND="virtual/pkgconfig"
+
+src_prepare() {
+ default
+ tc-export CC LD PKG_CONFIG
+
+ # do not compress man pages by default.
+ sed 's@\(iw\.8\)\.gz@\1@' -i Makefile || die
+}
+
+src_compile() {
+ # Set flags prior so they are honored
+ CFLAGS="${CFLAGS:+${CFLAGS} }${CPPFLAGS}"
+ LDFLAGS="${CFLAGS:+${CFLAGS} }${LDFLAGS}"
+ emake V=1
+}
+
+src_install() {
+ emake V=1 DESTDIR="${D}" PREFIX="${EPREFIX}/usr" install
+}
diff --git a/net-wireless/iw/metadata.xml b/net-wireless/iw/metadata.xml
new file mode 100644
index 000000000000..f753598bfe39
--- /dev/null
+++ b/net-wireless/iw/metadata.xml
@@ -0,0 +1,12 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE pkgmetadata SYSTEM "https://docs.baldeagleos.com/dtd/metadata.dtd">
+<pkgmetadata>
+ <maintainer type="person">
+ <email>zerochaos@gentoo.org</email>
+ <name>Rick Farina</name>
+ </maintainer>
+ <upstream>
+ <remote-id type="cpe">cpe:/a:kernel:iw</remote-id>
+ </upstream>
+ <origin>baldeagleos-repo</origin>
+</pkgmetadata>
diff --git a/net-wireless/iwd/Manifest b/net-wireless/iwd/Manifest
new file mode 100644
index 000000000000..3551d481199c
--- /dev/null
+++ b/net-wireless/iwd/Manifest
@@ -0,0 +1,5 @@
+DIST iwd-3.10.tar.xz 1118328 BLAKE2B 6e497eb3ce6db793310b7cd0a0127b2d3d73a22ae1865b4a247f3e88b6aa9343fb01a215e7bce23eab628c9e92e3e3d683dd562aaef63c2dfdaefdc65d3b7bcf SHA512 0a0d422e6537bc6834517ba18bfcba8b51b2f254699f13c2bcf13d77f88106d552bf8a22fb697fb0809fed05470f48cf4fb4ac122c098009ba049a16ef3894fc
+DIST iwd-3.11.tar.xz 1125060 BLAKE2B 5835c0b574fff71baee6c3645968c8d43fefc686ff58b628ef63af0f51cba148b22d04497ae288cfa96c0b56323ccdee29652e32c140acd2ac4782eb2fd734d9 SHA512 39815788dd0c60709bc91fdae798ef49a8d7c1ca434c7f4d5c2c0893ff2d462e869988715548cee1ec04ffba721f31c386424b1af06c68fad250113792f5a0af
+DIST iwd-3.12.tar.xz 1125180 BLAKE2B ec050f81c88ef2204c003b5082d93f21eca07f4367609edf3059fbafab1a32dd2fe15a6fd7c69c0c9a7a7d59b2e7104dc2317a7d23d74689bc118dd5280401c6 SHA512 47ac85452d28ab238474b1f724383aca362bac41caa5ade6b34f5b53d43a7c4eacf3d6a2a6d4c7f39080bd041cc823f9b1de343c855249c45b342d37f1f084a7
+DIST iwd-3.8.tar.xz 1116376 BLAKE2B fdbc5b7a777f80dde1a9642bc32e7f7c6c14d2cd8d0a106bd57a60b808566acfb23ef31c57f577c58c00fc6b546a8bef86af3bfea8dc069bc7b7238b50f57e03 SHA512 5bc136be8d97918baa7581753cafda9a781e09871b869e9dc77df36de0e9a83e17373f03724210b8436a727f22e5d33c7eec3b10cd2501fcee363a551d2122cd
+DIST iwd-3.9.tar.xz 1117304 BLAKE2B a27309a2dd84df9a98fdb7fcfd0d0b91645dd86653525dfccd8f2f1d34596c068c0edc50d601f93326ab40e58ad7234449b51e85d8f5d23872dc85eb9c8f6ca9 SHA512 55a61c8ddd29f48866cdb8ec2f43f4f47ca5e1a4528b9c616f1d8ee47ad01a965f04c897109b35913f7a14ab1ee7ae1383751108e0242c3b0c3e4f981511454e
diff --git a/net-wireless/iwd/files/ead.initd b/net-wireless/iwd/files/ead.initd
new file mode 100644
index 000000000000..b1bbcd92fbb8
--- /dev/null
+++ b/net-wireless/iwd/files/ead.initd
@@ -0,0 +1,12 @@
+#!/sbin/openrc-run
+# Copyright 1999-2019 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+pidfile="/run/ead.pid"
+command="/usr/libexec/ead"
+command_background="yes"
+
+depend() {
+ need dbus
+ keyword -shutdown
+}
diff --git a/net-wireless/iwd/files/iwd.initd-r1 b/net-wireless/iwd/files/iwd.initd-r1
new file mode 100644
index 000000000000..873d569b6559
--- /dev/null
+++ b/net-wireless/iwd/files/iwd.initd-r1
@@ -0,0 +1,14 @@
+#!/sbin/openrc-run
+# Copyright 1999-2020 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+pidfile="/run/iwd.pid"
+command="/usr/libexec/iwd"
+command_background="yes"
+
+depend() {
+ need dbus
+ after bootmisc modules
+ before dns dhcpcd net
+ keyword -shutdown
+}
diff --git a/net-wireless/iwd/iwd-3.10.ebuild b/net-wireless/iwd/iwd-3.10.ebuild
new file mode 100644
index 000000000000..57f647452669
--- /dev/null
+++ b/net-wireless/iwd/iwd-3.10.ebuild
@@ -0,0 +1,167 @@
+# Copyright 1999-2025 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=8
+inherit flag-o-matic linux-info systemd
+
+#Set this variable to the required external ell version
+ELL_REQ="0.80"
+
+if [[ ${PV} == *9999* ]]; then
+ inherit autotools git-r3
+ IWD_EGIT_REPO_URI="https://git.kernel.org/pub/scm/network/wireless/iwd.git"
+ ELL_EGIT_REPO_URI="https://git.kernel.org/pub/scm/libs/ell/ell.git"
+else
+ SRC_URI="https://mirrors.edge.kernel.org/pub/linux/network/wireless/${P}.tar.xz"
+ KEYWORDS="~alpha ~amd64 ~arm ~arm64 ~loong ~ppc ~ppc64 ~riscv ~sparc ~x86"
+ MYRST2MAN="RST2MAN=:"
+fi
+
+DESCRIPTION="Wireless daemon for linux"
+HOMEPAGE="https://git.kernel.org/pub/scm/network/wireless/iwd.git/"
+
+LICENSE="GPL-2"
+SLOT="0"
+IUSE="+client cpu_flags_x86_aes cpu_flags_x86_ssse3 +monitor ofono selinux standalone systemd wired"
+
+DEPEND="
+ sys-apps/dbus
+ client? ( sys-libs/readline:0= )
+"
+
+[[ -z "${ELL_REQ}" ]] || DEPEND+=" ~dev-libs/ell-${ELL_REQ}"
+
+RDEPEND="
+ ${DEPEND}
+ acct-group/netdev
+ net-wireless/wireless-regdb
+ selinux? ( sec-policy/selinux-networkmanager )
+ standalone? (
+ systemd? ( sys-apps/systemd )
+ !systemd? ( virtual/resolvconf )
+ )
+"
+
+BDEPEND="
+ virtual/pkgconfig
+"
+
+[[ ${PV} == *9999* ]] && BDEPEND+=" dev-python/docutils"
+
+pkg_setup() {
+ CONFIG_CHECK="
+ ~ASYMMETRIC_KEY_TYPE
+ ~ASYMMETRIC_PUBLIC_KEY_SUBTYPE
+ ~CFG80211
+ ~CRYPTO_AES
+ ~CRYPTO_CBC
+ ~CRYPTO_CMAC
+ ~CRYPTO_DES
+ ~CRYPTO_ECB
+ ~CRYPTO_HMAC
+ ~CRYPTO_MD4
+ ~CRYPTO_MD5
+ ~CRYPTO_RSA
+ ~CRYPTO_SHA1
+ ~CRYPTO_SHA256
+ ~CRYPTO_SHA512
+ ~CRYPTO_USER_API_HASH
+ ~CRYPTO_USER_API_SKCIPHER
+ ~KEY_DH_OPERATIONS
+ ~PKCS7_MESSAGE_PARSER
+ ~RFKILL
+ ~X509_CERTIFICATE_PARSER
+ "
+
+ if use amd64;then
+ CONFIG_CHECK="${CONFIG_CHECK} ~CRYPTO_DES3_EDE_X86_64"
+ WARNING_CRYPTO_DES3_EDE_X86_64="CRYPTO_DES3_EDE_X86_64: enable for increased performance"
+ fi
+
+ if use cpu_flags_x86_aes;then
+ CONFIG_CHECK="${CONFIG_CHECK} ~CRYPTO_AES_NI_INTEL"
+ WARNING_CRYPTO_AES_NI_INTEL="CRYPTO_AES_NI_INTEL: enable for increased performance"
+ fi
+
+ if use cpu_flags_x86_ssse3 && use amd64 && kernel_is -lt 6 17; then
+ CONFIG_CHECK="${CONFIG_CHECK} ~CRYPTO_SHA1_SSSE3 ~CRYPTO_SHA256_SSSE3 ~CRYPTO_SHA512_SSSE3"
+ WARNING_CRYPTO_SHA1_SSSE3="CRYPTO_SHA1_SSSE3: enable for increased performance"
+ WARNING_CRYPTO_SHA256_SSSE3="CRYPTO_SHA256_SSSE3: enable for increased performance"
+ WARNING_CRYPTO_SHA512_SSSE3="CRYPTO_SHA512_SSSE3: enable for increased performance"
+ fi
+
+ if use kernel_linux && kernel_is -ge 4 20; then
+ CONFIG_CHECK="${CONFIG_CHECK} ~PKCS8_PRIVATE_KEY_PARSER"
+ fi
+
+ check_extra_config
+}
+
+src_unpack() {
+ if [[ ${PV} == *9999* ]] ; then
+ EGIT_REPO_URI=${IWD_EGIT_REPO_URI} git-r3_src_unpack
+ EGIT_REPO_URI=${ELL_EGIT_REPO_URI} EGIT_CHECKOUT_DIR=${WORKDIR}/ell git-r3_src_unpack
+ else
+ default
+ fi
+}
+
+src_prepare() {
+ default
+ if [[ ${PV} == *9999* ]] ; then
+ eautoreconf
+ fi
+
+ sed -e "s:Exec=/bin/false:Exec=${EPREFIX}/usr/libexec/iwd:g" -i src/net.connman.iwd.service || die
+}
+
+src_configure() {
+ append-cflags "-fsigned-char"
+ local myeconfargs=(
+ --sysconfdir="${EPREFIX}"/etc/iwd --localstatedir="${EPREFIX}"/var
+ "$(use_enable client)"
+ "$(use_enable monitor)"
+ "$(use_enable ofono)"
+ "$(use_enable wired)"
+ --enable-systemd-service
+ --with-systemd-unitdir="$(systemd_get_systemunitdir)"
+ --with-systemd-modloaddir="${EPREFIX}/usr/lib/modules-load.d"
+ --with-systemd-networkdir="$(systemd_get_utildir)/network"
+ )
+ [[ ${PV} == *9999* ]] || myeconfargs+=(--enable-external-ell)
+ econf "${myeconfargs[@]}"
+}
+
+src_compile() {
+ emake "${MYRST2MAN}"
+}
+
+src_install() {
+ emake DESTDIR="${D}" "${MYRST2MAN}" install
+ keepdir "/var/lib/${PN}"
+
+ newinitd "${FILESDIR}/iwd.initd-r1" iwd
+
+ if use wired;then
+ newinitd "${FILESDIR}/ead.initd" ead
+ fi
+
+ if [[ ${PV} == *9999* ]] ; then
+ exeinto /usr/share/iwd/scripts/
+ doexe test/*
+ fi
+
+ if use standalone ; then
+ local iwdconf="${ED}/etc/iwd/main.conf"
+ dodir /etc/iwd
+ cat << EOF > "${iwdconf}"
+[General]
+EnableNetworkConfiguration=true
+
+[Network]
+NameResolvingService=$(usex systemd systemd resolvconf)
+EOF
+ dodir /etc/conf.d
+ echo "rc_provide=\"net\"" > "${ED}"/etc/conf.d/iwd
+ fi
+}
diff --git a/net-wireless/iwd/iwd-3.11.ebuild b/net-wireless/iwd/iwd-3.11.ebuild
new file mode 100644
index 000000000000..be3bf3ad8ae6
--- /dev/null
+++ b/net-wireless/iwd/iwd-3.11.ebuild
@@ -0,0 +1,167 @@
+# Copyright 1999-2026 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=8
+inherit flag-o-matic linux-info systemd
+
+#Set this variable to the required external ell version
+ELL_REQ="0.80"
+
+if [[ ${PV} == *9999* ]]; then
+ inherit autotools git-r3
+ IWD_EGIT_REPO_URI="https://git.kernel.org/pub/scm/network/wireless/iwd.git"
+ ELL_EGIT_REPO_URI="https://git.kernel.org/pub/scm/libs/ell/ell.git"
+else
+ SRC_URI="https://mirrors.edge.kernel.org/pub/linux/network/wireless/${P}.tar.xz"
+ KEYWORDS="~alpha ~amd64 ~arm ~arm64 ~loong ~ppc ~ppc64 ~riscv ~sparc ~x86"
+ MYRST2MAN="RST2MAN=:"
+fi
+
+DESCRIPTION="Wireless daemon for linux"
+HOMEPAGE="https://git.kernel.org/pub/scm/network/wireless/iwd.git/"
+
+LICENSE="GPL-2"
+SLOT="0"
+IUSE="+client cpu_flags_x86_aes cpu_flags_x86_ssse3 +monitor ofono selinux standalone systemd wired"
+
+DEPEND="
+ sys-apps/dbus
+ client? ( sys-libs/readline:0= )
+"
+
+[[ -z "${ELL_REQ}" ]] || DEPEND+=" ~dev-libs/ell-${ELL_REQ}"
+
+RDEPEND="
+ ${DEPEND}
+ acct-group/netdev
+ net-wireless/wireless-regdb
+ selinux? ( sec-policy/selinux-networkmanager )
+ standalone? (
+ systemd? ( sys-apps/systemd )
+ !systemd? ( virtual/resolvconf )
+ )
+"
+
+BDEPEND="
+ virtual/pkgconfig
+"
+
+[[ ${PV} == *9999* ]] && BDEPEND+=" dev-python/docutils"
+
+pkg_setup() {
+ CONFIG_CHECK="
+ ~ASYMMETRIC_KEY_TYPE
+ ~ASYMMETRIC_PUBLIC_KEY_SUBTYPE
+ ~CFG80211
+ ~CRYPTO_AES
+ ~CRYPTO_CBC
+ ~CRYPTO_CMAC
+ ~CRYPTO_DES
+ ~CRYPTO_ECB
+ ~CRYPTO_HMAC
+ ~CRYPTO_MD4
+ ~CRYPTO_MD5
+ ~CRYPTO_RSA
+ ~CRYPTO_SHA1
+ ~CRYPTO_SHA256
+ ~CRYPTO_SHA512
+ ~CRYPTO_USER_API_HASH
+ ~CRYPTO_USER_API_SKCIPHER
+ ~KEY_DH_OPERATIONS
+ ~PKCS7_MESSAGE_PARSER
+ ~RFKILL
+ ~X509_CERTIFICATE_PARSER
+ "
+
+ if use amd64;then
+ CONFIG_CHECK="${CONFIG_CHECK} ~CRYPTO_DES3_EDE_X86_64"
+ WARNING_CRYPTO_DES3_EDE_X86_64="CRYPTO_DES3_EDE_X86_64: enable for increased performance"
+ fi
+
+ if use cpu_flags_x86_aes;then
+ CONFIG_CHECK="${CONFIG_CHECK} ~CRYPTO_AES_NI_INTEL"
+ WARNING_CRYPTO_AES_NI_INTEL="CRYPTO_AES_NI_INTEL: enable for increased performance"
+ fi
+
+ if use cpu_flags_x86_ssse3 && use amd64 && kernel_is -lt 6 17; then
+ CONFIG_CHECK="${CONFIG_CHECK} ~CRYPTO_SHA1_SSSE3 ~CRYPTO_SHA256_SSSE3 ~CRYPTO_SHA512_SSSE3"
+ WARNING_CRYPTO_SHA1_SSSE3="CRYPTO_SHA1_SSSE3: enable for increased performance"
+ WARNING_CRYPTO_SHA256_SSSE3="CRYPTO_SHA256_SSSE3: enable for increased performance"
+ WARNING_CRYPTO_SHA512_SSSE3="CRYPTO_SHA512_SSSE3: enable for increased performance"
+ fi
+
+ if use kernel_linux && kernel_is -ge 4 20; then
+ CONFIG_CHECK="${CONFIG_CHECK} ~PKCS8_PRIVATE_KEY_PARSER"
+ fi
+
+ check_extra_config
+}
+
+src_unpack() {
+ if [[ ${PV} == *9999* ]] ; then
+ EGIT_REPO_URI=${IWD_EGIT_REPO_URI} git-r3_src_unpack
+ EGIT_REPO_URI=${ELL_EGIT_REPO_URI} EGIT_CHECKOUT_DIR=${WORKDIR}/ell git-r3_src_unpack
+ else
+ default
+ fi
+}
+
+src_prepare() {
+ default
+ if [[ ${PV} == *9999* ]] ; then
+ eautoreconf
+ fi
+
+ sed -e "s:Exec=/bin/false:Exec=${EPREFIX}/usr/libexec/iwd:g" -i src/net.connman.iwd.service || die
+}
+
+src_configure() {
+ append-cflags "-fsigned-char"
+ local myeconfargs=(
+ --sysconfdir="${EPREFIX}"/etc/iwd --localstatedir="${EPREFIX}"/var
+ "$(use_enable client)"
+ "$(use_enable monitor)"
+ "$(use_enable ofono)"
+ "$(use_enable wired)"
+ --enable-systemd-service
+ --with-systemd-unitdir="$(systemd_get_systemunitdir)"
+ --with-systemd-modloaddir="${EPREFIX}/usr/lib/modules-load.d"
+ --with-systemd-networkdir="$(systemd_get_utildir)/network"
+ )
+ [[ ${PV} == *9999* ]] || myeconfargs+=(--enable-external-ell)
+ econf "${myeconfargs[@]}"
+}
+
+src_compile() {
+ emake "${MYRST2MAN}"
+}
+
+src_install() {
+ emake DESTDIR="${D}" "${MYRST2MAN}" install
+ keepdir "/var/lib/${PN}"
+
+ newinitd "${FILESDIR}/iwd.initd-r1" iwd
+
+ if use wired;then
+ newinitd "${FILESDIR}/ead.initd" ead
+ fi
+
+ if [[ ${PV} == *9999* ]] ; then
+ exeinto /usr/share/iwd/scripts/
+ doexe test/*
+ fi
+
+ if use standalone ; then
+ local iwdconf="${ED}/etc/iwd/main.conf"
+ dodir /etc/iwd
+ cat << EOF > "${iwdconf}"
+[General]
+EnableNetworkConfiguration=true
+
+[Network]
+NameResolvingService=$(usex systemd systemd resolvconf)
+EOF
+ dodir /etc/conf.d
+ echo "rc_provide=\"net\"" > "${ED}"/etc/conf.d/iwd
+ fi
+}
diff --git a/net-wireless/iwd/iwd-3.12.ebuild b/net-wireless/iwd/iwd-3.12.ebuild
new file mode 100644
index 000000000000..ec833e9f0a50
--- /dev/null
+++ b/net-wireless/iwd/iwd-3.12.ebuild
@@ -0,0 +1,168 @@
+# Copyright 1999-2026 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=8
+inherit flag-o-matic linux-info systemd
+
+#Set this variable to the required external ell version
+ELL_REQ="0.80"
+
+if [[ ${PV} == *9999* ]]; then
+ inherit autotools git-r3
+ IWD_EGIT_REPO_URI="https://git.kernel.org/pub/scm/network/wireless/iwd.git"
+ ELL_EGIT_REPO_URI="https://git.kernel.org/pub/scm/libs/ell/ell.git"
+else
+ SRC_URI="https://mirrors.edge.kernel.org/pub/linux/network/wireless/${P}.tar.xz"
+ KEYWORDS="~alpha ~amd64 ~arm ~arm64 ~loong ~ppc ~ppc64 ~riscv ~sparc ~x86"
+ MYRST2MAN="RST2MAN=:"
+fi
+
+DESCRIPTION="Wireless daemon for linux"
+HOMEPAGE="https://git.kernel.org/pub/scm/network/wireless/iwd.git/"
+
+LICENSE="GPL-2"
+SLOT="0"
+IUSE="+client cpu_flags_x86_aes cpu_flags_x86_ssse3 +monitor ofono selinux standalone systemd wired"
+
+DEPEND="
+ sys-apps/dbus
+ client? ( sys-libs/readline:0= )
+"
+
+[[ -z "${ELL_REQ}" ]] || DEPEND+=" >=dev-libs/ell-${ELL_REQ}"
+
+RDEPEND="
+ ${DEPEND}
+ acct-group/netdev
+ net-wireless/wireless-regdb
+ selinux? ( sec-policy/selinux-networkmanager )
+ standalone? (
+ systemd? ( sys-apps/systemd )
+ !systemd? ( virtual/resolvconf )
+ )
+"
+
+BDEPEND="
+ virtual/pkgconfig
+"
+
+[[ ${PV} == *9999* ]] && BDEPEND+=" dev-python/docutils"
+
+pkg_setup() {
+ CONFIG_CHECK="
+ ~ASYMMETRIC_KEY_TYPE
+ ~ASYMMETRIC_PUBLIC_KEY_SUBTYPE
+ ~CFG80211
+ ~CRYPTO_AES
+ ~CRYPTO_CBC
+ ~CRYPTO_CMAC
+ ~CRYPTO_DES
+ ~CRYPTO_ECB
+ ~CRYPTO_HMAC
+ ~CRYPTO_MD4
+ ~CRYPTO_MD5
+ ~CRYPTO_RSA
+ ~CRYPTO_SHA1
+ ~CRYPTO_SHA256
+ ~CRYPTO_SHA512
+ ~CRYPTO_USER_API_HASH
+ ~CRYPTO_USER_API_SKCIPHER
+ ~KEY_DH_OPERATIONS
+ ~PKCS7_MESSAGE_PARSER
+ ~RFKILL
+ ~X509_CERTIFICATE_PARSER
+ "
+
+ if use amd64;then
+ CONFIG_CHECK="${CONFIG_CHECK} ~CRYPTO_DES3_EDE_X86_64"
+ WARNING_CRYPTO_DES3_EDE_X86_64="CRYPTO_DES3_EDE_X86_64: enable for increased performance"
+ fi
+
+ if use cpu_flags_x86_aes;then
+ CONFIG_CHECK="${CONFIG_CHECK} ~CRYPTO_AES_NI_INTEL"
+ WARNING_CRYPTO_AES_NI_INTEL="CRYPTO_AES_NI_INTEL: enable for increased performance"
+ fi
+
+ if use cpu_flags_x86_ssse3 && use amd64 && kernel_is -lt 6 17; then
+ CONFIG_CHECK="${CONFIG_CHECK} ~CRYPTO_SHA1_SSSE3 ~CRYPTO_SHA256_SSSE3 ~CRYPTO_SHA512_SSSE3"
+ WARNING_CRYPTO_SHA1_SSSE3="CRYPTO_SHA1_SSSE3: enable for increased performance"
+ WARNING_CRYPTO_SHA256_SSSE3="CRYPTO_SHA256_SSSE3: enable for increased performance"
+ WARNING_CRYPTO_SHA512_SSSE3="CRYPTO_SHA512_SSSE3: enable for increased performance"
+ fi
+
+ if use kernel_linux && kernel_is -ge 4 20; then
+ CONFIG_CHECK="${CONFIG_CHECK} ~PKCS8_PRIVATE_KEY_PARSER"
+ fi
+
+ check_extra_config
+}
+
+src_unpack() {
+ if [[ ${PV} == *9999* ]] ; then
+ EGIT_REPO_URI=${IWD_EGIT_REPO_URI} git-r3_src_unpack
+ EGIT_REPO_URI=${ELL_EGIT_REPO_URI} EGIT_CHECKOUT_DIR=${WORKDIR}/ell git-r3_src_unpack
+ else
+ default
+ fi
+}
+
+src_prepare() {
+ default
+ if [[ ${PV} == *9999* ]] ; then
+ eautoreconf
+ fi
+
+ sed -e "s:Exec=/bin/false:Exec=${EPREFIX}/usr/libexec/iwd:g" -i src/net.connman.iwd.service || die
+}
+
+src_configure() {
+ append-cflags "-fsigned-char"
+ local myeconfargs=(
+ --sysconfdir="${EPREFIX}"/etc/iwd --localstatedir="${EPREFIX}"/var
+ "$(use_enable client)"
+ "$(use_enable monitor)"
+ "$(use_enable ofono)"
+ "$(use_enable wired)"
+ --enable-systemd-service
+ --with-systemd-unitdir="$(systemd_get_systemunitdir)"
+ --with-systemd-modloaddir="${EPREFIX}/usr/lib/modules-load.d"
+ --with-systemd-networkdir="$(systemd_get_utildir)/network"
+ )
+ [[ ${PV} == *9999* ]] || myeconfargs+=(--enable-external-ell)
+ econf "${myeconfargs[@]}"
+}
+
+src_compile() {
+ emake "${MYRST2MAN}"
+}
+
+src_install() {
+ emake DESTDIR="${D}" "${MYRST2MAN}" install
+ keepdir "/var/lib/${PN}"
+
+ newinitd "${FILESDIR}/iwd.initd-r1" iwd
+
+ if use wired;then
+ keepdir "var/lib/ead"
+ newinitd "${FILESDIR}/ead.initd" ead
+ fi
+
+ if [[ ${PV} == *9999* ]] ; then
+ exeinto /usr/share/iwd/scripts/
+ doexe test/*
+ fi
+
+ if use standalone ; then
+ local iwdconf="${ED}/etc/iwd/main.conf"
+ dodir /etc/iwd
+ cat << EOF > "${iwdconf}"
+[General]
+EnableNetworkConfiguration=true
+
+[Network]
+NameResolvingService=$(usex systemd systemd resolvconf)
+EOF
+ dodir /etc/conf.d
+ echo "rc_provide=\"net\"" > "${ED}"/etc/conf.d/iwd
+ fi
+}
diff --git a/net-wireless/iwd/iwd-3.8.ebuild b/net-wireless/iwd/iwd-3.8.ebuild
new file mode 100644
index 000000000000..04e775f0d112
--- /dev/null
+++ b/net-wireless/iwd/iwd-3.8.ebuild
@@ -0,0 +1,167 @@
+# Copyright 1999-2025 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=8
+inherit flag-o-matic linux-info systemd
+
+#Set this variable to the required external ell version
+ELL_REQ="0.77"
+
+if [[ ${PV} == *9999* ]]; then
+ inherit autotools git-r3
+ IWD_EGIT_REPO_URI="https://git.kernel.org/pub/scm/network/wireless/iwd.git"
+ ELL_EGIT_REPO_URI="https://git.kernel.org/pub/scm/libs/ell/ell.git"
+else
+ SRC_URI="https://mirrors.edge.kernel.org/pub/linux/network/wireless/${P}.tar.xz"
+ KEYWORDS="~alpha amd64 arm arm64 ~loong ppc ppc64 ~riscv ~sparc x86"
+ MYRST2MAN="RST2MAN=:"
+fi
+
+DESCRIPTION="Wireless daemon for linux"
+HOMEPAGE="https://git.kernel.org/pub/scm/network/wireless/iwd.git/"
+
+LICENSE="GPL-2"
+SLOT="0"
+IUSE="+client cpu_flags_x86_aes cpu_flags_x86_ssse3 +monitor ofono selinux standalone systemd wired"
+
+DEPEND="
+ sys-apps/dbus
+ client? ( sys-libs/readline:0= )
+"
+
+[[ -z "${ELL_REQ}" ]] || DEPEND+=" ~dev-libs/ell-${ELL_REQ}"
+
+RDEPEND="
+ ${DEPEND}
+ acct-group/netdev
+ net-wireless/wireless-regdb
+ selinux? ( sec-policy/selinux-networkmanager )
+ standalone? (
+ systemd? ( sys-apps/systemd )
+ !systemd? ( virtual/resolvconf )
+ )
+"
+
+BDEPEND="
+ virtual/pkgconfig
+"
+
+[[ ${PV} == *9999* ]] && BDEPEND+=" dev-python/docutils"
+
+pkg_setup() {
+ CONFIG_CHECK="
+ ~ASYMMETRIC_KEY_TYPE
+ ~ASYMMETRIC_PUBLIC_KEY_SUBTYPE
+ ~CFG80211
+ ~CRYPTO_AES
+ ~CRYPTO_CBC
+ ~CRYPTO_CMAC
+ ~CRYPTO_DES
+ ~CRYPTO_ECB
+ ~CRYPTO_HMAC
+ ~CRYPTO_MD4
+ ~CRYPTO_MD5
+ ~CRYPTO_RSA
+ ~CRYPTO_SHA1
+ ~CRYPTO_SHA256
+ ~CRYPTO_SHA512
+ ~CRYPTO_USER_API_HASH
+ ~CRYPTO_USER_API_SKCIPHER
+ ~KEY_DH_OPERATIONS
+ ~PKCS7_MESSAGE_PARSER
+ ~RFKILL
+ ~X509_CERTIFICATE_PARSER
+ "
+
+ if use amd64;then
+ CONFIG_CHECK="${CONFIG_CHECK} ~CRYPTO_DES3_EDE_X86_64"
+ WARNING_CRYPTO_DES3_EDE_X86_64="CRYPTO_DES3_EDE_X86_64: enable for increased performance"
+ fi
+
+ if use cpu_flags_x86_aes;then
+ CONFIG_CHECK="${CONFIG_CHECK} ~CRYPTO_AES_NI_INTEL"
+ WARNING_CRYPTO_AES_NI_INTEL="CRYPTO_AES_NI_INTEL: enable for increased performance"
+ fi
+
+ if use cpu_flags_x86_ssse3 && use amd64 && kernel_is -lt 6 17; then
+ CONFIG_CHECK="${CONFIG_CHECK} ~CRYPTO_SHA1_SSSE3 ~CRYPTO_SHA256_SSSE3 ~CRYPTO_SHA512_SSSE3"
+ WARNING_CRYPTO_SHA1_SSSE3="CRYPTO_SHA1_SSSE3: enable for increased performance"
+ WARNING_CRYPTO_SHA256_SSSE3="CRYPTO_SHA256_SSSE3: enable for increased performance"
+ WARNING_CRYPTO_SHA512_SSSE3="CRYPTO_SHA512_SSSE3: enable for increased performance"
+ fi
+
+ if use kernel_linux && kernel_is -ge 4 20; then
+ CONFIG_CHECK="${CONFIG_CHECK} ~PKCS8_PRIVATE_KEY_PARSER"
+ fi
+
+ check_extra_config
+}
+
+src_unpack() {
+ if [[ ${PV} == *9999* ]] ; then
+ EGIT_REPO_URI=${IWD_EGIT_REPO_URI} git-r3_src_unpack
+ EGIT_REPO_URI=${ELL_EGIT_REPO_URI} EGIT_CHECKOUT_DIR=${WORKDIR}/ell git-r3_src_unpack
+ else
+ default
+ fi
+}
+
+src_prepare() {
+ default
+ if [[ ${PV} == *9999* ]] ; then
+ eautoreconf
+ fi
+
+ sed -e "s:Exec=/bin/false:Exec=${EPREFIX}/usr/libexec/iwd:g" -i src/net.connman.iwd.service || die
+}
+
+src_configure() {
+ append-cflags "-fsigned-char"
+ local myeconfargs=(
+ --sysconfdir="${EPREFIX}"/etc/iwd --localstatedir="${EPREFIX}"/var
+ "$(use_enable client)"
+ "$(use_enable monitor)"
+ "$(use_enable ofono)"
+ "$(use_enable wired)"
+ --enable-systemd-service
+ --with-systemd-unitdir="$(systemd_get_systemunitdir)"
+ --with-systemd-modloaddir="${EPREFIX}/usr/lib/modules-load.d"
+ --with-systemd-networkdir="$(systemd_get_utildir)/network"
+ )
+ [[ ${PV} == *9999* ]] || myeconfargs+=(--enable-external-ell)
+ econf "${myeconfargs[@]}"
+}
+
+src_compile() {
+ emake "${MYRST2MAN}"
+}
+
+src_install() {
+ emake DESTDIR="${D}" "${MYRST2MAN}" install
+ keepdir "/var/lib/${PN}"
+
+ newinitd "${FILESDIR}/iwd.initd-r1" iwd
+
+ if use wired;then
+ newinitd "${FILESDIR}/ead.initd" ead
+ fi
+
+ if [[ ${PV} == *9999* ]] ; then
+ exeinto /usr/share/iwd/scripts/
+ doexe test/*
+ fi
+
+ if use standalone ; then
+ local iwdconf="${ED}/etc/iwd/main.conf"
+ dodir /etc/iwd
+ cat << EOF > "${iwdconf}"
+[General]
+EnableNetworkConfiguration=true
+
+[Network]
+NameResolvingService=$(usex systemd systemd resolvconf)
+EOF
+ dodir /etc/conf.d
+ echo "rc_provide=\"net\"" > "${ED}"/etc/conf.d/iwd
+ fi
+}
diff --git a/net-wireless/iwd/iwd-3.9.ebuild b/net-wireless/iwd/iwd-3.9.ebuild
new file mode 100644
index 000000000000..87f0363880b8
--- /dev/null
+++ b/net-wireless/iwd/iwd-3.9.ebuild
@@ -0,0 +1,167 @@
+# Copyright 1999-2025 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=8
+inherit flag-o-matic linux-info systemd
+
+#Set this variable to the required external ell version
+ELL_REQ="0.77"
+
+if [[ ${PV} == *9999* ]]; then
+ inherit autotools git-r3
+ IWD_EGIT_REPO_URI="https://git.kernel.org/pub/scm/network/wireless/iwd.git"
+ ELL_EGIT_REPO_URI="https://git.kernel.org/pub/scm/libs/ell/ell.git"
+else
+ SRC_URI="https://mirrors.edge.kernel.org/pub/linux/network/wireless/${P}.tar.xz"
+ KEYWORDS="~alpha ~amd64 ~arm ~arm64 ~loong ~ppc ~ppc64 ~riscv ~sparc ~x86"
+ MYRST2MAN="RST2MAN=:"
+fi
+
+DESCRIPTION="Wireless daemon for linux"
+HOMEPAGE="https://git.kernel.org/pub/scm/network/wireless/iwd.git/"
+
+LICENSE="GPL-2"
+SLOT="0"
+IUSE="+client cpu_flags_x86_aes cpu_flags_x86_ssse3 +monitor ofono selinux standalone systemd wired"
+
+DEPEND="
+ sys-apps/dbus
+ client? ( sys-libs/readline:0= )
+"
+
+[[ -z "${ELL_REQ}" ]] || DEPEND+=" ~dev-libs/ell-${ELL_REQ}"
+
+RDEPEND="
+ ${DEPEND}
+ acct-group/netdev
+ net-wireless/wireless-regdb
+ selinux? ( sec-policy/selinux-networkmanager )
+ standalone? (
+ systemd? ( sys-apps/systemd )
+ !systemd? ( virtual/resolvconf )
+ )
+"
+
+BDEPEND="
+ virtual/pkgconfig
+"
+
+[[ ${PV} == *9999* ]] && BDEPEND+=" dev-python/docutils"
+
+pkg_setup() {
+ CONFIG_CHECK="
+ ~ASYMMETRIC_KEY_TYPE
+ ~ASYMMETRIC_PUBLIC_KEY_SUBTYPE
+ ~CFG80211
+ ~CRYPTO_AES
+ ~CRYPTO_CBC
+ ~CRYPTO_CMAC
+ ~CRYPTO_DES
+ ~CRYPTO_ECB
+ ~CRYPTO_HMAC
+ ~CRYPTO_MD4
+ ~CRYPTO_MD5
+ ~CRYPTO_RSA
+ ~CRYPTO_SHA1
+ ~CRYPTO_SHA256
+ ~CRYPTO_SHA512
+ ~CRYPTO_USER_API_HASH
+ ~CRYPTO_USER_API_SKCIPHER
+ ~KEY_DH_OPERATIONS
+ ~PKCS7_MESSAGE_PARSER
+ ~RFKILL
+ ~X509_CERTIFICATE_PARSER
+ "
+
+ if use amd64;then
+ CONFIG_CHECK="${CONFIG_CHECK} ~CRYPTO_DES3_EDE_X86_64"
+ WARNING_CRYPTO_DES3_EDE_X86_64="CRYPTO_DES3_EDE_X86_64: enable for increased performance"
+ fi
+
+ if use cpu_flags_x86_aes;then
+ CONFIG_CHECK="${CONFIG_CHECK} ~CRYPTO_AES_NI_INTEL"
+ WARNING_CRYPTO_AES_NI_INTEL="CRYPTO_AES_NI_INTEL: enable for increased performance"
+ fi
+
+ if use cpu_flags_x86_ssse3 && use amd64 && kernel_is -lt 6 17; then
+ CONFIG_CHECK="${CONFIG_CHECK} ~CRYPTO_SHA1_SSSE3 ~CRYPTO_SHA256_SSSE3 ~CRYPTO_SHA512_SSSE3"
+ WARNING_CRYPTO_SHA1_SSSE3="CRYPTO_SHA1_SSSE3: enable for increased performance"
+ WARNING_CRYPTO_SHA256_SSSE3="CRYPTO_SHA256_SSSE3: enable for increased performance"
+ WARNING_CRYPTO_SHA512_SSSE3="CRYPTO_SHA512_SSSE3: enable for increased performance"
+ fi
+
+ if use kernel_linux && kernel_is -ge 4 20; then
+ CONFIG_CHECK="${CONFIG_CHECK} ~PKCS8_PRIVATE_KEY_PARSER"
+ fi
+
+ check_extra_config
+}
+
+src_unpack() {
+ if [[ ${PV} == *9999* ]] ; then
+ EGIT_REPO_URI=${IWD_EGIT_REPO_URI} git-r3_src_unpack
+ EGIT_REPO_URI=${ELL_EGIT_REPO_URI} EGIT_CHECKOUT_DIR=${WORKDIR}/ell git-r3_src_unpack
+ else
+ default
+ fi
+}
+
+src_prepare() {
+ default
+ if [[ ${PV} == *9999* ]] ; then
+ eautoreconf
+ fi
+
+ sed -e "s:Exec=/bin/false:Exec=${EPREFIX}/usr/libexec/iwd:g" -i src/net.connman.iwd.service || die
+}
+
+src_configure() {
+ append-cflags "-fsigned-char"
+ local myeconfargs=(
+ --sysconfdir="${EPREFIX}"/etc/iwd --localstatedir="${EPREFIX}"/var
+ "$(use_enable client)"
+ "$(use_enable monitor)"
+ "$(use_enable ofono)"
+ "$(use_enable wired)"
+ --enable-systemd-service
+ --with-systemd-unitdir="$(systemd_get_systemunitdir)"
+ --with-systemd-modloaddir="${EPREFIX}/usr/lib/modules-load.d"
+ --with-systemd-networkdir="$(systemd_get_utildir)/network"
+ )
+ [[ ${PV} == *9999* ]] || myeconfargs+=(--enable-external-ell)
+ econf "${myeconfargs[@]}"
+}
+
+src_compile() {
+ emake "${MYRST2MAN}"
+}
+
+src_install() {
+ emake DESTDIR="${D}" "${MYRST2MAN}" install
+ keepdir "/var/lib/${PN}"
+
+ newinitd "${FILESDIR}/iwd.initd-r1" iwd
+
+ if use wired;then
+ newinitd "${FILESDIR}/ead.initd" ead
+ fi
+
+ if [[ ${PV} == *9999* ]] ; then
+ exeinto /usr/share/iwd/scripts/
+ doexe test/*
+ fi
+
+ if use standalone ; then
+ local iwdconf="${ED}/etc/iwd/main.conf"
+ dodir /etc/iwd
+ cat << EOF > "${iwdconf}"
+[General]
+EnableNetworkConfiguration=true
+
+[Network]
+NameResolvingService=$(usex systemd systemd resolvconf)
+EOF
+ dodir /etc/conf.d
+ echo "rc_provide=\"net\"" > "${ED}"/etc/conf.d/iwd
+ fi
+}
diff --git a/net-wireless/iwd/iwd-9999.ebuild b/net-wireless/iwd/iwd-9999.ebuild
new file mode 100644
index 000000000000..a8af94abfde6
--- /dev/null
+++ b/net-wireless/iwd/iwd-9999.ebuild
@@ -0,0 +1,167 @@
+# Copyright 1999-2025 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=8
+inherit flag-o-matic linux-info systemd
+
+#Set this variable to the required external ell version
+ELL_REQ=""
+
+if [[ ${PV} == *9999* ]]; then
+ inherit autotools git-r3
+ IWD_EGIT_REPO_URI="https://git.kernel.org/pub/scm/network/wireless/iwd.git"
+ ELL_EGIT_REPO_URI="https://git.kernel.org/pub/scm/libs/ell/ell.git"
+else
+ SRC_URI="https://mirrors.edge.kernel.org/pub/linux/network/wireless/${P}.tar.xz"
+ KEYWORDS="~alpha ~amd64 ~arm ~arm64 ~loong ~ppc ~ppc64 ~riscv ~sparc ~x86"
+ MYRST2MAN="RST2MAN=:"
+fi
+
+DESCRIPTION="Wireless daemon for linux"
+HOMEPAGE="https://git.kernel.org/pub/scm/network/wireless/iwd.git/"
+
+LICENSE="GPL-2"
+SLOT="0"
+IUSE="+client cpu_flags_x86_aes cpu_flags_x86_ssse3 +monitor ofono selinux standalone systemd wired"
+
+DEPEND="
+ sys-apps/dbus
+ client? ( sys-libs/readline:0= )
+"
+
+[[ -z "${ELL_REQ}" ]] || DEPEND+=" ~dev-libs/ell-${ELL_REQ}"
+
+RDEPEND="
+ ${DEPEND}
+ acct-group/netdev
+ net-wireless/wireless-regdb
+ selinux? ( sec-policy/selinux-networkmanager )
+ standalone? (
+ systemd? ( sys-apps/systemd )
+ !systemd? ( virtual/resolvconf )
+ )
+"
+
+BDEPEND="
+ virtual/pkgconfig
+"
+
+[[ ${PV} == *9999* ]] && BDEPEND+=" dev-python/docutils"
+
+pkg_setup() {
+ CONFIG_CHECK="
+ ~ASYMMETRIC_KEY_TYPE
+ ~ASYMMETRIC_PUBLIC_KEY_SUBTYPE
+ ~CFG80211
+ ~CRYPTO_AES
+ ~CRYPTO_CBC
+ ~CRYPTO_CMAC
+ ~CRYPTO_DES
+ ~CRYPTO_ECB
+ ~CRYPTO_HMAC
+ ~CRYPTO_MD4
+ ~CRYPTO_MD5
+ ~CRYPTO_RSA
+ ~CRYPTO_SHA1
+ ~CRYPTO_SHA256
+ ~CRYPTO_SHA512
+ ~CRYPTO_USER_API_HASH
+ ~CRYPTO_USER_API_SKCIPHER
+ ~KEY_DH_OPERATIONS
+ ~PKCS7_MESSAGE_PARSER
+ ~RFKILL
+ ~X509_CERTIFICATE_PARSER
+ "
+
+ if use amd64;then
+ CONFIG_CHECK="${CONFIG_CHECK} ~CRYPTO_DES3_EDE_X86_64"
+ WARNING_CRYPTO_DES3_EDE_X86_64="CRYPTO_DES3_EDE_X86_64: enable for increased performance"
+ fi
+
+ if use cpu_flags_x86_aes;then
+ CONFIG_CHECK="${CONFIG_CHECK} ~CRYPTO_AES_NI_INTEL"
+ WARNING_CRYPTO_AES_NI_INTEL="CRYPTO_AES_NI_INTEL: enable for increased performance"
+ fi
+
+ if use cpu_flags_x86_ssse3 && use amd64 && kernel_is -lt 6 17; then
+ CONFIG_CHECK="${CONFIG_CHECK} ~CRYPTO_SHA1_SSSE3 ~CRYPTO_SHA256_SSSE3 ~CRYPTO_SHA512_SSSE3"
+ WARNING_CRYPTO_SHA1_SSSE3="CRYPTO_SHA1_SSSE3: enable for increased performance"
+ WARNING_CRYPTO_SHA256_SSSE3="CRYPTO_SHA256_SSSE3: enable for increased performance"
+ WARNING_CRYPTO_SHA512_SSSE3="CRYPTO_SHA512_SSSE3: enable for increased performance"
+ fi
+
+ if use kernel_linux && kernel_is -ge 4 20; then
+ CONFIG_CHECK="${CONFIG_CHECK} ~PKCS8_PRIVATE_KEY_PARSER"
+ fi
+
+ check_extra_config
+}
+
+src_unpack() {
+ if [[ ${PV} == *9999* ]] ; then
+ EGIT_REPO_URI=${IWD_EGIT_REPO_URI} git-r3_src_unpack
+ EGIT_REPO_URI=${ELL_EGIT_REPO_URI} EGIT_CHECKOUT_DIR=${WORKDIR}/ell git-r3_src_unpack
+ else
+ default
+ fi
+}
+
+src_prepare() {
+ default
+ if [[ ${PV} == *9999* ]] ; then
+ eautoreconf
+ fi
+
+ sed -e "s:Exec=/bin/false:Exec=${EPREFIX}/usr/libexec/iwd:g" -i src/net.connman.iwd.service || die
+}
+
+src_configure() {
+ append-cflags "-fsigned-char"
+ local myeconfargs=(
+ --sysconfdir="${EPREFIX}"/etc/iwd --localstatedir="${EPREFIX}"/var
+ "$(use_enable client)"
+ "$(use_enable monitor)"
+ "$(use_enable ofono)"
+ "$(use_enable wired)"
+ --enable-systemd-service
+ --with-systemd-unitdir="$(systemd_get_systemunitdir)"
+ --with-systemd-modloaddir="${EPREFIX}/usr/lib/modules-load.d"
+ --with-systemd-networkdir="$(systemd_get_utildir)/network"
+ )
+ [[ ${PV} == *9999* ]] || myeconfargs+=(--enable-external-ell)
+ econf "${myeconfargs[@]}"
+}
+
+src_compile() {
+ emake "${MYRST2MAN}"
+}
+
+src_install() {
+ emake DESTDIR="${D}" "${MYRST2MAN}" install
+ keepdir "/var/lib/${PN}"
+
+ newinitd "${FILESDIR}/iwd.initd-r1" iwd
+
+ if use wired;then
+ newinitd "${FILESDIR}/ead.initd" ead
+ fi
+
+ if [[ ${PV} == *9999* ]] ; then
+ exeinto /usr/share/iwd/scripts/
+ doexe test/*
+ fi
+
+ if use standalone ; then
+ local iwdconf="${ED}/etc/iwd/main.conf"
+ dodir /etc/iwd
+ cat << EOF > "${iwdconf}"
+[General]
+EnableNetworkConfiguration=true
+
+[Network]
+NameResolvingService=$(usex systemd systemd resolvconf)
+EOF
+ dodir /etc/conf.d
+ echo "rc_provide=\"net\"" > "${ED}"/etc/conf.d/iwd
+ fi
+}
diff --git a/net-wireless/iwd/metadata.xml b/net-wireless/iwd/metadata.xml
new file mode 100644
index 000000000000..952d77c309dd
--- /dev/null
+++ b/net-wireless/iwd/metadata.xml
@@ -0,0 +1,17 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE pkgmetadata SYSTEM "https://docs.baldeagleos.com/dtd/metadata.dtd">
+<pkgmetadata>
+ <maintainer type="person">
+ <email>bkohler@gentoo.org</email>
+ <name>Ben Kohler</name>
+ </maintainer>
+ <use>
+ <flag name="client">Enable iwctl client tool</flag>
+ <flag name="monitor">Enable iwmon monitor tool</flag>
+ <flag name="ofono">Enable support for oFono SIM authentication</flag>
+ <flag name="standalone">Enable standalone mode with built-in DHCP client and DNS handling"</flag>
+ <flag name="systemd">Use systemd-resolve rather than resolvconf for DNS handling in standalone mode</flag>
+ <flag name="wired">Enable ethernet authentication daemon</flag>
+ </use>
+ <origin>baldeagleos-repo</origin>
+</pkgmetadata>
diff --git a/net-wireless/iwgtk/Manifest b/net-wireless/iwgtk/Manifest
new file mode 100644
index 000000000000..d54237a239a8
--- /dev/null
+++ b/net-wireless/iwgtk/Manifest
@@ -0,0 +1 @@
+DIST iwgtk-0.9.tar.gz 120055 BLAKE2B 694592b354f529389c0d71f4b81ea7b65a305ac769157e48499414adc91e099ec66880956d80a039b7f68f0d44e0f40f4ac02db350020701471616794a5de399 SHA512 d755d72744051a39dda0b78dc0fb2cc57cbf44cd095ac595d4e83f22a70471a0d69a406636d0a4d5922b533d1c849578779fd7f4c41a0b0e1549dd4e9cc45c4d
diff --git a/net-wireless/iwgtk/iwgtk-0.9.ebuild b/net-wireless/iwgtk/iwgtk-0.9.ebuild
new file mode 100644
index 000000000000..37efcf48022e
--- /dev/null
+++ b/net-wireless/iwgtk/iwgtk-0.9.ebuild
@@ -0,0 +1,35 @@
+# Copyright 2020-2024 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=8
+inherit meson xdg
+
+DESCRIPTION="Lightweight, graphical wifi management utility for Linux"
+HOMEPAGE="https://github.com/J-Lentz/iwgtk"
+SRC_URI="https://github.com/J-Lentz/iwgtk/archive/v${PV}.tar.gz -> ${P}.tar.gz"
+
+LICENSE="GPL-3+"
+SLOT="0"
+KEYWORDS="~amd64"
+
+COMMON_DEPEND="
+ app-accessibility/at-spi2-core:2
+ dev-libs/glib:2
+ gui-libs/gtk:4
+ media-gfx/qrencode:=
+ x11-libs/cairo:0
+ x11-libs/gdk-pixbuf:2
+ x11-libs/pango:0
+"
+
+BDEPEND="app-text/scdoc"
+
+DEPEND="
+ ${COMMON_DEPEND}
+ x11-base/xorg-proto
+"
+
+RDEPEND="
+ ${COMMON_DEPEND}
+ >=net-wireless/iwd-1.29
+"
diff --git a/net-wireless/iwgtk/metadata.xml b/net-wireless/iwgtk/metadata.xml
new file mode 100644
index 000000000000..5d076c5281ef
--- /dev/null
+++ b/net-wireless/iwgtk/metadata.xml
@@ -0,0 +1,9 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE pkgmetadata SYSTEM "https://docs.baldeagleos.com/dtd/metadata.dtd">
+<pkgmetadata>
+ <maintainer type="person">
+ <email>bkohler@gentoo.org</email>
+ <name>Ben Kohler</name>
+ </maintainer>
+ <origin>baldeagleos-repo</origin>
+</pkgmetadata>
diff --git a/net-wireless/kismet/Manifest b/net-wireless/kismet/Manifest
new file mode 100644
index 000000000000..e53947e32097
--- /dev/null
+++ b/net-wireless/kismet/Manifest
@@ -0,0 +1,3 @@
+DIST kismet-2023-07-R2.tar.xz 11418952 BLAKE2B e9a98446cc9ac7db3e40e25f134658aba01c6143d03c0fcd9740aeeaf653bd0df02299563fedf385c939da539514bc5b02b19ec628bf7dc7f1165648e0e14052 SHA512 50ee0386e6876cc586034570ea817004be7c1ff28bfd7425188573db8dcc139ba92cbd1464d00b918576241ced73d2e3666b628246782bbc6699a24f3581dfc6
+DIST kismet-2023.07.1-stdint-fix.patch 144077 BLAKE2B 77a4ca3da4ed54e567d21c7d8d0a718751802827bcefc1122318c989cde93a2132753c910e6f503e74dac30024111edc788d9df65ef4c4749ab918485d818ee3 SHA512 cb9220cdd5e14d030ef303e28a32dced61916ff64aa5960c412c2355c1b714dc423e34b33ef701e1daa2a22c9562a85a739dc130c4ec5761924338ffb462286b
+DIST kismet-2025-09-R1.tar.xz 11479700 BLAKE2B 67a8a6b5ed51f520bd7f27ed989afc856ec901a7e203f691fc6100588d0d1c7be4b908cd244dd49f6efb64303d09ea347d9a25b53f59ddbc7f3261e78d2b9590 SHA512 218f6bd2ab1f1c99d3d18a8ff2da542a76965ad6251703c06c0d62ed16e084a5135c715288f99a7f0ebb54e924a42762a0fb768f0ef5868afb62fb15daff3dff
diff --git a/net-wireless/kismet/files/0001-configure.ac-bashism-fix-critical-existence-failure-.patch b/net-wireless/kismet/files/0001-configure.ac-bashism-fix-critical-existence-failure-.patch
new file mode 100644
index 000000000000..3cf4ed8cff85
--- /dev/null
+++ b/net-wireless/kismet/files/0001-configure.ac-bashism-fix-critical-existence-failure-.patch
@@ -0,0 +1,280 @@
+From d3732f93cbdc9edf39d31c7c50b72cc6a79be0dc Mon Sep 17 00:00:00 2001
+From: Eli Schwartz <eschwartz93@gmail.com>
+Date: Fri, 5 Apr 2024 00:42:29 -0400
+Subject: [PATCH] configure.ac: bashism: fix critical existence failure on
+ systems with dash
+
+Remove the consistent use of bashisms. An autoconf generated script is
+designed to work with POSIX sh, and contains a /bin/sh shebang. As a
+result, it *cannot* assume it will be run with bash, as it won't be.
+
+The bashism in question is the double equals (`==`) operator for the
+test command. It is actually a bash-specific alias for the single equals
+operator. It behaves exactly the same, except more confusing. It
+contains no added functionality and no behavior changes, it is merely an
+additional alternate spelling. In exchange for doing nothing whatsoever,
+even in bash, it breaks muscle memory when writing POSIX sh scripts and
+tricks developers into writing the wrong thing.
+
+It is terrible and should never be used under any circumstances.
+Ideally it would be removed altogether from GNU bash.
+
+Fixes the following warnings when running configure:
+
+```
+./configure: 5011: test: x: unexpected operator
+./configure: 5014: test: x: unexpected operator
+./configure: 5017: test: x: unexpected operator
+./configure: 8056: test: nox: unexpected operator
+./configure: 8109: test: yesx: unexpected operator
+./configure: 8120: test: 3: unexpected operator
+./configure: 8144: test: unexpected operator
+./configure: 9089: test: stdc++x: unexpected operator
+./configure: 9937: test: 0: unexpected operator
+./configure: 10084: test: 0: unexpected operator
+./configure: 10207: test: 0: unexpected operator
+./configure: 10283: test: 0: unexpected operator
+./configure: 11363: test: x: unexpected operator
+./configure: 11561: test: x: unexpected operator
+./configure: 11634: test: xno: unexpected operator
+./configure: 11663: test: xno: unexpected operator
+./configure: 12490: test: 3: unexpected operator
+./configure: 13150: test: no: unexpected operator
+./configure: 13167: test: no: unexpected operator
+```
+
+And the following fatal errors when trying to compile, since the
+resulting conditionals failed to define $(PROTOCBIN):
+
+```
+make -j8
+cpp_out=./protobuf_cpp/ -I protobuf_definitions/ protobuf_definitions/kismet.proto
+cpp_out=./protobuf_cpp/ -I protobuf_definitions/ protobuf_definitions/http.proto
+/bin/sh: 1: -I: not found
+make: [Makefile:808: protobuf_cpp/kismet.pb.h] Error 127 (ignored)
+cpp_out=./protobuf_cpp/ -I protobuf_definitions/ protobuf_definitions/datasource.proto
+cpp_out=./protobuf_cpp/ -I protobuf_definitions/ protobuf_definitions/linuxbluetooth.proto
+/bin/sh: 1: -I: not found
+make: [Makefile:808: protobuf_cpp/http.pb.h] Error 127 (ignored)
+cpp_out=./protobuf_cpp/ -I protobuf_definitions/ protobuf_definitions/eventbus.proto
+/bin/sh: 1: -I: not found
+make: [Makefile:808: protobuf_cpp/linuxbluetooth.pb.h] Error 127 (ignored)
+cpp_out=./protobuf_cpp/ -I protobuf_definitions/ protobuf_definitions/kismet.proto
+/bin/sh: 1: -I: not found
+cpp_out=./protobuf_cpp/ -I protobuf_definitions/ protobuf_definitions/http.proto
+/bin/sh: 1: -I: not found
+/bin/sh: 1: -I: not found
+make: [Makefile:808: protobuf_cpp/datasource.pb.h] Error 127 (ignored)
+make: [Makefile:808: protobuf_cpp/eventbus.pb.h] Error 127 (ignored)
+make: [Makefile:806: protobuf_cpp/kismet.pb.cc] Error 127 (ignored)
+cpp_out=./protobuf_cpp/ -I protobuf_definitions/ protobuf_definitions/datasource.proto
+cpp_out=./protobuf_cpp/ -I protobuf_definitions/ protobuf_definitions/linuxbluetooth.proto
+cpp_out=./protobuf_cpp/ -I protobuf_definitions/ protobuf_definitions/eventbus.proto
+/bin/sh: 1: -I: not found
+```
+
+For extra interest, the failing command begins with `--flag` i.e. a flag
+passed to protoc, which Make then interprets as "ignore errors for this
+command", which means output files are not created but the build then
+continues and produces significantly more confusing errors such as:
+
+```
+kis_external.h:51:10: fatal error: protobuf_cpp/kismet.pb.h: No such file or directory
+```
+
+Signed-off-by: Eli Schwartz <eschwartz93@gmail.com>
+---
+ configure.ac | 46 +++++++++++++++++++++++-----------------------
+ 1 file changed, 23 insertions(+), 23 deletions(-)
+
+diff --git a/configure.ac b/configure.ac
+index a967e3418..d3c961821 100644
+--- a/configure.ac
++++ b/configure.ac
+@@ -179,13 +179,13 @@ else
+ GCC_MINOR=$(echo $GCC_VERSION | cut -s -d'.' -f2)
+ GCC_PATCH=$(echo $GCC_VERSION | cut -s -d'.' -f3)
+
+- if test "$GCC_MAJOR"x == x; then
++ if test "$GCC_MAJOR"x = x; then
+ GCC_MAJOR=$GCC_VERSION
+ fi
+- if test "$GCC_MINOR"x == x; then
++ if test "$GCC_MINOR"x = x; then
+ GCC_MINOR=0
+ fi
+- if test "$GCC_PATCH"x == x; then
++ if test "$GCC_PATCH"x = x; then
+ GCC_PATCH=0
+ fi
+
+@@ -318,7 +318,7 @@ AC_ARG_ENABLE([element-typesafety],
+ esac],
+ [want_te_typesafety=no]
+ )
+-if test "$want_te_typesafety"x == "yes"x; then
++if test "$want_te_typesafety"x = "yes"x; then
+ AC_DEFINE(TE_TYPE_SAFETY, 1, Enforce runtime type safety)
+ else
+ AC_DEFINE(TE_TYPE_SAFETY, 0, Do not enforce runtime type safety)
+@@ -357,7 +357,7 @@ AS_IF([test "x$with_python_interpreter" != "x"],
+ []
+ )
+
+-if test "$want_python"x == "no"x; then
++if test "$want_python"x = "no"x; then
+ BUILD_PYTHON_MODULES=0
+ BUILD_CAPTURE_SDR_RTL433=0
+ BUILD_CAPTURE_SDR_RTLAMR=0
+@@ -367,11 +367,11 @@ if test "$want_python"x == "no"x; then
+ BUILD_CAPTURE_PROXY_ADSB=0
+ AC_MSG_WARN([Disabling Python and Python-related tools])
+ else
+- if test "$PYTHON_VERSION" == 3; then
++ if test "$PYTHON_VERSION" = 3; then
+ AC_PYTHON3_MODULE(setuptools)
+ fi
+
+- if test "$HAVE_PYMOD_SETUPTOOLS" == "no"; then
++ if test "$HAVE_PYMOD_SETUPTOOLS" = "no"; then
+ AC_MSG_ERROR([Missing python setuptools, if you would like to build without python entirely, use --disable-python-tools, otherwise install python setuptools for your python version])
+ else
+ DATASOURCE_BINS="$DATASOURCE_BINS \$(CAPTURE_SDR_RTL433) \$(CAPTURE_SDR_RTLAMR) \$(CAPTURE_SDR_RTLADSB) \$(CAPTURE_FREAKLABS_ZIGBEE)"
+@@ -675,7 +675,7 @@ CC="$CXX"
+ AC_CHECK_LIB([stdc++], [main],
+ foundcxxl="stdc++" CXXLIBS="$CXXLIBS -lstdc++")
+
+-if test "$foundcxxl"x == "x" -a "$caponly" != 1; then
++if test "$foundcxxl"x = "x" -a "$caponly" != 1; then
+ AC_MSG_ERROR(No standard stdc++ libraries found.)
+ fi
+ CC="$oCC"
+@@ -939,7 +939,7 @@ if test "${wantpcre}x" = "nox" -a "${needpcre2}x" = "yesx"; then
+ AC_MSG_ERROR([Can not combine --disable-pcre and --enable-require-pcre2])
+ fi
+
+-if test "$caponly" == 0; then
++if test "$caponly" = 0; then
+ if test "$HAVE_CXX17" = "1"; then
+ AC_MSG_CHECKING([Checking C++17 parallel functions])
+
+@@ -1017,7 +1017,7 @@ if test "$caponly" == 0; then
+ fi
+
+ # Dont' check pcre if we're only building datasources
+-if test "$caponly" == 0; then
++if test "$caponly" = 0; then
+ if test "$wantpcre" = "yes"; then
+ # Check for pcre2 first
+
+@@ -1046,22 +1046,22 @@ if test "$caponly" == 0; then
+ LIBS="$OLIBS"
+
+ if test "$pcre2" != "yes"; then
+- if test "${needpcre2}x" == "yesx"; then
++ if test "${needpcre2}x" = "yesx"; then
+ AC_MSG_ERROR([Could not find libpcre2 and --enable-require-pcre2 selected])
+ fi
+
+ AC_CHECK_LIB([pcre], [pcre_compile], pcre1=yes, pcre1=no)
+
+- if test "$pcre1" == "yes"; then
++ if test "$pcre1" = "yes"; then
+ AC_CHECK_HEADER([pcre.h], pcre1=yes, pcre1=no)
+ fi
+
+ fi
+
+- if test "$pcre2" == "yes"; then
++ if test "$pcre2" = "yes"; then
+ AC_DEFINE(HAVE_LIBPCRE2, 1, libpcre2 regex support)
+ LIBS="$LIBS -lpcre2-8"
+- elif test "$pcre1" == "yes"; then
++ elif test "$pcre1" = "yes"; then
+ AC_DEFINE(HAVE_LIBPCRE, 1, libpcre1 regex support)
+ LIBS="$LIBS -lpcre"
+ else
+@@ -1071,7 +1071,7 @@ if test "$caponly" == 0; then
+ fi
+
+ # Don't check for sqlite3 if we're only building datasources
+-if test "$caponly" == 0; then
++if test "$caponly" = 0; then
+ # Check for sqlite3
+ sql3l=no
+ AC_CHECK_LIB([sqlite3], [sqlite3_libversion], sql3l=yes, sql3l=no)
+@@ -1098,7 +1098,7 @@ if test "$caponly" == 0; then
+ fi # caponly
+
+ # don't check for openssl if we're only building datasources
+-if test "$caponly" == 0; then
++if test "$caponly" = 0; then
+ AX_CHECK_OPENSSL(AC_DEFINE(HAVE_OPENSSL, 1, openssl library present),
+ AC_MSG_ERROR(Failed to find OpenSSL library))
+ fi # caponly
+@@ -1212,7 +1212,7 @@ if test "$caponly" = 0 || test "$want_python" = "yes"; then
+ [ --with-protoc[=PATH] Custom location of the protoc protobuf compiler],
+ [ ])
+
+- if test x"$with_protoc" == "x"; then
++ if test x"$with_protoc" = "x"; then
+ PROTOCBIN=protoc
+ AC_CHECK_PROG(protoc, [protoc], yes)
+ if test x"$protoc" != x"yes"; then
+@@ -1254,7 +1254,7 @@ AC_ARG_WITH(protocc,
+ [ --with-protocc[=PATH] Custom location of the protoc protobuf compiler],
+ [ PROTOCCBIN=$withval ]
+ )
+-if test x"$with_protocc" == "x"; then
++if test x"$with_protocc" = "x"; then
+ PROTOCCBIN="protoc-c"
+ AC_CHECK_PROG(protocc, [protoc-c], yes)
+ if test x"$protocc" != x"yes"; then
+@@ -1282,7 +1282,7 @@ AC_ARG_ENABLE(btgeiger,
+ [want_btgeiger=no]
+ )
+
+-AS_IF([test "x$want_btgeiger" == "xyes"], [
++AS_IF([test "x$want_btgeiger" = "xyes"], [
+ AS_IF([test "x$want_python" != "xyes"], [
+ AC_MSG_ERROR([Can not enable btgeiger without enabling python])
+ ])
+@@ -1301,7 +1301,7 @@ AC_ARG_ENABLE(bladerf,
+ [want_bladerf=no]
+ )
+
+-AS_IF([test "x$want_bladerf" == "xyes"], [
++AS_IF([test "x$want_bladerf" = "xyes"], [
+ PKG_CHECK_MODULES([libbladeRF], [libbladeRF],
+ [
+ ],
+@@ -1529,7 +1529,7 @@ if test "$havenetlink" = "yes"; then
+ fi
+
+ if test "$nlname" != ""; then
+- if test "$picked_nl" == "tiny"; then
++ if test "$picked_nl" = "tiny"; then
+ NLLIBS="-lnl-tiny"
+ else
+ NLLIBS=`pkg-config --libs $nlname`
+@@ -1837,7 +1837,7 @@ AC_ARG_ENABLE(asan,
+ esac],
+ [want_asan=no]
+ )
+-if test "$want_asan" == "yes"; then
++if test "$want_asan" = "yes"; then
+ CPPFLAGS="$CPPFLAGS -fsanitize=address -fno-omit-frame-pointer"
+ LDFLAGS="$LDFLAGS -fsanitize=address"
+ fi
+@@ -1850,7 +1850,7 @@ AC_ARG_ENABLE(tsan,
+ esac],
+ [want_tsan=no]
+ )
+-if test "$want_tsan" == "yes"; then
++if test "$want_tsan" = "yes"; then
+ CPPFLAGS="$CPPFLAGS -fsanitize=thread -fno-omit-frame-pointer"
+ LDFLAGS="$LDFLAGS -fsanitize=thread"
+ fi
+--
+2.43.2
+
diff --git a/net-wireless/kismet/files/gdb b/net-wireless/kismet/files/gdb
new file mode 100644
index 000000000000..de8dea91fa02
--- /dev/null
+++ b/net-wireless/kismet/files/gdb
@@ -0,0 +1,14 @@
+set pagination off
+handle SIGPIPE nostop noprint pass
+handle SIGINT nostop noprint pass
+set logging file kismet-gdb.txt
+set logging on
+
+run --debug --no-ncurses
+
+catch throw
+ bt
+ info threads
+ thread apply all bt full
+ quit
+end
diff --git a/net-wireless/kismet/files/kismet-gdb b/net-wireless/kismet/files/kismet-gdb
new file mode 100644
index 000000000000..3bfa8ffa6704
--- /dev/null
+++ b/net-wireless/kismet/files/kismet-gdb
@@ -0,0 +1,2 @@
+#!/bin/sh
+gdb kismet --command=/usr/share/kismet/gdb
diff --git a/net-wireless/kismet/files/kismet.confd-r2 b/net-wireless/kismet/files/kismet.confd-r2
new file mode 100644
index 000000000000..40da851cbf00
--- /dev/null
+++ b/net-wireless/kismet/files/kismet.confd-r2
@@ -0,0 +1,11 @@
+# /etc/conf.d/kismet - configuration file for /etc/init.d/kismet
+
+# Kismet configuration is done in /etc/kismet/kismet_site.conf
+
+# To use the kismet init script, you must have "logtemplate" set to a location
+# e.g.
+# log_template=%h/kismet_log/%n-%d-%i.%l
+
+# Options to pass to kismet_server, see `kismet --help`
+# --no-ncurses is passed unconditionally
+KISMET_SERVER_OPTIONS=""
diff --git a/net-wireless/kismet/files/kismet.initd-r3 b/net-wireless/kismet/files/kismet.initd-r3
new file mode 100644
index 000000000000..dce3158973f7
--- /dev/null
+++ b/net-wireless/kismet/files/kismet.initd-r3
@@ -0,0 +1,11 @@
+#!/sbin/openrc-run
+# Copyright 1999-2019 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+name="kismet"
+command="/usr/bin/kismet"
+command_args="--no-ncurses ${KISMET_SERVER_OPTIONS}"
+supervisor="supervise-daemon"
+output_log="/var/log/kismet.log"
+error_log="${output_log}"
+pidfile="/run/kismet.pid"
diff --git a/net-wireless/kismet/kismet-2023.07.2.ebuild b/net-wireless/kismet/kismet-2023.07.2.ebuild
new file mode 100644
index 000000000000..e4bc8e336aad
--- /dev/null
+++ b/net-wireless/kismet/kismet-2023.07.2.ebuild
@@ -0,0 +1,205 @@
+# Copyright 1999-2025 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=8
+
+PYTHON_COMPAT=( python3_{13..14} )
+
+inherit autotools eapi9-ver flag-o-matic python-single-r1 udev systemd
+
+if [[ ${PV} == "9999" ]] ; then
+ EGIT_REPO_URI="https://www.kismetwireless.net/git/${PN}.git"
+ inherit git-r3
+ RESTRICT="strip"
+else
+ MY_P=${P/\./-}
+ MY_P=${MY_P/_beta/-BETA}
+ MY_P=${MY_P/./-R}
+ S=${WORKDIR}/${MY_P/BETA/beta}
+
+ #normally we want an official release
+ SRC_URI="https://www.kismetwireless.net/code/${MY_P}.tar.xz
+ https://dev.gentoo.org/~zerochaos/distfiles/${PN}-2023.07.1-stdint-fix.patch"
+
+ #but sometimes we want a git commit
+ #COMMIT="9ca7e469cf115469f392db7436816151867e1654"
+ #SRC_URI="https://github.com/kismetwireless/kismet/archive/${COMMIT}.tar.gz -> ${P}.tar.gz"
+ #S="${WORKDIR}/${PN}-${COMMIT}"
+
+ PATCHES=(
+ "${DISTDIR}/${PN}-2023.07.1-stdint-fix.patch"
+ # https://github.com/kismetwireless/kismet/pull/517
+ "${FILESDIR}"/0001-configure.ac-bashism-fix-critical-existence-failure-.patch
+ )
+
+ KEYWORDS="amd64 arm ~arm64 ~ppc x86"
+fi
+
+DESCRIPTION="IEEE 802.11 wireless LAN sniffer"
+HOMEPAGE="https://www.kismetwireless.net"
+
+LICENSE="GPL-2"
+SLOT="0/${PV}"
+IUSE="libusb lm-sensors networkmanager +pcre rtlsdr selinux +suid ubertooth udev"
+REQUIRED_USE="${PYTHON_REQUIRED_USE}"
+
+# upstream said protobuf-26.1 breaks everything
+# details are unclear at this time but adding restriction for safety
+CDEPEND="
+ ${PYTHON_DEPS}
+ networkmanager? ( net-misc/networkmanager )
+ dev-libs/glib:2
+ dev-libs/elfutils
+ dev-libs/openssl:=
+ virtual/zlib:=
+ dev-db/sqlite:3
+ net-libs/libwebsockets:=[client,lejp]
+ kernel_linux? ( sys-libs/libcap
+ dev-libs/libnl:3
+ net-libs/libpcap
+ )
+ libusb? ( virtual/libusb:1 )
+ dev-libs/protobuf-c:=
+ <dev-libs/protobuf-26:=
+ $(python_gen_cond_dep '
+ dev-python/protobuf[${PYTHON_USEDEP}]
+ dev-python/websockets[${PYTHON_USEDEP}]
+ ')
+ lm-sensors? ( sys-apps/lm-sensors:= )
+ pcre? ( dev-libs/libpcre2:= )
+ suid? ( sys-libs/libcap )
+ ubertooth? ( net-wireless/ubertooth )
+ "
+RDEPEND="${CDEPEND}
+ acct-user/kismet
+ acct-group/kismet
+ $(python_gen_cond_dep '
+ dev-python/pyserial[${PYTHON_USEDEP}]
+ ')
+ rtlsdr? (
+ $(python_gen_cond_dep '
+ dev-python/numpy[${PYTHON_USEDEP}]
+ ')
+ net-wireless/rtl-sdr:=
+ )
+ selinux? ( sec-policy/selinux-kismet )
+"
+DEPEND="${CDEPEND}
+ dev-libs/boost
+ =dev-libs/libfmt-9*
+ sys-libs/libcap
+"
+BDEPEND="virtual/pkgconfig"
+
+src_prepare() {
+ #sed -i -e "s:^\(logtemplate\)=\(.*\):\1=/tmp/\2:" \
+ # conf/kismet_logging.conf || die
+
+ #this was added to quiet macosx builds but it makes gcc builds noisier
+ sed -i -e 's#-Wno-unknown-warning-option ##g' Makefile.inc.in || die
+
+ #sed -i -e 's#root#kismet#g' packaging/systemd/kismet.service.in
+
+ rm -r boost || die
+ rm -r fmt || die
+
+ #dev-libs/jsoncpp
+ #rm -r json || die
+ #sed -i 's#"json/json.h"#<json/json.h>#' jsoncpp.cc kis_net_beast_httpd.h \
+ # log_tools/kismetdb_clean.cc log_tools/kismetdb_dump_devices.cc \
+ # log_tools/kismetdb_statistics.cc log_tools/kismetdb_to_gpx.cc \
+ # log_tools/kismetdb_to_kml.cc log_tools/kismetdb_to_pcap.cc \
+ # log_tools/kismetdb_to_wiglecsv.cc trackedcomponent.h \
+ # trackedelement.h trackedelement_workers.h
+
+ default
+
+ eautoreconf
+}
+
+src_configure() {
+ # -Werror=strict-aliasing
+ # https://bugs.gentoo.org/877761
+ # https://github.com/kismetwireless/kismet/issues/518
+ #
+ # Do not trust with LTO either.
+ append-flags -fno-strict-aliasing
+ filter-lto
+
+ econf \
+ $(use_enable libusb libusb) \
+ $(use_enable libusb wifi-coconut) \
+ $(use_enable pcre) \
+ $(use_enable pcre require-pcre2) \
+ $(use_enable lm-sensors lmsensors) \
+ $(use_enable networkmanager libnm) \
+ $(use_enable ubertooth) \
+ --sysconfdir=/etc/kismet \
+ --disable-optimization
+}
+
+src_install() {
+ emake DESTDIR="${D}" commoninstall
+ python_optimize
+ emake DESTDIR="${D}" forceconfigs
+ use udev && udev_dorules packaging/udev/*.rules
+
+ insinto /usr/share/${PN}
+ doins Makefile.inc
+ if [ "${PV}" = "9999" ];then
+ doins "${FILESDIR}"/gdb
+ dobin "${FILESDIR}"/kismet-gdb
+ fi
+
+ dodoc README*
+ newinitd "${FILESDIR}"/${PN}.initd-r3 kismet
+ newconfd "${FILESDIR}"/${PN}.confd-r2 kismet
+ systemd_dounit packaging/systemd/kismet.service
+}
+
+pkg_preinst() {
+ if use suid; then
+ fowners root:kismet /usr/bin/kismet_cap_linux_bluetooth
+ fowners root:kismet /usr/bin/kismet_cap_linux_wifi
+ fowners root:kismet /usr/bin/kismet_cap_pcapfile
+ # Need to set the permissions after chowning.
+ # See chown(2)
+ fperms 4550 /usr/bin/kismet_cap_linux_bluetooth
+ fperms 4550 /usr/bin/kismet_cap_linux_wifi
+ fperms 4550 /usr/bin/kismet_cap_pcapfile
+ elog "Kismet has been installed with a setuid-root helper binary"
+ elog "to enable minimal-root operation. Users need to be part of"
+ elog "the 'kismet' group to perform captures from physical devices."
+ fi
+ if ! use suid; then
+ ewarn "It is highly discouraged to run a sniffer as root,"
+ ewarn "Please consider enabling the suid use flag and adding"
+ ewarn "your user to the kismet group."
+ fi
+}
+
+migrate_config() {
+ einfo "Kismet Configuration files are now read from /etc/kismet/"
+ ewarn "Please keep user specific settings in /etc/kismet/kismet_site.conf"
+ if [ -n "$(ls "${EROOT}"/etc/kismet_*.conf 2> /dev/null)" ]; then
+ ewarn "Files at /etc/kismet_*.conf will not be read and should be removed"
+ fi
+ if [ -f "${EROOT}/etc/kismet_site.conf" ] && [ ! -f "${EROOT}/etc/kismet/kismet_site.conf" ]; then
+ mv /etc/kismet_site.conf /etc/kismet/kismet_site.conf || die "Failed to migrate kismet_site.conf to new location"
+ ewarn "Your /etc/kismet_site.conf file has been automatically moved to /etc/kismet/kismet_site.conf"
+ elif [ -f "${EROOT}/etc/kismet_site.conf" ] && [ -f "${EROOT}/etc/kismet/kismet_site.conf" ]; then
+ ewarn "Both /etc/kismet_site.conf and /etc/kismet/kismet_site.conf exist, please migrate needed bits"
+ ewarn "into /etc/kismet/kismet_site.conf and remove /etc/kismet_site.conf"
+ fi
+}
+
+pkg_postinst() {
+ if ver_replacing -lt 2019.07.2 || ver_replacing -eq 9999 ; then
+ migrate_config
+ fi
+ udev_reload
+}
+
+pkg_postrm() {
+ udev_reload
+}
diff --git a/net-wireless/kismet/kismet-2025.09.1.ebuild b/net-wireless/kismet/kismet-2025.09.1.ebuild
new file mode 100644
index 000000000000..00ca3f7132a2
--- /dev/null
+++ b/net-wireless/kismet/kismet-2025.09.1.ebuild
@@ -0,0 +1,202 @@
+# Copyright 1999-2025 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=8
+
+PYTHON_COMPAT=( python3_{13..14} )
+
+inherit autotools eapi9-ver python-single-r1 udev systemd
+
+if [[ ${PV} == "9999" ]] ; then
+ EGIT_REPO_URI="https://www.kismetwireless.net/git/${PN}.git"
+ inherit git-r3
+else
+ MY_P=${P/\./-}
+ MY_P=${MY_P/_beta/-BETA}
+ MY_P=${MY_P/./-R}
+ S=${WORKDIR}/${MY_P/BETA/beta}
+
+ #normally we want an official release
+ SRC_URI="https://www.kismetwireless.net/code/${MY_P}.tar.xz"
+
+ #but sometimes we want a git commit
+ #COMMIT="9ca7e469cf115469f392db7436816151867e1654"
+ #SRC_URI="https://github.com/kismetwireless/kismet/archive/${COMMIT}.tar.gz -> ${P}.tar.gz"
+ #S="${WORKDIR}/${PN}-${COMMIT}"
+
+ KEYWORDS="~amd64 ~arm ~arm64 ~ppc ~x86"
+fi
+
+DESCRIPTION="IEEE 802.11 wireless LAN sniffer"
+HOMEPAGE="https://www.kismetwireless.net"
+
+LICENSE="GPL-2"
+SLOT="0/${PV}"
+IUSE="libusb lm-sensors mqtt networkmanager +pcre protobuf rtlsdr selinux +suid ubertooth udev +wext"
+REQUIRED_USE="${PYTHON_REQUIRED_USE}"
+
+# upstream said protobuf-26.1 breaks everything
+# details are unclear at this time but adding restriction for safety
+CDEPEND="
+ ${PYTHON_DEPS}
+ mqtt? ( app-misc/mosquitto )
+ networkmanager? ( net-misc/networkmanager )
+ dev-libs/glib:2
+ dev-libs/elfutils
+ dev-libs/openssl:=
+ virtual/zlib:=
+ dev-db/sqlite:3
+ net-libs/libwebsockets:=[client,lejp]
+ kernel_linux? ( sys-libs/libcap
+ dev-libs/libnl:3
+ net-libs/libpcap
+ )
+ libusb? ( virtual/libusb:1 )
+ protobuf? ( dev-libs/protobuf-c:=
+ <dev-libs/protobuf-26:= )
+ $(python_gen_cond_dep '
+ protobuf? ( dev-python/protobuf[${PYTHON_USEDEP}] )
+ dev-python/websockets[${PYTHON_USEDEP}]
+ ')
+ lm-sensors? ( sys-apps/lm-sensors:= )
+ pcre? ( dev-libs/libpcre2:= )
+ suid? ( sys-libs/libcap )
+ ubertooth? ( net-wireless/ubertooth )
+ "
+RDEPEND="${CDEPEND}
+ acct-user/kismet
+ acct-group/kismet
+ $(python_gen_cond_dep '
+ dev-python/pyserial[${PYTHON_USEDEP}]
+ ')
+ rtlsdr? (
+ $(python_gen_cond_dep '
+ dev-python/numpy[${PYTHON_USEDEP}]
+ ')
+ net-wireless/rtl-sdr:=
+ )
+ selinux? ( sec-policy/selinux-kismet )
+"
+DEPEND="${CDEPEND}
+ dev-libs/boost
+ dev-libs/libfmt
+ sys-libs/libcap
+"
+BDEPEND="virtual/pkgconfig"
+
+src_prepare() {
+ #sed -i -e "s:^\(logtemplate\)=\(.*\):\1=/tmp/\2:" \
+ # conf/kismet_logging.conf || die
+
+ #sed -i -e 's#root#kismet#g' packaging/systemd/kismet.service.in
+
+ rm -r boost || die
+ rm -r fmt || die
+
+ # bundles mpack but I failed to successfully unbundle
+ # rm -r mpack || die
+
+ #dev-libs/jsoncpp
+ #rm -r json || die
+ #sed -i 's#"json/json.h"#<json/json.h>#' jsoncpp.cc kis_net_beast_httpd.h \
+ # log_tools/kismetdb_clean.cc log_tools/kismetdb_dump_devices.cc \
+ # log_tools/kismetdb_statistics.cc log_tools/kismetdb_to_gpx.cc \
+ # log_tools/kismetdb_to_kml.cc log_tools/kismetdb_to_pcap.cc \
+ # log_tools/kismetdb_to_wiglecsv.cc trackedcomponent.h \
+ # trackedelement.h trackedelement_workers.h
+
+ default
+
+ if [ "${PV}" = "9999" ]; then
+ sed -i -e 's#-Wno-dangling-reference##g' configure.ac || die
+ eautoreconf
+ # Untested by should fix same in non-live
+ #else
+ # sed -i -e 's#-Wno-unknown-warning-option ##g' configure || die
+ fi
+
+ #this was added to quiet macosx builds but it makes gcc builds noisier
+ sed -i -e 's#-Wno-unknown-warning-option ##g' Makefile.inc.in || die
+}
+
+src_configure() {
+ econf \
+ $(use_enable libusb libusb) \
+ $(use_enable libusb wifi-coconut) \
+ $(use_enable mqtt mosquitto) \
+ $(use_enable pcre) \
+ $(use_enable pcre require-pcre2) \
+ $(use_enable lm-sensors lmsensors) \
+ $(use_enable networkmanager libnm) \
+ $(use_enable protobuf) \
+ $(use_enable ubertooth) \
+ $(use_enable wext linuxwext) \
+ --sysconfdir=/etc/kismet \
+ --disable-optimization
+}
+
+src_install() {
+ emake DESTDIR="${D}" commoninstall
+ python_optimize
+ emake DESTDIR="${D}" forceconfigs
+ use udev && udev_dorules packaging/udev/*.rules
+
+ insinto /usr/share/${PN}
+ doins Makefile.inc
+ if [ "${PV}" = "9999" ];then
+ doins "${FILESDIR}"/gdb
+ dobin "${FILESDIR}"/kismet-gdb
+ fi
+
+ dodoc README*
+ newinitd "${FILESDIR}"/${PN}.initd-r3 kismet
+ newconfd "${FILESDIR}"/${PN}.confd-r2 kismet
+ systemd_dounit packaging/systemd/kismet.service
+}
+
+pkg_preinst() {
+ if use suid; then
+ fowners root:kismet /usr/bin/kismet_cap_linux_bluetooth
+ fowners root:kismet /usr/bin/kismet_cap_linux_wifi
+ fowners root:kismet /usr/bin/kismet_cap_pcapfile
+ # Need to set the permissions after chowning.
+ # See chown(2)
+ fperms 4550 /usr/bin/kismet_cap_linux_bluetooth
+ fperms 4550 /usr/bin/kismet_cap_linux_wifi
+ fperms 4550 /usr/bin/kismet_cap_pcapfile
+ elog "Kismet has been installed with a setuid-root helper binary"
+ elog "to enable minimal-root operation. Users need to be part of"
+ elog "the 'kismet' group to perform captures from physical devices."
+ fi
+ if ! use suid; then
+ ewarn "It is highly discouraged to run a sniffer as root,"
+ ewarn "Please consider enabling the suid use flag and adding"
+ ewarn "your user to the kismet group."
+ fi
+}
+
+migrate_config() {
+ einfo "Kismet Configuration files are now read from /etc/kismet/"
+ ewarn "Please keep user specific settings in /etc/kismet/kismet_site.conf"
+ if [ -n "$(ls "${EROOT}"/etc/kismet_*.conf 2> /dev/null)" ]; then
+ ewarn "Files at /etc/kismet_*.conf will not be read and should be removed"
+ fi
+ if [ -f "${EROOT}/etc/kismet_site.conf" ] && [ ! -f "${EROOT}/etc/kismet/kismet_site.conf" ]; then
+ mv /etc/kismet_site.conf /etc/kismet/kismet_site.conf || die "Failed to migrate kismet_site.conf to new location"
+ ewarn "Your /etc/kismet_site.conf file has been automatically moved to /etc/kismet/kismet_site.conf"
+ elif [ -f "${EROOT}/etc/kismet_site.conf" ] && [ -f "${EROOT}/etc/kismet/kismet_site.conf" ]; then
+ ewarn "Both /etc/kismet_site.conf and /etc/kismet/kismet_site.conf exist, please migrate needed bits"
+ ewarn "into /etc/kismet/kismet_site.conf and remove /etc/kismet_site.conf"
+ fi
+}
+
+pkg_postinst() {
+ if ver_replacing -lt 2019.07.2 || ver_replacing -eq 9999; then
+ migrate_config
+ fi
+ udev_reload
+}
+
+pkg_postrm() {
+ udev_reload
+}
diff --git a/net-wireless/kismet/kismet-9999.ebuild b/net-wireless/kismet/kismet-9999.ebuild
new file mode 100644
index 000000000000..00ca3f7132a2
--- /dev/null
+++ b/net-wireless/kismet/kismet-9999.ebuild
@@ -0,0 +1,202 @@
+# Copyright 1999-2025 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=8
+
+PYTHON_COMPAT=( python3_{13..14} )
+
+inherit autotools eapi9-ver python-single-r1 udev systemd
+
+if [[ ${PV} == "9999" ]] ; then
+ EGIT_REPO_URI="https://www.kismetwireless.net/git/${PN}.git"
+ inherit git-r3
+else
+ MY_P=${P/\./-}
+ MY_P=${MY_P/_beta/-BETA}
+ MY_P=${MY_P/./-R}
+ S=${WORKDIR}/${MY_P/BETA/beta}
+
+ #normally we want an official release
+ SRC_URI="https://www.kismetwireless.net/code/${MY_P}.tar.xz"
+
+ #but sometimes we want a git commit
+ #COMMIT="9ca7e469cf115469f392db7436816151867e1654"
+ #SRC_URI="https://github.com/kismetwireless/kismet/archive/${COMMIT}.tar.gz -> ${P}.tar.gz"
+ #S="${WORKDIR}/${PN}-${COMMIT}"
+
+ KEYWORDS="~amd64 ~arm ~arm64 ~ppc ~x86"
+fi
+
+DESCRIPTION="IEEE 802.11 wireless LAN sniffer"
+HOMEPAGE="https://www.kismetwireless.net"
+
+LICENSE="GPL-2"
+SLOT="0/${PV}"
+IUSE="libusb lm-sensors mqtt networkmanager +pcre protobuf rtlsdr selinux +suid ubertooth udev +wext"
+REQUIRED_USE="${PYTHON_REQUIRED_USE}"
+
+# upstream said protobuf-26.1 breaks everything
+# details are unclear at this time but adding restriction for safety
+CDEPEND="
+ ${PYTHON_DEPS}
+ mqtt? ( app-misc/mosquitto )
+ networkmanager? ( net-misc/networkmanager )
+ dev-libs/glib:2
+ dev-libs/elfutils
+ dev-libs/openssl:=
+ virtual/zlib:=
+ dev-db/sqlite:3
+ net-libs/libwebsockets:=[client,lejp]
+ kernel_linux? ( sys-libs/libcap
+ dev-libs/libnl:3
+ net-libs/libpcap
+ )
+ libusb? ( virtual/libusb:1 )
+ protobuf? ( dev-libs/protobuf-c:=
+ <dev-libs/protobuf-26:= )
+ $(python_gen_cond_dep '
+ protobuf? ( dev-python/protobuf[${PYTHON_USEDEP}] )
+ dev-python/websockets[${PYTHON_USEDEP}]
+ ')
+ lm-sensors? ( sys-apps/lm-sensors:= )
+ pcre? ( dev-libs/libpcre2:= )
+ suid? ( sys-libs/libcap )
+ ubertooth? ( net-wireless/ubertooth )
+ "
+RDEPEND="${CDEPEND}
+ acct-user/kismet
+ acct-group/kismet
+ $(python_gen_cond_dep '
+ dev-python/pyserial[${PYTHON_USEDEP}]
+ ')
+ rtlsdr? (
+ $(python_gen_cond_dep '
+ dev-python/numpy[${PYTHON_USEDEP}]
+ ')
+ net-wireless/rtl-sdr:=
+ )
+ selinux? ( sec-policy/selinux-kismet )
+"
+DEPEND="${CDEPEND}
+ dev-libs/boost
+ dev-libs/libfmt
+ sys-libs/libcap
+"
+BDEPEND="virtual/pkgconfig"
+
+src_prepare() {
+ #sed -i -e "s:^\(logtemplate\)=\(.*\):\1=/tmp/\2:" \
+ # conf/kismet_logging.conf || die
+
+ #sed -i -e 's#root#kismet#g' packaging/systemd/kismet.service.in
+
+ rm -r boost || die
+ rm -r fmt || die
+
+ # bundles mpack but I failed to successfully unbundle
+ # rm -r mpack || die
+
+ #dev-libs/jsoncpp
+ #rm -r json || die
+ #sed -i 's#"json/json.h"#<json/json.h>#' jsoncpp.cc kis_net_beast_httpd.h \
+ # log_tools/kismetdb_clean.cc log_tools/kismetdb_dump_devices.cc \
+ # log_tools/kismetdb_statistics.cc log_tools/kismetdb_to_gpx.cc \
+ # log_tools/kismetdb_to_kml.cc log_tools/kismetdb_to_pcap.cc \
+ # log_tools/kismetdb_to_wiglecsv.cc trackedcomponent.h \
+ # trackedelement.h trackedelement_workers.h
+
+ default
+
+ if [ "${PV}" = "9999" ]; then
+ sed -i -e 's#-Wno-dangling-reference##g' configure.ac || die
+ eautoreconf
+ # Untested by should fix same in non-live
+ #else
+ # sed -i -e 's#-Wno-unknown-warning-option ##g' configure || die
+ fi
+
+ #this was added to quiet macosx builds but it makes gcc builds noisier
+ sed -i -e 's#-Wno-unknown-warning-option ##g' Makefile.inc.in || die
+}
+
+src_configure() {
+ econf \
+ $(use_enable libusb libusb) \
+ $(use_enable libusb wifi-coconut) \
+ $(use_enable mqtt mosquitto) \
+ $(use_enable pcre) \
+ $(use_enable pcre require-pcre2) \
+ $(use_enable lm-sensors lmsensors) \
+ $(use_enable networkmanager libnm) \
+ $(use_enable protobuf) \
+ $(use_enable ubertooth) \
+ $(use_enable wext linuxwext) \
+ --sysconfdir=/etc/kismet \
+ --disable-optimization
+}
+
+src_install() {
+ emake DESTDIR="${D}" commoninstall
+ python_optimize
+ emake DESTDIR="${D}" forceconfigs
+ use udev && udev_dorules packaging/udev/*.rules
+
+ insinto /usr/share/${PN}
+ doins Makefile.inc
+ if [ "${PV}" = "9999" ];then
+ doins "${FILESDIR}"/gdb
+ dobin "${FILESDIR}"/kismet-gdb
+ fi
+
+ dodoc README*
+ newinitd "${FILESDIR}"/${PN}.initd-r3 kismet
+ newconfd "${FILESDIR}"/${PN}.confd-r2 kismet
+ systemd_dounit packaging/systemd/kismet.service
+}
+
+pkg_preinst() {
+ if use suid; then
+ fowners root:kismet /usr/bin/kismet_cap_linux_bluetooth
+ fowners root:kismet /usr/bin/kismet_cap_linux_wifi
+ fowners root:kismet /usr/bin/kismet_cap_pcapfile
+ # Need to set the permissions after chowning.
+ # See chown(2)
+ fperms 4550 /usr/bin/kismet_cap_linux_bluetooth
+ fperms 4550 /usr/bin/kismet_cap_linux_wifi
+ fperms 4550 /usr/bin/kismet_cap_pcapfile
+ elog "Kismet has been installed with a setuid-root helper binary"
+ elog "to enable minimal-root operation. Users need to be part of"
+ elog "the 'kismet' group to perform captures from physical devices."
+ fi
+ if ! use suid; then
+ ewarn "It is highly discouraged to run a sniffer as root,"
+ ewarn "Please consider enabling the suid use flag and adding"
+ ewarn "your user to the kismet group."
+ fi
+}
+
+migrate_config() {
+ einfo "Kismet Configuration files are now read from /etc/kismet/"
+ ewarn "Please keep user specific settings in /etc/kismet/kismet_site.conf"
+ if [ -n "$(ls "${EROOT}"/etc/kismet_*.conf 2> /dev/null)" ]; then
+ ewarn "Files at /etc/kismet_*.conf will not be read and should be removed"
+ fi
+ if [ -f "${EROOT}/etc/kismet_site.conf" ] && [ ! -f "${EROOT}/etc/kismet/kismet_site.conf" ]; then
+ mv /etc/kismet_site.conf /etc/kismet/kismet_site.conf || die "Failed to migrate kismet_site.conf to new location"
+ ewarn "Your /etc/kismet_site.conf file has been automatically moved to /etc/kismet/kismet_site.conf"
+ elif [ -f "${EROOT}/etc/kismet_site.conf" ] && [ -f "${EROOT}/etc/kismet/kismet_site.conf" ]; then
+ ewarn "Both /etc/kismet_site.conf and /etc/kismet/kismet_site.conf exist, please migrate needed bits"
+ ewarn "into /etc/kismet/kismet_site.conf and remove /etc/kismet_site.conf"
+ fi
+}
+
+pkg_postinst() {
+ if ver_replacing -lt 2019.07.2 || ver_replacing -eq 9999; then
+ migrate_config
+ fi
+ udev_reload
+}
+
+pkg_postrm() {
+ udev_reload
+}
diff --git a/net-wireless/kismet/metadata.xml b/net-wireless/kismet/metadata.xml
new file mode 100644
index 000000000000..d0c5f857e07b
--- /dev/null
+++ b/net-wireless/kismet/metadata.xml
@@ -0,0 +1,30 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE pkgmetadata SYSTEM "https://docs.baldeagleos.com/dtd/metadata.dtd">
+<pkgmetadata>
+ <maintainer type="person">
+ <email>zerochaos@gentoo.org</email>
+ <name>Rick Farina</name>
+ </maintainer>
+ <use>
+ <flag name="libusb">Support libusb based capture sources such as mousejack, cc2540(ble), and nrf51822(ble)</flag>
+ <flag name="mqtt">Enable MQTT support</flag>
+ <flag name="pcre">Build with pcre support</flag>
+ <flag name="protobuf">Support old protobuf message passing in case of remote capture sources which are not up to date.</flag>
+ <flag name="rtlsdr">Enable rtlsdr based kismet capture sources</flag>
+ <flag name="suid">
+ Install a setuid root helper binary with limited functionality;
+ this allows running kismet as a normal user, significantly
+ reducing security risks
+ </flag>
+ <flag name="ubertooth">Enable capture source for ubertooth to sniff bluetooth low energy</flag>
+ <flag name="wext">
+ Enable building kismet with support for the deprecated Linux Wireless Extensions.
+ This is required for some out of tree and staging drivers, and kismet has not
+ been well tested with it disabled, so it defaults to on.
+ </flag>
+ </use>
+ <upstream>
+ <remote-id type="cpe">cpe:/a:kismet:kismet</remote-id>
+ </upstream>
+ <origin>baldeagleos-repo</origin>
+</pkgmetadata>
diff --git a/net-wireless/kismetmobiledashboard/Manifest b/net-wireless/kismetmobiledashboard/Manifest
new file mode 100644
index 000000000000..234ef3e201e1
--- /dev/null
+++ b/net-wireless/kismetmobiledashboard/Manifest
@@ -0,0 +1 @@
+DIST kismetmobiledashboard-1.5_beta1.tar.gz 2305979 BLAKE2B 05e1f41b02688d2d432ff805b454fc948d387111ab2cf45a7ef72e9421a410a2fe479eca5a9f7eb56f58c807aeb47c1cc0a75c135ee3fb6faee2b979cc89894b SHA512 6abb5bd89b80ed4012d119d7111128bca2625d63f1cb36ab50b79e68b14f355b4c788b1290a720bb51268903b428a42dfffcb4373a2170a3d32aef5c140a9e91
diff --git a/net-wireless/kismetmobiledashboard/kismetmobiledashboard-1.5_beta1-r2.ebuild b/net-wireless/kismetmobiledashboard/kismetmobiledashboard-1.5_beta1-r2.ebuild
new file mode 100644
index 000000000000..970abb1aff48
--- /dev/null
+++ b/net-wireless/kismetmobiledashboard/kismetmobiledashboard-1.5_beta1-r2.ebuild
@@ -0,0 +1,36 @@
+# Copyright 2019-2023 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=8
+
+DESCRIPTION="Mobile UI for kismet"
+HOMEPAGE="https://github.com/elkentaro/KismetMobileDashboard"
+if [ "${PV}" = "9999" ]; then
+ inherit git-r3
+ EGIT_REPO_URI="https://github.com/elkentaro/KismetMobileDashboard.git"
+else
+ KEYWORDS="~amd64 ~arm ~arm64 ~ppc ~x86"
+ SRC_URI="https://github.com/elkentaro/KismetMobileDashboard/archive/V1.5-beta.1.tar.gz -> ${P}.tar.gz"
+ S="${WORKDIR}/KismetMobileDashboard-1.5-beta.1"
+fi
+
+LICENSE="GPL-2"
+SLOT="0"
+IUSE=""
+
+DEPEND="net-wireless/kismet"
+RDEPEND="${DEPEND}"
+BDEPEND=""
+
+src_prepare() {
+ sed -i 's#\$(INSTALL)#install#' Makefile
+ default
+}
+
+src_compile() {
+ KIS_SRC_DIR="/usr/share/kismet" emake
+}
+
+src_install() {
+ DESTDIR="${ED}" KIS_SRC_DIR="/usr/share/kismet" emake install
+}
diff --git a/net-wireless/kismetmobiledashboard/kismetmobiledashboard-9999.ebuild b/net-wireless/kismetmobiledashboard/kismetmobiledashboard-9999.ebuild
new file mode 100644
index 000000000000..970abb1aff48
--- /dev/null
+++ b/net-wireless/kismetmobiledashboard/kismetmobiledashboard-9999.ebuild
@@ -0,0 +1,36 @@
+# Copyright 2019-2023 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=8
+
+DESCRIPTION="Mobile UI for kismet"
+HOMEPAGE="https://github.com/elkentaro/KismetMobileDashboard"
+if [ "${PV}" = "9999" ]; then
+ inherit git-r3
+ EGIT_REPO_URI="https://github.com/elkentaro/KismetMobileDashboard.git"
+else
+ KEYWORDS="~amd64 ~arm ~arm64 ~ppc ~x86"
+ SRC_URI="https://github.com/elkentaro/KismetMobileDashboard/archive/V1.5-beta.1.tar.gz -> ${P}.tar.gz"
+ S="${WORKDIR}/KismetMobileDashboard-1.5-beta.1"
+fi
+
+LICENSE="GPL-2"
+SLOT="0"
+IUSE=""
+
+DEPEND="net-wireless/kismet"
+RDEPEND="${DEPEND}"
+BDEPEND=""
+
+src_prepare() {
+ sed -i 's#\$(INSTALL)#install#' Makefile
+ default
+}
+
+src_compile() {
+ KIS_SRC_DIR="/usr/share/kismet" emake
+}
+
+src_install() {
+ DESTDIR="${ED}" KIS_SRC_DIR="/usr/share/kismet" emake install
+}
diff --git a/net-wireless/kismetmobiledashboard/metadata.xml b/net-wireless/kismetmobiledashboard/metadata.xml
new file mode 100644
index 000000000000..22d29be8fc24
--- /dev/null
+++ b/net-wireless/kismetmobiledashboard/metadata.xml
@@ -0,0 +1,9 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE pkgmetadata SYSTEM "https://docs.baldeagleos.com/dtd/metadata.dtd">
+<pkgmetadata>
+ <maintainer type="person">
+ <email>zerochaos@gentoo.org</email>
+ <name>Rick Farina</name>
+ </maintainer>
+ <origin>baldeagleos-repo</origin>
+</pkgmetadata>
diff --git a/net-wireless/liblms7002m/Manifest b/net-wireless/liblms7002m/Manifest
new file mode 100644
index 000000000000..21974bf92c9b
--- /dev/null
+++ b/net-wireless/liblms7002m/Manifest
@@ -0,0 +1 @@
+DIST liblms7002m-0.0_p20200518.tar.gz 31413 BLAKE2B 8365734a60bba43597a8337d186021d92685dce068049817800176801aacf50f2eea0bc2cec62d406eb33393fd2252b22789a6b5b38b88748a5ae94d28c9243a SHA512 c684dca2652680f25c6ac089f0283899976b7f1075cfa11ff230ac4b2307357c3ef66e601eb8c97de5315738e08ff14a6dbd345d8c50df91e91ded2bb41f8988
diff --git a/net-wireless/liblms7002m/files/liblms7002m-cmake4.patch b/net-wireless/liblms7002m/files/liblms7002m-cmake4.patch
new file mode 100644
index 000000000000..034faebb0555
--- /dev/null
+++ b/net-wireless/liblms7002m/files/liblms7002m-cmake4.patch
@@ -0,0 +1,13 @@
+diff --git a/CMakeLists.txt b/CMakeLists.txt
+index 8822807..208ac35 100644
+--- a/CMakeLists.txt
++++ b/CMakeLists.txt
+@@ -1,7 +1,7 @@
+ project(liblms7002m C)
+
+ set(CMAKE_MODULE_PATH "${CMAKE_CURRENT_SOURCE_DIR}/cmake")
+-cmake_minimum_required(VERSION 2.8)
++cmake_minimum_required(VERSION 3.10.0)
+
+ # Set the version information here
+ set(MAJOR_VERSION 0)
diff --git a/net-wireless/liblms7002m/liblms7002m-0.0_p20200518-r3.ebuild b/net-wireless/liblms7002m/liblms7002m-0.0_p20200518-r3.ebuild
new file mode 100644
index 000000000000..1e87da694137
--- /dev/null
+++ b/net-wireless/liblms7002m/liblms7002m-0.0_p20200518-r3.ebuild
@@ -0,0 +1,41 @@
+# Copyright 1999-2026 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=8
+
+PYTHON_COMPAT=( python3_{13..14} )
+inherit cmake python-any-r1
+
+DESCRIPTION="Compact LMS7002M library suitable for resource-limited MCUs"
+HOMEPAGE="https://github.com/xtrx-sdr/liblms7002m"
+LICENSE="LGPL-2.1"
+SLOT="0/${PV}"
+
+if [[ ${PV} == *9999 ]]; then
+ EGIT_REPO_URI="https://github.com/xtrx-sdr/liblms7002m.git"
+ inherit git-r3
+else
+ COMMIT="b07761b7386181f0e6a35158456b75bce14f2aca"
+ SRC_URI="https://github.com/xtrx-sdr/liblms7002m/archive/${COMMIT}.tar.gz -> ${P}.tar.gz"
+ S="${WORKDIR}/${PN}-${COMMIT}"
+ KEYWORDS="~amd64 ~x86"
+fi
+
+BDEPEND="
+ $(python_gen_any_dep '
+ dev-python/cheetah3[${PYTHON_USEDEP}]
+ ')
+"
+
+PATCHES=( "${FILESDIR}"/${PN}-cmake4.patch )
+
+python_check_deps() {
+ python_has_version "dev-python/cheetah3[${PYTHON_USEDEP}]"
+}
+
+src_configure() {
+ local mycmakeargs=(
+ -DPYTHON_EXECUTABLE="${PYTHON}"
+ )
+ cmake_src_configure
+}
diff --git a/net-wireless/liblms7002m/liblms7002m-9999.ebuild b/net-wireless/liblms7002m/liblms7002m-9999.ebuild
new file mode 100644
index 000000000000..1e87da694137
--- /dev/null
+++ b/net-wireless/liblms7002m/liblms7002m-9999.ebuild
@@ -0,0 +1,41 @@
+# Copyright 1999-2026 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=8
+
+PYTHON_COMPAT=( python3_{13..14} )
+inherit cmake python-any-r1
+
+DESCRIPTION="Compact LMS7002M library suitable for resource-limited MCUs"
+HOMEPAGE="https://github.com/xtrx-sdr/liblms7002m"
+LICENSE="LGPL-2.1"
+SLOT="0/${PV}"
+
+if [[ ${PV} == *9999 ]]; then
+ EGIT_REPO_URI="https://github.com/xtrx-sdr/liblms7002m.git"
+ inherit git-r3
+else
+ COMMIT="b07761b7386181f0e6a35158456b75bce14f2aca"
+ SRC_URI="https://github.com/xtrx-sdr/liblms7002m/archive/${COMMIT}.tar.gz -> ${P}.tar.gz"
+ S="${WORKDIR}/${PN}-${COMMIT}"
+ KEYWORDS="~amd64 ~x86"
+fi
+
+BDEPEND="
+ $(python_gen_any_dep '
+ dev-python/cheetah3[${PYTHON_USEDEP}]
+ ')
+"
+
+PATCHES=( "${FILESDIR}"/${PN}-cmake4.patch )
+
+python_check_deps() {
+ python_has_version "dev-python/cheetah3[${PYTHON_USEDEP}]"
+}
+
+src_configure() {
+ local mycmakeargs=(
+ -DPYTHON_EXECUTABLE="${PYTHON}"
+ )
+ cmake_src_configure
+}
diff --git a/net-wireless/liblms7002m/metadata.xml b/net-wireless/liblms7002m/metadata.xml
new file mode 100644
index 000000000000..484ffb011945
--- /dev/null
+++ b/net-wireless/liblms7002m/metadata.xml
@@ -0,0 +1,9 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE pkgmetadata SYSTEM "https://docs.baldeagleos.com/dtd/metadata.dtd">
+<pkgmetadata>
+ <maintainer type="project">
+ <email>radio@gentoo.org</email>
+ <name>Radio</name>
+ </maintainer>
+ <origin>baldeagleos-repo</origin>
+</pkgmetadata>
diff --git a/net-wireless/libusb3380/Manifest b/net-wireless/libusb3380/Manifest
new file mode 100644
index 000000000000..9d2c19a0290d
--- /dev/null
+++ b/net-wireless/libusb3380/Manifest
@@ -0,0 +1 @@
+DIST libusb3380-0.0_p20190125.tar.gz 30572 BLAKE2B 95da2e1e9355f781293a01b2ee4535df931d9cbdc67c204c6ba3bc4f66c7a3dc9d9b8f1883ce92a35e350ea881a4e855926837ab4aa211c1fecd63721386b963 SHA512 e433d40b4176fe5e884035e9364d1a52b40f8495a34034f68f196bbad48d344eff1674f45f7e5afbd3045bf50285c8c0dd021e405ff764b638a4b3640d29fd9a
diff --git a/net-wireless/libusb3380/libusb3380-0.0_p20190125-r1.ebuild b/net-wireless/libusb3380/libusb3380-0.0_p20190125-r1.ebuild
new file mode 100644
index 000000000000..9ad4e81d3abc
--- /dev/null
+++ b/net-wireless/libusb3380/libusb3380-0.0_p20190125-r1.ebuild
@@ -0,0 +1,29 @@
+# Copyright 2020-2025 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=8
+inherit cmake
+
+DESCRIPTION="USB3380 abstraction layer for libusb"
+HOMEPAGE="https://github.com/xtrx-sdr/libusb3380"
+if [ "${PV}" = "9999" ]; then
+ inherit git-r3
+ EGIT_REPO_URI="https://github.com/xtrx-sdr/libusb3380.git"
+else
+ COMMIT="c83d1e93eb3a5b8b6a9db41c2613b206f344f825"
+ SRC_URI="https://github.com/xtrx-sdr/libusb3380/archive/${COMMIT}.tar.gz -> ${P}.tar.gz"
+ S="${WORKDIR}/${PN}-${COMMIT}"
+ KEYWORDS="~amd64 ~x86"
+fi
+
+LICENSE="LGPL-2.1"
+SLOT="0"
+
+DEPEND="virtual/libusb:1"
+RDEPEND="${DEPEND}"
+
+src_prepare() {
+ # fix build with cmake 4
+ sed -i -e "s/VERSION 2.8/VERSION 3.10/" CMakeLists.txt || die
+ cmake_src_prepare
+}
diff --git a/net-wireless/libusb3380/libusb3380-9999.ebuild b/net-wireless/libusb3380/libusb3380-9999.ebuild
new file mode 100644
index 000000000000..9ad4e81d3abc
--- /dev/null
+++ b/net-wireless/libusb3380/libusb3380-9999.ebuild
@@ -0,0 +1,29 @@
+# Copyright 2020-2025 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=8
+inherit cmake
+
+DESCRIPTION="USB3380 abstraction layer for libusb"
+HOMEPAGE="https://github.com/xtrx-sdr/libusb3380"
+if [ "${PV}" = "9999" ]; then
+ inherit git-r3
+ EGIT_REPO_URI="https://github.com/xtrx-sdr/libusb3380.git"
+else
+ COMMIT="c83d1e93eb3a5b8b6a9db41c2613b206f344f825"
+ SRC_URI="https://github.com/xtrx-sdr/libusb3380/archive/${COMMIT}.tar.gz -> ${P}.tar.gz"
+ S="${WORKDIR}/${PN}-${COMMIT}"
+ KEYWORDS="~amd64 ~x86"
+fi
+
+LICENSE="LGPL-2.1"
+SLOT="0"
+
+DEPEND="virtual/libusb:1"
+RDEPEND="${DEPEND}"
+
+src_prepare() {
+ # fix build with cmake 4
+ sed -i -e "s/VERSION 2.8/VERSION 3.10/" CMakeLists.txt || die
+ cmake_src_prepare
+}
diff --git a/net-wireless/libusb3380/metadata.xml b/net-wireless/libusb3380/metadata.xml
new file mode 100644
index 000000000000..484ffb011945
--- /dev/null
+++ b/net-wireless/libusb3380/metadata.xml
@@ -0,0 +1,9 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE pkgmetadata SYSTEM "https://docs.baldeagleos.com/dtd/metadata.dtd">
+<pkgmetadata>
+ <maintainer type="project">
+ <email>radio@gentoo.org</email>
+ <name>Radio</name>
+ </maintainer>
+ <origin>baldeagleos-repo</origin>
+</pkgmetadata>
diff --git a/net-wireless/libxtrx/Manifest b/net-wireless/libxtrx/Manifest
new file mode 100644
index 000000000000..fb22b2a121e5
--- /dev/null
+++ b/net-wireless/libxtrx/Manifest
@@ -0,0 +1 @@
+DIST libxtrx-0.0_p20201202.tar.gz 78058 BLAKE2B 5d2bcd3857226208158abfd8a6790ecc1204e59336f81cac90368da2f7628c9fe2ec3b8b794afe66720aa53455f1b7ead9b2f6fc36edd36718452c294b6e7aa5 SHA512 bc32c0cdc9d19bda62582081b950b50698e000c42cbfd46904287bb12d216d875d636579cfbd68d94d83e67df655825c0f88697854cc134d2cef5a20d614f73f
diff --git a/net-wireless/libxtrx/files/libxtrx-cmake4.patch b/net-wireless/libxtrx/files/libxtrx-cmake4.patch
new file mode 100644
index 000000000000..88bd6ff0f855
--- /dev/null
+++ b/net-wireless/libxtrx/files/libxtrx-cmake4.patch
@@ -0,0 +1,32 @@
+diff --git a/CMakeLists.txt b/CMakeLists.txt
+index 4615124..68551c8 100644
+--- a/CMakeLists.txt
++++ b/CMakeLists.txt
+@@ -1,7 +1,7 @@
++cmake_minimum_required(VERSION 3.10)
+ project(libxtrx C)
+ set(CMAKE_MODULE_PATH "${CMAKE_CURRENT_SOURCE_DIR}/cmake")
+
+-cmake_minimum_required(VERSION 2.8)
+
+
+ # Set the version information here
+diff --git a/examples/xtrx_fft/CMakeLists.txt b/examples/xtrx_fft/CMakeLists.txt
+index 2d1662a..eb044c5 100644
+--- a/examples/xtrx_fft/CMakeLists.txt
++++ b/examples/xtrx_fft/CMakeLists.txt
+@@ -1,4 +1,4 @@
+-cmake_minimum_required(VERSION 3.1.0)
++cmake_minimum_required(VERSION 3.10)
+ project(fft_wnd)
+
+ list(APPEND CMAKE_MODULE_PATH ${CMAKE_CURRENT_SOURCE_DIR})
+diff --git a/soapy/CMakeLists.txt b/soapy/CMakeLists.txt
+index edfe657..167887e 100644
+--- a/soapy/CMakeLists.txt
++++ b/soapy/CMakeLists.txt
+@@ -1,3 +1,4 @@
++cmake_minimum_required(VERSION 3.10)
+ set(CMAKE_CXX_STANDARD 11)
+ project(soapyxtrx C CXX)
+
diff --git a/net-wireless/libxtrx/libxtrx-0.0_p20201202-r1.ebuild b/net-wireless/libxtrx/libxtrx-0.0_p20201202-r1.ebuild
new file mode 100644
index 000000000000..96835d783b11
--- /dev/null
+++ b/net-wireless/libxtrx/libxtrx-0.0_p20201202-r1.ebuild
@@ -0,0 +1,40 @@
+# Copyright 1999-2025 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=8
+
+inherit cmake
+
+DESCRIPTION="High-level XTRX API library"
+HOMEPAGE="https://github.com/xtrx-sdr/libxtrx"
+LICENSE="LGPL-2.1"
+SLOT="0/${PV}"
+
+if [[ ${PV} =~ "9999" ]]; then
+ EGIT_REPO_URI="https://github.com/xtrx-sdr/libxtrx.git"
+ inherit git-r3
+else
+ COMMIT="acb0b1cf7ab92744034767a04c1d4b4c281b840f"
+ SRC_URI="https://github.com/xtrx-sdr/libxtrx/archive/${COMMIT}.tar.gz -> ${P}.tar.gz"
+ S="${WORKDIR}/${PN}-${COMMIT}"
+ KEYWORDS="~amd64 ~x86"
+fi
+
+RDEPEND="
+ net-wireless/libxtrxll:=
+ net-wireless/libxtrxdsp:=
+ net-wireless/liblms7002m:=
+"
+# soapy? ( net-wireless/soapysdr )
+DEPEND="${RDEPEND}"
+
+PATCHES=( "${FILESDIR}"/${PN}-cmake4.patch )
+
+src_configure() {
+ #fails to build, not sure why
+ #-DENABLE_SOAPY="$(usex soapy ON OFF)"
+ local mycmakeargs=(
+ -DENABLE_SOAPY=OFF
+ )
+ cmake_src_configure
+}
diff --git a/net-wireless/libxtrx/libxtrx-9999.ebuild b/net-wireless/libxtrx/libxtrx-9999.ebuild
new file mode 100644
index 000000000000..96835d783b11
--- /dev/null
+++ b/net-wireless/libxtrx/libxtrx-9999.ebuild
@@ -0,0 +1,40 @@
+# Copyright 1999-2025 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=8
+
+inherit cmake
+
+DESCRIPTION="High-level XTRX API library"
+HOMEPAGE="https://github.com/xtrx-sdr/libxtrx"
+LICENSE="LGPL-2.1"
+SLOT="0/${PV}"
+
+if [[ ${PV} =~ "9999" ]]; then
+ EGIT_REPO_URI="https://github.com/xtrx-sdr/libxtrx.git"
+ inherit git-r3
+else
+ COMMIT="acb0b1cf7ab92744034767a04c1d4b4c281b840f"
+ SRC_URI="https://github.com/xtrx-sdr/libxtrx/archive/${COMMIT}.tar.gz -> ${P}.tar.gz"
+ S="${WORKDIR}/${PN}-${COMMIT}"
+ KEYWORDS="~amd64 ~x86"
+fi
+
+RDEPEND="
+ net-wireless/libxtrxll:=
+ net-wireless/libxtrxdsp:=
+ net-wireless/liblms7002m:=
+"
+# soapy? ( net-wireless/soapysdr )
+DEPEND="${RDEPEND}"
+
+PATCHES=( "${FILESDIR}"/${PN}-cmake4.patch )
+
+src_configure() {
+ #fails to build, not sure why
+ #-DENABLE_SOAPY="$(usex soapy ON OFF)"
+ local mycmakeargs=(
+ -DENABLE_SOAPY=OFF
+ )
+ cmake_src_configure
+}
diff --git a/net-wireless/libxtrx/metadata.xml b/net-wireless/libxtrx/metadata.xml
new file mode 100644
index 000000000000..484ffb011945
--- /dev/null
+++ b/net-wireless/libxtrx/metadata.xml
@@ -0,0 +1,9 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE pkgmetadata SYSTEM "https://docs.baldeagleos.com/dtd/metadata.dtd">
+<pkgmetadata>
+ <maintainer type="project">
+ <email>radio@gentoo.org</email>
+ <name>Radio</name>
+ </maintainer>
+ <origin>baldeagleos-repo</origin>
+</pkgmetadata>
diff --git a/net-wireless/libxtrxdsp/Manifest b/net-wireless/libxtrxdsp/Manifest
new file mode 100644
index 000000000000..936d74a1e809
--- /dev/null
+++ b/net-wireless/libxtrxdsp/Manifest
@@ -0,0 +1 @@
+DIST libxtrxdsp-0.0_p20200830.tar.gz 27269 BLAKE2B 8d62b46467c5f4714acaeb0c828281061a77c0ba5bd2c774989b826c14d11b999076f9ca4c5b970771011ccd2d6438cb1c32c27dc5ade727d125e3577541aa3c SHA512 ad2bea31ab348d8c27c951813bff97ff5411b4f908d880f6e592290390b442d7827aae876d70e2cac7304f1d20a9d8c320867b92b9bc3df7b3f27c439bdc0a8e
diff --git a/net-wireless/libxtrxdsp/libxtrxdsp-0.0_p20200830-r1.ebuild b/net-wireless/libxtrxdsp/libxtrxdsp-0.0_p20200830-r1.ebuild
new file mode 100644
index 000000000000..dd5e896846d3
--- /dev/null
+++ b/net-wireless/libxtrxdsp/libxtrxdsp-0.0_p20200830-r1.ebuild
@@ -0,0 +1,26 @@
+# Copyright 2020-2025 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=8
+inherit cmake
+
+DESCRIPTION="DSP specific function for SDR in general and XTRX in specific"
+HOMEPAGE="https://github.com/xtrx-sdr/libxtrxdsp"
+if [ "${PV}" = "9999" ]; then
+ inherit git-r3
+ EGIT_REPO_URI="https://github.com/xtrx-sdr/libxtrxdsp.git"
+else
+ COMMIT="eec28640c0ebd5639b642f07b310a0a0d02d9834"
+ SRC_URI="https://github.com/xtrx-sdr/libxtrxdsp/archive/${COMMIT}.tar.gz -> ${P}.tar.gz"
+ S="${WORKDIR}/${PN}-${COMMIT}"
+ KEYWORDS="~amd64 ~x86"
+fi
+
+LICENSE="LGPL-2.1"
+SLOT="0"
+
+src_prepare() {
+ # fix build with cmake 4
+ sed -i -e "s/VERSION 2.8/VERSION 3.10/" CMakeLists.txt || die
+ cmake_src_prepare
+}
diff --git a/net-wireless/libxtrxdsp/libxtrxdsp-9999.ebuild b/net-wireless/libxtrxdsp/libxtrxdsp-9999.ebuild
new file mode 100644
index 000000000000..dd5e896846d3
--- /dev/null
+++ b/net-wireless/libxtrxdsp/libxtrxdsp-9999.ebuild
@@ -0,0 +1,26 @@
+# Copyright 2020-2025 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=8
+inherit cmake
+
+DESCRIPTION="DSP specific function for SDR in general and XTRX in specific"
+HOMEPAGE="https://github.com/xtrx-sdr/libxtrxdsp"
+if [ "${PV}" = "9999" ]; then
+ inherit git-r3
+ EGIT_REPO_URI="https://github.com/xtrx-sdr/libxtrxdsp.git"
+else
+ COMMIT="eec28640c0ebd5639b642f07b310a0a0d02d9834"
+ SRC_URI="https://github.com/xtrx-sdr/libxtrxdsp/archive/${COMMIT}.tar.gz -> ${P}.tar.gz"
+ S="${WORKDIR}/${PN}-${COMMIT}"
+ KEYWORDS="~amd64 ~x86"
+fi
+
+LICENSE="LGPL-2.1"
+SLOT="0"
+
+src_prepare() {
+ # fix build with cmake 4
+ sed -i -e "s/VERSION 2.8/VERSION 3.10/" CMakeLists.txt || die
+ cmake_src_prepare
+}
diff --git a/net-wireless/libxtrxdsp/metadata.xml b/net-wireless/libxtrxdsp/metadata.xml
new file mode 100644
index 000000000000..484ffb011945
--- /dev/null
+++ b/net-wireless/libxtrxdsp/metadata.xml
@@ -0,0 +1,9 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE pkgmetadata SYSTEM "https://docs.baldeagleos.com/dtd/metadata.dtd">
+<pkgmetadata>
+ <maintainer type="project">
+ <email>radio@gentoo.org</email>
+ <name>Radio</name>
+ </maintainer>
+ <origin>baldeagleos-repo</origin>
+</pkgmetadata>
diff --git a/net-wireless/libxtrxll/Manifest b/net-wireless/libxtrxll/Manifest
new file mode 100644
index 000000000000..3bf81a89103d
--- /dev/null
+++ b/net-wireless/libxtrxll/Manifest
@@ -0,0 +1 @@
+DIST libxtrxll-0.0_p20201202.tar.gz 68732 BLAKE2B f1eeeb3cd9368224a512ade5389cd5f289613e47736f2577cf9a3a7266ee6a8159e60b1523414277fb8dbdcc206d2a8b53b6a72a591af54d40f3175f2192c139 SHA512 b9c32db32e7782db5831b73ea34d801f2b09cc42773db0ea3504f500717c11303083e1b9808ef9d0c6efd19ce0dab2f97f79ef20e9b892fa15a42c52cdeb4db1
diff --git a/net-wireless/libxtrxll/files/libxtrxll-cmake4.patch b/net-wireless/libxtrxll/files/libxtrxll-cmake4.patch
new file mode 100644
index 000000000000..a0316e9ca4a3
--- /dev/null
+++ b/net-wireless/libxtrxll/files/libxtrxll-cmake4.patch
@@ -0,0 +1,13 @@
+diff --git a/CMakeLists.txt b/CMakeLists.txt
+index 07a8ba1..d9021cb 100644
+--- a/CMakeLists.txt
++++ b/CMakeLists.txt
+@@ -1,7 +1,7 @@
++cmake_minimum_required(VERSION 3.10)
+ project(libxtrxll C)
+
+ set(CMAKE_MODULE_PATH "${CMAKE_CURRENT_SOURCE_DIR}/cmake")
+-cmake_minimum_required(VERSION 2.8)
+
+ # Set the version information here
+ set(MAJOR_VERSION 0)
diff --git a/net-wireless/libxtrxll/libxtrxll-0.0_p20201202-r1.ebuild b/net-wireless/libxtrxll/libxtrxll-0.0_p20201202-r1.ebuild
new file mode 100644
index 000000000000..39f1183fe7ad
--- /dev/null
+++ b/net-wireless/libxtrxll/libxtrxll-0.0_p20201202-r1.ebuild
@@ -0,0 +1,44 @@
+# Copyright 1999-2025 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=8
+
+inherit cmake flag-o-matic
+
+DESCRIPTION="Low-level XTRX hardware abstraction library"
+HOMEPAGE="https://github.com/xtrx-sdr/libxtrxll"
+LICENSE="LGPL-2.1"
+SLOT="0/${PV}"
+
+if [[ ${PV} =~ "9999" ]]; then
+ EGIT_REPO_URI="https://github.com/xtrx-sdr/libxtrxll.git"
+ inherit git-r3
+else
+ COMMIT="1b6eddfbedc700efb6f7e3c3594e43ac6ff29ea4"
+ SRC_URI="https://github.com/xtrx-sdr/libxtrxll/archive/${COMMIT}.tar.gz -> ${P}.tar.gz"
+ S="${WORKDIR}/${PN}-${COMMIT}"
+ KEYWORDS="~amd64 ~x86"
+fi
+
+IUSE="usb3380"
+
+RDEPEND="usb3380? ( net-wireless/libusb3380 )"
+DEPEND="${RDEPEND}"
+
+PATCHES=( "${FILESDIR}"/${PN}-cmake4.patch )
+
+src_configure() {
+ # -Werror=strict-aliasing
+ # https://bugs.gentoo.org/861932
+ # https://github.com/myriadrf/libxtrxll/issues/10
+ #
+ # Do not trust with LTO either
+ append-flags -fno-strict-aliasing
+ filter-lto
+
+ local mycmakeargs=(
+ -DENABLE_PCIE=ON
+ -DENABLE_USB3380="$(usex usb3380 ON OFF)"
+ )
+ cmake_src_configure
+}
diff --git a/net-wireless/libxtrxll/libxtrxll-9999.ebuild b/net-wireless/libxtrxll/libxtrxll-9999.ebuild
new file mode 100644
index 000000000000..39f1183fe7ad
--- /dev/null
+++ b/net-wireless/libxtrxll/libxtrxll-9999.ebuild
@@ -0,0 +1,44 @@
+# Copyright 1999-2025 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=8
+
+inherit cmake flag-o-matic
+
+DESCRIPTION="Low-level XTRX hardware abstraction library"
+HOMEPAGE="https://github.com/xtrx-sdr/libxtrxll"
+LICENSE="LGPL-2.1"
+SLOT="0/${PV}"
+
+if [[ ${PV} =~ "9999" ]]; then
+ EGIT_REPO_URI="https://github.com/xtrx-sdr/libxtrxll.git"
+ inherit git-r3
+else
+ COMMIT="1b6eddfbedc700efb6f7e3c3594e43ac6ff29ea4"
+ SRC_URI="https://github.com/xtrx-sdr/libxtrxll/archive/${COMMIT}.tar.gz -> ${P}.tar.gz"
+ S="${WORKDIR}/${PN}-${COMMIT}"
+ KEYWORDS="~amd64 ~x86"
+fi
+
+IUSE="usb3380"
+
+RDEPEND="usb3380? ( net-wireless/libusb3380 )"
+DEPEND="${RDEPEND}"
+
+PATCHES=( "${FILESDIR}"/${PN}-cmake4.patch )
+
+src_configure() {
+ # -Werror=strict-aliasing
+ # https://bugs.gentoo.org/861932
+ # https://github.com/myriadrf/libxtrxll/issues/10
+ #
+ # Do not trust with LTO either
+ append-flags -fno-strict-aliasing
+ filter-lto
+
+ local mycmakeargs=(
+ -DENABLE_PCIE=ON
+ -DENABLE_USB3380="$(usex usb3380 ON OFF)"
+ )
+ cmake_src_configure
+}
diff --git a/net-wireless/libxtrxll/metadata.xml b/net-wireless/libxtrxll/metadata.xml
new file mode 100644
index 000000000000..182f85b737c3
--- /dev/null
+++ b/net-wireless/libxtrxll/metadata.xml
@@ -0,0 +1,12 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE pkgmetadata SYSTEM "https://docs.baldeagleos.com/dtd/metadata.dtd">
+<pkgmetadata>
+ <maintainer type="project">
+ <email>radio@gentoo.org</email>
+ <name>Radio</name>
+ </maintainer>
+ <use>
+ <flag name="usb3380">support xtrx usb model</flag>
+ </use>
+ <origin>baldeagleos-repo</origin>
+</pkgmetadata>
diff --git a/net-wireless/limesuite/Manifest b/net-wireless/limesuite/Manifest
new file mode 100644
index 000000000000..9b28a28c9499
--- /dev/null
+++ b/net-wireless/limesuite/Manifest
@@ -0,0 +1,2 @@
+DIST limesuite-23.11.0.tar.gz 5202440 BLAKE2B da91e0463f47f51b42f4be74d07e7beb3289649b7075e2a3da9752f7222c035e823ea300e15f52bcaccfde81fbae97b44e03c3bcb0ae3ce38019e88472cecf58 SHA512 0f96f92952af4470d5a9cc407c2d25348123876eab8d589371ad6105f9871dfe6e2317e634509bfd950ffb9ae30338e6fc7936ad9030c1119be442080a5174e7
+DIST limesuite-23.11.0_p20250714.tar.gz 5203759 BLAKE2B 259c1ebc306b8a7a698971267643f170d26b6babb50cf1c380f80902632fe5fbfa8883955684a3ac39acc5fffb5b4bbcae8c1569226aa3392061b24a7cd1b8a2 SHA512 147385f90e6994dc73df96af6c26cb3e97a91b003e214ac203ebff361adb5142d78713b6222f99358e799656807d1b8a941dd249eaf7d69da0f8ba1bbdd03993
diff --git a/net-wireless/limesuite/limesuite-23.11.0-r1.ebuild b/net-wireless/limesuite/limesuite-23.11.0-r1.ebuild
new file mode 100644
index 000000000000..e7e8d34e9d19
--- /dev/null
+++ b/net-wireless/limesuite/limesuite-23.11.0-r1.ebuild
@@ -0,0 +1,47 @@
+# Copyright 2022-2025 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=8
+
+WX_GTK_VER="3.2-gtk3"
+inherit desktop cmake wxwidgets xdg
+
+DESCRIPTION="Driver and GUI for LMS7002M-based SDR platforms"
+HOMEPAGE="https://myriadrf.org/projects/component/limesdr/"
+SRC_URI="https://github.com/myriadrf/LimeSuite/archive/v${PV}.tar.gz -> ${P}.tar.gz"
+S="${WORKDIR}/LimeSuite-${PV}"
+
+LICENSE="Apache-2.0"
+SLOT="0"
+KEYWORDS="~amd64 ~x86"
+
+DEPEND="
+ x11-libs/fltk:1=
+ x11-libs/wxGTK:${WX_GTK_VER}=
+ net-wireless/soapysdr:=
+ virtual/opengl
+ virtual/libusb:1"
+RDEPEND="${DEPEND}"
+
+src_configure() {
+ setup-wxwidgets
+
+ local mycmakeargs=(
+ -DENABLE_OCTAVE=OFF
+ -DENABLE_EXAMPLES=OFF
+ )
+ cmake_src_configure
+}
+
+src_install() {
+ cmake_src_install
+
+ # https://github.com/myriadrf/LimeSuite/issues/223
+ # Upstream installs icon and desktop files to a central location and has
+ # a script to move them to the correct locations at postinst time.
+ for size in 16 22 32 48 64 128; do
+ newicon -s ${size} Desktop/lime-suite-${size}.png lime-suite.png
+ done
+ domenu Desktop/lime-suite.desktop
+ rm -r "${ED}"/usr/share/Lime/Desktop || die
+}
diff --git a/net-wireless/limesuite/limesuite-23.11.0_p20250714.ebuild b/net-wireless/limesuite/limesuite-23.11.0_p20250714.ebuild
new file mode 100644
index 000000000000..5f13924b1987
--- /dev/null
+++ b/net-wireless/limesuite/limesuite-23.11.0_p20250714.ebuild
@@ -0,0 +1,49 @@
+# Copyright 2022-2026 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=8
+
+WX_GTK_VER="3.2-gtk3"
+inherit desktop cmake wxwidgets xdg
+
+DESCRIPTION="Driver and GUI for LMS7002M-based SDR platforms"
+HOMEPAGE="https://myriadrf.org/projects/component/limesdr/"
+#SRC_URI="https://github.com/myriadrf/LimeSuite/archive/v${PV}.tar.gz -> ${P}.tar.gz"
+COMMIT_HASH="524cd2e548b11084e6f739b2dfe0f958c2e30354"
+SRC_URI="https://github.com/myriadrf/LimeSuite/archive/${COMMIT_HASH}.tar.gz -> ${P}.tar.gz"
+S="${WORKDIR}/LimeSuite-${COMMIT_HASH}"
+
+LICENSE="Apache-2.0"
+SLOT="0"
+KEYWORDS="~amd64 ~x86"
+
+DEPEND="
+ x11-libs/fltk:1=[opengl]
+ x11-libs/wxGTK:${WX_GTK_VER}=
+ net-wireless/soapysdr:=
+ virtual/opengl
+ virtual/libusb:1"
+RDEPEND="${DEPEND}"
+
+src_configure() {
+ setup-wxwidgets
+
+ local mycmakeargs=(
+ -DENABLE_OCTAVE=OFF
+ -DENABLE_EXAMPLES=OFF
+ )
+ cmake_src_configure
+}
+
+src_install() {
+ cmake_src_install
+
+ # https://github.com/myriadrf/LimeSuite/issues/223
+ # Upstream installs icon and desktop files to a central location and has
+ # a script to move them to the correct locations at postinst time.
+ for size in 16 22 32 48 64 128; do
+ newicon -s ${size} Desktop/lime-suite-${size}.png lime-suite.png
+ done
+ domenu Desktop/lime-suite.desktop
+ rm -r "${ED}"/usr/share/Lime/Desktop || die
+}
diff --git a/net-wireless/limesuite/metadata.xml b/net-wireless/limesuite/metadata.xml
new file mode 100644
index 000000000000..484ffb011945
--- /dev/null
+++ b/net-wireless/limesuite/metadata.xml
@@ -0,0 +1,9 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE pkgmetadata SYSTEM "https://docs.baldeagleos.com/dtd/metadata.dtd">
+<pkgmetadata>
+ <maintainer type="project">
+ <email>radio@gentoo.org</email>
+ <name>Radio</name>
+ </maintainer>
+ <origin>baldeagleos-repo</origin>
+</pkgmetadata>
diff --git a/net-wireless/lorcon/Manifest b/net-wireless/lorcon/Manifest
new file mode 100644
index 000000000000..c807ec44615c
--- /dev/null
+++ b/net-wireless/lorcon/Manifest
@@ -0,0 +1 @@
+DIST lorcon-2020.06.06_p20220216.tar.gz 506368 BLAKE2B 2881af0130f331b2f648c0d29b0d70516770b833ba18b5f9bf6d4eb9eaab2192034ecc840f5e2b323c0e0fb8737dd1e29525b237d95825d60e78e3200f4ac929 SHA512 3f7d5967a1af840f8f6f05872c06d908ce426e7827046b8d86267770da044b48973554ff7a0415756522332055496f00ad078fa6a25a1898d640c925834111ef
diff --git a/net-wireless/lorcon/files/lorcon-2020.06.06_p20220216-C99-decls.patch b/net-wireless/lorcon/files/lorcon-2020.06.06_p20220216-C99-decls.patch
new file mode 100644
index 000000000000..9643c0f973cf
--- /dev/null
+++ b/net-wireless/lorcon/files/lorcon-2020.06.06_p20220216-C99-decls.patch
@@ -0,0 +1,20 @@
+--- a/drv_mac80211.c
++++ b/drv_mac80211.c
+@@ -52,6 +52,7 @@
+ #include "lorcon_int.h"
+ #include "lorcon_packasm.h"
+ #include "lorcon_endian.h"
++#include "iwcontrol.h"
+
+ #ifndef IEEE80211_RADIOTAP_FLAGS
+ #define IEEE80211_RADIOTAP_FLAGS (1 << 1)
+--- a/drv_madwifing.c
++++ b/drv_madwifing.c
+@@ -48,6 +48,7 @@
+ #include "ifcontrol_linux.h"
+ #include "madwifing_control.h"
+ #include "lorcon_int.h"
++#include "lorcon_packasm.h"
+
+ /* Monitor, inject, and injmon are all the same method, make a new
+ * mwng VAP */
diff --git a/net-wireless/lorcon/lorcon-2020.06.06_p20220216-r3.ebuild b/net-wireless/lorcon/lorcon-2020.06.06_p20220216-r3.ebuild
new file mode 100644
index 000000000000..833ba48ac272
--- /dev/null
+++ b/net-wireless/lorcon/lorcon-2020.06.06_p20220216-r3.ebuild
@@ -0,0 +1,84 @@
+# Copyright 1999-2025 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=8
+
+DISTUTILS_EXT=1
+DISTUTILS_OPTIONAL=1
+DISTUTILS_USE_PEP517=setuptools
+PYTHON_COMPAT=( python3_{11..12} )
+
+inherit distutils-r1 flag-o-matic
+
+DESCRIPTION="A generic library for injecting 802.11 frames"
+HOMEPAGE="https://github.com/kismetwireless/lorcon"
+
+if [[ ${PV} == *9999 ]] ; then
+ #main repo
+ #EGIT_REPO_URI="https://www.kismetwireless.net/lorcon.git"
+ #reliable mirror
+ EGIT_REPO_URI="https://github.com/kismetwireless/lorcon.git"
+ inherit git-r3
+else
+ GIT_HASH="4a81d6aaa2c6ac7253ecd182ffe97c6c89411196"
+ SRC_URI="https://github.com/kismetwireless/lorcon/archive/${GIT_HASH}.tar.gz -> ${P}.tar.gz"
+ S="${WORKDIR}"/"${PN}-${GIT_HASH}"
+
+ KEYWORDS="amd64 arm ~arm64 ppc x86"
+fi
+
+LICENSE="GPL-2"
+SLOT="0"
+IUSE="python"
+REQUIRED_USE="python? ( ${PYTHON_REQUIRED_USE} )"
+
+RDEPEND="
+ dev-libs/libnl:3=
+ net-libs/libpcap
+ python? ( ${PYTHON_DEPS} )"
+DEPEND="${RDEPEND}"
+BDEPEND="
+ virtual/pkgconfig
+ python? ( ${DISTUTILS_DEPS} )"
+
+PATCHES=( "${FILESDIR}"/${P}-C99-decls.patch )
+
+src_prepare() {
+ default
+ use python && distutils-r1_src_prepare
+}
+
+src_compile() {
+ default
+
+ if use python; then
+ append-ldflags "-L${S}/.libs/"
+ cd pylorcon2 || die
+ distutils-r1_src_compile
+ fi
+}
+
+src_test() {
+ default
+
+ # Fails within sandbox?
+ #if use python; then
+ # cd pylorcon2 || die
+ # distutils-r1_src_test
+ #fi
+}
+
+python_test() {
+ eunittest
+}
+
+src_install() {
+ default
+
+ if use python; then
+ cd pylorcon2 || die
+ distutils-r1_src_install
+ fi
+
+ find "${ED}" -name '*.la' -delete || die
+}
diff --git a/net-wireless/lorcon/lorcon-9999.ebuild b/net-wireless/lorcon/lorcon-9999.ebuild
new file mode 100644
index 000000000000..7be97eb925c5
--- /dev/null
+++ b/net-wireless/lorcon/lorcon-9999.ebuild
@@ -0,0 +1,82 @@
+# Copyright 1999-2025 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=8
+
+DISTUTILS_EXT=1
+DISTUTILS_OPTIONAL=1
+DISTUTILS_USE_PEP517=setuptools
+PYTHON_COMPAT=( python3_{11..12} )
+
+inherit distutils-r1 flag-o-matic
+
+DESCRIPTION="A generic library for injecting 802.11 frames"
+HOMEPAGE="https://github.com/kismetwireless/lorcon"
+
+if [[ ${PV} == *9999 ]] ; then
+ #main repo
+ #EGIT_REPO_URI="https://www.kismetwireless.net/lorcon.git"
+ #reliable mirror
+ EGIT_REPO_URI="https://github.com/kismetwireless/lorcon.git"
+ inherit git-r3
+else
+ GIT_HASH="4a81d6aaa2c6ac7253ecd182ffe97c6c89411196"
+ SRC_URI="https://github.com/kismetwireless/lorcon/archive/${GIT_HASH}.tar.gz -> ${P}.tar.gz"
+ S="${WORKDIR}"/"${PN}-${GIT_HASH}"
+
+ KEYWORDS="~amd64 ~arm ~arm64 ~ppc ~x86"
+fi
+
+LICENSE="GPL-2"
+SLOT="0"
+IUSE="python"
+REQUIRED_USE="python? ( ${PYTHON_REQUIRED_USE} )"
+
+RDEPEND="
+ dev-libs/libnl:3=
+ net-libs/libpcap
+ python? ( ${PYTHON_DEPS} )"
+DEPEND="${RDEPEND}"
+BDEPEND="
+ virtual/pkgconfig
+ python? ( ${DISTUTILS_DEPS} )"
+
+src_prepare() {
+ default
+ use python && distutils-r1_src_prepare
+}
+
+src_compile() {
+ default
+
+ if use python; then
+ append-ldflags "-L${S}/.libs/"
+ cd pylorcon2 || die
+ distutils-r1_src_compile
+ fi
+}
+
+src_test() {
+ default
+
+ # Fails within sandbox?
+ #if use python; then
+ # cd pylorcon2 || die
+ # distutils-r1_src_test
+ #fi
+}
+
+python_test() {
+ eunittest
+}
+
+src_install() {
+ default
+
+ if use python; then
+ cd pylorcon2 || die
+ distutils-r1_src_install
+ fi
+
+ find "${ED}" -name '*.la' -delete || die
+}
diff --git a/net-wireless/lorcon/metadata.xml b/net-wireless/lorcon/metadata.xml
new file mode 100644
index 000000000000..22d29be8fc24
--- /dev/null
+++ b/net-wireless/lorcon/metadata.xml
@@ -0,0 +1,9 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE pkgmetadata SYSTEM "https://docs.baldeagleos.com/dtd/metadata.dtd">
+<pkgmetadata>
+ <maintainer type="person">
+ <email>zerochaos@gentoo.org</email>
+ <name>Rick Farina</name>
+ </maintainer>
+ <origin>baldeagleos-repo</origin>
+</pkgmetadata>
diff --git a/net-wireless/mfoc/Manifest b/net-wireless/mfoc/Manifest
new file mode 100644
index 000000000000..e2fc16585911
--- /dev/null
+++ b/net-wireless/mfoc/Manifest
@@ -0,0 +1 @@
+DIST mfoc-0.10.7.tar.gz 31339 BLAKE2B 2b82492fa34190673058d18845be11145954ffe5c3a9d687374d03b00105e3f34a9cb72c3a06b523334fa50ff10ec294374dd140f018335f87b51cb1c93c321b SHA512 7dddcb0fa098fb48a90b83376a0add32701c0ee63b0828a55cb5e0f99bc82be126b4f59bb40ace80606452363d3ea1ab34285430817fefc80a291ec22cd72b24
diff --git a/net-wireless/mfoc/metadata.xml b/net-wireless/mfoc/metadata.xml
new file mode 100644
index 000000000000..379bb780d3d8
--- /dev/null
+++ b/net-wireless/mfoc/metadata.xml
@@ -0,0 +1,9 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE pkgmetadata SYSTEM "https://docs.baldeagleos.com/dtd/metadata.dtd">
+<pkgmetadata>
+ <maintainer type="person">
+ <name>Rick Farina</name>
+ <email>zerochaos@gentoo.org</email>
+ </maintainer>
+ <origin>baldeagleos-repo</origin>
+</pkgmetadata>
diff --git a/net-wireless/mfoc/mfoc-0.10.7-r1.ebuild b/net-wireless/mfoc/mfoc-0.10.7-r1.ebuild
new file mode 100644
index 000000000000..c220a9c964ce
--- /dev/null
+++ b/net-wireless/mfoc/mfoc-0.10.7-r1.ebuild
@@ -0,0 +1,23 @@
+# Copyright 1999-2023 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=8
+
+inherit autotools
+
+DESCRIPTION="Mifare Classic Offline Cracker"
+HOMEPAGE="https://github.com/nfc-tools/mfoc"
+SRC_URI="https://github.com/nfc-tools/${PN}/archive/${P}.tar.gz"
+S="${WORKDIR}/${PN}-${P}"
+
+LICENSE="GPL-2 GPL-2+ BSD-2"
+SLOT="0"
+KEYWORDS="~amd64"
+
+DEPEND=">=dev-libs/libnfc-1.7.0:="
+RDEPEND="${DEPEND}"
+
+src_prepare() {
+ default
+ eautoreconf
+}
diff --git a/net-wireless/nanovna-saver/Manifest b/net-wireless/nanovna-saver/Manifest
new file mode 100644
index 000000000000..338729f276e1
--- /dev/null
+++ b/net-wireless/nanovna-saver/Manifest
@@ -0,0 +1,2 @@
+DIST nanovna-saver-0.6.8.tar.gz 586892 BLAKE2B 6cbbac42221a6c862a2cd20c3c0fde7c51f41f0659e2c7898f42252a5c78edf4eac845cd8742ecf193a1572d2277c7b43835430e9731d985ee4abb4a79926571 SHA512 046ab6097eb47ff7321d3eaf88277f7cca0748f4977c48ee558ea8ccee6fdebc82e0ded589d0c3916d120c851448e7f09dc368752150a57973be1ce9201ca762
+DIST nanovna-saver-0.7.3.gh.tar.gz 657307 BLAKE2B 41af2f400b973e8142169197e425bb6a98e6cac4ffea9c297fe57bfdead5602d3d007759eb1fe71855d9dd4059771229c3d864d4435a7f4057502df8b8692c9a SHA512 fc6bcd853317bd189deebb80c94f8dcd124c65965e9289f94df2f2dd407dc3d68339b76abd5b477150688fd76257939537ddcdf60ce282ebcd6832244512c9d2
diff --git a/net-wireless/nanovna-saver/files/nanovna-saver-0.7.3-TDR.patch b/net-wireless/nanovna-saver/files/nanovna-saver-0.7.3-TDR.patch
new file mode 100644
index 000000000000..6d5e20407493
--- /dev/null
+++ b/net-wireless/nanovna-saver/files/nanovna-saver-0.7.3-TDR.patch
@@ -0,0 +1,18 @@
+diff --git a/src/NanoVNASaver/Charts/TDR.py b/src/NanoVNASaver/Charts/TDR.py
+index 9a91e05..5e75ed4 100644
+--- a/src/NanoVNASaver/Charts/TDR.py
++++ b/src/NanoVNASaver/Charts/TDR.py
+@@ -388,11 +388,11 @@ class TDRChart(Chart):
+ qp.drawText(
+ self.leftMargin - 10,
+ self.topMargin + height + 15,
+- f"""{
++ f"""{{
+ round(
+ self.tdrWindow.distance_axis[min_index] / 2, self.decimals
+ )!s
+- }m""",
++ }}m""",
+ )
+
+ def _draw_y_ticks(
diff --git a/net-wireless/nanovna-saver/files/nanovna-saver-0.7.3-pyproject.patch b/net-wireless/nanovna-saver/files/nanovna-saver-0.7.3-pyproject.patch
new file mode 100644
index 000000000000..334f4cafff17
--- /dev/null
+++ b/net-wireless/nanovna-saver/files/nanovna-saver-0.7.3-pyproject.patch
@@ -0,0 +1,19 @@
+diff --git a/pyproject.toml b/pyproject.toml
+index 14b5df0..1db3080 100644
+--- a/pyproject.toml
++++ b/pyproject.toml
+@@ -69,11 +69,11 @@ requires = [
+ "setuptools>=64",
+ "setuptools-scm>=8"
+ ]
+-# build-backend = 'setuptools.build_meta'
++build-backend = 'setuptools.build_meta'
+ # in-tree build backend, wrapper around setuptools, just to run ui-compile task
+ # See also https://setuptools.pypa.io/en/latest/build_meta.html#dynamic-build-dependencies-and-other-build-meta-tweaks
+-build-backend = "setuptools_wrapper"
+-backend-path = ["src/tools"]
++# build-backend = "setuptools_wrapper"
++# backend-path = ["src/tools"]
+
+ [tool.setuptools.exclude-package-data]
+ "*" = ['*.png', '*.ui', '*.qrc' ]
diff --git a/net-wireless/nanovna-saver/metadata.xml b/net-wireless/nanovna-saver/metadata.xml
new file mode 100644
index 000000000000..70204de6af46
--- /dev/null
+++ b/net-wireless/nanovna-saver/metadata.xml
@@ -0,0 +1,17 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE pkgmetadata SYSTEM "https://docs.baldeagleos.com/dtd/metadata.dtd">
+<pkgmetadata>
+ <maintainer type="person">
+ <email>zerochaos@gentoo.org</email>
+ <name>Rick Farina</name>
+ </maintainer>
+ <maintainer type="person">
+ <email>tomjbe@gentoo.org</email>
+ <name>Thomas Beierlein</name>
+ </maintainer>
+ <maintainer type="project">
+ <email>radio@gentoo.org</email>
+ <name>Radio</name>
+ </maintainer>
+ <origin>baldeagleos-repo</origin>
+</pkgmetadata>
diff --git a/net-wireless/nanovna-saver/nanovna-saver-0.6.8-r1.ebuild b/net-wireless/nanovna-saver/nanovna-saver-0.6.8-r1.ebuild
new file mode 100644
index 000000000000..c564862c4a62
--- /dev/null
+++ b/net-wireless/nanovna-saver/nanovna-saver-0.6.8-r1.ebuild
@@ -0,0 +1,47 @@
+# Copyright 2019-2026 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=8
+DISTUTILS_USE_PEP517=setuptools
+PYTHON_COMPAT=( python3_{13..14} )
+inherit distutils-r1 xdg-utils
+
+DESCRIPTION="tool for reading, displaying and saving data from the NanoVNA"
+HOMEPAGE="https://github.com/mihtjel/nanovna-saver"
+
+LICENSE="GPL-3+"
+SLOT="0"
+if [ "${PV}" = "9999" ]; then
+ inherit git-r3
+ EGIT_REPO_URI="https://github.com/mihtjel/nanovna-saver.git"
+else
+ SRC_URI="https://github.com/mihtjel/nanovna-saver/archive/v${PV}.tar.gz -> ${P}.tar.gz"
+ KEYWORDS="amd64 x86"
+ export SETUPTOOLS_SCM_PRETEND_VERSION="${PV}"
+fi
+
+RDEPEND="${DEPEND}
+ dev-python/cython[${PYTHON_USEDEP}]
+ dev-python/pyserial[${PYTHON_USEDEP}]
+ dev-python/pyqt6[${PYTHON_USEDEP},gui,widgets]
+ dev-python/pyqt6-sip[${PYTHON_USEDEP}]
+ dev-python/sip[${PYTHON_USEDEP}]
+ dev-python/numpy[${PYTHON_USEDEP}]
+ dev-python/scipy[${PYTHON_USEDEP}]"
+BDEPEND="dev-python/setuptools-scm[${PYTHON_USEDEP}]"
+
+distutils_enable_tests pytest
+
+python_install() {
+ distutils-r1_python_install
+}
+
+pkg_postinst() {
+ xdg_desktop_database_update
+ xdg_icon_cache_update
+}
+
+pkg_postrm() {
+ xdg_desktop_database_update
+ xdg_icon_cache_update
+}
diff --git a/net-wireless/nanovna-saver/nanovna-saver-0.6.8-r2.ebuild b/net-wireless/nanovna-saver/nanovna-saver-0.6.8-r2.ebuild
new file mode 100644
index 000000000000..d6ea5952726b
--- /dev/null
+++ b/net-wireless/nanovna-saver/nanovna-saver-0.6.8-r2.ebuild
@@ -0,0 +1,47 @@
+# Copyright 2019-2026 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=8
+DISTUTILS_USE_PEP517=setuptools
+PYTHON_COMPAT=( python3_{13..14} )
+inherit distutils-r1 xdg-utils
+
+DESCRIPTION="tool for reading, displaying and saving data from the NanoVNA"
+HOMEPAGE="https://github.com/mihtjel/nanovna-saver"
+
+LICENSE="GPL-3+"
+SLOT="0"
+if [ "${PV}" = "9999" ]; then
+ inherit git-r3
+ EGIT_REPO_URI="https://github.com/mihtjel/nanovna-saver.git"
+else
+ SRC_URI="https://github.com/mihtjel/nanovna-saver/archive/v${PV}.tar.gz -> ${P}.tar.gz"
+ KEYWORDS="~amd64 ~x86"
+ export SETUPTOOLS_SCM_PRETEND_VERSION="${PV}"
+fi
+
+RDEPEND="${DEPEND}
+ dev-python/cython[${PYTHON_USEDEP}]
+ dev-python/pyserial[${PYTHON_USEDEP}]
+ dev-python/pyqt6[${PYTHON_USEDEP},gui,widgets]
+ dev-python/pyqt6-sip[${PYTHON_USEDEP}]
+ dev-python/sip[${PYTHON_USEDEP}]
+ dev-python/numpy[${PYTHON_USEDEP}]
+ dev-python/scipy[${PYTHON_USEDEP}]"
+BDEPEND="dev-python/setuptools-scm[${PYTHON_USEDEP}]"
+
+distutils_enable_tests pytest
+
+python_install() {
+ distutils-r1_python_install
+}
+
+pkg_postinst() {
+ xdg_desktop_database_update
+ xdg_icon_cache_update
+}
+
+pkg_postrm() {
+ xdg_desktop_database_update
+ xdg_icon_cache_update
+}
diff --git a/net-wireless/nanovna-saver/nanovna-saver-0.7.3-r1.ebuild b/net-wireless/nanovna-saver/nanovna-saver-0.7.3-r1.ebuild
new file mode 100644
index 000000000000..836df9feb384
--- /dev/null
+++ b/net-wireless/nanovna-saver/nanovna-saver-0.7.3-r1.ebuild
@@ -0,0 +1,60 @@
+# Copyright 2019-2026 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=8
+DISTUTILS_USE_PEP517=setuptools
+
+PYTHON_COMPAT=( python3_{13..14} )
+inherit distutils-r1 xdg-utils
+
+DESCRIPTION="tool for reading, displaying and saving data from the NanoVNA"
+HOMEPAGE="https://github.com/mihtjel/nanovna-saver"
+
+LICENSE="GPL-3+"
+SLOT="0"
+if [ "${PV}" = "9999" ]; then
+ inherit git-r3
+ EGIT_REPO_URI="https://github.com/mihtjel/nanovna-saver.git"
+else
+ SRC_URI="https://github.com/mihtjel/nanovna-saver/archive/v${PV}.tar.gz -> ${P}.gh.tar.gz"
+ KEYWORDS="amd64"
+ export SETUPTOOLS_SCM_PRETEND_VERSION="${PV}"
+fi
+
+RDEPEND="${DEPEND}
+ dev-python/cython[${PYTHON_USEDEP}]
+ dev-python/numpy[${PYTHON_USEDEP}]
+ dev-python/pyserial[${PYTHON_USEDEP}]
+ dev-python/pyside[${PYTHON_USEDEP},gui,tools,widgets]
+ dev-python/scipy[${PYTHON_USEDEP}]"
+BDEPEND="dev-python/setuptools-scm[${PYTHON_USEDEP}]"
+
+distutils_enable_tests pytest
+
+# drop local build_backend which only calls ui_compile (see below) and
+# uses setuptools.build_meta afterwards
+PATCHES=( "${FILESDIR}"/${PN}-0.7.3-pyproject.patch
+ "${FILESDIR}"/${PN}-0.7.3-TDR.patch )
+
+python_prepare_all() {
+ # convert .ui and .qrc files to .py
+ python src/tools/ui_compile.py || die
+ # remove no longer needed helper tools to avoid their installation
+ rm -R src/tools -R || die
+
+ distutils-r1_python_prepare_all
+}
+
+python_install() {
+ distutils-r1_python_install
+}
+
+pkg_postinst() {
+ xdg_desktop_database_update
+ xdg_icon_cache_update
+}
+
+pkg_postrm() {
+ xdg_desktop_database_update
+ xdg_icon_cache_update
+}
diff --git a/net-wireless/nanovna-saver/nanovna-saver-9999.ebuild b/net-wireless/nanovna-saver/nanovna-saver-9999.ebuild
new file mode 100644
index 000000000000..158916c08632
--- /dev/null
+++ b/net-wireless/nanovna-saver/nanovna-saver-9999.ebuild
@@ -0,0 +1,47 @@
+# Copyright 2019-2026 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=8
+DISTUTILS_USE_PEP517=setuptools
+PYTHON_COMPAT=( python3_{13..14} )
+inherit distutils-r1 xdg-utils
+
+DESCRIPTION="tool for reading, displaying and saving data from the NanoVNA"
+HOMEPAGE="https://github.com/mihtjel/nanovna-saver"
+
+LICENSE="GPL-3+"
+SLOT="0"
+if [ "${PV}" = "9999" ]; then
+ inherit git-r3
+ EGIT_REPO_URI="https://github.com/mihtjel/nanovna-saver.git"
+else
+ SRC_URI="https://github.com/mihtjel/nanovna-saver/archive/v${PV}.tar.gz -> ${P}.tar.gz"
+ KEYWORDS="~amd64"
+ export SETUPTOOLS_SCM_PRETEND_VERSION="${PV}"
+fi
+
+RDEPEND="${DEPEND}
+ dev-python/cython[${PYTHON_USEDEP}]
+ dev-python/pyserial[${PYTHON_USEDEP}]
+ dev-python/pyqt6[${PYTHON_USEDEP},gui,widgets]
+ dev-python/pyqt6-sip[${PYTHON_USEDEP}]
+ dev-python/sip[${PYTHON_USEDEP}]
+ dev-python/numpy[${PYTHON_USEDEP}]
+ dev-python/scipy[${PYTHON_USEDEP}]"
+BDEPEND="dev-python/setuptools-scm[${PYTHON_USEDEP}]"
+
+distutils_enable_tests pytest
+
+python_install() {
+ distutils-r1_python_install
+}
+
+pkg_postinst() {
+ xdg_desktop_database_update
+ xdg_icon_cache_update
+}
+
+pkg_postrm() {
+ xdg_desktop_database_update
+ xdg_icon_cache_update
+}
diff --git a/net-wireless/neard/Manifest b/net-wireless/neard/Manifest
new file mode 100644
index 000000000000..e532dc4300a8
--- /dev/null
+++ b/net-wireless/neard/Manifest
@@ -0,0 +1 @@
+DIST neard-0.19.tar.gz 229059 BLAKE2B 35976667dc22d6fc4e80468fcd21124bd8675c490e5d96e6d8d0f5bba28a92deae4255aa96070419f6a840ede9cda7fa793ef2c27fa3e725710dbf0a2a7105a5 SHA512 577061c214365853667033a2ae9f78a367adcbf07f2d7a70087c484ac31b410d34c003f396da622604f8844f30d44cba01f0d8a7cadebfd4c4c6457996541b48
diff --git a/net-wireless/neard/files/neard.confd b/net-wireless/neard/files/neard.confd
new file mode 100644
index 000000000000..ca0474e6607f
--- /dev/null
+++ b/net-wireless/neard/files/neard.confd
@@ -0,0 +1,8 @@
+# conf.d file for neard
+#
+# Please check connmand --help for more information.
+# Useful options are:
+# -d, --debug=DEBUG: Specify debug options to enable
+# -p, --plugin=NAME: specify plugins to load.
+# -P, --noplugin=NAME: specify plugins not to load.
+NEARD_OPTS="" \ No newline at end of file
diff --git a/net-wireless/neard/files/neard.rc b/net-wireless/neard/files/neard.rc
new file mode 100644
index 000000000000..4f2acbd9cd9f
--- /dev/null
+++ b/net-wireless/neard/files/neard.rc
@@ -0,0 +1,22 @@
+#!/sbin/openrc-run
+# Copyright 1999-2013 Gentoo Foundation
+# Distributed under the terms of the GNU General Public License v2
+
+name="NFC daemon"
+
+command="/usr/libexec/nfc/neard"
+command_args="${NEARD_OPTS}"
+
+start_stop_daemon_args="--exec /usr/libexec/nfc/neard"
+
+depend() {
+ need dbus
+}
+
+start_pre() {
+ if [ -e /proc/modules ] ; then
+ if ! grep -qs NFC_RAW /proc/net/protocols ; then
+ modprobe -q nfc
+ fi
+ fi
+}
diff --git a/net-wireless/neard/metadata.xml b/net-wireless/neard/metadata.xml
new file mode 100644
index 000000000000..aaab12554749
--- /dev/null
+++ b/net-wireless/neard/metadata.xml
@@ -0,0 +1,8 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE pkgmetadata SYSTEM "https://docs.baldeagleos.com/dtd/metadata.dtd">
+<pkgmetadata>
+ <use>
+ <flag name="tools">Build and install 'nfctool' for further NFC debugging</flag>
+ </use>
+ <origin>baldeagleos-repo</origin>
+</pkgmetadata>
diff --git a/net-wireless/neard/neard-0.19.ebuild b/net-wireless/neard/neard-0.19.ebuild
new file mode 100644
index 000000000000..a3fcc18a78af
--- /dev/null
+++ b/net-wireless/neard/neard-0.19.ebuild
@@ -0,0 +1,61 @@
+# Copyright 1999-2024 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=8
+
+inherit autotools
+
+DESCRIPTION="Near Field Communication (NFC) management daemon"
+HOMEPAGE="https://github.com/linux-nfc/neard"
+SRC_URI="https://github.com/linux-nfc/neard/archive/refs/tags/v${PV}.tar.gz -> ${P}.tar.gz"
+
+LICENSE="GPL-2"
+SLOT="0"
+KEYWORDS="amd64 arm arm64 ~loong ppc64 ~riscv x86"
+IUSE="test tools systemd"
+
+RESTRICT="!test? ( test )"
+
+RDEPEND="
+ >=dev-libs/glib-2.28
+ dev-libs/libnl:3=
+ >=sys-apps/dbus-1.2
+ systemd? ( sys-apps/systemd:0 )
+"
+
+DEPEND="${RDEPEND}"
+BDEPEND="dev-build/autoconf-archive"
+
+src_prepare() {
+ default
+ eautoreconf
+}
+
+src_configure() {
+ local myeconfargs=(
+ --disable-optimization
+ --disable-test # Only installs test programs, #913709.
+ --enable-ese
+ --enable-nfctype1
+ --enable-nfctype2
+ --enable-nfctype3
+ --enable-nfctype4
+ --enable-nfctype5
+ --enable-p2p
+ --enable-pie
+ $(use_enable systemd)
+ $(use_enable tools)
+ )
+ econf "${myeconfargs[@]}"
+}
+
+src_install() {
+ default
+
+ # Patch for this has been sent upstream. Do it manually
+ # to avoid having to rebuild autotools. #580876
+ mv "${ED}/usr/include/version.h" "${ED}/usr/include/near/" || die
+
+ newinitd "${FILESDIR}/neard.rc" neard
+ newconfd "${FILESDIR}/neard.confd" neard
+}
diff --git a/net-wireless/osmo-fl2k/Manifest b/net-wireless/osmo-fl2k/Manifest
new file mode 100644
index 000000000000..3f2bc0faa161
--- /dev/null
+++ b/net-wireless/osmo-fl2k/Manifest
@@ -0,0 +1 @@
+DIST osmo-fl2k-0.2.0.tar.gz 73276 BLAKE2B c15613ec0bdc3ec28a55892a893e0bc8fc397ab916f66bbc50a04c2ae12ef749e9c78906d66c3499c3d5cf5b711d7742cec8ca014099f4815e9690643922f4d7 SHA512 3b419869edecd3b64ec26212007be379154b93470305d3f125b4723bbbafc012eba32a414ebd84c5e0e9019a8079f4c1ddea7d0e6d108cc8628ce0e5e3e8755a
diff --git a/net-wireless/osmo-fl2k/metadata.xml b/net-wireless/osmo-fl2k/metadata.xml
new file mode 100644
index 000000000000..484ffb011945
--- /dev/null
+++ b/net-wireless/osmo-fl2k/metadata.xml
@@ -0,0 +1,9 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE pkgmetadata SYSTEM "https://docs.baldeagleos.com/dtd/metadata.dtd">
+<pkgmetadata>
+ <maintainer type="project">
+ <email>radio@gentoo.org</email>
+ <name>Radio</name>
+ </maintainer>
+ <origin>baldeagleos-repo</origin>
+</pkgmetadata>
diff --git a/net-wireless/osmo-fl2k/osmo-fl2k-0.2.0.ebuild b/net-wireless/osmo-fl2k/osmo-fl2k-0.2.0.ebuild
new file mode 100644
index 000000000000..4f95c0da4bf9
--- /dev/null
+++ b/net-wireless/osmo-fl2k/osmo-fl2k-0.2.0.ebuild
@@ -0,0 +1,62 @@
+# Copyright 1999-2023 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=8
+
+inherit cmake flag-o-matic linux-info udev
+
+DESCRIPTION="turns FL2000-based USB 3.0 to VGA adapters into low cost DACs"
+HOMEPAGE="https://osmocom.org/projects/osmo-fl2k/wiki"
+
+if [[ ${PV} == "9999" ]]; then
+ inherit git-r3
+ EGIT_REPO_URI="https://gitea.osmocom.org/sdr/osmo-fl2k"
+else
+ KEYWORDS="~amd64"
+ SRC_URI="https://gitea.osmocom.org/sdr/osmo-fl2k/archive/v${PV}.tar.gz -> ${P}.tar.gz"
+ S="${WORKDIR}/${PN}"
+fi
+
+LICENSE="GPL-2+"
+SLOT="0"
+
+IUSE="udev"
+
+DEPEND="virtual/libusb:1"
+RDEPEND="${DEPEND}
+ media-sound/sox
+ sys-apps/pv"
+
+# continguous memory allocator can optionally be used for zero-copy transfer
+# TODO: tell users to set CONFIG_CMA_SIZE_MBYTES or boot with cma=... parameter
+CONFIG_CHECK="~CMA ~DMA_CMA"
+
+src_configure() {
+ # udev rules use wrong filename and would go to wrong directory anyway
+ local mycmakeargs=(
+ -DLIB_INSTALL_DIR="/usr/$(get_libdir)"
+ -DINSTALL_UDEV_RULES=OFF
+ )
+ #https://gcc.gnu.org/bugzilla/show_bug.cgi?id=49653
+ replace-flags -O0 -O2
+ replace-flags -Os -O2
+ cmake_src_configure
+}
+
+src_install() {
+ if use udev; then
+ udev_newrules ${PN}.rules 99-${PN}.rules
+ fi
+ cmake_src_install
+ # https://bugs.gentoo.org/727984
+ # No obvious way to prevent build
+ find "${ED}" -name libosmo-fl2k.a -delete
+}
+
+pkg_postinst() {
+ udev_reload
+}
+
+pkg_postrm() {
+ udev_reload
+}
diff --git a/net-wireless/osmo-fl2k/osmo-fl2k-9999.ebuild b/net-wireless/osmo-fl2k/osmo-fl2k-9999.ebuild
new file mode 100644
index 000000000000..4f95c0da4bf9
--- /dev/null
+++ b/net-wireless/osmo-fl2k/osmo-fl2k-9999.ebuild
@@ -0,0 +1,62 @@
+# Copyright 1999-2023 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=8
+
+inherit cmake flag-o-matic linux-info udev
+
+DESCRIPTION="turns FL2000-based USB 3.0 to VGA adapters into low cost DACs"
+HOMEPAGE="https://osmocom.org/projects/osmo-fl2k/wiki"
+
+if [[ ${PV} == "9999" ]]; then
+ inherit git-r3
+ EGIT_REPO_URI="https://gitea.osmocom.org/sdr/osmo-fl2k"
+else
+ KEYWORDS="~amd64"
+ SRC_URI="https://gitea.osmocom.org/sdr/osmo-fl2k/archive/v${PV}.tar.gz -> ${P}.tar.gz"
+ S="${WORKDIR}/${PN}"
+fi
+
+LICENSE="GPL-2+"
+SLOT="0"
+
+IUSE="udev"
+
+DEPEND="virtual/libusb:1"
+RDEPEND="${DEPEND}
+ media-sound/sox
+ sys-apps/pv"
+
+# continguous memory allocator can optionally be used for zero-copy transfer
+# TODO: tell users to set CONFIG_CMA_SIZE_MBYTES or boot with cma=... parameter
+CONFIG_CHECK="~CMA ~DMA_CMA"
+
+src_configure() {
+ # udev rules use wrong filename and would go to wrong directory anyway
+ local mycmakeargs=(
+ -DLIB_INSTALL_DIR="/usr/$(get_libdir)"
+ -DINSTALL_UDEV_RULES=OFF
+ )
+ #https://gcc.gnu.org/bugzilla/show_bug.cgi?id=49653
+ replace-flags -O0 -O2
+ replace-flags -Os -O2
+ cmake_src_configure
+}
+
+src_install() {
+ if use udev; then
+ udev_newrules ${PN}.rules 99-${PN}.rules
+ fi
+ cmake_src_install
+ # https://bugs.gentoo.org/727984
+ # No obvious way to prevent build
+ find "${ED}" -name libosmo-fl2k.a -delete
+}
+
+pkg_postinst() {
+ udev_reload
+}
+
+pkg_postrm() {
+ udev_reload
+}
diff --git a/net-wireless/portapack-firmware/Manifest b/net-wireless/portapack-firmware/Manifest
new file mode 100644
index 000000000000..b59f4408c5b6
--- /dev/null
+++ b/net-wireless/portapack-firmware/Manifest
@@ -0,0 +1 @@
+DIST portapack-h1-firmware-20190405.tar.bz2 175374 BLAKE2B 2981ee5e994e9de3f662d77fe8ebd8773f71a73980bf08474cb0d7773ce7af79a490b759bc4d0eaaec1fb1b88755bbf25968300b1c27882a07e9fe1ce9fab524 SHA512 3fe95c2fba8654233a846eac3d9dc094343aaa6e527046b8e659524aed01dc4fef4e865253fc49ac367d0fe7fe2919c20d8fed71e144290bd8ece27021aced8f
diff --git a/net-wireless/portapack-firmware/metadata.xml b/net-wireless/portapack-firmware/metadata.xml
new file mode 100644
index 000000000000..22d29be8fc24
--- /dev/null
+++ b/net-wireless/portapack-firmware/metadata.xml
@@ -0,0 +1,9 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE pkgmetadata SYSTEM "https://docs.baldeagleos.com/dtd/metadata.dtd">
+<pkgmetadata>
+ <maintainer type="person">
+ <email>zerochaos@gentoo.org</email>
+ <name>Rick Farina</name>
+ </maintainer>
+ <origin>baldeagleos-repo</origin>
+</pkgmetadata>
diff --git a/net-wireless/portapack-firmware/portapack-firmware-20190405.ebuild b/net-wireless/portapack-firmware/portapack-firmware-20190405.ebuild
new file mode 100644
index 000000000000..f38f39b3114a
--- /dev/null
+++ b/net-wireless/portapack-firmware/portapack-firmware-20190405.ebuild
@@ -0,0 +1,22 @@
+# Copyright 1999-2023 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=8
+
+DESCRIPTION="Firmware and scripts for controlling the Portapack from Sharebrained"
+HOMEPAGE="https://github.com/sharebrained/portapack-hackrf/releases"
+SRC_URI="https://github.com/sharebrained/portapack-hackrf/releases/download/${PV}/portapack-h1-firmware-${PV}.tar.bz2"
+S="${WORKDIR}/portapack-h1-firmware-${PV}"
+
+LICENSE="GPL-2+"
+SLOT="0"
+KEYWORDS="~amd64 ~x86"
+
+PDEPEND=">=net-wireless/hackrf-tools-2015.07.2-r1
+ >=app-mobilephone/dfu-util-0.7"
+
+src_install() {
+ insinto /usr/share/hackrf
+ newins portapack-h1-firmware.bin portapack-h1-firmware-${PV}.bin
+ ln -s portapack-h1-firmware-${PV}.bin "${ED}/usr/share/hackrf/portapack-h1-firmware.bin" || die
+}
diff --git a/net-wireless/portapack-havoc/Manifest b/net-wireless/portapack-havoc/Manifest
new file mode 100644
index 000000000000..4e4cc5ad6378
--- /dev/null
+++ b/net-wireless/portapack-havoc/Manifest
@@ -0,0 +1 @@
+DIST portapack-havoc-0.0_p20180612.tar.gz 74244267 BLAKE2B 7a6b632cd3766681e691cb0e8405e9493d4d4b46008c9905192f492715238378713da6a305383855b50935f5ffa943e5134677ab1580275a645b46e0e025c561 SHA512 b8ea6a4aa6682793a69cefb2815fcaf51a5f6f253bea2c34e00d76fba15f9d700f45f1a36c1ac7e1d7c640ac19ee64dc835c76c3d9964d73d18443299a2d6fdd
diff --git a/net-wireless/portapack-havoc/metadata.xml b/net-wireless/portapack-havoc/metadata.xml
new file mode 100644
index 000000000000..22d29be8fc24
--- /dev/null
+++ b/net-wireless/portapack-havoc/metadata.xml
@@ -0,0 +1,9 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE pkgmetadata SYSTEM "https://docs.baldeagleos.com/dtd/metadata.dtd">
+<pkgmetadata>
+ <maintainer type="person">
+ <email>zerochaos@gentoo.org</email>
+ <name>Rick Farina</name>
+ </maintainer>
+ <origin>baldeagleos-repo</origin>
+</pkgmetadata>
diff --git a/net-wireless/portapack-havoc/portapack-havoc-0.0_p20180612.ebuild b/net-wireless/portapack-havoc/portapack-havoc-0.0_p20180612.ebuild
new file mode 100644
index 000000000000..e668a2dbe80a
--- /dev/null
+++ b/net-wireless/portapack-havoc/portapack-havoc-0.0_p20180612.ebuild
@@ -0,0 +1,45 @@
+# Copyright 1999-2023 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=8
+
+DESCRIPTION="Custom firmware for the HackRF SDR + PortaPack H1 addon"
+HOMEPAGE="https://github.com/furrtek/portapack-havoc/wiki"
+COMMIT="609235b19f55d0bf278c0e7c4b9f9b6b15136247"
+SRC_URI="https://github.com/furrtek/portapack-havoc/archive/${COMMIT}.tar.gz -> ${P}.tar.gz"
+S="${WORKDIR}/${PN}-${COMMIT}"
+
+LICENSE="GPL-2+"
+SLOT="0"
+
+KEYWORDS="~amd64 ~x86"
+
+PDEPEND=">=net-wireless/hackrf-tools-2015.07.2-r1
+ >=app-mobilephone/dfu-util-0.7"
+
+src_configure() {
+ true
+}
+
+src_compile() {
+ true
+}
+
+src_install() {
+ insinto /usr/share/hackrf
+ newins firmware/portapack-h1-havoc.bin portapack-h1-havoc-${PV}.bin
+ ln -s portapack-h1-havoc-${PV}.bin "${ED}/usr/share/hackrf/portapack-h1-havoc.bin" || die
+
+ cat << EOF > switch_to_havoc
+#!/bin/sh
+printf "Hold down the HackRF's DFU button (the button closest to the antenna jack)\n"
+printf "then plug the HackRF into a USB port on your computer.\n"
+printf "After the HackRF is plugged in, you may release the DFU button.\n"
+printf "Press any key to continue or ^c to abort\n"
+read
+dfu-util --device 1fc9:000c --download /usr/share/hackrf/hackrf_one_usb_ram.dfu --reset
+sleep 2s
+hackrf_spiflash -w /usr/share/hackrf/portapack-h1-havoc.bin
+EOF
+ dobin switch_to_havoc
+}
diff --git a/net-wireless/qdmr/Manifest b/net-wireless/qdmr/Manifest
new file mode 100644
index 000000000000..7ed32e260610
--- /dev/null
+++ b/net-wireless/qdmr/Manifest
@@ -0,0 +1,3 @@
+DIST qdmr-0.13.3.tar.gz 7207011 BLAKE2B 5a76257cebc9e98a1de298fa62ccea15fb75b6712048081fc9f39c3490bc705ebff735f21ca3ccd0e98efe6f4e75c81e8229ae2eb3b96cef0b9388c53dffe085 SHA512 ec00a3f5b4e7f0b93b99413623ff73aed37910c5dc363a714044ddebb0a5d38887883346cf743dc4d954e5aac47b66855c8273ea2f1da021727ab5f371b00ca8
+DIST qdmr-0.14.1.tar.gz 7266522 BLAKE2B 44651499206bcb954c0c34e7491306daadca184d31a4028d4b0227bfe1b5e4b3b452e0a8a14f0eb4e21ccb3e46c043e3deacfc1b0a7eabef5b882cdbcee63a3a SHA512 be4dce1e13ae8fc72d6afe3e95e6ed4b452435385bca2546fca0724ecba50c941f358f8b2a8265feb302550f38ffaea4435d9452d80f1efae2b93bdd93f7a46f
+DIST qdmr-0.15.0.tar.gz 7636796 BLAKE2B 9c1b2c990f5b7703f04a04c1bbc259a655696972d50889f1f1cee31424390ec2ceed5363ac3738e295913ae8ac392c58be3810a6c6a196ab5879e3f80f37c094 SHA512 15c1f084478c9e80872100ea82f7856bc7c65e0cfc46a03f55b96e0f524f299c5b2a862914e64757c3dfbc19bd511c0d51477b73ea5706fd43ee59c0302d7bb8
diff --git a/net-wireless/qdmr/metadata.xml b/net-wireless/qdmr/metadata.xml
new file mode 100644
index 000000000000..484ffb011945
--- /dev/null
+++ b/net-wireless/qdmr/metadata.xml
@@ -0,0 +1,9 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE pkgmetadata SYSTEM "https://docs.baldeagleos.com/dtd/metadata.dtd">
+<pkgmetadata>
+ <maintainer type="project">
+ <email>radio@gentoo.org</email>
+ <name>Radio</name>
+ </maintainer>
+ <origin>baldeagleos-repo</origin>
+</pkgmetadata>
diff --git a/net-wireless/qdmr/qdmr-0.13.3.ebuild b/net-wireless/qdmr/qdmr-0.13.3.ebuild
new file mode 100644
index 000000000000..e511418380fe
--- /dev/null
+++ b/net-wireless/qdmr/qdmr-0.13.3.ebuild
@@ -0,0 +1,64 @@
+# Copyright 2021-2026 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=8
+
+inherit cmake udev linux-info xdg-utils
+
+DESCRIPTION="GUI application for configuring and programming cheap DMR radios"
+HOMEPAGE="https://dm3mat.darc.de/qdmr/"
+if [ "${PV}" = "9999" ]; then
+ inherit git-r3
+ EGIT_REPO_URI="https://github.com/hmatuschek/qdmr.git"
+else
+ MY_PV="${PV/_/-}"
+ SRC_URI="https://github.com/hmatuschek/qdmr/archive/refs/tags/v${MY_PV}.tar.gz -> ${P}.tar.gz"
+ S="${WORKDIR}/${PN}-${MY_PV}"
+ KEYWORDS="amd64 x86"
+fi
+LICENSE="GPL-3+"
+SLOT="0"
+IUSE="test"
+RESTRICT="!test? ( test )"
+
+RDEPEND="
+ dev-cpp/yaml-cpp:=
+ dev-qt/qtbase:6[gui,network,widgets]
+ dev-qt/qtpositioning:6
+ dev-qt/qtserialport:6
+ dev-qt/qttools[designer,linguist]
+ virtual/libusb:1
+"
+DEPEND="${RDEPEND}
+ test? ( dev-qt/qtbase:6[test] )
+"
+BDEPEND="
+ gnome-base/librsvg
+"
+
+pkg_setup() {
+ CONFIG_CHECK="~USB_ACM"
+ WARNING_USB_ACM="You need to enable CONFIG_USB_ACM in your kernel to talk to some radios"
+ CONFIG_CHECK="~USB_SERIAL"
+ WARNING_USB_SERIAL="You need to enable CONFIG_USB_SERIAL in your kernel to talk to some radios"
+ check_extra_config
+}
+
+src_configure() {
+ local mycmakeargs=(
+ -DBUILD_TESTS="$(usex test)"
+ -DINSTALL_UDEV_RULES=ON
+ -DINSTALL_UDEV_PATH="$(get_udevdir)/rules.d"
+ )
+ cmake_src_configure
+}
+
+pkg_postinst() {
+ udev_reload
+ xdg_icon_cache_update
+}
+
+pkg_postrm() {
+ udev_reload
+ xdg_icon_cache_update
+}
diff --git a/net-wireless/qdmr/qdmr-0.14.1.ebuild b/net-wireless/qdmr/qdmr-0.14.1.ebuild
new file mode 100644
index 000000000000..e511418380fe
--- /dev/null
+++ b/net-wireless/qdmr/qdmr-0.14.1.ebuild
@@ -0,0 +1,64 @@
+# Copyright 2021-2026 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=8
+
+inherit cmake udev linux-info xdg-utils
+
+DESCRIPTION="GUI application for configuring and programming cheap DMR radios"
+HOMEPAGE="https://dm3mat.darc.de/qdmr/"
+if [ "${PV}" = "9999" ]; then
+ inherit git-r3
+ EGIT_REPO_URI="https://github.com/hmatuschek/qdmr.git"
+else
+ MY_PV="${PV/_/-}"
+ SRC_URI="https://github.com/hmatuschek/qdmr/archive/refs/tags/v${MY_PV}.tar.gz -> ${P}.tar.gz"
+ S="${WORKDIR}/${PN}-${MY_PV}"
+ KEYWORDS="amd64 x86"
+fi
+LICENSE="GPL-3+"
+SLOT="0"
+IUSE="test"
+RESTRICT="!test? ( test )"
+
+RDEPEND="
+ dev-cpp/yaml-cpp:=
+ dev-qt/qtbase:6[gui,network,widgets]
+ dev-qt/qtpositioning:6
+ dev-qt/qtserialport:6
+ dev-qt/qttools[designer,linguist]
+ virtual/libusb:1
+"
+DEPEND="${RDEPEND}
+ test? ( dev-qt/qtbase:6[test] )
+"
+BDEPEND="
+ gnome-base/librsvg
+"
+
+pkg_setup() {
+ CONFIG_CHECK="~USB_ACM"
+ WARNING_USB_ACM="You need to enable CONFIG_USB_ACM in your kernel to talk to some radios"
+ CONFIG_CHECK="~USB_SERIAL"
+ WARNING_USB_SERIAL="You need to enable CONFIG_USB_SERIAL in your kernel to talk to some radios"
+ check_extra_config
+}
+
+src_configure() {
+ local mycmakeargs=(
+ -DBUILD_TESTS="$(usex test)"
+ -DINSTALL_UDEV_RULES=ON
+ -DINSTALL_UDEV_PATH="$(get_udevdir)/rules.d"
+ )
+ cmake_src_configure
+}
+
+pkg_postinst() {
+ udev_reload
+ xdg_icon_cache_update
+}
+
+pkg_postrm() {
+ udev_reload
+ xdg_icon_cache_update
+}
diff --git a/net-wireless/qdmr/qdmr-0.15.0.ebuild b/net-wireless/qdmr/qdmr-0.15.0.ebuild
new file mode 100644
index 000000000000..5a79c3ff9eaf
--- /dev/null
+++ b/net-wireless/qdmr/qdmr-0.15.0.ebuild
@@ -0,0 +1,65 @@
+# Copyright 2021-2026 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=8
+
+inherit cmake udev linux-info xdg-utils
+
+DESCRIPTION="GUI application for configuring and programming cheap DMR radios"
+HOMEPAGE="https://dm3mat.darc.de/qdmr/"
+if [ "${PV}" = "9999" ]; then
+ inherit git-r3
+ EGIT_REPO_URI="https://github.com/hmatuschek/qdmr.git"
+else
+ MY_PV="${PV/_/-}"
+ SRC_URI="https://github.com/hmatuschek/qdmr/archive/refs/tags/v${MY_PV}.tar.gz -> ${P}.tar.gz"
+ S="${WORKDIR}/${PN}-${MY_PV}"
+ KEYWORDS="~amd64 ~x86"
+fi
+LICENSE="GPL-3+"
+SLOT="0"
+IUSE="test"
+RESTRICT="!test? ( test )"
+
+RDEPEND="
+ dev-cpp/yaml-cpp:=
+ dev-qt/qtbase:6[gui,network,widgets]
+ dev-qt/qtmultimedia:6
+ dev-qt/qtpositioning:6
+ dev-qt/qtserialport:6
+ dev-qt/qttools:6[designer,linguist]
+ virtual/libusb:1
+"
+DEPEND="${RDEPEND}
+ test? ( dev-qt/qtbase:6[test] )
+"
+BDEPEND="
+ gnome-base/librsvg
+"
+
+pkg_setup() {
+ CONFIG_CHECK="~USB_ACM"
+ WARNING_USB_ACM="You need to enable CONFIG_USB_ACM in your kernel to talk to some radios"
+ CONFIG_CHECK="~USB_SERIAL"
+ WARNING_USB_SERIAL="You need to enable CONFIG_USB_SERIAL in your kernel to talk to some radios"
+ check_extra_config
+}
+
+src_configure() {
+ local mycmakeargs=(
+ -DBUILD_TESTS="$(usex test)"
+ -DINSTALL_UDEV_RULES=ON
+ -DINSTALL_UDEV_PATH="$(get_udevdir)/rules.d"
+ )
+ cmake_src_configure
+}
+
+pkg_postinst() {
+ udev_reload
+ xdg_icon_cache_update
+}
+
+pkg_postrm() {
+ udev_reload
+ xdg_icon_cache_update
+}
diff --git a/net-wireless/qdmr/qdmr-9999.ebuild b/net-wireless/qdmr/qdmr-9999.ebuild
new file mode 100644
index 000000000000..6add5495dcbb
--- /dev/null
+++ b/net-wireless/qdmr/qdmr-9999.ebuild
@@ -0,0 +1,64 @@
+# Copyright 2021-2025 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=8
+
+inherit cmake udev linux-info xdg-utils
+
+DESCRIPTION="GUI application for configuring and programming cheap DMR radios"
+HOMEPAGE="https://dm3mat.darc.de/qdmr/"
+if [ "${PV}" = "9999" ]; then
+ inherit git-r3
+ EGIT_REPO_URI="https://github.com/hmatuschek/qdmr.git"
+else
+ MY_PV="${PV/_/-}"
+ SRC_URI="https://github.com/hmatuschek/qdmr/archive/refs/tags/v${MY_PV}.tar.gz -> ${P}.tar.gz"
+ S="${WORKDIR}/${PN}-${MY_PV}"
+ KEYWORDS="~amd64 ~x86"
+fi
+LICENSE="GPL-3+"
+SLOT="0"
+IUSE="test"
+RESTRICT="!test? ( test )"
+
+RDEPEND="
+ dev-cpp/yaml-cpp:=
+ dev-qt/qtbase:6[gui,network,widgets]
+ dev-qt/qtpositioning:6
+ dev-qt/qtserialport:6
+ dev-qt/qttools[designer,linguist]
+ virtual/libusb:1
+"
+DEPEND="${RDEPEND}
+ test? ( dev-qt/qtbase:6[test] )
+"
+BDEPEND="
+ gnome-base/librsvg
+"
+
+pkg_setup() {
+ CONFIG_CHECK="~USB_ACM"
+ WARNING_USB_ACM="You need to enable CONFIG_USB_ACM in your kernel to talk to some radios"
+ CONFIG_CHECK="~USB_SERIAL"
+ WARNING_USB_SERIAL="You need to enable CONFIG_USB_SERIAL in your kernel to talk to some radios"
+ check_extra_config
+}
+
+src_configure() {
+ local mycmakeargs=(
+ -DBUILD_TESTS="$(usex test)"
+ -DINSTALL_UDEV_RULES=ON
+ -DINSTALL_UDEV_PATH="$(get_udevdir)/rules.d"
+ )
+ cmake_src_configure
+}
+
+pkg_postinst() {
+ udev_reload
+ xdg_icon_cache_update
+}
+
+pkg_postrm() {
+ udev_reload
+ xdg_icon_cache_update
+}
diff --git a/net-wireless/reaver/Manifest b/net-wireless/reaver/Manifest
new file mode 100644
index 000000000000..f62770099869
--- /dev/null
+++ b/net-wireless/reaver/Manifest
@@ -0,0 +1 @@
+DIST reaver-1.6.5.tar.gz 479441 BLAKE2B 21a1c54da559be4346b0c874947e982ea49ec6f20e612e3699d25524d49681a197a2a8cad0a31dd8dba919d065de48082572a471aa4f736397066edf7f7d8a43 SHA512 3e70d9fffefee3f6d60e72d7d7b1da91032e184c7d27f94b9f26e2260b7274d491f2e41f8056b386a211b9838d21afc6b65a8a826d310b51fc1065fa9e135dc0
diff --git a/net-wireless/reaver/files/reaver-1.6.5-confdir.patch b/net-wireless/reaver/files/reaver-1.6.5-confdir.patch
new file mode 100644
index 000000000000..d5673d82452b
--- /dev/null
+++ b/net-wireless/reaver/files/reaver-1.6.5-confdir.patch
@@ -0,0 +1,10 @@
+--- src/config.mak.in 2019-10-25 23:32:43.196353940 +0300
++++ src/config.mak.in 2019-10-25 23:32:33.935249226 +0300
+@@ -1,6 +1,6 @@
+ prefix=@prefix@
+ exec_prefix=@exec_prefix@
+-CONFDIR=@localstatedir@/lib/@target@
++CONFDIR=@localstatedir@/@target@
+
+ CC=@CC@
+ CFLAGS_USER=@CFLAGS@
diff --git a/net-wireless/reaver/metadata.xml b/net-wireless/reaver/metadata.xml
new file mode 100644
index 000000000000..192c8cae94d5
--- /dev/null
+++ b/net-wireless/reaver/metadata.xml
@@ -0,0 +1,13 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE pkgmetadata SYSTEM "https://docs.baldeagleos.com/dtd/metadata.dtd">
+<pkgmetadata>
+ <maintainer type="person" proxied="yes">
+ <email>oleg@kaa.org.ua</email>
+ <name>Oleg Kravchenko</name>
+ </maintainer>
+ <maintainer type="project" proxied="proxy">
+ <email>proxy-maint@gentoo.org</email>
+ <name>Proxy Maintainers</name>
+ </maintainer>
+ <origin>baldeagleos-repo</origin>
+</pkgmetadata>
diff --git a/net-wireless/reaver/reaver-1.6.5.ebuild b/net-wireless/reaver/reaver-1.6.5.ebuild
new file mode 100644
index 000000000000..45c848928d28
--- /dev/null
+++ b/net-wireless/reaver/reaver-1.6.5.ebuild
@@ -0,0 +1,33 @@
+# Copyright 1999-2020 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=7
+
+MY_PN="reaver-wps-fork-t6x"
+
+DESCRIPTION="Brute force attack against Wifi Protected Setup"
+HOMEPAGE="https://github.com/t6x/reaver-wps-fork-t6x"
+SRC_URI="https://github.com/t6x/${MY_PN}/archive/v${PV}.tar.gz -> ${P}.tar.gz"
+
+LICENSE="GPL-2"
+SLOT="0"
+KEYWORDS="~amd64 ~arm ~x86"
+
+DEPEND="net-libs/libpcap"
+RDEPEND="${DEPEND}"
+
+S="${WORKDIR}/${MY_PN}-${PV}/src"
+
+PATCHES=(
+ "${FILESDIR}"/${P}-confdir.patch
+)
+
+src_install() {
+ # Upstream's Makefile does the same but in non-standard way.
+ dobin wash reaver
+
+ doman ../docs/reaver.1
+ dodoc ../docs/README ../docs/README.REAVER ../docs/README.WASH
+
+ keepdir /var/lib/reaver
+}
diff --git a/net-wireless/rtl-sdr-blog/Manifest b/net-wireless/rtl-sdr-blog/Manifest
new file mode 100644
index 000000000000..6ef92af99368
--- /dev/null
+++ b/net-wireless/rtl-sdr-blog/Manifest
@@ -0,0 +1 @@
+DIST rtl-sdr-blog-1.3.6.gh.tar.gz 138270 BLAKE2B a310eb44d1f65c882db35ecb694c4ce4f4e1b295558f61f15f3f7c6e11ca6f9860cd063f58062f2051b93d17af0d710928e95e3b806b17b317ab98143c12057d SHA512 3689fdafd111bae4b033e52b157ba800a6ec3ead8b045f2cf3572059ef49b76fa61aad384c0be6ff1a1c0a73cb46081c0ff9af67f05b0371e738c6dd2f21436c
diff --git a/net-wireless/rtl-sdr-blog/files/rtl-sdr-blog-1.3.6-disable-static.patch b/net-wireless/rtl-sdr-blog/files/rtl-sdr-blog-1.3.6-disable-static.patch
new file mode 100644
index 000000000000..aff87deed756
--- /dev/null
+++ b/net-wireless/rtl-sdr-blog/files/rtl-sdr-blog-1.3.6-disable-static.patch
@@ -0,0 +1,55 @@
+--- a/src/CMakeLists.txt
++++ b/src/CMakeLists.txt
+@@ -34,25 +34,6 @@
+ generate_export_header(rtlsdr)
+
+ ########################################################################
+-# Setup static library variant
+-########################################################################
+-add_library(rtlsdr_static STATIC librtlsdr.c
+- tuner_e4k.c tuner_fc0012.c tuner_fc0013.c tuner_fc2580.c tuner_r82xx.c)
+-target_link_libraries(rtlsdr ${LIBUSB_LIBRARIES} ${THREADS_PTHREADS_LIBRARY})
+-target_include_directories(rtlsdr_static PUBLIC
+- $<BUILD_INTERFACE:${CMAKE_SOURCE_DIR}/include>
+- $<INSTALL_INTERFACE:include> # <prefix>/include
+- ${LIBUSB_INCLUDE_DIRS}
+- ${THREADS_PTHREADS_INCLUDE_DIR}
+- )
+-set_property(TARGET rtlsdr_static APPEND PROPERTY COMPILE_DEFINITIONS "rtlsdr_STATIC" )
+-if(NOT WIN32)
+-# Force same library filename for static and shared variants of the library
+-set_target_properties(rtlsdr_static PROPERTIES OUTPUT_NAME rtlsdr)
+-endif()
+-generate_export_header(rtlsdr_static)
+-
+-########################################################################
+ # Set up Windows DLL resource files
+ ########################################################################
+ IF(MSVC)
+@@ -63,7 +44,6 @@
+ ${CMAKE_CURRENT_BINARY_DIR}/rtlsdr.rc
+ @ONLY)
+ target_sources(rtlsdr PRIVATE ${CMAKE_CURRENT_BINARY_DIR}/rtlsdr.rc)
+- target_sources(rtlsdr_static PRIVATE ${CMAKE_CURRENT_BINARY_DIR}/rtlsdr.rc)
+ ENDIF(MSVC)
+
+ ########################################################################
+@@ -94,7 +74,7 @@
+ add_executable(rtl_adsb rtl_adsb.c)
+ add_executable(rtl_power rtl_power.c)
+ add_executable(rtl_biast rtl_biast.c)
+-set(INSTALL_TARGETS rtlsdr rtlsdr_static rtl_sdr rtl_tcp rtl_test rtl_fm rtl_eeprom rtl_adsb rtl_power rtl_biast)
++set(INSTALL_TARGETS rtlsdr rtl_sdr rtl_tcp rtl_test rtl_fm rtl_eeprom rtl_adsb rtl_power rtl_biast)
+
+ target_link_libraries(rtl_sdr rtlsdr convenience_static
+ ${LIBUSB_LIBRARIES}
+@@ -163,9 +143,6 @@
+ install(TARGETS rtlsdr EXPORT RTLSDR-export
+ LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR} # .so/.dylib file
+ )
+-install(TARGETS rtlsdr_static EXPORT RTLSDR-export
+- ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR} # .so/.dylib file
+- )
+ install(TARGETS rtl_sdr rtl_tcp rtl_test rtl_fm rtl_eeprom rtl_adsb rtl_power rtl_biast
+ DESTINATION ${CMAKE_INSTALL_BINDIR}
+ )
diff --git a/net-wireless/rtl-sdr-blog/files/rtl-sdr-blog-1.3.6-pkgconfig-libdir.patch b/net-wireless/rtl-sdr-blog/files/rtl-sdr-blog-1.3.6-pkgconfig-libdir.patch
new file mode 100644
index 000000000000..831fc0063947
--- /dev/null
+++ b/net-wireless/rtl-sdr-blog/files/rtl-sdr-blog-1.3.6-pkgconfig-libdir.patch
@@ -0,0 +1,11 @@
+--- a/CMakeLists.txt
++++ b/CMakeLists.txt
+@@ -174,7 +174,7 @@
+ set(prefix "${CMAKE_INSTALL_PREFIX}")
+ set(exec_prefix \${prefix})
+ set(includedir \${prefix}/include)
+-set(libdir \${exec_prefix}/lib)
++set(libdir \${exec_prefix}/${CMAKE_INSTALL_LIBDIR})
+
+ CONFIGURE_FILE(
+ ${CMAKE_CURRENT_SOURCE_DIR}/librtlsdr.pc.in
diff --git a/net-wireless/rtl-sdr-blog/files/rtl-sdr-blog-1.3.6-udev-rules-path.patch b/net-wireless/rtl-sdr-blog/files/rtl-sdr-blog-1.3.6-udev-rules-path.patch
new file mode 100644
index 000000000000..e164bc553956
--- /dev/null
+++ b/net-wireless/rtl-sdr-blog/files/rtl-sdr-blog-1.3.6-udev-rules-path.patch
@@ -0,0 +1,11 @@
+--- a/CMakeLists.txt
++++ b/CMakeLists.txt
+@@ -113,7 +113,7 @@
+ if (INSTALL_UDEV_RULES)
+ install (
+ FILES rtl-sdr.rules
+- DESTINATION "/etc/udev/rules.d"
++ DESTINATION "/lib/udev/rules.d"
+ COMPONENT "udev"
+ )
+ else (INSTALL_UDEV_RULES)
diff --git a/net-wireless/rtl-sdr-blog/files/rtl_tcp.confd b/net-wireless/rtl-sdr-blog/files/rtl_tcp.confd
new file mode 100644
index 000000000000..653d292de3cd
--- /dev/null
+++ b/net-wireless/rtl-sdr-blog/files/rtl_tcp.confd
@@ -0,0 +1,7 @@
+# Copyright 1999-2025 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+# Options which will be passed to rtl_tcp.
+# Default is listen on localhost with default port 1234 on first device.
+# See `rtl_tcp -h` for all available options.
+RTL_TCP_OPTIONS="-a localhost -d0 -p 1234"
diff --git a/net-wireless/rtl-sdr-blog/files/rtl_tcp.initd b/net-wireless/rtl-sdr-blog/files/rtl_tcp.initd
new file mode 100644
index 000000000000..6dd8f795e190
--- /dev/null
+++ b/net-wireless/rtl-sdr-blog/files/rtl_tcp.initd
@@ -0,0 +1,11 @@
+#!/sbin/openrc-run
+# Copyright 1999-2025 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+error_log="/var/log/rtl_tcp.log"
+pidfile="/run/rtl_tcp.pid"
+output_log="/var/log/rtl_tcp.log"
+
+command="/usr/bin/rtl_tcp"
+command_background="true"
+command_args="${RTL_TCP_OPTIONS}"
diff --git a/net-wireless/rtl-sdr-blog/metadata.xml b/net-wireless/rtl-sdr-blog/metadata.xml
new file mode 100644
index 000000000000..4d78977c3239
--- /dev/null
+++ b/net-wireless/rtl-sdr-blog/metadata.xml
@@ -0,0 +1,18 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE pkgmetadata SYSTEM "https://docs.baldeagleos.com/dtd/metadata.dtd">
+<pkgmetadata>
+ <maintainer type="person">
+ <email>conikost@gentoo.org</email>
+ <name>Conrad Kostecki</name>
+ </maintainer>
+ <longdescription>
+ This package aims to replace the <pkg>net-wireless/rtl-sdr</pkg> package,
+ as it contains various improvments for RTL-SDR Blog V3 and V4 units.
+ Since it's based on a modified <pkg>net-wireless/rtl-sdr</pkg> package,
+ it cannot co-exist with it.
+ </longdescription>
+ <use>
+ <flag name="zerocopy">may cause a bus error on some ARM systems</flag>
+ </use>
+ <origin>baldeagleos-repo</origin>
+</pkgmetadata>
diff --git a/net-wireless/rtl-sdr-blog/rtl-sdr-blog-1.3.6-r2.ebuild b/net-wireless/rtl-sdr-blog/rtl-sdr-blog-1.3.6-r2.ebuild
new file mode 100644
index 000000000000..78d9bfcef214
--- /dev/null
+++ b/net-wireless/rtl-sdr-blog/rtl-sdr-blog-1.3.6-r2.ebuild
@@ -0,0 +1,65 @@
+# Copyright 1999-2026 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=8
+
+inherit cmake udev
+
+DESCRIPTION="Modified Osmocom drivers with enhancements for RTL-SDR Blog V3 and V4 units"
+HOMEPAGE="https://github.com/rtlsdrblog/rtl-sdr-blog"
+SRC_URI="https://github.com/rtlsdrblog/${PN}/archive/refs/tags/v${PV}.tar.gz -> ${P}.gh.tar.gz"
+
+LICENSE="GPL-2+ GPL-3+"
+SLOT="0"
+KEYWORDS="~amd64 ~arm ~arm64 ~ppc ~ppc64 ~riscv ~sparc ~x86"
+IUSE="+zerocopy"
+
+DEPEND="virtual/libusb:1"
+RDEPEND="
+ ${DEPEND}
+ acct-group/plugdev
+ !net-wireless/rtl-sdr
+"
+
+PATCHES=(
+ "${FILESDIR}/${PN}-1.3.6-disable-static.patch"
+ "${FILESDIR}/${PN}-1.3.6-pkgconfig-libdir.patch"
+ "${FILESDIR}/${PN}-1.3.6-udev-rules-path.patch"
+
+)
+
+src_prepare() {
+ # Fix CMake-4 compatibility
+ sed -e '/cmake_minimum_required/s/3\.7\.2/3.10/' -i CMakeLists.txt || die
+
+ # Set proper so file version name
+ sed -e '/VERSION_INFO_PATCH_VERSION/ s/git/0/g' -i CMakeLists.txt || die
+
+ cmake_src_prepare
+}
+
+src_configure() {
+ local mycmakeargs=(
+ -DCVF_VERSION="${PV}"
+ -DDETACH_KERNEL_DRIVER="ON"
+ -DENABLE_ZEROCOPY="$(usex zerocopy)"
+ -DINSTALL_UDEV_RULES="ON"
+ )
+ cmake_src_configure
+}
+
+src_install() {
+ cmake_src_install
+ newinitd "${FILESDIR}"/rtl_tcp.initd rtl_tcp
+ newconfd "${FILESDIR}"/rtl_tcp.confd rtl_tcp
+}
+
+pkg_postinst() {
+ udev_reload
+ elog "Only users in the usb group can capture."
+ elog "Just run 'gpasswd -a <USER> plugdev', then have <USER> re-login."
+}
+
+pkg_postrm() {
+ udev_reload
+}
diff --git a/net-wireless/rtl-sdr/Manifest b/net-wireless/rtl-sdr/Manifest
new file mode 100644
index 000000000000..478a0e311b18
--- /dev/null
+++ b/net-wireless/rtl-sdr/Manifest
@@ -0,0 +1 @@
+DIST rtl-sdr-2.0.2.gh.tar.gz 136512 BLAKE2B 48c8ed688f7eb1fce9400accfef3e7762fc40bb5c4e578bf19fdbb7c90bce55dcd1606d57d656c5860fd26e86fc70cae499e9e981695985571a6d51bb2ddd96b SHA512 20a1630df7d4da5d263c5ffd4d83a7c2a6fc674e3838bf02b2b59c1da8d946dafc48790d410ab2fcbc0362c2ac70e5cdcae9391c5f04803bf2cdddafd6f58483
diff --git a/net-wireless/rtl-sdr/files/rtl-sdr-2.0.2-disable-static.patch b/net-wireless/rtl-sdr/files/rtl-sdr-2.0.2-disable-static.patch
new file mode 100644
index 000000000000..aff87deed756
--- /dev/null
+++ b/net-wireless/rtl-sdr/files/rtl-sdr-2.0.2-disable-static.patch
@@ -0,0 +1,55 @@
+--- a/src/CMakeLists.txt
++++ b/src/CMakeLists.txt
+@@ -34,25 +34,6 @@
+ generate_export_header(rtlsdr)
+
+ ########################################################################
+-# Setup static library variant
+-########################################################################
+-add_library(rtlsdr_static STATIC librtlsdr.c
+- tuner_e4k.c tuner_fc0012.c tuner_fc0013.c tuner_fc2580.c tuner_r82xx.c)
+-target_link_libraries(rtlsdr ${LIBUSB_LIBRARIES} ${THREADS_PTHREADS_LIBRARY})
+-target_include_directories(rtlsdr_static PUBLIC
+- $<BUILD_INTERFACE:${CMAKE_SOURCE_DIR}/include>
+- $<INSTALL_INTERFACE:include> # <prefix>/include
+- ${LIBUSB_INCLUDE_DIRS}
+- ${THREADS_PTHREADS_INCLUDE_DIR}
+- )
+-set_property(TARGET rtlsdr_static APPEND PROPERTY COMPILE_DEFINITIONS "rtlsdr_STATIC" )
+-if(NOT WIN32)
+-# Force same library filename for static and shared variants of the library
+-set_target_properties(rtlsdr_static PROPERTIES OUTPUT_NAME rtlsdr)
+-endif()
+-generate_export_header(rtlsdr_static)
+-
+-########################################################################
+ # Set up Windows DLL resource files
+ ########################################################################
+ IF(MSVC)
+@@ -63,7 +44,6 @@
+ ${CMAKE_CURRENT_BINARY_DIR}/rtlsdr.rc
+ @ONLY)
+ target_sources(rtlsdr PRIVATE ${CMAKE_CURRENT_BINARY_DIR}/rtlsdr.rc)
+- target_sources(rtlsdr_static PRIVATE ${CMAKE_CURRENT_BINARY_DIR}/rtlsdr.rc)
+ ENDIF(MSVC)
+
+ ########################################################################
+@@ -94,7 +74,7 @@
+ add_executable(rtl_adsb rtl_adsb.c)
+ add_executable(rtl_power rtl_power.c)
+ add_executable(rtl_biast rtl_biast.c)
+-set(INSTALL_TARGETS rtlsdr rtlsdr_static rtl_sdr rtl_tcp rtl_test rtl_fm rtl_eeprom rtl_adsb rtl_power rtl_biast)
++set(INSTALL_TARGETS rtlsdr rtl_sdr rtl_tcp rtl_test rtl_fm rtl_eeprom rtl_adsb rtl_power rtl_biast)
+
+ target_link_libraries(rtl_sdr rtlsdr convenience_static
+ ${LIBUSB_LIBRARIES}
+@@ -163,9 +143,6 @@
+ install(TARGETS rtlsdr EXPORT RTLSDR-export
+ LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR} # .so/.dylib file
+ )
+-install(TARGETS rtlsdr_static EXPORT RTLSDR-export
+- ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR} # .so/.dylib file
+- )
+ install(TARGETS rtl_sdr rtl_tcp rtl_test rtl_fm rtl_eeprom rtl_adsb rtl_power rtl_biast
+ DESTINATION ${CMAKE_INSTALL_BINDIR}
+ )
diff --git a/net-wireless/rtl-sdr/files/rtl-sdr-2.0.2-pkgconfig-libdir.patch b/net-wireless/rtl-sdr/files/rtl-sdr-2.0.2-pkgconfig-libdir.patch
new file mode 100644
index 000000000000..831fc0063947
--- /dev/null
+++ b/net-wireless/rtl-sdr/files/rtl-sdr-2.0.2-pkgconfig-libdir.patch
@@ -0,0 +1,11 @@
+--- a/CMakeLists.txt
++++ b/CMakeLists.txt
+@@ -174,7 +174,7 @@
+ set(prefix "${CMAKE_INSTALL_PREFIX}")
+ set(exec_prefix \${prefix})
+ set(includedir \${prefix}/include)
+-set(libdir \${exec_prefix}/lib)
++set(libdir \${exec_prefix}/${CMAKE_INSTALL_LIBDIR})
+
+ CONFIGURE_FILE(
+ ${CMAKE_CURRENT_SOURCE_DIR}/librtlsdr.pc.in
diff --git a/net-wireless/rtl-sdr/files/rtl-sdr-2.0.2-udev-rules-path.patch b/net-wireless/rtl-sdr/files/rtl-sdr-2.0.2-udev-rules-path.patch
new file mode 100644
index 000000000000..e164bc553956
--- /dev/null
+++ b/net-wireless/rtl-sdr/files/rtl-sdr-2.0.2-udev-rules-path.patch
@@ -0,0 +1,11 @@
+--- a/CMakeLists.txt
++++ b/CMakeLists.txt
+@@ -113,7 +113,7 @@
+ if (INSTALL_UDEV_RULES)
+ install (
+ FILES rtl-sdr.rules
+- DESTINATION "/etc/udev/rules.d"
++ DESTINATION "/lib/udev/rules.d"
+ COMPONENT "udev"
+ )
+ else (INSTALL_UDEV_RULES)
diff --git a/net-wireless/rtl-sdr/files/rtl_tcp.confd b/net-wireless/rtl-sdr/files/rtl_tcp.confd
new file mode 100644
index 000000000000..530e89fc940d
--- /dev/null
+++ b/net-wireless/rtl-sdr/files/rtl_tcp.confd
@@ -0,0 +1,4 @@
+# /etc/conf.d/rtl_tcp - configuration file for /etc/init.d/rtl_tcp
+
+# Options to pass to rtl_tcp, see `rtl_tcp -h`
+#RTL_TCP_OPTIONS="-d0"
diff --git a/net-wireless/rtl-sdr/files/rtl_tcp.confd-r1 b/net-wireless/rtl-sdr/files/rtl_tcp.confd-r1
new file mode 100644
index 000000000000..653d292de3cd
--- /dev/null
+++ b/net-wireless/rtl-sdr/files/rtl_tcp.confd-r1
@@ -0,0 +1,7 @@
+# Copyright 1999-2025 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+# Options which will be passed to rtl_tcp.
+# Default is listen on localhost with default port 1234 on first device.
+# See `rtl_tcp -h` for all available options.
+RTL_TCP_OPTIONS="-a localhost -d0 -p 1234"
diff --git a/net-wireless/rtl-sdr/files/rtl_tcp.initd b/net-wireless/rtl-sdr/files/rtl_tcp.initd
new file mode 100644
index 000000000000..2e4d07b8c28a
--- /dev/null
+++ b/net-wireless/rtl-sdr/files/rtl_tcp.initd
@@ -0,0 +1,18 @@
+#!/sbin/openrc-run
+# Copyright 1999-2019 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+start() {
+ ebegin "Starting rtl_tcp"
+ start-stop-daemon --start --quiet --pidfile /run/rtl_tcp.pid \
+ --background --make-pidfile --exec /usr/bin/rtl_tcp \
+ -1 /var/log/rtl_tcp.log -2 /var/log/rtl_tcp.log \
+ -- ${RTL_TCP_OPTIONS}
+ eend ${?}
+}
+
+stop() {
+ ebegin "Stopping rtl_tcp"
+ start-stop-daemon --stop --quiet --pidfile /run/rtl_tcp.pid
+ eend ${?}
+}
diff --git a/net-wireless/rtl-sdr/files/rtl_tcp.initd-r1 b/net-wireless/rtl-sdr/files/rtl_tcp.initd-r1
new file mode 100644
index 000000000000..6dd8f795e190
--- /dev/null
+++ b/net-wireless/rtl-sdr/files/rtl_tcp.initd-r1
@@ -0,0 +1,11 @@
+#!/sbin/openrc-run
+# Copyright 1999-2025 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+error_log="/var/log/rtl_tcp.log"
+pidfile="/run/rtl_tcp.pid"
+output_log="/var/log/rtl_tcp.log"
+
+command="/usr/bin/rtl_tcp"
+command_background="true"
+command_args="${RTL_TCP_OPTIONS}"
diff --git a/net-wireless/rtl-sdr/metadata.xml b/net-wireless/rtl-sdr/metadata.xml
new file mode 100644
index 000000000000..843cb50b6b9d
--- /dev/null
+++ b/net-wireless/rtl-sdr/metadata.xml
@@ -0,0 +1,16 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE pkgmetadata SYSTEM "https://docs.baldeagleos.com/dtd/metadata.dtd">
+<pkgmetadata>
+ <maintainer type="project">
+ <email>radio@gentoo.org</email>
+ <name>Radio</name>
+ </maintainer>
+ <maintainer type="person">
+ <email>conikost@gentoo.org</email>
+ <name>Conrad Kostecki</name>
+ </maintainer>
+ <use>
+ <flag name="zerocopy">may cause a bus error on some ARM systems</flag>
+ </use>
+ <origin>baldeagleos-repo</origin>
+</pkgmetadata>
diff --git a/net-wireless/rtl-sdr/rtl-sdr-2.0.2-r3.ebuild b/net-wireless/rtl-sdr/rtl-sdr-2.0.2-r3.ebuild
new file mode 100644
index 000000000000..e983562e95c5
--- /dev/null
+++ b/net-wireless/rtl-sdr/rtl-sdr-2.0.2-r3.ebuild
@@ -0,0 +1,72 @@
+# Copyright 1999-2026 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=8
+
+inherit cmake udev
+
+DESCRIPTION="Turns your Realtek RTL2832 based DVB dongle into a SDR receiver"
+HOMEPAGE="https://sdr.osmocom.org/trac/wiki/rtl-sdr"
+
+if [[ ${PV} == 9999* ]]; then
+ inherit git-r3
+ EGIT_REPO_URI="https://git.osmocom.org/${PN}"
+else
+ SRC_URI="https://github.com/osmocom/rtl-sdr/archive/refs/tags/v${PV}.tar.gz -> ${P}.gh.tar.gz"
+ KEYWORDS="amd64 arm arm64 ppc ppc64 ~riscv ~sparc x86"
+fi
+
+LICENSE="GPL-2+ GPL-3+"
+# In 2.0.0 and 2.0.1, the SONAME was accidentally "2". In 2.0.2, it
+# was restored back to "0" (see 7ebcb041f2ce887ef4d1a64607558889a86ff169 upstream).
+# We can't really know what users built against what and when without
+# us having had a subslot at the time, so we use 0.1 in it to be safe to avoid
+# broken binaries by forcing rebuilds.
+SLOT="0/0.1"
+IUSE="+zerocopy"
+
+DEPEND="virtual/libusb:1"
+RDEPEND="
+ ${DEPEND}
+ acct-group/plugdev
+ !net-wireless/rtl-sdr-blog
+"
+
+PATCHES=(
+ "${FILESDIR}/${PN}-2.0.2-disable-static.patch"
+ "${FILESDIR}/${PN}-2.0.2-pkgconfig-libdir.patch"
+ "${FILESDIR}/${PN}-2.0.2-udev-rules-path.patch"
+
+)
+
+src_prepare() {
+ # Fix CMake-4 compatibility
+ sed -e '/cmake_minimum_required/s/3\.7\.2/3.10/' -i CMakeLists.txt || die
+
+ cmake_src_prepare
+}
+
+src_configure() {
+ local mycmakeargs=(
+ -DDETACH_KERNEL_DRIVER="ON"
+ -DENABLE_ZEROCOPY="$(usex zerocopy)"
+ -DINSTALL_UDEV_RULES="ON"
+ )
+ cmake_src_configure
+}
+
+src_install() {
+ cmake_src_install
+ newinitd "${FILESDIR}"/rtl_tcp.initd-r1 rtl_tcp
+ newconfd "${FILESDIR}"/rtl_tcp.confd-r1 rtl_tcp
+}
+
+pkg_postinst() {
+ udev_reload
+ elog "Only users in the usb group can capture."
+ elog "Just run 'gpasswd -a <USER> plugdev', then have <USER> re-login."
+}
+
+pkg_postrm() {
+ udev_reload
+}
diff --git a/net-wireless/rtl-sdr/rtl-sdr-9999.ebuild b/net-wireless/rtl-sdr/rtl-sdr-9999.ebuild
new file mode 100644
index 000000000000..74924dc92a12
--- /dev/null
+++ b/net-wireless/rtl-sdr/rtl-sdr-9999.ebuild
@@ -0,0 +1,72 @@
+# Copyright 1999-2026 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=8
+
+inherit cmake udev
+
+DESCRIPTION="Turns your Realtek RTL2832 based DVB dongle into a SDR receiver"
+HOMEPAGE="https://sdr.osmocom.org/trac/wiki/rtl-sdr"
+
+if [[ ${PV} == 9999* ]]; then
+ inherit git-r3
+ EGIT_REPO_URI="https://git.osmocom.org/${PN}"
+else
+ SRC_URI="https://github.com/osmocom/rtl-sdr/archive/refs/tags/v${PV}.tar.gz -> ${P}.gh.tar.gz"
+ KEYWORDS="~amd64 ~arm ~arm64 ~ppc ~ppc64 ~riscv ~sparc ~x86"
+fi
+
+LICENSE="GPL-2+ GPL-3+"
+# In 2.0.0 and 2.0.1, the SONAME was accidentally "2". In 2.0.2, it
+# was restored back to "0" (see 7ebcb041f2ce887ef4d1a64607558889a86ff169 upstream).
+# We can't really know what users built against what and when without
+# us having had a subslot at the time, so we use 0.1 in it to be safe to avoid
+# broken binaries by forcing rebuilds.
+SLOT="0/0.1"
+IUSE="+zerocopy"
+
+DEPEND="virtual/libusb:1"
+RDEPEND="
+ ${DEPEND}
+ acct-group/plugdev
+ !net-wireless/rtl-sdr-blog
+"
+
+PATCHES=(
+ "${FILESDIR}/${PN}-2.0.2-disable-static.patch"
+ "${FILESDIR}/${PN}-2.0.2-pkgconfig-libdir.patch"
+ "${FILESDIR}/${PN}-2.0.2-udev-rules-path.patch"
+
+)
+
+src_prepare() {
+ # Fix CMake-4 compatibility
+ sed -e '/cmake_minimum_required/s/3\.7\.2/3.10/' -i CMakeLists.txt || die
+
+ cmake_src_prepare
+}
+
+src_configure() {
+ local mycmakeargs=(
+ -DDETACH_KERNEL_DRIVER="ON"
+ -DENABLE_ZEROCOPY="$(usex zerocopy)"
+ -DINSTALL_UDEV_RULES="ON"
+ )
+ cmake_src_configure
+}
+
+src_install() {
+ cmake_src_install
+ newinitd "${FILESDIR}"/rtl_tcp.initd-r1 rtl_tcp
+ newconfd "${FILESDIR}"/rtl_tcp.confd-r1 rtl_tcp
+}
+
+pkg_postinst() {
+ udev_reload
+ elog "Only users in the usb group can capture."
+ elog "Just run 'gpasswd -a <USER> plugdev', then have <USER> re-login."
+}
+
+pkg_postrm() {
+ udev_reload
+}
diff --git a/net-wireless/rtl_433/Manifest b/net-wireless/rtl_433/Manifest
new file mode 100644
index 000000000000..497a36f177c8
--- /dev/null
+++ b/net-wireless/rtl_433/Manifest
@@ -0,0 +1,2 @@
+DIST rtl_433-21.12.tar.gz 954628 BLAKE2B 7622cba1ff8d9ed46bcd9d7298b2278437aba3dca65985f27d44d20d3b79082cff04172d4593af07379928d42d5e422ff2857ada427156b16f1ba24a7bca57ed SHA512 8183887c1e09e94bee10b70190555d7fa0fa6675bba6130f78ab111b77428fef90696bc15a8e5abb07ae5ae3e492641a40acd6087d5bc413db5f2944878f03a3
+DIST rtl_433-22.11.tar.gz 841774 BLAKE2B 4a3c060c85233a85e951eff5fb210cc4ec5529a6cc868782fdbf7b3dad7372dcd7d428776c539d25105b9cfdf5f260bc031bbd5435eb2658e73b8b275f2040ee SHA512 fe0a26b14df97c679968536b5b3dfe41e5f8c6e0af00265461b4e1bf6312dd71cc1b1ccf2f5f78bc4d67b5f2effb17a88b743dc38db4a0a73f9f5b756868dba4
diff --git a/net-wireless/rtl_433/files/rtl_433-21.12-CVE.patch b/net-wireless/rtl_433/files/rtl_433-21.12-CVE.patch
new file mode 100644
index 000000000000..1ce26c468e87
--- /dev/null
+++ b/net-wireless/rtl_433/files/rtl_433-21.12-CVE.patch
@@ -0,0 +1,55 @@
+From 2dad7b9fc67a1d0bfbe520fbd821678b8f8cc7a8 Mon Sep 17 00:00:00 2001
+From: "Christian W. Zuckschwerdt" <christian@zuckschwerdt.org>
+Date: Mon, 24 Jan 2022 15:53:20 +0100
+Subject: [PATCH] minor: Fix overflow in Clipsal-CMR113 and Somfy-IOHC reported
+ by aug5t7
+
+---
+ src/devices/cmr113.c | 4 ++--
+ src/devices/somfy_iohc.c | 9 +++++----
+ 2 files changed, 7 insertions(+), 6 deletions(-)
+
+diff --git a/src/devices/cmr113.c b/src/devices/cmr113.c
+index c85dfac56..19ec5d421 100644
+--- a/src/devices/cmr113.c
++++ b/src/devices/cmr113.c
+@@ -42,8 +42,8 @@ Kudos to Jon Oxer for decoding this stream and putting it here:
+
+ */
+
+-#define COMPARE_BITS 83
+-#define COMPARE_BYTES (COMPARE_BITS/8)
++#define COMPARE_BITS 83
++#define COMPARE_BYTES ((COMPARE_BITS + 7) / 8)
+
+ static int cmr113_decode(r_device *decoder, bitbuffer_t *bitbuffer)
+ {
+diff --git a/src/devices/somfy_iohc.c b/src/devices/somfy_iohc.c
+index 906cae53e..2c88067b5 100644
+--- a/src/devices/somfy_iohc.c
++++ b/src/devices/somfy_iohc.c
+@@ -100,11 +100,12 @@ static int somfy_iohc_decode(r_device *decoder, bitbuffer_t *bitbuffer)
+ if (bitbuffer->num_rows != 1)
+ return DECODE_ABORT_EARLY;
+
+- int offset = bitbuffer_search(bitbuffer, 0, 0, preamble_pattern, 24) + 24;
+- if (offset >= bitbuffer->bits_per_row[0] - 19 * 10)
++ unsigned offset = bitbuffer_search(bitbuffer, 0, 0, preamble_pattern, 24) + 24;
++ if (offset + 19 * 10 >= bitbuffer->bits_per_row[0])
+ return DECODE_ABORT_EARLY;
+
+- int num_bits = bitbuffer->bits_per_row[0] - offset;
++ unsigned num_bits = bitbuffer->bits_per_row[0] - offset;
++ num_bits = MIN(num_bits, sizeof (b) * 8);
+
+ int len = extract_bytes_uart(bitbuffer->bb[0], offset, num_bits, b);
+ if (len < 19)
+@@ -120,7 +121,7 @@ static int somfy_iohc_decode(r_device *decoder, bitbuffer_t *bitbuffer)
+ // calculate and verify checksum
+ if (crc16lsb(b, len, 0x8408, 0x0000) != 0) // unreflected poly 0x1021
+ return DECODE_FAIL_MIC;
+- bitrow_printf(b, len * 8, "%s: offset %d, num_bits %d, len %d, msg_len %d\n", __func__, offset, num_bits, len, msg_len);
++ bitrow_printf(b, len * 8, "%s: offset %u, num_bits %u, len %d, msg_len %d\n", __func__, offset, num_bits, len, msg_len);
+
+ int msg_type = (b[0]);
+ int dst_id = ((unsigned)b[4] << 24) | (b[3] << 16) | (b[2] << 8) | (b[1]); // assume Little-Endian
diff --git a/net-wireless/rtl_433/files/rtl_433-21.12-test-visibility.patch b/net-wireless/rtl_433/files/rtl_433-21.12-test-visibility.patch
new file mode 100644
index 000000000000..01626361f5cc
--- /dev/null
+++ b/net-wireless/rtl_433/files/rtl_433-21.12-test-visibility.patch
@@ -0,0 +1,155 @@
+From eda74c17dba1cfed7bcbb0654251cb0cd4e1f4b2 Mon Sep 17 00:00:00 2001
+From: "Christian W. Zuckschwerdt" <christian@zuckschwerdt.org>
+Date: Thu, 17 Mar 2022 08:55:49 +0100
+Subject: [PATCH] minor: Add visibility to dynamic lib exports (closes #2010)
+
+Co-authored-by: "Rick Farina (Zero_Chaos)" <zerochaos@gentoo.org>
+---
+ include/data.h | 58 ++++++++++++++++++++++++++++----------------
+ src/CMakeLists.txt | 2 +-
+ tests/CMakeLists.txt | 2 +-
+ 3 files changed, 39 insertions(+), 23 deletions(-)
+
+diff --git a/include/data.h b/include/data.h
+index 34fe79525..e892c7fa2 100644
+--- a/include/data.h
++++ b/include/data.h
+@@ -21,6 +21,22 @@
+ #ifndef INCLUDE_DATA_H_
+ #define INCLUDE_DATA_H_
+
++#if defined _WIN32 || defined __CYGWIN__
++ #ifdef data_EXPORTS
++ #define R_API __stdcall __declspec(dllexport) // Note: actually gcc seems to also supports this syntax.
++ #else
++ #define R_API __stdcall __declspec(dllimport) // Note: actually gcc seems to also supports this syntax.
++ #endif
++ #define R_API_CALLCONV __stdcall
++#else
++ #if __GNUC__ >= 4
++ #define R_API __attribute__((visibility ("default")))
++ #else
++ #define R_API
++ #endif
++ #define R_API_CALLCONV
++#endif
++
+ #include <stddef.h>
+
+ typedef enum {
+@@ -87,19 +103,19 @@ typedef struct data {
+
+ @return A constructed data_t* object or NULL if there was a memory allocation error.
+ */
+-data_t *data_make(const char *key, const char *pretty_key, ...);
++R_API data_t *data_make(const char *key, const char *pretty_key, ...);
+
+ /** Adds to a structured data object, by appending data.
+
+ @see data_make()
+ */
+-data_t *data_append(data_t *first, const char *key, const char *pretty_key, ...);
++R_API data_t *data_append(data_t *first, const char *key, const char *pretty_key, ...);
+
+ /** Adds to a structured data object, by prepending data.
+
+ @see data_make()
+ */
+-data_t *data_prepend(data_t *first, const char *key, const char *pretty_key, ...);
++R_API data_t *data_prepend(data_t *first, const char *key, const char *pretty_key, ...);
+
+ /** Constructs an array from given data of the given uniform type.
+
+@@ -110,28 +126,28 @@ data_t *data_prepend(data_t *first, const char *key, const char *pretty_key, ...
+ @return The constructed data array object, typically placed inside a data_t or NULL
+ if there was a memory allocation error.
+ */
+-data_array_t *data_array(int num_values, data_type_t type, void *ptr);
++R_API data_array_t *data_array(int num_values, data_type_t type, void *ptr);
+
+ /** Releases a data array. */
+-void data_array_free(data_array_t *array);
++R_API void data_array_free(data_array_t *array);
+
+ /** Retain a structure object, returns the structure object passed in. */
+-data_t *data_retain(data_t *data);
++R_API data_t *data_retain(data_t *data);
+
+ /** Releases a structure object if retain is zero, decrement retain otherwise. */
+-void data_free(data_t *data);
++R_API void data_free(data_t *data);
+
+ struct data_output;
+
+ typedef struct data_output {
+- void (*print_data)(struct data_output *output, data_t *data, char const *format);
+- void (*print_array)(struct data_output *output, data_array_t *data, char const *format);
+- void (*print_string)(struct data_output *output, const char *data, char const *format);
+- void (*print_double)(struct data_output *output, double data, char const *format);
+- void (*print_int)(struct data_output *output, int data, char const *format);
+- void (*output_start)(struct data_output *output, char const *const *fields, int num_fields);
+- void (*output_flush)(struct data_output *output);
+- void (*output_free)(struct data_output *output);
++ void (R_API_CALLCONV *print_data)(struct data_output *output, data_t *data, char const *format);
++ void (R_API_CALLCONV *print_array)(struct data_output *output, data_array_t *data, char const *format);
++ void (R_API_CALLCONV *print_string)(struct data_output *output, const char *data, char const *format);
++ void (R_API_CALLCONV *print_double)(struct data_output *output, double data, char const *format);
++ void (R_API_CALLCONV *print_int)(struct data_output *output, int data, char const *format);
++ void (R_API_CALLCONV *output_start)(struct data_output *output, char const *const *fields, int num_fields);
++ void (R_API_CALLCONV *output_flush)(struct data_output *output);
++ void (R_API_CALLCONV *output_free)(struct data_output *output);
+ } data_output_t;
+
+ /** Setup known field keys and start output, used by CSV only.
+@@ -141,19 +157,19 @@ typedef struct data_output {
+ strings not. The list may contain duplicates and they are eliminated.
+ @param num_fields number of fields
+ */
+-void data_output_start(struct data_output *output, char const *const *fields, int num_fields);
++R_API void data_output_start(struct data_output *output, char const *const *fields, int num_fields);
+
+ /** Prints a structured data object, flushes the output if applicable. */
+-void data_output_print(struct data_output *output, data_t *data);
++R_API void data_output_print(struct data_output *output, data_t *data);
+
+-void data_output_free(struct data_output *output);
++R_API void data_output_free(struct data_output *output);
+
+ /* data output helpers */
+
+-void print_value(data_output_t *output, data_type_t type, data_value_t value, char const *format);
++R_API void print_value(data_output_t *output, data_type_t type, data_value_t value, char const *format);
+
+-void print_array_value(data_output_t *output, data_array_t *array, char const *format, int idx);
++R_API void print_array_value(data_output_t *output, data_array_t *array, char const *format, int idx);
+
+-size_t data_print_jsons(data_t *data, char *dst, size_t len);
++R_API size_t data_print_jsons(data_t *data, char *dst, size_t len);
+
+ #endif // INCLUDE_DATA_H_
+diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt
+index b050dd597..443393e67 100644
+--- a/src/CMakeLists.txt
++++ b/src/CMakeLists.txt
+@@ -253,7 +253,7 @@ if(MSVC)
+ target_sources(rtl_433 PRIVATE getopt/getopt.c)
+ endif()
+
+-add_library(data data.c abuf.c term_ctl.c)
++add_library(data data.c abuf.c)
+ target_link_libraries(data ${NET_LIBRARIES})
+
+ target_link_libraries(rtl_433
+diff --git a/tests/CMakeLists.txt b/tests/CMakeLists.txt
+index aaae3d498..9a3a14302 100644
+--- a/tests/CMakeLists.txt
++++ b/tests/CMakeLists.txt
+@@ -1,7 +1,7 @@
+ ########################################################################
+ # Compile test cases
+ ########################################################################
+-add_executable(data-test data-test.c ../src/output_file.c)
++add_executable(data-test data-test.c ../src/output_file.c ../src/term_ctl.c)
+
+ target_link_libraries(data-test data)
+
diff --git a/net-wireless/rtl_433/metadata.xml b/net-wireless/rtl_433/metadata.xml
new file mode 100644
index 000000000000..33ab60d097c9
--- /dev/null
+++ b/net-wireless/rtl_433/metadata.xml
@@ -0,0 +1,16 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE pkgmetadata SYSTEM "https://docs.baldeagleos.com/dtd/metadata.dtd">
+<pkgmetadata>
+ <maintainer type="project">
+ <email>radio@gentoo.org</email>
+ <name>Radio</name>
+ </maintainer>
+ <use>
+ <flag name="rtlsdr">Build with Realtek RTL2832U (rtlsdr) support</flag>
+ <flag name="soapysdr">Build with SoapySDR support</flag>
+ </use>
+ <upstream>
+ <remote-id type="cpe">cpe:/a:rtl_433_project:rtl_433</remote-id>
+ </upstream>
+ <origin>baldeagleos-repo</origin>
+</pkgmetadata>
diff --git a/net-wireless/rtl_433/rtl_433-21.12.ebuild b/net-wireless/rtl_433/rtl_433-21.12.ebuild
new file mode 100644
index 000000000000..8e0908f317bb
--- /dev/null
+++ b/net-wireless/rtl_433/rtl_433-21.12.ebuild
@@ -0,0 +1,46 @@
+# Copyright 1999-2023 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=8
+
+inherit cmake
+
+DESCRIPTION="Decode OOK modulated signals"
+HOMEPAGE="https://github.com/merbanan/rtl_433"
+if [[ ${PV} == "9999" ]]; then
+ inherit git-r3
+ EGIT_REPO_URI="https://github.com/merbanan/rtl_433"
+else
+ SRC_URI="https://github.com/merbanan/rtl_433/archive/${PV}.tar.gz -> ${P}.tar.gz"
+ KEYWORDS="~amd64 ~x86"
+fi
+
+LICENSE="GPL-2"
+SLOT="0"
+IUSE="+rtlsdr soapysdr test"
+
+DEPEND="rtlsdr? ( net-wireless/rtl-sdr:=
+ virtual/libusb:1 )
+ soapysdr? ( net-wireless/soapysdr:= )
+ dev-libs/openssl:="
+RDEPEND="${DEPEND}"
+RESTRICT="!test? ( test )"
+
+PATCHES=(
+ "${FILESDIR}/${P}-CVE.patch"
+ "${FILESDIR}/${P}-test-visibility.patch"
+)
+
+src_configure() {
+ local mycmakeargs=(
+ -DENABLE_RTLSDR="$(usex rtlsdr)"
+ -DENABLE_SOAPYSDR="$(usex soapysdr)"
+ -DBUILD_TESTING="$(usex test)"
+ )
+ cmake_src_configure
+}
+
+src_install() {
+ cmake_src_install
+ mv "${ED}/usr/etc" "${ED}/" || die
+}
diff --git a/net-wireless/rtl_433/rtl_433-22.11.ebuild b/net-wireless/rtl_433/rtl_433-22.11.ebuild
new file mode 100644
index 000000000000..7c0afbe1dac1
--- /dev/null
+++ b/net-wireless/rtl_433/rtl_433-22.11.ebuild
@@ -0,0 +1,48 @@
+# Copyright 1999-2023 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=8
+
+inherit cmake
+
+DESCRIPTION="Decode OOK modulated signals"
+HOMEPAGE="https://github.com/merbanan/rtl_433"
+if [[ ${PV} == "9999" ]]; then
+ inherit git-r3
+ EGIT_REPO_URI="https://github.com/merbanan/rtl_433"
+else
+ COMMIT="105342a33271bac6837d06aa86c23eec9e9ecb6a"
+ SRC_URI="https://github.com/merbanan/rtl_433/archive/${COMMIT}.tar.gz -> ${P}.tar.gz"
+ S="${WORKDIR}/${PN}-${COMMIT}"
+ #SRC_URI="https://github.com/merbanan/rtl_433/archive/${PV}.tar.gz -> ${P}.tar.gz"
+ KEYWORDS="~amd64 ~x86"
+fi
+
+LICENSE="GPL-2"
+SLOT="0"
+IUSE="+rtlsdr soapysdr test"
+
+DEPEND="rtlsdr? ( net-wireless/rtl-sdr:=
+ virtual/libusb:1 )
+ soapysdr? ( net-wireless/soapysdr:= )"
+RDEPEND="${DEPEND}"
+RESTRICT="!test? ( test )"
+
+src_prepare() {
+ sed -i 's#data data.c#data STATIC data.c#' src/CMakeLists.txt || die
+ cmake_src_prepare
+}
+
+src_configure() {
+ local mycmakeargs=(
+ -DENABLE_RTLSDR="$(usex rtlsdr)"
+ -DENABLE_SOAPYSDR="$(usex soapysdr)"
+ -DBUILD_TESTING="$(usex test)"
+ )
+ cmake_src_configure
+}
+
+src_install() {
+ cmake_src_install
+ mv "${ED}/usr/etc" "${ED}/" || die
+}
diff --git a/net-wireless/rtl_433/rtl_433-9999.ebuild b/net-wireless/rtl_433/rtl_433-9999.ebuild
new file mode 100644
index 000000000000..ea9cb877d387
--- /dev/null
+++ b/net-wireless/rtl_433/rtl_433-9999.ebuild
@@ -0,0 +1,44 @@
+# Copyright 1999-2024 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=8
+
+inherit cmake
+
+DESCRIPTION="Decode OOK modulated signals"
+HOMEPAGE="https://github.com/merbanan/rtl_433"
+if [[ ${PV} == "9999" ]]; then
+ inherit git-r3
+ EGIT_REPO_URI="https://github.com/merbanan/rtl_433"
+else
+ COMMIT="105342a33271bac6837d06aa86c23eec9e9ecb6a"
+ SRC_URI="https://github.com/merbanan/rtl_433/archive/${COMMIT}.tar.gz -> ${P}.tar.gz"
+ S="${WORKDIR}/${PN}-${COMMIT}"
+ #SRC_URI="https://github.com/merbanan/rtl_433/archive/${PV}.tar.gz -> ${P}.tar.gz"
+ KEYWORDS="~amd64 ~x86"
+fi
+
+LICENSE="GPL-2"
+SLOT="0"
+IUSE="+rtlsdr soapysdr test"
+
+DEPEND="dev-libs/openssl:=
+ rtlsdr? ( net-wireless/rtl-sdr:=
+ virtual/libusb:1 )
+ soapysdr? ( net-wireless/soapysdr:= )"
+RDEPEND="${DEPEND}"
+RESTRICT="!test? ( test )"
+
+src_prepare() {
+ sed -i 's#data data.c#data STATIC data.c#' src/CMakeLists.txt || die
+ cmake_src_prepare
+}
+
+src_configure() {
+ local mycmakeargs=(
+ -DENABLE_RTLSDR="$(usex rtlsdr)"
+ -DENABLE_SOAPYSDR="$(usex soapysdr)"
+ -DBUILD_TESTING="$(usex test)"
+ )
+ cmake_src_configure
+}
diff --git a/net-wireless/sdrplay/Manifest b/net-wireless/sdrplay/Manifest
new file mode 100644
index 000000000000..c637a7dc9c7f
--- /dev/null
+++ b/net-wireless/sdrplay/Manifest
@@ -0,0 +1,3 @@
+DIST SDRplay_RSP_API-Linux-2.13.1.run 326016 BLAKE2B 7eff1aa35190db1ead5b1d96994d24ae2301e3a765d6701756c6304a1719aa32125fedacf6a6859d89b89db5dd6956ec0e8c7e814dbd6242db5614a53e89efb3 SHA512 576be63e18084cf3e74bfb20592a44836f22fd9efe74ba9e27e5865a9ab755b26b3f2894cd8331ff876ab664d4e533d2bdbc629d552e75fcfbb3e9814dd140ce
+DIST SDRplay_RSP_API-Linux-3.07.1.run 388847 BLAKE2B 059d9a5fbd14c0e7ecb969cd3e5afe8e3f42896175b443bdaa9f9108302a1c9ef5ad9769e62f824465611d74f67191fff71cc6dbe297e399e5b2f6824c650112 SHA512 428b191db522ca332acd280ac80081852a4ac68117dfdcf48e196f1c28c40a44a8e0907efa56e7f50915af8d53bfa864d437db1692867e15fb653b86fe4b549a
+DIST SDRplay_RSP_API-Linux-3.15.2.run 511429 BLAKE2B 4bf6701e67ffcdc2c1d3bfb6a5d276de47714e248087884142baaceaf6fe8e88676f3da65b11a0d609797fadfb136f36602bb3ab4847a22187285c4aa8f7dcee SHA512 6ded10a6be6455f60666a527809faa2d06474c1513649e4a844d6af3dff4f655b3560b37ce7abde143ce6400fd4a762e4159cbae78040523d138496da9ad85ec
diff --git a/net-wireless/sdrplay/files/20-sdrplay-3.15.2.hwdb b/net-wireless/sdrplay/files/20-sdrplay-3.15.2.hwdb
new file mode 100644
index 000000000000..f16f4e64fd2f
--- /dev/null
+++ b/net-wireless/sdrplay/files/20-sdrplay-3.15.2.hwdb
@@ -0,0 +1,24 @@
+# extracted from install_lib.sh
+usb:v1DF7*
+ ID_VENDOR_FROM_DATABASE=SDRplay
+
+usb:v1DF7p2500*
+ ID_MODEL_FROM_DATABASE=RSP1
+
+usb:v1DF7p3000*
+ ID_MODEL_FROM_DATABASE=RSP1A
+
+usb:v1DF7p3010*
+ ID_MODEL_FROM_DATABASE=RSP2/RSP2pro
+
+usb:v1DF7p3020*
+ ID_MODEL_FROM_DATABASE=RSPduo
+
+usb:v1DF7p3030*
+ ID_MODEL_FROM_DATABASE=RSPdx
+
+usb:v1DF7p3050*
+ ID_MODEL_FROM_DATABASE=RSP1B
+
+usb:v1DF7p3060*
+ ID_MODEL_FROM_DATABASE=RSPdxR2
diff --git a/net-wireless/sdrplay/files/66-sdrplay-3.15.2.rules b/net-wireless/sdrplay/files/66-sdrplay-3.15.2.rules
new file mode 100644
index 000000000000..030f1227315d
--- /dev/null
+++ b/net-wireless/sdrplay/files/66-sdrplay-3.15.2.rules
@@ -0,0 +1,8 @@
+# extracted from installi_lib.sh
+SUBSYSTEM=="usb",ENV{DEVTYPE}=="usb_device",ATTRS{idVendor}=="1df7",ATTRS{idProduct}=="2500",MODE:="0666"
+SUBSYSTEM=="usb",ENV{DEVTYPE}=="usb_device",ATTRS{idVendor}=="1df7",ATTRS{idProduct}=="3000",MODE:="0666"
+SUBSYSTEM=="usb",ENV{DEVTYPE}=="usb_device",ATTRS{idVendor}=="1df7",ATTRS{idProduct}=="3010",MODE:="0666"
+SUBSYSTEM=="usb",ENV{DEVTYPE}=="usb_device",ATTRS{idVendor}=="1df7",ATTRS{idProduct}=="3020",MODE:="0666"
+SUBSYSTEM=="usb",ENV{DEVTYPE}=="usb_device",ATTRS{idVendor}=="1df7",ATTRS{idProduct}=="3030",MODE:="0666"
+SUBSYSTEM=="usb",ENV{DEVTYPE}=="usb_device",ATTRS{idVendor}=="1df7",ATTRS{idProduct}=="3050",MODE:="0666"
+SUBSYSTEM=="usb",ENV{DEVTYPE}=="usb_device",ATTRS{idVendor}=="1df7",ATTRS{idProduct}=="3060",MODE:="0666"
diff --git a/net-wireless/sdrplay/files/sdrplay-3.15.2.service b/net-wireless/sdrplay/files/sdrplay-3.15.2.service
new file mode 100644
index 000000000000..a6a82b3306d4
--- /dev/null
+++ b/net-wireless/sdrplay/files/sdrplay-3.15.2.service
@@ -0,0 +1,28 @@
+# extracted from install_lib.sh
+[Unit]
+Description=SDRplay API Service
+After=network.target
+StartLimitIntervalSec=0
+
+[Service]
+Type=simple
+Restart=on-failure
+RestartSec=1
+User=root
+ExecStart=${locservice}/sdrplay_apiService
+
+[Install]
+WantedBy=multi-user.target[Unit]
+Description=SDRplay API Service
+After=network.target
+StartLimitIntervalSec=0
+
+[Service]
+Type=simple
+Restart=on-failure
+RestartSec=1
+User=root
+ExecStart=${locservice}/sdrplay_apiService
+
+[Install]
+WantedBy=multi-user.target
diff --git a/net-wireless/sdrplay/files/sdrplay.initd b/net-wireless/sdrplay/files/sdrplay.initd
new file mode 100644
index 000000000000..7611306a3e53
--- /dev/null
+++ b/net-wireless/sdrplay/files/sdrplay.initd
@@ -0,0 +1,7 @@
+#!/sbin/openrc-run
+# Copyright 1999-2022 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+pidfile="/run/sdrplay.pid"
+command="/usr/bin/sdrplay_apiService"
+command_background=true
diff --git a/net-wireless/sdrplay/metadata.xml b/net-wireless/sdrplay/metadata.xml
new file mode 100644
index 000000000000..a15d82d93258
--- /dev/null
+++ b/net-wireless/sdrplay/metadata.xml
@@ -0,0 +1,13 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE pkgmetadata SYSTEM "https://docs.baldeagleos.com/dtd/metadata.dtd">
+<pkgmetadata>
+ <maintainer type="person">
+ <email>tomjbe@gentoo.org</email>
+ <name>Thomas Beierlein</name>
+ </maintainer>
+ <maintainer type="project">
+ <email>radio@gentoo.org</email>
+ <name>Radio</name>
+ </maintainer>
+ <origin>baldeagleos-repo</origin>
+</pkgmetadata>
diff --git a/net-wireless/sdrplay/sdrplay-3.07.1.ebuild b/net-wireless/sdrplay/sdrplay-3.07.1.ebuild
new file mode 100644
index 000000000000..10c43c827964
--- /dev/null
+++ b/net-wireless/sdrplay/sdrplay-3.07.1.ebuild
@@ -0,0 +1,74 @@
+# Copyright 1999-2025 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=8
+
+MULTILIB_COMPAT=( abi_x86_{32,64} )
+
+inherit unpacker udev multilib-minimal systemd
+
+MY_PV_1=$(ver_cut 1)
+MY_PV_12=$(ver_cut 1-2)
+
+DESCRIPTION="SDRplay API/HW driver for all RSPs"
+HOMEPAGE="https://www.sdrplay.com"
+SRC_URI="http://www.sdrplay.com/software/SDRplay_RSP_API-Linux-${PV}.run"
+
+LICENSE="SDRplay"
+SLOT="0"
+KEYWORDS="amd64 ~x86"
+IUSE="systemd"
+
+DEPEND="virtual/libusb:1
+ virtual/udev
+ systemd? ( sys-apps/systemd )"
+
+RDEPEND="${DEPEND}"
+
+S="${WORKDIR}"
+
+QA_PREBUILT="usr/lib64/libsdrplay_api.so.${MY_PV_12}
+usr/lib/libsdrplay_api.so.${MY_PV_12}
+usr/bin/sdrplay_apiService"
+
+multilib_src_install_all() {
+ doheader -r inc/*.h
+
+ udev_dorules 66-mirics.rules
+ udev_reload
+
+ if use systemd; then
+ systemd_newunit scripts/sdrplay.service.usr sdrplay.service
+ fi
+
+ newinitd "${FILESDIR}/${PN}.initd" ${PN}
+}
+
+multilib_src_install() {
+ if [ "${MULTILIB_ABI_FLAG}" = "abi_x86_32" ]; then
+ dolib.so "${S}/i686/libsdrplay_api.so.${MY_PV_12}"
+ fi
+
+ if [ "${MULTILIB_ABI_FLAG}" = "abi_x86_64" ]; then
+ dolib.so "${S}/x86_64/libsdrplay_api.so.${MY_PV_12}"
+ fi
+
+ if multilib_is_native_abi; then
+ if [ "${MULTILIB_ABI_FLAG}" = "abi_x86_32" ]; then
+ dobin "${S}/i686/sdrplay_apiService"
+ elif [ "${MULTILIB_ABI_FLAG}" = "abi_x86_64" ]; then
+ dobin "${S}/x86_64/sdrplay_apiService"
+ fi
+ fi
+
+ dosym libsdrplay_api.so.${MY_PV_12} "/usr/$(get_libdir)/libsdrplay_api.so.${MY_PV_1}"
+ dosym libsdrplay_api.so.${MY_PV_1} "/usr/$(get_libdir)/libsdrplay_api.so"
+}
+
+pkg_postinst() {
+ udev_reload
+}
+
+pkg_postrm() {
+ udev_reload
+}
diff --git a/net-wireless/sdrplay/sdrplay-3.15.2.ebuild b/net-wireless/sdrplay/sdrplay-3.15.2.ebuild
new file mode 100644
index 000000000000..6a94c9eb6347
--- /dev/null
+++ b/net-wireless/sdrplay/sdrplay-3.15.2.ebuild
@@ -0,0 +1,59 @@
+# Copyright 1999-2026 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=8
+
+inherit unpacker udev systemd
+
+MY_PV_1=$(ver_cut 1)
+MY_PV_12=$(ver_cut 1-2)
+
+DESCRIPTION="SDRplay API/HW driver for all RSPs"
+HOMEPAGE="https://www.sdrplay.com"
+SRC_URI="http://www.sdrplay.com/software/SDRplay_RSP_API-Linux-${PV}.run"
+
+S="${WORKDIR}"
+
+LICENSE="SDRplay"
+SLOT="0"
+KEYWORDS="amd64"
+IUSE="systemd"
+
+DEPEND="virtual/libusb:1
+ virtual/udev
+ systemd? ( sys-apps/systemd )"
+
+RDEPEND="${DEPEND}"
+
+QA_PREBUILT="usr/lib64/libsdrplay_api.so.${MY_PV_12}
+usr/lib/libsdrplay_api.so.${MY_PV_12}
+usr/bin/sdrplay_apiService"
+
+src_install() {
+ doheader -r inc/*.h
+
+ udev_newrules "${FILESDIR}"/66-sdrplay-${PV}.rules 66-sdrplay.rules
+
+ insinto /etc/udev/hwdb.d
+ newins "${FILESDIR}"/20-sdrplay-${PV}.hwdb 20-sdrplay.hwdb
+
+ if use systemd; then
+ systemd_newunit "${FILESDIR}"/sdrplay-${PV}.service sdrplay.service
+ fi
+
+ newinitd "${FILESDIR}/${PN}.initd" ${PN}
+
+ dobin "${S}/amd64/sdrplay_apiService"
+
+ dolib.so "${S}/amd64/libsdrplay_api.so.${MY_PV_12}"
+ dosym libsdrplay_api.so.${MY_PV_12} "/usr/$(get_libdir)/libsdrplay_api.so.${MY_PV_1}"
+ dosym libsdrplay_api.so.${MY_PV_1} "/usr/$(get_libdir)/libsdrplay_api.so"
+}
+
+pkg_postinst() {
+ udev_reload
+}
+
+pkg_postrm() {
+ udev_reload
+}
diff --git a/net-wireless/sigdigger/Manifest b/net-wireless/sigdigger/Manifest
new file mode 100644
index 000000000000..c4d2c8c0944a
--- /dev/null
+++ b/net-wireless/sigdigger/Manifest
@@ -0,0 +1 @@
+DIST SigDigger-0.3.0_p20251029.tgz 41235862 BLAKE2B 7c609487efa99450eb174024d9e9a86dd9c0060d19d58655c62b2d0e58fd0298e889e9a32490ae35c168edb8e22f5918e09aed6a534b400254673f28f034bb29 SHA512 a2cc2246b5eb4c6801d33efb5fac6ec6bfd47a5793cc34d507c2378cf3b45c01126f6ff7d301b7b7ce78a974a1350ed6ca7059b360acb915fb26ffeed5d83734
diff --git a/net-wireless/sigdigger/metadata.xml b/net-wireless/sigdigger/metadata.xml
new file mode 100644
index 000000000000..42f58171ab2f
--- /dev/null
+++ b/net-wireless/sigdigger/metadata.xml
@@ -0,0 +1,13 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE pkgmetadata SYSTEM "https://docs.baldeagleos.com/dtd/metadata.dtd">
+<pkgmetadata>
+ <maintainer type="person">
+ <email>zerochaos@gentoo.org</email>
+ <name>Rick Farina</name>
+ </maintainer>
+ <maintainer type="project">
+ <email>radio@gentoo.org</email>
+ <name>Radio</name>
+ </maintainer>
+ <origin>baldeagleos-repo</origin>
+</pkgmetadata>
diff --git a/net-wireless/sigdigger/sigdigger-0.3.0_p20251029.ebuild b/net-wireless/sigdigger/sigdigger-0.3.0_p20251029.ebuild
new file mode 100644
index 000000000000..d07d2b3c7a24
--- /dev/null
+++ b/net-wireless/sigdigger/sigdigger-0.3.0_p20251029.ebuild
@@ -0,0 +1,45 @@
+# Copyright 2020-2025 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=8
+inherit qmake-utils xdg-utils
+
+DESCRIPTION="The free digital signal analyzer"
+HOMEPAGE="https://github.com/BatchDrake/SigDigger"
+SRC_URI="https://dev.gentoo.org/~tomjbe/distfiles/SigDigger-${PV}.tgz"
+
+S="${WORKDIR}/SigDigger-${PV}"
+LICENSE="GPL-3"
+SLOT="0"
+KEYWORDS="~amd64 ~x86"
+
+DEPEND="
+ dev-qt/qtbase:6[gui,network,widgets]
+ media-libs/alsa-lib
+ media-libs/libsndfile
+ net-misc/curl
+ >=net-wireless/sigutils-0.3.0_p20251029
+ net-wireless/soapysdr:=
+ >=net-wireless/suscan-0.3.0_p20251029
+ >=net-wireless/suwidgets-0.3.0_p20251029
+ sci-libs/fftw:3.0=
+"
+RDEPEND="${DEPEND}"
+
+src_configure() {
+ #prevent stripping
+ sed -i '/QMAKE_LFLAGS+=-s/d' SigDigger.pro
+ eqmake6 PREFIX=/usr SigDigger.pro
+}
+
+src_install() {
+ INSTALL_ROOT="${ED}" emake install
+}
+
+pkg_postinst() {
+ xdg_icon_cache_update
+}
+
+pkg_postrm() {
+ xxdg_icon_cache_update
+}
diff --git a/net-wireless/sigutils/Manifest b/net-wireless/sigutils/Manifest
new file mode 100644
index 000000000000..fe3ab921b37c
--- /dev/null
+++ b/net-wireless/sigutils/Manifest
@@ -0,0 +1 @@
+DIST sigutils-0.3.0_p20251029.tgz 1237025 BLAKE2B 9b5fe4e31acc25400893c11daaed58de1d466c195580f8a381d6c82f88a90912351fa63d8fdbbd0b58f84573aeb8a22543c8ee5cd49c25226573fef8e843e88a SHA512 0b99d28aec31a95b7cb531102be42fc5e3e461c3cbcdf6d64f0eac343c6fa931a9a6b100a10abe3f754b2029d6f4adf9520b3b40016cb2dc199899ad9ab5c789
diff --git a/net-wireless/sigutils/files/sigutils-0.3.0_p20251029-fix-CMakeList.patch b/net-wireless/sigutils/files/sigutils-0.3.0_p20251029-fix-CMakeList.patch
new file mode 100644
index 000000000000..fc4706fe047b
--- /dev/null
+++ b/net-wireless/sigutils/files/sigutils-0.3.0_p20251029-fix-CMakeList.patch
@@ -0,0 +1,29 @@
+# do not generate doc and
+# drop running ldconfig
+diff --git a/CMakeLists.txt b/CMakeLists.txt
+index 70abfc0..b38f98f 100644
+--- a/CMakeLists.txt
++++ b/CMakeLists.txt
+@@ -62,13 +62,6 @@ set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR})
+ # The library code is in src
+ add_subdirectory(src)
+
+-# The documentation is in doc
+-add_subdirectory(doc)
+-
+-# Tests are in the tests dir
+-include(CTest)
+-add_subdirectory(tests)
+-
+ # uninstall target
+ if(NOT TARGET uninstall)
+ configure_file(
+@@ -79,8 +72,3 @@ if(NOT TARGET uninstall)
+ add_custom_target(uninstall
+ COMMAND ${CMAKE_COMMAND} -P ${CMAKE_CURRENT_BINARY_DIR}/cmake_uninstall.cmake)
+ endif()
+-
+-# Run ldconfig for certain Unix systems
+-if(UNIX AND NOT APPLE)
+- install(CODE "exec_program(ldconfig)")
+-endif()
diff --git a/net-wireless/sigutils/metadata.xml b/net-wireless/sigutils/metadata.xml
new file mode 100644
index 000000000000..42f58171ab2f
--- /dev/null
+++ b/net-wireless/sigutils/metadata.xml
@@ -0,0 +1,13 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE pkgmetadata SYSTEM "https://docs.baldeagleos.com/dtd/metadata.dtd">
+<pkgmetadata>
+ <maintainer type="person">
+ <email>zerochaos@gentoo.org</email>
+ <name>Rick Farina</name>
+ </maintainer>
+ <maintainer type="project">
+ <email>radio@gentoo.org</email>
+ <name>Radio</name>
+ </maintainer>
+ <origin>baldeagleos-repo</origin>
+</pkgmetadata>
diff --git a/net-wireless/sigutils/sigutils-0.3.0_p20251029-r1.ebuild b/net-wireless/sigutils/sigutils-0.3.0_p20251029-r1.ebuild
new file mode 100644
index 000000000000..3b9e6bdf2653
--- /dev/null
+++ b/net-wireless/sigutils/sigutils-0.3.0_p20251029-r1.ebuild
@@ -0,0 +1,27 @@
+# Copyright 2020-2025 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=8
+CMAKE_MAKEFILE_GENERATOR='emake'
+inherit cmake
+
+DESCRIPTION="signal processing library for blind signal analysis and automatic demodulation"
+HOMEPAGE="https://github.com/BatchDrake/sigutils"
+SRC_URI="https://dev.gentoo.org/~tomjbe/distfiles/${P}.tgz"
+
+LICENSE="GPL-3"
+SLOT="0"
+KEYWORDS="~amd64 ~x86"
+
+DEPEND="
+ sci-libs/fftw:3.0=[threads]
+ sci-libs/volk:=
+ media-libs/libsndfile:=
+"
+RDEPEND="${DEPEND}"
+
+src_prepare() {
+ eapply "${FILESDIR}"/${PN}-0.3.0_p20251029-fix-CMakeList.patch
+ eapply_user
+ cmake_src_prepare
+}
diff --git a/net-wireless/soapybladerf/Manifest b/net-wireless/soapybladerf/Manifest
new file mode 100644
index 000000000000..9ab1049e25e1
--- /dev/null
+++ b/net-wireless/soapybladerf/Manifest
@@ -0,0 +1 @@
+DIST soapybladerf-0.4.2.tar.gz 32358 BLAKE2B 84298022fddb412143318929e4709f1de63704398a633cfb0a4fe52a8729618b659f5f998feea2cf2dd29f085628fa4b355e94cc5d3d63d4a221c103e21b99c0 SHA512 565321092e461c07fb353c5299e07689ad17e291c6a541f69acd03e27486e95b751a91fcc7042c5dcb2fabdd84815f381b0defd0e7b37b86a4af17bb61be6c43
diff --git a/net-wireless/soapybladerf/metadata.xml b/net-wireless/soapybladerf/metadata.xml
new file mode 100644
index 000000000000..42f58171ab2f
--- /dev/null
+++ b/net-wireless/soapybladerf/metadata.xml
@@ -0,0 +1,13 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE pkgmetadata SYSTEM "https://docs.baldeagleos.com/dtd/metadata.dtd">
+<pkgmetadata>
+ <maintainer type="person">
+ <email>zerochaos@gentoo.org</email>
+ <name>Rick Farina</name>
+ </maintainer>
+ <maintainer type="project">
+ <email>radio@gentoo.org</email>
+ <name>Radio</name>
+ </maintainer>
+ <origin>baldeagleos-repo</origin>
+</pkgmetadata>
diff --git a/net-wireless/soapybladerf/soapybladerf-0.4.2.ebuild b/net-wireless/soapybladerf/soapybladerf-0.4.2.ebuild
new file mode 100644
index 000000000000..d4fa85e3c707
--- /dev/null
+++ b/net-wireless/soapybladerf/soapybladerf-0.4.2.ebuild
@@ -0,0 +1,30 @@
+# Copyright 1999-2025 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=8
+
+inherit cmake
+
+DESCRIPTION="Soapy SDR plugin for the Blade RF"
+HOMEPAGE="https://github.com/pothosware/SoapyBladeRF"
+
+if [ "${PV}" = "9999" ]; then
+ EGIT_REPO_URI="https://github.com/pothosware/SoapyBladeRF.git"
+ inherit git-r3
+else
+ KEYWORDS="amd64 ~arm ~riscv ~x86"
+ SRC_URI="https://github.com/pothosware/SoapyBladeRF/archive/soapy-bladerf-${PV}.tar.gz -> ${P}.tar.gz"
+ S="${WORKDIR}"/SoapyBladeRF-soapy-bladerf-"${PV}"
+fi
+
+LICENSE="MIT"
+SLOT="0"
+
+RDEPEND="net-wireless/soapysdr:=
+ >=net-wireless/bladerf-2018.08:="
+DEPEND="${RDEPEND}"
+
+src_prepare() {
+ sed -i -e "s/2.8.7/3.5/" CMakeLists.txt || die
+ cmake_src_prepare
+}
diff --git a/net-wireless/soapybladerf/soapybladerf-9999.ebuild b/net-wireless/soapybladerf/soapybladerf-9999.ebuild
new file mode 100644
index 000000000000..79d4ca4ce8f9
--- /dev/null
+++ b/net-wireless/soapybladerf/soapybladerf-9999.ebuild
@@ -0,0 +1,30 @@
+# Copyright 1999-2025 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=8
+
+inherit cmake
+
+DESCRIPTION="Soapy SDR plugin for the Blade RF"
+HOMEPAGE="https://github.com/pothosware/SoapyBladeRF"
+
+if [ "${PV}" = "9999" ]; then
+ EGIT_REPO_URI="https://github.com/pothosware/SoapyBladeRF.git"
+ inherit git-r3
+else
+ KEYWORDS="~amd64 ~arm ~riscv ~x86"
+ SRC_URI="https://github.com/pothosware/SoapyBladeRF/archive/soapy-bladerf-${PV}.tar.gz -> ${P}.tar.gz"
+ S="${WORKDIR}"/SoapyBladeRF-soapy-bladerf-"${PV}"
+fi
+
+LICENSE="MIT"
+SLOT="0"
+
+RDEPEND="net-wireless/soapysdr:=
+ >=net-wireless/bladerf-2018.08:="
+DEPEND="${RDEPEND}"
+
+src_prepare() {
+ sed -i -e "s/2.8.7/3.5/" CMakeLists.txt || die
+ cmake_src_prepare
+}
diff --git a/net-wireless/soapyhackrf/Manifest b/net-wireless/soapyhackrf/Manifest
new file mode 100644
index 000000000000..42d0588d7e07
--- /dev/null
+++ b/net-wireless/soapyhackrf/Manifest
@@ -0,0 +1 @@
+DIST soapyhackrf-0.3.4.tar.gz 16475 BLAKE2B ee34c465e700ec93d02c51286224e8bc6f72c391867c1d3dc5bf54f28ef3230234937128eadf25409fe7c1561576a5a386178e0e94c820bd867c2fc5383a58c8 SHA512 950fc0d2d9b1a5946605d0f7f934a3d92facb6878251e8d9a673384db85e1b776ab27fd3499db11d482d599f78e705b9394b5e1238935d297252ab5acc8fb935
diff --git a/net-wireless/soapyhackrf/metadata.xml b/net-wireless/soapyhackrf/metadata.xml
new file mode 100644
index 000000000000..42f58171ab2f
--- /dev/null
+++ b/net-wireless/soapyhackrf/metadata.xml
@@ -0,0 +1,13 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE pkgmetadata SYSTEM "https://docs.baldeagleos.com/dtd/metadata.dtd">
+<pkgmetadata>
+ <maintainer type="person">
+ <email>zerochaos@gentoo.org</email>
+ <name>Rick Farina</name>
+ </maintainer>
+ <maintainer type="project">
+ <email>radio@gentoo.org</email>
+ <name>Radio</name>
+ </maintainer>
+ <origin>baldeagleos-repo</origin>
+</pkgmetadata>
diff --git a/net-wireless/soapyhackrf/soapyhackrf-0.3.4-r1.ebuild b/net-wireless/soapyhackrf/soapyhackrf-0.3.4-r1.ebuild
new file mode 100644
index 000000000000..c124cf976d03
--- /dev/null
+++ b/net-wireless/soapyhackrf/soapyhackrf-0.3.4-r1.ebuild
@@ -0,0 +1,30 @@
+# Copyright 1999-2025 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=8
+
+inherit cmake
+
+DESCRIPTION="SoapySDR HackRF module"
+HOMEPAGE="https://github.com/pothosware/SoapyHackRF"
+
+if [ "${PV}" = "9999" ]; then
+ EGIT_REPO_URI="https://github.com/pothosware/SoapyHackRF.git"
+ inherit git-r3
+else
+ KEYWORDS="amd64 ~arm ~riscv ~x86"
+ SRC_URI="https://github.com/pothosware/SoapyHackRF/archive/soapy-hackrf-${PV}.tar.gz -> ${P}.tar.gz"
+ S="${WORKDIR}"/SoapyHackRF-soapy-hackrf-"${PV}"
+fi
+
+LICENSE="MIT"
+SLOT="0"
+
+RDEPEND="net-wireless/soapysdr:=
+ net-libs/libhackrf:="
+DEPEND="${RDEPEND}"
+
+src_prepare() {
+ sed -i -e "s/2.8.7/3.5/" CMakeLists.txt || die
+ cmake_src_prepare
+}
diff --git a/net-wireless/soapyhackrf/soapyhackrf-9999.ebuild b/net-wireless/soapyhackrf/soapyhackrf-9999.ebuild
new file mode 100644
index 000000000000..777ae3cc5c87
--- /dev/null
+++ b/net-wireless/soapyhackrf/soapyhackrf-9999.ebuild
@@ -0,0 +1,30 @@
+# Copyright 1999-2025 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=8
+
+inherit cmake
+
+DESCRIPTION="SoapySDR HackRF module"
+HOMEPAGE="https://github.com/pothosware/SoapyHackRF"
+
+if [ "${PV}" = "9999" ]; then
+ EGIT_REPO_URI="https://github.com/pothosware/SoapyHackRF.git"
+ inherit git-r3
+else
+ KEYWORDS="~amd64 ~arm ~riscv ~x86"
+ SRC_URI="https://github.com/pothosware/SoapyHackRF/archive/soapy-hackrf-${PV}.tar.gz -> ${P}.tar.gz"
+ S="${WORKDIR}"/SoapyHackRF-soapy-hackrf-"${PV}"
+fi
+
+LICENSE="MIT"
+SLOT="0"
+
+RDEPEND="net-wireless/soapysdr:=
+ net-libs/libhackrf:="
+DEPEND="${RDEPEND}"
+
+src_prepare() {
+ sed -i -e "s/2.8.7/3.5/" CMakeLists.txt || die
+ cmake_src_prepare
+}
diff --git a/net-wireless/soapyplutosdr/Manifest b/net-wireless/soapyplutosdr/Manifest
new file mode 100644
index 000000000000..144195fccf62
--- /dev/null
+++ b/net-wireless/soapyplutosdr/Manifest
@@ -0,0 +1 @@
+DIST soapyplutosdr-0.2.2.tar.gz 25472 BLAKE2B 100b366edf268c76109be2d335b6d4d6a5723a219f1f160d481385e7ac7c89e3cd25860e9916b754f67708f83d90e6f82262572c6a62eb045483a2bba6a794b3 SHA512 dd5514cde4867bd915b2ef1f0257af85359986b93a7650f00f665fd83a7d7a2c8621f79fe91ce1c16867fdff0c0c14b700628cd9a94746c11b854da1afd7daf7
diff --git a/net-wireless/soapyplutosdr/metadata.xml b/net-wireless/soapyplutosdr/metadata.xml
new file mode 100644
index 000000000000..42f58171ab2f
--- /dev/null
+++ b/net-wireless/soapyplutosdr/metadata.xml
@@ -0,0 +1,13 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE pkgmetadata SYSTEM "https://docs.baldeagleos.com/dtd/metadata.dtd">
+<pkgmetadata>
+ <maintainer type="person">
+ <email>zerochaos@gentoo.org</email>
+ <name>Rick Farina</name>
+ </maintainer>
+ <maintainer type="project">
+ <email>radio@gentoo.org</email>
+ <name>Radio</name>
+ </maintainer>
+ <origin>baldeagleos-repo</origin>
+</pkgmetadata>
diff --git a/net-wireless/soapyplutosdr/soapyplutosdr-0.2.2-r1.ebuild b/net-wireless/soapyplutosdr/soapyplutosdr-0.2.2-r1.ebuild
new file mode 100644
index 000000000000..72ad53935784
--- /dev/null
+++ b/net-wireless/soapyplutosdr/soapyplutosdr-0.2.2-r1.ebuild
@@ -0,0 +1,32 @@
+# Copyright 1999-2025 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=8
+
+inherit cmake
+
+DESCRIPTION="Soapy SDR plugin for the Pluto SDR"
+HOMEPAGE="https://github.com/pothosware/SoapyPlutoSDR"
+
+if [ "${PV}" = "9999" ]; then
+ EGIT_REPO_URI="https://github.com/pothosware/SoapyPlutoSDR.git"
+ inherit git-r3
+else
+ KEYWORDS="amd64 ~arm ~riscv ~x86"
+ COMMIT="422a9b306f765499dd3e9a4c3400fa39816dcfdb"
+ SRC_URI="https://github.com/pothosware/SoapyPlutoSDR/archive/${COMMIT}.tar.gz -> ${P}.tar.gz"
+ S="${WORKDIR}"/SoapyPlutoSDR-${COMMIT}
+fi
+
+LICENSE="LGPL-2.1+"
+SLOT="0"
+
+RDEPEND="net-wireless/soapysdr:=
+ net-libs/libiio:=
+ net-libs/libad9361-iio:="
+DEPEND="${RDEPEND}"
+
+src_prepare() {
+ sed -i -e "s/2.8.9/3.10/" CMakeLists.txt || die
+ cmake_src_prepare
+}
diff --git a/net-wireless/soapyplutosdr/soapyplutosdr-9999.ebuild b/net-wireless/soapyplutosdr/soapyplutosdr-9999.ebuild
new file mode 100644
index 000000000000..c185cc5749cf
--- /dev/null
+++ b/net-wireless/soapyplutosdr/soapyplutosdr-9999.ebuild
@@ -0,0 +1,32 @@
+# Copyright 1999-2025 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=8
+
+inherit cmake
+
+DESCRIPTION="Soapy SDR plugin for the Pluto SDR"
+HOMEPAGE="https://github.com/pothosware/SoapyPlutoSDR"
+
+if [ "${PV}" = "9999" ]; then
+ EGIT_REPO_URI="https://github.com/pothosware/SoapyPlutoSDR.git"
+ inherit git-r3
+else
+ KEYWORDS="~amd64 ~arm ~riscv ~x86"
+ COMMIT="422a9b306f765499dd3e9a4c3400fa39816dcfdb"
+ SRC_URI="https://github.com/pothosware/SoapyPlutoSDR/archive/${COMMIT}.tar.gz -> ${P}.tar.gz"
+ S="${WORKDIR}"/SoapyPlutoSDR-${COMMIT}
+fi
+
+LICENSE="LGPL-2.1+"
+SLOT="0"
+
+RDEPEND="net-wireless/soapysdr:=
+ net-libs/libiio:=
+ net-libs/libad9361-iio:="
+DEPEND="${RDEPEND}"
+
+src_prepare() {
+ sed -i -e "s/2.8.9/3.10/" CMakeLists.txt || die
+ cmake_src_prepare
+}
diff --git a/net-wireless/soapyremote/Manifest b/net-wireless/soapyremote/Manifest
new file mode 100644
index 000000000000..a9d65142b587
--- /dev/null
+++ b/net-wireless/soapyremote/Manifest
@@ -0,0 +1 @@
+DIST soapyremote-0.5.2.tar.gz 72929 BLAKE2B 17b8a2f3f5400c4c6d88e726471d977aa27a263079690780dc91f93c0e30645a4e433f5406d694f5e3ba60bf0a73ce93fff616a21b0e4ac7e0b5d17cf8275711 SHA512 55841f248c796a870a81a508cec85962ed821c2abd40438eaee07135cb6dde0bd93e84a3ff709dfeaf26f7f79717197c80c3aad378d62b3e4b232f60c46b0151
diff --git a/net-wireless/soapyremote/metadata.xml b/net-wireless/soapyremote/metadata.xml
new file mode 100644
index 000000000000..bc19f09cee23
--- /dev/null
+++ b/net-wireless/soapyremote/metadata.xml
@@ -0,0 +1,9 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE pkgmetadata SYSTEM "https://docs.baldeagleos.com/dtd/metadata.dtd">
+<pkgmetadata>
+ <maintainer type="person">
+ <email>idl0r@gentoo.org</email>
+ <name>Christian Ruppert</name>
+ </maintainer>
+ <origin>baldeagleos-repo</origin>
+</pkgmetadata>
diff --git a/net-wireless/soapyremote/soapyremote-0.5.2.ebuild b/net-wireless/soapyremote/soapyremote-0.5.2.ebuild
new file mode 100644
index 000000000000..2e6d321d6176
--- /dev/null
+++ b/net-wireless/soapyremote/soapyremote-0.5.2.ebuild
@@ -0,0 +1,29 @@
+# Copyright 1999-2022 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=8
+
+inherit cmake
+
+DESCRIPTION="Soapy SDR remote module"
+HOMEPAGE="https://github.com/pothosware/SoapyRemote"
+
+if [ "${PV}" = "9999" ]; then
+ EGIT_REPO_URI="https://github.com/pothosware/SoapyRemote.git"
+ EGIT_CLONE_TYPE="shallow"
+ inherit git-r3
+else
+ KEYWORDS="~amd64 ~x86"
+ SRC_URI="https://github.com/pothosware/SoapyRemote/archive/soapy-remote-${PV}.tar.gz -> ${P}.tar.gz"
+ S="${WORKDIR}"/SoapyRemote-soapy-remote-"${PV}"
+fi
+
+LICENSE="Boost-1.0"
+SLOT="0"
+
+IUSE=""
+REQUIRED_USE=""
+
+RDEPEND="net-wireless/soapysdr
+ net-dns/avahi"
+DEPEND="${RDEPEND}"
diff --git a/net-wireless/soapyremote/soapyremote-9999.ebuild b/net-wireless/soapyremote/soapyremote-9999.ebuild
new file mode 100644
index 000000000000..2e6d321d6176
--- /dev/null
+++ b/net-wireless/soapyremote/soapyremote-9999.ebuild
@@ -0,0 +1,29 @@
+# Copyright 1999-2022 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=8
+
+inherit cmake
+
+DESCRIPTION="Soapy SDR remote module"
+HOMEPAGE="https://github.com/pothosware/SoapyRemote"
+
+if [ "${PV}" = "9999" ]; then
+ EGIT_REPO_URI="https://github.com/pothosware/SoapyRemote.git"
+ EGIT_CLONE_TYPE="shallow"
+ inherit git-r3
+else
+ KEYWORDS="~amd64 ~x86"
+ SRC_URI="https://github.com/pothosware/SoapyRemote/archive/soapy-remote-${PV}.tar.gz -> ${P}.tar.gz"
+ S="${WORKDIR}"/SoapyRemote-soapy-remote-"${PV}"
+fi
+
+LICENSE="Boost-1.0"
+SLOT="0"
+
+IUSE=""
+REQUIRED_USE=""
+
+RDEPEND="net-wireless/soapysdr
+ net-dns/avahi"
+DEPEND="${RDEPEND}"
diff --git a/net-wireless/soapyrtlsdr/Manifest b/net-wireless/soapyrtlsdr/Manifest
new file mode 100644
index 000000000000..1b3fa3b3bd9c
--- /dev/null
+++ b/net-wireless/soapyrtlsdr/Manifest
@@ -0,0 +1 @@
+DIST soapyrtlsdr-0.3.3.tar.gz 16760 BLAKE2B 63e4c707d65af13e9b3974c9afe1261909395c70589e07a5b8398fcd40c421dbb7754a39467a325d09f4312a410fb60e34f51fca1fdb26eac68ac495b0b2c9a8 SHA512 a43511c8644a8dbec8e0b7d8f114c4955ba9407727680680cef446a12a9ee27bfe892cab49aa77ce82d52e4272075f4e6f2ee38350675f5508601ff24ff82081
diff --git a/net-wireless/soapyrtlsdr/files/soapyrtlsdr-0.3.3-cmake4.patch b/net-wireless/soapyrtlsdr/files/soapyrtlsdr-0.3.3-cmake4.patch
new file mode 100644
index 000000000000..30a16f87d358
--- /dev/null
+++ b/net-wireless/soapyrtlsdr/files/soapyrtlsdr-0.3.3-cmake4.patch
@@ -0,0 +1,13 @@
+diff --git a/CMakeLists.txt b/CMakeLists.txt
+index 4763d75..48d0913 100644
+--- a/CMakeLists.txt
++++ b/CMakeLists.txt
+@@ -1,7 +1,7 @@
+ ########################################################################
+ # Build Soapy SDR support module for RTL-SDR Devices
+ ########################################################################
+-cmake_minimum_required(VERSION 2.8.7)
++cmake_minimum_required(VERSION 3.10.0)
+ project(SoapyRTLSDR CXX)
+
+ find_package(SoapySDR "0.4.0" NO_MODULE REQUIRED)
diff --git a/net-wireless/soapyrtlsdr/metadata.xml b/net-wireless/soapyrtlsdr/metadata.xml
new file mode 100644
index 000000000000..42f58171ab2f
--- /dev/null
+++ b/net-wireless/soapyrtlsdr/metadata.xml
@@ -0,0 +1,13 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE pkgmetadata SYSTEM "https://docs.baldeagleos.com/dtd/metadata.dtd">
+<pkgmetadata>
+ <maintainer type="person">
+ <email>zerochaos@gentoo.org</email>
+ <name>Rick Farina</name>
+ </maintainer>
+ <maintainer type="project">
+ <email>radio@gentoo.org</email>
+ <name>Radio</name>
+ </maintainer>
+ <origin>baldeagleos-repo</origin>
+</pkgmetadata>
diff --git a/net-wireless/soapyrtlsdr/soapyrtlsdr-0.3.3-r3.ebuild b/net-wireless/soapyrtlsdr/soapyrtlsdr-0.3.3-r3.ebuild
new file mode 100644
index 000000000000..456796691710
--- /dev/null
+++ b/net-wireless/soapyrtlsdr/soapyrtlsdr-0.3.3-r3.ebuild
@@ -0,0 +1,28 @@
+# Copyright 1999-2025 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=8
+
+inherit cmake
+
+DESCRIPTION="SoapySDR RTL-SDR Support Module"
+HOMEPAGE="https://github.com/pothosware/SoapyRTLSDR"
+
+if [ "${PV}" = "9999" ]; then
+ EGIT_REPO_URI="https://github.com/pothosware/SoapyRTLSDR.git"
+ inherit git-r3
+else
+ KEYWORDS="amd64 ~arm ~riscv ~x86"
+ SRC_URI="https://github.com/pothosware/SoapyRTLSDR/archive/soapy-rtl-sdr-${PV}.tar.gz -> ${P}.tar.gz"
+ S="${WORKDIR}"/SoapyRTLSDR-soapy-rtl-sdr-"${PV}"
+fi
+
+LICENSE="MIT"
+SLOT="0"
+
+RDEPEND="net-wireless/soapysdr:=
+ net-wireless/rtl-sdr:="
+DEPEND="${RDEPEND}"
+BDEPEND=""
+
+PATCHES=( "${FILESDIR}"/${PN}-0.3.3-cmake4.patch )
diff --git a/net-wireless/soapyrtlsdr/soapyrtlsdr-9999.ebuild b/net-wireless/soapyrtlsdr/soapyrtlsdr-9999.ebuild
new file mode 100644
index 000000000000..3a6abdbae18c
--- /dev/null
+++ b/net-wireless/soapyrtlsdr/soapyrtlsdr-9999.ebuild
@@ -0,0 +1,26 @@
+# Copyright 1999-2025 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=8
+
+inherit cmake
+
+DESCRIPTION="SoapySDR RTL-SDR Support Module"
+HOMEPAGE="https://github.com/pothosware/SoapyRTLSDR"
+
+if [ "${PV}" = "9999" ]; then
+ EGIT_REPO_URI="https://github.com/pothosware/SoapyRTLSDR.git"
+ inherit git-r3
+else
+ KEYWORDS="~amd64 ~arm ~riscv ~x86"
+ SRC_URI="https://github.com/pothosware/SoapyRTLSDR/archive/soapy-rtl-sdr-${PV}.tar.gz -> ${P}.tar.gz"
+ S="${WORKDIR}"/SoapyRTLSDR-soapy-rtl-sdr-"${PV}"
+fi
+
+LICENSE="MIT"
+SLOT="0"
+
+RDEPEND="net-wireless/soapysdr:=
+ net-wireless/rtl-sdr:="
+DEPEND="${RDEPEND}"
+BDEPEND=""
diff --git a/net-wireless/soapysdr/Manifest b/net-wireless/soapysdr/Manifest
new file mode 100644
index 000000000000..2de4d5a52684
--- /dev/null
+++ b/net-wireless/soapysdr/Manifest
@@ -0,0 +1 @@
+DIST soapysdr-0.8.1.tar.gz 131252 BLAKE2B 4dc97b683063a1bc52717f15b12a2471a338cebc30dccfd58723792119a496f5170b67eeda1ff4dbcd34811948f70b9f0e5df11b5b1738b46839ca7377fe557b SHA512 50c8f1652bf9ca09215f9c4115175427ca7b5338add7591e31ca0e627093c94b73e7cf7f84fa71ff419cc010d3c1263931506c728bbaa00413a7915d56a87787
diff --git a/net-wireless/soapysdr/files/soapysdr-0.8.1-cmake4.patch b/net-wireless/soapysdr/files/soapysdr-0.8.1-cmake4.patch
new file mode 100644
index 000000000000..a21cdf7da951
--- /dev/null
+++ b/net-wireless/soapysdr/files/soapysdr-0.8.1-cmake4.patch
@@ -0,0 +1,39 @@
+diff --git a/CMakeLists.txt b/CMakeLists.txt
+index ff15ad0..8fff872 100644
+--- a/CMakeLists.txt
++++ b/CMakeLists.txt
+@@ -1,7 +1,7 @@
+ ########################################################################
+ # Project setup
+ ########################################################################
+-cmake_minimum_required(VERSION 3.1.0)
++cmake_minimum_required(VERSION 3.10.0)
+ project(SoapySDR)
+ enable_language(CXX)
+ enable_testing()
+diff --git a/ExampleDriver/CMakeLists.txt b/ExampleDriver/CMakeLists.txt
+index 32cb6ca..ada07e9 100644
+--- a/ExampleDriver/CMakeLists.txt
++++ b/ExampleDriver/CMakeLists.txt
+@@ -2,7 +2,7 @@
+ # Project setup -- only needed if device support is a stand-alone build
+ # We recommend that the support module be built in-tree with the driver.
+ ########################################################################
+-cmake_minimum_required(VERSION 2.6)
++cmake_minimum_required(VERSION 3.10.0)
+ project(SoapySDRMyDevice CXX)
+ enable_testing()
+
+diff --git a/python/CMakeLists.txt b/python/CMakeLists.txt
+index 8cb1592..a5c09ce 100644
+--- a/python/CMakeLists.txt
++++ b/python/CMakeLists.txt
+@@ -1,7 +1,7 @@
+ ########################################################################
+ # Project setup
+ ########################################################################
+-cmake_minimum_required(VERSION 2.8)
++cmake_minimum_required(VERSION 3.10.0)
+ project(SoapySDRPython CXX)
+ enable_testing()
+
diff --git a/net-wireless/soapysdr/files/soapysdr-0.8.1-python3.12-distutils.patch b/net-wireless/soapysdr/files/soapysdr-0.8.1-python3.12-distutils.patch
new file mode 100644
index 000000000000..877bc9c15ba7
--- /dev/null
+++ b/net-wireless/soapysdr/files/soapysdr-0.8.1-python3.12-distutils.patch
@@ -0,0 +1,74 @@
+https://github.com/pothosware/SoapySDR/commit/1ee5670803f89b21d84a6a84acbb578da051c119
+
+From 1ee5670803f89b21d84a6a84acbb578da051c119 Mon Sep 17 00:00:00 2001
+From: Ryan Volz <ryan.volz@gmail.com>
+Date: Tue, 26 Sep 2023 14:56:59 -0400
+Subject: [PATCH] Remove deprecated use of distutils, fix for Python 3.12+
+
+This switches to using sysconfig from distutils, which is necessary for
+Python 3.12+ since distutils is deprecated and has been removed.
+
+It is necessary to specify the install scheme when a prefix other than
+the Python default is used so that changes to the default scheme made by
+distributions (e.g. Debian, Fedora) do not produce an incorrect Python
+installation directory. For example, Debian patches the default scheme
+to prepend the path with '/local', but if a user specifies a prefix of
+'/usr/local', then the path using the default scheme would be
+'/usr/local/local/...' with a duplicated 'local' directory. Specifying
+an unmodified install scheme fixes that.
+
+Signed-off-by: Ryan Volz <ryan.volz@gmail.com>
+---
+ python/get_python_lib.py | 36 ++++++++++++++++++++++++-----------
+ 1 file changed, 25 insertions(+), 11 deletions(-)
+
+diff --git a/python/get_python_lib.py b/python/get_python_lib.py
+index 0c716529..574f0b60 100644
+--- a/python/get_python_lib.py
++++ b/python/get_python_lib.py
+@@ -1,19 +1,33 @@
+ import os
++import pathlib
+ import sys
+-import site
+-from distutils.sysconfig import get_python_lib
++import sysconfig
+
+ if __name__ == '__main__':
+- prefix = sys.argv[1]
++ prefix = pathlib.Path(sys.argv[1]).resolve()
+
+- #ask distutils where to install the python module
+- install_dir = get_python_lib(plat_specific=True, prefix=prefix)
++ # default install dir for the running Python interpreter
++ default_install_dir = pathlib.Path(sysconfig.get_path('platlib')).resolve()
+
+- #use sites when the prefix is already recognized
++ # if default falls under the desired prefix, we're done
+ try:
+- paths = [p for p in site.getsitepackages() if p.startswith(prefix)]
+- if len(paths) == 1: install_dir = paths[0]
+- except AttributeError: pass
++ relative_install_dir = default_install_dir.relative_to(prefix)
++ except ValueError:
++ # get install dir for the specified prefix
++ # can't use the default scheme because distributions modify it
++ # newer Python versions have 'venv' scheme, use for all OSs.
++ if 'venv' in sysconfig.get_scheme_names():
++ scheme = 'venv'
++ elif os.name == 'nt':
++ scheme = 'nt'
++ else:
++ scheme = 'posix_prefix'
++ prefix_install_dir = pathlib.Path(sysconfig.get_path(
++ 'platlib',
++ scheme=scheme,
++ vars={'base': prefix, 'platbase': prefix},
++ )).resolve()
++ relative_install_dir = prefix_install_dir.relative_to(prefix)
+
+- #strip the prefix to return a relative path
+- print(os.path.relpath(install_dir, prefix))
++ # want a relative path for use in the build system
++ print(relative_install_dir)
+
diff --git a/net-wireless/soapysdr/metadata.xml b/net-wireless/soapysdr/metadata.xml
new file mode 100644
index 000000000000..d7a2439c0057
--- /dev/null
+++ b/net-wireless/soapysdr/metadata.xml
@@ -0,0 +1,20 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE pkgmetadata SYSTEM "https://docs.baldeagleos.com/dtd/metadata.dtd">
+<pkgmetadata>
+ <maintainer type="person">
+ <email>zerochaos@gentoo.org</email>
+ <name>Rick Farina</name>
+ </maintainer>
+ <maintainer type="project">
+ <email>radio@gentoo.org</email>
+ <name>Radio</name>
+ </maintainer>
+ <use>
+ <flag name="bladerf">Add support for bladerf hardware</flag>
+ <flag name="hackrf">Add support for hackrf hardware</flag>
+ <flag name="rtlsdr">Add support for rtlsdr hardware</flag>
+ <flag name="plutosdr">Add support for Analog Devices ADALM-PLUTO hardware</flag>
+ <flag name="uhd">Add support for Ettus USRP hardware</flag>
+ </use>
+ <origin>baldeagleos-repo</origin>
+</pkgmetadata>
diff --git a/net-wireless/soapysdr/soapysdr-0.8.1-r2.ebuild b/net-wireless/soapysdr/soapysdr-0.8.1-r2.ebuild
new file mode 100644
index 000000000000..f59c438ac9eb
--- /dev/null
+++ b/net-wireless/soapysdr/soapysdr-0.8.1-r2.ebuild
@@ -0,0 +1,61 @@
+# Copyright 1999-2025 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=8
+
+PYTHON_COMPAT=( python3_{13..14} )
+inherit cmake python-single-r1
+
+DESCRIPTION="vendor and platform neutral SDR support library"
+HOMEPAGE="https://github.com/pothosware/SoapySDR"
+
+if [ "${PV}" = "9999" ]; then
+ EGIT_REPO_URI="https://github.com/pothosware/SoapySDR.git"
+ EGIT_CLONE_TYPE="shallow"
+ inherit git-r3
+else
+ KEYWORDS="amd64 ~arm ~riscv ~x86"
+ SRC_URI="https://github.com/pothosware/SoapySDR/archive/soapy-sdr-${PV}.tar.gz -> ${P}.tar.gz"
+ S="${WORKDIR}"/SoapySDR-soapy-sdr-"${PV}"
+fi
+
+LICENSE="Boost-1.0"
+SLOT="0/${PV}"
+IUSE="bladerf hackrf python rtlsdr plutosdr uhd"
+REQUIRED_USE="python? ( ${PYTHON_REQUIRED_USE} )"
+
+RDEPEND="python? ( ${PYTHON_DEPS} )"
+DEPEND="${RDEPEND}"
+BDEPEND="python? ( dev-lang/swig:0 )"
+PDEPEND="
+ bladerf? ( net-wireless/soapybladerf )
+ hackrf? ( net-wireless/soapyhackrf )
+ rtlsdr? ( net-wireless/soapyrtlsdr )
+ plutosdr? ( net-wireless/soapyplutosdr )
+ uhd? ( net-wireless/soapyuhd )
+"
+
+PATCHES=(
+ "${FILESDIR}"/soapysdr-0.8.1-python3.12-distutils.patch
+ "${FILESDIR}"/soapysdr-0.8.1-cmake4.patch
+)
+
+pkg_setup() {
+ use python && python-single-r1_pkg_setup
+}
+
+src_configure() {
+ local mycmakeargs=(
+ -DENABLE_PYTHON=$(usex python)
+ -DENABLE_PYTHON3=$(usex python)
+ -DBUILD_PYTHON3=$(usex python)
+ -DUSE_PYTHON_CONFIG=ON
+ )
+
+ cmake_src_configure
+}
+
+src_install() {
+ cmake_src_install
+ use python && python_optimize
+}
diff --git a/net-wireless/soapysdr/soapysdr-0.8.1-r3.ebuild b/net-wireless/soapysdr/soapysdr-0.8.1-r3.ebuild
new file mode 100644
index 000000000000..3716d7a6c6e0
--- /dev/null
+++ b/net-wireless/soapysdr/soapysdr-0.8.1-r3.ebuild
@@ -0,0 +1,61 @@
+# Copyright 1999-2026 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=8
+
+PYTHON_COMPAT=( python3_{13..14} )
+inherit cmake python-single-r1
+
+DESCRIPTION="vendor and platform neutral SDR support library"
+HOMEPAGE="https://github.com/pothosware/SoapySDR"
+
+if [ "${PV}" = "9999" ]; then
+ EGIT_REPO_URI="https://github.com/pothosware/SoapySDR.git"
+ EGIT_CLONE_TYPE="shallow"
+ inherit git-r3
+else
+ KEYWORDS="amd64 ~arm ~riscv ~x86"
+ SRC_URI="https://github.com/pothosware/SoapySDR/archive/soapy-sdr-${PV}.tar.gz -> ${P}.tar.gz"
+ S="${WORKDIR}"/SoapySDR-soapy-sdr-"${PV}"
+fi
+
+LICENSE="Boost-1.0"
+SLOT="0/${PV}"
+IUSE="bladerf hackrf python rtlsdr plutosdr uhd"
+REQUIRED_USE="python? ( ${PYTHON_REQUIRED_USE} )"
+
+RDEPEND="python? ( ${PYTHON_DEPS} )"
+DEPEND="${RDEPEND}"
+BDEPEND="python? ( dev-lang/swig:0 )"
+PDEPEND="
+ bladerf? ( net-wireless/soapybladerf )
+ hackrf? ( net-wireless/soapyhackrf )
+ rtlsdr? ( net-wireless/soapyrtlsdr )
+ plutosdr? ( net-wireless/soapyplutosdr )
+ uhd? ( net-wireless/soapyuhd )
+"
+
+PATCHES=(
+ "${FILESDIR}"/soapysdr-0.8.1-python3.12-distutils.patch
+ "${FILESDIR}"/soapysdr-0.8.1-cmake4.patch
+)
+
+pkg_setup() {
+ use python && python-single-r1_pkg_setup
+}
+
+src_configure() {
+ local mycmakeargs=(
+ -DENABLE_PYTHON=$(usex python)
+ -DENABLE_PYTHON3=$(usex python)
+ -DBUILD_PYTHON3=$(usex python)
+ -DUSE_PYTHON_CONFIG=ON
+ )
+
+ cmake_src_configure
+}
+
+src_install() {
+ cmake_src_install
+ use python && python_optimize
+}
diff --git a/net-wireless/soapysdr/soapysdr-9999.ebuild b/net-wireless/soapysdr/soapysdr-9999.ebuild
new file mode 100644
index 000000000000..886dd4316314
--- /dev/null
+++ b/net-wireless/soapysdr/soapysdr-9999.ebuild
@@ -0,0 +1,61 @@
+# Copyright 1999-2026 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=8
+
+PYTHON_COMPAT=( python3_{13..14} )
+inherit cmake python-single-r1
+
+DESCRIPTION="vendor and platform neutral SDR support library"
+HOMEPAGE="https://github.com/pothosware/SoapySDR"
+
+if [ "${PV}" = "9999" ]; then
+ EGIT_REPO_URI="https://github.com/pothosware/SoapySDR.git"
+ EGIT_CLONE_TYPE="shallow"
+ inherit git-r3
+else
+ KEYWORDS="~amd64 ~arm ~riscv ~x86"
+ SRC_URI="https://github.com/pothosware/SoapySDR/archive/soapy-sdr-${PV}.tar.gz -> ${P}.tar.gz"
+ S="${WORKDIR}"/SoapySDR-soapy-sdr-"${PV}"
+fi
+
+LICENSE="Boost-1.0"
+SLOT="0/${PV}"
+IUSE="bladerf hackrf python rtlsdr plutosdr uhd"
+REQUIRED_USE="python? ( ${PYTHON_REQUIRED_USE} )"
+
+RDEPEND="python? ( ${PYTHON_DEPS} )"
+DEPEND="${RDEPEND}"
+BDEPEND="python? ( dev-lang/swig:0 )"
+PDEPEND="
+ bladerf? ( net-wireless/soapybladerf )
+ hackrf? ( net-wireless/soapyhackrf )
+ rtlsdr? ( net-wireless/soapyrtlsdr )
+ plutosdr? ( net-wireless/soapyplutosdr )
+ uhd? ( net-wireless/soapyuhd )
+"
+
+PATCHES=(
+ "${FILESDIR}"/soapysdr-0.8.1-python3.12-distutils.patch
+ "${FILESDIR}"/soapysdr-0.8.1-cmake4.patch
+)
+
+pkg_setup() {
+ use python && python-single-r1_pkg_setup
+}
+
+src_configure() {
+ local mycmakeargs=(
+ -DENABLE_PYTHON=$(usex python)
+ -DENABLE_PYTHON3=$(usex python)
+ -DBUILD_PYTHON3=$(usex python)
+ -DUSE_PYTHON_CONFIG=ON
+ )
+
+ cmake_src_configure
+}
+
+src_install() {
+ cmake_src_install
+ use python && python_optimize
+}
diff --git a/net-wireless/soapysdrplay/Manifest b/net-wireless/soapysdrplay/Manifest
new file mode 100644
index 000000000000..6b7eab27da4b
--- /dev/null
+++ b/net-wireless/soapysdrplay/Manifest
@@ -0,0 +1,2 @@
+DIST soapysdrplay-0.5.2.tar.gz 22623 BLAKE2B bcb801c45b2e44c2d53580b8063bb45dc6dc5868ea1fd9e0b33d89a180ae11f693a23f6045202a288078636ae0ecffd3b4ac5cbac97191d276bcaee90b39002b SHA512 f83bbf2f22897263ee9dbf57306c4e96e28d9281d664a35fa570a70796cb058b78ab5d471b6af375088da5c1a7bcf9c0c4aaa0647d8eadbb6962264766601b94
+DIST soapysdrplay-0_p20220120.tar.gz 21089 BLAKE2B db8a8f7b20a57d637f69b45cab283419e46808ab95bfbcba96b155c696bb6673223347ef720c8556f4122a53659eb166edb15b48796b2e01ec3ee5bb10eafba1 SHA512 a0cd5e84da86ab9fc6ffae93e963a14091c0936bc93a0ab86d7c3cab15cf2e62e1382da9fff10b1f457d1fbf925dc3ea74683f0fa13e12394d994f9571e52334
diff --git a/net-wireless/soapysdrplay/metadata.xml b/net-wireless/soapysdrplay/metadata.xml
new file mode 100644
index 000000000000..a15d82d93258
--- /dev/null
+++ b/net-wireless/soapysdrplay/metadata.xml
@@ -0,0 +1,13 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE pkgmetadata SYSTEM "https://docs.baldeagleos.com/dtd/metadata.dtd">
+<pkgmetadata>
+ <maintainer type="person">
+ <email>tomjbe@gentoo.org</email>
+ <name>Thomas Beierlein</name>
+ </maintainer>
+ <maintainer type="project">
+ <email>radio@gentoo.org</email>
+ <name>Radio</name>
+ </maintainer>
+ <origin>baldeagleos-repo</origin>
+</pkgmetadata>
diff --git a/net-wireless/soapysdrplay/soapysdrplay-0.5.2.ebuild b/net-wireless/soapysdrplay/soapysdrplay-0.5.2.ebuild
new file mode 100644
index 000000000000..bda2306c5157
--- /dev/null
+++ b/net-wireless/soapysdrplay/soapysdrplay-0.5.2.ebuild
@@ -0,0 +1,26 @@
+# Copyright 1999-2026 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=8
+
+inherit cmake
+
+DESCRIPTION="Soapy SDR plugin for SDRPlay"
+HOMEPAGE="https://github.com/pothosware/SoapySDRPlay3"
+
+if [ "${PV}" = "9999" ]; then
+ EGIT_REPO_URI="https://github.com/pothosware/SoapySDRPlay3.git"
+ EGIT_CLONE_TYPE="shallow"
+ inherit git-r3
+else
+ KEYWORDS="~amd64"
+ SRC_URI="https://github.com/pothosware/SoapySDRPlay3/archive/soapy-sdrplay3-${PV}.tar.gz -> ${P}.tar.gz"
+ S="${WORKDIR}"/SoapySDRPlay3-soapy-sdrplay3-${PV}
+fi
+
+LICENSE="Boost-1.0"
+SLOT="0"
+
+RDEPEND="net-wireless/soapysdr
+ >=net-wireless/sdrplay-3.15.2"
+DEPEND="${RDEPEND}"
diff --git a/net-wireless/soapysdrplay/soapysdrplay-0_p20220120.ebuild b/net-wireless/soapysdrplay/soapysdrplay-0_p20220120.ebuild
new file mode 100644
index 000000000000..78e7f6d96f98
--- /dev/null
+++ b/net-wireless/soapysdrplay/soapysdrplay-0_p20220120.ebuild
@@ -0,0 +1,27 @@
+# Copyright 1999-2026 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=8
+
+inherit cmake
+
+DESCRIPTION="Soapy SDR plugin for SDRPlay"
+HOMEPAGE="https://github.com/pothosware/SoapySDRPlay3"
+
+if [ "${PV}" = "9999" ]; then
+ EGIT_REPO_URI="https://github.com/pothosware/SoapySDRPlay3.git"
+ EGIT_CLONE_TYPE="shallow"
+ inherit git-r3
+else
+ KEYWORDS="~amd64 ~x86"
+ COMMIT_HASH="b789d5985b900973c81c69aa04cb3c7ebe620a75"
+ SRC_URI="https://github.com/pothosware/SoapySDRPlay/archive/${COMMIT_HASH}.tar.gz -> ${P}.tar.gz"
+ S="${WORKDIR}"/SoapySDRPlay3-"${COMMIT_HASH}"
+fi
+
+LICENSE="Boost-1.0"
+SLOT="0"
+
+RDEPEND="net-wireless/soapysdr
+ >=net-wireless/sdrplay-3.07"
+DEPEND="${RDEPEND}"
diff --git a/net-wireless/soapysdrplay/soapysdrplay-9999.ebuild b/net-wireless/soapysdrplay/soapysdrplay-9999.ebuild
new file mode 100644
index 000000000000..bda2306c5157
--- /dev/null
+++ b/net-wireless/soapysdrplay/soapysdrplay-9999.ebuild
@@ -0,0 +1,26 @@
+# Copyright 1999-2026 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=8
+
+inherit cmake
+
+DESCRIPTION="Soapy SDR plugin for SDRPlay"
+HOMEPAGE="https://github.com/pothosware/SoapySDRPlay3"
+
+if [ "${PV}" = "9999" ]; then
+ EGIT_REPO_URI="https://github.com/pothosware/SoapySDRPlay3.git"
+ EGIT_CLONE_TYPE="shallow"
+ inherit git-r3
+else
+ KEYWORDS="~amd64"
+ SRC_URI="https://github.com/pothosware/SoapySDRPlay3/archive/soapy-sdrplay3-${PV}.tar.gz -> ${P}.tar.gz"
+ S="${WORKDIR}"/SoapySDRPlay3-soapy-sdrplay3-${PV}
+fi
+
+LICENSE="Boost-1.0"
+SLOT="0"
+
+RDEPEND="net-wireless/soapysdr
+ >=net-wireless/sdrplay-3.15.2"
+DEPEND="${RDEPEND}"
diff --git a/net-wireless/soapyuhd/Manifest b/net-wireless/soapyuhd/Manifest
new file mode 100644
index 000000000000..4d2072931b14
--- /dev/null
+++ b/net-wireless/soapyuhd/Manifest
@@ -0,0 +1 @@
+DIST soapyuhd-0.4.1_p20251220.tar.gz 34586 BLAKE2B a14f8064c807e8ea4202fa58b07a108d61dff718cbab22278055ff07d9c4cd3d95a3a3763061ab5dfbe8d020544418ca8d5f83e8018306fbcf5a47b42ecb6c0d SHA512 3448e8cf66bb52b9e1a5accb4130d16c99f8f6f8c841a400a46409e7cdbc0e473df496e7b9ea2fb7dfa00e5ea521b3a4ed9e76c52f5a5e8ad2b8ce901ad02f6f
diff --git a/net-wireless/soapyuhd/metadata.xml b/net-wireless/soapyuhd/metadata.xml
new file mode 100644
index 000000000000..42f58171ab2f
--- /dev/null
+++ b/net-wireless/soapyuhd/metadata.xml
@@ -0,0 +1,13 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE pkgmetadata SYSTEM "https://docs.baldeagleos.com/dtd/metadata.dtd">
+<pkgmetadata>
+ <maintainer type="person">
+ <email>zerochaos@gentoo.org</email>
+ <name>Rick Farina</name>
+ </maintainer>
+ <maintainer type="project">
+ <email>radio@gentoo.org</email>
+ <name>Radio</name>
+ </maintainer>
+ <origin>baldeagleos-repo</origin>
+</pkgmetadata>
diff --git a/net-wireless/soapyuhd/soapyuhd-0.4.1_p20251220.ebuild b/net-wireless/soapyuhd/soapyuhd-0.4.1_p20251220.ebuild
new file mode 100644
index 000000000000..aa39db390486
--- /dev/null
+++ b/net-wireless/soapyuhd/soapyuhd-0.4.1_p20251220.ebuild
@@ -0,0 +1,27 @@
+# Copyright 1999-2026 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=8
+
+inherit cmake
+
+DESCRIPTION="Soapy SDR plugins for UHD supported SDR devices"
+HOMEPAGE="https://github.com/pothosware/SoapyUHD"
+
+if [ "${PV}" = "9999" ]; then
+ EGIT_REPO_URI="https://github.com/pothosware/SoapyUHD.git"
+ inherit git-r3
+else
+ KEYWORDS="amd64 ~arm ~riscv ~x86"
+ COMMIT="2a5d381f68fd05d5b3c0e7db56c36892ea99b4ae"
+ SRC_URI="https://github.com/pothosware/SoapyUHD/archive/${COMMIT}.tar.gz -> ${P}.tar.gz"
+ S="${WORKDIR}"/SoapyUHD-${COMMIT}
+fi
+
+LICENSE="MIT"
+SLOT="0"
+
+RDEPEND="net-wireless/soapysdr:=
+ net-wireless/uhd:=
+ dev-libs/boost:="
+DEPEND="${RDEPEND}"
diff --git a/net-wireless/soapyuhd/soapyuhd-9999.ebuild b/net-wireless/soapyuhd/soapyuhd-9999.ebuild
new file mode 100644
index 000000000000..aa39db390486
--- /dev/null
+++ b/net-wireless/soapyuhd/soapyuhd-9999.ebuild
@@ -0,0 +1,27 @@
+# Copyright 1999-2026 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=8
+
+inherit cmake
+
+DESCRIPTION="Soapy SDR plugins for UHD supported SDR devices"
+HOMEPAGE="https://github.com/pothosware/SoapyUHD"
+
+if [ "${PV}" = "9999" ]; then
+ EGIT_REPO_URI="https://github.com/pothosware/SoapyUHD.git"
+ inherit git-r3
+else
+ KEYWORDS="amd64 ~arm ~riscv ~x86"
+ COMMIT="2a5d381f68fd05d5b3c0e7db56c36892ea99b4ae"
+ SRC_URI="https://github.com/pothosware/SoapyUHD/archive/${COMMIT}.tar.gz -> ${P}.tar.gz"
+ S="${WORKDIR}"/SoapyUHD-${COMMIT}
+fi
+
+LICENSE="MIT"
+SLOT="0"
+
+RDEPEND="net-wireless/soapysdr:=
+ net-wireless/uhd:=
+ dev-libs/boost:="
+DEPEND="${RDEPEND}"
diff --git a/net-wireless/suscan/Manifest b/net-wireless/suscan/Manifest
new file mode 100644
index 000000000000..fbf3b8d1676b
--- /dev/null
+++ b/net-wireless/suscan/Manifest
@@ -0,0 +1 @@
+DIST suscan-0.3.0_p20251029.tgz 7927614 BLAKE2B 1b85a74479da8f21f39c91fd2cf95808ab1589c2a609ecf758b2dae40c21f1af7f73774ca6ece0cac9acd9015b55700d4b006c9692c2ab15324fc8489d066d70 SHA512 d8d7aad087fb3426c2763191a74a9b4fb6b8f2db4ef9bd42046d26ffc8a12e1766b00a916b45e82206e37dd22b7ebd9211d361fadd859950270b5f9fa363d786
diff --git a/net-wireless/suscan/files/suscan-0.3.0_p20251029-drop-ldconfig.patch b/net-wireless/suscan/files/suscan-0.3.0_p20251029-drop-ldconfig.patch
new file mode 100644
index 000000000000..c6e39d7b75a3
--- /dev/null
+++ b/net-wireless/suscan/files/suscan-0.3.0_p20251029-drop-ldconfig.patch
@@ -0,0 +1,13 @@
+diff --git a/CMakeLists.txt b/CMakeLists.txt
+index 280d64f..931b216 100644
+--- a/CMakeLists.txt
++++ b/CMakeLists.txt
+@@ -753,8 +753,4 @@ if(NOT TARGET uninstall)
+ COMMAND ${CMAKE_COMMAND} -P ${CMAKE_CURRENT_BINARY_DIR}/cmake_uninstall.cmake)
+ endif()
+
+-# Run ldconfig for certain Unix systems
+-if(UNIX AND NOT APPLE)
+- install(CODE "exec_program(ldconfig)")
+-endif()
+
diff --git a/net-wireless/suscan/metadata.xml b/net-wireless/suscan/metadata.xml
new file mode 100644
index 000000000000..42f58171ab2f
--- /dev/null
+++ b/net-wireless/suscan/metadata.xml
@@ -0,0 +1,13 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE pkgmetadata SYSTEM "https://docs.baldeagleos.com/dtd/metadata.dtd">
+<pkgmetadata>
+ <maintainer type="person">
+ <email>zerochaos@gentoo.org</email>
+ <name>Rick Farina</name>
+ </maintainer>
+ <maintainer type="project">
+ <email>radio@gentoo.org</email>
+ <name>Radio</name>
+ </maintainer>
+ <origin>baldeagleos-repo</origin>
+</pkgmetadata>
diff --git a/net-wireless/suscan/suscan-0.3.0_p20251029.ebuild b/net-wireless/suscan/suscan-0.3.0_p20251029.ebuild
new file mode 100644
index 000000000000..34f42dc3b233
--- /dev/null
+++ b/net-wireless/suscan/suscan-0.3.0_p20251029.ebuild
@@ -0,0 +1,33 @@
+# Copyright 2020-2025 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=8
+CMAKE_MAKEFILE_GENERATOR='emake'
+inherit cmake
+
+DESCRIPTION="a realtime DSP processing library"
+HOMEPAGE="https://github.com/BatchDrake/suscan"
+SRC_URI="https://dev.gentoo.org/~tomjbe/distfiles/${P}.tgz"
+
+LICENSE="GPL-3"
+SLOT="0"
+KEYWORDS="~amd64 ~x86"
+
+DEPEND="
+ dev-libs/json-c:=
+ dev-libs/libxml2:=
+ media-libs/alsa-lib
+ media-libs/libsndfile
+ >=net-wireless/sigutils-0.3.0_p20251029
+ net-wireless/soapysdr:=
+ sci-libs/fftw:=
+ sci-libs/volk:=
+ virtual/zlib:=
+"
+RDEPEND="${DEPEND}"
+
+src_prepare() {
+ eapply_user
+ eapply "${FILESDIR}"/${PN}-0.3.0_p20251029-drop-ldconfig.patch
+ cmake_src_prepare
+}
diff --git a/net-wireless/suwidgets/Manifest b/net-wireless/suwidgets/Manifest
new file mode 100644
index 000000000000..052a467cf2b0
--- /dev/null
+++ b/net-wireless/suwidgets/Manifest
@@ -0,0 +1 @@
+DIST suwidgets-0.3.0_p20251029.tgz 853853 BLAKE2B 3a31dfa5463b97e918172369aea4c7a32f1a1a48c464c634d89da8ac08e834bad0ca0da5299ebf60a3e359e50232df1c388e7a5271c618a6827b4fe397d35f86 SHA512 5c9f58c373b5bf29839dec633f56365dbdf0b8326693872e5a5de0e2bcd13cd389d39a86e65b1e52825f2d24e17121439d02df275d62d04fb6def863f6b33dc8
diff --git a/net-wireless/suwidgets/metadata.xml b/net-wireless/suwidgets/metadata.xml
new file mode 100644
index 000000000000..42f58171ab2f
--- /dev/null
+++ b/net-wireless/suwidgets/metadata.xml
@@ -0,0 +1,13 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE pkgmetadata SYSTEM "https://docs.baldeagleos.com/dtd/metadata.dtd">
+<pkgmetadata>
+ <maintainer type="person">
+ <email>zerochaos@gentoo.org</email>
+ <name>Rick Farina</name>
+ </maintainer>
+ <maintainer type="project">
+ <email>radio@gentoo.org</email>
+ <name>Radio</name>
+ </maintainer>
+ <origin>baldeagleos-repo</origin>
+</pkgmetadata>
diff --git a/net-wireless/suwidgets/suwidgets-0.3.0_p20251029.ebuild b/net-wireless/suwidgets/suwidgets-0.3.0_p20251029.ebuild
new file mode 100644
index 000000000000..806a4cb1d23b
--- /dev/null
+++ b/net-wireless/suwidgets/suwidgets-0.3.0_p20251029.ebuild
@@ -0,0 +1,37 @@
+# Copyright 2020-2025 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=8
+inherit qmake-utils
+
+DESCRIPTION="graphical library containing all SigDigger's custom widgets"
+HOMEPAGE="https://github.com/BatchDrake/SuWidgets"
+SRC_URI="https://dev.gentoo.org/~tomjbe/distfiles/${P}.tgz"
+
+S="${WORKDIR}/SuWidgets-${PV}"
+LICENSE="GPL-3"
+SLOT="0"
+KEYWORDS="~amd64 ~x86"
+
+DEPEND="
+ dev-qt/qtbase:6[gui,opengl,widgets]
+ media-libs/libglvnd
+ >=net-wireless/sigutils-0.3.0_p20251029
+"
+RDEPEND="${DEPEND}"
+
+src_prepare() {
+ sed -i '/^#include <QPainter>/i #include <QPainterPath>' Waveform.cpp Waterfall.cpp \
+ Transition.cpp SymView.cpp QVerticalLabel.cpp LCD.cpp Histogram.cpp \
+ Constellation.cpp ColorChooserButton.cpp
+
+ default
+}
+
+src_configure() {
+ eqmake6 SuWidgetsLib.pro
+}
+
+src_install() {
+ INSTALL_ROOT="${ED}" emake install
+}
diff --git a/net-wireless/tempestsdr/Manifest b/net-wireless/tempestsdr/Manifest
new file mode 100644
index 000000000000..1d7192150d5b
--- /dev/null
+++ b/net-wireless/tempestsdr/Manifest
@@ -0,0 +1 @@
+DIST tempestsdr-0.0_p20260404.tar.gz 67322612 BLAKE2B 215c31a70835a926ac66b05784cd0b175b27e7da88b39f7c565666d7335c129a4f9c4694ef68ef98e1efdb1a2562d2a73f9144e8228cb7261c05680c2a0c9905 SHA512 c2f53182ba9a8cfab5cc3586820d2f9454b9cd68428aea28432fea1322d66a7836233b5f28ff4adc04fd6a43e5297ffe90606bab2111f5f813d1036b2c89c041
diff --git a/net-wireless/tempestsdr/metadata.xml b/net-wireless/tempestsdr/metadata.xml
new file mode 100644
index 000000000000..1fcf94a84c42
--- /dev/null
+++ b/net-wireless/tempestsdr/metadata.xml
@@ -0,0 +1,12 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE pkgmetadata SYSTEM "https://docs.baldeagleos.com/dtd/metadata.dtd">
+<pkgmetadata>
+ <maintainer type="person">
+ <email>zerochaos@gentoo.org</email>
+ </maintainer>
+ <use>
+ <flag name="airspy">Optional support for <pkg>net-wireless/airspy</pkg>
+ </flag>
+ </use>
+ <origin>baldeagleos-repo</origin>
+</pkgmetadata>
diff --git a/net-wireless/tempestsdr/tempestsdr-0.0_p20260404.ebuild b/net-wireless/tempestsdr/tempestsdr-0.0_p20260404.ebuild
new file mode 100644
index 000000000000..876d29eb188b
--- /dev/null
+++ b/net-wireless/tempestsdr/tempestsdr-0.0_p20260404.ebuild
@@ -0,0 +1,42 @@
+# Copyright 2020-2026 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=8
+
+inherit java-pkg-2
+
+DESCRIPTION="Remote video eavesdropping using a software-defined radio platform"
+HOMEPAGE="https://github.com/deltj/TempestSDR.git"
+
+LICENSE="GPL-3"
+SLOT="0"
+IUSE="airspy"
+if [ "${PV}" = "9999" ]; then
+ inherit git-r3
+ EGIT_REPO_URI="https://github.com/deltj/TempestSDR.git"
+else
+ KEYWORDS="~amd64 ~x86"
+ COMMIT="99afe0536a92db20f48afeff32e8027d9c11cfec"
+ SRC_URI="https://github.com/deltj/TempestSDR/archive/${COMMIT}.tar.gz -> ${P}.tar.gz"
+ S="${WORKDIR}/TempestSDR-${COMMIT}"
+fi
+
+RDEPEND=">=virtual/jre-1.8:*
+ dev-libs/boost:=
+ airspy? ( net-wireless/airspy )
+ net-wireless/uhd:=
+ net-wireless/rtl-sdr:=
+ net-wireless/bladerf:=
+ net-wireless/hackrf-tools"
+DEPEND=">=virtual/jdk-1.8:*
+ ${RDEPEND}"
+
+src_prepare() {
+ rm -r TSDRPlugin_Airspy
+ default
+}
+
+src_install() {
+ java-pkg_dojar JavaGUI/JTempestSDR.jar
+ java-pkg_dolauncher tempestsdr --jar JTempestSDR.jar
+}
diff --git a/net-wireless/tempestsdr/tempestsdr-9999.ebuild b/net-wireless/tempestsdr/tempestsdr-9999.ebuild
new file mode 100644
index 000000000000..876d29eb188b
--- /dev/null
+++ b/net-wireless/tempestsdr/tempestsdr-9999.ebuild
@@ -0,0 +1,42 @@
+# Copyright 2020-2026 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=8
+
+inherit java-pkg-2
+
+DESCRIPTION="Remote video eavesdropping using a software-defined radio platform"
+HOMEPAGE="https://github.com/deltj/TempestSDR.git"
+
+LICENSE="GPL-3"
+SLOT="0"
+IUSE="airspy"
+if [ "${PV}" = "9999" ]; then
+ inherit git-r3
+ EGIT_REPO_URI="https://github.com/deltj/TempestSDR.git"
+else
+ KEYWORDS="~amd64 ~x86"
+ COMMIT="99afe0536a92db20f48afeff32e8027d9c11cfec"
+ SRC_URI="https://github.com/deltj/TempestSDR/archive/${COMMIT}.tar.gz -> ${P}.tar.gz"
+ S="${WORKDIR}/TempestSDR-${COMMIT}"
+fi
+
+RDEPEND=">=virtual/jre-1.8:*
+ dev-libs/boost:=
+ airspy? ( net-wireless/airspy )
+ net-wireless/uhd:=
+ net-wireless/rtl-sdr:=
+ net-wireless/bladerf:=
+ net-wireless/hackrf-tools"
+DEPEND=">=virtual/jdk-1.8:*
+ ${RDEPEND}"
+
+src_prepare() {
+ rm -r TSDRPlugin_Airspy
+ default
+}
+
+src_install() {
+ java-pkg_dojar JavaGUI/JTempestSDR.jar
+ java-pkg_dolauncher tempestsdr --jar JTempestSDR.jar
+}
diff --git a/net-wireless/ubertooth/Manifest b/net-wireless/ubertooth/Manifest
new file mode 100644
index 000000000000..5c58d150391e
--- /dev/null
+++ b/net-wireless/ubertooth/Manifest
@@ -0,0 +1 @@
+DIST ubertooth-2020-12-R1.tar.xz 763952 BLAKE2B 592c5fa689e0f944875bd777dedfd83394ebe5c9c65c1ac2c19006a949daeda8440dc102e537cf97b4547e0730df8f47d5c2a420d84d5dc770577b6039e16b28 SHA512 f127cae09d9b20dc34ffad080871f4505cbeccc1117e0e4e841ecf4a30f578d02b67b52786d7a82bdfc43d06562919008c076f8eb9befc7e4bd95def05a3864c
diff --git a/net-wireless/ubertooth/metadata.xml b/net-wireless/ubertooth/metadata.xml
new file mode 100644
index 000000000000..221b68c7c387
--- /dev/null
+++ b/net-wireless/ubertooth/metadata.xml
@@ -0,0 +1,13 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE pkgmetadata SYSTEM "https://docs.baldeagleos.com/dtd/metadata.dtd">
+<pkgmetadata>
+ <maintainer type="person">
+ <email>zerochaos@gentoo.org</email>
+ <name>Rick Farina</name>
+ </maintainer>
+ <use>
+ <flag name="bluez">use bluez to support clock following and scanning</flag>
+ <flag name="ubertooth1-firmware">Build/install ubertooth1-firmware</flag>
+ </use>
+ <origin>baldeagleos-repo</origin>
+</pkgmetadata>
diff --git a/net-wireless/ubertooth/ubertooth-2020.12.1-r1.ebuild b/net-wireless/ubertooth/ubertooth-2020.12.1-r1.ebuild
new file mode 100644
index 000000000000..45856c5f06e4
--- /dev/null
+++ b/net-wireless/ubertooth/ubertooth-2020.12.1-r1.ebuild
@@ -0,0 +1,80 @@
+# Copyright 1999-2023 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=8
+
+inherit cmake udev
+
+HOMEPAGE="https://greatscottgadgets.com/ubertoothone/"
+
+LICENSE="GPL-2"
+SLOT="0"
+IUSE="+bluez static-libs +ubertooth1-firmware +udev"
+
+DEPEND="bluez? ( net-wireless/bluez:= )
+ >=net-libs/libbtbb-${PV}:=[static-libs?]
+ static-libs? ( dev-libs/libusb[static-libs] )
+ virtual/libusb:1"
+RDEPEND="${DEPEND}
+ udev? ( virtual/udev )"
+
+MY_PV=${PV/\./-}
+MY_PV=${MY_PV/./-R}
+if [[ ${PV} == "9999" ]] ; then
+ EGIT_REPO_URI="https://github.com/greatscottgadgets/ubertooth.git"
+ inherit git-r3
+ S="${WORKDIR}/${P}/host"
+else
+ S="${WORKDIR}/${PN}-${MY_PV}/host"
+ SRC_URI="https://github.com/greatscottgadgets/${PN}/releases/download/${MY_PV}/${PN}-${MY_PV}.tar.xz"
+ KEYWORDS="amd64 arm x86"
+fi
+DESCRIPTION="open source wireless development platform suitable for Bluetooth experimentation"
+
+#readd firmware building, but do it right
+#USE="-fortran -mudflap -nls -openmp -multilib" crossdev --without-headers --genv \
+#'EXTRA_ECONF="--with-mode=thumb --with-cpu=cortex-m3 --with-float=soft"' -s4 -t arm-cortexm3-eabi
+
+src_configure() {
+ local mycmakeargs=(
+ -DUSE_BLUEZ=$(usex bluez)
+ -DBUILD_STATIC_LIB=$(usex static-libs)
+ -DINSTALL_UDEV_RULES=$(usex udev)
+ -DENABLE_PYTHON=false
+ )
+ if use udev; then
+ mycmakeargs+=(
+ -DUDEV_RULES_GROUP=usb
+ -DUDEV_RULES_PATH="$(get_udevdir)/rules.d"
+ )
+ fi
+ cmake_src_configure
+}
+
+src_install() {
+ cmake_src_install
+
+ insinto /usr/share/${PN}
+ pushd "${WORKDIR}/${PN}-${MY_PV}" || die
+ if [[ ${PV} == "9999" ]] ; then
+ ewarn "Firmware isn't available for git releases, we assume you are already"
+ ewarn "on the latest and/or can build your own."
+ else
+ if use ubertooth1-firmware; then
+ newins ubertooth-one-firmware-bin/bluetooth_rxtx.dfu ${PN}-one-${PV}-bluetooth_rxtx.dfu
+ newins ubertooth-one-firmware-bin/bluetooth_rx_only.dfu ${PN}-one-${PV}-bluetooth_rx_only.dfu
+ fi
+ fi
+ popd
+
+ elog "Everyone can read from the ubertooth, but to talk to it"
+ elog "your user needs to be in the usb group."
+}
+
+pkg_postinst() {
+ use udev && udev_reload
+}
+
+pkg_postrm() {
+ use udev && udev_reload
+}
diff --git a/net-wireless/ubertooth/ubertooth-9999.ebuild b/net-wireless/ubertooth/ubertooth-9999.ebuild
new file mode 100644
index 000000000000..719d5adfaf80
--- /dev/null
+++ b/net-wireless/ubertooth/ubertooth-9999.ebuild
@@ -0,0 +1,80 @@
+# Copyright 1999-2023 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=8
+
+inherit cmake udev
+
+HOMEPAGE="https://greatscottgadgets.com/ubertoothone/"
+
+LICENSE="GPL-2"
+SLOT="0"
+IUSE="+bluez static-libs +ubertooth1-firmware +udev"
+
+DEPEND="bluez? ( net-wireless/bluez:= )
+ >=net-libs/libbtbb-${PV}:=[static-libs?]
+ static-libs? ( dev-libs/libusb[static-libs] )
+ virtual/libusb:1"
+RDEPEND="${DEPEND}
+ udev? ( virtual/udev )"
+
+MY_PV=${PV/\./-}
+MY_PV=${MY_PV/./-R}
+if [[ ${PV} == "9999" ]] ; then
+ EGIT_REPO_URI="https://github.com/greatscottgadgets/ubertooth.git"
+ inherit git-r3
+ S="${WORKDIR}/${P}/host"
+else
+ S="${WORKDIR}/${PN}-${MY_PV}/host"
+ SRC_URI="https://github.com/greatscottgadgets/${PN}/releases/download/${MY_PV}/${PN}-${MY_PV}.tar.xz"
+ KEYWORDS="~amd64 ~arm ~x86"
+fi
+DESCRIPTION="open source wireless development platform suitable for Bluetooth experimentation"
+
+#readd firmware building, but do it right
+#USE="-fortran -mudflap -nls -openmp -multilib" crossdev --without-headers --genv \
+#'EXTRA_ECONF="--with-mode=thumb --with-cpu=cortex-m3 --with-float=soft"' -s4 -t arm-cortexm3-eabi
+
+src_configure() {
+ local mycmakeargs=(
+ -DUSE_BLUEZ=$(usex bluez)
+ -DBUILD_STATIC_LIB=$(usex static-libs)
+ -DINSTALL_UDEV_RULES=$(usex udev)
+ -DENABLE_PYTHON=false
+ )
+ if use udev; then
+ mycmakeargs+=(
+ -DUDEV_RULES_GROUP=usb
+ -DUDEV_RULES_PATH="$(get_udevdir)/rules.d"
+ )
+ fi
+ cmake_src_configure
+}
+
+src_install() {
+ cmake_src_install
+
+ insinto /usr/share/${PN}
+ pushd "${WORKDIR}/${PN}-${MY_PV}" || die
+ if [[ ${PV} == "9999" ]] ; then
+ ewarn "Firmware isn't available for git releases, we assume you are already"
+ ewarn "on the latest and/or can build your own."
+ else
+ if use ubertooth1-firmware; then
+ newins ubertooth-one-firmware-bin/bluetooth_rxtx.dfu ${PN}-one-${PV}-bluetooth_rxtx.dfu
+ newins ubertooth-one-firmware-bin/bluetooth_rx_only.dfu ${PN}-one-${PV}-bluetooth_rx_only.dfu
+ fi
+ fi
+ popd
+
+ elog "Everyone can read from the ubertooth, but to talk to it"
+ elog "your user needs to be in the usb group."
+}
+
+pkg_postinst() {
+ use udev && udev_reload
+}
+
+pkg_postrm() {
+ use udev && udev_reload
+}
diff --git a/net-wireless/uhd/Manifest b/net-wireless/uhd/Manifest
new file mode 100644
index 000000000000..f5587e10e86d
--- /dev/null
+++ b/net-wireless/uhd/Manifest
@@ -0,0 +1,2 @@
+DIST EttusResearch-UHD-4.9.0.1.tar.gz 37508709 BLAKE2B ff3d51480e1c49f30957365c6a4d3439910cf08f66cbdb1c60de22f5a83e47135e94b1bf517486cb57b9229c85e7d8c47c8b923539eb21c836d400a03f56d645 SHA512 efb4ef440e102c7705100980a8ea0a9e55de6e631d70c1e9a39a8b6cd8991129f2fd39ba93094300bdc4878c73023a956a4f79488f6aaf5104371410de6f0497
+DIST uhd-images_4.9.0.0.tar.xz 176470760 BLAKE2B bd0728bda0531f23ae6f45f2b3aef3759fa3f55ee0a914f2d40644a0dbd08fc038fe24de510066c355f38dbf88aacaa5a16e5ed380b2c65282038b2868c24437 SHA512 df173afdc9a3b69989a392ec2d51a1494dfe14ba2b85a775011d09564a3928c3ccd8f68aa0b02b244ef4a5bb7c21998318bd488770b1c9f7fe354bd97ff3a0e3
diff --git a/net-wireless/uhd/files/uhd-4.8.0.0-includes.patch b/net-wireless/uhd/files/uhd-4.8.0.0-includes.patch
new file mode 100644
index 000000000000..72f0545aafa0
--- /dev/null
+++ b/net-wireless/uhd/files/uhd-4.8.0.0-includes.patch
@@ -0,0 +1,36 @@
+diff --git a/include/uhd/features/ref_clk_calibration_iface.hpp b/include/uhd/features/ref_clk_calibration_iface.hpp
+index 86a2005..0408489 100644
+--- a/include/uhd/features/ref_clk_calibration_iface.hpp
++++ b/include/uhd/features/ref_clk_calibration_iface.hpp
+@@ -9,6 +9,7 @@
+ #include <uhd/config.hpp>
+ #include <uhd/features/discoverable_feature.hpp>
+ #include <memory>
++#include <cstdint>
+
+ namespace uhd { namespace features {
+
+diff --git a/lib/include/uhdlib/usrp/common/mpmd_mb_controller.hpp b/lib/include/uhdlib/usrp/common/mpmd_mb_controller.hpp
+index 11e2064..9794ba3 100644
+--- a/lib/include/uhdlib/usrp/common/mpmd_mb_controller.hpp
++++ b/lib/include/uhdlib/usrp/common/mpmd_mb_controller.hpp
+@@ -16,6 +16,7 @@
+ #include <uhdlib/utils/rpc.hpp>
+ #include <map>
+ #include <memory>
++#include <cstdint>
+
+ namespace uhd { namespace rfnoc {
+
+diff --git a/lib/include/uhdlib/usrp/dboard/fbx/fbx_constants.hpp b/lib/include/uhdlib/usrp/dboard/fbx/fbx_constants.hpp
+index fd23fb8..32026ff 100644
+--- a/lib/include/uhdlib/usrp/dboard/fbx/fbx_constants.hpp
++++ b/lib/include/uhdlib/usrp/dboard/fbx/fbx_constants.hpp
+@@ -15,6 +15,7 @@
+ #include <map>
+ #include <string>
+ #include <vector>
++#include <cstdint>
+
+ namespace uhd { namespace usrp { namespace fbx {
+
diff --git a/net-wireless/uhd/metadata.xml b/net-wireless/uhd/metadata.xml
new file mode 100644
index 000000000000..237b3239e27d
--- /dev/null
+++ b/net-wireless/uhd/metadata.xml
@@ -0,0 +1,28 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE pkgmetadata SYSTEM "https://docs.baldeagleos.com/dtd/metadata.dtd">
+<pkgmetadata>
+ <maintainer type="person">
+ <email>zerochaos@gentoo.org</email>
+ <name>Rick Farina</name>
+ </maintainer>
+ <maintainer type="person">
+ <email>zx2c4@gentoo.org</email>
+ <name>Jason A. Donenfeld</name>
+ </maintainer>
+ <maintainer type="project">
+ <email>radio@gentoo.org</email>
+ <name>Radio</name>
+ </maintainer>
+ <use>
+ <flag name="b100">support B100 hardware</flag>
+ <flag name="b200">support B200, B210, B200mini, B205mini hardware</flag>
+ <flag name="e300">support E300, E310 hardware</flag>
+ <flag name="mpmd">support N300, N310 hardware</flag>
+ <flag name="octoclock">Octoclock Network Support</flag>
+ <flag name="usrp1">support USRP1 hardware</flag>
+ <flag name="usrp2">support USRP2, N200, N210 hardware</flag>
+ <flag name="utils">utilities needed to list, query, calibrate, or update FPGA/Firmware</flag>
+ <flag name="x300">support X300, X310 hardware</flag>
+ </use>
+ <origin>baldeagleos-repo</origin>
+</pkgmetadata>
diff --git a/net-wireless/uhd/uhd-4.9.0.1-r1.ebuild b/net-wireless/uhd/uhd-4.9.0.1-r1.ebuild
new file mode 100644
index 000000000000..f1ba5f83fefd
--- /dev/null
+++ b/net-wireless/uhd/uhd-4.9.0.1-r1.ebuild
@@ -0,0 +1,151 @@
+# Copyright 1999-2026 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=8
+
+PYTHON_COMPAT=( python3_{13..14} )
+IM_PV=$(ver_cut 1-3).0
+
+inherit cmake gnome2-utils python-single-r1 udev
+
+DESCRIPTION="Universal Software Radio Peripheral (USRP) Hardware Driver"
+HOMEPAGE="https://kb.ettus.com"
+
+SRC_URI="https://github.com/EttusResearch/uhd/archive/v${PV}.tar.gz -> EttusResearch-UHD-${PV}.tar.gz \
+ https://github.com/EttusResearch/uhd/releases/download/v${IM_PV}/uhd-images_${IM_PV}.tar.xz"
+
+S="${WORKDIR}/${P}/host"
+
+LICENSE="GPL-3"
+SLOT="0/$(ver_cut 1-3)"
+KEYWORDS="amd64 ~arm ~riscv ~x86"
+IUSE="+b100 +b200 doc cpu_flags_arm_neon cpu_flags_x86_ssse3 e300 examples +mpmd octoclock test +usb +usrp1 +usrp2 +utils +x300"
+RESTRICT="!test? ( test )"
+REQUIRED_USE="${PYTHON_REQUIRED_USE}
+ b100? ( usb )
+ b200? ( usb )
+ usrp1? ( usb )
+ usrp2? ( usb )
+ || ( b100 b200 e300 mpmd usrp1 usrp2 x300 )"
+
+RDEPEND="${PYTHON_DEPS}
+ e300? ( virtual/udev )
+ usb? ( virtual/libusb:1 )
+ dev-libs/boost:=
+ sys-libs/ncurses:0=
+ $(python_gen_cond_dep '
+ dev-python/numpy[${PYTHON_USEDEP}]
+ dev-python/requests[${PYTHON_USEDEP}]
+ ')
+"
+DEPEND="${RDEPEND}"
+#zip and gzip are directly used by the build system
+BDEPEND="
+ doc? ( app-text/doxygen )
+ $(python_gen_cond_dep '
+ dev-python/mako[${PYTHON_USEDEP}]
+ ')
+ app-arch/unzip
+ app-arch/gzip
+"
+
+PATCHES=(
+ "${FILESDIR}"/"${PN}"-4.8.0.0-includes.patch
+)
+
+src_unpack() {
+ default
+ echo ${IM_PV}
+ mv "uhd-images_${IM_PV}" images || die
+}
+
+src_prepare() {
+ cmake_src_prepare
+
+ gnome2_environment_reset #534582
+}
+
+src_configure() {
+ #https://gitlab.kitware.com/cmake/cmake/-/issues/23236
+ #https://github.com/EttusResearch/uhd/pull/560
+ local mycmakeargs=(
+ -DENABLE_LIBUHD=ON
+ -DENABLE_C_API=ON
+ -DENABLE_MAN_PAGES=ON
+ -DENABLE_MAN_PAGE_COMPRESSION=OFF
+ -DENABLE_EXAMPLES="$(usex examples)"
+ -DENABLE_TESTS="$(usex test)"
+ -DENABLE_USB="$(usex usb)"
+ -DENABLE_UTILS="$(usex utils)"
+ -DENABLE_MANUAL="$(usex doc)"
+ -DENABLE_DOXYGEN="$(usex doc)"
+ -DENABLE_B100="$(usex b100)"
+ -DENABLE_B200="$(usex b200)"
+ -DENABLE_E300="$(usex e300)"
+ -DENABLE_USRP1="$(usex usrp1)"
+ -DENABLE_USRP2="$(usex usrp2)"
+ -DENABLE_X300="$(usex x300)"
+ -DENABLE_MPMD="$(usex mpmd)"
+ -DENABLE_OCTOCLOCK="$(usex octoclock)"
+ -DENABLE_SSSE3="$(usex cpu_flags_x86_ssse3)"
+ -DNEON_SIMD_ENABLE="$(usex cpu_flags_arm_neon)"
+ -DPYTHON_EXECUTABLE="${PYTHON}"
+ -DPKG_DOC_DIR="${EPREFIX}/usr/share/doc/${PF}"
+ -DUHD_VERSION="${PV}"
+ )
+ cmake_src_configure
+}
+
+src_install() {
+ cmake_src_install
+ python_optimize
+ if use utils; then
+ python_fix_shebang "${ED}"/usr/$(get_libdir)/${PN}/utils/
+ if [[ "${PV}" != "9999" ]]; then
+ rm -r "${ED}/usr/bin/uhd_images_downloader" || die
+ fi
+ fi
+ # do not install test files (bug #857492)
+ if use test; then
+ rm "${ED}/usr/$(get_libdir)/${PN}/tests" -R || die
+ fi
+
+ udev_dorules "${S}/utils/uhd-usrp.rules"
+
+ if ! use b100; then
+ rm "${WORKDIR}"/images/usrp_b100* || die
+ fi
+ if ! use b200; then
+ rm "${WORKDIR}"/images/usrp_b2[01]* || die
+ fi
+ if ! use e300; then
+ rm "${WORKDIR}"/images/usrp_e3* || die
+ fi
+ if ! use mpmd; then
+ rm "${WORKDIR}"/images/usrp_n310* || die
+ fi
+ if ! use octoclock; then
+ rm "${WORKDIR}"/images/octoclock* || die
+ fi
+ if ! use usrp1; then
+ rm "${WORKDIR}"/images/usrp1* || die
+ fi
+ if ! use usrp2; then
+ rm "${WORKDIR}"/images/usrp2* || die
+ rm "${WORKDIR}"/images/usrp_n2[01]* || die
+ rm -r "${WORKDIR}"/images/bit || die
+ fi
+ if ! use x300; then
+ rm "${WORKDIR}/"images/usrp_x3* || die
+ fi
+ insinto /usr/share/${PN}
+ doins -r "${WORKDIR}/images"
+}
+
+pkg_postinst() {
+ udev_reload
+}
+
+pkg_postrm() {
+ udev_reload
+}
diff --git a/net-wireless/uhd/uhd-4.9.0.1.ebuild b/net-wireless/uhd/uhd-4.9.0.1.ebuild
new file mode 100644
index 000000000000..5a69302e740c
--- /dev/null
+++ b/net-wireless/uhd/uhd-4.9.0.1.ebuild
@@ -0,0 +1,151 @@
+# Copyright 1999-2025 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=8
+
+PYTHON_COMPAT=( python3_{13..14} )
+IM_PV=$(ver_cut 1-3).0
+
+inherit cmake gnome2-utils python-single-r1 udev
+
+DESCRIPTION="Universal Software Radio Peripheral (USRP) Hardware Driver"
+HOMEPAGE="https://kb.ettus.com"
+
+SRC_URI="https://github.com/EttusResearch/uhd/archive/v${PV}.tar.gz -> EttusResearch-UHD-${PV}.tar.gz \
+ https://github.com/EttusResearch/uhd/releases/download/v${IM_PV}/uhd-images_${IM_PV}.tar.xz"
+
+S="${WORKDIR}/${P}/host"
+
+LICENSE="GPL-3"
+SLOT="0/$(ver_cut 1-3)"
+KEYWORDS="amd64 ~arm ~riscv ~x86"
+IUSE="+b100 +b200 doc cpu_flags_arm_neon cpu_flags_x86_ssse3 e300 examples +mpmd octoclock test +usb +usrp1 +usrp2 +utils +x300"
+RESTRICT="!test? ( test )"
+REQUIRED_USE="${PYTHON_REQUIRED_USE}
+ b100? ( usb )
+ b200? ( usb )
+ usrp1? ( usb )
+ usrp2? ( usb )
+ || ( b100 b200 e300 mpmd usrp1 usrp2 x300 )"
+
+RDEPEND="${PYTHON_DEPS}
+ e300? ( virtual/udev )
+ usb? ( virtual/libusb:1 )
+ dev-libs/boost:=
+ sys-libs/ncurses:0=
+ $(python_gen_cond_dep '
+ dev-python/numpy[${PYTHON_USEDEP}]
+ dev-python/requests[${PYTHON_USEDEP}]
+ ')
+"
+DEPEND="${RDEPEND}"
+#zip and gzip are directly used by the build system
+BDEPEND="
+ doc? ( app-text/doxygen )
+ $(python_gen_cond_dep '
+ dev-python/mako[${PYTHON_USEDEP}]
+ ')
+ app-arch/unzip
+ app-arch/gzip
+"
+
+PATCHES=(
+ "${FILESDIR}"/"${PN}"-4.8.0.0-includes.patch
+)
+
+src_unpack() {
+ default
+ echo ${IM_PV}
+ mv "uhd-images_${IM_PV}" images || die
+}
+
+src_prepare() {
+ cmake_src_prepare
+
+ gnome2_environment_reset #534582
+}
+
+src_configure() {
+ #https://gitlab.kitware.com/cmake/cmake/-/issues/23236
+ #https://github.com/EttusResearch/uhd/pull/560
+ local mycmakeargs=(
+ -DENABLE_LIBUHD=ON
+ -DENABLE_C_API=ON
+ -DENABLE_MAN_PAGES=ON
+ -DENABLE_MAN_PAGE_COMPRESSION=OFF
+ -DENABLE_EXAMPLES="$(usex examples)"
+ -DENABLE_TESTS="$(usex test)"
+ -DENABLE_USB="$(usex usb)"
+ -DENABLE_UTILS="$(usex utils)"
+ -DENABLE_MANUAL="$(usex doc)"
+ -DENABLE_DOXYGEN="$(usex doc)"
+ -DENABLE_B100="$(usex b100)"
+ -DENABLE_B200="$(usex b200)"
+ -DENABLE_E300="$(usex e300)"
+ -DENABLE_USRP1="$(usex usrp1)"
+ -DENABLE_USRP2="$(usex usrp2)"
+ -DENABLE_X300="$(usex x300)"
+ -DENABLE_MPMD="$(usex mpmd)"
+ -DENABLE_OCTOCLOCK="$(usex octoclock)"
+ -DENABLE_SSSE3="$(usex cpu_flags_x86_ssse3)"
+ -DNEON_SIMD_ENABLE="$(usex cpu_flags_arm_neon)"
+ -DPYTHON_EXECUTABLE="${PYTHON}"
+ -DPKG_DOC_DIR="${EPREFIX}/usr/share/doc/${PF}"
+ -DUHD_VERSION="${PV}"
+ )
+ cmake_src_configure
+}
+
+src_install() {
+ cmake_src_install
+ python_optimize
+ if use utils; then
+ python_fix_shebang "${ED}"/usr/$(get_libdir)/${PN}/utils/
+ if [[ "${PV}" != "9999" ]]; then
+ rm -r "${ED}/usr/bin/uhd_images_downloader" || die
+ fi
+ fi
+ # do not install test files (bug #857492)
+ if use test; then
+ rm "${ED}/usr/$(get_libdir)/${PN}/tests" -R || die
+ fi
+
+ udev_dorules "${S}/utils/uhd-usrp.rules"
+
+ if ! use b100; then
+ rm "${WORKDIR}"/images/usrp_b100* || die
+ fi
+ if ! use b200; then
+ rm "${WORKDIR}"/images/usrp_b2[01]* || die
+ fi
+ if ! use e300; then
+ rm "${WORKDIR}"/images/usrp_e3* || die
+ fi
+ if ! use mpmd; then
+ rm "${WORKDIR}"/images/usrp_n310* || die
+ fi
+ if ! use octoclock; then
+ rm "${WORKDIR}"/images/octoclock* || die
+ fi
+ if ! use usrp1; then
+ rm "${WORKDIR}"/images/usrp1* || die
+ fi
+ if ! use usrp2; then
+ rm "${WORKDIR}"/images/usrp2* || die
+ rm "${WORKDIR}"/images/usrp_n2[01]* || die
+ rm -r "${WORKDIR}"/images/bit || die
+ fi
+ if ! use x300; then
+ rm "${WORKDIR}/"images/usrp_x3* || die
+ fi
+ insinto /usr/share/${PN}
+ doins -r "${WORKDIR}/images"
+}
+
+pkg_postinst() {
+ udev_reload
+}
+
+pkg_postrm() {
+ udev_reload
+}
diff --git a/net-wireless/unifi/Manifest b/net-wireless/unifi/Manifest
new file mode 100644
index 000000000000..abe2952a2e1d
--- /dev/null
+++ b/net-wireless/unifi/Manifest
@@ -0,0 +1,2 @@
+DIST unifi-10.1.89.zip 144339191 BLAKE2B c1b3d3f6d977b0673a7c82940f75d66e9cfa963ad84fcf8b0958963ca294cc4026354533d7224083fd4fdb27af66b0625613fa4bc23bec1724ae90c9a91d6dc2 SHA512 c7f9c25a83a8fede71493054279eacde35b16f89c0364e7a15d86e6d1911def3c152a871a4bf01dd7d1b37d0f2fffaa4f7deab526a0e878de6a87b010c8592f6
+DIST unifi-10.3.58.zip 148580647 BLAKE2B d14b1587f5ddff0d669ec1c78c191e66cb52fc21ca49c6be94fc4cf307f525988b6ba8a31ee877add60ca249b880309fd220f3e4263feb16847dbf5a0ecb12b6 SHA512 447e60c5449d792b70911e7ddd72d42cd9de8f15d1f27378555c5f3bd9f6d60db1d1dc19e4b106d5c6bd042237f3211611daecca78111328b0bfb5b9eea7d7b2
diff --git a/net-wireless/unifi/files/README.gentoo b/net-wireless/unifi/files/README.gentoo
new file mode 100644
index 000000000000..b6284b3017ea
--- /dev/null
+++ b/net-wireless/unifi/files/README.gentoo
@@ -0,0 +1,11 @@
+System MongoDB
+==============
+
+If you want using the system-mongodb systemd service instead of the started
+mongodb from the unifi service please add to
+"var/lib/unifi/data/system.properties" the following properties:
+
+db.mongo.local=false
+db.mongo.uri=mongodb\://127.0.0.1\:27017/ace
+statdb.mongo.uri=mongodb\://127.0.0.1\:27017/ace_stat
+unifi.db.name=ace
diff --git a/net-wireless/unifi/files/unifi-mongodb.initd b/net-wireless/unifi/files/unifi-mongodb.initd
new file mode 100644
index 000000000000..fb55027eb149
--- /dev/null
+++ b/net-wireless/unifi/files/unifi-mongodb.initd
@@ -0,0 +1,25 @@
+#!/sbin/openrc-run
+# Copyright 1999-2022 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+unifi_exec="/usr/bin/unifi"
+unifi_path="/usr/lib/unifi"
+
+unifi_user="unifi"
+unifi_group="unifi"
+
+name="UniFi Controller"
+
+start_stop_daemon_args="--chdir ${unifi_path}"
+
+command="${unifi_exec}"
+command_args="start"
+command_background=true
+command_progress=true
+command_user="${unifi_user}:${unifi_group}"
+
+pidfile="/run/${RC_SVCNAME}.pid"
+retry=TERM/60
+
+rc_after="mongodb"
+rc_need="mongodb"
diff --git a/net-wireless/unifi/files/unifi-mongodb.service b/net-wireless/unifi/files/unifi-mongodb.service
new file mode 100644
index 000000000000..6d9b9d55ee2e
--- /dev/null
+++ b/net-wireless/unifi/files/unifi-mongodb.service
@@ -0,0 +1,15 @@
+[Unit]
+Description=UniFi Controller
+After=mongodb.service network.target
+Requires=mongodb.service
+
+[Service]
+Type=simple
+User=unifi
+Group=unifi
+WorkingDirectory=/usr/lib/unifi
+ExecStart=/usr/bin/unifi start
+ExecStop=/usr/bin/unifi stop
+
+[Install]
+WantedBy=multi-user.target
diff --git a/net-wireless/unifi/files/unifi.confd b/net-wireless/unifi/files/unifi.confd
new file mode 100644
index 000000000000..580c18d332b7
--- /dev/null
+++ b/net-wireless/unifi/files/unifi.confd
@@ -0,0 +1,6 @@
+# Copyright 1999-2018 Gentoo Foundation
+# Distributed under the terms of the GNU General Public License v2
+
+# Specifies the path of an used Java runtime,
+# if it's not set, the system default is being used.
+# JAVA_HOME=""
diff --git a/net-wireless/unifi/files/unifi.initd-r2 b/net-wireless/unifi/files/unifi.initd-r2
new file mode 100644
index 000000000000..a92172fffb97
--- /dev/null
+++ b/net-wireless/unifi/files/unifi.initd-r2
@@ -0,0 +1,22 @@
+#!/sbin/openrc-run
+# Copyright 1999-2022 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+unifi_exec="/usr/bin/unifi"
+unifi_path="/usr/lib/unifi"
+
+unifi_user="unifi"
+unifi_group="unifi"
+
+name="UniFi Controller"
+
+start_stop_daemon_args="--chdir ${unifi_path}"
+
+command="${unifi_exec}"
+command_args="start"
+command_background=true
+command_progress=true
+command_user="${unifi_user}:${unifi_group}"
+
+pidfile="/run/${RC_SVCNAME}.pid"
+retry=TERM/60
diff --git a/net-wireless/unifi/files/unifi.service-r2 b/net-wireless/unifi/files/unifi.service-r2
new file mode 100644
index 000000000000..40fff6c81797
--- /dev/null
+++ b/net-wireless/unifi/files/unifi.service-r2
@@ -0,0 +1,14 @@
+[Unit]
+Description=UniFi Controller
+After=network.target
+
+[Service]
+Type=simple
+User=unifi
+Group=unifi
+WorkingDirectory=/usr/lib/unifi
+ExecStart=/usr/bin/unifi start
+ExecStop=/usr/bin/unifi stop
+
+[Install]
+WantedBy=multi-user.target
diff --git a/net-wireless/unifi/metadata.xml b/net-wireless/unifi/metadata.xml
new file mode 100644
index 000000000000..adbef6bf7d89
--- /dev/null
+++ b/net-wireless/unifi/metadata.xml
@@ -0,0 +1,21 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE pkgmetadata SYSTEM "https://docs.baldeagleos.com/dtd/metadata.dtd">
+<pkgmetadata>
+ <maintainer type="person">
+ <email>conikost@gentoo.org</email>
+ <name>Conrad Kostecki</name>
+ </maintainer>
+ <longdescription>
+ UniFi is a management controller software for Ubiquiti UniFi APs.
+ Its purpose is to configure and monitor all those APs.
+ Also all kind of statistics are collected, which can be accessed through UniFi.
+ There is also an internal RADIUS server, which can be used for WPA2-Enterprise.
+ </longdescription>
+ <use>
+ <flag name="system-mongodb">Start <pkg>dev-db/mongodb</pkg> by its own init scripts instead of managed by UniFi.</flag>
+ </use>
+ <upstream>
+ <remote-id type="cpe">cpe:/a:ui:uiunifi_controller</remote-id>
+ </upstream>
+ <origin>baldeagleos-repo</origin>
+</pkgmetadata>
diff --git a/net-wireless/unifi/unifi-10.1.89.ebuild b/net-wireless/unifi/unifi-10.1.89.ebuild
new file mode 100644
index 000000000000..46ea30cd61fd
--- /dev/null
+++ b/net-wireless/unifi/unifi-10.1.89.ebuild
@@ -0,0 +1,112 @@
+# Copyright 1999-2026 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=8
+
+# Set this var for any releases except stable
+# RC_SUFFIX="-"
+
+inherit java-pkg-2 readme.gentoo-r1 systemd
+
+DESCRIPTION="A Management Controller for Ubiquiti Networks UniFi APs"
+HOMEPAGE="https://www.ubnt.com"
+SRC_URI="https://dl.ui.com/unifi/${PV}${RC_SUFFIX}/UniFi.unix.zip -> ${P}.zip"
+S="${WORKDIR}/UniFi"
+
+LICENSE="Apache-1.0 Apache-2.0 BSD-1 BSD-2 BSD CDDL EPL-1.0 GPL-2 LGPL-2.1 LGPL-3 MIT ubiquiti"
+SLOT="0/$(ver_cut 1-2)"
+KEYWORDS="-* amd64 ~arm64"
+IUSE="systemd system-mongodb"
+RESTRICT="bindist mirror"
+
+RDEPEND="
+ acct-group/unifi
+ acct-user/unifi
+ dev-db/mongodb
+ || (
+ virtual/jre:21
+ virtual/jre:17
+ )
+"
+
+BDEPEND="app-arch/unzip"
+
+DOCS=( "readme.txt" )
+
+QA_PREBUILT="
+ usr/lib/unifi/lib/native/Linux/aarch64/*.so
+ usr/lib/unifi/lib/native/Linux/x86_64/*.so
+"
+
+src_prepare() {
+ if [[ ${CHOST} != aarch64* ]]; then
+ rm -r lib/native/Linux/aarch64 || die
+ fi
+ if [[ ${CHOST} != x86_64* ]]; then
+ rm -r lib/native/Linux/x86_64 || die
+ fi
+
+ if [[ ${CHOST} == aarch64* ]]; then
+ if ! use systemd; then
+ rm lib/native/Linux/aarch64/libubnt_sdnotify_jni.so || die
+ fi
+ fi
+ if [[ ${CHOST} == x86_64* ]]; then
+ if ! use systemd; then
+ rm lib/native/Linux/x86_64/libubnt_sdnotify_jni.so || die
+ fi
+ fi
+
+ default
+}
+
+src_compile() {
+ :;
+}
+
+src_install() {
+ insinto /usr/lib/unifi
+ doins -r dl lib webapps
+ ! use system-mongodb && doins -r bin
+
+ diropts -o unifi -g unifi
+ keepdir /var/lib/unifi/{conf,data,run,tmp,work} /var/log/unifi
+
+ for symlink in conf data run tmp work; do
+ dosym ../../../var/lib/unifi/${symlink} /usr/lib/unifi/${symlink}
+ done
+ dosym ../../../var/log/unifi /usr/lib/unifi/logs
+
+ java-pkg_regjar "${D}"/usr/lib/unifi/lib/*.jar
+ java-pkg_dolauncher \
+ unifi \
+ --java_args '-Dorg.xerial.snappy.tempdir=/usr/lib/unifi/tmp \
+ -Djava.library.path= \
+ --add-opens java.base/java.lang=ALL-UNNAMED \
+ --add-opens java.base/java.time=ALL-UNNAMED \
+ --add-opens java.base/sun.security.util=ALL-UNNAMED \
+ --add-opens java.base/java.io=ALL-UNNAMED \
+ --add-opens java.rmi/sun.rmi.transport=ALL-UNNAMED' \
+ --jar ace.jar \
+ --pwd '/usr/lib/unifi'
+
+ if use system-mongodb; then
+ systemd_newunit "${FILESDIR}"/unifi-mongodb.service unifi.service
+ newinitd "${FILESDIR}"/unifi-mongodb.initd unifi
+ else
+ systemd_newunit "${FILESDIR}"/unifi.service-r2 unifi.service
+ newinitd "${FILESDIR}"/unifi.initd-r2 unifi
+ fi
+
+ newconfd "${FILESDIR}"/unifi.confd unifi
+
+ echo 'CONFIG_PROTECT="/var/lib/unifi"' > "${T}"/99unifi || die
+ doenvd "${T}"/99unifi
+
+ einstalldocs
+ readme.gentoo_create_doc
+}
+
+pkg_postinst() {
+ readme.gentoo_print_elog
+}
diff --git a/net-wireless/unifi/unifi-10.3.58.ebuild b/net-wireless/unifi/unifi-10.3.58.ebuild
new file mode 100644
index 000000000000..6dd4f3560fc5
--- /dev/null
+++ b/net-wireless/unifi/unifi-10.3.58.ebuild
@@ -0,0 +1,109 @@
+# Copyright 1999-2026 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=8
+
+# Set this var for any releases except stable
+# RC_SUFFIX="-"
+
+inherit java-pkg-2 readme.gentoo-r1 systemd
+
+DESCRIPTION="A Management Controller for Ubiquiti Networks UniFi APs"
+HOMEPAGE="https://www.ubnt.com"
+SRC_URI="https://dl.ui.com/unifi/${PV}${RC_SUFFIX}/UniFi.unix.zip -> ${P}.zip"
+S="${WORKDIR}/UniFi"
+
+LICENSE="Apache-1.0 Apache-2.0 BSD-1 BSD-2 BSD CDDL EPL-1.0 GPL-2 LGPL-2.1 LGPL-3 MIT ubiquiti"
+SLOT="0/$(ver_cut 1-2)"
+KEYWORDS="-* ~amd64 ~arm64"
+IUSE="systemd system-mongodb"
+RESTRICT="bindist mirror"
+
+RDEPEND="
+ acct-group/unifi
+ acct-user/unifi
+ dev-db/mongodb
+ virtual/jre:25
+"
+
+BDEPEND="app-arch/unzip"
+
+DOCS=( "readme.txt" )
+
+QA_PREBUILT="
+ usr/lib/unifi/lib/native/Linux/aarch64/*.so
+ usr/lib/unifi/lib/native/Linux/x86_64/*.so
+"
+
+src_prepare() {
+ if [[ ${CHOST} != aarch64* ]]; then
+ rm -r lib/native/Linux/aarch64 || die
+ fi
+ if [[ ${CHOST} != x86_64* ]]; then
+ rm -r lib/native/Linux/x86_64 || die
+ fi
+
+ if [[ ${CHOST} == aarch64* ]]; then
+ if ! use systemd; then
+ rm lib/native/Linux/aarch64/libubnt_sdnotify_jni.so || die
+ fi
+ fi
+ if [[ ${CHOST} == x86_64* ]]; then
+ if ! use systemd; then
+ rm lib/native/Linux/x86_64/libubnt_sdnotify_jni.so || die
+ fi
+ fi
+
+ default
+}
+
+src_compile() {
+ :;
+}
+
+src_install() {
+ insinto /usr/lib/unifi
+ doins -r dl lib webapps
+ ! use system-mongodb && doins -r bin
+
+ diropts -o unifi -g unifi
+ keepdir /var/lib/unifi/{conf,data,run,tmp,work} /var/log/unifi
+
+ for symlink in conf data run tmp work; do
+ dosym ../../../var/lib/unifi/${symlink} /usr/lib/unifi/${symlink}
+ done
+ dosym ../../../var/log/unifi /usr/lib/unifi/logs
+
+ java-pkg_regjar "${D}"/usr/lib/unifi/lib/*.jar
+ java-pkg_dolauncher \
+ unifi \
+ --java_args '-Dorg.xerial.snappy.tempdir=/usr/lib/unifi/tmp \
+ -Djava.library.path= \
+ --add-opens java.base/java.lang=ALL-UNNAMED \
+ --add-opens java.base/java.time=ALL-UNNAMED \
+ --add-opens java.base/sun.security.util=ALL-UNNAMED \
+ --add-opens java.base/java.io=ALL-UNNAMED \
+ --add-opens java.rmi/sun.rmi.transport=ALL-UNNAMED' \
+ --jar ace.jar \
+ --pwd '/usr/lib/unifi'
+
+ if use system-mongodb; then
+ systemd_newunit "${FILESDIR}"/unifi-mongodb.service unifi.service
+ newinitd "${FILESDIR}"/unifi-mongodb.initd unifi
+ else
+ systemd_newunit "${FILESDIR}"/unifi.service-r2 unifi.service
+ newinitd "${FILESDIR}"/unifi.initd-r2 unifi
+ fi
+
+ newconfd "${FILESDIR}"/unifi.confd unifi
+
+ echo 'CONFIG_PROTECT="/var/lib/unifi"' > "${T}"/99unifi || die
+ doenvd "${T}"/99unifi
+
+ einstalldocs
+ readme.gentoo_create_doc
+}
+
+pkg_postinst() {
+ readme.gentoo_print_elog
+}
diff --git a/net-wireless/urh/Manifest b/net-wireless/urh/Manifest
new file mode 100644
index 000000000000..77e90bad348b
--- /dev/null
+++ b/net-wireless/urh/Manifest
@@ -0,0 +1 @@
+DIST urh-2.10.0.gh.tar.gz 13186145 BLAKE2B 4d68080279dea9763180a586169b07279fecd9b2df98a509db5e578432f1082a20b94e04fae3f2ed1f32621b4c683bde546e158d9ca369e2bc68c061e473b9ea SHA512 0e46c7f74b1108ed32128cb1b3034b62ec03595057e5822c7e27e9340d2b81cc6240376bef3d3ba5b03e47396ccdfd737cb911788a1f36be2be30928e101fc57
diff --git a/net-wireless/urh/files/urh-2.9.7-no-numpy-setup.patch b/net-wireless/urh/files/urh-2.9.7-no-numpy-setup.patch
new file mode 100644
index 000000000000..c60b2c766197
--- /dev/null
+++ b/net-wireless/urh/files/urh-2.9.7-no-numpy-setup.patch
@@ -0,0 +1,11 @@
+diff -Naur urh-2.9.4-orig/setup.py urh-2.9.4/setup.py
+--- urh-2.9.4-orig/setup.py 2023-08-20 20:31:45.067321480 -0400
++++ urh-2.9.4/setup.py 2023-08-20 20:31:55.088320822 -0400
+@@ -50,7 +50,6 @@
+ print("Finalizing options")
+ _build_ext.finalize_options(self)
+ # Prevent numpy from thinking it is still in its setup process:
+- set_builtin("__NUMPY_SETUP__", False)
+ import numpy
+
+ self.include_dirs.append(numpy.get_include())
diff --git a/net-wireless/urh/metadata.xml b/net-wireless/urh/metadata.xml
new file mode 100644
index 000000000000..da682e0d2014
--- /dev/null
+++ b/net-wireless/urh/metadata.xml
@@ -0,0 +1,32 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE pkgmetadata SYSTEM "https://docs.baldeagleos.com/dtd/metadata.dtd">
+<pkgmetadata>
+ <maintainer type="person">
+ <email>zerochaos@gentoo.org</email>
+ <name>Rick Farina</name>
+ </maintainer>
+ <maintainer type="project">
+ <email>radio@gentoo.org</email>
+ <name>Radio</name>
+ </maintainer>
+ <use>
+ <flag name="airspy">use native backend which directly uses <pkg>net-wireless/airspy</pkg>
+ </flag>
+ <flag name="audio">use a soundcard instead of an sdr</flag>
+ <flag name="bladerf">use native backend which directly uses <pkg>net-wireless/bladerf</pkg>
+ </flag>
+ <flag name="hackrf">use native backend which directly uses <pkg>net-libs/libhackrf</pkg>
+ </flag>
+ <flag name="limesdr">use native backend which directly uses <pkg>net-wireless/limesuite</pkg>
+ </flag>
+ <flag name="plutosdr">use native backend which directly uses <pkg>net-libs/libiio</pkg>
+ </flag>
+ <flag name="rtlsdr">use native backend which directly uses <pkg>net-wireless/rtl-sdr</pkg>
+ </flag>
+ <flag name="sdrplay">use native backend which directly uses <pkg>net-wireless/sdrplay</pkg>
+ </flag>
+ <flag name="uhd">use native backend which directly uses <pkg>net-wireless/uhd</pkg>
+ </flag>
+ </use>
+ <origin>baldeagleos-repo</origin>
+</pkgmetadata>
diff --git a/net-wireless/urh/urh-2.10.0-r1.ebuild b/net-wireless/urh/urh-2.10.0-r1.ebuild
new file mode 100644
index 000000000000..52342b152f3a
--- /dev/null
+++ b/net-wireless/urh/urh-2.10.0-r1.ebuild
@@ -0,0 +1,81 @@
+# Copyright 1999-2026 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=8
+
+PYTHON_COMPAT=( python3_{13..14} )
+DISTUTILS_EXT=1
+DISTUTILS_USE_PEP517=setuptools
+inherit distutils-r1 virtualx
+
+DESCRIPTION="Universal Radio Hacker: investigate wireless protocols like a boss"
+HOMEPAGE="https://github.com/jopohl/urh"
+
+if [ "${PV}" = "9999" ]; then
+ inherit git-r3
+ EGIT_REPO_URI="https://github.com/jopohl/urh.git"
+else
+ SRC_URI="https://github.com/jopohl/${PN}/archive/v${PV}.tar.gz -> ${P}.gh.tar.gz"
+ KEYWORDS="~amd64 ~x86"
+fi
+
+LICENSE="Apache-2.0"
+SLOT="0"
+IUSE="airspy audio bladerf hackrf limesdr plutosdr rtlsdr sdrplay uhd"
+
+DEPEND="${PYTHON_DEPS}
+ net-wireless/gnuradio[zeromq]
+ dev-python/numpy[${PYTHON_USEDEP}]
+ dev-python/psutil[${PYTHON_USEDEP}]
+ dev-python/pyzmq[${PYTHON_USEDEP}]
+ dev-python/cython[${PYTHON_USEDEP}]
+ airspy? ( net-wireless/airspy:= )
+ audio? ( dev-python/pyaudio[${PYTHON_USEDEP}] )
+ bladerf? ( net-wireless/bladerf:= )
+ hackrf? ( net-libs/libhackrf:= )
+ limesdr? ( net-wireless/limesuite )
+ plutosdr? ( net-libs/libiio:= )
+ rtlsdr? ( net-wireless/rtl-sdr:= )
+ sdrplay? ( <net-wireless/sdrplay-3.0.0:= )
+ uhd? ( net-wireless/uhd:= )"
+RDEPEND="${DEPEND}
+ dev-python/pyqt6[${PYTHON_USEDEP},testlib]
+ net-wireless/gr-osmosdr"
+
+distutils_enable_tests pytest
+
+PATCHES=( "${FILESDIR}/${PN}-2.9.7-no-numpy-setup.patch" )
+
+python_configure_all() {
+ DISTUTILS_ARGS=(
+ $(use_with airspy)
+ $(use_with bladerf)
+ $(use_with hackrf)
+ $(use_with limesdr)
+ $(use_with plutosdr)
+ $(use_with rtlsdr)
+ $(use_with sdrplay)
+ $(use_with uhd usrp)
+ )
+}
+
+src_test() {
+ virtx distutils-r1_src_test
+}
+
+python_test() {
+ # Why are these disabled?
+ # import errors AND hangs forever after 'tests/test_spectrogram.py::TestSpectrogram::test_cancel_filtering'
+ # import errors 'tests/test_continuous_modulator.py::TestContinuousModulator::test_modulate_continuously'
+ # import errors 'tests/test_send_recv_dialog_gui.py::TestSendRecvDialog::test_continuous_send_dialog'
+ # import errors 'tests/test_spectrogram.py::TestSpectrogram::test_channel_separation_with_negative_frequency'
+ local EPYTEST_DESELECT=(
+ 'tests/test_spectrogram.py::TestSpectrogram::test_cancel_filtering'
+ 'tests/test_continuous_modulator.py::TestContinuousModulator::test_modulate_continuously'
+ 'tests/test_send_recv_dialog_gui.py::TestSendRecvDialog::test_continuous_send_dialog'
+ 'tests/test_spectrogram.py::TestSpectrogram::test_channel_separation_with_negative_frequency'
+
+ )
+ cd "${T}" || die
+ epytest -s --pyargs urh.cythonext "${S}/tests" || die
+}
diff --git a/net-wireless/urh/urh-9999.ebuild b/net-wireless/urh/urh-9999.ebuild
new file mode 100644
index 000000000000..52342b152f3a
--- /dev/null
+++ b/net-wireless/urh/urh-9999.ebuild
@@ -0,0 +1,81 @@
+# Copyright 1999-2026 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=8
+
+PYTHON_COMPAT=( python3_{13..14} )
+DISTUTILS_EXT=1
+DISTUTILS_USE_PEP517=setuptools
+inherit distutils-r1 virtualx
+
+DESCRIPTION="Universal Radio Hacker: investigate wireless protocols like a boss"
+HOMEPAGE="https://github.com/jopohl/urh"
+
+if [ "${PV}" = "9999" ]; then
+ inherit git-r3
+ EGIT_REPO_URI="https://github.com/jopohl/urh.git"
+else
+ SRC_URI="https://github.com/jopohl/${PN}/archive/v${PV}.tar.gz -> ${P}.gh.tar.gz"
+ KEYWORDS="~amd64 ~x86"
+fi
+
+LICENSE="Apache-2.0"
+SLOT="0"
+IUSE="airspy audio bladerf hackrf limesdr plutosdr rtlsdr sdrplay uhd"
+
+DEPEND="${PYTHON_DEPS}
+ net-wireless/gnuradio[zeromq]
+ dev-python/numpy[${PYTHON_USEDEP}]
+ dev-python/psutil[${PYTHON_USEDEP}]
+ dev-python/pyzmq[${PYTHON_USEDEP}]
+ dev-python/cython[${PYTHON_USEDEP}]
+ airspy? ( net-wireless/airspy:= )
+ audio? ( dev-python/pyaudio[${PYTHON_USEDEP}] )
+ bladerf? ( net-wireless/bladerf:= )
+ hackrf? ( net-libs/libhackrf:= )
+ limesdr? ( net-wireless/limesuite )
+ plutosdr? ( net-libs/libiio:= )
+ rtlsdr? ( net-wireless/rtl-sdr:= )
+ sdrplay? ( <net-wireless/sdrplay-3.0.0:= )
+ uhd? ( net-wireless/uhd:= )"
+RDEPEND="${DEPEND}
+ dev-python/pyqt6[${PYTHON_USEDEP},testlib]
+ net-wireless/gr-osmosdr"
+
+distutils_enable_tests pytest
+
+PATCHES=( "${FILESDIR}/${PN}-2.9.7-no-numpy-setup.patch" )
+
+python_configure_all() {
+ DISTUTILS_ARGS=(
+ $(use_with airspy)
+ $(use_with bladerf)
+ $(use_with hackrf)
+ $(use_with limesdr)
+ $(use_with plutosdr)
+ $(use_with rtlsdr)
+ $(use_with sdrplay)
+ $(use_with uhd usrp)
+ )
+}
+
+src_test() {
+ virtx distutils-r1_src_test
+}
+
+python_test() {
+ # Why are these disabled?
+ # import errors AND hangs forever after 'tests/test_spectrogram.py::TestSpectrogram::test_cancel_filtering'
+ # import errors 'tests/test_continuous_modulator.py::TestContinuousModulator::test_modulate_continuously'
+ # import errors 'tests/test_send_recv_dialog_gui.py::TestSendRecvDialog::test_continuous_send_dialog'
+ # import errors 'tests/test_spectrogram.py::TestSpectrogram::test_channel_separation_with_negative_frequency'
+ local EPYTEST_DESELECT=(
+ 'tests/test_spectrogram.py::TestSpectrogram::test_cancel_filtering'
+ 'tests/test_continuous_modulator.py::TestContinuousModulator::test_modulate_continuously'
+ 'tests/test_send_recv_dialog_gui.py::TestSendRecvDialog::test_continuous_send_dialog'
+ 'tests/test_spectrogram.py::TestSpectrogram::test_channel_separation_with_negative_frequency'
+
+ )
+ cd "${T}" || die
+ epytest -s --pyargs urh.cythonext "${S}/tests" || die
+}
diff --git a/net-wireless/wavemon/Manifest b/net-wireless/wavemon/Manifest
new file mode 100644
index 000000000000..082d329db975
--- /dev/null
+++ b/net-wireless/wavemon/Manifest
@@ -0,0 +1,2 @@
+DIST wavemon-0.9.5.tar.gz 225492 BLAKE2B 492ac0f16da1400b4e9e06af43b1ec8b96303bd33a62f355820975db61efc3b0603e1e3f97be05a69597b9546aeb95e3a2655cb0c45c90aa9f2bd765a06b8884 SHA512 c8abd0d0a2971b937eb2ea51470ec30c9a0e656161a7884cae257a226ef39e0daa8399ef349bbcb370b91a28b6ad0f42acb831524e1f7f5ce43ec244adcb7767
+DIST wavemon-0.9.6.tar.gz 227546 BLAKE2B 08eeeca4638de0a2964b1dc68a9e530da7e6f1c875b3c29ace77b95dba0511ae3c1f1c2c00ad4403b9ad10e805d386b4acc0236247c2bb4af3ca7970ca7f8437 SHA512 1a96c8283678daf5c09cc60b5e264047c8f1075b1f43d95376550ccb016b75b2abaf00cd9b67873833d5834e0f86fa59e23186eaf9cda6040c66ebb913f8a729
diff --git a/net-wireless/wavemon/metadata.xml b/net-wireless/wavemon/metadata.xml
new file mode 100644
index 000000000000..8a41cff3f630
--- /dev/null
+++ b/net-wireless/wavemon/metadata.xml
@@ -0,0 +1,13 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE pkgmetadata SYSTEM "https://docs.baldeagleos.com/dtd/metadata.dtd">
+<pkgmetadata>
+ <maintainer type="person" proxied="yes">
+ <email>alarig@swordarmor.fr</email>
+ <name>Alarig Le Lay</name>
+ </maintainer>
+ <maintainer type="project" proxied="proxy">
+ <email>proxy-maint@gentoo.org</email>
+ <name>Proxy Maintainers</name>
+ </maintainer>
+ <origin>baldeagleos-repo</origin>
+</pkgmetadata>
diff --git a/net-wireless/wavemon/wavemon-0.9.5.ebuild b/net-wireless/wavemon/wavemon-0.9.5.ebuild
new file mode 100644
index 000000000000..2e10cf759dfc
--- /dev/null
+++ b/net-wireless/wavemon/wavemon-0.9.5.ebuild
@@ -0,0 +1,59 @@
+# Copyright 1999-2025 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=8
+
+inherit autotools linux-info
+
+DESCRIPTION="Ncurses based monitor for IEEE 802.11 wireless LAN cards"
+HOMEPAGE="https://github.com/uoaerg/wavemon/"
+SRC_URI="https://github.com/uoaerg/${PN}/archive/v${PV}.tar.gz -> ${P}.tar.gz"
+
+LICENSE="GPL-3"
+SLOT="0"
+KEYWORDS="amd64 arm ~hppa ppc ~sparc x86"
+
+IUSE="caps"
+RDEPEND="
+ dev-libs/libnl:3[utils]
+ sys-libs/ncurses:0=
+ caps? ( sys-libs/libcap )"
+DEPEND="${RDEPEND}
+ virtual/pkgconfig"
+
+DOCS=( README.md )
+
+pkg_pretend() {
+ local CONFIG_CHECK="~CFG80211"
+ check_extra_config
+}
+
+src_prepare() {
+ default
+
+ # Do not install docs to /usr/share
+ sed -i -e '/^install:/s/install-docs//' Makefile.in || die \
+ 'sed on Makefile.in failed'
+
+ # automagic on libcap, discovered in bug #448406
+ use caps || export ac_cv_lib_cap_cap_get_flag=false
+
+ eautoreconf
+}
+
+src_configure () {
+ CFLAGS="${CFLAGS}" econf
+}
+
+src_compile() {
+ unset CFLAGS
+ default
+}
+
+src_install() {
+ default
+
+ # Install man files manually(bug #397807)
+ doman wavemon.1
+ doman wavemonrc.5
+}
diff --git a/net-wireless/wavemon/wavemon-0.9.6.ebuild b/net-wireless/wavemon/wavemon-0.9.6.ebuild
new file mode 100644
index 000000000000..2e10cf759dfc
--- /dev/null
+++ b/net-wireless/wavemon/wavemon-0.9.6.ebuild
@@ -0,0 +1,59 @@
+# Copyright 1999-2025 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=8
+
+inherit autotools linux-info
+
+DESCRIPTION="Ncurses based monitor for IEEE 802.11 wireless LAN cards"
+HOMEPAGE="https://github.com/uoaerg/wavemon/"
+SRC_URI="https://github.com/uoaerg/${PN}/archive/v${PV}.tar.gz -> ${P}.tar.gz"
+
+LICENSE="GPL-3"
+SLOT="0"
+KEYWORDS="amd64 arm ~hppa ppc ~sparc x86"
+
+IUSE="caps"
+RDEPEND="
+ dev-libs/libnl:3[utils]
+ sys-libs/ncurses:0=
+ caps? ( sys-libs/libcap )"
+DEPEND="${RDEPEND}
+ virtual/pkgconfig"
+
+DOCS=( README.md )
+
+pkg_pretend() {
+ local CONFIG_CHECK="~CFG80211"
+ check_extra_config
+}
+
+src_prepare() {
+ default
+
+ # Do not install docs to /usr/share
+ sed -i -e '/^install:/s/install-docs//' Makefile.in || die \
+ 'sed on Makefile.in failed'
+
+ # automagic on libcap, discovered in bug #448406
+ use caps || export ac_cv_lib_cap_cap_get_flag=false
+
+ eautoreconf
+}
+
+src_configure () {
+ CFLAGS="${CFLAGS}" econf
+}
+
+src_compile() {
+ unset CFLAGS
+ default
+}
+
+src_install() {
+ default
+
+ # Install man files manually(bug #397807)
+ doman wavemon.1
+ doman wavemonrc.5
+}
diff --git a/net-wireless/wepattack/Manifest b/net-wireless/wepattack/Manifest
new file mode 100644
index 000000000000..3e21f6c46d3e
--- /dev/null
+++ b/net-wireless/wepattack/Manifest
@@ -0,0 +1 @@
+DIST WepAttack-0.1.3.tar.gz 25063 BLAKE2B 48923fd891a57a61edf5a3c75e84c3194ddad79adf7b588b54f4709cfbbad43537011f5e1a6c303f35cace50835802871113d7815bfcd1b08d167449e5007a0f SHA512 fe8d9843613fc29b7802f699311cb67fe3546a17a279ebc2e150cce155e726270dc937b1c941d9e9287b813febf171fe56053f6b010c4f2021e45e572f91fdf4
diff --git a/net-wireless/wepattack/files/wepattack-0.1.3-filter-mac-address.patch b/net-wireless/wepattack/files/wepattack-0.1.3-filter-mac-address.patch
new file mode 100644
index 000000000000..63ba5f3473bb
--- /dev/null
+++ b/net-wireless/wepattack/files/wepattack-0.1.3-filter-mac-address.patch
@@ -0,0 +1,186 @@
+--- a/src/config.h
++++ b/src/config.h
+@@ -37,7 +37,7 @@
+ #define WEPKEYSTORE (WEPKEYSIZE * WEPKEYS)
+
+ #define DEBUG 0
+-#define VERSION "0.1.3"
++#define VERSION "0.1.3 (Gentoo patched)"
+
+
+ #endif
+--- a/src/log.c
++++ b/src/log.c
+@@ -73,7 +73,7 @@
+ fprintf(fp, "Cracking started: %s", ctime(&start_time));
+ fprintf(fp, "%s\t%s\n", word, in);
+
+- fprintf(fp, "\nBssid\tKeyNo\tWepKey\tASCII\tEncryption\tElapsed Time");
++ fprintf(fp, "\nBssid\t\t\tKeyNo\tWepKey\t\tASCII\tEncryption\tElapsed Time");
+ fclose(fp);
+ }
+
+@@ -120,7 +120,7 @@
+ fprintf(fp, "\n");
+ print_hex_array(fp, list->frame.bssid, 6);
+ fprintf(fp, "\t%d", list->frame.key);
+- fprintf(fp, "\tnot cracked\t\t%d sec",
++ fprintf(fp, "\tnot cracked\t\t\t\t%d sec",
+ (int)difftime(now, start_time));
+ }
+ list = list->next;
+--- a/src/misc.c
++++ b/src/misc.c
+@@ -40,10 +40,11 @@
+ fprintf(stdout,"WEPATTACK by Dominik Blunk and Alain ");
+ fprintf(stdout,"Girardet - Version %s\n", VERSION);
+ fprintf(stdout,"\nusage: wepattack -f dumpfile [-w wordfile]");
+- fprintf(stdout, " [-m mode] [-n network]\n");
++ fprintf(stdout, " [-m mode] [-b mac_address] [-n network]\n");
+ fprintf(stdout,"-f dumpfile \tnetwork dumpfile to read\n");
+ fprintf(stdout,"\t\t(in PCAP format as TCPDUMP or ETHEREAL uses)\n");
+ fprintf(stdout,"-w wordlist \twordlist to use (default: stdin)\n");
++ fprintf(stdout,"-b mac_address \tfilter the mac address from the dump file\n");
+ fprintf(stdout,"-m mode \trun wepattack in diffente modes (default: all)\n");
+ fprintf(stdout,"\t\tvalues: 64, 128, n64, n128\n");
+ fprintf(stdout,"-n network \tnetwork number to attack\n");
+--- a/src/wepattack.c
++++ b/src/wepattack.c
+@@ -4,6 +4,8 @@
+ * Author: Alain Girardet/Dominik Blunk
+ * Last Modified: 2002-10-24
+ *
++* Send me any suggestions about the patch to kirano_1@hotmail.com
++*
+ * Description: Read guessed passwords from stdin and applies RC4
+ * on sniffed encrypted 802.11 DATA packets
+ *
+@@ -57,6 +59,11 @@
+ // default mode (all modes sequential)
+ static unsigned char use_modes = 0x01;
+
++// to check bssid
++char* BSSID=NULL;
++wlan_packet_list* bssids_list=NULL;
++int is_bssid_set = 0;
++
+ void clean_up();
+
+ //
+@@ -64,7 +71,11 @@
+ //
+ void load_packets(char *infile, int network) {
+
+- int network_count = 0;
++ int network_count = 0;
++ wlan_packet_list* aux;
++ wlan_packet_list* aux_2;
++ wlan_packet_list* aux3;
++ char bssid_aux[18],bssid_aux2[13],bssid_aux3[18],bssid_aux4[13];
+
+ // load networks from file
+ list_packet_to_crack = get_packets(infile);
+@@ -77,17 +88,57 @@
+
+ current_packet = list_packet_to_crack;
+
+- // list all available networks
+- printf("\n\nFounded BSSID:");
+- while (current_packet->next != NULL) {
+- network_count++;
+- printf("\n%d) ", network_count);
+- print_hex_array(stdout, current_packet->frame.bssid, 6);
+- printf("/ Key %d", current_packet->frame.key);
+- current_packet = current_packet->next;
++ //Make another list with provided bssid
++ if (is_bssid_set){
++ for (aux=current_packet; aux!=NULL;aux=aux->next){
++ sprintf(bssid_aux,"%.2X:%.2X:%.2X:%.2X:%.2X:%.2X",aux->frame.bssid[0],aux->frame.bssid[1],aux->frame.bssid[2],aux->frame.bssid[3],aux->frame.bssid[4],aux->frame.bssid[5]);
++ sprintf(bssid_aux2,"%.2X%.2X%.2X%.2X%.2X%.2X",aux->frame.bssid[0],aux->frame.bssid[1],aux->frame.bssid[2],aux->frame.bssid[3],aux->frame.bssid[4],aux->frame.bssid[5]);
++ sprintf(bssid_aux3,"%.2x:%.2x:%.2x:%.2x:%.2x:%.2x",aux->frame.bssid[0],aux->frame.bssid[1],aux->frame.bssid[2],aux->frame.bssid[3],aux->frame.bssid[4],aux->frame.bssid[5]);
++ sprintf(bssid_aux4,"%.2x%.2x%.2x%.2x%.2x%.2x",aux->frame.bssid[0],aux->frame.bssid[1],aux->frame.bssid[2],aux->frame.bssid[3],aux->frame.bssid[4],aux->frame.bssid[5]);
++ if ((strncmp(bssid_aux,BSSID,17) == 0) || (strncmp(bssid_aux2,BSSID,12) == 0) || (strncmp(bssid_aux3,BSSID,17) == 0) || (strncmp(bssid_aux4,BSSID,12) == 0)){
++ aux_2 = malloc(sizeof(wlan_packet_list));
++ memcpy(&aux_2->frame.frameControl, aux->frame.frameControl, 2);
++ memcpy(&aux_2->frame.duration, aux->frame.duration, 2);
++ memcpy(&aux_2->frame.srcAddress, aux->frame.srcAddress, 6);
++ memcpy(&aux_2->frame.dstAddress, aux->frame.dstAddress, 6);
++ memcpy(&aux_2->frame.bssid, aux->frame.bssid, 6);
++ if(aux->frame.address4 > 0) {
++ memcpy(&aux_2->frame.address4, aux->frame.address4, 6);
++ }
++ memcpy(&aux_2->frame.sequenceControl, aux->frame.sequenceControl, 2);
++ memcpy(&aux_2->frame.iv, &aux->frame.iv, 3);
++ aux_2->frame.key=aux->frame.key;
++ memcpy(&aux_2->frame.payload, aux->frame.payload, (aux->framesize)- (aux->frame.limits_payload));
++ if (bssids_list == NULL){
++ aux3 = malloc(sizeof(wlan_packet_list));
++ aux3->next = NULL;
++ bssids_list = aux3;
++ }
++ aux_2->framesize = aux->framesize;
++ aux_2->next = bssids_list;
++ bssids_list = aux_2;
++ }
++ }
++ if (bssids_list != NULL){
++ //we must free the old list
++ delete_list(list_packet_to_crack);
++ list_packet_to_crack = bssids_list;
++ current_packet = list_packet_to_crack;
++ }
++ else printf("\n\nProvided BSSID not found. Cracking all networks");
+ }
++
++ // list all available networks
++ printf("\n\nFounded BSSID:");
++ while (current_packet->next != NULL) {
++ network_count++;
++ printf("\n%d) ", network_count);
++ print_hex_array(stdout, current_packet->frame.bssid, 6);
++ printf("/ Key %d", current_packet->frame.key);
++ current_packet = current_packet->next;
++ }
+
+- if (network > network_count)
++ if (network >= network_count)
+ network = 0;
+
+ // if only one should be attacked, remove the others from the list
+@@ -220,11 +272,15 @@
+
+ // process command line options
+ // program will terminate, if invalid options are passed
+- while((op = getopt(argc, argv, "n:m:f:w:?")) != -1) {
++ while((op = getopt(argc, argv, "n:b:m:f:w:?")) != -1) {
+ switch(op) {
+ case 'n':
+ network_arg = atoi(optarg);
+ break;
++ case 'b':
++ BSSID = optarg;
++ is_bssid_set = 1;
++ break;
+ // arg for packet file to read from
+ case 'f':
+ packet_file = optarg;
+--- a/src/wepattack.h
++++ b/src/wepattack.h
+@@ -38,6 +38,7 @@
+ unsigned char iv[3];
+ unsigned char key;
+ unsigned char payload[2400];
++ int limits_payload;
+ };
+
+ /*
+--- a/src/wepfilter.c
++++ b/src/wepfilter.c
+@@ -104,6 +103,7 @@
+ memcpy(&newframe->frame.key, data+limits.key, 1);
+ newframe->frame.key = newframe->frame.key >> 6;
+ memcpy(&newframe->frame.payload, data+limits.payload, length-limits.payload);
++ newframe->frame.limits_payload = limits.payload;
+ newframe->framesize = length;
+ newframe->next = *head;
+ *head = newframe;
diff --git a/net-wireless/wepattack/files/wepattack-0.1.3-missed-string.h-warnings-fix.patch b/net-wireless/wepattack/files/wepattack-0.1.3-missed-string.h-warnings-fix.patch
new file mode 100644
index 000000000000..b46220d0eff5
--- /dev/null
+++ b/net-wireless/wepattack/files/wepattack-0.1.3-missed-string.h-warnings-fix.patch
@@ -0,0 +1,30 @@
+--- a/src/modes.c
++++ b/src/modes.c
+@@ -20,6 +20,7 @@
+
+ #include <sys/types.h>
+ #include <stdio.h>
++#include <string.h>
+ #include "modes.h"
+ #include "rc4.h"
+ #include "wlan/wlan_compat.h"
+--- a/src/wepattack.c
++++ b/src/wepattack.c
+@@ -32,6 +32,7 @@
+ #include <zlib.h>
+ #include <math.h>
+ #include <signal.h>
++#include <string.h>
+ #include "wepattack.h"
+ #include "wepfilter.h"
+ #include "log.h"
+--- a/src/verify.c
++++ b/src/verify.c
+@@ -19,6 +19,7 @@
+
+ #include <stdio.h>
+ #include <zlib.h>
++#include <string.h> /* memcmp() */
+
+ int verify_crc32(unsigned char *data, int length, unsigned long* crc) {
+
diff --git a/net-wireless/wepattack/files/wepattack-0.1.3-modern-c.patch b/net-wireless/wepattack/files/wepattack-0.1.3-modern-c.patch
new file mode 100644
index 000000000000..f24d44813f39
--- /dev/null
+++ b/net-wireless/wepattack/files/wepattack-0.1.3-modern-c.patch
@@ -0,0 +1,33 @@
+https://bugs.gentoo.org/881007
+--- a/src/log.c
++++ b/src/log.c
+@@ -25,6 +25,7 @@
+ #include "log.h"
+ #include "wepattack.h"
+ #include "config.h"
++#include "misc.h"
+
+ static time_t start_time;
+ char logfile[40];
+--- a/src/misc.c
++++ b/src/misc.c
+@@ -23,6 +23,7 @@
+ #include "wepattack.h"
+ #include "config.h"
+ #include "misc.h"
++#include "log.h"
+
+ double difftime_us(struct timeval *time_start, struct timeval *time_end) {
+
+@@ -87,8 +88,10 @@ d_fprintf (FILE *__restrict __stream,
+ __const char *__restrict __format,...) {
+
+ if (DEBUG) {
+- fprintf(__stream, __format);
++ return fprintf(__stream, __format);
+ }
++
++ return 0;
+ }
+
+ void print_hex_array(FILE* out, unsigned char* data, int length) {
diff --git a/net-wireless/wepattack/files/wepattack-0.1.3-seds.patch b/net-wireless/wepattack/files/wepattack-0.1.3-seds.patch
new file mode 100644
index 000000000000..ceda2344bc49
--- /dev/null
+++ b/net-wireless/wepattack/files/wepattack-0.1.3-seds.patch
@@ -0,0 +1,48 @@
+Transform seds from Makefile into patch. Were:
+ sed -i \
+ -e "/^CFLAGS=/s:=:=${CFLAGS} :" \
+ -e 's:-fno-for-scope::g' \
+ -e "/^CC=/s:gcc:$(tc-getCC):" \
+ -e "/^LD=/s:gcc:$(tc-getCC):" \
+ -e 's:log.o\\:log.o \\:' \
+ src/Makefile || die
+ sed -i \
+ -e "s/wordfile:/-wordlist=/" \
+ run/wepattack_word || die
+https://bugs.gentoo.org/711032
+--- a/run/wepattack_word
++++ b/run/wepattack_word
+@@ -28,7 +28,7 @@
+
+ if test -f $JOHNDIR/john; then
+
+- $JOHNDIR/john -wordfile:$WORDLIST -rules -stdout:13\
++ $JOHNDIR/john --wordlist=$WORDLIST -rules -stdout:13\
+ | wepattack -f $1
+ exit 0;
+ else
+--- a/src/Makefile
++++ b/src/Makefile
+@@ -2,11 +2,10 @@
+ # 15-10-2002 Dominik Blunk and Alain Girardet
+ #
+ #
+-CC=gcc
+-LD=gcc
++LD=${CC}
+ #
+ # CFLAGS
+-CFLAGS=-fno-for-scope -c -D__LINUX_WLAN__ -D__I386__
++CFLAGS += -c -D__LINUX_WLAN__ -D__I386__
+ #
+ #
+ # LDFLAGS
+@@ -21,7 +21,7 @@
+ INSTDIR=/usr/bin
+
+ wepattack: wepattack.o rc4.o wepfilter.o log.o modes.o misc.o verify.o keygen.o
+- $(LD) $(LDFLAGS) -o $@ wepattack.o rc4.o wepfilter.o log.o\
++ $(LD) $(LDFLAGS) -o $@ wepattack.o rc4.o wepfilter.o log.o \
+ modes.o misc.o verify.o keygen.o $(LIBS)
+
+ wepattack.o: wepattack.c wepattack.h
diff --git a/net-wireless/wepattack/files/wepattack-0.1.3-signals.patch b/net-wireless/wepattack/files/wepattack-0.1.3-signals.patch
new file mode 100644
index 000000000000..90b694d08f8b
--- /dev/null
+++ b/net-wireless/wepattack/files/wepattack-0.1.3-signals.patch
@@ -0,0 +1,13 @@
+Fix signature for signal handler
+https://bugs.gentoo.org/944166
+--- a/src/wepattack.c
++++ b/src/wepattack.c
+@@ -216,7 +216,7 @@
+ //
+ // signal handler for ctrl+c
+ //
+-void sigint() {
++void sigint(int) {
+
+ printf("\nAborting... writing result to '%s'\n", logfile);
+
diff --git a/net-wireless/wepattack/files/wepattack.conf b/net-wireless/wepattack/files/wepattack.conf
new file mode 100644
index 000000000000..2eb627da06c5
--- /dev/null
+++ b/net-wireless/wepattack/files/wepattack.conf
@@ -0,0 +1,9 @@
+# /etc/wepattack.conf
+#
+# Configuration for WEPATTACK
+# Dominik Blunk and Alain Girardet and Christoph Brill
+# 08-06-2005
+#
+
+JOHNDIR=/usr/sbin
+WORDLIST=/usr/share/john/password.lst
diff --git a/net-wireless/wepattack/metadata.xml b/net-wireless/wepattack/metadata.xml
new file mode 100644
index 000000000000..c312ba647707
--- /dev/null
+++ b/net-wireless/wepattack/metadata.xml
@@ -0,0 +1,19 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE pkgmetadata SYSTEM "https://docs.baldeagleos.com/dtd/metadata.dtd">
+<pkgmetadata>
+ <maintainer type="project">
+ <email>netmon@gentoo.org</email>
+ <name>Gentoo network monitoring and analysis project</name>
+ </maintainer>
+ <longdescription lang="en">
+ WepAttack is a WLAN open source Linux tool for breaking 802.11 WEP keys.
+ This tool is based on an active dictionary attack that tests millions of
+ words to find the right key. Only one packet is required to start an
+ attack.
+ </longdescription>
+ <use>
+ <flag name="john">Build with <pkg>app-crypt/johntheripper</pkg>
+ support</flag>
+ </use>
+ <origin>baldeagleos-repo</origin>
+</pkgmetadata>
diff --git a/net-wireless/wepattack/wepattack-0.1.3-r6.ebuild b/net-wireless/wepattack/wepattack-0.1.3-r6.ebuild
new file mode 100644
index 000000000000..d94fa0b53c71
--- /dev/null
+++ b/net-wireless/wepattack/wepattack-0.1.3-r6.ebuild
@@ -0,0 +1,69 @@
+# Copyright 1999-2025 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=8
+
+inherit toolchain-funcs
+
+MY_P="WepAttack-${PV}"
+DESCRIPTION="WLAN tool for breaking 802.11 WEP keys"
+HOMEPAGE="http://wepattack.sourceforge.net/"
+SRC_URI="https://downloads.sourceforge.net/wepattack/${MY_P}.tar.gz"
+S="${WORKDIR}/${MY_P}"
+
+LICENSE="GPL-2"
+SLOT="0"
+KEYWORDS="amd64 x86"
+IUSE="john"
+
+DEPEND="
+ dev-libs/openssl:=
+ net-libs/libpcap
+ virtual/zlib:=
+"
+RDEPEND="
+ ${DEPEND}
+ john? (
+ || (
+ app-crypt/johntheripper
+ app-crypt/johntheripper-jumbo
+ )
+ )
+"
+
+PATCHES=(
+ "${FILESDIR}"/${P}-filter-mac-address.patch
+ "${FILESDIR}"/${P}-missed-string.h-warnings-fix.patch
+ "${FILESDIR}"/${P}-modern-c.patch
+)
+
+src_prepare() {
+ default
+
+ chmod +x src/wlan || die
+ sed -i \
+ -e "/^CFLAGS=/s:=:=${CFLAGS} :" \
+ -e 's:-fno-for-scope::g' \
+ -e "/^CC=/s:gcc:$(tc-getCC):" \
+ -e "/^LD=/s:gcc:$(tc-getCC):" \
+ -e 's:log.o\\:log.o \\:' \
+ src/Makefile || die
+ sed -i \
+ -e "s/wordfile:/-wordlist=/" \
+ run/wepattack_word || die
+}
+
+src_compile() {
+ emake -C src
+}
+
+src_install() {
+ dodoc README
+ dobin src/wepattack
+
+ if use john; then
+ dosbin run/wepattack_{inc,word}
+ insinto /etc
+ doins "${FILESDIR}"/wepattack.conf
+ fi
+}
diff --git a/net-wireless/wepattack/wepattack-0.1.3-r7.ebuild b/net-wireless/wepattack/wepattack-0.1.3-r7.ebuild
new file mode 100644
index 000000000000..c858bceb2fbb
--- /dev/null
+++ b/net-wireless/wepattack/wepattack-0.1.3-r7.ebuild
@@ -0,0 +1,60 @@
+# Copyright 1999-2025 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=8
+
+inherit toolchain-funcs
+
+MY_P="WepAttack-${PV}"
+DESCRIPTION="WLAN tool for breaking 802.11 WEP keys"
+HOMEPAGE="https://wepattack.sourceforge.net/"
+SRC_URI="https://downloads.sourceforge.net/wepattack/${MY_P}.tar.gz"
+S="${WORKDIR}/${MY_P}"
+
+LICENSE="GPL-2"
+SLOT="0"
+KEYWORDS="amd64 x86"
+IUSE="john"
+
+DEPEND="
+ dev-libs/openssl:=
+ net-libs/libpcap
+ virtual/zlib:=
+"
+RDEPEND="
+ ${DEPEND}
+ john? (
+ || (
+ app-crypt/johntheripper
+ app-crypt/johntheripper-jumbo
+ )
+ )
+"
+
+PATCHES=(
+ "${FILESDIR}"/${P}-filter-mac-address.patch
+ "${FILESDIR}"/${P}-missed-string.h-warnings-fix.patch
+ "${FILESDIR}"/${P}-modern-c.patch
+ "${FILESDIR}"/${P}-seds.patch
+ "${FILESDIR}"/${P}-signals.patch
+)
+
+src_compile() {
+ tc-export CC
+ emake -C src
+}
+
+src_test() {
+ src/wepattack || die "Program can't start"
+}
+
+src_install() {
+ dodoc README
+ dobin src/wepattack
+
+ if use john; then
+ dosbin run/wepattack_{inc,word}
+ insinto /etc
+ doins "${FILESDIR}"/wepattack.conf
+ fi
+}
diff --git a/net-wireless/wepdecrypt/Manifest b/net-wireless/wepdecrypt/Manifest
new file mode 100644
index 000000000000..d91ee7e656db
--- /dev/null
+++ b/net-wireless/wepdecrypt/Manifest
@@ -0,0 +1 @@
+DIST wepdecrypt-0.8.tar.gz 90260 BLAKE2B b5f2474ce86b376d77275fa39a59cf4e524221e8eca816dd153c55e3283793ad62257010acb380273dfc391a9e2bc04eeaee53a9a1dc80add3431e763cc6f07a SHA512 68278e44055354eaf85640fdefc8d97a1155e6f022ed3d708db7d32e0fe8a8306a34fd80aae81eb9aa3ef51a069f8fe5ef060847163774184d4181c62853300f
diff --git a/net-wireless/wepdecrypt/files/wepdecrypt-0.8-buffer.patch b/net-wireless/wepdecrypt/files/wepdecrypt-0.8-buffer.patch
new file mode 100644
index 000000000000..097979158af7
--- /dev/null
+++ b/net-wireless/wepdecrypt/files/wepdecrypt-0.8-buffer.patch
@@ -0,0 +1,11 @@
+--- a/src/wepclient.c
++++ b/src/wepclient.c
+@@ -75,7 +75,7 @@
+ int server_connection(unsigned char * server_host, int port, char * packet_file, unsigned char * init_key, unsigned char * end_key, unsigned char * decrypted_key, unsigned char * bssid, unsigned char * mode ,int option){
+ int sd, read_bytes, write_bytes, i, fd;
+ char file[11]="local.dump";
+- unsigned char buffer[149], digest[16];
++ unsigned char buffer[150], digest[16];
+ struct sockaddr_in dest;
+ struct in_addr *host_ip;
+ struct hostent *host;
diff --git a/net-wireless/wepdecrypt/files/wepdecrypt-0.8-build.patch b/net-wireless/wepdecrypt/files/wepdecrypt-0.8-build.patch
new file mode 100644
index 000000000000..fb38d95355ee
--- /dev/null
+++ b/net-wireless/wepdecrypt/files/wepdecrypt-0.8-build.patch
@@ -0,0 +1,19 @@
+--- a/src/Makefile
++++ b/src/Makefile
+@@ -6,15 +6,12 @@ include ../config.mak
+ wepdecrypt: wepdecrypt.o rc4.o wepfilter.o log.o modes.o misc.o verify.o keygen.o localkeygen.o wepserver.o wepclient.o md5_digest.o
+ $(LD) $(LDFLAGS) -o $@ wepdecrypt.o rc4.o wepfilter.o log.o \
+ modes.o misc.o md5_digest.o wepserver.o wepclient.o verify.o keygen.o localkeygen.o $(LIBS)
+- @if [ -f wepdecrypt.exe ]; then strip.exe wepdecrypt.exe; echo "strip.exe wepdecrypt.exe"; else strip wepdecrypt; echo "strip wepdecrypt"; fi
+
+ gwepdecrypt: gwepdecrypt.cpp
+ $(FLTK) --compile gwepdecrypt.cpp
+- @if [ -f gwepdecrypt.exe ]; then strip.exe gwepdecrypt.exe; echo "strip.exe gwepdecrypt.exe"; else strip gwepdecrypt; echo "strip gwepdecrypt"; fi
+
+ wkeygen: wkeygen.c
+- $(LD) $(LDFLAGS) $(CFLAGS) $(LIBS) -o $@ wkeygen.c
+- @if [ -f wkeygen.exe ]; then strip wkeygen.exe; echo "strip wkeygen.exe"; else strip wkeygen; echo "strip wkeygen"; fi
++ $(LD) $(LDFLAGS) $(CFLAGS) -o $@ wkeygen.c $(LIBS)
+
+ wepdecrypt.o: wepdecrypt.c wepdecrypt.h
+ $(CC) $(CFLAGS) -c -o $@ wepdecrypt.c
diff --git a/net-wireless/wepdecrypt/files/wepdecrypt-0.8-dyn.patch b/net-wireless/wepdecrypt/files/wepdecrypt-0.8-dyn.patch
new file mode 100644
index 000000000000..fab8fdf75e57
--- /dev/null
+++ b/net-wireless/wepdecrypt/files/wepdecrypt-0.8-dyn.patch
@@ -0,0 +1,11 @@
+--- a/src/Makefile
++++ b/src/Makefile
+@@ -8,7 +8,7 @@ wepdecrypt: wepdecrypt.o rc4.o wepfilter.o log.o modes.o misc.o verify.o keygen
+ modes.o misc.o md5_digest.o wepserver.o wepclient.o verify.o keygen.o localkeygen.o $(LIBS)
+
+ gwepdecrypt: gwepdecrypt.cpp
+- $(FLTK) --compile gwepdecrypt.cpp
++ $(CXX) $(LDFLAGS) $(CFLAGS) -I. -o $@ gwepdecrypt.cpp $(shell fltk-config --cflags --ldflags) $(LIBS)
+
+ wkeygen: wkeygen.c
+ $(LD) $(LDFLAGS) $(CFLAGS) -o $@ wkeygen.c $(LIBS)
diff --git a/net-wireless/wepdecrypt/files/wepdecrypt-0.8-fltk.patch b/net-wireless/wepdecrypt/files/wepdecrypt-0.8-fltk.patch
new file mode 100644
index 000000000000..df2aa8d27bdc
--- /dev/null
+++ b/net-wireless/wepdecrypt/files/wepdecrypt-0.8-fltk.patch
@@ -0,0 +1,11 @@
+--- a/configure
++++ b/configure
+@@ -2915,7 +2915,7 @@ fi
+ FIELD2=`$FLTK_CONFIG --version | awk -F . '{print $2}'`;
+ FIELD3=`$FLTK_CONFIG --version | awk -F . '{print $3}'`;
+
+- if test $FIELD1 -le 1 -a $FIELD3 -lt 6; then
++ if test $FIELD1 -le 1 -a $FIELD2 -lt 1; then
+ echo -e "\nconfigure: error: fltk-version must be 1.1.6 or greater!\n"; exit -1;
+ fi
+ if test $FIELD1 -lt 1; then
diff --git a/net-wireless/wepdecrypt/files/wepdecrypt-0.8-fno-common.patch b/net-wireless/wepdecrypt/files/wepdecrypt-0.8-fno-common.patch
new file mode 100644
index 000000000000..dd689b18d772
--- /dev/null
+++ b/net-wireless/wepdecrypt/files/wepdecrypt-0.8-fno-common.patch
@@ -0,0 +1,12 @@
+https://bugs.gentoo.org/707456
+--- a/src/wepfilter.c
++++ b/src/wepfilter.c
+@@ -30,7 +30,7 @@
+ #include "config.h"
+ #include "misc.h"
+
+-int server_mode;
++extern int server_mode;
+ static int capture_successfull = 0;
+ static wlan_packet_list* head = NULL;
+
diff --git a/net-wireless/wepdecrypt/metadata.xml b/net-wireless/wepdecrypt/metadata.xml
new file mode 100644
index 000000000000..5f33304011d5
--- /dev/null
+++ b/net-wireless/wepdecrypt/metadata.xml
@@ -0,0 +1,5 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE pkgmetadata SYSTEM "https://docs.baldeagleos.com/dtd/metadata.dtd">
+<pkgmetadata>
+ <origin>baldeagleos-repo</origin>
+</pkgmetadata>
diff --git a/net-wireless/wepdecrypt/wepdecrypt-0.8-r3.ebuild b/net-wireless/wepdecrypt/wepdecrypt-0.8-r3.ebuild
new file mode 100644
index 000000000000..c0065399a0c2
--- /dev/null
+++ b/net-wireless/wepdecrypt/wepdecrypt-0.8-r3.ebuild
@@ -0,0 +1,47 @@
+# Copyright 1999-2025 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=7
+
+DESCRIPTION="Enhanced version of WepAttack a tool for breaking 802.11 WEP keys"
+HOMEPAGE="http://wepdecrypt.sourceforge.net/"
+SRC_URI="https://downloads.sourceforge.net/wepdecrypt/${P}.tar.gz"
+
+LICENSE="GPL-2"
+SLOT="0"
+KEYWORDS="~amd64 ~ppc ~x86"
+IUSE="X"
+
+RDEPEND="
+ dev-libs/openssl:=
+ net-libs/libpcap
+ virtual/zlib:=
+ X? ( x11-libs/fltk:1= )"
+DEPEND="${RDEPEND}"
+
+PATCHES=(
+ "${FILESDIR}"/${P}-build.patch
+ "${FILESDIR}"/${P}-fltk.patch
+ "${FILESDIR}"/${P}-buffer.patch # bug#340148.
+ "${FILESDIR}"/${P}-dyn.patch
+ "${FILESDIR}"/${P}-fno-common.patch
+)
+
+src_prepare() {
+ default
+
+ sed -i \
+ -e 's/make/$(MAKE)/g' \
+ -e 's/wepdecrypt-$(VERSION)/${PF}/g' Makefile || die
+}
+
+src_configure() {
+ econf \
+ $(use X || echo --disable-gui) \
+ --infodir=/usr/share/doc/${PF}
+}
+
+src_install() {
+ default
+ docompress -x /usr/share/man/man1
+}
diff --git a/net-wireless/wireless-regdb/Manifest b/net-wireless/wireless-regdb/Manifest
new file mode 100644
index 000000000000..35c6861a598c
--- /dev/null
+++ b/net-wireless/wireless-regdb/Manifest
@@ -0,0 +1,6 @@
+DIST wireless-regdb-2024.05.08.tar.xz 27716 BLAKE2B 223268c6ba9e3f616b28a9317d62ac687cd09c9ff3cc8e0d0827b3a59efa7b3bc64c0c094b70aaceb87cffba7d36d36d550c001d0778238adcf2ac5cbe3f6b93 SHA512 edb562d708be7119e80bb48d7520c11e409b81178168f9c6873ea97a2e4d9277d02d3b72b1af9f0302ba2e252d94d14c4468ee4cc1a6bb186a17d74c57d7594d
+DIST wireless-regdb-2025.02.20.tar.xz 30900 BLAKE2B ae089e9bfb92c0643f537aed8aab7907a0179aedc0a0356f9ec483063d677d999839cffa8e6574e50d7fff82f5824466d4a23ca780bbe386c4c4be6b975a2bd6 SHA512 d7ccdd10d7258ef5470f90e0bb9aacd80f55e315e9703e2d765cdc09cdbf72179fe0a7ca1340b6338bc25c8d423401d1666a1243a4a118f03eafdb4b8c4a921b
+DIST wireless-regdb-2025.07.10.tar.xz 31192 BLAKE2B b5b38d03fd5dccddabb23580e982b0deec7641a91a641388136ae25bc965dbe352615d8115bd6ba216223f51bad35efdc12d7cf7760489d1a1e65b7b76dbaff3 SHA512 9ec9c2cc4d7fd17b1b768ad081011ebf471ec69c996106f46187a398267267795b0d1839bd403bf8f7822db6861c4f46a4139a60b0e0a84263194cfacddf810c
+DIST wireless-regdb-2025.10.07.tar.xz 31468 BLAKE2B 655c637ca2a9269b6b17bc374c7d09dcbbc5228aaefcbe60cd0c24dc78d778a56848a338f830cac8deed7930100a0fffcfdc2d694513c4afa5d537ccf9397f97 SHA512 9635ba89a45742449a60dd776f1d4b062a11bf11ee5011a7141382042ed24065df8214d9b244644c27bdfe4fa46d18fa467b8674392f28ba68b86cd8994cecd4
+DIST wireless-regdb-2026.02.04.tar.xz 31656 BLAKE2B 51b528effd27bef82337babc911e85586a105efce758264d52065b8b2137f08a803e0962ef07a600fec36fd110eecacd1b88d2569aa73ad2a289702164d88581 SHA512 5c4da6cd94a3f0d3b1265e3aee493c04cc7c3675fedec2982af34a60f6837faf78c2aa112a740a5cb60eeb830043c9ef0c27247c33c686052ab8812c7232f6c9
+DIST wireless-regdb-2026.03.18.tar.xz 31760 BLAKE2B 2d4f1154be1b41911a62ffbcf10b42529282ce1964897af50aa49ac49b17f06a8a9583b5a42d1b8875a12df04e436679c6af3846ea2cc3c9df7fc29daec7f1ce SHA512 e5b1cc0f8696205e977c9a84ac835994f93dbadeb30725f0a3976cd5a734db44c9df7f98c6acef937814ebc6804312dc516d6bff12e3cbf02814bddea8b2588e
diff --git a/net-wireless/wireless-regdb/metadata.xml b/net-wireless/wireless-regdb/metadata.xml
new file mode 100644
index 000000000000..bc9da0a0100d
--- /dev/null
+++ b/net-wireless/wireless-regdb/metadata.xml
@@ -0,0 +1,10 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE pkgmetadata SYSTEM "https://docs.baldeagleos.com/dtd/metadata.dtd">
+<pkgmetadata>
+ <maintainer type="person">
+ <email>zerochaos@gentoo.org</email>
+ <name>Rick Farina</name>
+ </maintainer>
+ <stabilize-allarches />
+ <origin>baldeagleos-repo</origin>
+</pkgmetadata>
diff --git a/net-wireless/wireless-regdb/wireless-regdb-20240508.ebuild b/net-wireless/wireless-regdb/wireless-regdb-20240508.ebuild
new file mode 100644
index 000000000000..2bd1da600aec
--- /dev/null
+++ b/net-wireless/wireless-regdb/wireless-regdb-20240508.ebuild
@@ -0,0 +1,61 @@
+# Copyright 1999-2025 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=8
+
+inherit linux-info
+
+MY_P="wireless-regdb-${PV:0:4}.${PV:4:2}.${PV:6:2}"
+DESCRIPTION="Wireless Regulatory database for Linux"
+HOMEPAGE="https://wireless.wiki.kernel.org/en/developers/regulatory/wireless-regdb"
+SRC_URI="https://mirrors.edge.kernel.org/pub/software/network/${PN}/${MY_P}.tar.xz"
+S="${WORKDIR}/${MY_P}"
+
+LICENSE="ISC"
+SLOT="0"
+KEYWORDS="~alpha amd64 arm arm64 ~hppa ~loong ~mips ppc ppc64 ~riscv ~sparc x86"
+REQUIRED_USE="kernel_linux"
+
+pkg_pretend() {
+ if kernel_is -ge 4 15; then
+ if linux_config_exists; then
+ if linux_chkconfig_builtin CFG80211 &&
+ [[ $(linux_chkconfig_string EXTRA_FIRMWARE) != *regulatory.db* ]]; then
+ ewarn "REGULATORY DOMAIN PROBLEM:"
+ ewarn " With CONFIG_CFG80211=y (built-in), the driver(s) won't be able to load regulatory.db from"
+ ewarn " /lib/firmware, resulting in broken regulatory domain support. Please set CONFIG_CFG80211=m"
+ ewarn " or add regulatory.db and regulatory.db.p7s to CONFIG_EXTRA_FIRMWARE."
+ fi
+ if ! linux_chkconfig_present CFG80211; then
+ ewarn "REGULATORY DOMAIN PROBLEM:"
+ ewarn " With CONFIG_CFG80211 unset, the driver(s) won't be able to load the regulatory.db from"
+ ewarn " /lib/firmware, resulting in broken regulatory domain support. Please set CONFIG_CFG80211=m."
+ fi
+ if linux_chkconfig_present EXPERT && linux_chkconfig_present CFG80211_CRDA_SUPPORT; then
+ ewarn "You can safely disable CFG80211_CRDA_SUPPORT"
+ fi
+ fi
+ else
+ CONFIG_CHECK="~CFG80211_CRDA_SUPPORT"
+ WARNING_CFG80211_CRDA_SUPPORT="REGULATORY DOMAIN PROBLEM: \
+please enable CFG80211_CRDA_SUPPORT for proper regulatory domain support"
+ fi
+
+ check_extra_config
+}
+
+src_compile() {
+ einfo "Recompiling regulatory database(s) from db.txt would break signature verification."
+ einfo "Installing unmodified binary version."
+}
+
+src_install() {
+ # install the files the kernel needs unconditionally,
+ # they are small and kernels get upgraded
+ insinto /lib/firmware
+ doins regulatory.db regulatory.db.p7s
+
+ # regulatory.db.5 is a reference to regulatory.bin.5 so you need both unconditionally
+ doman -i18n= regulatory.db.5 regulatory.bin.5
+ dodoc README db.txt
+}
diff --git a/net-wireless/wireless-regdb/wireless-regdb-20250220.ebuild b/net-wireless/wireless-regdb/wireless-regdb-20250220.ebuild
new file mode 100644
index 000000000000..2bd1da600aec
--- /dev/null
+++ b/net-wireless/wireless-regdb/wireless-regdb-20250220.ebuild
@@ -0,0 +1,61 @@
+# Copyright 1999-2025 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=8
+
+inherit linux-info
+
+MY_P="wireless-regdb-${PV:0:4}.${PV:4:2}.${PV:6:2}"
+DESCRIPTION="Wireless Regulatory database for Linux"
+HOMEPAGE="https://wireless.wiki.kernel.org/en/developers/regulatory/wireless-regdb"
+SRC_URI="https://mirrors.edge.kernel.org/pub/software/network/${PN}/${MY_P}.tar.xz"
+S="${WORKDIR}/${MY_P}"
+
+LICENSE="ISC"
+SLOT="0"
+KEYWORDS="~alpha amd64 arm arm64 ~hppa ~loong ~mips ppc ppc64 ~riscv ~sparc x86"
+REQUIRED_USE="kernel_linux"
+
+pkg_pretend() {
+ if kernel_is -ge 4 15; then
+ if linux_config_exists; then
+ if linux_chkconfig_builtin CFG80211 &&
+ [[ $(linux_chkconfig_string EXTRA_FIRMWARE) != *regulatory.db* ]]; then
+ ewarn "REGULATORY DOMAIN PROBLEM:"
+ ewarn " With CONFIG_CFG80211=y (built-in), the driver(s) won't be able to load regulatory.db from"
+ ewarn " /lib/firmware, resulting in broken regulatory domain support. Please set CONFIG_CFG80211=m"
+ ewarn " or add regulatory.db and regulatory.db.p7s to CONFIG_EXTRA_FIRMWARE."
+ fi
+ if ! linux_chkconfig_present CFG80211; then
+ ewarn "REGULATORY DOMAIN PROBLEM:"
+ ewarn " With CONFIG_CFG80211 unset, the driver(s) won't be able to load the regulatory.db from"
+ ewarn " /lib/firmware, resulting in broken regulatory domain support. Please set CONFIG_CFG80211=m."
+ fi
+ if linux_chkconfig_present EXPERT && linux_chkconfig_present CFG80211_CRDA_SUPPORT; then
+ ewarn "You can safely disable CFG80211_CRDA_SUPPORT"
+ fi
+ fi
+ else
+ CONFIG_CHECK="~CFG80211_CRDA_SUPPORT"
+ WARNING_CFG80211_CRDA_SUPPORT="REGULATORY DOMAIN PROBLEM: \
+please enable CFG80211_CRDA_SUPPORT for proper regulatory domain support"
+ fi
+
+ check_extra_config
+}
+
+src_compile() {
+ einfo "Recompiling regulatory database(s) from db.txt would break signature verification."
+ einfo "Installing unmodified binary version."
+}
+
+src_install() {
+ # install the files the kernel needs unconditionally,
+ # they are small and kernels get upgraded
+ insinto /lib/firmware
+ doins regulatory.db regulatory.db.p7s
+
+ # regulatory.db.5 is a reference to regulatory.bin.5 so you need both unconditionally
+ doman -i18n= regulatory.db.5 regulatory.bin.5
+ dodoc README db.txt
+}
diff --git a/net-wireless/wireless-regdb/wireless-regdb-20250710.ebuild b/net-wireless/wireless-regdb/wireless-regdb-20250710.ebuild
new file mode 100644
index 000000000000..4ed4f4cd58a5
--- /dev/null
+++ b/net-wireless/wireless-regdb/wireless-regdb-20250710.ebuild
@@ -0,0 +1,62 @@
+# Copyright 1999-2025 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=8
+
+inherit linux-info
+
+MY_P="wireless-regdb-${PV:0:4}.${PV:4:2}.${PV:6:2}"
+DESCRIPTION="Wireless Regulatory database for Linux"
+HOMEPAGE="https://wireless.wiki.kernel.org/en/developers/regulatory/wireless-regdb"
+SRC_URI="https://mirrors.edge.kernel.org/pub/software/network/${PN}/${MY_P}.tar.xz"
+S="${WORKDIR}/${MY_P}"
+
+LICENSE="ISC"
+SLOT="0"
+KEYWORDS="~alpha ~amd64 ~arm ~arm64 ~hppa ~loong ~mips ~ppc ~ppc64 ~riscv ~sparc ~x86"
+REQUIRED_USE="kernel_linux"
+
+pkg_pretend() {
+ if kernel_is -ge 4 15; then
+ if linux_config_exists; then
+ if linux_chkconfig_builtin CFG80211 &&
+ [[ $(linux_chkconfig_string EXTRA_FIRMWARE) != *regulatory.db* ]]; then
+ ewarn "REGULATORY DOMAIN PROBLEM:"
+ ewarn " With CONFIG_CFG80211=y (built-in), the driver(s) won't be able to load regulatory.db from"
+ ewarn " /lib/firmware, resulting in broken regulatory domain support. Please set CONFIG_CFG80211=m"
+ ewarn " or add regulatory.db and regulatory.db.p7s to CONFIG_EXTRA_FIRMWARE."
+ fi
+ if ! linux_chkconfig_present CFG80211; then
+ ewarn "REGULATORY DOMAIN PROBLEM:"
+ ewarn " With CONFIG_CFG80211 unset, the driver(s) won't be able to load the regulatory.db from"
+ ewarn " /lib/firmware, resulting in broken regulatory domain support. Please set CONFIG_CFG80211=m."
+ fi
+ if linux_chkconfig_present EXPERT && linux_chkconfig_present CFG80211_CRDA_SUPPORT; then
+ ewarn "You can safely disable CFG80211_CRDA_SUPPORT"
+ fi
+ fi
+ else
+ CONFIG_CHECK="~CFG80211_CRDA_SUPPORT"
+ WARNING_CFG80211_CRDA_SUPPORT="REGULATORY DOMAIN PROBLEM: \
+please enable CFG80211_CRDA_SUPPORT for proper regulatory domain support"
+ fi
+
+ check_extra_config
+}
+
+src_compile() {
+ einfo "Recompiling regulatory database(s) from db.txt would break signature verification."
+ einfo "Installing unmodified binary version."
+}
+
+src_install() {
+ # install the files the kernel needs unconditionally,
+ # they are small and kernels get upgraded
+ insinto /lib/firmware
+ doins regulatory.db regulatory.db.p7s
+
+ echo '.so man5/regulatory.bin.5' > regulatory.db.5 || die
+ # without -i18n= workaround regulatory.db.5 is installed as db/man5/regulatory.5
+ doman -i18n= regulatory.db.5 regulatory.bin.5
+ dodoc README db.txt
+}
diff --git a/net-wireless/wireless-regdb/wireless-regdb-20251007.ebuild b/net-wireless/wireless-regdb/wireless-regdb-20251007.ebuild
new file mode 100644
index 000000000000..c41a858e383f
--- /dev/null
+++ b/net-wireless/wireless-regdb/wireless-regdb-20251007.ebuild
@@ -0,0 +1,62 @@
+# Copyright 1999-2026 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=8
+
+inherit linux-info
+
+MY_P="wireless-regdb-${PV:0:4}.${PV:4:2}.${PV:6:2}"
+DESCRIPTION="Wireless Regulatory database for Linux"
+HOMEPAGE="https://wireless.wiki.kernel.org/en/developers/regulatory/wireless-regdb"
+SRC_URI="https://mirrors.edge.kernel.org/pub/software/network/${PN}/${MY_P}.tar.xz"
+S="${WORKDIR}/${MY_P}"
+
+LICENSE="ISC"
+SLOT="0"
+KEYWORDS="~alpha amd64 arm arm64 ~hppa ~loong ~mips ppc ppc64 ~riscv ~sparc x86"
+REQUIRED_USE="kernel_linux"
+
+pkg_pretend() {
+ if kernel_is -ge 4 15; then
+ if linux_config_exists; then
+ if linux_chkconfig_builtin CFG80211 &&
+ [[ $(linux_chkconfig_string EXTRA_FIRMWARE) != *regulatory.db* ]]; then
+ ewarn "REGULATORY DOMAIN PROBLEM:"
+ ewarn " With CONFIG_CFG80211=y (built-in), the driver(s) won't be able to load regulatory.db from"
+ ewarn " /lib/firmware, resulting in broken regulatory domain support. Please set CONFIG_CFG80211=m"
+ ewarn " or add regulatory.db and regulatory.db.p7s to CONFIG_EXTRA_FIRMWARE."
+ fi
+ if ! linux_chkconfig_present CFG80211; then
+ ewarn "REGULATORY DOMAIN PROBLEM:"
+ ewarn " With CONFIG_CFG80211 unset, the driver(s) won't be able to load the regulatory.db from"
+ ewarn " /lib/firmware, resulting in broken regulatory domain support. Please set CONFIG_CFG80211=m."
+ fi
+ if linux_chkconfig_present EXPERT && linux_chkconfig_present CFG80211_CRDA_SUPPORT; then
+ ewarn "You can safely disable CFG80211_CRDA_SUPPORT"
+ fi
+ fi
+ else
+ CONFIG_CHECK="~CFG80211_CRDA_SUPPORT"
+ WARNING_CFG80211_CRDA_SUPPORT="REGULATORY DOMAIN PROBLEM: \
+please enable CFG80211_CRDA_SUPPORT for proper regulatory domain support"
+ fi
+
+ check_extra_config
+}
+
+src_compile() {
+ einfo "Recompiling regulatory database(s) from db.txt would break signature verification."
+ einfo "Installing unmodified binary version."
+}
+
+src_install() {
+ # install the files the kernel needs unconditionally,
+ # they are small and kernels get upgraded
+ insinto /lib/firmware
+ doins regulatory.db regulatory.db.p7s
+
+ echo '.so man5/regulatory.bin.5' > regulatory.db.5 || die
+ # without -i18n= workaround regulatory.db.5 is installed as db/man5/regulatory.5
+ doman -i18n= regulatory.db.5 regulatory.bin.5
+ dodoc README db.txt
+}
diff --git a/net-wireless/wireless-regdb/wireless-regdb-20260204.ebuild b/net-wireless/wireless-regdb/wireless-regdb-20260204.ebuild
new file mode 100644
index 000000000000..6ac4a2991c22
--- /dev/null
+++ b/net-wireless/wireless-regdb/wireless-regdb-20260204.ebuild
@@ -0,0 +1,62 @@
+# Copyright 1999-2026 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=8
+
+inherit linux-info
+
+MY_P="wireless-regdb-${PV:0:4}.${PV:4:2}.${PV:6:2}"
+DESCRIPTION="Wireless Regulatory database for Linux"
+HOMEPAGE="https://wireless.docs.kernel.org/en/latest/en/developers/regulatory/wireless-regdb.html"
+SRC_URI="https://mirrors.edge.kernel.org/pub/software/network/${PN}/${MY_P}.tar.xz"
+S="${WORKDIR}/${MY_P}"
+
+LICENSE="ISC"
+SLOT="0"
+KEYWORDS="~alpha ~amd64 ~arm ~arm64 ~hppa ~loong ~mips ~ppc ~ppc64 ~riscv ~sparc ~x86"
+REQUIRED_USE="kernel_linux"
+
+pkg_pretend() {
+ if kernel_is -ge 4 15; then
+ if linux_config_exists; then
+ if linux_chkconfig_builtin CFG80211 &&
+ [[ $(linux_chkconfig_string EXTRA_FIRMWARE) != *regulatory.db* ]]; then
+ ewarn "REGULATORY DOMAIN PROBLEM:"
+ ewarn " With CONFIG_CFG80211=y (built-in), the driver(s) won't be able to load regulatory.db from"
+ ewarn " /lib/firmware, resulting in broken regulatory domain support. Please set CONFIG_CFG80211=m"
+ ewarn " or add regulatory.db and regulatory.db.p7s to CONFIG_EXTRA_FIRMWARE."
+ fi
+ if ! linux_chkconfig_present CFG80211; then
+ ewarn "REGULATORY DOMAIN PROBLEM:"
+ ewarn " With CONFIG_CFG80211 unset, the driver(s) won't be able to load the regulatory.db from"
+ ewarn " /lib/firmware, resulting in broken regulatory domain support. Please set CONFIG_CFG80211=m."
+ fi
+ if linux_chkconfig_present EXPERT && linux_chkconfig_present CFG80211_CRDA_SUPPORT; then
+ ewarn "You can safely disable CFG80211_CRDA_SUPPORT"
+ fi
+ fi
+ else
+ CONFIG_CHECK="~CFG80211_CRDA_SUPPORT"
+ WARNING_CFG80211_CRDA_SUPPORT="REGULATORY DOMAIN PROBLEM: \
+please enable CFG80211_CRDA_SUPPORT for proper regulatory domain support"
+ fi
+
+ check_extra_config
+}
+
+src_compile() {
+ einfo "Recompiling regulatory database(s) from db.txt would break signature verification."
+ einfo "Installing unmodified binary version."
+}
+
+src_install() {
+ # install the files the kernel needs unconditionally,
+ # they are small and kernels get upgraded
+ insinto /lib/firmware
+ doins regulatory.db regulatory.db.p7s
+
+ echo '.so man5/regulatory.bin.5' > regulatory.db.5 || die
+ # without -i18n= workaround regulatory.db.5 is installed as db/man5/regulatory.5
+ doman -i18n= regulatory.db.5 regulatory.bin.5
+ dodoc README db.txt
+}
diff --git a/net-wireless/wireless-regdb/wireless-regdb-20260318.ebuild b/net-wireless/wireless-regdb/wireless-regdb-20260318.ebuild
new file mode 100644
index 000000000000..6ac4a2991c22
--- /dev/null
+++ b/net-wireless/wireless-regdb/wireless-regdb-20260318.ebuild
@@ -0,0 +1,62 @@
+# Copyright 1999-2026 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=8
+
+inherit linux-info
+
+MY_P="wireless-regdb-${PV:0:4}.${PV:4:2}.${PV:6:2}"
+DESCRIPTION="Wireless Regulatory database for Linux"
+HOMEPAGE="https://wireless.docs.kernel.org/en/latest/en/developers/regulatory/wireless-regdb.html"
+SRC_URI="https://mirrors.edge.kernel.org/pub/software/network/${PN}/${MY_P}.tar.xz"
+S="${WORKDIR}/${MY_P}"
+
+LICENSE="ISC"
+SLOT="0"
+KEYWORDS="~alpha ~amd64 ~arm ~arm64 ~hppa ~loong ~mips ~ppc ~ppc64 ~riscv ~sparc ~x86"
+REQUIRED_USE="kernel_linux"
+
+pkg_pretend() {
+ if kernel_is -ge 4 15; then
+ if linux_config_exists; then
+ if linux_chkconfig_builtin CFG80211 &&
+ [[ $(linux_chkconfig_string EXTRA_FIRMWARE) != *regulatory.db* ]]; then
+ ewarn "REGULATORY DOMAIN PROBLEM:"
+ ewarn " With CONFIG_CFG80211=y (built-in), the driver(s) won't be able to load regulatory.db from"
+ ewarn " /lib/firmware, resulting in broken regulatory domain support. Please set CONFIG_CFG80211=m"
+ ewarn " or add regulatory.db and regulatory.db.p7s to CONFIG_EXTRA_FIRMWARE."
+ fi
+ if ! linux_chkconfig_present CFG80211; then
+ ewarn "REGULATORY DOMAIN PROBLEM:"
+ ewarn " With CONFIG_CFG80211 unset, the driver(s) won't be able to load the regulatory.db from"
+ ewarn " /lib/firmware, resulting in broken regulatory domain support. Please set CONFIG_CFG80211=m."
+ fi
+ if linux_chkconfig_present EXPERT && linux_chkconfig_present CFG80211_CRDA_SUPPORT; then
+ ewarn "You can safely disable CFG80211_CRDA_SUPPORT"
+ fi
+ fi
+ else
+ CONFIG_CHECK="~CFG80211_CRDA_SUPPORT"
+ WARNING_CFG80211_CRDA_SUPPORT="REGULATORY DOMAIN PROBLEM: \
+please enable CFG80211_CRDA_SUPPORT for proper regulatory domain support"
+ fi
+
+ check_extra_config
+}
+
+src_compile() {
+ einfo "Recompiling regulatory database(s) from db.txt would break signature verification."
+ einfo "Installing unmodified binary version."
+}
+
+src_install() {
+ # install the files the kernel needs unconditionally,
+ # they are small and kernels get upgraded
+ insinto /lib/firmware
+ doins regulatory.db regulatory.db.p7s
+
+ echo '.so man5/regulatory.bin.5' > regulatory.db.5 || die
+ # without -i18n= workaround regulatory.db.5 is installed as db/man5/regulatory.5
+ doman -i18n= regulatory.db.5 regulatory.bin.5
+ dodoc README db.txt
+}
diff --git a/net-wireless/wireless-tools/Manifest b/net-wireless/wireless-tools/Manifest
new file mode 100644
index 000000000000..1f8bbcf26e57
--- /dev/null
+++ b/net-wireless/wireless-tools/Manifest
@@ -0,0 +1 @@
+DIST wireless_tools.30.pre9.tar.gz 348477 BLAKE2B 7ff1f14b464aac6204e86c3f1dcd0f8acc4ea89d11feaf4700e75518dc990945a18a931a9dad76f12dd796c983aaf9b766fd57e9cdcfac57f71dcc3bbe332aa7 SHA512 0561923bca075af4754d21e1be303cbd1ce3558cb6481c9c12bc7d330a353acf8ad81a822488570e859480287999c3bb2a698c993556a92f0699743e0a527ff1
diff --git a/net-wireless/wireless-tools/files/wireless-tools-29-asneeded.patch b/net-wireless/wireless-tools/files/wireless-tools-29-asneeded.patch
new file mode 100644
index 000000000000..04f2d869b6d2
--- /dev/null
+++ b/net-wireless/wireless-tools/files/wireless-tools-29-asneeded.patch
@@ -0,0 +1,13 @@
+Index: wireless_tools.29/Makefile
+===================================================================
+--- wireless_tools.29.orig/Makefile
++++ wireless_tools.29/Makefile
+@@ -145,7 +145,7 @@ wireless.h:
+
+ # Compilation of the dynamic library
+ $(DYNAMIC): $(OBJS:.o=.so)
+- $(CC) -shared -o $@ -Wl,-soname,$@ $(STRIPFLAGS) $(LIBS) -lc $^
++ $(CC) $(LDFLAGS) -shared -o $@ -Wl,-soname,$@ $(STRIPFLAGS) $^ $(LIBS) -lc
+
+ # Compilation of the static library
+ $(STATIC): $(OBJS:.o=.so)
diff --git a/net-wireless/wireless-tools/files/wireless-tools-29-musl.patch b/net-wireless/wireless-tools/files/wireless-tools-29-musl.patch
new file mode 100644
index 000000000000..4af5628225f9
--- /dev/null
+++ b/net-wireless/wireless-tools/files/wireless-tools-29-musl.patch
@@ -0,0 +1,20 @@
+https://bugs.gentoo.org/958314
+
+Fixes compilation error against musl-libc, like in https://github.com/md-raid-utilities/mdadm/issues/12#issuecomment-2119880626
+
+Patch by Samuel Blythe <metroidhunter9000@proton.me>
+--- a/ifrename.c
++++ b/ifrename.c
+@@ -52,6 +52,12 @@
+
+ #include "iwlib.h" /* Wireless Tools library */
+
++/* Ensure GNU basename behavior for musl libc */
++#ifndef __GLIBC__
++#define basename(path) \
++ (strrchr((path),'/') ? strrchr((path),'/')+1 : (path))
++#endif
++
+ // This would be cool, unfortunately...
+ //#include <linux/ethtool.h> /* Ethtool stuff -> struct ethtool_drvinfo */
+
diff --git a/net-wireless/wireless-tools/metadata.xml b/net-wireless/wireless-tools/metadata.xml
new file mode 100644
index 000000000000..f93f9be48e80
--- /dev/null
+++ b/net-wireless/wireless-tools/metadata.xml
@@ -0,0 +1,21 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE pkgmetadata SYSTEM "https://docs.baldeagleos.com/dtd/metadata.dtd">
+<pkgmetadata>
+ <maintainer type="person">
+ <email>zerochaos@gentoo.org</email>
+ <name>Rick Farina</name>
+ </maintainer>
+ <longdescription lang="en">
+ This package provides all the command line tools for configuring
+ wireless networking devices with drivers that implement the Linux
+ Wireless Extensions (almost all recent IEEE 802.11a/b/g drivers).
+ </longdescription>
+ <use>
+ <flag name="multicall">Build the most commonly used tools as one
+ binary</flag>
+ </use>
+ <upstream>
+ <remote-id type="cpe">cpe:/a:wireless_tools:wireless_tools</remote-id>
+ </upstream>
+ <origin>baldeagleos-repo</origin>
+</pkgmetadata>
diff --git a/net-wireless/wireless-tools/wireless-tools-30_pre9-r1.ebuild b/net-wireless/wireless-tools/wireless-tools-30_pre9-r1.ebuild
new file mode 100644
index 000000000000..04a68491ac18
--- /dev/null
+++ b/net-wireless/wireless-tools/wireless-tools-30_pre9-r1.ebuild
@@ -0,0 +1,60 @@
+# Copyright 1999-2022 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=8
+
+inherit toolchain-funcs
+
+# The following works with both pre-releases and releases
+MY_P=${PN/-/_}.${PV/_/.}
+S="${WORKDIR}/${MY_P/\.pre*/}"
+
+DESCRIPTION="A collection of tools to configure IEEE 802.11 wireless LAN cards"
+HOMEPAGE="http://www.hpl.hp.com/personal/Jean_Tourrilhes/Linux/Tools.html"
+SRC_URI="http://www.hpl.hp.com/personal/Jean_Tourrilhes/Linux/${MY_P}.tar.gz"
+
+LICENSE="GPL-2"
+SLOT="0"
+KEYWORDS="~alpha amd64 arm arm64 ~hppa ~loong ~mips ppc ppc64 ~riscv ~sparc x86"
+IUSE="multicall"
+
+PATCHES=("${FILESDIR}"/${PN}-29-asneeded.patch)
+
+src_prepare() {
+ default
+
+ sed -i \
+ -e "s:^\(CC\) = gcc:\1 = $(tc-getCC):" \
+ -e "s:^\(AR\) = ar:\1 = $(tc-getAR):" \
+ -e "s:^\(RANLIB\) = ranlib:\1 = $(tc-getRANLIB):" \
+ -e "s:^\(CFLAGS=-Os\):#\1:" \
+ -e "s:\(@\$(LDCONFIG).*\):#\1:" \
+ -e "s:^\(INSTALL_MAN= \$(PREFIX)\)/man:\1/usr/share/man:" \
+ -e "s:^\(INSTALL_LIB= \$(PREFIX)\)/lib:\1/$(get_libdir)/:" \
+ -e "s:^\(INSTALL_INC= \$(PREFIX)\)/include:\1/usr/include:" \
+ -e "s:^\(BUILD_STATIC = y\):#\1:" \
+ -e '/\$(CC)/s:-Wl,-s\>::' \
+ "${S}"/Makefile || die
+}
+
+src_compile() {
+ emake
+
+ use multicall && emake iwmulticall
+}
+
+src_install() {
+ emake PREFIX="${ED}" install
+
+ if use multicall; then
+ # 'make install-iwmulticall' will overwrite some of the tools
+ # with symlinks - this is intentional (brix)
+ emake PREFIX="${ED}" install-iwmulticall
+ fi
+
+ has cs ${LINGUAS-cs} || rm -rf "${ED}"/usr/share/man/cs
+ has fr ${LINGUAS-fr} || rm -rf "${ED}"/usr/share/man/fr.{ISO8859-1,UTF-8}
+
+ dodoc CHANGELOG.h HOTPLUG-UDEV.txt IFRENAME-VS-XXX.txt PCMCIA.txt README
+ has fr ${LINGUAS-fr} && dodoc README.fr
+}
diff --git a/net-wireless/wireless-tools/wireless-tools-30_pre9-r2.ebuild b/net-wireless/wireless-tools/wireless-tools-30_pre9-r2.ebuild
new file mode 100644
index 000000000000..25e7143741d1
--- /dev/null
+++ b/net-wireless/wireless-tools/wireless-tools-30_pre9-r2.ebuild
@@ -0,0 +1,63 @@
+# Copyright 1999-2025 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=8
+
+inherit toolchain-funcs
+
+# The following works with both pre-releases and releases
+MY_P=${PN/-/_}.${PV/_/.}
+S="${WORKDIR}/${MY_P/\.pre*/}"
+
+DESCRIPTION="A collection of tools to configure IEEE 802.11 wireless LAN cards"
+HOMEPAGE="http://www.hpl.hp.com/personal/Jean_Tourrilhes/Linux/Tools.html"
+SRC_URI="http://www.hpl.hp.com/personal/Jean_Tourrilhes/Linux/${MY_P}.tar.gz"
+
+LICENSE="GPL-2"
+SLOT="0"
+KEYWORDS="~alpha amd64 arm arm64 ~hppa ~loong ~mips ppc ppc64 ~riscv ~sparc x86"
+IUSE="multicall"
+
+PATCHES=(
+ "${FILESDIR}"/${PN}-29-asneeded.patch
+ "${FILESDIR}"/${PN}-29-musl.patch
+)
+
+src_prepare() {
+ default
+
+ sed -i \
+ -e "s:^\(CC\) = gcc:\1 = $(tc-getCC):" \
+ -e "s:^\(AR\) = ar:\1 = $(tc-getAR):" \
+ -e "s:^\(RANLIB\) = ranlib:\1 = $(tc-getRANLIB):" \
+ -e "s:^\(CFLAGS=-Os\):#\1:" \
+ -e "s:\(@\$(LDCONFIG).*\):#\1:" \
+ -e "s:^\(INSTALL_MAN= \$(PREFIX)\)/man:\1/usr/share/man:" \
+ -e "s:^\(INSTALL_LIB= \$(PREFIX)\)/lib:\1/$(get_libdir)/:" \
+ -e "s:^\(INSTALL_INC= \$(PREFIX)\)/include:\1/usr/include:" \
+ -e "s:^\(BUILD_STATIC = y\):#\1:" \
+ -e '/\$(CC)/s:-Wl,-s\>::' \
+ "${S}"/Makefile || die
+}
+
+src_compile() {
+ emake
+
+ use multicall && emake iwmulticall
+}
+
+src_install() {
+ emake PREFIX="${ED}" install
+
+ if use multicall; then
+ # 'make install-iwmulticall' will overwrite some of the tools
+ # with symlinks - this is intentional (brix)
+ emake PREFIX="${ED}" install-iwmulticall
+ fi
+
+ has cs ${LINGUAS-cs} || rm -rf "${ED}"/usr/share/man/cs
+ has fr ${LINGUAS-fr} || rm -rf "${ED}"/usr/share/man/fr.{ISO8859-1,UTF-8}
+
+ dodoc CHANGELOG.h HOTPLUG-UDEV.txt IFRENAME-VS-XXX.txt PCMCIA.txt README
+ has fr ${LINGUAS-fr} && dodoc README.fr
+}
diff --git a/net-wireless/wpa_supplicant/Manifest b/net-wireless/wpa_supplicant/Manifest
new file mode 100644
index 000000000000..72800ead6b64
--- /dev/null
+++ b/net-wireless/wpa_supplicant/Manifest
@@ -0,0 +1 @@
+DIST wpa_supplicant-2.11.tar.gz 3841433 BLAKE2B 71bd0d11cd31eb5bc6beb51caf0f1399856ea188f316d2330053a2d8c81869057811e9f500828e8981eabd0af38f30a18a3ae584d744005c78681c82fa910abf SHA512 9a0a3a9d6fa2235903c40aa57b5955f0c9dd1dccfd0e3825a3b6f92b3e32db8d464b3ea0aef3285ba3ee109e7b190560cedd744902e954f0003cdba543e277b2
diff --git a/net-wireless/wpa_supplicant/files/wpa_cli-r1.sh b/net-wireless/wpa_supplicant/files/wpa_cli-r1.sh
new file mode 100644
index 000000000000..dc852f427f4c
--- /dev/null
+++ b/net-wireless/wpa_supplicant/files/wpa_cli-r1.sh
@@ -0,0 +1,44 @@
+#!/bin/sh
+# Copyright 1999-2011 Gentoo Foundation
+# Written by Roy Marples <uberlord@gentoo.org>
+# Distributed under the terms of the GNU General Public License v2
+# Alternatively, this file may be distributed under the terms of the BSD License
+
+if [ -z "$1" -o -z "$2" ]; then
+ logger -t wpa_cli "Insufficient parameters"
+ exit 1
+fi
+
+INTERFACE="$1"
+ACTION="$2"
+
+# Note, the below action must NOT mark the interface down via ifconfig, ip or
+# similar. Addresses can be removed, changed and daemons can be stopped, but
+# the interface must remain up for wpa_supplicant to work.
+
+if [ -f /etc/gentoo-release ]; then
+ EXEC="/etc/init.d/net.${INTERFACE} --quiet"
+else
+ logger -t wpa_cli "I don't know what to do with this distro!"
+ exit 1
+fi
+
+case ${ACTION} in
+ CONNECTED)
+ EXEC="${EXEC} start"
+ ;;
+ DISCONNECTED)
+ EXEC="${EXEC} --nodeps stop"
+ ;;
+ *)
+ logger -t wpa_cli "Unknown action ${ACTION}"
+ exit 1
+ ;;
+esac
+
+# ${EXEC} can use ${IN_BACKGROUND} so that it knows that the user isn't
+# stopping the interface and a background process - like wpa_cli - is.
+export IN_BACKGROUND=true
+
+logger -t wpa_cli "interface ${INTERFACE} ${ACTION}"
+${EXEC} || logger -t wpa_cli "executing '${EXEC}' failed"
diff --git a/net-wireless/wpa_supplicant/files/wpa_cli.sh b/net-wireless/wpa_supplicant/files/wpa_cli.sh
new file mode 100644
index 000000000000..c581bc1c7543
--- /dev/null
+++ b/net-wireless/wpa_supplicant/files/wpa_cli.sh
@@ -0,0 +1,46 @@
+#!/bin/sh
+# Copyright 1999-2011 Gentoo Foundation
+# Written by Roy Marples <uberlord@gentoo.org>
+# Distributed under the terms of the GNU General Public License v2
+# Alternatively, this file may be distributed under the terms of the BSD License
+
+if [ -z "$1" -o -z "$2" ]; then
+ logger -t wpa_cli "Insufficient parameters"
+ exit 1
+fi
+
+INTERFACE="$1"
+ACTION="$2"
+
+# Note, the below action must NOT mark the interface down via ifconfig, ip or
+# similar. Addresses can be removed, changed and daemons can be stopped, but
+# the interface must remain up for wpa_supplicant to work.
+
+if [ -f /etc/gentoo-release ]; then
+ EXEC="/etc/init.d/net.${INTERFACE} --quiet"
+else
+ logger -t wpa_cli "I don't know what to do with this distro!"
+ exit 1
+fi
+
+case ${ACTION} in
+ CONNECTED)
+ EXEC="${EXEC} start"
+ ;;
+ DISCONNECTED)
+ # Deactivated, since stopping /etc/init.d/net.wlanX
+ # stops the network completly.
+ EXEC="false ${EXEC} stop"
+ ;;
+ *)
+ logger -t wpa_cli "Unknown action ${ACTION}"
+ exit 1
+ ;;
+esac
+
+# ${EXEC} can use ${IN_BACKGROUND} so that it knows that the user isn't
+# stopping the interface and a background process - like wpa_cli - is.
+export IN_BACKGROUND=true
+
+logger -t wpa_cli "interface ${INTERFACE} ${ACTION}"
+${EXEC} || logger -t wpa_cli "executing '${EXEC}' failed"
diff --git a/net-wireless/wpa_supplicant/files/wpa_supplicant-2.10-allow-legacy-renegotiation.patch b/net-wireless/wpa_supplicant/files/wpa_supplicant-2.10-allow-legacy-renegotiation.patch
new file mode 100644
index 000000000000..574973fe6fe5
--- /dev/null
+++ b/net-wireless/wpa_supplicant/files/wpa_supplicant-2.10-allow-legacy-renegotiation.patch
@@ -0,0 +1,30 @@
+From: James Ralston <ralston@pobox.com>
+Date: Sun, 1 May 2022 16:15:23 -0700
+Subject: Allow legacy renegotiation to fix PEAP issues with some servers
+
+Upstream: http://lists.infradead.org/pipermail/hostap/2022-May/040511.html
+---
+ src/crypto/tls_openssl.c | 10 ++++++++++
+ 1 file changed, 10 insertions(+)
+
+diff --git a/src/crypto/tls_openssl.c b/src/crypto/tls_openssl.c
+index 273e5cb..ad3aa1a 100644
+--- a/src/crypto/tls_openssl.c
++++ b/src/crypto/tls_openssl.c
+@@ -1056,6 +1056,16 @@ void * tls_init(const struct tls_config *conf)
+ SSL_CTX_set_options(ssl, SSL_OP_NO_SSLv2);
+ SSL_CTX_set_options(ssl, SSL_OP_NO_SSLv3);
+
++ /* Many enterprise PEAP server implementations (e.g. used in large
++ corporations and universities) do not support RFC5746 secure
++ renegotiation, and starting with OpenSSL 3.0,
++ SSL_OP_LEGACY_SERVER_CONNECT is no longer set as part of SSL_OP_ALL.
++ So until we implement a way to request SSL_OP_LEGACY_SERVER_CONNECT
++ only in EAP peer mode, just set SSL_OP_LEGACY_SERVER_CONNECT
++ globally. */
++
++ SSL_CTX_set_options(ssl, SSL_OP_LEGACY_SERVER_CONNECT);
++
+ SSL_CTX_set_mode(ssl, SSL_MODE_AUTO_RETRY);
+
+ #ifdef SSL_MODE_NO_AUTO_CHAIN
diff --git a/net-wireless/wpa_supplicant/files/wpa_supplicant-2.10-use-qt6.patch b/net-wireless/wpa_supplicant/files/wpa_supplicant-2.10-use-qt6.patch
new file mode 100644
index 000000000000..2dd2b753763f
--- /dev/null
+++ b/net-wireless/wpa_supplicant/files/wpa_supplicant-2.10-use-qt6.patch
@@ -0,0 +1,311 @@
+From 0ead8bb4889977af735f4d0b578497830ee6d6f7 Mon Sep 17 00:00:00 2001
+From: "Jason A. Donenfeld" <Jason@zx2c4.com>
+Date: Fri, 10 Jan 2025 03:43:23 +0100
+Subject: [PATCH] wpa_gui: Port to Qt6
+
+This appears to be working. Fairly straight forward. Lightly tested.
+Distros are getting ready to remove Qt5, so this is somewhat important
+to do.
+
+Signed-off-by: Jason A. Donenfeld <Jason@zx2c4.com>
+---
+ wpa_supplicant/wpa_gui-qt4/eventhistory.h | 2 +-
+ wpa_supplicant/wpa_gui-qt4/main.cpp | 8 ++++----
+ wpa_supplicant/wpa_gui-qt4/networkconfig.cpp | 8 ++++----
+ wpa_supplicant/wpa_gui-qt4/networkconfig.h | 2 +-
+ wpa_supplicant/wpa_gui-qt4/peers.cpp | 10 +++++-----
+ wpa_supplicant/wpa_gui-qt4/peers.h | 2 +-
+ wpa_supplicant/wpa_gui-qt4/scanresults.cpp | 2 +-
+ wpa_supplicant/wpa_gui-qt4/scanresults.h | 2 +-
+ wpa_supplicant/wpa_gui-qt4/userdatarequest.h | 2 +-
+ wpa_supplicant/wpa_gui-qt4/wpagui.cpp | 16 ++++++++--------
+ wpa_supplicant/wpa_gui-qt4/wpagui.h | 2 +-
+ wpa_supplicant/wpa_gui-qt4/wpamsg.h | 4 ++--
+ 12 files changed, 30 insertions(+), 30 deletions(-)
+
+diff --git a/wpa_supplicant/wpa_gui-qt4/eventhistory.h b/wpa_supplicant/wpa_gui-qt4/eventhistory.h
+index afd7b6346..2122ab45a 100644
+--- a/wpa_supplicant/wpa_gui-qt4/eventhistory.h
++++ b/wpa_supplicant/wpa_gui-qt4/eventhistory.h
+@@ -40,7 +40,7 @@ class EventHistory : public QDialog, public Ui::EventHistory
+
+ public:
+ EventHistory(QWidget *parent = 0, const char *name = 0,
+- bool modal = false, Qt::WindowFlags fl = 0);
++ bool modal = false, Qt::WindowFlags fl = Qt::Widget);
+ ~EventHistory();
+
+ public slots:
+diff --git a/wpa_supplicant/wpa_gui-qt4/main.cpp b/wpa_supplicant/wpa_gui-qt4/main.cpp
+index bbd45c6e1..d395aa135 100644
+--- a/wpa_supplicant/wpa_gui-qt4/main.cpp
++++ b/wpa_supplicant/wpa_gui-qt4/main.cpp
+@@ -40,10 +40,10 @@ int main(int argc, char *argv[])
+ int ret;
+
+ locale = QLocale::system().name();
+- resourceDir = QLibraryInfo::location(QLibraryInfo::TranslationsPath);
+- if (!translator.load("wpa_gui_" + locale, resourceDir))
+- translator.load("wpa_gui_" + locale, "lang");
+- app.installTranslator(&translator);
++ resourceDir = QLibraryInfo::path(QLibraryInfo::TranslationsPath);
++ if (translator.load("wpa_gui_" + locale, resourceDir) ||
++ translator.load("wpa_gui_" + locale, "lang"))
++ app.installTranslator(&translator);
+
+ WpaGui w(&app);
+
+diff --git a/wpa_supplicant/wpa_gui-qt4/networkconfig.cpp b/wpa_supplicant/wpa_gui-qt4/networkconfig.cpp
+index 2727318bc..59af84504 100644
+--- a/wpa_supplicant/wpa_gui-qt4/networkconfig.cpp
++++ b/wpa_supplicant/wpa_gui-qt4/networkconfig.cpp
+@@ -37,7 +37,7 @@ NetworkConfig::NetworkConfig(QWidget *parent, const char *, bool,
+ SLOT(authChanged(int)));
+ connect(cancelButton, SIGNAL(clicked()), this, SLOT(close()));
+ connect(addButton, SIGNAL(clicked()), this, SLOT(addNetwork()));
+- connect(encrSelect, SIGNAL(activated(const QString &)), this,
++ connect(encrSelect, SIGNAL(textActivated(const QString &)), this,
+ SLOT(encrChanged(const QString &)));
+ connect(removeButton, SIGNAL(clicked()), this, SLOT(removeNetwork()));
+ connect(eapSelect, SIGNAL(activated(int)), this,
+@@ -204,8 +204,8 @@ void NetworkConfig::addNetwork()
+ }
+
+ if (idstrEdit->isEnabled() && !idstrEdit->text().isEmpty()) {
+- QRegExp rx("^(\\w|-)+$");
+- if (rx.indexIn(idstrEdit->text()) < 0) {
++ QRegularExpression rx("^(\\w|-)+$");
++ if (!rx.match(idstrEdit->text()).hasMatch()) {
+ QMessageBox::warning(
+ this, tr("Network ID Error"),
+ tr("Network ID String contains non-word "
+@@ -797,7 +797,7 @@ void NetworkConfig::removeNetwork()
+ tr("This will permanently remove the network\n"
+ "from the configuration. Do you really want\n"
+ "to remove this network?"),
+- tr("Yes"), tr("No")) != 0)
++ QMessageBox::Yes, QMessageBox::No) != 0)
+ return;
+
+ snprintf(cmd, sizeof(cmd), "REMOVE_NETWORK %d", edit_network_id);
+diff --git a/wpa_supplicant/wpa_gui-qt4/networkconfig.h b/wpa_supplicant/wpa_gui-qt4/networkconfig.h
+index fd09dec54..a3a7d9792 100644
+--- a/wpa_supplicant/wpa_gui-qt4/networkconfig.h
++++ b/wpa_supplicant/wpa_gui-qt4/networkconfig.h
+@@ -20,7 +20,7 @@ class NetworkConfig : public QDialog, public Ui::NetworkConfig
+
+ public:
+ NetworkConfig(QWidget *parent = 0, const char *name = 0,
+- bool modal = false, Qt::WindowFlags fl = 0);
++ bool modal = false, Qt::WindowFlags fl = Qt::Widget);
+ ~NetworkConfig();
+
+ virtual void paramsFromScanResults(QTreeWidgetItem *sel);
+diff --git a/wpa_supplicant/wpa_gui-qt4/peers.cpp b/wpa_supplicant/wpa_gui-qt4/peers.cpp
+index 0a0b3ffcb..268aba8b3 100644
+--- a/wpa_supplicant/wpa_gui-qt4/peers.cpp
++++ b/wpa_supplicant/wpa_gui-qt4/peers.cpp
+@@ -403,7 +403,7 @@ void Peers::ctx_p2p_start_group()
+
+ void Peers::add_station(QString info)
+ {
+- QStringList lines = info.split(QRegExp("\\n"));
++ QStringList lines = info.split(QRegularExpression("\\n"));
+ QString name;
+
+ for (QStringList::Iterator it = lines.begin();
+@@ -518,7 +518,7 @@ void Peers::add_p2p_group_client(QStandardItem * /*parent*/, QString params)
+ */
+
+ QStringList items =
+- params.split(QRegExp(" (?=[^']*('[^']*'[^']*)*$)"));
++ params.split(QRegularExpression(" (?=[^']*('[^']*'[^']*)*$)"));
+ QString addr = "";
+ QString name = "";
+ int config_methods = 0;
+@@ -591,7 +591,7 @@ bool Peers::add_bss(const char *cmd)
+ QString ssid, bssid, flags, wps_name, pri_dev_type;
+ int id = -1;
+
+- QStringList lines = bss.split(QRegExp("\\n"));
++ QStringList lines = bss.split(QRegularExpression("\\n"));
+ for (QStringList::Iterator it = lines.begin();
+ it != lines.end(); it++) {
+ int pos = (*it).indexOf('=') + 1;
+@@ -643,7 +643,7 @@ bool Peers::add_bss(const char *cmd)
+ item->setData(ssid, peer_role_ssid);
+ model.appendRow(item);
+
+- lines = bss.split(QRegExp("\\n"));
++ lines = bss.split(QRegularExpression("\\n"));
+ for (QStringList::Iterator it = lines.begin();
+ it != lines.end(); it++) {
+ if ((*it).startsWith("p2p_group_client:"))
+@@ -903,7 +903,7 @@ void Peers::event_notify(WpaMsg msg)
+ * group_capab=0x0
+ */
+ QStringList items =
+- text.split(QRegExp(" (?=[^']*('[^']*'[^']*)*$)"));
++ text.split(QRegularExpression(" (?=[^']*('[^']*'[^']*)*$)"));
+ QString addr = items[1];
+ QString name = "";
+ QString pri_dev_type;
+diff --git a/wpa_supplicant/wpa_gui-qt4/peers.h b/wpa_supplicant/wpa_gui-qt4/peers.h
+index bb7373749..c44bba99a 100644
+--- a/wpa_supplicant/wpa_gui-qt4/peers.h
++++ b/wpa_supplicant/wpa_gui-qt4/peers.h
+@@ -22,7 +22,7 @@ class Peers : public QDialog, public Ui::Peers
+
+ public:
+ Peers(QWidget *parent = 0, const char *name = 0,
+- bool modal = false, Qt::WindowFlags fl = 0);
++ bool modal = false, Qt::WindowFlags fl = Qt::Widget);
+ ~Peers();
+ void setWpaGui(WpaGui *_wpagui);
+ void event_notify(WpaMsg msg);
+diff --git a/wpa_supplicant/wpa_gui-qt4/scanresults.cpp b/wpa_supplicant/wpa_gui-qt4/scanresults.cpp
+index a2e3072fb..ba04b4f38 100644
+--- a/wpa_supplicant/wpa_gui-qt4/scanresults.cpp
++++ b/wpa_supplicant/wpa_gui-qt4/scanresults.cpp
+@@ -77,7 +77,7 @@ void ScanResults::updateResults()
+
+ QString ssid, bssid, freq, signal, flags;
+
+- QStringList lines = bss.split(QRegExp("\\n"));
++ QStringList lines = bss.split(QRegularExpression("\\n"));
+ for (QStringList::Iterator it = lines.begin();
+ it != lines.end(); it++) {
+ int pos = (*it).indexOf('=') + 1;
+diff --git a/wpa_supplicant/wpa_gui-qt4/scanresults.h b/wpa_supplicant/wpa_gui-qt4/scanresults.h
+index 2cddd133f..39bba90ce 100644
+--- a/wpa_supplicant/wpa_gui-qt4/scanresults.h
++++ b/wpa_supplicant/wpa_gui-qt4/scanresults.h
+@@ -20,7 +20,7 @@ class ScanResults : public QDialog, public Ui::ScanResults
+
+ public:
+ ScanResults(QWidget *parent = 0, const char *name = 0,
+- bool modal = false, Qt::WindowFlags fl = 0);
++ bool modal = false, Qt::WindowFlags fl = Qt::Widget);
+ ~ScanResults();
+
+ public slots:
+diff --git a/wpa_supplicant/wpa_gui-qt4/userdatarequest.h b/wpa_supplicant/wpa_gui-qt4/userdatarequest.h
+index b6d1ad2f4..3f7dccb28 100644
+--- a/wpa_supplicant/wpa_gui-qt4/userdatarequest.h
++++ b/wpa_supplicant/wpa_gui-qt4/userdatarequest.h
+@@ -20,7 +20,7 @@ class UserDataRequest : public QDialog, public Ui::UserDataRequest
+
+ public:
+ UserDataRequest(QWidget *parent = 0, const char *name = 0,
+- bool modal = false, Qt::WindowFlags fl = 0);
++ bool modal = false, Qt::WindowFlags fl = Qt::Widget);
+ ~UserDataRequest();
+
+ int setParams(WpaGui *_wpagui, const char *reqMsg);
+diff --git a/wpa_supplicant/wpa_gui-qt4/wpagui.cpp b/wpa_supplicant/wpa_gui-qt4/wpagui.cpp
+index 9404ab424..0c125d90f 100644
+--- a/wpa_supplicant/wpa_gui-qt4/wpagui.cpp
++++ b/wpa_supplicant/wpa_gui-qt4/wpagui.cpp
+@@ -99,9 +99,9 @@ WpaGui::WpaGui(QApplication *_app, QWidget *parent, const char *,
+ connect(disconnectButton, SIGNAL(clicked()), this, SLOT(disconnect()));
+ connect(scanButton, SIGNAL(clicked()), this, SLOT(scan()));
+ connect(connectButton, SIGNAL(clicked()), this, SLOT(connectB()));
+- connect(adapterSelect, SIGNAL(activated(const QString&)), this,
++ connect(adapterSelect, SIGNAL(textActivated(const QString&)), this,
+ SLOT(selectAdapter(const QString&)));
+- connect(networkSelect, SIGNAL(activated(const QString&)), this,
++ connect(networkSelect, SIGNAL(textActivated(const QString&)), this,
+ SLOT(selectNetwork(const QString&)));
+ connect(addNetworkButton, SIGNAL(clicked()), this, SLOT(addNetwork()));
+ connect(editNetworkButton, SIGNAL(clicked()), this,
+@@ -1078,7 +1078,7 @@ void WpaGui::selectNetwork( const QString &sel )
+ char reply[10];
+ size_t reply_len = sizeof(reply);
+
+- if (cmd.contains(QRegExp("^\\d+:")))
++ if (cmd.contains(QRegularExpression("^\\d+:")))
+ cmd.truncate(cmd.indexOf(':'));
+ else
+ cmd = "any";
+@@ -1095,7 +1095,7 @@ void WpaGui::enableNetwork(const QString &sel)
+ char reply[10];
+ size_t reply_len = sizeof(reply);
+
+- if (cmd.contains(QRegExp("^\\d+:")))
++ if (cmd.contains(QRegularExpression("^\\d+:")))
+ cmd.truncate(cmd.indexOf(':'));
+ else if (!cmd.startsWith("all")) {
+ debug("Invalid editNetwork '%s'",
+@@ -1114,7 +1114,7 @@ void WpaGui::disableNetwork(const QString &sel)
+ char reply[10];
+ size_t reply_len = sizeof(reply);
+
+- if (cmd.contains(QRegExp("^\\d+:")))
++ if (cmd.contains(QRegularExpression("^\\d+:")))
+ cmd.truncate(cmd.indexOf(':'));
+ else if (!cmd.startsWith("all")) {
+ debug("Invalid editNetwork '%s'",
+@@ -1132,7 +1132,7 @@ void WpaGui::editNetwork(const QString &sel)
+ QString cmd(sel);
+ int id = -1;
+
+- if (cmd.contains(QRegExp("^\\d+:"))) {
++ if (cmd.contains(QRegularExpression("^\\d+:"))) {
+ cmd.truncate(cmd.indexOf(':'));
+ id = cmd.toInt();
+ }
+@@ -1204,7 +1204,7 @@ void WpaGui::removeNetwork(const QString &sel)
+ char reply[10];
+ size_t reply_len = sizeof(reply);
+
+- if (cmd.contains(QRegExp("^\\d+:")))
++ if (cmd.contains(QRegularExpression("^\\d+:")))
+ cmd.truncate(cmd.indexOf(':'));
+ else if (!cmd.startsWith("all")) {
+ debug("Invalid editNetwork '%s'",
+@@ -1476,7 +1476,7 @@ void WpaGui::showTrayStatus()
+
+ QString msg, status(buf);
+
+- QStringList lines = status.split(QRegExp("\\n"));
++ QStringList lines = status.split(QRegularExpression("\\n"));
+ for (QStringList::Iterator it = lines.begin();
+ it != lines.end(); it++) {
+ int pos = (*it).indexOf('=') + 1;
+diff --git a/wpa_supplicant/wpa_gui-qt4/wpagui.h b/wpa_supplicant/wpa_gui-qt4/wpagui.h
+index f0a34c97e..898722bd9 100644
+--- a/wpa_supplicant/wpa_gui-qt4/wpagui.h
++++ b/wpa_supplicant/wpa_gui-qt4/wpagui.h
+@@ -49,7 +49,7 @@ public:
+ };
+
+ WpaGui(QApplication *app, QWidget *parent = 0, const char *name = 0,
+- Qt::WindowFlags fl = 0);
++ Qt::WindowFlags fl = Qt::Widget);
+ ~WpaGui();
+
+ virtual int ctrlRequest(const char *cmd, char *buf, size_t *buflen);
+diff --git a/wpa_supplicant/wpa_gui-qt4/wpamsg.h b/wpa_supplicant/wpa_gui-qt4/wpamsg.h
+index 8f2fcdc41..fe36e2044 100644
+--- a/wpa_supplicant/wpa_gui-qt4/wpamsg.h
++++ b/wpa_supplicant/wpa_gui-qt4/wpamsg.h
+@@ -10,7 +10,7 @@
+ #define WPAMSG_H
+
+ #include <QDateTime>
+-#include <QLinkedList>
++#include <QList>
+
+ class WpaMsg {
+ public:
+@@ -30,6 +30,6 @@ private:
+ QDateTime timestamp;
+ };
+
+-typedef QLinkedList<WpaMsg> WpaMsgList;
++typedef QList<WpaMsg> WpaMsgList;
+
+ #endif /* WPAMSG_H */
+--
+2.48.0
+
diff --git a/net-wireless/wpa_supplicant/files/wpa_supplicant-2.11-Revert-Mark-authorization-completed-on-driver-indica.patch b/net-wireless/wpa_supplicant/files/wpa_supplicant-2.11-Revert-Mark-authorization-completed-on-driver-indica.patch
new file mode 100644
index 000000000000..6d28eea8caf6
--- /dev/null
+++ b/net-wireless/wpa_supplicant/files/wpa_supplicant-2.11-Revert-Mark-authorization-completed-on-driver-indica.patch
@@ -0,0 +1,53 @@
+Bug: https://bugs.gentoo.org/937452
+Bug: https://bugzilla.redhat.com/show_bug.cgi?id=2302577
+
+From 071336247683d82a74f3567abf67a0b37db856ae Mon Sep 17 00:00:00 2001
+From: Christopher Byrne <salah.coronya@gmail.com>
+Date: Fri, 21 Feb 2025 18:58:19 -0600
+Subject: [PATCH] Revert "Mark authorization completed on driver indication
+ during 4-way HS offload"
+
+This reverts commit 41638606054a09867fe3f9a2b5523aa4678cbfa5.
+---
+ wpa_supplicant/events.c | 25 ++++++++-----------------
+ 1 file changed, 8 insertions(+), 17 deletions(-)
+
+diff --git a/wpa_supplicant/events.c b/wpa_supplicant/events.c
+index 49917f7aa..bbb3a3eda 100644
+--- a/wpa_supplicant/events.c
++++ b/wpa_supplicant/events.c
+@@ -4327,23 +4327,14 @@ static void wpa_supplicant_event_assoc(struct wpa_supplicant *wpa_s,
+ eapol_sm_notify_eap_success(wpa_s->eapol, true);
+ } else if ((wpa_s->drv_flags & WPA_DRIVER_FLAGS_4WAY_HANDSHAKE_PSK) &&
+ wpa_key_mgmt_wpa_psk(wpa_s->key_mgmt)) {
+- if (already_authorized) {
+- /*
+- * We are done; the driver will take care of RSN 4-way
+- * handshake.
+- */
+- wpa_supplicant_cancel_auth_timeout(wpa_s);
+- wpa_supplicant_set_state(wpa_s, WPA_COMPLETED);
+- eapol_sm_notify_portValid(wpa_s->eapol, true);
+- eapol_sm_notify_eap_success(wpa_s->eapol, true);
+- } else {
+- /* Update port, WPA_COMPLETED state from the
+- * EVENT_PORT_AUTHORIZED handler when the driver is done
+- * with the 4-way handshake.
+- */
+- wpa_msg(wpa_s, MSG_DEBUG,
+- "ASSOC INFO: wait for driver port authorized indication");
+- }
++ /*
++ * We are done; the driver will take care of RSN 4-way
++ * handshake.
++ */
++ wpa_supplicant_cancel_auth_timeout(wpa_s);
++ wpa_supplicant_set_state(wpa_s, WPA_COMPLETED);
++ eapol_sm_notify_portValid(wpa_s->eapol, true);
++ eapol_sm_notify_eap_success(wpa_s->eapol, true);
+ } else if ((wpa_s->drv_flags & WPA_DRIVER_FLAGS_4WAY_HANDSHAKE_8021X) &&
+ wpa_key_mgmt_wpa_ieee8021x(wpa_s->key_mgmt)) {
+ /*
+--
+2.45.3
+
diff --git a/net-wireless/wpa_supplicant/files/wpa_supplicant-2.11-Send-CTRL-EVENT-SIGNAL-CHANGE-message-to-control-interfaces-only.patch b/net-wireless/wpa_supplicant/files/wpa_supplicant-2.11-Send-CTRL-EVENT-SIGNAL-CHANGE-message-to-control-interfaces-only.patch
new file mode 100644
index 000000000000..e16f9fdd2503
--- /dev/null
+++ b/net-wireless/wpa_supplicant/files/wpa_supplicant-2.11-Send-CTRL-EVENT-SIGNAL-CHANGE-message-to-control-interfaces-only.patch
@@ -0,0 +1,50 @@
+Bug: https://bugs.gentoo.org/971605
+Bug: https://bugzilla.redhat.com/show_bug.cgi?id=2309148
+
+From c330b5820eefa8e703dbce7278c2a62d9c69166a Mon Sep 17 00:00:00 2001
+From: Kan-Ru Chen <kanru@kanru.info>
+Date: Mon, 23 Dec 2024 08:42:33 +0900
+Subject: Send CTRL-EVENT-SIGNAL-CHANGE message to control interfaces only
+
+The default logging level for the CTRL-EVENT-SIGNAL-CHANGE message
+may be repeated many times and fill the log file or journal.
+
+For example https://bugzilla.redhat.com/show_bug.cgi?id=2309148 and
+the first few results from searching CTRL-EVENT-SIGNAL-CHANGE on the
+web contain various complaints and workarounds.
+
+Change the logging method to wpa_msg_ctrl to avoid sending frequent
+messages to the syslog but still allow the message to be consumed by
+control interface monitors.
+
+Signed-off-by: Kan-Ru Chen <kanru@kanru.info>
+---
+ wpa_supplicant/events.c | 12 ++++++------
+ 1 file changed, 6 insertions(+), 6 deletions(-)
+
+diff --git a/wpa_supplicant/events.c b/wpa_supplicant/events.c
+index 5a1bc6d58..00109a0cd 100644
+--- a/wpa_supplicant/events.c
++++ b/wpa_supplicant/events.c
+@@ -6766,12 +6766,12 @@ void wpa_supplicant_event(void *ctx, enum wpa_event_type event,
+ data->eapol_rx.encrypted);
+ break;
+ case EVENT_SIGNAL_CHANGE:
+- wpa_msg(wpa_s, MSG_INFO, WPA_EVENT_SIGNAL_CHANGE
+- "above=%d signal=%d noise=%d txrate=%lu",
+- data->signal_change.above_threshold,
+- data->signal_change.data.signal,
+- data->signal_change.current_noise,
+- data->signal_change.data.current_tx_rate);
++ wpa_msg_ctrl(wpa_s, MSG_INFO, WPA_EVENT_SIGNAL_CHANGE
++ "above=%d signal=%d noise=%d txrate=%lu",
++ data->signal_change.above_threshold,
++ data->signal_change.data.signal,
++ data->signal_change.current_noise,
++ data->signal_change.data.current_tx_rate);
+ wpa_bss_update_level(wpa_s->current_bss,
+ data->signal_change.data.signal);
+ bgscan_notify_signal_change(
+--
+cgit v1.2.3
+
diff --git a/net-wireless/wpa_supplicant/files/wpa_supplicant-2.11-broadcom-wl-scanning.patch b/net-wireless/wpa_supplicant/files/wpa_supplicant-2.11-broadcom-wl-scanning.patch
new file mode 100644
index 000000000000..10ebeaa78e99
--- /dev/null
+++ b/net-wireless/wpa_supplicant/files/wpa_supplicant-2.11-broadcom-wl-scanning.patch
@@ -0,0 +1,224 @@
+https://bugs.gentoo.org/956555
+https://lists.infradead.org/pipermail/hostap/2025-May/043475.html
+
+diff --git a/src/drivers/driver.h b/src/drivers/driver.h
+index 3e77474..4c2803e 100644
+--- a/src/drivers/driver.h
++++ b/src/drivers/driver.h
+@@ -2450,6 +2450,10 @@ struct wpa_driver_capa {
+ unsigned int mbssid_max_interfaces;
+ /* Maximum profile periodicity for enhanced MBSSID advertisement */
+ unsigned int ema_max_periodicity;
++
++ /* Maximum number of bytes of extra IE(s) that can be added to Probe
++ * Request frames */
++ size_t max_probe_req_ie_len;
+ };
+
+
+diff --git a/src/drivers/driver_nl80211.c b/src/drivers/driver_nl80211.c
+index e6fbad9..f8f2949 100644
+--- a/src/drivers/driver_nl80211.c
++++ b/src/drivers/driver_nl80211.c
+@@ -11124,7 +11124,8 @@ static int wpa_driver_nl80211_status(void *priv, char *buf, size_t buflen)
+ "capa.max_sched_scan_plan_interval=%u\n"
+ "capa.max_sched_scan_plan_iterations=%u\n"
+ "capa.mbssid_max_interfaces=%u\n"
+- "capa.ema_max_periodicity=%u\n",
++ "capa.ema_max_periodicity=%u\n"
++ "capa.max_probe_req_ie_len=%zu\n",
+ drv->capa.key_mgmt,
+ drv->capa.enc,
+ drv->capa.auth,
+@@ -11149,7 +11150,8 @@ static int wpa_driver_nl80211_status(void *priv, char *buf, size_t buflen)
+ drv->capa.max_sched_scan_plan_interval,
+ drv->capa.max_sched_scan_plan_iterations,
+ drv->capa.mbssid_max_interfaces,
+- drv->capa.ema_max_periodicity);
++ drv->capa.ema_max_periodicity,
++ drv->capa.max_probe_req_ie_len);
+ if (os_snprintf_error(end - pos, res))
+ return pos - buf;
+ pos += res;
+diff --git a/src/drivers/driver_nl80211_capa.c b/src/drivers/driver_nl80211_capa.c
+index dc16bd4..9ce6334 100644
+--- a/src/drivers/driver_nl80211_capa.c
++++ b/src/drivers/driver_nl80211_capa.c
+@@ -959,6 +959,10 @@ static int wiphy_info_handler(struct nl_msg *msg, void *arg)
+ capa->max_scan_ssids =
+ nla_get_u8(tb[NL80211_ATTR_MAX_NUM_SCAN_SSIDS]);
+
++ if (tb[NL80211_ATTR_MAX_SCAN_IE_LEN])
++ capa->max_probe_req_ie_len =
++ nla_get_u16(tb[NL80211_ATTR_MAX_SCAN_IE_LEN]);
++
+ if (tb[NL80211_ATTR_MAX_NUM_SCHED_SCAN_SSIDS])
+ capa->max_sched_scan_ssids =
+ nla_get_u8(tb[NL80211_ATTR_MAX_NUM_SCHED_SCAN_SSIDS]);
+@@ -1196,6 +1200,10 @@ static int wpa_driver_nl80211_get_info(struct wpa_driver_nl80211_data *drv,
+ info->capa = &drv->capa;
+ info->drv = drv;
+
++ /* Default to large buffer of extra IE(s) to maintain previous behavior
++ * if the driver does not support reporting an accurate limit. */
++ info->capa->max_probe_req_ie_len = 1500;
++
+ feat = get_nl80211_protocol_features(drv);
+ if (feat & NL80211_PROTOCOL_FEATURE_SPLIT_WIPHY_DUMP)
+ flags = NLM_F_DUMP;
+diff --git a/src/drivers/driver_nl80211_scan.c b/src/drivers/driver_nl80211_scan.c
+index b055e68..184df49 100644
+--- a/src/drivers/driver_nl80211_scan.c
++++ b/src/drivers/driver_nl80211_scan.c
+@@ -224,6 +224,11 @@ nl80211_scan_common(struct i802_bss *bss, u8 cmd,
+ if (params->extra_ies) {
+ wpa_hexdump(MSG_MSGDUMP, "nl80211: Scan extra IEs",
+ params->extra_ies, params->extra_ies_len);
++ if (params->extra_ies_len > drv->capa.max_probe_req_ie_len)
++ wpa_printf(MSG_INFO,
++ "nl80211: Extra IEs for scan do not fit driver limit (%zu > %zu) - this is likely to fail",
++ params->extra_ies_len,
++ drv->capa.max_probe_req_ie_len);
+ if (nla_put(msg, NL80211_ATTR_IE, params->extra_ies_len,
+ params->extra_ies))
+ goto fail;
+diff --git a/wpa_supplicant/mbo.c b/wpa_supplicant/mbo.c
+index 59b15da..117b30c 100644
+--- a/wpa_supplicant/mbo.c
++++ b/wpa_supplicant/mbo.c
+@@ -460,6 +460,10 @@ void wpas_mbo_scan_ie(struct wpa_supplicant *wpa_s, struct wpabuf *ie)
+ {
+ u8 *len;
+
++ if (wpa_s->drv_max_probe_req_ie_len <
++ 9 + ((wpa_s->enable_oce & OCE_STA) ? 3 : 0))
++ return;
++
+ wpabuf_put_u8(ie, WLAN_EID_VENDOR_SPECIFIC);
+ len = wpabuf_put(ie, 1);
+
+diff --git a/wpa_supplicant/mesh.c b/wpa_supplicant/mesh.c
+index 85c1ea8..29b18e0 100644
+--- a/wpa_supplicant/mesh.c
++++ b/wpa_supplicant/mesh.c
+@@ -602,7 +602,8 @@ void wpa_supplicant_mesh_add_scan_ie(struct wpa_supplicant *wpa_s,
+ /* EID + 0-length (wildcard) mesh-id */
+ size_t ielen = 2;
+
+- if (wpabuf_resize(extra_ie, ielen) == 0) {
++ if (ielen <= wpa_s->drv_max_probe_req_ie_len &&
++ wpabuf_resize(extra_ie, ielen) == 0) {
+ wpabuf_put_u8(*extra_ie, WLAN_EID_MESH_ID);
+ wpabuf_put_u8(*extra_ie, 0);
+ }
+diff --git a/wpa_supplicant/scan.c b/wpa_supplicant/scan.c
+index 8b59e40..a600502 100644
+--- a/wpa_supplicant/scan.c
++++ b/wpa_supplicant/scan.c
+@@ -750,17 +750,20 @@ static struct wpabuf * wpa_supplicant_extra_ies(struct wpa_supplicant *wpa_s)
+ ext_capab_len = wpas_build_ext_capab(wpa_s, ext_capab,
+ sizeof(ext_capab), NULL);
+ if (ext_capab_len > 0 &&
++ (size_t) ext_capab_len < wpa_s->drv_max_probe_req_ie_len &&
+ wpabuf_resize(&extra_ie, ext_capab_len) == 0)
+ wpabuf_put_data(extra_ie, ext_capab, ext_capab_len);
+
+ #ifdef CONFIG_INTERWORKING
+ if (wpa_s->conf->interworking &&
++ wpa_s->drv_max_probe_req_ie_len >= 2 &&
+ wpabuf_resize(&extra_ie, 100) == 0)
+ wpas_add_interworking_elements(wpa_s, extra_ie);
+ #endif /* CONFIG_INTERWORKING */
+
+ #ifdef CONFIG_MBO
+- if (wpa_s->enable_oce & OCE_STA)
++ if ((wpa_s->enable_oce & OCE_STA) &&
++ wpa_s->drv_max_probe_req_ie_len >= 5)
+ wpas_fils_req_param_add_max_channel(wpa_s, &extra_ie);
+ #endif /* CONFIG_MBO */
+
+@@ -774,17 +777,19 @@ static struct wpabuf * wpa_supplicant_extra_ies(struct wpa_supplicant *wpa_s)
+ &wpa_s->wps->dev,
+ wpa_s->wps->uuid, req_type,
+ 0, NULL);
+- if (wps_ie) {
+- if (wpabuf_resize(&extra_ie, wpabuf_len(wps_ie)) == 0)
+- wpabuf_put_buf(extra_ie, wps_ie);
+- wpabuf_free(wps_ie);
+- }
++ if (wps_ie &&
++ wpabuf_len(wps_ie) <= wpa_s->drv_max_probe_req_ie_len &&
++ wpabuf_resize(&extra_ie, wpabuf_len(wps_ie)) == 0)
++ wpabuf_put_buf(extra_ie, wps_ie);
++ wpabuf_free(wps_ie);
+ }
+
+ #ifdef CONFIG_P2P
+ if (wps) {
+ size_t ielen = p2p_scan_ie_buf_len(wpa_s->global->p2p);
+- if (wpabuf_resize(&extra_ie, ielen) == 0)
++
++ if (ielen <= wpa_s->drv_max_probe_req_ie_len &&
++ wpabuf_resize(&extra_ie, ielen) == 0)
+ wpas_p2p_scan_ie(wpa_s, extra_ie);
+ }
+ #endif /* CONFIG_P2P */
+@@ -794,12 +799,14 @@ static struct wpabuf * wpa_supplicant_extra_ies(struct wpa_supplicant *wpa_s)
+ #endif /* CONFIG_WPS */
+
+ #ifdef CONFIG_HS20
+- if (wpa_s->conf->hs20 && wpabuf_resize(&extra_ie, 9) == 0)
++ if (wpa_s->conf->hs20 && wpa_s->drv_max_probe_req_ie_len >= 9 &&
++ wpabuf_resize(&extra_ie, 9) == 0)
+ wpas_hs20_add_indication(extra_ie, -1, 0);
+ #endif /* CONFIG_HS20 */
+
+ #ifdef CONFIG_FST
+ if (wpa_s->fst_ies &&
++ wpa_s->drv_max_probe_req_ie_len >= wpabuf_len(wpa_s->fst_ies) &&
+ wpabuf_resize(&extra_ie, wpabuf_len(wpa_s->fst_ies)) == 0)
+ wpabuf_put_buf(extra_ie, wpa_s->fst_ies);
+ #endif /* CONFIG_FST */
+@@ -813,7 +820,8 @@ static struct wpabuf * wpa_supplicant_extra_ies(struct wpa_supplicant *wpa_s)
+ if (wpa_s->vendor_elem[VENDOR_ELEM_PROBE_REQ]) {
+ struct wpabuf *buf = wpa_s->vendor_elem[VENDOR_ELEM_PROBE_REQ];
+
+- if (wpabuf_resize(&extra_ie, wpabuf_len(buf)) == 0)
++ if (wpa_s->drv_max_probe_req_ie_len >= wpabuf_len(buf) &&
++ wpabuf_resize(&extra_ie, wpabuf_len(buf)) == 0)
+ wpabuf_put_buf(extra_ie, buf);
+ }
+
+diff --git a/wpa_supplicant/wpa_supplicant.c b/wpa_supplicant/wpa_supplicant.c
+index 037bfa3..940042f 100644
+--- a/wpa_supplicant/wpa_supplicant.c
++++ b/wpa_supplicant/wpa_supplicant.c
+@@ -7393,12 +7393,15 @@ static int wpa_supplicant_init_iface(struct wpa_supplicant *wpa_s,
+ capa.mac_addr_rand_sched_scan_supported)
+ wpa_s->mac_addr_rand_supported |=
+ (MAC_ADDR_RAND_SCHED_SCAN | MAC_ADDR_RAND_PNO);
++ wpa_s->drv_max_probe_req_ie_len = capa.max_probe_req_ie_len;
+
+ wpa_drv_get_ext_capa(wpa_s, WPA_IF_STATION);
+ if (wpa_s->extended_capa &&
+ wpa_s->extended_capa_len >= 3 &&
+ wpa_s->extended_capa[2] & 0x40)
+ wpa_s->multi_bss_support = 1;
++ } else {
++ wpa_s->drv_max_probe_req_ie_len = 1500;
+ }
+ #ifdef CONFIG_PASN
+ wpa_pasn_sm_set_caps(wpa_s->wpa, wpa_s->drv_flags2);
+diff --git a/wpa_supplicant/wpa_supplicant_i.h b/wpa_supplicant/wpa_supplicant_i.h
+index 110a864..8b7993f 100644
+--- a/wpa_supplicant/wpa_supplicant_i.h
++++ b/wpa_supplicant/wpa_supplicant_i.h
+@@ -922,6 +922,7 @@ struct wpa_supplicant {
+ unsigned int drv_enc;
+ unsigned int drv_rrm_flags;
+ unsigned int drv_max_acl_mac_addrs;
++ size_t drv_max_probe_req_ie_len;
+
+ /*
+ * A bitmap of supported protocols for probe response offload. See
+
diff --git a/net-wireless/wpa_supplicant/files/wpa_supplicant-2.6-do-not-call-dbus-functions-with-NULL-path.patch b/net-wireless/wpa_supplicant/files/wpa_supplicant-2.6-do-not-call-dbus-functions-with-NULL-path.patch
new file mode 100644
index 000000000000..0f340c9566d2
--- /dev/null
+++ b/net-wireless/wpa_supplicant/files/wpa_supplicant-2.6-do-not-call-dbus-functions-with-NULL-path.patch
@@ -0,0 +1,13 @@
+diff --git a/wpa_supplicant/dbus/dbus_new_helpers.c b/wpa_supplicant/dbus/dbus_new_helpers.c
+index 45623f3..0fc3d08 100644
+--- a/wpa_supplicant/dbus/dbus_new_helpers.c
++++ b/wpa_supplicant/dbus/dbus_new_helpers.c
+@@ -847,7 +847,7 @@ void wpa_dbus_mark_property_changed(struct wpas_dbus_priv *iface,
+ const struct wpa_dbus_property_desc *dsc;
+ int i = 0;
+
+- if (iface == NULL)
++ if (iface == NULL || path == NULL)
+ return;
+
+ dbus_connection_get_object_path_data(iface->con, path,
diff --git a/net-wireless/wpa_supplicant/files/wpa_supplicant-conf.d b/net-wireless/wpa_supplicant/files/wpa_supplicant-conf.d
new file mode 100644
index 000000000000..5381c8c748e2
--- /dev/null
+++ b/net-wireless/wpa_supplicant/files/wpa_supplicant-conf.d
@@ -0,0 +1,10 @@
+# conf.d file for wpa_supplicant
+
+# uncomment this if wpa_supplicant starts up before your network interface
+# is ready and it causes issues
+# rc_want="dev-settle"
+
+# Please check man 8 wpa_supplicant for more information about the options
+# wpa_supplicant accepts.
+#
+wpa_supplicant_args=""
diff --git a/net-wireless/wpa_supplicant/files/wpa_supplicant-init.d b/net-wireless/wpa_supplicant/files/wpa_supplicant-init.d
new file mode 100644
index 000000000000..380387a3bc75
--- /dev/null
+++ b/net-wireless/wpa_supplicant/files/wpa_supplicant-init.d
@@ -0,0 +1,70 @@
+#!/sbin/openrc-run
+# Copyright (c) 2009 Roy Marples <roy@marples.name>
+# All rights reserved. Released under the 2-clause BSD license.
+
+command=/usr/sbin/wpa_supplicant
+: ${wpa_supplicant_conf:=/etc/wpa_supplicant/wpa_supplicant.conf}
+wpa_supplicant_if=${wpa_supplicant_if:+-i}$wpa_supplicant_if
+command_args="$wpa_supplicant_args -B -c$wpa_supplicant_conf $wpa_supplicant_if"
+name="WPA Supplicant Daemon"
+
+depend()
+{
+ need localmount
+ use logger
+ after bootmisc modules
+ before dns dhcpcd net
+ keyword -shutdown
+}
+
+find_wireless()
+{
+ local iface=
+
+ case "$RC_UNAME" in
+ Linux)
+ for iface in /sys/class/net/*; do
+ if [ -e "$iface"/wireless -o \
+ -e "$iface"/phy80211 ]
+ then
+ echo "${iface##*/}"
+ return 0
+ fi
+ done
+ ;;
+ *)
+ for iface in /dev/net/* $(ifconfig -l 2>/dev/null); do
+ if ifconfig "${iface##*/}" 2>/dev/null | \
+ grep -q "[ ]*ssid "
+ then
+ echo "${iface##*/}"
+ return 0
+ fi
+ done
+ ;;
+ esac
+
+ return 1
+}
+
+append_wireless()
+{
+ local iface= i=
+
+ iface=$(find_wireless)
+ if [ -n "$iface" ]; then
+ for i in $iface; do
+ command_args="$command_args -i$i"
+ done
+ else
+ eerror "Could not find a wireless interface"
+ fi
+}
+
+start_pre()
+{
+ case " $command_args" in
+ *" -i"*) ;;
+ *) append_wireless;;
+ esac
+}
diff --git a/net-wireless/wpa_supplicant/files/wpa_supplicant.conf b/net-wireless/wpa_supplicant/files/wpa_supplicant.conf
new file mode 100644
index 000000000000..c3a29e50d9ca
--- /dev/null
+++ b/net-wireless/wpa_supplicant/files/wpa_supplicant.conf
@@ -0,0 +1,7 @@
+# This is a network block that connects to any unsecured access point.
+# We give it a low priority so any defined blocks are preferred.
+network={
+ key_mgmt=NONE
+ priority=-9999999
+}
+
diff --git a/net-wireless/wpa_supplicant/metadata.xml b/net-wireless/wpa_supplicant/metadata.xml
new file mode 100644
index 000000000000..3ef438e9b746
--- /dev/null
+++ b/net-wireless/wpa_supplicant/metadata.xml
@@ -0,0 +1,29 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE pkgmetadata SYSTEM "https://docs.baldeagleos.com/dtd/metadata.dtd">
+<pkgmetadata>
+ <maintainer type="person">
+ <email>zerochaos@gentoo.org</email>
+ <name>Rick Farina</name>
+ </maintainer>
+ <use>
+ <flag name="ap">Add support for access point mode</flag>
+ <flag name="broadcom-sta">Flag to help users disable features not supported by broadcom-sta driver</flag>
+ <flag name="eap-sim">Add support for EAP-SIM authentication algorithm</flag>
+ <flag name="eapol-test">Build and install eapol_test binary</flag>
+ <flag name="fils">Add support for Fast Initial Link Setup (802.11ai)</flag>
+ <flag name="macsec">Add support for wired macsec</flag>
+ <flag name="mbo">Add support Multiband Operation</flag>
+ <flag name="mesh">Add support for mesh mode</flag>
+ <flag name="p2p">Add support for Wi-Fi Direct mode</flag>
+ <flag name="privsep">Enable wpa_priv privledge separation binary</flag>
+ <flag name="tkip">Add support for WPA TKIP (deprecated due to security flaws in 2009)</flag>
+ <flag name="uncommon-eap-types">Add support for GPSK, SAKE, GPSK_SHA256, IKEV2 and EKE</flag>
+ <flag name="wep">Add support for Wired Equivalent Privacy (deprecated due to security flaws in 2004)</flag>
+ <flag name="wps">Add support for Wi-Fi Protected Setup</flag>
+ <flag name="smartcard">Add support for smartcards</flag>
+ </use>
+ <upstream>
+ <remote-id type="cpe">cpe:/a:wpa_supplicant:wpa_supplicant</remote-id>
+ </upstream>
+ <origin>baldeagleos-repo</origin>
+</pkgmetadata>
diff --git a/net-wireless/wpa_supplicant/wpa_supplicant-2.11-r4.ebuild b/net-wireless/wpa_supplicant/wpa_supplicant-2.11-r4.ebuild
new file mode 100644
index 000000000000..d82e3a6ed30a
--- /dev/null
+++ b/net-wireless/wpa_supplicant/wpa_supplicant-2.11-r4.ebuild
@@ -0,0 +1,452 @@
+# Copyright 1999-2025 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=8
+
+inherit desktop linux-info qmake-utils readme.gentoo-r1 systemd toolchain-funcs
+
+DESCRIPTION="IEEE 802.1X/WPA supplicant for secure wireless transfers"
+HOMEPAGE="https://w1.fi/wpa_supplicant/"
+LICENSE="|| ( GPL-2 BSD )"
+
+if [ "${PV}" = "9999" ]; then
+ inherit git-r3
+ EGIT_REPO_URI="https://w1.fi/hostap.git"
+else
+ KEYWORDS="~alpha amd64 arm arm64 ~hppa ~loong ~mips ppc ppc64 ~riscv ~sparc x86"
+ SRC_URI="https://w1.fi/releases/${P}.tar.gz"
+fi
+
+SLOT="0"
+IUSE="+ap broadcom-sta dbus eap-sim eapol-test +fils gui macsec +mbo +mesh p2p privsep readline selinux smartcard tkip uncommon-eap-types wep wps"
+
+# CONFIG_PRIVSEP=y does not have sufficient support for the new driver
+# interface functions used for MACsec, so this combination cannot be used
+# at least for now. bug #684442
+REQUIRED_USE="
+ macsec? ( !privsep )
+ mesh? ( ap )
+ p2p? ( ap wps )
+ privsep? ( !macsec )
+ broadcom-sta? ( !fils !mesh !mbo )
+"
+
+DEPEND="
+ >=dev-libs/openssl-1.0.2k:=
+ dbus? ( sys-apps/dbus )
+ kernel_linux? (
+ >=dev-libs/libnl-3.2:3
+ eap-sim? ( sys-apps/pcsc-lite )
+ )
+ !kernel_linux? ( net-libs/libpcap )
+ gui? (
+ dev-qt/qtbase:6[gui,widgets]
+ dev-qt/qtsvg:6
+ )
+ readline? (
+ sys-libs/ncurses:0=
+ sys-libs/readline:0=
+ )
+"
+RDEPEND="${DEPEND}
+ selinux? ( sec-policy/selinux-networkmanager )
+ kernel_linux? (
+ net-wireless/wireless-regdb
+ )
+"
+BDEPEND="virtual/pkgconfig"
+
+DOC_CONTENTS="
+ If this is a clean installation of wpa_supplicant, you
+ have to create a configuration file named
+ /etc/wpa_supplicant/wpa_supplicant.conf
+ An example configuration file is available for reference in
+ /usr/share/doc/${PF}/
+"
+
+S="${WORKDIR}/${P}/${PN}"
+
+Kconfig_style_config() {
+ #param 1 is CONFIG_* item
+ #param 2 is what to set it = to, defaulting in y
+ CONFIG_PARAM="${CONFIG_HEADER:-CONFIG_}$1"
+ setting="${2:-y}"
+
+ if [ ! $setting = n ]; then
+ #first remove any leading "# " if $2 is not n
+ sed -i "/^# *$CONFIG_PARAM=/s/^# *//" .config || echo "Kconfig_style_config error uncommenting $CONFIG_PARAM"
+ #set item = $setting (defaulting to y)
+ if ! sed -i "/^$CONFIG_PARAM\>/s/=.*/=$setting/" .config; then
+ echo "Kconfig_style_config error setting $CONFIG_PARAM=$setting"
+ fi
+ if [ -z "$( grep ^$CONFIG_PARAM= .config )" ] ; then
+ echo "$CONFIG_PARAM=$setting" >>.config
+ fi
+ else
+ #ensure item commented out
+ if ! sed -i "/^$CONFIG_PARAM\>/s/$CONFIG_PARAM/# $CONFIG_PARAM/" .config; then
+ echo "Kconfig_style_config error commenting $CONFIG_PARAM"
+ fi
+ fi
+}
+
+src_prepare() {
+ default
+
+ # net/bpf.h needed for net-libs/libpcap on Gentoo/FreeBSD
+ sed -i \
+ -e "s:\(#include <pcap\.h>\):#include <net/bpf.h>\n\1:" \
+ ../src/l2_packet/l2_packet_freebsd.c || die
+
+ # Change configuration to match Gentoo locations (bug #143750)
+ sed -i \
+ -e "s:/usr/lib/opensc:/usr/$(get_libdir):" \
+ -e "s:/usr/lib/pkcs11:/usr/$(get_libdir):" \
+ wpa_supplicant.conf || die
+
+ # systemd entries to D-Bus service files (bug #372877)
+ echo 'SystemdService=wpa_supplicant.service' \
+ | tee -a dbus/*.service >/dev/null || die
+
+ cd "${WORKDIR}/${P}" || die
+
+ # bug (320097)
+ eapply "${FILESDIR}/${PN}-2.6-do-not-call-dbus-functions-with-NULL-path.patch"
+
+ # bug (912315)
+ eapply "${FILESDIR}/${PN}-2.10-allow-legacy-renegotiation.patch"
+
+ # bug (948052)
+ eapply "${FILESDIR}/${PN}-2.10-use-qt6.patch"
+
+ # bug (937452)
+ eapply "${FILESDIR}/${PN}-2.11-Revert-Mark-authorization-completed-on-driver-indica.patch"
+
+ # bug (956555)
+ eapply "${FILESDIR}/${PN}-2.11-broadcom-wl-scanning.patch"
+
+ # bug (640492)
+ sed -i 's#-Werror ##' wpa_supplicant/Makefile || die
+}
+
+src_configure() {
+ # Toolchain setup
+ tc-export CC PKG_CONFIG
+
+ cp defconfig .config || die
+
+ # Basic setup
+ Kconfig_style_config CTRL_IFACE
+ Kconfig_style_config MATCH_IFACE
+ Kconfig_style_config BACKEND file
+ Kconfig_style_config IBSS_RSN
+ Kconfig_style_config IEEE80211W
+ Kconfig_style_config IEEE80211R
+ Kconfig_style_config HT_OVERRIDES
+ Kconfig_style_config VHT_OVERRIDES
+ Kconfig_style_config OCV
+ Kconfig_style_config TLSV11
+ Kconfig_style_config TLSV12
+ Kconfig_style_config GETRANDOM
+
+ # Basic authentication methods
+ # NOTE: we don't set GPSK or SAKE as they conflict
+ # with the below options
+ Kconfig_style_config EAP_GTC
+ Kconfig_style_config EAP_MD5
+ Kconfig_style_config EAP_OTP
+ Kconfig_style_config EAP_PAX
+ Kconfig_style_config EAP_PSK
+ Kconfig_style_config EAP_TLV
+ Kconfig_style_config EAP_EXE
+ Kconfig_style_config IEEE8021X_EAPOL
+ Kconfig_style_config PKCS12
+ Kconfig_style_config PEERKEY
+ Kconfig_style_config EAP_LEAP
+ Kconfig_style_config EAP_MSCHAPV2
+ Kconfig_style_config EAP_PEAP
+ Kconfig_style_config EAP_TEAP
+ Kconfig_style_config EAP_TLS
+ Kconfig_style_config EAP_TTLS
+
+ # Enabling background scanning.
+ Kconfig_style_config BGSCAN_SIMPLE
+ Kconfig_style_config BGSCAN_LEARN
+
+ if use dbus ; then
+ Kconfig_style_config CTRL_IFACE_DBUS
+ Kconfig_style_config CTRL_IFACE_DBUS_NEW
+ Kconfig_style_config CTRL_IFACE_DBUS_INTRO
+ else
+ Kconfig_style_config CTRL_IFACE_DBUS n
+ Kconfig_style_config CTRL_IFACE_DBUS_NEW n
+ Kconfig_style_config CTRL_IFACE_DBUS_INTRO n
+ fi
+
+ if use eapol-test ; then
+ Kconfig_style_config EAPOL_TEST
+ fi
+
+ # Enable support for writing debug info to a log file and syslog.
+ Kconfig_style_config DEBUG_FILE
+ Kconfig_style_config DEBUG_SYSLOG
+
+ if use mbo ; then
+ Kconfig_style_config MBO
+ else
+ Kconfig_style_config MBO n
+ fi
+
+ if use uncommon-eap-types; then
+ Kconfig_style_config EAP_GPSK
+ Kconfig_style_config EAP_SAKE
+ Kconfig_style_config EAP_GPSK_SHA256
+ Kconfig_style_config EAP_IKEV2
+ Kconfig_style_config EAP_EKE
+ fi
+
+ if use eap-sim ; then
+ # Smart card authentication
+ Kconfig_style_config EAP_SIM
+ Kconfig_style_config EAP_AKA
+ Kconfig_style_config EAP_AKA_PRIME
+ Kconfig_style_config PCSC
+ fi
+
+ if use readline ; then
+ # readline/history support for wpa_cli
+ Kconfig_style_config READLINE
+ else
+ #internal line edit mode for wpa_cli
+ Kconfig_style_config WPA_CLI_EDIT
+ fi
+
+ Kconfig_style_config TLS openssl
+ Kconfig_style_config FST
+
+ Kconfig_style_config EAP_PWD
+ if use fils; then
+ Kconfig_style_config FILS
+ Kconfig_style_config FILS_SK_PFS
+ fi
+ if use mesh; then
+ Kconfig_style_config MESH
+ else
+ Kconfig_style_config MESH n
+ fi
+ # WPA3
+ Kconfig_style_config OWE
+ Kconfig_style_config SAE
+ Kconfig_style_config DPP
+ Kconfig_style_config DPP2
+ Kconfig_style_config SUITEB192
+ Kconfig_style_config SUITEB
+
+ if use wep ; then
+ Kconfig_style_config WEP
+ else
+ Kconfig_style_config WEP n
+ fi
+
+ # Watch out, reversed logic
+ if use tkip ; then
+ Kconfig_style_config NO_TKIP n
+ else
+ Kconfig_style_config NO_TKIP
+ fi
+
+ if use smartcard ; then
+ Kconfig_style_config SMARTCARD
+ else
+ Kconfig_style_config SMARTCARD n
+ fi
+
+ if use kernel_linux ; then
+ # Linux specific drivers
+ Kconfig_style_config DRIVER_ATMEL
+ Kconfig_style_config DRIVER_HOSTAP
+ Kconfig_style_config DRIVER_IPW
+ Kconfig_style_config DRIVER_NL80211
+ Kconfig_style_config DRIVER_RALINK
+ Kconfig_style_config DRIVER_WEXT
+ Kconfig_style_config DRIVER_WIRED
+
+ if use macsec ; then
+ #requires something, no idea what
+ #Kconfig_style_config DRIVER_MACSEC_QCA
+ Kconfig_style_config DRIVER_MACSEC_LINUX
+ Kconfig_style_config MACSEC
+ else
+ # bug #831369 and bug #684442
+ Kconfig_style_config DRIVER_MACSEC_LINUX n
+ Kconfig_style_config MACSEC n
+ fi
+ fi
+
+ # Wi-Fi Protected Setup (WPS)
+ if use wps ; then
+ Kconfig_style_config WPS
+ Kconfig_style_config WPS2
+ # USB Flash Drive
+ Kconfig_style_config WPS_UFD
+ # External Registrar
+ Kconfig_style_config WPS_ER
+ # Universal Plug'n'Play
+ Kconfig_style_config WPS_UPNP
+ # Near Field Communication
+ Kconfig_style_config WPS_NFC
+ else
+ Kconfig_style_config WPS n
+ Kconfig_style_config WPS2 n
+ Kconfig_style_config WPS_UFD n
+ Kconfig_style_config WPS_ER n
+ Kconfig_style_config WPS_UPNP n
+ Kconfig_style_config WPS_NFC n
+ fi
+
+ # Wi-Fi Direct (WiDi)
+ if use p2p ; then
+ Kconfig_style_config P2P
+ Kconfig_style_config WIFI_DISPLAY
+ else
+ Kconfig_style_config P2P n
+ Kconfig_style_config WIFI_DISPLAY n
+ fi
+
+ # Access Point Mode
+ if use ap ; then
+ Kconfig_style_config AP
+ else
+ Kconfig_style_config AP n
+ fi
+
+ # Enable essentials for AP/P2P
+ if use ap || use p2p ; then
+ # Enabling HT support (802.11n)
+ Kconfig_style_config IEEE80211N
+
+ # Enabling VHT support (802.11ac)
+ Kconfig_style_config IEEE80211AC
+ fi
+
+ # Enable mitigation against certain attacks against TKIP
+ Kconfig_style_config DELAYED_MIC_ERROR_REPORT
+
+ if use privsep ; then
+ Kconfig_style_config PRIVSEP
+ fi
+
+ if use kernel_linux ; then
+ Kconfig_style_config LIBNL32
+ fi
+
+ if use gui ; then
+ pushd "${S}"/wpa_gui-qt4 > /dev/null || die
+ eqmake6 wpa_gui.pro
+ popd > /dev/null || die
+ fi
+}
+
+src_compile() {
+ einfo "Building wpa_supplicant"
+ emake V=1 BINDIR=/usr/sbin
+
+ if use gui ; then
+ einfo "Building wpa_gui"
+ emake -C "${S}"/wpa_gui-qt4
+ fi
+
+ if use eapol-test ; then
+ emake eapol_test
+ fi
+}
+
+src_install() {
+ dosbin wpa_supplicant
+ use privsep && dosbin wpa_priv
+ dobin wpa_cli wpa_passphrase
+
+ newinitd "${FILESDIR}/${PN}-init.d" wpa_supplicant
+ newconfd "${FILESDIR}/${PN}-conf.d" wpa_supplicant
+
+ exeinto /etc/wpa_supplicant/
+ newexe "${FILESDIR}/wpa_cli-r1.sh" wpa_cli.sh
+
+ readme.gentoo_create_doc
+ dodoc ChangeLog {eap_testing,todo}.txt README{,-WPS} \
+ wpa_supplicant.conf
+
+ newdoc .config build-config
+
+ if [ "${PV}" != "9999" ]; then
+ doman doc/docbook/*.{5,8}
+ fi
+
+ if use gui ; then
+ into /usr
+ dobin wpa_gui-qt4/wpa_gui
+ doicon wpa_gui-qt4/icons/wpa_gui.svg
+ domenu wpa_gui-qt4/wpa_gui.desktop
+ else
+ rm "${ED}"/usr/share/man/man8/wpa_gui.8
+ fi
+
+ if use dbus ; then
+ pushd "${S}"/dbus > /dev/null || die
+ insinto /etc/dbus-1/system.d
+ newins dbus-wpa_supplicant.conf wpa_supplicant.conf
+ insinto /usr/share/dbus-1/system-services
+ doins fi.w1.wpa_supplicant1.service
+ popd > /dev/null || die
+
+ # This unit relies on dbus support, bug 538600.
+ systemd_dounit systemd/wpa_supplicant.service
+ fi
+
+ if use eapol-test ; then
+ dobin eapol_test
+ fi
+
+ systemd_dounit "systemd/wpa_supplicant@.service"
+ systemd_dounit "systemd/wpa_supplicant-nl80211@.service"
+ systemd_dounit "systemd/wpa_supplicant-wired@.service"
+}
+
+pkg_postinst() {
+ readme.gentoo_print_elog
+
+ if [[ -e "${EROOT}"/etc/wpa_supplicant.conf ]] ; then
+ echo
+ ewarn "WARNING: your old configuration file ${EROOT}/etc/wpa_supplicant.conf"
+ ewarn "needs to be moved to ${EROOT}/etc/wpa_supplicant/wpa_supplicant.conf"
+ fi
+ if ! use wep; then
+ einfo "WARNING: You are building with WEP support disabled, which is recommended since"
+ einfo "this protocol is deprecated and insecure. If you still need to connect to"
+ einfo "WEP-enabled networks, you may turn this flag back on. With this flag off,"
+ einfo "WEP-enabled networks will not even show up as available."
+ einfo "If your network is missing you may wish to USE=wep"
+ fi
+ if ! use tkip; then
+ ewarn "WARNING: You are building with TKIP support disabled, which is recommended since"
+ ewarn "this protocol is deprecated and insecure. If you still need to connect to"
+ ewarn "TKIP-enabled networks, you may turn this flag back on. With this flag off,"
+ ewarn "TKIP-enabled networks, including mixed mode TKIP/AES-CCMP will not even show up"
+ ewarn "as available. If your network is missing you may wish to USE=tkip"
+ fi
+
+ # Mea culpa, feel free to remove that after some time --mgorny.
+ local fn
+ for fn in wpa_supplicant{,@wlan0}.service; do
+ if [[ -e "${EROOT}"/etc/systemd/system/network.target.wants/${fn} ]]
+ then
+ ebegin "Moving ${fn} to multi-user.target"
+ mv "${EROOT}"/etc/systemd/system/network.target.wants/${fn} \
+ "${EROOT}"/etc/systemd/system/multi-user.target.wants/ || die
+ eend ${?} \
+ "Please try to re-enable ${fn}"
+ fi
+ done
+
+ systemd_reenable wpa_supplicant.service
+}
diff --git a/net-wireless/wpa_supplicant/wpa_supplicant-2.11-r5.ebuild b/net-wireless/wpa_supplicant/wpa_supplicant-2.11-r5.ebuild
new file mode 100644
index 000000000000..7ab0c4adf82d
--- /dev/null
+++ b/net-wireless/wpa_supplicant/wpa_supplicant-2.11-r5.ebuild
@@ -0,0 +1,455 @@
+# Copyright 1999-2026 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=8
+
+inherit desktop linux-info qmake-utils readme.gentoo-r1 systemd toolchain-funcs
+
+DESCRIPTION="IEEE 802.1X/WPA supplicant for secure wireless transfers"
+HOMEPAGE="https://w1.fi/wpa_supplicant/"
+LICENSE="|| ( GPL-2 BSD )"
+
+if [ "${PV}" = "9999" ]; then
+ inherit git-r3
+ EGIT_REPO_URI="https://w1.fi/hostap.git"
+else
+ KEYWORDS="~alpha ~amd64 ~arm ~arm64 ~hppa ~loong ~mips ~ppc ~ppc64 ~riscv ~sparc ~x86"
+ SRC_URI="https://w1.fi/releases/${P}.tar.gz"
+fi
+
+SLOT="0"
+IUSE="+ap broadcom-sta dbus eap-sim eapol-test +fils gui macsec +mbo +mesh p2p privsep readline selinux smartcard tkip uncommon-eap-types wep wps"
+
+# CONFIG_PRIVSEP=y does not have sufficient support for the new driver
+# interface functions used for MACsec, so this combination cannot be used
+# at least for now. bug #684442
+REQUIRED_USE="
+ macsec? ( !privsep )
+ mesh? ( ap )
+ p2p? ( ap wps )
+ privsep? ( !macsec )
+ broadcom-sta? ( !fils !mesh !mbo )
+"
+
+DEPEND="
+ >=dev-libs/openssl-1.0.2k:=
+ dbus? ( sys-apps/dbus )
+ kernel_linux? (
+ >=dev-libs/libnl-3.2:3
+ eap-sim? ( sys-apps/pcsc-lite )
+ )
+ !kernel_linux? ( net-libs/libpcap )
+ gui? (
+ dev-qt/qtbase:6[gui,widgets]
+ dev-qt/qtsvg:6
+ )
+ readline? (
+ sys-libs/ncurses:0=
+ sys-libs/readline:0=
+ )
+"
+RDEPEND="${DEPEND}
+ selinux? ( sec-policy/selinux-networkmanager )
+ kernel_linux? (
+ net-wireless/wireless-regdb
+ )
+"
+BDEPEND="virtual/pkgconfig"
+
+DOC_CONTENTS="
+ If this is a clean installation of wpa_supplicant, you
+ have to create a configuration file named
+ /etc/wpa_supplicant/wpa_supplicant.conf
+ An example configuration file is available for reference in
+ /usr/share/doc/${PF}/
+"
+
+S="${WORKDIR}/${P}/${PN}"
+
+Kconfig_style_config() {
+ #param 1 is CONFIG_* item
+ #param 2 is what to set it = to, defaulting in y
+ CONFIG_PARAM="${CONFIG_HEADER:-CONFIG_}$1"
+ setting="${2:-y}"
+
+ if [ ! $setting = n ]; then
+ #first remove any leading "# " if $2 is not n
+ sed -i "/^# *$CONFIG_PARAM=/s/^# *//" .config || echo "Kconfig_style_config error uncommenting $CONFIG_PARAM"
+ #set item = $setting (defaulting to y)
+ if ! sed -i "/^$CONFIG_PARAM\>/s/=.*/=$setting/" .config; then
+ echo "Kconfig_style_config error setting $CONFIG_PARAM=$setting"
+ fi
+ if [ -z "$( grep ^$CONFIG_PARAM= .config )" ] ; then
+ echo "$CONFIG_PARAM=$setting" >>.config
+ fi
+ else
+ #ensure item commented out
+ if ! sed -i "/^$CONFIG_PARAM\>/s/$CONFIG_PARAM/# $CONFIG_PARAM/" .config; then
+ echo "Kconfig_style_config error commenting $CONFIG_PARAM"
+ fi
+ fi
+}
+
+src_prepare() {
+ default
+
+ # net/bpf.h needed for net-libs/libpcap on Gentoo/FreeBSD
+ sed -i \
+ -e "s:\(#include <pcap\.h>\):#include <net/bpf.h>\n\1:" \
+ ../src/l2_packet/l2_packet_freebsd.c || die
+
+ # Change configuration to match Gentoo locations (bug #143750)
+ sed -i \
+ -e "s:/usr/lib/opensc:/usr/$(get_libdir):" \
+ -e "s:/usr/lib/pkcs11:/usr/$(get_libdir):" \
+ wpa_supplicant.conf || die
+
+ # systemd entries to D-Bus service files (bug #372877)
+ echo 'SystemdService=wpa_supplicant.service' \
+ | tee -a dbus/*.service >/dev/null || die
+
+ cd "${WORKDIR}/${P}" || die
+
+ # bug (320097)
+ eapply "${FILESDIR}/${PN}-2.6-do-not-call-dbus-functions-with-NULL-path.patch"
+
+ # bug (912315)
+ eapply "${FILESDIR}/${PN}-2.10-allow-legacy-renegotiation.patch"
+
+ # bug (948052)
+ eapply "${FILESDIR}/${PN}-2.10-use-qt6.patch"
+
+ # bug (937452)
+ eapply "${FILESDIR}/${PN}-2.11-Revert-Mark-authorization-completed-on-driver-indica.patch"
+
+ # bug (956555)
+ eapply "${FILESDIR}/${PN}-2.11-broadcom-wl-scanning.patch"
+
+ # bug (971605)
+ eapply "${FILESDIR}/${PN}-2.11-Send-CTRL-EVENT-SIGNAL-CHANGE-message-to-control-interfaces-only.patch"
+
+ # bug (640492)
+ sed -i 's#-Werror ##' wpa_supplicant/Makefile || die
+}
+
+src_configure() {
+ # Toolchain setup
+ tc-export CC PKG_CONFIG
+
+ cp defconfig .config || die
+
+ # Basic setup
+ Kconfig_style_config CTRL_IFACE
+ Kconfig_style_config MATCH_IFACE
+ Kconfig_style_config BACKEND file
+ Kconfig_style_config IBSS_RSN
+ Kconfig_style_config IEEE80211W
+ Kconfig_style_config IEEE80211R
+ Kconfig_style_config HT_OVERRIDES
+ Kconfig_style_config VHT_OVERRIDES
+ Kconfig_style_config OCV
+ Kconfig_style_config TLSV11
+ Kconfig_style_config TLSV12
+ Kconfig_style_config GETRANDOM
+
+ # Basic authentication methods
+ # NOTE: we don't set GPSK or SAKE as they conflict
+ # with the below options
+ Kconfig_style_config EAP_GTC
+ Kconfig_style_config EAP_MD5
+ Kconfig_style_config EAP_OTP
+ Kconfig_style_config EAP_PAX
+ Kconfig_style_config EAP_PSK
+ Kconfig_style_config EAP_TLV
+ Kconfig_style_config EAP_EXE
+ Kconfig_style_config IEEE8021X_EAPOL
+ Kconfig_style_config PKCS12
+ Kconfig_style_config PEERKEY
+ Kconfig_style_config EAP_LEAP
+ Kconfig_style_config EAP_MSCHAPV2
+ Kconfig_style_config EAP_PEAP
+ Kconfig_style_config EAP_TEAP
+ Kconfig_style_config EAP_TLS
+ Kconfig_style_config EAP_TTLS
+
+ # Enabling background scanning.
+ Kconfig_style_config BGSCAN_SIMPLE
+ Kconfig_style_config BGSCAN_LEARN
+
+ if use dbus ; then
+ Kconfig_style_config CTRL_IFACE_DBUS
+ Kconfig_style_config CTRL_IFACE_DBUS_NEW
+ Kconfig_style_config CTRL_IFACE_DBUS_INTRO
+ else
+ Kconfig_style_config CTRL_IFACE_DBUS n
+ Kconfig_style_config CTRL_IFACE_DBUS_NEW n
+ Kconfig_style_config CTRL_IFACE_DBUS_INTRO n
+ fi
+
+ if use eapol-test ; then
+ Kconfig_style_config EAPOL_TEST
+ fi
+
+ # Enable support for writing debug info to a log file and syslog.
+ Kconfig_style_config DEBUG_FILE
+ Kconfig_style_config DEBUG_SYSLOG
+
+ if use mbo ; then
+ Kconfig_style_config MBO
+ else
+ Kconfig_style_config MBO n
+ fi
+
+ if use uncommon-eap-types; then
+ Kconfig_style_config EAP_GPSK
+ Kconfig_style_config EAP_SAKE
+ Kconfig_style_config EAP_GPSK_SHA256
+ Kconfig_style_config EAP_IKEV2
+ Kconfig_style_config EAP_EKE
+ fi
+
+ if use eap-sim ; then
+ # Smart card authentication
+ Kconfig_style_config EAP_SIM
+ Kconfig_style_config EAP_AKA
+ Kconfig_style_config EAP_AKA_PRIME
+ Kconfig_style_config PCSC
+ fi
+
+ if use readline ; then
+ # readline/history support for wpa_cli
+ Kconfig_style_config READLINE
+ else
+ #internal line edit mode for wpa_cli
+ Kconfig_style_config WPA_CLI_EDIT
+ fi
+
+ Kconfig_style_config TLS openssl
+ Kconfig_style_config FST
+
+ Kconfig_style_config EAP_PWD
+ if use fils; then
+ Kconfig_style_config FILS
+ Kconfig_style_config FILS_SK_PFS
+ fi
+ if use mesh; then
+ Kconfig_style_config MESH
+ else
+ Kconfig_style_config MESH n
+ fi
+ # WPA3
+ Kconfig_style_config OWE
+ Kconfig_style_config SAE
+ Kconfig_style_config DPP
+ Kconfig_style_config DPP2
+ Kconfig_style_config SUITEB192
+ Kconfig_style_config SUITEB
+
+ if use wep ; then
+ Kconfig_style_config WEP
+ else
+ Kconfig_style_config WEP n
+ fi
+
+ # Watch out, reversed logic
+ if use tkip ; then
+ Kconfig_style_config NO_TKIP n
+ else
+ Kconfig_style_config NO_TKIP
+ fi
+
+ if use smartcard ; then
+ Kconfig_style_config SMARTCARD
+ else
+ Kconfig_style_config SMARTCARD n
+ fi
+
+ if use kernel_linux ; then
+ # Linux specific drivers
+ Kconfig_style_config DRIVER_ATMEL
+ Kconfig_style_config DRIVER_HOSTAP
+ Kconfig_style_config DRIVER_IPW
+ Kconfig_style_config DRIVER_NL80211
+ Kconfig_style_config DRIVER_RALINK
+ Kconfig_style_config DRIVER_WEXT
+ Kconfig_style_config DRIVER_WIRED
+
+ if use macsec ; then
+ #requires something, no idea what
+ #Kconfig_style_config DRIVER_MACSEC_QCA
+ Kconfig_style_config DRIVER_MACSEC_LINUX
+ Kconfig_style_config MACSEC
+ else
+ # bug #831369 and bug #684442
+ Kconfig_style_config DRIVER_MACSEC_LINUX n
+ Kconfig_style_config MACSEC n
+ fi
+ fi
+
+ # Wi-Fi Protected Setup (WPS)
+ if use wps ; then
+ Kconfig_style_config WPS
+ Kconfig_style_config WPS2
+ # USB Flash Drive
+ Kconfig_style_config WPS_UFD
+ # External Registrar
+ Kconfig_style_config WPS_ER
+ # Universal Plug'n'Play
+ Kconfig_style_config WPS_UPNP
+ # Near Field Communication
+ Kconfig_style_config WPS_NFC
+ else
+ Kconfig_style_config WPS n
+ Kconfig_style_config WPS2 n
+ Kconfig_style_config WPS_UFD n
+ Kconfig_style_config WPS_ER n
+ Kconfig_style_config WPS_UPNP n
+ Kconfig_style_config WPS_NFC n
+ fi
+
+ # Wi-Fi Direct (WiDi)
+ if use p2p ; then
+ Kconfig_style_config P2P
+ Kconfig_style_config WIFI_DISPLAY
+ else
+ Kconfig_style_config P2P n
+ Kconfig_style_config WIFI_DISPLAY n
+ fi
+
+ # Access Point Mode
+ if use ap ; then
+ Kconfig_style_config AP
+ else
+ Kconfig_style_config AP n
+ fi
+
+ # Enable essentials for AP/P2P
+ if use ap || use p2p ; then
+ # Enabling HT support (802.11n)
+ Kconfig_style_config IEEE80211N
+
+ # Enabling VHT support (802.11ac)
+ Kconfig_style_config IEEE80211AC
+ fi
+
+ # Enable mitigation against certain attacks against TKIP
+ Kconfig_style_config DELAYED_MIC_ERROR_REPORT
+
+ if use privsep ; then
+ Kconfig_style_config PRIVSEP
+ fi
+
+ if use kernel_linux ; then
+ Kconfig_style_config LIBNL32
+ fi
+
+ if use gui ; then
+ pushd "${S}"/wpa_gui-qt4 > /dev/null || die
+ eqmake6 wpa_gui.pro
+ popd > /dev/null || die
+ fi
+}
+
+src_compile() {
+ einfo "Building wpa_supplicant"
+ emake V=1 BINDIR=/usr/sbin
+
+ if use gui ; then
+ einfo "Building wpa_gui"
+ emake -C "${S}"/wpa_gui-qt4
+ fi
+
+ if use eapol-test ; then
+ emake eapol_test
+ fi
+}
+
+src_install() {
+ dosbin wpa_supplicant
+ use privsep && dosbin wpa_priv
+ dobin wpa_cli wpa_passphrase
+
+ newinitd "${FILESDIR}/${PN}-init.d" wpa_supplicant
+ newconfd "${FILESDIR}/${PN}-conf.d" wpa_supplicant
+
+ exeinto /etc/wpa_supplicant/
+ newexe "${FILESDIR}/wpa_cli-r1.sh" wpa_cli.sh
+
+ readme.gentoo_create_doc
+ dodoc ChangeLog {eap_testing,todo}.txt README{,-WPS} \
+ wpa_supplicant.conf
+
+ newdoc .config build-config
+
+ if [ "${PV}" != "9999" ]; then
+ doman doc/docbook/*.{5,8}
+ fi
+
+ if use gui ; then
+ into /usr
+ dobin wpa_gui-qt4/wpa_gui
+ doicon wpa_gui-qt4/icons/wpa_gui.svg
+ domenu wpa_gui-qt4/wpa_gui.desktop
+ else
+ rm "${ED}"/usr/share/man/man8/wpa_gui.8
+ fi
+
+ if use dbus ; then
+ pushd "${S}"/dbus > /dev/null || die
+ insinto /etc/dbus-1/system.d
+ newins dbus-wpa_supplicant.conf wpa_supplicant.conf
+ insinto /usr/share/dbus-1/system-services
+ doins fi.w1.wpa_supplicant1.service
+ popd > /dev/null || die
+
+ # This unit relies on dbus support, bug 538600.
+ systemd_dounit systemd/wpa_supplicant.service
+ fi
+
+ if use eapol-test ; then
+ dobin eapol_test
+ fi
+
+ systemd_dounit "systemd/wpa_supplicant@.service"
+ systemd_dounit "systemd/wpa_supplicant-nl80211@.service"
+ systemd_dounit "systemd/wpa_supplicant-wired@.service"
+}
+
+pkg_postinst() {
+ readme.gentoo_print_elog
+
+ if [[ -e "${EROOT}"/etc/wpa_supplicant.conf ]] ; then
+ echo
+ ewarn "WARNING: your old configuration file ${EROOT}/etc/wpa_supplicant.conf"
+ ewarn "needs to be moved to ${EROOT}/etc/wpa_supplicant/wpa_supplicant.conf"
+ fi
+ if ! use wep; then
+ einfo "WARNING: You are building with WEP support disabled, which is recommended since"
+ einfo "this protocol is deprecated and insecure. If you still need to connect to"
+ einfo "WEP-enabled networks, you may turn this flag back on. With this flag off,"
+ einfo "WEP-enabled networks will not even show up as available."
+ einfo "If your network is missing you may wish to USE=wep"
+ fi
+ if ! use tkip; then
+ ewarn "WARNING: You are building with TKIP support disabled, which is recommended since"
+ ewarn "this protocol is deprecated and insecure. If you still need to connect to"
+ ewarn "TKIP-enabled networks, you may turn this flag back on. With this flag off,"
+ ewarn "TKIP-enabled networks, including mixed mode TKIP/AES-CCMP will not even show up"
+ ewarn "as available. If your network is missing you may wish to USE=tkip"
+ fi
+
+ # Mea culpa, feel free to remove that after some time --mgorny.
+ local fn
+ for fn in wpa_supplicant{,@wlan0}.service; do
+ if [[ -e "${EROOT}"/etc/systemd/system/network.target.wants/${fn} ]]
+ then
+ ebegin "Moving ${fn} to multi-user.target"
+ mv "${EROOT}"/etc/systemd/system/network.target.wants/${fn} \
+ "${EROOT}"/etc/systemd/system/multi-user.target.wants/ || die
+ eend ${?} \
+ "Please try to re-enable ${fn}"
+ fi
+ done
+
+ systemd_reenable wpa_supplicant.service
+}
diff --git a/net-wireless/wpa_supplicant/wpa_supplicant-9999.ebuild b/net-wireless/wpa_supplicant/wpa_supplicant-9999.ebuild
new file mode 100644
index 000000000000..87f3a99dc0d3
--- /dev/null
+++ b/net-wireless/wpa_supplicant/wpa_supplicant-9999.ebuild
@@ -0,0 +1,446 @@
+# Copyright 1999-2025 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=8
+
+inherit desktop linux-info qmake-utils readme.gentoo-r1 systemd toolchain-funcs
+
+DESCRIPTION="IEEE 802.1X/WPA supplicant for secure wireless transfers"
+HOMEPAGE="https://w1.fi/wpa_supplicant/"
+LICENSE="|| ( GPL-2 BSD )"
+
+if [ "${PV}" = "9999" ]; then
+ inherit git-r3
+ EGIT_REPO_URI="https://w1.fi/hostap.git"
+else
+ KEYWORDS="~alpha ~amd64 ~arm ~arm64 ~hppa ~loong ~mips ~ppc ~ppc64 ~riscv ~sparc ~x86"
+ SRC_URI="https://w1.fi/releases/${P}.tar.gz"
+fi
+
+SLOT="0"
+IUSE="+ap broadcom-sta dbus eap-sim eapol-test +fils gui macsec +mbo +mesh p2p privsep readline selinux smartcard tkip uncommon-eap-types wep wps"
+
+# CONFIG_PRIVSEP=y does not have sufficient support for the new driver
+# interface functions used for MACsec, so this combination cannot be used
+# at least for now. bug #684442
+REQUIRED_USE="
+ macsec? ( !privsep )
+ mesh? ( ap )
+ p2p? ( ap wps )
+ privsep? ( !macsec )
+ broadcom-sta? ( !fils !mesh !mbo )
+"
+
+DEPEND="
+ >=dev-libs/openssl-1.0.2k:=
+ dbus? ( sys-apps/dbus )
+ kernel_linux? (
+ >=dev-libs/libnl-3.2:3
+ eap-sim? ( sys-apps/pcsc-lite )
+ )
+ !kernel_linux? ( net-libs/libpcap )
+ gui? (
+ dev-qt/qtbase:6[gui,widgets]
+ dev-qt/qtsvg:6
+ )
+ readline? (
+ sys-libs/ncurses:0=
+ sys-libs/readline:0=
+ )
+"
+RDEPEND="${DEPEND}
+ selinux? ( sec-policy/selinux-networkmanager )
+ kernel_linux? (
+ net-wireless/wireless-regdb
+ )
+"
+BDEPEND="virtual/pkgconfig"
+
+DOC_CONTENTS="
+ If this is a clean installation of wpa_supplicant, you
+ have to create a configuration file named
+ /etc/wpa_supplicant/wpa_supplicant.conf
+ An example configuration file is available for reference in
+ /usr/share/doc/${PF}/
+"
+
+S="${WORKDIR}/${P}/${PN}"
+
+Kconfig_style_config() {
+ #param 1 is CONFIG_* item
+ #param 2 is what to set it = to, defaulting in y
+ CONFIG_PARAM="${CONFIG_HEADER:-CONFIG_}$1"
+ setting="${2:-y}"
+
+ if [ ! $setting = n ]; then
+ #first remove any leading "# " if $2 is not n
+ sed -i "/^# *$CONFIG_PARAM=/s/^# *//" .config || echo "Kconfig_style_config error uncommenting $CONFIG_PARAM"
+ #set item = $setting (defaulting to y)
+ if ! sed -i "/^$CONFIG_PARAM\>/s/=.*/=$setting/" .config; then
+ echo "Kconfig_style_config error setting $CONFIG_PARAM=$setting"
+ fi
+ if [ -z "$( grep ^$CONFIG_PARAM= .config )" ] ; then
+ echo "$CONFIG_PARAM=$setting" >>.config
+ fi
+ else
+ #ensure item commented out
+ if ! sed -i "/^$CONFIG_PARAM\>/s/$CONFIG_PARAM/# $CONFIG_PARAM/" .config; then
+ echo "Kconfig_style_config error commenting $CONFIG_PARAM"
+ fi
+ fi
+}
+
+src_prepare() {
+ default
+
+ # net/bpf.h needed for net-libs/libpcap on Gentoo/FreeBSD
+ sed -i \
+ -e "s:\(#include <pcap\.h>\):#include <net/bpf.h>\n\1:" \
+ ../src/l2_packet/l2_packet_freebsd.c || die
+
+ # Change configuration to match Gentoo locations (bug #143750)
+ sed -i \
+ -e "s:/usr/lib/opensc:/usr/$(get_libdir):" \
+ -e "s:/usr/lib/pkcs11:/usr/$(get_libdir):" \
+ wpa_supplicant.conf || die
+
+ # systemd entries to D-Bus service files (bug #372877)
+ echo 'SystemdService=wpa_supplicant.service' \
+ | tee -a dbus/*.service >/dev/null || die
+
+ cd "${WORKDIR}/${P}" || die
+
+ # bug (320097)
+ eapply "${FILESDIR}/${PN}-2.6-do-not-call-dbus-functions-with-NULL-path.patch"
+
+ # bug (912315)
+ eapply "${FILESDIR}/${PN}-2.10-allow-legacy-renegotiation.patch"
+
+ # bug (948052)
+ eapply "${FILESDIR}/${PN}-2.10-use-qt6.patch"
+
+ # bug (640492)
+ sed -i 's#-Werror ##' wpa_supplicant/Makefile || die
+}
+
+src_configure() {
+ # Toolchain setup
+ tc-export CC PKG_CONFIG
+
+ cp defconfig .config || die
+
+ # Basic setup
+ Kconfig_style_config CTRL_IFACE
+ Kconfig_style_config MATCH_IFACE
+ Kconfig_style_config BACKEND file
+ Kconfig_style_config IBSS_RSN
+ Kconfig_style_config IEEE80211W
+ Kconfig_style_config IEEE80211R
+ Kconfig_style_config HT_OVERRIDES
+ Kconfig_style_config VHT_OVERRIDES
+ Kconfig_style_config OCV
+ Kconfig_style_config TLSV11
+ Kconfig_style_config TLSV12
+ Kconfig_style_config GETRANDOM
+
+ # Basic authentication methods
+ # NOTE: we don't set GPSK or SAKE as they conflict
+ # with the below options
+ Kconfig_style_config EAP_GTC
+ Kconfig_style_config EAP_MD5
+ Kconfig_style_config EAP_OTP
+ Kconfig_style_config EAP_PAX
+ Kconfig_style_config EAP_PSK
+ Kconfig_style_config EAP_TLV
+ Kconfig_style_config EAP_EXE
+ Kconfig_style_config IEEE8021X_EAPOL
+ Kconfig_style_config PKCS12
+ Kconfig_style_config PEERKEY
+ Kconfig_style_config EAP_LEAP
+ Kconfig_style_config EAP_MSCHAPV2
+ Kconfig_style_config EAP_PEAP
+ Kconfig_style_config EAP_TEAP
+ Kconfig_style_config EAP_TLS
+ Kconfig_style_config EAP_TTLS
+
+ # Enabling background scanning.
+ Kconfig_style_config BGSCAN_SIMPLE
+ Kconfig_style_config BGSCAN_LEARN
+
+ if use dbus ; then
+ Kconfig_style_config CTRL_IFACE_DBUS
+ Kconfig_style_config CTRL_IFACE_DBUS_NEW
+ Kconfig_style_config CTRL_IFACE_DBUS_INTRO
+ else
+ Kconfig_style_config CTRL_IFACE_DBUS n
+ Kconfig_style_config CTRL_IFACE_DBUS_NEW n
+ Kconfig_style_config CTRL_IFACE_DBUS_INTRO n
+ fi
+
+ if use eapol-test ; then
+ Kconfig_style_config EAPOL_TEST
+ fi
+
+ # Enable support for writing debug info to a log file and syslog.
+ Kconfig_style_config DEBUG_FILE
+ Kconfig_style_config DEBUG_SYSLOG
+
+ if use mbo ; then
+ Kconfig_style_config MBO
+ else
+ Kconfig_style_config MBO n
+ fi
+
+ if use uncommon-eap-types; then
+ Kconfig_style_config EAP_GPSK
+ Kconfig_style_config EAP_SAKE
+ Kconfig_style_config EAP_GPSK_SHA256
+ Kconfig_style_config EAP_IKEV2
+ Kconfig_style_config EAP_EKE
+ fi
+
+ if use eap-sim ; then
+ # Smart card authentication
+ Kconfig_style_config EAP_SIM
+ Kconfig_style_config EAP_AKA
+ Kconfig_style_config EAP_AKA_PRIME
+ Kconfig_style_config PCSC
+ fi
+
+ if use readline ; then
+ # readline/history support for wpa_cli
+ Kconfig_style_config READLINE
+ else
+ #internal line edit mode for wpa_cli
+ Kconfig_style_config WPA_CLI_EDIT
+ fi
+
+ Kconfig_style_config TLS openssl
+ Kconfig_style_config FST
+
+ Kconfig_style_config EAP_PWD
+ if use fils; then
+ Kconfig_style_config FILS
+ Kconfig_style_config FILS_SK_PFS
+ fi
+ if use mesh; then
+ Kconfig_style_config MESH
+ else
+ Kconfig_style_config MESH n
+ fi
+ # WPA3
+ Kconfig_style_config OWE
+ Kconfig_style_config SAE
+ Kconfig_style_config DPP
+ Kconfig_style_config DPP2
+ Kconfig_style_config SUITEB192
+ Kconfig_style_config SUITEB
+
+ if use wep ; then
+ Kconfig_style_config WEP
+ else
+ Kconfig_style_config WEP n
+ fi
+
+ # Watch out, reversed logic
+ if use tkip ; then
+ Kconfig_style_config NO_TKIP n
+ else
+ Kconfig_style_config NO_TKIP
+ fi
+
+ if use smartcard ; then
+ Kconfig_style_config SMARTCARD
+ else
+ Kconfig_style_config SMARTCARD n
+ fi
+
+ if use kernel_linux ; then
+ # Linux specific drivers
+ Kconfig_style_config DRIVER_ATMEL
+ Kconfig_style_config DRIVER_HOSTAP
+ Kconfig_style_config DRIVER_IPW
+ Kconfig_style_config DRIVER_NL80211
+ Kconfig_style_config DRIVER_RALINK
+ Kconfig_style_config DRIVER_WEXT
+ Kconfig_style_config DRIVER_WIRED
+
+ if use macsec ; then
+ #requires something, no idea what
+ #Kconfig_style_config DRIVER_MACSEC_QCA
+ Kconfig_style_config DRIVER_MACSEC_LINUX
+ Kconfig_style_config MACSEC
+ else
+ # bug #831369 and bug #684442
+ Kconfig_style_config DRIVER_MACSEC_LINUX n
+ Kconfig_style_config MACSEC n
+ fi
+ fi
+
+ # Wi-Fi Protected Setup (WPS)
+ if use wps ; then
+ Kconfig_style_config WPS
+ Kconfig_style_config WPS2
+ # USB Flash Drive
+ Kconfig_style_config WPS_UFD
+ # External Registrar
+ Kconfig_style_config WPS_ER
+ # Universal Plug'n'Play
+ Kconfig_style_config WPS_UPNP
+ # Near Field Communication
+ Kconfig_style_config WPS_NFC
+ else
+ Kconfig_style_config WPS n
+ Kconfig_style_config WPS2 n
+ Kconfig_style_config WPS_UFD n
+ Kconfig_style_config WPS_ER n
+ Kconfig_style_config WPS_UPNP n
+ Kconfig_style_config WPS_NFC n
+ fi
+
+ # Wi-Fi Direct (WiDi)
+ if use p2p ; then
+ Kconfig_style_config P2P
+ Kconfig_style_config WIFI_DISPLAY
+ else
+ Kconfig_style_config P2P n
+ Kconfig_style_config WIFI_DISPLAY n
+ fi
+
+ # Access Point Mode
+ if use ap ; then
+ Kconfig_style_config AP
+ else
+ Kconfig_style_config AP n
+ fi
+
+ # Enable essentials for AP/P2P
+ if use ap || use p2p ; then
+ # Enabling HT support (802.11n)
+ Kconfig_style_config IEEE80211N
+
+ # Enabling VHT support (802.11ac)
+ Kconfig_style_config IEEE80211AC
+ fi
+
+ # Enable mitigation against certain attacks against TKIP
+ Kconfig_style_config DELAYED_MIC_ERROR_REPORT
+
+ if use privsep ; then
+ Kconfig_style_config PRIVSEP
+ fi
+
+ if use kernel_linux ; then
+ Kconfig_style_config LIBNL32
+ fi
+
+ if use gui ; then
+ pushd "${S}"/wpa_gui-qt4 > /dev/null || die
+ eqmake6 wpa_gui.pro
+ popd > /dev/null || die
+ fi
+}
+
+src_compile() {
+ einfo "Building wpa_supplicant"
+ emake V=1 BINDIR=/usr/sbin
+
+ if use gui ; then
+ einfo "Building wpa_gui"
+ emake -C "${S}"/wpa_gui-qt4
+ fi
+
+ if use eapol-test ; then
+ emake eapol_test
+ fi
+}
+
+src_install() {
+ dosbin wpa_supplicant
+ use privsep && dosbin wpa_priv
+ dobin wpa_cli wpa_passphrase
+
+ newinitd "${FILESDIR}/${PN}-init.d" wpa_supplicant
+ newconfd "${FILESDIR}/${PN}-conf.d" wpa_supplicant
+
+ exeinto /etc/wpa_supplicant/
+ newexe "${FILESDIR}/wpa_cli-r1.sh" wpa_cli.sh
+
+ readme.gentoo_create_doc
+ dodoc ChangeLog {eap_testing,todo}.txt README{,-WPS} \
+ wpa_supplicant.conf
+
+ newdoc .config build-config
+
+ if [ "${PV}" != "9999" ]; then
+ doman doc/docbook/*.{5,8}
+ fi
+
+ if use gui ; then
+ into /usr
+ dobin wpa_gui-qt4/wpa_gui
+ doicon wpa_gui-qt4/icons/wpa_gui.svg
+ domenu wpa_gui-qt4/wpa_gui.desktop
+ else
+ rm "${ED}"/usr/share/man/man8/wpa_gui.8
+ fi
+
+ if use dbus ; then
+ pushd "${S}"/dbus > /dev/null || die
+ insinto /etc/dbus-1/system.d
+ newins dbus-wpa_supplicant.conf wpa_supplicant.conf
+ insinto /usr/share/dbus-1/system-services
+ doins fi.w1.wpa_supplicant1.service
+ popd > /dev/null || die
+
+ # This unit relies on dbus support, bug 538600.
+ systemd_dounit systemd/wpa_supplicant.service
+ fi
+
+ if use eapol-test ; then
+ dobin eapol_test
+ fi
+
+ systemd_dounit "systemd/wpa_supplicant@.service"
+ systemd_dounit "systemd/wpa_supplicant-nl80211@.service"
+ systemd_dounit "systemd/wpa_supplicant-wired@.service"
+}
+
+pkg_postinst() {
+ readme.gentoo_print_elog
+
+ if [[ -e "${EROOT}"/etc/wpa_supplicant.conf ]] ; then
+ echo
+ ewarn "WARNING: your old configuration file ${EROOT}/etc/wpa_supplicant.conf"
+ ewarn "needs to be moved to ${EROOT}/etc/wpa_supplicant/wpa_supplicant.conf"
+ fi
+ if ! use wep; then
+ einfo "WARNING: You are building with WEP support disabled, which is recommended since"
+ einfo "this protocol is deprecated and insecure. If you still need to connect to"
+ einfo "WEP-enabled networks, you may turn this flag back on. With this flag off,"
+ einfo "WEP-enabled networks will not even show up as available."
+ einfo "If your network is missing you may wish to USE=wep"
+ fi
+ if ! use tkip; then
+ ewarn "WARNING: You are building with TKIP support disabled, which is recommended since"
+ ewarn "this protocol is deprecated and insecure. If you still need to connect to"
+ ewarn "TKIP-enabled networks, you may turn this flag back on. With this flag off,"
+ ewarn "TKIP-enabled networks, including mixed mode TKIP/AES-CCMP will not even show up"
+ ewarn "as available. If your network is missing you may wish to USE=tkip"
+ fi
+
+ # Mea culpa, feel free to remove that after some time --mgorny.
+ local fn
+ for fn in wpa_supplicant{,@wlan0}.service; do
+ if [[ -e "${EROOT}"/etc/systemd/system/network.target.wants/${fn} ]]
+ then
+ ebegin "Moving ${fn} to multi-user.target"
+ mv "${EROOT}"/etc/systemd/system/network.target.wants/${fn} \
+ "${EROOT}"/etc/systemd/system/multi-user.target.wants/ || die
+ eend ${?} \
+ "Please try to re-enable ${fn}"
+ fi
+ done
+
+ systemd_reenable wpa_supplicant.service
+}