summary refs log tree commit diff
path: root/pkgs/games/factorio/utils.nix
diff options
context:
space:
mode:
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
+        '';
+      };
+}