{ unstableSource, }: self: super: let useUnstable = self.config.useUnstable or true; sanitizePlatform = platformConfig: self.lib.removeAttrs platformConfig [ "emulator" "emulatorAvailable" "darwinSdkVersion" "darwinMinVersion" ]; unstablePkgsForNixpkgs = nixpkgs: import unstableSource { # localSystem -> pkgs.stdenv.buildPlatform localSystem = sanitizePlatform nixpkgs.stdenv.buildPlatform; # crossSystem -> pkgs.stdenv.hostPlatform or pkgs.stdenv.targetPlatform ?? # passing below # config -> pkgs.config config = nixpkgs.config; # overlays -> partial of pkgs.overlays overlays = nixpkgs.overlays; # crossOverlays -> partial of pkgs.overlays # crossOverlays are merged to overlays, not sure what issues that might raise. # ignoring. } // (if nixpkgs.stdenv.buildPlatform == nixpkgs.stdenv.hostPlatform then {} else { # workaround for some odd structured packages that changes behaviour # when crossSystem is passed. crossSystem = sanitizePlatform nixpkgs.stdenv.hostPlatform; }); in { unstable = if useUnstable then unstablePkgsForNixpkgs self else self; }