forked from nyanloutre/nixos-config
114 lines
3.2 KiB
Nix
114 lines
3.2 KiB
Nix
|
{lib, config, pkgs, ... }:
|
||
|
|
||
|
with lib;
|
||
|
|
||
|
let
|
||
|
cfg = config.services.sdtdserver;
|
||
|
gamePath = "/var/lib/sdtdserver";
|
||
|
gameOptions = {
|
||
|
ServerPort="26900";
|
||
|
ServerIsPublic="true";
|
||
|
ServerName="Serveur des loutres";
|
||
|
ServerPassword="";
|
||
|
ServerMaxPlayerCount="16";
|
||
|
ServerReservedSlots="0";
|
||
|
ServerReservedSlotsPermission="100";
|
||
|
ServerAdminSlots="0";
|
||
|
ServerAdminSlotsPermission="0";
|
||
|
ServerDescription="Un serveur idiot anti gilets jaunes";
|
||
|
ServerWebsiteURL="";
|
||
|
ServerDisabledNetworkProtocols="UNET";
|
||
|
GameWorld="Random Gen";
|
||
|
GameName="Loutre Game";
|
||
|
GameDifficulty="2";
|
||
|
GameMode="GameModeSurvivalMP";
|
||
|
ZombiesRun="0";
|
||
|
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="";
|
||
|
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";
|
||
|
AirDropFrequency="72";
|
||
|
AirDropMarker="false";
|
||
|
MaxSpawnedZombies="60";
|
||
|
MaxSpawnedAnimals="50";
|
||
|
EACEnabled="true";
|
||
|
HideCommandExecutionLog="0";
|
||
|
MaxUncoveredMapChunksPerPlayer="131072";
|
||
|
BedrollDeadZoneSize="15";
|
||
|
};
|
||
|
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
|
||
|
${pkgs.patchelf}/bin/patchelf \
|
||
|
--set-interpreter "$(cat ${pkgs.gcc}/nix-support/dynamic-linker)" \
|
||
|
--set-rpath "${libPath}" \
|
||
|
${gamePath}/7DaysToDieServer.x86_64
|
||
|
install -m666 ${gameConfig} ${gamePath}/serverconfig.xml
|
||
|
'';
|
||
|
script = ''
|
||
|
${gamePath}/7DaysToDieServer.x86_64 -quit -batchmode -nographics -dedicated -configfile=serverconfig.xml
|
||
|
'';
|
||
|
};
|
||
|
|
||
|
networking.firewall = {
|
||
|
allowedTCPPorts = [ 26900 ];
|
||
|
allowedUDPPorts = [ 26900 26901 26902 ];
|
||
|
};
|
||
|
|
||
|
};
|
||
|
|
||
|
}
|