From a1115f5ea5a82c5758194e7ad72718237a85c1ba Mon Sep 17 00:00:00 2001 From: Daniel Hill Date: Mon, 31 Oct 2022 22:38:57 +1300 Subject: [PATCH 1/3] factorio: make it easier to supply a custom versions.json Signed-off-by: Daniel Hill --- pkgs/games/factorio/default.nix | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/pkgs/games/factorio/default.nix b/pkgs/games/factorio/default.nix index 17f9947b4982..f47eda65b6c1 100644 --- a/pkgs/games/factorio/default.nix +++ b/pkgs/games/factorio/default.nix @@ -3,6 +3,7 @@ , libSM, libICE, libXext, factorio-utils , releaseType , mods ? [] +, versionsJson ? ./versions.json , username ? "", token ? "" # get/reset token at https://factorio.com/profile , experimental ? false # true means to always use the latest branch }: @@ -60,7 +61,7 @@ let # NB `experimental` directs us to take the latest build, regardless of its branch; # hence the (stable, experimental) pairs may sometimes refer to the same distributable. - versions = importJSON ./versions.json; + versions = importJSON versionsJson; binDists = makeBinDists versions; actual = binDists.${stdenv.hostPlatform.system}.${releaseType}.${branch} or (throw "Factorio ${releaseType}-${branch} binaries for ${stdenv.hostPlatform.system} are not available for download."); From c6e6d44fe5f6c4ee4350ed330eb7996b57232ed8 Mon Sep 17 00:00:00 2001 From: Daniel Hill Date: Tue, 1 Nov 2022 06:57:07 +1300 Subject: [PATCH 2/3] factorio: let us change mod settings --- nixos/modules/services/games/factorio.nix | 9 ++++++++- pkgs/games/factorio/default.nix | 3 ++- pkgs/games/factorio/utils.nix | 6 ++++-- 3 files changed, 14 insertions(+), 4 deletions(-) diff --git a/nixos/modules/services/games/factorio.nix b/nixos/modules/services/games/factorio.nix index f54c265c34b0..0dcd5b1cebdb 100644 --- a/nixos/modules/services/games/factorio.nix +++ b/nixos/modules/services/games/factorio.nix @@ -39,7 +39,7 @@ let } // cfg.extraSettings; serverSettingsFile = pkgs.writeText "server-settings.json" (builtins.toJSON (filterAttrsRecursive (n: v: v != null) serverSettings)); serverAdminsFile = pkgs.writeText "server-adminlist.json" (builtins.toJSON cfg.admins); - modDir = pkgs.factorio-utils.mkModDirDrv cfg.mods; + modDir = pkgs.factorio-utils.mkModDirDrv cfg.mods cfg.mods-dat; in { options = { @@ -136,6 +136,13 @@ in derivations via nixos-channel. Until then, this is for experts only. ''; }; + mods-dat = mkOption { + type = types.nullOr types.path; + default = null; + description = lib.mdDoc '' + Mods settings can be changed by specifying a dat file. + ''; + }; game-name = mkOption { type = types.nullOr types.str; default = "Factorio Game"; diff --git a/pkgs/games/factorio/default.nix b/pkgs/games/factorio/default.nix index f47eda65b6c1..a65ce6bac0db 100644 --- a/pkgs/games/factorio/default.nix +++ b/pkgs/games/factorio/default.nix @@ -3,6 +3,7 @@ , libSM, libICE, libXext, factorio-utils , releaseType , mods ? [] +, mods-dat ? null , versionsJson ? ./versions.json , username ? "", token ? "" # get/reset token at https://factorio.com/profile , experimental ? false # true means to always use the latest branch @@ -130,7 +131,7 @@ let fi ''; - modDir = factorio-utils.mkModDirDrv mods; + modDir = factorio-utils.mkModDirDrv mods mods-dat; base = with actual; { pname = "factorio-${releaseType}"; diff --git a/pkgs/games/factorio/utils.nix b/pkgs/games/factorio/utils.nix index be5b7fd5eccc..86b0b2f85104 100644 --- a/pkgs/games/factorio/utils.nix +++ b/pkgs/games/factorio/utils.nix @@ -3,7 +3,7 @@ { lib, stdenv }: with lib; { - mkModDirDrv = mods: # a list of mod derivations + mkModDirDrv = mods: modsDatFile: # a list of mod derivations let recursiveDeps = modDrv: [modDrv] ++ map recursiveDeps modDrv.deps; modDrvs = unique (flatten (map recursiveDeps mods)); @@ -18,7 +18,9 @@ with lib; # NB: there will only ever be a single zip file in each mod derivation's output dir ln -s $modDrv/*.zip $out done - ''; + '' + (if modsDatFile != null then '' + cp ${modsDatFile} $out/mod-settings.dat + '' else ""); }; modDrv = { allRecommendedMods, allOptionalMods }: From 5faeb3ba2db1f599ab55d48dddf4f1ff54eaa47f Mon Sep 17 00:00:00 2001 From: Luke Granger-Brown Date: Tue, 6 Dec 2022 18:29:54 +0000 Subject: [PATCH 3/3] factorio: fix review comments --- nixos/modules/services/games/factorio.nix | 4 +++- pkgs/games/factorio/utils.nix | 4 ++-- 2 files changed, 5 insertions(+), 3 deletions(-) diff --git a/nixos/modules/services/games/factorio.nix b/nixos/modules/services/games/factorio.nix index 0dcd5b1cebdb..1b2f5bd840b5 100644 --- a/nixos/modules/services/games/factorio.nix +++ b/nixos/modules/services/games/factorio.nix @@ -140,7 +140,9 @@ in type = types.nullOr types.path; default = null; description = lib.mdDoc '' - Mods settings can be changed by specifying a dat file. + Mods settings can be changed by specifying a dat file, in the [mod + settings file + format](https://wiki.factorio.com/Mod_settings_file_format). ''; }; game-name = mkOption { diff --git a/pkgs/games/factorio/utils.nix b/pkgs/games/factorio/utils.nix index 86b0b2f85104..d2b52ae48366 100644 --- a/pkgs/games/factorio/utils.nix +++ b/pkgs/games/factorio/utils.nix @@ -18,9 +18,9 @@ with lib; # NB: there will only ever be a single zip file in each mod derivation's output dir ln -s $modDrv/*.zip $out done - '' + (if modsDatFile != null then '' + '' + (lib.optionalString (modsDatFile != null) '' cp ${modsDatFile} $out/mod-settings.dat - '' else ""); + ''); }; modDrv = { allRecommendedMods, allOptionalMods }: