diff --git a/pkgs/overlays/unstable-from-source.nix b/pkgs/overlays/unstable-from-source.nix new file mode 100644 index 0000000..afb8f2e --- /dev/null +++ b/pkgs/overlays/unstable-from-source.nix @@ -0,0 +1,34 @@ +{ + unstableSource, +}: + +self: super: + +let + useUnstable = self.config.useUnstable or true; + sanitizePlatform = platformConfig: self.lib.removeAttrs platformConfig [ + "emulator" + "emulatorAvailable" + ]; + + 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; +} diff --git a/pkgs/overlays/unstable.nix b/pkgs/overlays/unstable.nix index 1cf4bae..73e79b9 100644 --- a/pkgs/overlays/unstable.nix +++ b/pkgs/overlays/unstable.nix @@ -2,18 +2,9 @@ self: super: let nixos = self.config.nixos or true; - unstableRevision = self.config.unstableRevision or null; - unstableRevisionHash = self.config.unstableRevisionHash or null; useUnstable = self.config.useUnstable or true; - unstablePkgsExprs = if !builtins.isNull unstableRevision - then if !builtins.isNull unstableRevisionHash - then builtins.fetchTarball { - url = "https://github.com/NixOS/nixpkgs/archive/${unstableRevision}.tar.gz"; - sha256 = unstableRevisionHash; - } - else builtins.fetchTarball "https://github.com/NixOS/nixpkgs/archive/${unstableRevision}.tar.gz" - else if nixos + unstablePkgsExprs = if nixos then builtins.fetchTarball "https://channels.nixos.org/nixos-unstable/nixexprs.tar.xz" else builtins.fetchTarball "https://channels.nixos.org/nixpkgs-unstable/nixexprs.tar.xz"; @@ -24,26 +15,10 @@ let ]; nixpkgsRevision = (builtins.readFile "${unstablePkgsExprs}/.git-revision"); - unstablePkgsForNixpkgs = nixpkgs: import unstablePkgsExprs { - # localSystem -> pkgs.stdenv.buildPlatform - localSystem = 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 = nixpkgs.stdenv.hostPlatform; - }); in -{ - unstable = if useUnstable then unstablePkgsForNixpkgs self else self; +import ./unstable-from-source.nix { + unstableSource = unstablePkgsExprs; +} self super // { unstableVersion = self.lib.optionalString useUnstable nixpkgsVersion; unstableRevision = self.lib.optionalString useUnstable nixpkgsRevision; }