summary refs log tree commit diff
path: root/pkgs/games/factorio/utils.nix
diff options
context:
space:
mode:
authorEric Litak <elitak@gmail.com>2016-08-03 06:44:15 -0700
committerEric Litak <elitak@gmail.com>2016-08-03 16:44:51 -0700
commitd33540734ffd5da87fc01fdc959463b77fc267bf (patch)
tree45580d9e8e88a6d7824cc139f2f7f0a6291a4c4c /pkgs/games/factorio/utils.nix
parent4b96a2d14825f4cc3138b23c25d1b3d8c1d68ab2 (diff)
downloadnixpkgs-d33540734ffd5da87fc01fdc959463b77fc267bf.tar
nixpkgs-d33540734ffd5da87fc01fdc959463b77fc267bf.tar.gz
nixpkgs-d33540734ffd5da87fc01fdc959463b77fc267bf.tar.bz2
nixpkgs-d33540734ffd5da87fc01fdc959463b77fc267bf.tar.lz
nixpkgs-d33540734ffd5da87fc01fdc959463b77fc267bf.tar.xz
nixpkgs-d33540734ffd5da87fc01fdc959463b77fc267bf.tar.zst
nixpkgs-d33540734ffd5da87fc01fdc959463b77fc267bf.zip
factorio: rudimentary mod support for factorio's nixos module
Diffstat (limited to 'pkgs/games/factorio/utils.nix')
-rw-r--r--pkgs/games/factorio/utils.nix49
1 files changed, 49 insertions, 0 deletions
diff --git a/pkgs/games/factorio/utils.nix b/pkgs/games/factorio/utils.nix
new file mode 100644
index 00000000000..563ece6cb9c
--- /dev/null
+++ b/pkgs/games/factorio/utils.nix
@@ -0,0 +1,49 @@
+# This file provides a top-level function that will be used by both nixpkgs and nixos
+# to generate mod directories for use at runtime by factorio.
+{ stdenv }:
+with stdenv.lib;
+{
+  mkModDirDrv = mods: # a list of mod derivations
+    let
+      recursiveDeps = modDrv: [modDrv] ++ optionals (modDrv.deps == []) (map recursiveDeps modDrv.deps);
+      modDrvs = unique (flatten (map recursiveDeps mods));
+    in
+    stdenv.mkDerivation {
+      name = "factorio-mod-directory";
+
+      preferLocalBuild = true;
+      buildCommand = ''
+        mkdir -p $out
+        for modDrv in ${toString modDrvs}; do
+          # NB: there will only ever be a single zip file in each mod derivation's output dir
+          ln -s $modDrv/*.zip $out
+        done
+      '';
+    };
+
+    modDrv = { allRecommendedMods, allOptionalMods }:
+      { src
+      , name ? null
+      , deps ? []
+      , optionalDeps ? []
+      , recommendedDeps ? []
+      }: stdenv.mkDerivation {
+
+        inherit src;
+
+        # Use the name of the zip, but endstrip ".zip" and possibly the querystring that gets left in by fetchurl
+        name = replaceStrings ["_"] ["-"] (if name != null then name else removeSuffix ".zip" (head (splitString "?" src.name)));
+
+        deps = deps ++ optionals allOptionalMods optionalDeps
+                    ++ optionals allRecommendedMods recommendedDeps;
+
+        preferLocalBuild = true;
+        buildCommand = ''
+          mkdir -p $out
+          srcBase=$(basename $src)
+          srcBase=''${srcBase#*-}  # strip nix hash
+          srcBase=''${srcBase%\?*} # strip querystring leftover from fetchurl
+          cp $src $out/$srcBase
+        '';
+      };
+}