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 then builtins.fetchTarball "https://channels.nixos.org/nixos-unstable/nixexprs.tar.xz" else builtins.fetchTarball "https://channels.nixos.org/nixpkgs-unstable/nixexprs.tar.xz"; # Compiled nixpkgs expression eg expressions from a nix channel nixpkgsVersion = builtins.concatStringsSep "." [ (builtins.readFile "${unstablePkgsExprs}/.version") (builtins.readFile "${unstablePkgsExprs}/.version-suffix") ]; 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; unstableVersion = self.lib.optionalString useUnstable nixpkgsVersion; unstableRevision = self.lib.optionalString useUnstable nixpkgsRevision; }