Files
shed/hosts/work/containers.nix

127 lines
3.0 KiB
Nix

{ slash, pkgs, username, ... }:
let
kickstartServer =
let
libsrcds = pkgs.stdenv.mkDerivation {
name = "libsrcds";
src = pkgs.fetchFromGitHub {
owner = "km-clay";
repo = "sourceds-libraries";
rev = "08d12c91af664ffd103482ae1a24714222bef2df";
hash = "sha256-EFXBhqZEkBNpYjNuG7oTZLgfjqM5G+nLb7e/qeN1Tvw=";
};
installPhase = ''
mkdir -p $out/lib
cp ./* $out/lib
'';
};
startTf2Server = pkgs.writeShellScript "start-srv.sh" ''
set -euo pipefail
export HOME=/home/tf2
export LD_LIBRARY_PATH=/usr/lib:/usr/lib32
mkdir -p "$HOME/tf2server"
mkdir -p "$HOME/tf2server"
steamcmd +force_install_dir "$HOME/tf2server" \
+login anonymous \
+app_update 232250 validate \
+quit
cd "$HOME/tf2server"
ln -sf "$HOME/.steam/steam/linux64" "$HOME/.steam/sdk64"
ln -sf "$HOME/.steam/steam/linux32" "$HOME/.steam/sdk32"
exec ./srcds_run -game tf -console -port 25565 +map cp_dustbowl \
+ip 10.233.1.2 -norestart \
+sv_setsteamaccount 8862FD4B30F401036B8AAC6A7FE6B123
'';
in
pkgs.buildFHSEnv {
name = "srcds-env";
targetPkgs = pkgs: with pkgs; [
steamcmd
glibc
zlib
curl
libuuid
openssl
libnl
libsrcds
# Optional: link compat
stdenv.cc.cc.lib
];
multiPkgs = pkgs: with pkgs.pkgsi686Linux; [
glibc
zlib
ncurses5
libuuid
alsa-lib
libxcrypt-legacy
gcc
];
multiArch = true;
runScript = "${startTf2Server}";
};
in
{
networking = {
nat = {
enable = true;
internalInterfaces = ["ve-+"];
externalInterface = "enp8s0";
};
};
containers.tf2server = {
autoStart = true;
privateNetwork = true;
hostAddress = "10.233.1.1";
localAddress = "10.233.1.2";
config = {
imports = [ ];
nixpkgs.config.allowUnfree = true;
services.openssh.enable = true;
users.users.root.password = "root"; # For quick login, remove in prod
environment.systemPackages = with pkgs; [
steamcmd
steam-run
coreutils
wget
unzip
bash
nix
coreutils
vim
];
users.users.tf2server = {
isNormalUser = true;
initialPassword = "1234";
shell = pkgs.bash;
extraGroups = [ "wheel" ];
};
systemd.services.tf2server = {
wantedBy = [ "multi-user.target" ];
serviceConfig = {
ExecStart = "${kickstartServer}/bin/srcds-env";
};
};
nix.settings.experimental-features = [ "nix-command" "flakes" ];
# Optional: open ports on the container
networking.firewall.allowedTCPPorts = [ 25565 ];
networking.firewall.allowedUDPPorts = [ 25565 27005 27015 27020 ];
system.stateVersion = "25.11"; # or your NixOS version
};
};
}