1{
2 config,
3 lib,
4 pkgs,
5 ...
6}:
7
8let
9 cfg = config.hardware.rtl-sdr;
10
11in
12{
13 options.hardware.rtl-sdr = {
14 enable = lib.mkOption {
15 type = lib.types.bool;
16 default = false;
17 description = ''
18 Enables rtl-sdr udev rules, ensures 'plugdev' group exists, and blacklists DVB kernel modules.
19 This is a prerequisite to using devices supported by rtl-sdr without being root, since rtl-sdr USB descriptors will be owned by plugdev through udev.
20 '';
21 };
22 package = lib.mkPackageOption pkgs "rtl-sdr" { };
23 };
24
25 config = lib.mkIf cfg.enable {
26 boot.blacklistedKernelModules = [
27 "dvb_usb_rtl28xxu"
28 "e4000"
29 "rtl2832"
30 ];
31 services.udev.packages = [ cfg.package ];
32 environment.systemPackages = [ cfg.package ];
33 users.groups.plugdev = { };
34 };
35
36 meta.maintainers = with lib.maintainers; [ pandapip1 ];
37}