Enable factorio on toothless

This commit is contained in:
niten 2023-05-18 11:14:31 -07:00
parent de24170e88
commit 86cc98699d
5 changed files with 250 additions and 165 deletions

View File

@ -2,107 +2,6 @@
with lib;
let
# gdiw = let
# version = "0.17.5";
# sha256 = "0kg1jz26gpmldajckb47vgk9v6z6w0sf1lykl2pvjh0nq4mfl252";
# in pkgs.stdenv.mkDerivation {
# inherit version;
# pname = "gdiw";
# src = pkgs.fetchurl {
# inherit sha256;
# url =
# "https://github.com/DaCyclops/GDIW/archive/refs/tags/${version}.zip";
# };
# deps = [ ];
# phases = [ "installPhase" ];
# installPhase = ''
# mkdir $out
# cp $src $out/GDIW_${version}.zip
# '';
# };
# bottleneck = let
# version = "0.11.7";
# sha256 = "0mvk0wciqpggjc0vzhb7g0a0cxq0wdzvzwrbqvagr6y02j4h3y1n";
# in pkgs.stdenv.mkDerivation {
# inherit version;
# pname = "bottleneck";
# src = pkgs.fetchurl {
# inherit sha256;
# url =
# "https://github.com/troelsbjerre/Bottleneck/archive/refs/tags/${version}.zip";
# };
# deps = [ ];
# phases = [ "installPhase" ];
# installPhase = ''
# mkdir $out
# cp $src $out/Bottleneck_${version}.zip
# '';
# };
# even-distribution = let
# version = "1.0.10";
# commit-hash = "2f65d82a4da606b82bc597fce2695e7c512ebbfe";
# sha256 = "05y1j8mq2nm163h014510bkv0w06hn97z5v2kay36ilj0rzdpi6j";
# in pkgs.stdenv.mkDerivation {
# inherit version;
# pname = "even-distribution";
# src = pkgs.fetchurl {
# inherit sha256;
# url =
# "https://github.com/321freddy/even-distribution/archive/${commit-hash}.zip";
# };
# deps = [ ];
# phases = [ "installPhase" ];
# installPhase = ''
# mkdir $out
# cp $src $out/even-distribution_${version}.zip
# '';
# };
# mkPlugin = { name, version, url, sha256, deps ? [ ] }:
# let
# fetchurl-auth = { name, url, sha256 }:
# lib.overrideDerivation (pkgs.fetchurl {
# inherit name url sha256;
# curlOpts = [
# "--get"
# "-L"
# "-H"
# "Accept:application/octet-stream"
# "--data-urlencode"
# "username@username"
# "--data-urlencode"
# "token@token"
# ];
# }) (_:
# let
# username = "Exceeding9987";
# token =
# lib.readFile config.fudo.secrets.files.blobs."factorio-token.txt";
# in {
# preHook = if username != "" && token != "" then ''
# echo -n "${username}" >username
# echo -n "${token}" >token
# '' else ''
# # Deliberately failing since username/token was not provided, so we can't fetch.
# # We can't use builtins.throw since we want the result to be used if the tar is in the store already.
# exit 1
# '';
# });
# in pkgs.stdenv.mkDerivation {
# inherit version deps;
# pname = name;
# src = fetchurl-auth { inherit name url sha256; };
# phases = [ "installPhase" ];
# installPhase = ''
# mkdir $out
# cp $src $out/${name}_${version}.zip
# '';
# };
mods = let
modFromFile = { file, deps, ... }:
let basename = baseNameOf file;

View File

