let
  sources = import ./Sources.nix { sourcesFile = ./Sources.json; };

  config = {
    allowAliases = true;
    allowBroken = true;
    allowUnfree = true;
    checkMeta = true;
    cudaSupport = true;
  };

  system = __currentSystem;

  # override pinned deps with our sources, this must come before other
  # package overlays, because of the 'null' from 'overrideSource'
  depsOverlay = _: pkgs: pkgs.overridePinnedDeps pkgs.overrideSource;

in {
  nixos-23_11 = import sources.nixos-23_11 {
    inherit system config;
    overlays = [
      (_: _: { inherit sources; })
      (import ./CcacheWrapper.nix)
      (import ./Functions.nix)
      depsOverlay
      (import ./Deps.nix)
      (import ./Python.nix)
      (import ./Haskell.nix)
    ];
  };

  nixos-unstable-small = import sources.nixos-unstable-small {
    inherit system config;
    overlays = [
      (_: _: { inherit sources; })
      (import ./CcacheWrapper.nix)
      (import ./Functions.nix)
      depsOverlay
      (import ./Deps.nix)
      (import ./Python.nix)
      (import ./Haskell.nix)
    ];
  };

}