nixos/factorio: add extraSettings and package options
Currently there is no way to set game settings, such as administrators. extraSettings allows users to override default game settings without adding many more settings. The package option allows users to use the experimental version, or override to a specific version with their own modified package.
This commit is contained in:
parent
59c4035e58
commit
637d7a5db9
@ -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}"
|
||||
|
Loading…
Reference in New Issue
Block a user