121 lines
3.3 KiB
Nix
121 lines
3.3 KiB
Nix
{lib, config, pkgs, ... }:
|
|
|
|
with lib;
|
|
|
|
let
|
|
cfg = config.services.sdtdserver;
|
|
gamePath = "/var/lib/sdtdserver";
|
|
gameOptions = {
|
|
ServerPort="26900";
|
|
ServerVisibility="2";
|
|
ServerName="Serveur des loutres";
|
|
ServerPassword="";
|
|
ServerMaxPlayerCount="16";
|
|
ServerReservedSlots="0";
|
|
ServerReservedSlotsPermission="100";
|
|
ServerAdminSlots="0";
|
|
ServerAdminSlotsPermission="0";
|
|
ServerDescription="Un serveur idiot anti gilets jaunes";
|
|
ServerWebsiteURL="";
|
|
ServerDisabledNetworkProtocols="";
|
|
GameWorld="Navezgane";
|
|
WorldGenSeed="Lakeu";
|
|
WorldGenSize="4096";
|
|
GameName="Lakeu";
|
|
GameDifficulty="2";
|
|
GameMode="GameModeSurvival";
|
|
ZombiesRun="0";
|
|
ZombieMove="0";
|
|
ZombieMoveNight="3";
|
|
ZombieFeralMove="3";
|
|
ZombieBMMove="3";
|
|
BuildCreate="false";
|
|
DayNightLength="60";
|
|
DayLightLength="18";
|
|
PlayerKillingMode="3";
|
|
PersistentPlayerProfiles="false";
|
|
PlayerSafeZoneLevel="5";
|
|
PlayerSafeZoneHours="5";
|
|
ControlPanelEnabled="false";
|
|
ControlPanelPort="8080";
|
|
ControlPanelPassword="CHANGEME";
|
|
TelnetEnabled="false";
|
|
TelnetPort="8081";
|
|
TelnetPassword="";
|
|
TelnetFailedLoginLimit="10";
|
|
TelnetFailedLoginsBlocktime="10";
|
|
TerminalWindowEnabled="false";
|
|
AdminFileName="serveradmin.xml";
|
|
DropOnDeath="0";
|
|
DropOnQuit="0";
|
|
BloodMoonEnemyCount="8";
|
|
EnemySpawnMode="true";
|
|
EnemyDifficulty="0";
|
|
BlockDurabilityModifier="100";
|
|
LootAbundance="100";
|
|
LootRespawnDays="30";
|
|
LandClaimSize="41";
|
|
LandClaimDeadZone="30";
|
|
LandClaimExpiryTime="3";
|
|
LandClaimDecayMode="0";
|
|
LandClaimOnlineDurabilityModifier="4";
|
|
LandClaimOfflineDurabilityModifier="4";
|
|
PartySharedKillRange="100";
|
|
AirDropFrequency="72";
|
|
AirDropMarker="false";
|
|
MaxSpawnedZombies="60";
|
|
MaxSpawnedAnimals="50";
|
|
EACEnabled="true";
|
|
HideCommandExecutionLog="0";
|
|
MaxUncoveredMapChunksPerPlayer="131072";
|
|
BedrollDeadZoneSize="15";
|
|
ServerLoginConfirmationText="Prout";
|
|
};
|
|
gameConfig = builtins.toFile "serverconfig.xml" ''
|
|
<?xml version="1.0"?>
|
|
<ServerSettings>
|
|
${concatStrings (
|
|
mapAttrsToList (name: value:
|
|
" <property name=\"${name}\" value=\"${value}\"/>\n"
|
|
) gameOptions)}
|
|
</ServerSettings>
|
|
'';
|
|
in
|
|
{
|
|
options.services.sdtdserver = {
|
|
enable = mkEnableOption "Activation du serveur dédié 7 Days to Die";
|
|
};
|
|
|
|
config = mkIf cfg.enable {
|
|
|
|
systemd.services.sdtdserver = {
|
|
description = "Serveur dédié 7 Days to Die";
|
|
requires = ["network-online.target"];
|
|
wantedBy = ["multi-user.target"];
|
|
environment = { HOME = gamePath; };
|
|
serviceConfig = {
|
|
DynamicUser = true;
|
|
StateDirectory = "sdtdserver";
|
|
};
|
|
preStart = let
|
|
libPath = with pkgs; lib.makeLibraryPath [
|
|
stdenv.cc.cc.lib
|
|
];
|
|
in ''
|
|
${pkgs.steamcmd}/bin/steamcmd +login anonymous +force_install_dir ${gamePath} +app_update 294420 validate +quit
|
|
install -m666 ${gameConfig} ${gamePath}/serverconfig.xml
|
|
'';
|
|
script = ''
|
|
${pkgs.steam-run}/bin/steam-run ${gamePath}/7DaysToDieServer.x86_64 -quit -batchmode -nographics -dedicated -configfile=serverconfig.xml
|
|
'';
|
|
};
|
|
|
|
networking.firewall = {
|
|
allowedTCPPorts = [ 26900 ];
|
|
allowedUDPPorts = [ 26900 26901 26902 ];
|
|
};
|
|
|
|
};
|
|
|
|
}
|