aboutsummaryrefslogtreecommitdiff
path: root/nixpkgs/nixos/modules/services/games/factorio.nix
diff options
context:
space:
mode:
Diffstat (limited to 'nixpkgs/nixos/modules/services/games/factorio.nix')
-rw-r--r--nixpkgs/nixos/modules/services/games/factorio.nix26
1 files changed, 21 insertions, 5 deletions
diff --git a/nixpkgs/nixos/modules/services/games/factorio.nix b/nixpkgs/nixos/modules/services/games/factorio.nix
index f3831156f45..4b2e1a3c07f 100644
--- a/nixpkgs/nixos/modules/services/games/factorio.nix
+++ b/nixpkgs/nixos/modules/services/games/factorio.nix
@@ -4,14 +4,13 @@ with lib;
let
cfg = config.services.factorio;
- factorio = pkgs.factorio-headless;
name = "Factorio";
stateDir = "/var/lib/${cfg.stateDirName}";
mkSavePath = name: "${stateDir}/saves/${name}.zip";
configFile = pkgs.writeText "factorio.conf" ''
use-system-read-write-data-directories=true
[path]
- read-data=${factorio}/share/factorio/data
+ read-data=${cfg.package}/share/factorio/data
write-data=${stateDir}
'';
serverSettings = {
@@ -37,7 +36,7 @@ let
only_admins_can_pause_the_game = true;
autosave_only_on_server = true;
admins = [];
- };
+ } // cfg.extraSettings;
serverSettingsFile = pkgs.writeText "server-settings.json" (builtins.toJSON (filterAttrsRecursive (n: v: v != null) serverSettings));
modDir = pkgs.factorio-utils.mkModDirDrv cfg.mods;
in
@@ -115,6 +114,14 @@ in
Description of the game that will appear in the listing.
'';
};
+ extraSettings = mkOption {
+ type = types.attrs;
+ default = {};
+ example = { admins = [ "username" ];};
+ description = ''
+ Extra game configuration that will go into server-settings.json
+ '';
+ };
public = mkOption {
type = types.bool;
default = false;
@@ -136,6 +143,15 @@ in
Your factorio.com login credentials. Required for games with visibility public.
'';
};
+ package = mkOption {
+ type = types.package;
+ default = pkgs.factorio-headless;
+ defaultText = "pkgs.factorio-headless";
+ example = "pkgs.factorio-headless-experimental";
+ description = ''
+ Factorio version to use. This defaults to the stable channel.
+ '';
+ };
password = mkOption {
type = types.nullOr types.str;
default = null;
@@ -184,7 +200,7 @@ in
preStart = toString [
"test -e ${stateDir}/saves/${cfg.saveName}.zip"
"||"
- "${factorio}/bin/factorio"
+ "${cfg.package}/bin/factorio"
"--config=${cfg.configFile}"
"--create=${mkSavePath cfg.saveName}"
(optionalString (cfg.mods != []) "--mod-directory=${modDir}")
@@ -197,7 +213,7 @@ in
StateDirectory = cfg.stateDirName;
UMask = "0007";
ExecStart = toString [
- "${factorio}/bin/factorio"
+ "${cfg.package}/bin/factorio"
"--config=${cfg.configFile}"
"--port=${toString cfg.port}"
"--start-server=${mkSavePath cfg.saveName}"