Factorio: Difference between revisions
Overhaul page per the MoS. |
|||
Line 1: | Line 1: | ||
[https:// | <strong>[https://www.factorio.com Factorio]</strong> is a video game created by [https://www.factorio.com/game/about Wube Software]. Factorio has a multiplayer mode that requires a dedicated server, which is available on Nixpkgs and can be installed on NixOS. | ||
== Installation == | |||
{{Unfree}} | |||
To install the Factorio server, add | To install the Factorio server, add the following to your [[Overview_of_the_NixOS_Linux_distribution#Declarative_Configuration|NixOS configuration]]: | ||
< | {{file|configuration.nix|nix| | ||
environment.systemPackages = | <nowiki> | ||
{ | |||
]; | environment.systemPackages = [ pkgs.factorio-headless ]; | ||
nixpkgs.config.allowUnfreePredicate = pkg: builtins.elem (lib.getName pkg) [ | |||
nixpkgs.config. | "factorio-headless" | ||
</ | ]; | ||
} | |||
</nowiki> | |||
}} | |||
{{Evaluate}} | |||
It | It is important to only install <code>factorio-headless</code> instead of <code>factorio</code> because the headless version is a redistributable download that does not require login credentials. | ||
== Configuration == | == Configuration == | ||
Here is a minimum viable configuration for the Factorio server | Here is a minimum viable configuration for the Factorio server: | ||
< | {{file|configuration.nix|nix| | ||
services.factorio = { | <nowiki> | ||
{ | |||
services.factorio = { | |||
}; | enable = true; | ||
</ | openFirewall = true; | ||
}; | |||
} | |||
</nowiki> | |||
}} | |||
This will run a | This will run a unprotected server that binds to the <code>0.0.0.0</code> local IP address and uses the default UDP port of <code>34197</code>, with an auto-generated save file. Factorio servers support IPv6 by setting <code>bind = "[::]";</code>. All default settings can be seen here: {{nixos:option|services.factorio.*}} | ||
== Mods == | === Mods === | ||
The NixOS module for Factorio supports [https://wiki.factorio.com/Modding Factorio mods | The NixOS module for Factorio supports [https://wiki.factorio.com/Modding Factorio third-party modifications], or <i>mods</i>, which are just zip files with extra game content. While technically you can create a full derivation for mods, in practice this can get complicated, especially since authentication is required to download mods from the official mod site. | ||
Instead, you can download the mods you need separately from https://mods.factorio.com/, place them in a folder such as <code>/home/username/factorio-mods</code>, and put this code in your configuration. | Instead, you can download the mods you need separately from https://mods.factorio.com/, place them in a folder such as <code>/home/username/factorio-mods</code>, and put this code in your [[Overview_of_the_NixOS_Linux_distribution#Declarative_Configuration|NixOS configuration]]. (credit to [https://github.com/nicball/nuc-nixos-configuration/blob/f70f2c4d8da1f2648b5e595d9058e0f105409fd7/factorio.nix#L16 nicball]): | ||
< | {{file|configuration.nix|nix| | ||
services.factorio | <nowiki> | ||
{ | |||
services.factorio.mods = | |||
let | let | ||
inherit (pkgs) lib; | inherit (pkgs) lib; | ||
Line 54: | Line 62: | ||
cp ${modDir + "/${modFileName}"} $out/${modFileName} | cp ${modDir + "/${modFileName}"} $out/${modFileName} | ||
'' | '' | ||
// { deps = []; }; | |||
in | |||
builtins.map modToDrv modList; | |||
} | } | ||
</ | </nowiki> | ||
}} | |||
== See also == | |||
* [https://wiki.factorio.com/Multiplayer The Factorio wiki page on Multiplayer] | |||
[[Category:Gaming]] | [[Category:Gaming]] | ||
[[Category:Server]] | [[Category:Server]] |
Revision as of 14:32, 30 October 2024
Factorio is a video game created by Wube Software. Factorio has a multiplayer mode that requires a dedicated server, which is available on Nixpkgs and can be installed on NixOS.
Installation
To install the Factorio server, add the following to your NixOS configuration:
configuration.nix
{
environment.systemPackages = [ pkgs.factorio-headless ];
nixpkgs.config.allowUnfreePredicate = pkg: builtins.elem (lib.getName pkg) [
"factorio-headless"
];
}
It is important to only install factorio-headless
instead of factorio
because the headless version is a redistributable download that does not require login credentials.
Configuration
Here is a minimum viable configuration for the Factorio server:
configuration.nix
{
services.factorio = {
enable = true;
openFirewall = true;
};
}
This will run a unprotected server that binds to the 0.0.0.0
local IP address and uses the default UDP port of 34197
, with an auto-generated save file. Factorio servers support IPv6 by setting bind = "[::]";
. All default settings can be seen here: services.factorio.*
Mods
The NixOS module for Factorio supports Factorio third-party modifications, or mods, which are just zip files with extra game content. While technically you can create a full derivation for mods, in practice this can get complicated, especially since authentication is required to download mods from the official mod site.
Instead, you can download the mods you need separately from https://mods.factorio.com/, place them in a folder such as /home/username/factorio-mods
, and put this code in your NixOS configuration. (credit to nicball):
configuration.nix
{
services.factorio.mods =
let
inherit (pkgs) lib;
modDir = /home/username/factorio-mods;
modList = lib.pipe modDir [
builtins.readDir
(lib.filterAttrs (k: v: v == "regular"))
(lib.mapAttrsToList (k: v: k))
(builtins.filter (lib.hasSuffix ".zip"))
];
modToDrv = modFileName:
pkgs.runCommand "copy-factorio-mods" {} ''
mkdir $out
cp ${modDir + "/${modFileName}"} $out/${modFileName}
''
// { deps = []; };
in
builtins.map modToDrv modList;
}