diff --git a/pkgs/games/factorio/mods.nix b/pkgs/by-name/fa/factorio/mods.nix similarity index 100% rename from pkgs/games/factorio/mods.nix rename to pkgs/by-name/fa/factorio/mods.nix diff --git a/pkgs/by-name/fa/factorio/package.nix b/pkgs/by-name/fa/factorio/package.nix new file mode 100644 index 000000000000..4a2363497f8e --- /dev/null +++ b/pkgs/by-name/fa/factorio/package.nix @@ -0,0 +1,310 @@ +{ + lib, + alsa-lib, + factorio-utils, + fetchurl, + libGL, + libICE, + libSM, + libX11, + libXcursor, + libXext, + libXi, + libXinerama, + libXrandr, + libpulseaudio, + libxkbcommon, + makeDesktopItem, + makeWrapper, + releaseType, + stdenv, + wayland, + + mods-dat ? null, + versionsJson ? ./versions.json, + username ? "", + token ? "", # get/reset token at https://factorio.com/profile + experimental ? false, # true means to always use the latest branch + ... +}@args: + +assert + releaseType == "alpha" + || releaseType == "headless" + || releaseType == "demo" + || releaseType == "expansion"; + +let + + inherit (lib) importJSON; + + mods = args.mods or [ ]; + + helpMsg = '' + + ===FETCH FAILED=== + Please ensure you have set the username and token with config.nix, or + /etc/nix/nixpkgs-config.nix if on NixOS. + + Your token can be seen at https://factorio.com/profile (after logging in). It is + not as sensitive as your password, but should still be safeguarded. There is a + link on that page to revoke/invalidate the token, if you believe it has been + leaked or wish to take precautions. + + Example: + { + packageOverrides = pkgs: { + factorio = pkgs.factorio.override { + username = "FactorioPlayer1654"; + token = "d5ad5a8971267c895c0da598688761"; + }; + }; + } + + Alternatively, instead of providing the username+token, you may manually + download the release through https://factorio.com/download , then add it to + the store using e.g.: + + releaseType=alpha + version=0.17.74 + nix-prefetch-url file://\''$HOME/Downloads/factorio_\''${releaseType}_x64_\''${version}.tar.xz --name factorio_\''${releaseType}_x64-\''${version}.tar.xz + + Note the ultimate "_" is replaced with "-" in the --name arg! + ''; + + desktopItem = makeDesktopItem { + name = "factorio"; + desktopName = "Factorio"; + comment = "A game in which you build and maintain factories."; + exec = "factorio"; + icon = "factorio"; + categories = [ "Game" ]; + }; + + branch = if experimental then "experimental" else "stable"; + + # NB `experimental` directs us to take the latest build, regardless of its branch; + # hence the (stable, experimental) pairs may sometimes refer to the same distributable. + versions = importJSON versionsJson; + binDists = makeBinDists versions; + + actual = + binDists.${stdenv.hostPlatform.system}.${releaseType}.${branch} + or (throw "Factorio ${releaseType}-${branch} binaries for ${stdenv.hostPlatform.system} are not available for download."); + + makeBinDists = + versions: + let + f = + path: name: value: + if builtins.isAttrs value then + if value ? "name" then makeBinDist value else builtins.mapAttrs (f (path ++ [ name ])) value + else + throw "expected attrset at ${toString path} - got ${toString value}"; + in + builtins.mapAttrs (f [ ]) versions; + makeBinDist = + { + name, + version, + tarDirectory, + url, + sha256, + needsAuth, + candidateHashFilenames ? [ ], + }: + { + inherit version tarDirectory; + src = + if !needsAuth then + fetchurl { inherit name url sha256; } + else + (lib.overrideDerivation + (fetchurl { + inherit name url sha256; + curlOptsList = [ + "--get" + "--data-urlencode" + "username@username" + "--data-urlencode" + "token@token" + ]; + }) + (_: { + # This preHook hides the credentials from /proc + preHook = + if username != "" && token != "" then + '' + echo -n "${username}" >username + echo -n "${token}" >token + '' + else + '' + # Deliberately failing since username/token was not provided, so we can't fetch. + # We can't use builtins.throw since we want the result to be used if the tar is in the store already. + exit 1 + ''; + failureHook = '' + cat < str: + if FLAGS.out: + return FLAGS.out + try_paths = ["pkgs/by-name/fa/factorio/versions.json", "versions.json"] + for path in try_paths: + if os.path.exists(path): + return path + raise Exception( + "Couldn't figure out where to write versions.json; try specifying --out" + ) + + +def fetch_versions() -> FactorioVersionsJSON: + return json.loads(requests.get(FACTORIO_RELEASES).text) + + +def fetch_hashes() -> FactorioHashes: + resp = requests.get(FACTORIO_HASHES) + resp.raise_for_status() + out = {} + for ln in resp.text.split("\n"): + ln = ln.strip() + if not ln: + continue + sha256, filename = ln.split() + out[filename] = sha256 + return out + + +def generate_our_versions(factorio_versions: FactorioVersionsJSON) -> OurVersionJSON: + def rec_dd(): + return defaultdict(rec_dd) + + output = rec_dd() + + # Deal with times where there's no experimental version + for rc in RELEASE_CHANNELS: + if rc.name not in factorio_versions or not factorio_versions[rc.name]: + factorio_versions[rc.name] = factorio_versions["stable"] + for rt in RELEASE_TYPES: + if ( + rt.name not in factorio_versions[rc.name] + or not factorio_versions[rc.name][rt.name] + ): + factorio_versions[rc.name][rt.name] = factorio_versions["stable"][ + rt.name + ] + + for system in SYSTEMS: + for release_type in RELEASE_TYPES: + for release_channel in RELEASE_CHANNELS: + version = factorio_versions[release_channel.name].get(release_type.name) + if version is None: + continue + this_release = { + "name": f"factorio_{release_type.name}_{system.tar_name}-{version}.tar.xz", + "url": f"https://factorio.com/get-download/{version}/{release_type.name}/{system.url_name}", + "version": version, + "needsAuth": release_type.needs_auth, + "candidateHashFilenames": [ + fmt.format(version=version) + for fmt in release_type.hash_filename_format + ], + "tarDirectory": system.tar_name, + } + output[system.nix_name][release_type.name][release_channel.name] = ( + this_release + ) + return output + + +def iter_version( + versions: OurVersionJSON, + it: Callable[[str, str, str, Dict[str, str]], Dict[str, str]], +) -> OurVersionJSON: + versions = copy.deepcopy(versions) + for system_name, system in versions.items(): + for release_type_name, release_type in system.items(): + for release_channel_name, release in release_type.items(): + release_type[release_channel_name] = it( + system_name, release_type_name, release_channel_name, dict(release) + ) + return versions + + +def merge_versions(old: OurVersionJSON, new: OurVersionJSON) -> OurVersionJSON: + """Copies already-known hashes from version.json to avoid having to re-fetch.""" + + def _merge_version( + system_name: str, + release_type_name: str, + release_channel_name: str, + release: Dict[str, str], + ) -> Dict[str, str]: + old_system = old.get(system_name, {}) + old_release_type = old_system.get(release_type_name, {}) + old_release = old_release_type.get(release_channel_name, {}) + if FLAGS.release_type and release_type_name not in FLAGS.release_type: + logging.info( + "%s/%s/%s: not in --release_type, not updating", + system_name, + release_type_name, + release_channel_name, + ) + return old_release + if FLAGS.release_channel and release_channel_name not in FLAGS.release_channel: + logging.info( + "%s/%s/%s: not in --release_channel, not updating", + system_name, + release_type_name, + release_channel_name, + ) + return old_release + if "sha256" not in old_release: + logging.info( + "%s/%s/%s: not copying sha256 since it's missing", + system_name, + release_type_name, + release_channel_name, + ) + return release + if not all( + old_release.get(k, None) == release[k] for k in ["name", "version", "url"] + ): + logging.info( + "%s/%s/%s: not copying sha256 due to mismatch", + system_name, + release_type_name, + release_channel_name, + ) + return release + release["sha256"] = old_release["sha256"] + return release + + return iter_version(new, _merge_version) + + +def fill_in_hash( + versions: OurVersionJSON, factorio_hashes: FactorioHashes +) -> OurVersionJSON: + """Fill in sha256 hashes for anything missing them.""" + + def _fill_in_hash( + system_name: str, + release_type_name: str, + release_channel_name: str, + release: Dict[str, str], + ) -> Dict[str, str]: + for candidate_filename in release["candidateHashFilenames"]: + if candidate_filename in factorio_hashes: + release["sha256"] = factorio_hashes[candidate_filename] + break + else: + logging.error( + "%s/%s/%s: failed to find any of %s in %s", + system_name, + release_type_name, + release_channel_name, + release["candidateHashFilenames"], + FACTORIO_HASHES, + ) + return release + if "sha256" in release: + logging.info( + "%s/%s/%s: skipping fetch, sha256 already present", + system_name, + release_type_name, + release_channel_name, + ) + return release + return release + + return iter_version(versions, _fill_in_hash) + + +def main(argv): + factorio_versions = fetch_versions() + factorio_hashes = fetch_hashes() + new_our_versions = generate_our_versions(factorio_versions) + old_our_versions = None + our_versions_path = find_versions_json() + if our_versions_path: + logging.info("Loading old versions.json from %s", our_versions_path) + with open(our_versions_path, "r") as f: + old_our_versions = json.load(f) + if old_our_versions: + logging.info("Merging in old hashes") + new_our_versions = merge_versions(old_our_versions, new_our_versions) + logging.info("Updating hashes from Factorio SHA256") + new_our_versions = fill_in_hash(new_our_versions, factorio_hashes) + with open(our_versions_path, "w") as f: + logging.info("Writing versions.json to %s", our_versions_path) + json.dump(new_our_versions, f, sort_keys=True, indent=2) + f.write("\n") + + +if __name__ == "__main__": + app.run(main) diff --git a/pkgs/games/factorio/utils.nix b/pkgs/by-name/fa/factorio/utils.nix similarity index 100% rename from pkgs/games/factorio/utils.nix rename to pkgs/by-name/fa/factorio/utils.nix diff --git a/pkgs/games/factorio/versions-1.json b/pkgs/by-name/fa/factorio/versions-1.json similarity index 100% rename from pkgs/games/factorio/versions-1.json rename to pkgs/by-name/fa/factorio/versions-1.json diff --git a/pkgs/by-name/fa/factorio/versions.json b/pkgs/by-name/fa/factorio/versions.json new file mode 100644 index 000000000000..12c9da35eecb --- /dev/null +++ b/pkgs/by-name/fa/factorio/versions.json @@ -0,0 +1,102 @@ +{ + "x86_64-linux": { + "alpha": { + "experimental": { + "candidateHashFilenames": [ + "factorio_linux_2.0.10.tar.xz" + ], + "name": "factorio_alpha_x64-2.0.10.tar.xz", + "needsAuth": true, + "sha256": "07508fc5112f95ef5d5afedea66863ea326e039bd872b772b934ed08545c399b", + "tarDirectory": "x64", + "url": "https://factorio.com/get-download/2.0.10/alpha/linux64", + "version": "2.0.10" + }, + "stable": { + "candidateHashFilenames": [ + "factorio_linux_2.0.10.tar.xz" + ], + "name": "factorio_alpha_x64-2.0.10.tar.xz", + "needsAuth": true, + "sha256": "07508fc5112f95ef5d5afedea66863ea326e039bd872b772b934ed08545c399b", + "tarDirectory": "x64", + "url": "https://factorio.com/get-download/2.0.10/alpha/linux64", + "version": "2.0.10" + } + }, + "demo": { + "experimental": { + "candidateHashFilenames": [ + "factorio_demo_x64_1.1.110.tar.xz" + ], + "name": "factorio_demo_x64-1.1.110.tar.xz", + "needsAuth": false, + "sha256": "bddb91dcba9f300c25d590f861772eaf41f0b6ce8ae6b754de00d0e5f3eb5a35", + "tarDirectory": "x64", + "url": "https://factorio.com/get-download/1.1.110/demo/linux64", + "version": "1.1.110" + }, + "stable": { + "candidateHashFilenames": [ + "factorio_demo_x64_1.1.110.tar.xz" + ], + "name": "factorio_demo_x64-1.1.110.tar.xz", + "needsAuth": false, + "sha256": "bddb91dcba9f300c25d590f861772eaf41f0b6ce8ae6b754de00d0e5f3eb5a35", + "tarDirectory": "x64", + "url": "https://factorio.com/get-download/1.1.110/demo/linux64", + "version": "1.1.110" + } + }, + "expansion": { + "experimental": { + "candidateHashFilenames": [ + "factorio-space-age_linux_2.0.10.tar.xz" + ], + "name": "factorio_expansion_x64-2.0.10.tar.xz", + "needsAuth": true, + "sha256": "f7d346578c812314be8b72fbf6fd291c53d23ecc2dc6556a8948d26b3b95d71e", + "tarDirectory": "x64", + "url": "https://factorio.com/get-download/2.0.10/expansion/linux64", + "version": "2.0.10" + }, + "stable": { + "candidateHashFilenames": [ + "factorio-space-age_linux_2.0.10.tar.xz" + ], + "name": "factorio_expansion_x64-2.0.10.tar.xz", + "needsAuth": true, + "sha256": "f7d346578c812314be8b72fbf6fd291c53d23ecc2dc6556a8948d26b3b95d71e", + "tarDirectory": "x64", + "url": "https://factorio.com/get-download/2.0.10/expansion/linux64", + "version": "2.0.10" + } + }, + "headless": { + "experimental": { + "candidateHashFilenames": [ + "factorio-headless_linux_2.0.10.tar.xz", + "factorio_headless_x64_2.0.10.tar.xz" + ], + "name": "factorio_headless_x64-2.0.10.tar.xz", + "needsAuth": false, + "sha256": "2d7dd212fa6f715218a5e33bad7d593af8998fa7bf7ce727343159ee1f8c23f4", + "tarDirectory": "x64", + "url": "https://factorio.com/get-download/2.0.10/headless/linux64", + "version": "2.0.10" + }, + "stable": { + "candidateHashFilenames": [ + "factorio-headless_linux_2.0.10.tar.xz", + "factorio_headless_x64_2.0.10.tar.xz" + ], + "name": "factorio_headless_x64-2.0.10.tar.xz", + "needsAuth": false, + "sha256": "2d7dd212fa6f715218a5e33bad7d593af8998fa7bf7ce727343159ee1f8c23f4", + "tarDirectory": "x64", + "url": "https://factorio.com/get-download/2.0.10/headless/linux64", + "version": "2.0.10" + } + } + } +} diff --git a/pkgs/games/factorio/default.nix b/pkgs/games/factorio/default.nix deleted file mode 100644 index d342f76a2d9c..000000000000 --- a/pkgs/games/factorio/default.nix +++ /dev/null @@ -1,280 +0,0 @@ -{ lib -, alsa-lib -, factorio-utils -, fetchurl -, libGL -, libICE -, libSM -, libX11 -, libXcursor -, libXext -, libXi -, libXinerama -, libXrandr -, libpulseaudio -, libxkbcommon -, makeDesktopItem -, makeWrapper -, releaseType -, stdenv -, wayland - -, mods-dat ? null -, versionsJson ? ./versions.json -, username ? "" -, token ? "" # get/reset token at https://factorio.com/profile -, experimental ? false # true means to always use the latest branch -, ... -} @ args: - -assert releaseType == "alpha" - || releaseType == "headless" - || releaseType == "demo" - || releaseType == "expansion"; - -let - - inherit (lib) importJSON; - - mods = args.mods or [ ]; - - helpMsg = '' - - ===FETCH FAILED=== - Please ensure you have set the username and token with config.nix, or - /etc/nix/nixpkgs-config.nix if on NixOS. - - Your token can be seen at https://factorio.com/profile (after logging in). It is - not as sensitive as your password, but should still be safeguarded. There is a - link on that page to revoke/invalidate the token, if you believe it has been - leaked or wish to take precautions. - - Example: - { - packageOverrides = pkgs: { - factorio = pkgs.factorio.override { - username = "FactorioPlayer1654"; - token = "d5ad5a8971267c895c0da598688761"; - }; - }; - } - - Alternatively, instead of providing the username+token, you may manually - download the release through https://factorio.com/download , then add it to - the store using e.g.: - - releaseType=alpha - version=0.17.74 - nix-prefetch-url file://\''$HOME/Downloads/factorio_\''${releaseType}_x64_\''${version}.tar.xz --name factorio_\''${releaseType}_x64-\''${version}.tar.xz - - Note the ultimate "_" is replaced with "-" in the --name arg! - ''; - - desktopItem = makeDesktopItem { - name = "factorio"; - desktopName = "Factorio"; - comment = "A game in which you build and maintain factories."; - exec = "factorio"; - icon = "factorio"; - categories = [ "Game" ]; - }; - - branch = if experimental then "experimental" else "stable"; - - # NB `experimental` directs us to take the latest build, regardless of its branch; - # hence the (stable, experimental) pairs may sometimes refer to the same distributable. - versions = importJSON versionsJson; - binDists = makeBinDists versions; - - actual = binDists.${stdenv.hostPlatform.system}.${releaseType}.${branch} or (throw "Factorio ${releaseType}-${branch} binaries for ${stdenv.hostPlatform.system} are not available for download."); - - makeBinDists = versions: - let - f = path: name: value: - if builtins.isAttrs value then - if value ? "name" then - makeBinDist value - else - builtins.mapAttrs (f (path ++ [ name ])) value - else - throw "expected attrset at ${toString path} - got ${toString value}"; - in - builtins.mapAttrs (f [ ]) versions; - makeBinDist = { name, version, tarDirectory, url, sha256, needsAuth }: { - inherit version tarDirectory; - src = - if !needsAuth then - fetchurl { inherit name url sha256; } - else - (lib.overrideDerivation - (fetchurl { - inherit name url sha256; - curlOptsList = [ - "--get" - "--data-urlencode" - "username@username" - "--data-urlencode" - "token@token" - ]; - }) - (_: { - # This preHook hides the credentials from /proc - preHook = - if username != "" && token != "" then '' - echo -n "${username}" >username - echo -n "${token}" >token - '' else '' - # Deliberately failing since username/token was not provided, so we can't fetch. - # We can't use builtins.throw since we want the result to be used if the tar is in the store already. - exit 1 - ''; - failureHook = '' - cat < str: - if FLAGS.out: - return FLAGS.out - try_paths = ["pkgs/games/factorio/versions.json", "versions.json"] - for path in try_paths: - if os.path.exists(path): - return path - raise Exception("Couldn't figure out where to write versions.json; try specifying --out") - - -def fetch_versions() -> FactorioVersionsJSON: - return json.loads(requests.get("https://factorio.com/api/latest-releases").text) - - -def generate_our_versions(factorio_versions: FactorioVersionsJSON) -> OurVersionJSON: - rec_dd = lambda: defaultdict(rec_dd) - output = rec_dd() - - # Deal with times where there's no experimental version - for rc in RELEASE_CHANNELS: - if not factorio_versions[rc.name]: - factorio_versions[rc.name] = factorio_versions['stable'] - - for system in SYSTEMS: - for release_type in RELEASE_TYPES: - for release_channel in RELEASE_CHANNELS: - version = factorio_versions[release_channel.name].get(release_type.name) - if version == None: - continue - this_release = { - "name": f"factorio_{release_type.name}_{system.tar_name}-{version}.tar.xz", - "url": f"https://factorio.com/get-download/{version}/{release_type.name}/{system.url_name}", - "version": version, - "needsAuth": release_type.needs_auth, - "tarDirectory": system.tar_name, - } - output[system.nix_name][release_type.name][release_channel.name] = this_release - return output - - -def iter_version(versions: OurVersionJSON, it: Callable[[str, str, str, Dict[str, str]], Dict[str, str]]) -> OurVersionJSON: - versions = copy.deepcopy(versions) - for system_name, system in versions.items(): - for release_type_name, release_type in system.items(): - for release_channel_name, release in release_type.items(): - release_type[release_channel_name] = it(system_name, release_type_name, release_channel_name, dict(release)) - return versions - - -def merge_versions(old: OurVersionJSON, new: OurVersionJSON) -> OurVersionJSON: - """Copies already-known hashes from version.json to avoid having to re-fetch.""" - def _merge_version(system_name: str, release_type_name: str, release_channel_name: str, release: Dict[str, str]) -> Dict[str, str]: - old_system = old.get(system_name, {}) - old_release_type = old_system.get(release_type_name, {}) - old_release = old_release_type.get(release_channel_name, {}) - if FLAGS.release_type and release_type_name not in FLAGS.release_type: - logging.info("%s/%s/%s: not in --release_type, not updating", system_name, release_type_name, release_channel_name) - return old_release - if FLAGS.release_channel and release_channel_name not in FLAGS.release_channel: - logging.info("%s/%s/%s: not in --release_channel, not updating", system_name, release_type_name, release_channel_name) - return old_release - if not "sha256" in old_release: - logging.info("%s/%s/%s: not copying sha256 since it's missing", system_name, release_type_name, release_channel_name) - return release - if not all(old_release.get(k, None) == release[k] for k in ['name', 'version', 'url']): - logging.info("%s/%s/%s: not copying sha256 due to mismatch", system_name, release_type_name, release_channel_name) - return release - release["sha256"] = old_release["sha256"] - return release - return iter_version(new, _merge_version) - - -def nix_prefetch_url(name: str, url: str, algo: str = 'sha256') -> str: - cmd = ['nix-prefetch-url', '--type', algo, '--name', name, url] - logging.info('running %s', cmd) - out = subprocess.check_output(cmd) - return out.decode('utf-8').strip() - - -def fill_in_hash(versions: OurVersionJSON) -> OurVersionJSON: - """Fill in sha256 hashes for anything missing them.""" - urls_to_hash = {} - def _fill_in_hash(system_name: str, release_type_name: str, release_channel_name: str, release: Dict[str, str]) -> Dict[str, str]: - if "sha256" in release: - logging.info("%s/%s/%s: skipping fetch, sha256 already present", system_name, release_type_name, release_channel_name) - return release - url = release["url"] - if url in urls_to_hash: - logging.info("%s/%s/%s: found url %s in cache", system_name, release_type_name, release_channel_name, url) - release["sha256"] = urls_to_hash[url] - return release - logging.info("%s/%s/%s: fetching %s", system_name, release_type_name, release_channel_name, url) - if release["needsAuth"]: - if not FLAGS.username or not FLAGS.token: - raise Exception("fetching %s/%s/%s from %s requires --username and --token" % (system_name, release_type_name, release_channel_name, url)) - url += f"?username={FLAGS.username}&token={FLAGS.token}" - release["sha256"] = nix_prefetch_url(release["name"], url) - urls_to_hash[url] = release["sha256"] - return release - return iter_version(versions, _fill_in_hash) - - -def main(argv): - factorio_versions = fetch_versions() - new_our_versions = generate_our_versions(factorio_versions) - old_our_versions = None - our_versions_path = find_versions_json() - if our_versions_path: - logging.info('Loading old versions.json from %s', our_versions_path) - with open(our_versions_path, 'r') as f: - old_our_versions = json.load(f) - if old_our_versions: - logging.info('Merging in old hashes') - new_our_versions = merge_versions(old_our_versions, new_our_versions) - logging.info('Fetching necessary tars to get hashes') - new_our_versions = fill_in_hash(new_our_versions) - with open(our_versions_path, 'w') as f: - logging.info('Writing versions.json to %s', our_versions_path) - json.dump(new_our_versions, f, sort_keys=True, indent=2) - f.write("\n") - -if __name__ == '__main__': - app.run(main) diff --git a/pkgs/games/factorio/versions.json b/pkgs/games/factorio/versions.json deleted file mode 100644 index 63ea8becf28f..000000000000 --- a/pkgs/games/factorio/versions.json +++ /dev/null @@ -1,68 +0,0 @@ -{ - "x86_64-linux": { - "alpha": { - "experimental": { - "name": "factorio_alpha_x64-2.0.8.tar.xz", - "needsAuth": true, - "sha256": "11g1fgfm0lki9j2jsfmvlxzisbyx7482ia2qf7gnjcqhp6jkdsll", - "tarDirectory": "x64", - "url": "https://factorio.com/get-download/2.0.8/alpha/linux64", - "version": "2.0.8" - }, - "stable": { - "name": "factorio_alpha_x64-2.0.8.tar.xz", - "needsAuth": true, - "sha256": "11g1fgfm0lki9j2jsfmvlxzisbyx7482ia2qf7gnjcqhp6jkdsll", - "tarDirectory": "x64", - "url": "https://factorio.com/get-download/2.0.8/alpha/linux64", - "version": "2.0.8" - } - }, - "demo": { - "experimental": { - "name": "factorio_demo_x64-1.1.110.tar.xz", - "needsAuth": false, - "sha256": "0dasxgrybl00vrabgrlarsvg0hdg5rvn3y4hsljhqc4zpbf93nxx", - "tarDirectory": "x64", - "url": "https://factorio.com/get-download/1.1.110/demo/linux64", - "version": "1.1.110" - }, - "stable": { - "name": "factorio_demo_x64-1.1.110.tar.xz", - "needsAuth": false, - "sha256": "0dasxgrybl00vrabgrlarsvg0hdg5rvn3y4hsljhqc4zpbf93nxx", - "tarDirectory": "x64", - "url": "https://factorio.com/get-download/1.1.110/demo/linux64", - "version": "1.1.110" - } - }, - "expansion": { - "stable": { - "name": "factorio_expansion_x64-2.0.8.tar.xz", - "needsAuth": true, - "sha256": "0q3abb01ld1mlbp21lgzpa62j1gybs982yzan5j1axma9n1ax3j0", - "tarDirectory": "x64", - "url": "https://factorio.com/get-download/2.0.8/expansion/linux64", - "version": "2.0.8" - } - }, - "headless": { - "experimental": { - "name": "factorio_headless_x64-2.0.8.tar.xz", - "needsAuth": false, - "sha256": "1jp1vlc4indicgy0xnrxq87h32wcv9s4g2hqbfb4ygiaam6lqnfr", - "tarDirectory": "x64", - "url": "https://factorio.com/get-download/2.0.8/headless/linux64", - "version": "2.0.8" - }, - "stable": { - "name": "factorio_headless_x64-2.0.8.tar.xz", - "needsAuth": false, - "sha256": "1jp1vlc4indicgy0xnrxq87h32wcv9s4g2hqbfb4ygiaam6lqnfr", - "tarDirectory": "x64", - "url": "https://factorio.com/get-download/2.0.8/headless/linux64", - "version": "2.0.8" - } - } - } -} diff --git a/pkgs/top-level/all-packages.nix b/pkgs/top-level/all-packages.nix index 5e1c04fdb8bb..fcfaf2ebc54a 100644 --- a/pkgs/top-level/all-packages.nix +++ b/pkgs/top-level/all-packages.nix @@ -36639,9 +36639,9 @@ with pkgs; fltk = fltk-minimal; }; - factorio = callPackage ../games/factorio { + factorio = callPackage ../by-name/fa/factorio/package.nix { releaseType = "alpha"; - versionsJson = ../games/factorio/versions-1.json; + versionsJson = ../by-name/fa/factorio/versions-1.json; }; factorio-experimental = factorio.override { releaseType = "alpha"; experimental = true; }; @@ -36662,13 +36662,13 @@ with pkgs; factorio_1-demo = factorio-demo; - factorio_2 = factorio.override { versionsJson = ../games/factorio/versions.json; }; + factorio_2 = factorio.override { versionsJson = ../by-name/fa/factorio/versions.json; }; - factorio_2-experimental = factorio-experimental.override { versionsJson = ../games/factorio/versions.json; }; + factorio_2-experimental = factorio-experimental.override { versionsJson = ../by-name/fa/factorio/versions.json; }; - factorio_2-headless = factorio-headless.override { versionsJson = ../games/factorio/versions.json; }; + factorio_2-headless = factorio-headless.override { versionsJson = ../by-name/fa/factorio/versions.json; }; - factorio_2-headless-experimental = factorio-headless-experimental.override { versionsJson = ../games/factorio/versions.json; }; + factorio_2-headless-experimental = factorio-headless-experimental.override { versionsJson = ../by-name/fa/factorio/versions.json; }; # there is no factorio_2-demo @@ -36676,9 +36676,9 @@ with pkgs; factorio-space-age-experimental = factorio_2.override { releaseType = "expansion"; experimental = true; }; - factorio-mods = callPackage ../games/factorio/mods.nix { }; + factorio-mods = callPackage ../by-name/fa/factorio/mods.nix { }; - factorio-utils = callPackage ../games/factorio/utils.nix { }; + factorio-utils = callPackage ../by-name/fa/factorio/utils.nix { }; fairymax = callPackage ../games/fairymax { };