factorio-demo: init at 0.14.23 (#25265)

This commit is contained in:
Guillaume Maudoux 2017-04-30 03:51:07 +02:00 committed by Joachim F
parent 99c28df9e5
commit 92f53af64d
2 changed files with 61 additions and 50 deletions

View File

@ -6,12 +6,11 @@
, username ? "" , password ? "" , username ? "" , password ? ""
}: }:
assert releaseType == "alpha" || releaseType == "headless"; assert releaseType == "alpha" || releaseType == "headless" || releaseType == "demo";
with stdenv.lib; with stdenv.lib;
let let
version = "0.15.1"; version = if releaseType != "demo" then "0.15.1" else "0.14.23";
isHeadless = releaseType == "headless";
arch = if stdenv.system == "x86_64-linux" then { arch = if stdenv.system == "x86_64-linux" then {
inUrl = "linux64"; inUrl = "linux64";
@ -24,15 +23,18 @@ let
authenticatedFetch = callPackage ./fetch.nix { inherit username password; }; authenticatedFetch = callPackage ./fetch.nix { inherit username password; };
fetch = rec { fetch = rec {
extension = if releaseType != "demo" then "tar.xz" else "tar.gz";
url = "https://www.factorio.com/get-download/${version}/${releaseType}/${arch.inUrl}"; url = "https://www.factorio.com/get-download/${version}/${releaseType}/${arch.inUrl}";
name = "factorio_${releaseType}_${arch.inTar}-${version}.tar.xz"; name = "factorio_${releaseType}_${arch.inTar}-${version}.${extension}";
x64 = { x64 = {
headless = fetchurl { inherit name url; sha256 = "1z84a9yzlld6fv53viwvswp52hlc9fkxzhb2pil7sidzkws3g49l"; }; headless = fetchurl { inherit name url; sha256 = "1z84a9yzlld6fv53viwvswp52hlc9fkxzhb2pil7sidzkws3g49l"; };
alpha = authenticatedFetch { inherit name url; sha256 = "11bxasghrhqb2yg1842v1608x3mjdjv3015jgifpv1xmcqak44jp"; }; alpha = authenticatedFetch { inherit name url; sha256 = "11bxasghrhqb2yg1842v1608x3mjdjv3015jgifpv1xmcqak44jp"; };
demo = fetchurl { inherit name url; sha256 = "10a2lwmspqviwgymn3zhjgpiynsa6dplgnikdirma5sl2hhcfb6s"; };
}; };
i386 = { i386 = {
headless = abort "Factorio 32-bit headless binaries are not available for download."; headless = abort "Factorio 32-bit headless binaries are not available for download.";
alpha = abort "Factorio 32-bit client is not available for this version."; alpha = abort "Factorio 32-bit client is not available for this version.";
demo = abort "Factorio 32-bit demo binaries are not available for download.";
}; };
}; };
@ -95,55 +97,62 @@ let
platforms = [ "i686-linux" "x86_64-linux" ]; platforms = [ "i686-linux" "x86_64-linux" ];
}; };
}; };
headless = base;
alpha = base // {
buildInputs = [ makeWrapper ]; releases = rec {
headless = base;
demo = base // {
libPath = stdenv.lib.makeLibraryPath [ buildInputs = [ makeWrapper ];
alsaLib
libX11
libXcursor
libXinerama
libXrandr
libXi
mesa_noglu
];
installPhase = base.installPhase + '' libPath = stdenv.lib.makeLibraryPath [
wrapProgram $out/bin/factorio \ alsaLib
--prefix LD_LIBRARY_PATH : /run/opengl-driver/lib:$libPath \ libX11
--run "$out/share/factorio/update-config.sh" \ libXcursor
--argv0 "" \ libXinerama
--add-flags "-c \$HOME/.factorio/config.cfg ${optionalString (mods != []) "--mod-directory=${modDir}"}" libXrandr
libXi
mesa_noglu
];
# TODO Currently, every time a mod is changed/added/removed using the installPhase = base.installPhase + ''
# modlist, a new derivation will take up the entire footprint of the wrapProgram $out/bin/factorio \
# client. The only way to avoid this is to remove the mods arg from the --prefix LD_LIBRARY_PATH : /run/opengl-driver/lib:$libPath \
# package function. The modsDir derivation will have to be built --run "$out/share/factorio/update-config.sh" \
# separately and have the user specify it in the .factorio config or --argv0 "" \
# right along side it using a symlink into the store I think i will --add-flags "-c \$HOME/.factorio/config.cfg ${optionalString (mods != []) "--mod-directory=${modDir}"}"
# just remove mods for the client derivation entirely. this is much
# cleaner and more useful for headless mode.
# TODO: trying to toggle off a mod will result in read-only-fs-error. # TODO Currently, every time a mod is changed/added/removed using the
# not much we can do about that except warn the user somewhere. In # modlist, a new derivation will take up the entire footprint of the
# fact, no exit will be clean, since this error will happen on close # client. The only way to avoid this is to remove the mods arg from the
# regardless. just prints an ugly stacktrace but seems to be otherwise # package function. The modsDir derivation will have to be built
# harmless, unless maybe the user forgets and tries to use the mod # separately and have the user specify it in the .factorio config or
# manager. # right along side it using a symlink into the store I think i will
# just remove mods for the client derivation entirely. this is much
# cleaner and more useful for headless mode.
install -m0644 <(cat << EOF # TODO: trying to toggle off a mod will result in read-only-fs-error.
${configBaseCfg} # not much we can do about that except warn the user somewhere. In
EOF # fact, no exit will be clean, since this error will happen on close
) $out/share/factorio/config-base.cfg # regardless. just prints an ugly stacktrace but seems to be otherwise
# harmless, unless maybe the user forgets and tries to use the mod
# manager.
install -m0755 <(cat << EOF install -m0644 <(cat << EOF
${updateConfigSh} ${configBaseCfg}
EOF EOF
) $out/share/factorio/update-config.sh ) $out/share/factorio/config-base.cfg
cp -a doc-html $out/share/factorio install -m0755 <(cat << EOF
''; ${updateConfigSh}
EOF
) $out/share/factorio/update-config.sh
'';
};
alpha = demo // {
installPhase = demo.installPhase + ''
cp -a doc-html $out/share/factorio
'';
};
}; };
in stdenv.mkDerivation (if isHeadless then headless else alpha) in stdenv.mkDerivation (releases.${releaseType})

View File

@ -16644,6 +16644,8 @@ with pkgs;
factorio-headless = callPackage ../games/factorio { releaseType = "headless"; }; factorio-headless = callPackage ../games/factorio { releaseType = "headless"; };
factorio-demo = callPackage ../games/factorio { releaseType = "demo"; };
factorio-mods = callPackage ../games/factorio/mods.nix { }; factorio-mods = callPackage ../games/factorio/mods.nix { };
factorio-utils = callPackage ../games/factorio/utils.nix { }; factorio-utils = callPackage ../games/factorio/utils.nix { };