From c36fb059a65b07c226761df24c26161c4ef17584 Mon Sep 17 00:00:00 2001 From: Doron Behar Date: Thu, 14 Aug 2025 22:11:57 +0300 Subject: [PATCH 1/7] gnuradio: Allow overriding .pkgs with packageOverrides Tested with the following diff: ```diff diff --git i/pkgs/by-name/gq/gqrx/package.nix w/pkgs/by-name/gq/gqrx/package.nix index 1d91b52ce7a8..111eb293ac9b 100644 --- i/pkgs/by-name/gq/gqrx/package.nix +++ w/pkgs/by-name/gq/gqrx/package.nix @@ -27,7 +27,19 @@ assert portaudioSupport -> portaudio != null; # audio backends are mutually exclusive assert !(pulseaudioSupport && portaudioSupport); -gnuradioMinimal.pkgs.mkDerivation rec { +let + gnuradioMinimal' = gnuradioMinimal.override { + packageOverrides = grSelf: grSuper: { + osmosdr = grSuper.osmosdr.override { + airspy = null; + hackrf = null; + libbladeRF = null; + soapysdr-with-plugins = null; + }; + }; + }; +in +gnuradioMinimal'.pkgs.mkDerivation rec { pname = "gqrx"; version = "2.17.7"; @@ -47,14 +59,14 @@ gnuradioMinimal.pkgs.mkDerivation rec { ++ lib.optional stdenv.hostPlatform.isDarwin desktopToDarwinBundle; buildInputs = [ - gnuradioMinimal.unwrapped.logLib + gnuradioMinimal'.unwrapped.logLib mpir fftwFloat libjack2 - gnuradioMinimal.unwrapped.boost + gnuradioMinimal'.unwrapped.boost qt6Packages.qtbase qt6Packages.qtsvg - gnuradioMinimal.pkgs.osmosdr + gnuradioMinimal'.pkgs.osmosdr rtl-sdr hackrf ] @@ -62,9 +74,9 @@ gnuradioMinimal.pkgs.mkDerivation rec { alsa-lib qt6Packages.qtwayland ] - ++ lib.optionals (gnuradioMinimal.hasFeature "gr-ctrlport") [ + ++ lib.optionals (gnuradioMinimal'.hasFeature "gr-ctrlport") [ thrift - gnuradioMinimal.unwrapped.python.pkgs.thrift + gnuradioMinimal'.unwrapped.python.pkgs.thrift ] ++ lib.optionals pulseaudioSupport [ libpulseaudio ] ++ lib.optionals portaudioSupport [ portaudio ]; ``` --- doc/release-notes/rl-2605.section.md | 16 ++++++++++ pkgs/applications/radio/gnuradio/wrapper.nix | 8 ++++- pkgs/by-name/gn/gnuradioMinimal/package.nix | 2 ++ pkgs/top-level/gnuradio-packages.nix | 33 ++++++++++---------- 4 files changed, 42 insertions(+), 17 deletions(-) diff --git a/doc/release-notes/rl-2605.section.md b/doc/release-notes/rl-2605.section.md index bac690a7cbe4..dd8a7bfd701f 100644 --- a/doc/release-notes/rl-2605.section.md +++ b/doc/release-notes/rl-2605.section.md @@ -240,6 +240,22 @@ - We now use the upstream wrapper script for Gradle, supporting both the `JAVA_HOME` and `GRADLE_OPTS` environment variables. +- `gnuradio`: Overriding the `.pkgs` package set is now possible with a `packageOverrides` function, like with `python.pkgs` and other language-specific package sets. +Example: + +```nix +gnuradioMinimal.override { + packageOverrides = grSelf: grSuper: { + osmosdr = grSuper.osmosdr.override { + airspy = null; + hackrf = null; + libbladeRF = null; + soapysdr-with-plugins = null; + }; + }; +} +``` + ## Nixpkgs Library {#sec-nixpkgs-release-26.05-lib} diff --git a/pkgs/applications/radio/gnuradio/wrapper.nix b/pkgs/applications/radio/gnuradio/wrapper.nix index d555d23e2fc4..4afa3cca6afc 100644 --- a/pkgs/applications/radio/gnuradio/wrapper.nix +++ b/pkgs/applications/radio/gnuradio/wrapper.nix @@ -56,6 +56,7 @@ ], # Allow to add whatever you want to the wrapper extraMakeWrapperArgs ? [ ], + packageOverrides ? (self: super: { }), }: let @@ -191,7 +192,12 @@ let ); packages = import ../../../top-level/gnuradio-packages.nix { - inherit lib stdenv newScope; + inherit + lib + stdenv + newScope + packageOverrides + ; gnuradio = unwrapped; }; passthru = unwrapped.passthru // { diff --git a/pkgs/by-name/gn/gnuradioMinimal/package.nix b/pkgs/by-name/gn/gnuradioMinimal/package.nix index f0e3c01b1e55..8dd2039cbe3e 100644 --- a/pkgs/by-name/gn/gnuradioMinimal/package.nix +++ b/pkgs/by-name/gn/gnuradioMinimal/package.nix @@ -2,11 +2,13 @@ gnuradio, volk, uhdMinimal, + packageOverrides ? (self: super: { }), }: # A build without gui components and other utilities not needed for end user # libraries gnuradio.override { doWrap = false; + inherit packageOverrides; unwrapped = gnuradio.unwrapped.override { volk = volk.override { # So it will not reference python diff --git a/pkgs/top-level/gnuradio-packages.nix b/pkgs/top-level/gnuradio-packages.nix index ab5d648064aa..a9857f193aca 100644 --- a/pkgs/top-level/gnuradio-packages.nix +++ b/pkgs/top-level/gnuradio-packages.nix @@ -3,6 +3,7 @@ stdenv, newScope, gnuradio, # unwrapped gnuradio + packageOverrides, }: lib.makeScope newScope ( @@ -34,21 +35,21 @@ lib.makeScope newScope ( inherit (gnuradio) uhd; } ); + + # Base package set without overrides + basePackages = { + inherit callPackage mkDerivation mkDerivationWith; + + bladeRF = callPackage ../development/gnuradio-modules/bladeRF/default.nix { }; + + lora_sdr = callPackage ../development/gnuradio-modules/lora_sdr/default.nix { }; + + osmosdr = callPackage ../development/gnuradio-modules/osmosdr/default.nix { }; + + fosphor = callPackage ../development/gnuradio-modules/fosphor/default.nix { }; + + gr-difi = callPackage ../development/gnuradio-modules/gr-difi/default.nix { }; + }; in - { - - inherit callPackage mkDerivation mkDerivationWith; - - ### Packages - - bladeRF = callPackage ../development/gnuradio-modules/bladeRF/default.nix { }; - - lora_sdr = callPackage ../development/gnuradio-modules/lora_sdr/default.nix { }; - - osmosdr = callPackage ../development/gnuradio-modules/osmosdr/default.nix { }; - - fosphor = callPackage ../development/gnuradio-modules/fosphor/default.nix { }; - - gr-difi = callPackage ../development/gnuradio-modules/gr-difi/default.nix { }; - } + basePackages // (packageOverrides self basePackages) ) From 89911efe11e34b9e412b45bf095bdc1aafa4e800 Mon Sep 17 00:00:00 2001 From: Doron Behar Date: Thu, 14 Aug 2025 23:26:28 +0300 Subject: [PATCH 2/7] gnuradio.pkgs.mkDerivation: Allow finalAttrs pattern --- pkgs/development/gnuradio-modules/mkDerivation.nix | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/pkgs/development/gnuradio-modules/mkDerivation.nix b/pkgs/development/gnuradio-modules/mkDerivation.nix index 960ecd413439..b18e24b6a2bc 100644 --- a/pkgs/development/gnuradio-modules/mkDerivation.nix +++ b/pkgs/development/gnuradio-modules/mkDerivation.nix @@ -7,6 +7,9 @@ mkDerivation: args: +let +# Common validation and processing logic +processArgs = args: # Check if it's supposed to not get built for the current gnuradio version if (builtins.hasAttr "disabled" args) && args.disabled then let @@ -35,4 +38,12 @@ else ]; }; in - mkDerivation (args // args_) + args // args_; + +in +if builtins.isFunction args then + # Function form: args is (finalAttrs -> attrset) + mkDerivation (finalAttrs: processArgs (args finalAttrs)) +else + # Attrset form: args is attrset + mkDerivation (processArgs args) From b8ff9a4c507c78a2b32b36ff328035568d364701 Mon Sep 17 00:00:00 2001 From: Doron Behar Date: Thu, 14 Aug 2025 23:26:41 +0300 Subject: [PATCH 3/7] gnuradio.pkgs.mkDerivation: nixfmt --- .../gnuradio-modules/mkDerivation.nix | 59 ++++++++++--------- 1 file changed, 30 insertions(+), 29 deletions(-) diff --git a/pkgs/development/gnuradio-modules/mkDerivation.nix b/pkgs/development/gnuradio-modules/mkDerivation.nix index b18e24b6a2bc..7a3b32563d10 100644 --- a/pkgs/development/gnuradio-modules/mkDerivation.nix +++ b/pkgs/development/gnuradio-modules/mkDerivation.nix @@ -8,37 +8,38 @@ mkDerivation: args: let -# Common validation and processing logic -processArgs = args: -# Check if it's supposed to not get built for the current gnuradio version -if (builtins.hasAttr "disabled" args) && args.disabled then - let - name = args.name or "${args.pname}"; - in - throw "Package ${name} is incompatible with GNURadio ${unwrapped.versionAttr.major}" -else + # Common validation and processing logic + processArgs = + args: + # Check if it's supposed to not get built for the current gnuradio version + if (builtins.hasAttr "disabled" args) && args.disabled then + let + name = args.name or "${args.pname}"; + in + throw "Package ${name} is incompatible with GNURadio ${unwrapped.versionAttr.major}" + else -if builtins.hasAttr "disabledForGRafter" args then - throw '' - `disabledForGRafter` is superseded by `disabled`. - Use `disabled = gnuradioAtLeast "${args.disabledForGRafter}";` instead. - '' -else + if builtins.hasAttr "disabledForGRafter" args then + throw '' + `disabledForGRafter` is superseded by `disabled`. + Use `disabled = gnuradioAtLeast "${args.disabledForGRafter}";` instead. + '' + else - let - args_ = { - enableParallelBuilding = args.enableParallelBuilding or true; - nativeBuildInputs = (args.nativeBuildInputs or [ ]); - # We add gnuradio and volk itself by default - most gnuradio based packages - # will not consider it a dependency worth mentioning and it will almost - # always be needed - buildInputs = (args.buildInputs or [ ]) ++ [ - unwrapped - unwrapped.volk - ]; - }; - in - args // args_; + let + args_ = { + enableParallelBuilding = args.enableParallelBuilding or true; + nativeBuildInputs = (args.nativeBuildInputs or [ ]); + # We add gnuradio and volk itself by default - most gnuradio based packages + # will not consider it a dependency worth mentioning and it will almost + # always be needed + buildInputs = (args.buildInputs or [ ]) ++ [ + unwrapped + unwrapped.volk + ]; + }; + in + args // args_; in if builtins.isFunction args then From 82cd6a28b3bba2eb4e832647b15bd6f8f5dd34ff Mon Sep 17 00:00:00 2001 From: Doron Behar Date: Thu, 14 Aug 2025 17:12:36 +0300 Subject: [PATCH 4/7] gnuradioPackages.osmosdr: Divide inputs to categories --- pkgs/development/gnuradio-modules/osmosdr/default.nix | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/pkgs/development/gnuradio-modules/osmosdr/default.nix b/pkgs/development/gnuradio-modules/osmosdr/default.nix index 8751efdeae4f..daf5b36bc0d2 100644 --- a/pkgs/development/gnuradio-modules/osmosdr/default.nix +++ b/pkgs/development/gnuradio-modules/osmosdr/default.nix @@ -1,12 +1,16 @@ { lib, - stdenv, mkDerivation, + gnuradioAtLeast, fetchgit, fetchpatch, gnuradio, + + # native cmake, pkg-config, + + # buildInputs logLib, libsndfile, mpir, @@ -22,7 +26,6 @@ libbladeRF, rtl-sdr, soapysdr-with-plugins, - gnuradioAtLeast, }: mkDerivation rec { From d3692ebb9aac4c7fec2ea238e3923a3b4910da39 Mon Sep 17 00:00:00 2001 From: Doron Behar Date: Thu, 14 Aug 2025 23:44:45 +0300 Subject: [PATCH 5/7] gnuradioMinimal.pkgs.osmosdr: use finalAttrs --- pkgs/development/gnuradio-modules/osmosdr/default.nix | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/pkgs/development/gnuradio-modules/osmosdr/default.nix b/pkgs/development/gnuradio-modules/osmosdr/default.nix index daf5b36bc0d2..8b67512adbec 100644 --- a/pkgs/development/gnuradio-modules/osmosdr/default.nix +++ b/pkgs/development/gnuradio-modules/osmosdr/default.nix @@ -28,13 +28,13 @@ soapysdr-with-plugins, }: -mkDerivation rec { +mkDerivation (finalAttrs: { pname = "gr-osmosdr"; version = "0.2.6"; src = fetchgit { url = "https://gitea.osmocom.org/sdr/gr-osmosdr"; - rev = "v${version}"; + rev = "v${finalAttrs.version}"; hash = "sha256-jCUzBY1pYiEtcRQ97t9F6uEMVYw2NU0eoB5Xc2H6pGQ="; }; @@ -100,4 +100,4 @@ mkDerivation rec { maintainers = with lib.maintainers; [ bjornfor ]; platforms = lib.platforms.unix; }; -} +}) From d802e9910dc19b7ee8b6620a7d7bfb27099bdadb Mon Sep 17 00:00:00 2001 From: Doron Behar Date: Thu, 14 Aug 2025 17:14:45 +0300 Subject: [PATCH 6/7] gnuradioMinimal.pkgs.osmosdr: make it possible to disable features --- .../gnuradio-modules/osmosdr/default.nix | 29 +++++++++++++++---- 1 file changed, 23 insertions(+), 6 deletions(-) diff --git a/pkgs/development/gnuradio-modules/osmosdr/default.nix b/pkgs/development/gnuradio-modules/osmosdr/default.nix index 8b67512adbec..edfd4ac5aad6 100644 --- a/pkgs/development/gnuradio-modules/osmosdr/default.nix +++ b/pkgs/development/gnuradio-modules/osmosdr/default.nix @@ -26,6 +26,7 @@ libbladeRF, rtl-sdr, soapysdr-with-plugins, + features ? { }, }: mkDerivation (finalAttrs: { @@ -61,12 +62,8 @@ mkDerivation (finalAttrs: { fftwFloat gmp icu - airspy - hackrf - libbladeRF - rtl-sdr - soapysdr-with-plugins ] + ++ finalAttrs.finalPackage.passthru.enabledFeaturesDeps ++ lib.optionals (gnuradio.hasFeature "gr-blocks") [ libsndfile ] @@ -83,7 +80,8 @@ mkDerivation (finalAttrs: { ]; cmakeFlags = [ (if (gnuradio.hasFeature "python-support") then "-DENABLE_PYTHON=ON" else "-DENABLE_PYTHON=OFF") - ]; + ] + ++ finalAttrs.finalPackage.passthru.enabledFeaturesCmakeFlags; nativeBuildInputs = [ cmake pkg-config @@ -92,6 +90,25 @@ mkDerivation (finalAttrs: { python.pkgs.mako python ]; + passthru = { + featuresDeps = { + # Other features don't have dependencies but can still be disabled in the + # `features` argument. + airspy = [ airspy ]; + bladerf = [ libbladeRF ]; + hackrf = [ hackrf ]; + rtl = [ rtl-sdr ]; + soapy = [ soapysdr-with-plugins ]; + }; + enabledFeaturesDeps = lib.pipe finalAttrs.finalPackage.passthru.featuresDeps [ + (lib.filterAttrs (name: deps: features.${name} or true)) + lib.attrValues + lib.flatten + ]; + enabledFeaturesCmakeFlags = lib.mapAttrsToList ( + feat: val: lib.cmakeBool "ENABLE_${lib.toUpper feat}" val + ) features; + }; meta = { description = "Gnuradio block for OsmoSDR and rtl-sdr"; From 3b6d3ac76d6efe9ce80ad3d6467040b9780b2720 Mon Sep 17 00:00:00 2001 From: Doron Behar Date: Fri, 15 Aug 2025 00:12:01 +0300 Subject: [PATCH 7/7] gnuradioMinimal: allow to override the features attrset --- pkgs/by-name/gn/gnuradioMinimal/package.nix | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/pkgs/by-name/gn/gnuradioMinimal/package.nix b/pkgs/by-name/gn/gnuradioMinimal/package.nix index 8dd2039cbe3e..d6ff9b63df9a 100644 --- a/pkgs/by-name/gn/gnuradioMinimal/package.nix +++ b/pkgs/by-name/gn/gnuradioMinimal/package.nix @@ -3,6 +3,7 @@ volk, uhdMinimal, packageOverrides ? (self: super: { }), + unwrappedFeaturesOverride ? { }, }: # A build without gui components and other utilities not needed for end user # libraries @@ -28,6 +29,7 @@ gnuradio.override { # Doesn't make it reference python eventually, but makes reverse # dependencies require python to use cmake files of GR. gr-ctrlport = false; - }; + } + // unwrappedFeaturesOverride; }; }