{ stdenv, callPackage, fetchurl, makeWrapper , alsaLib, libX11, libXcursor, libXinerama, libXrandr, libXi, libGL , factorio-utils , releaseType , mods ? [] , username ? "", token ? "" # get/reset token at https://factorio.com/profile , experimental ? false # true means to always use the latest branch }: assert releaseType == "alpha" || releaseType == "headless" || releaseType == "demo"; let 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.16.51 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! ''; 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. binDists = { x86_64-linux = let bdist = bdistForArch { inUrl = "linux64"; inTar = "x64"; }; in { alpha = { stable = bdist { sha256 = "0b4hbpdcrh5hgip9q5dkmw22p66lcdhnr0kmb0w5dw6yi7fnxxh0"; version = "0.16.51"; withAuth = true; }; experimental = bdist { sha256 = "11vwyyf3him2bi0c5cgv0h0k304kvw667ygqplq5giyzcvadjix8"; version = "0.17.16"; withAuth = true; }; }; headless = { stable = bdist { sha256 = "0zrnpg2js0ysvx9y50h3gajldk16mv02dvrwnkazh5kzr1d9zc3c"; version = "0.16.51"; }; experimental = bdist { sha256 = "1sxv4kc5vg53lgjrm5c250hvbg6hqz0ijfxpvfjk7bzps5g6n1fx"; version = "0.17.16"; }; }; demo = { stable = bdist { sha256 = "0zf61z8937yd8pyrjrqdjgd0rjl7snwrm3xw86vv7s7p835san6a"; version = "0.16.51"; }; }; }; i686-linux = let bdist = bdistForArch { inUrl = "linux32"; inTar = "i386"; }; in { alpha = { stable = bdist { sha256 = "0nnfkxxqnywx1z05xnndgh71gp4izmwdk026nnjih74m2k5j086l"; version = "0.14.23"; withAuth = true; nameMut = asGz; }; }; }; }; actual = binDists.${stdenv.hostPlatform.system}.${releaseType}.${branch} or (throw "Factorio ${releaseType}-${branch} binaries for ${stdenv.hostPlatform.system} are not available for download."); bdistForArch = arch: { version , sha256 , withAuth ? false , nameMut ? x: x }: let url = "https://factorio.com/get-download/${version}/${releaseType}/${arch.inUrl}"; name = nameMut "factorio_${releaseType}_${arch.inTar}-${version}.tar.xz"; in { inherit version arch; src = if withAuth then (stdenv.lib.overrideDerivation (fetchurl { inherit name url sha256; curlOpts = [ "--get" "--data-urlencode" "username@username" "--data-urlencode" "token@token" ]; }) (_: { # This preHook hides the credentials from /proc preHook = '' echo -n "${username}" >username echo -n "${token}" >token ''; failureHook = '' cat <