{ pkgs, lib, config, ... }: let astroTuxSrc = pkgs.fetchFromGitHub { owner = "JoeJoeTV"; repo = "AstroTuxLauncher"; rev = "1.1.11"; hash = "sha256-O9ZMwDioP848BXfZaUs/Bp0MyxK8t7ixI+7eAa7xXsc="; }; # custom package for pansi pansiCustom = pkgs.python3Packages.buildPythonPackage rec { pname = "pansi"; version = "2020.7.3"; format = "setuptools"; src = pkgs.fetchPypi { inherit pname version; hash = "sha256-vRgtUEUo+HBgGssCgq3tQRrQCgFIQnsOU6EhYvTnTc8="; }; meta = with pkgs.lib; { description = "Text mode rendering library"; homepage = "https://github.com/technige/pansi"; license = licenses.asl20; }; }; # python environment astroTuxLauncherEnv = pkgs.python3.withPackages ( p: with p; [ alive-progress chardet colorlog dataclasses-json ipy packaging pansiCustom pathvalidate psutil requests tomli tomli-w ] ); # everything needed to run the server that isn't python pack = [ pkgs.wineWowPackages.staging pkgs.dotnet-sdk_8 pkgs.depotdownloader pkgs.winetricks pkgs.gnutls ]; in pkgs.python3Packages.buildPythonApplication rec { pname = "AstroTuxLauncher"; version = "1.1.11"; src = astroTuxSrc; format = "other"; nativeBuildInputs = [ astroTuxLauncherEnv pkgs.makeWrapper ]; dontBuild = true; installPhase = '' install -d $out/libexec/${pname} cp -r ./* $out/libexec/${pname}/ install -d $out/bin # bash script to move everything to .local/share/AstroTuxLauncher/ cat << EOF > $out/bin/run-helper #!${pkgs.bash}/bin/bash set -euo pipefail REAL_HOME=\$(getent passwd \$(whoami) | cut -d: -f6) DATA_DIR="\''${XDG_DATA_HOME:-\$REAL_HOME/.local/share}/AstroTuxLauncher" mkdir -p "\$DATA_DIR" cd "\$DATA_DIR" cp -rf $out/libexec/${pname}/* . ${astroTuxLauncherEnv.interpreter} ./AstroTuxLauncher.py install -d ${pkgs.depotdownloader}/bin/DepotDownloader exec ${astroTuxLauncherEnv.interpreter} ./AstroTuxLauncher.py start EOF chmod +x $out/bin/run-helper # install and run server command wrapper makeWrapper $out/bin/run-helper $out/bin/AstroTuxLauncher \ --prefix PATH : ${pkgs.lib.makeBinPath pack} ''; meta = with pkgs.lib; { description = "Fixes AstroTuxLauncher for NixOS so you can run a dedicated ASTRONEER server."; homepage = "https://github.com/JoeJoeTV/AstroTuxLauncher"; license = licenses.gpl3Only; platforms = platforms.x86_64; mainProgram = "AstroTuxLauncher"; }; }