diff options
author | Eric Litak <elitak@gmail.com> | 2016-04-11 21:19:14 -0700 |
---|---|---|
committer | Eric Litak <elitak@gmail.com> | 2016-04-14 23:03:04 -0700 |
commit | c6750d2f46d07228b4986fd4e93e286473374dd6 (patch) | |
tree | 1ef26c0b1ae6b7b508714e21cdcb00e3841ac878 /pkgs/games/factorio | |
parent | ff44872c777cf0bf12c907e7f6a5d76acb0f8fb2 (diff) | |
download | nixlib-c6750d2f46d07228b4986fd4e93e286473374dd6.tar nixlib-c6750d2f46d07228b4986fd4e93e286473374dd6.tar.gz nixlib-c6750d2f46d07228b4986fd4e93e286473374dd6.tar.bz2 nixlib-c6750d2f46d07228b4986fd4e93e286473374dd6.tar.lz nixlib-c6750d2f46d07228b4986fd4e93e286473374dd6.tar.xz nixlib-c6750d2f46d07228b4986fd4e93e286473374dd6.tar.zst nixlib-c6750d2f46d07228b4986fd4e93e286473374dd6.zip |
factorio: refactor in preparation for headless version
Diffstat (limited to 'pkgs/games/factorio')
-rw-r--r-- | pkgs/games/factorio/default.nix | 130 |
1 files changed, 79 insertions, 51 deletions
diff --git a/pkgs/games/factorio/default.nix b/pkgs/games/factorio/default.nix index 3118c3fffb1b..f9ea485dca7e 100644 --- a/pkgs/games/factorio/default.nix +++ b/pkgs/games/factorio/default.nix @@ -4,80 +4,108 @@ # Begin download parameters , username ? "" , password ? "" +, releaseType }: +assert releaseType == "alpha" || releaseType == "headless"; + +with stdenv.lib; let version = "0.12.28"; + isHeadless = releaseType == "headless"; + + 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"; - fetch = callPackage ./fetch.nix { username = username; password = password; }; - arch = if stdenv.system == "x86_64-linux" then "x64" - else if stdenv.system == "i686-linux" then "x32" - else abort "Unsupported platform"; + authenticatedFetch = callPackage ./fetch.nix { inherit username password; }; - variants = { + fetch = rec { + url = "https://www.factorio.com/get-download/${version}/${releaseType}/${arch.inUrl}"; + name = "factorio_${releaseType}_${arch.inTar}-${version}.tar.gz"; # TODO take this from 302 redirection somehow? fetchurl doesn't help. x64 = { - url = "https://www.factorio.com/get-download/${version}/alpha/linux64"; - sha256 = "01si5n9hb2h0c5q8k3hr3nphsakp9kki84qyp70dgddwqsn8wfjl"; + alpha = authenticatedFetch { inherit url; sha256 = "0vngfrjjib99k6czhg32rikfi36i3p3adx4mxc1z8bi5n70dbwqb"; }; }; - - x32 = { - url = "https://www.factorio.com/get-download/${version}/alpha/linux32"; - sha256 = "13h013ixyhv4rpvh0jv5jry3mrwv65v57nqn16bjh3hr8ip70lkq"; + i386 = { + alpha = authenticatedFetch { inherit url; sha256 = "10135rd9103x79i89p6fh5ssmw612012yyx3yyhb3nzl554zqzbm"; }; }; }; -in -stdenv.mkDerivation rec { - name = "factorio-${version}"; + configBaseCfg = '' + use-system-read-write-data-directories=false + [path] + read-data=$out/share/factorio/data/ + ''; - src = fetch variants.${arch}; + updateConfigSh = '' + #! $SHELL + if [[ -e ~/.factorio/config.cfg ]]; then + # Config file exists, but may have wrong path. + # Try to edit it. I'm sure this is perfectly safe and will never go wrong. + sed -i 's|^read-data=.*|read-data=$out/share/factorio/data/|' ~/.factorio/config.cfg + else + # Config file does not exist. Phew. + install -D $out/share/factorio/config-base.cfg ~/.factorio/config.cfg + fi + ''; - libPath = stdenv.lib.makeLibraryPath [ - alsaLib - libX11 - libXcursor - libXinerama - libXrandr - libXi - mesa_noglu - ]; +in + +stdenv.mkDerivation rec { + name = "factorio-${releaseType}-${version}"; + + src = fetch.${arch.inTar}.${releaseType}; + + libPath = stdenv.lib.makeLibraryPath ( + optionals (! isHeadless) [ + alsaLib + libX11 + libXcursor + libXinerama + libXrandr + libXi + mesa_noglu + ] + ); buildInputs = [ makeWrapper ]; + dontBuild = true; + + # TODO detangle headless/normal mode wrapping, libs, etc. test all urls 32/64/headless/gfx installPhase = '' mkdir -p $out/{bin,share/factorio} - cp -a bin/${arch}/factorio $out/bin/factorio.${arch} - cp -a doc-html data $out/share/factorio/ - - # Fortunately, Factorio already supports system-wide installs. - # Unfortunately it's a bit inconvenient to set the paths. - cat > $out/share/factorio/config-base.cfg <<EOF -use-system-read-write-data-directories=false -[path] -read-data=$out/share/factorio/data/ -EOF - - cat > $out/share/factorio/update-config.sh <<EOF -if [[ -e ~/.factorio/config.cfg ]]; then - # Config file exists, but may have wrong path. - # Try to edit it. I'm sure this is perfectly safe and will never go wrong. - sed -i 's|^read-data=.*|read-data=$out/share/factorio/data/|' ~/.factorio/config.cfg -else - # Config file does not exist. Phew. - install -D $out/share/factorio/config-base.cfg ~/.factorio/config.cfg -fi -EOF - chmod a+x $out/share/factorio/update-config.sh - + cp -a data $out/share/factorio + cp -a bin/${arch.inTar}/factorio $out/bin/factorio patchelf \ --set-interpreter $(cat $NIX_CC/nix-support/dynamic-linker) \ - $out/bin/factorio.${arch} + $out/bin/factorio - makeWrapper $out/bin/factorio.${arch} $out/bin/factorio \ + '' + optionalString (! isHeadless) ('' + mv $out/bin/factorio $out/bin/factorio.${arch.inTar} + makeWrapper $out/bin/factorio.${arch.inTar} $out/bin/factorio \ --prefix LD_LIBRARY_PATH : /run/opengl-driver/lib:$libPath \ --run "$out/share/factorio/update-config.sh" \ --add-flags "-c \$HOME/.factorio/config.cfg" - ''; + # Fortunately, Factorio already supports system-wide installs. + # Unfortunately it's a bit inconvenient to set the paths. + install -m0644 <(cat << EOF + '' + configBaseCfg + '' + EOF + ) $out/share/factorio/config-base.cfg + + install -m0755 <(cat << EOF + '' + updateConfigSh + '' + EOF + ) $out/share/factorio/update-config.sh + cp -a doc-html $out/share/factorio + ''); + + preferLocalBuild = true; meta = { description = "A game in which you build and maintain factories"; @@ -95,7 +123,7 @@ EOF ''; homepage = https://www.factorio.com/; license = stdenv.lib.licenses.unfree; - maintainers = [ stdenv.lib.maintainers.Baughn ]; + maintainers = with stdenv.maintainers; [ Baughn elitak ]; platforms = [ "i686-linux" "x86_64-linux" ]; }; } |