@ -5,51 +5,55 @@ let
primaryIp = "10.0.0.12";
generateMac = pkgs.lib.network.generate-mac-address;
in {
networking = {
useDHCP = false;
defaultGateway = {
address = "10.0.0.1";
interface = "intif0";
};
interfaces.intif0 = {
ipv4.addresses = [{
address = primaryIp;
prefixLength = 16;
}];
};
};
imports = [ ./toothless/factorio.nix ];
security.sudo.extraConfig = ''
# Due to rollback, sudo will lecture after every reboot
Defaults lecture = never
'';
config = {
networking = {
useDHCP = false;
defaultGateway = {
address = "10.0.0.1";
interface = "intif0";
};
interfaces.intif0 = {
ipv4.addresses = [{
address = primaryIp;
prefixLength = 16;
}];
};
};
fudo = {
minecraft-clj = {
enable = true;
state-directory = "/state/services/minecraft-clj";
admins = [ "fudoniten" ];
worlds = {
REPLand = { allocated-memory = 8; };
wof = {
world-name = "WorldOfFun";
world-seed = 2059666523504992;
port = 25567;
difficulty = "medium";
game-mode = "survival";
motd = "Welcome to the World of Fun!";
allow-cheats = true;
allocated-memory = 16;
pvp = false;
security.sudo.extraConfig = ''
# Due to rollback, sudo will lecture after every reboot
Defaults lecture = never
'';
fudo = {
minecraft-clj = {
enable = true;
state-directory = "/state/services/minecraft-clj";
admins = [ "fudoniten" ];
worlds = {
REPLand = { allocated-memory = 8; };
wof = {
world-name = "WorldOfFun";
world-seed = 2059666523504992;
port = 25567;
difficulty = "medium";
game-mode = "survival";
motd = "Welcome to the World of Fun!";
allow-cheats = true;
allocated-memory = 16;
pvp = false;
};
};
};
};
};
systemd.targets = {
sleep.enable = false;
suspend.enable = false;
hibernate.enable = false;
hybrid-sleep.enable = false;
systemd.targets = {
sleep.enable = false;
suspend.enable = false;
hibernate.enable = false;
hybrid-sleep.enable = false;
};
};
}

View File

@ -0,0 +1,183 @@
{ config, lib, pkgs, ... }:
with lib;
let
mods = let
modFromFile = { file, deps, ... }:
let basename = baseNameOf file;
in pkgs.stdenv.mkDerivation {
name = basename;
src = file;
phases = [ "installPhase" ];
installPhase = ''
mkdir $out
cp $src $out/${basename}
'';
inherit deps;
};
modzip = { filename, deps ? [ ], ... }:
modFromFile {
file = (../../../static/factorio + "/${filename}");
inherit deps;
};
in rec {
advanced-autonomous-industries =
modzip { filename = "aai-industry_0.5.19.zip"; };
alien-biomes = modzip { filename = "alien-biomes_0.6.7.zip"; };
aircraft = modzip { filename = "Aircraft_1.8.4.zip"; };
armored-biters = modzip { filename = "ArmouredBiters_1.1.6.zip"; };
big-data-string = modzip { filename = "big-data-string_1.0.1.zip"; };
bobs-enemies = modzip { filename = "bobenemies_1.1.5.zip"; };
bottleneck = modzip { filename = "Bottleneck_0.11.7.zip"; };
bullet-trails = modzip { filename = "bullet-trails_0.6.2.zip"; };
even-distribution = modzip { filename = "even-distribution_1.0.10.zip"; };
flib = modzip { filename = "flib_0.11.2.zip"; };
flow-control = modzip { filename = "Flow Control_3.1.3.zip"; };
fluid-must-flow = modzip { filename = "FluidMustFlow_1.3.1.zip"; };
gdiw = modzip { filename = "GDIW_1.1.0.zip"; };
hovercrafts = modzip { filename = "Hovercrafts_1.2.2.zip"; };
industrial-revolution-2 =
modzip { filename = "IndustrialRevolution_2.3.2.zip"; };
krastorio2 = modzip {
filename = "Krastorio2_1.3.6.zip";
deps = [ krastorio2-assets flib ];
};
krastorio2-assets = modzip { filename = "Krastorio2Assets_1.2.0.zip"; };
larger-lamps = modzip { filename = "DeadlockLargerLamp_1.5.0.zip"; };
miniloader = modzip { filename = "miniloader_1.15.6.zip"; };
planet-imaging-satellite =
modzip { filename = "planetImagingSatellite_1.0.3.zip"; };
rampant = modzip { filename = "Rampant_3.1.2.zip"; };
recipe-book = modzip { filename = "RecipeBook_3.4.5.zip"; };
space-exploration = modzip { filename = "space-exploration_0.6.89.zip"; };
stackers = modzip { filename = "deadlock-beltboxes-loaders_2.4.2.zip"; };
trees = modzip {
filename = "Trees_4.5.1.zip";
deps = [ big-data-string ];
};
vehicle-snap = modzip { filename = "VehicleSnap_1.18.4.zip"; };
};
worldGenSeed = 5298;
mapGenSettings = {
autoplace_controls = {
coal = {
size = 4;
richness = "high";
};
copper-ore = {
size = 10;
richness = "high";
};
crude-oil = {
size = 10;
richness = "high";
};
iron-ore = {
size = 10;
richness = "high";
};
stone = {
size = 4;
richness = "high";
};
uranium-ore = {
size = 4;
richness = "high";
};
};
seed = (toString worldGenSeed);
};
in {
config = {
services.factorio = {
enable = true;
# 'factorio' points to an old game
stateDirName = "krastorio2";
package = pkgs.factorio-headless-experimental.override {
username = "fudoniten";
token = lib.removeSuffix "\n" (readFile
config.fudo.secrets.files.blobs."factorio-token-fudoniten.txt");
};
public = false;
port = 34197;
lan = true;
game-name = "Fudo Factorio";
description = "Fudo Factorio Server";
admins = [ "fudoniten" "Arkayuu" ];
openFirewall = true;
autosave-interval = 30;
loadLatestSave = true;
mods = with mods; [
alien-biomes
aircraft
armored-biters
bottleneck
bullet-trails
fluid-must-flow
krastorio2
# industrial-revolution-2
larger-lamps
stackers
trees
];
};
systemd.services.factorio = let
cfg = config.services.factorio;
serverSettings = {
name = cfg.game-name;
description = cfg.description;
visibility = {
public = cfg.public;
lan = cfg.lan;
};
username = cfg.username;
password = cfg.password;
token = cfg.token;
game_password = cfg.game-password;
require_user_verification = cfg.requireUserVerification;
max_upload_in_kilobytes_per_second = 0;
minimum_latency_in_ticks = 0;
ignore_player_limit_for_returning_players = false;
allow_commands = "admins-only";
autosave_interval = cfg.autosave-interval;
autosave_slots = 5;
afk_autokick_interval = 0;
auto_pause = true;
only_admins_can_pause_the_game = false;
autosave_only_on_server = true;
non_blocking_saving = cfg.nonBlockingSaving;
} // cfg.extraSettings;
in {
serviceConfig.ExecStart = mkForce (toString [
"${cfg.package}/bin/factorio"
"--config=${cfg.configFile}"
"--port=${toString cfg.port}"
"--bind=${toString cfg.bind}"
(optionalString (!cfg.loadLatestSave)
"--start-server=/var/lib/${cfg.stateDirName}/saves/${cfg.saveName}.zip")
"--server-settings=${
pkgs.writeText "factorio-server-settings.json" (builtins.toJSON
(filterAttrsRecursive (n: v: v != null) serverSettings))
}"
(optionalString cfg.loadLatestSave "--start-server-load-latest")
(optionalString (cfg.mods != [ ])
"--mod-directory=${pkgs.factorio-utils.mkModDirDrv cfg.mods}")
(optionalString (cfg.admins != [ ]) "--server-adminlist=${
pkgs.writeText "factorio-server-adminlist.json"
(builtins.toJSON cfg.admins)
}")
"--map-gen-settings=${
pkgs.writeText "factorio-map-gen-settings.json"
(builtins.toJSON mapGenSettings)
}"
]);
};
};
}

View File

@ -72,26 +72,25 @@ in {
verbose = true;
event-topics = cfg.event-topics;
notification-topic = cfg.notification-topic;
mqtt = let
host-secrets =
(trace hostname config.fudo.secrets.host-secrets."${hostname}");
in {
incoming = {
port = config.fudo.services.mqtt.private.port;
host = config.fudo.services.mqtt.mqtt-hostname;
username = "snooper";
password-file = host-secrets.snooper-passwd.target-file;
mqtt =
let host-secrets = config.fudo.secrets.host-secrets."${hostname}";
in {
incoming = {
port = config.fudo.services.mqtt.private.port;
host = config.fudo.services.mqtt.mqtt-hostname;
username = "snooper";
password-file = host-secrets.snooper-passwd.target-file;
};
outgoing = {
port = config.fudo.services.mqtt.public.port;
host = config.fudo.services.mqtt.mqtt-hostname;
username = "snooper";
password-file = host-secrets.snooper-passwd.target-file;
};
};
outgoing = {
port = config.fudo.services.mqtt.public.port;
host = config.fudo.services.mqtt.mqtt-hostname;
username = "snooper";
password-file = host-secrets.snooper-passwd.target-file;
};
};
};
tattler = mkIf cfg.enable-notifications {
enable = true;
enable = false;
verbose = true;
notification-topic = cfg.notification-topic;
mqtt = {

View File

@ -2034,11 +2034,11 @@
]
},
"locked": {
"lastModified": 1683837890,
"narHash": "sha256-y//EIz15wflQknpKzg8KqTYYcDJClFhZ85NN42Wm7cU=",
"lastModified": 1684342513,
"narHash": "sha256-9pQgCf1/Lv3X2QhYjraoG0f6y0FobOhFX2OHEvm5ttc=",
"ref": "refs/heads/master",
"rev": "0d65fc63b8e38501d3565ac5a40350bdeb2f8eff",
"revCount": 136,
"rev": "5336a126bda3e2fcbec93bdd9254fa799f4a18eb",
"revCount": 137,
"type": "git",
"url": "https://git.fudo.org/fudo-nix/entities.git"
},
@ -3113,11 +3113,11 @@
},
"nixpkgs_27": {
"locked": {
"lastModified": 1684171562,
"narHash": "sha256-BMUWjVWAUdyMWKk0ATMC9H0Bv4qAV/TXwwPUvTiC5IQ=",
"lastModified": 1684280442,
"narHash": "sha256-nC1/kfh6tpMQSLQalbNTNnireIlxvLLugrjZdasNh+I=",
"owner": "NixOS",
"repo": "nixpkgs",
"rev": "55af203d468a6f5032a519cba4f41acf5a74b638",
"rev": "6c591e7adc514090a77209f56c9d0c551ab8530d",
"type": "github"
},
"original": {