{ stdenv, fetchurl, makeWrapper , alsaLib, libpulseaudio, libX11, libXcursor, libXinerama, libXrandr, libXi, libGL , libSM, libICE, libXext, 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.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! ''; 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 = "1fg2wnia6anzya4m53jf2xqwwspvwskz3awdb3j0v3fzijps94wc"; version = "0.17.79"; withAuth = true; }; experimental = bdist { sha256 = "1h0gv7cdn999hm2fl93kq6g98bzd1x3c8afq8v0a04dqjarjgr86"; version = "0.18.32"; withAuth = true; }; }; headless = { stable = bdist { sha256 = "1pr39nm23fj83jy272798gbl9003rgi4vgsi33f2iw3dk3x15kls"; version = "0.17.79"; }; experimental = bdist { sha256 = "017ggrsnhwyfgx99q0wjagafjvk5pb6lcxl72y37gig72bfcapab"; version = "0.18.32"; }; }; demo = { stable = bdist { sha256 = "07qknasaqvzl9vy1fglm7xmdi7ynhmslrb0a209fhbfs0s7qqlgi"; version = "0.17.79"; }; }; }; 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 <