at 24.05-pre 51 lines 1.7 kB view raw
1# This file provides a top-level function that will be used by both nixpkgs and nixos 2# to generate mod directories for use at runtime by factorio. 3{ lib, stdenv }: 4with lib; 5{ 6 mkModDirDrv = mods: modsDatFile: # a list of mod derivations 7 let 8 recursiveDeps = modDrv: [modDrv] ++ map recursiveDeps modDrv.deps; 9 modDrvs = unique (flatten (map recursiveDeps mods)); 10 in 11 stdenv.mkDerivation { 12 name = "factorio-mod-directory"; 13 14 preferLocalBuild = true; 15 buildCommand = '' 16 mkdir -p $out 17 for modDrv in ${toString modDrvs}; do 18 # NB: there will only ever be a single zip file in each mod derivation's output dir 19 ln -s $modDrv/*.zip $out 20 done 21 '' + (lib.optionalString (modsDatFile != null) '' 22 cp ${modsDatFile} $out/mod-settings.dat 23 ''); 24 }; 25 26 modDrv = { allRecommendedMods, allOptionalMods }: 27 { src 28 , name ? null 29 , deps ? [] 30 , optionalDeps ? [] 31 , recommendedDeps ? [] 32 }: stdenv.mkDerivation { 33 34 inherit src; 35 36 # Use the name of the zip, but endstrip ".zip" and possibly the querystring that gets left in by fetchurl 37 name = replaceStrings ["_"] ["-"] (if name != null then name else removeSuffix ".zip" (head (splitString "?" src.name))); 38 39 deps = deps ++ optionals allOptionalMods optionalDeps 40 ++ optionals allRecommendedMods recommendedDeps; 41 42 preferLocalBuild = true; 43 buildCommand = '' 44 mkdir -p $out 45 srcBase=$(basename $src) 46 srcBase=''${srcBase#*-} # strip nix hash 47 srcBase=''${srcBase%\?*} # strip querystring leftover from fetchurl 48 cp $src $out/$srcBase 49 ''; 50 }; 51}