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;

  this = {
    nixos-24_11 = import sources.nixos-24_11 {
      inherit system config;
      overlays = [
        (_: _: {inherit sources;})
        (import ./CcacheWrapper.nix)
        (import ./Functions.nix)
        depsOverlay
        (_: _: {unstable = this.nixos-unstable-small.pkgs;})
        (import ./Deps.nix)
        (import ./Python.nix)
        (import ./Haskell.nix)
        (import "${sources.nvidia-patch-nixos}/overlay.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)
        (import "${sources.nvidia-patch-nixos}/overlay.nix")
      ];
    };
  };
in
  this