about summary refs log tree commit diff
path: root/pkgs/games/factorio
diff options
context:
space:
mode:
authorEric Litak <elitak@gmail.com>2016-04-11 21:19:14 -0700
committerEric Litak <elitak@gmail.com>2016-04-14 23:03:04 -0700
commitc6750d2f46d07228b4986fd4e93e286473374dd6 (patch)
tree1ef26c0b1ae6b7b508714e21cdcb00e3841ac878 /pkgs/games/factorio
parentff44872c777cf0bf12c907e7f6a5d76acb0f8fb2 (diff)
downloadnixlib-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.nix130
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" ];
   };
 }