From 02d715d29b02ca02a0fa2ef296cb54c261f29e4f Mon Sep 17 00:00:00 2001 From: Eric Litak Date: Tue, 5 Sep 2017 13:39:10 -0700 Subject: factorio: refactored the arch+version abstraction --- pkgs/games/factorio/default.nix | 68 ++++++++++++++++++++++++----------------- 1 file changed, 40 insertions(+), 28 deletions(-) (limited to 'pkgs/games/factorio') diff --git a/pkgs/games/factorio/default.nix b/pkgs/games/factorio/default.nix index fca28b17223f..af3d30a27158 100644 --- a/pkgs/games/factorio/default.nix +++ b/pkgs/games/factorio/default.nix @@ -6,36 +6,46 @@ , username ? "" , password ? "" }: -assert releaseType == "alpha" || releaseType == "headless" || releaseType == "demo"; +assert releaseType == "alpha" + || releaseType == "headless" + || releaseType == "demo"; -with stdenv.lib; let - version = if releaseType != "demo" then "0.15.33" else "0.15.33"; - arch = if stdenv.system == "x86_64-linux" then { - inUrl = "linux64"; - inTar = "x64"; - } else if stdenv.system == "i686-linux" then { - inUrl = "linux32"; - inTar = "i386"; - } else abort "Unsupported platform"; - - authenticatedFetch = callPackage ./fetch.nix { inherit username password; }; - - fetch = rec { - url = "https://www.factorio.com/get-download/${version}/${releaseType}/${arch.inUrl}"; - name = "factorio_${releaseType}_${arch.inTar}-${version}.tar.xz"; - x64 = { - headless = fetchurl { inherit name url; sha256 = "17x0dlmfd7jwmpmn5i8wag28rl01iysqz3ri6g6msxjnvj5l6byn"; }; - alpha = authenticatedFetch { inherit name url; sha256 = "1m2r0n99ngqq47s9fzr09d347i15an6x9v1qlij8yf8w7lyrdy4z"; }; - demo = fetchurl { inherit name url; sha256 = "03nwn4838yhqq0r76pf2m4wxi32rsq0knsxmq3qq4ycji89q1dyc"; }; + # NB If you nix-prefetch-url any of these, be sure to add a --name arg, + # where the ultimate "_" (before the version) is changed to a "-". + binDists = { + x86_64-linux = let bdist = bdistForArch { inUrl = "linux64"; inTar = "x64"; }; in { + alpha = bdist { sha256 = "1m2r0n99ngqq47s9fzr09d347i15an6x9v1qlij8yf8w7lyrdy4z"; fetcher = authenticatedFetch; }; + headless = bdist { sha256 = "17x0dlmfd7jwmpmn5i8wag28rl01iysqz3ri6g6msxjnvj5l6byn"; }; + demo = bdist { sha256 = "03nwn4838yhqq0r76pf2m4wxi32rsq0knsxmq3qq4ycji89q1dyc"; }; }; - i386 = { - headless = abort "Factorio 32-bit headless binaries are not available for download."; - alpha = abort "Factorio 32-bit client is not available for this version."; - demo = abort "Factorio 32-bit demo binaries are not available for download."; + i686-linux = let bdist = bdistForArch { inUrl = "linux32"; inTar = "i386"; }; in { + alpha = bdist { sha256 = "0nnfkxxqnywx1z05xnndgh71gp4izmwdk026nnjih74m2k5j086l"; version = "0.14.23"; nameMut = asGz; }; + headless = bdist { }; + demo = bdist { }; }; }; + actual = binDists.${stdenv.system}.${releaseType}; + + bdistForArch = arch: { sha256 ? null + , version ? "0.15.33" + , fetcher ? fetchurl + , nameMut ? x: x + }: + if sha256 == null then + abort "Factorio ${releaseType}-${arch.inTar} binaries are not (and were never?) available to download" + else { + inherit version arch; + src = fetcher { + inherit sha256; + url = "https://www.factorio.com/get-download/${version}/${releaseType}/${arch.inUrl}"; + name = nameMut "factorio_${releaseType}_${arch.inTar}-${version}.tar.xz"; + }; + }; + authenticatedFetch = callPackage ./fetch.nix { inherit username password; }; + asGz = builtins.replaceStrings [".xz"] [".gz"]; + configBaseCfg = '' use-system-read-write-data-directories=false @@ -59,10 +69,10 @@ let modDir = factorio-utils.mkModDirDrv mods; - base = { + base = with actual; { name = "factorio-${releaseType}-${version}"; - src = fetch.${arch.inTar}.${releaseType}; + inherit src; preferLocalBuild = true; dontBuild = true; @@ -117,8 +127,9 @@ let wrapProgram $out/bin/factorio \ --prefix LD_LIBRARY_PATH : /run/opengl-driver/lib:$libPath \ --run "$out/share/factorio/update-config.sh" \ - --argv0 "" \ - --add-flags "-c \$HOME/.factorio/config.cfg ${optionalString (mods != []) "--mod-directory=${modDir}"}" + --argv0 "" \ + --add-flags "-c \$HOME/.factorio/config.cfg" \ + ${if mods!=[] then "--add-flags --mod-directory=${modDir}" else ""} # TODO Currently, every time a mod is changed/added/removed using the # modlist, a new derivation will take up the entire footprint of the @@ -154,4 +165,5 @@ let ''; }; }; + in stdenv.mkDerivation (releases.${releaseType}) -- cgit 1.4.1