self: super:

let
  nixos = self.config.nixos or true;
  useUnstable = self.config.useUnstable or true;

  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";
  
  # 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.hostPlatform or pkgs.stdenv.hostPlatform ???
    localSystem = nixpkgs.stdenv.hostPlatform;
    # crossSystem -> nixpkgs.stdenv.targetPlatform
    crossSystem = nixpkgs.stdenv.targetPlatform;
    # 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.
  };
in
{
  unstable = if useUnstable then unstablePkgsForNixpkgs self else self;
  unstableVersion = self.lib.optionalString useUnstable nixpkgsVersion;
  unstableRevision = self.lib.optionalString useUnstable nixpkgsRevision;
}