feat(nixos): some moves to nixos server

This commit is contained in:
2025-12-28 19:18:15 +00:00
parent 96782b7b51
commit 4a9bb42015
12 changed files with 253 additions and 45 deletions

View File

@@ -0,0 +1,96 @@
{
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";
};
}

View File

@@ -143,6 +143,7 @@ in {
migrator = pkgs.callPackage ./migrator {};
nbt2json = pkgs.callPackage ./nbt2json {};
hemar-parser = pkgs.callPackage ./hemar/parser {};
AstroTuxLauncher = pkgs.callPackage ./AstroTuxLauncher.nix {};
pg-17-ext-http = buildHttpExt pkgs "17";
pg-17-ext-smtp-client = buildSmtpExt pkgs "17";
pg-17-ext-plhaskell = buildPlHaskellExt pkgs "17";

View File

@@ -1,45 +0,0 @@
{
sops,
pkgs,
lib,
...
}: let
scriptOverride = pkgs.writeShellScriptBin "sops" ''
set -uo pipefail
if [ -n "''${SOPS_AGE_KEY_COMMAND:-}" ]; then
dir="$(mktemp -d)"
chmod 700 "''${dir}"
export SOPS_AGE_KEY_FILE="$(mktemp --tmpdir="$dir")"
chmod 600 "''${SOPS_AGE_KEY_FILE}"
trap 'rm -f "''${SOPS_AGE_KEY_FILE}"' INT TERM EXIT
sh -c "''${SOPS_AGE_KEY_COMMAND}" > "''${SOPS_AGE_KEY_FILE}"
else
printf >&2 'sops (wrapper): ERROR: environment variable `SOPS_AGE_KEY_COMMAND` is empty or undefined\n'
printf >&2 'sops (wrapper): INFO: `SOPS_AGE_KEY_COMMAND` must contain a command that prints `age` private key\n'
printf >&2 'sops (wrapper): INFO: example: `pass show sops/myproject/key` (see https://www.passwordstore.org/)\n'
exit 1
fi
${sops}/bin/sops "''${@}"
'';
in pkgs.symlinkJoin {
name = "sops-wrapper";
paths = [ scriptOverride sops ];
buildInputs = [ pkgs.makeWrapper ];
postBuild = ''
set -x
for bin in $out/bin/*; do
wrapProgram "$bin" \
--prefix PATH : ${lib.makeBinPath (with pkgs; [
coreutils
])} \
--suffix PATH : ${lib.makeBinPath (with pkgs; [
age # expected to be used by ${SOPS_AGE_KEY_COMMAND}
])}
done
'';
meta = sops.meta // {
description = "${sops.meta.description} -- wrapper. Provides custom source for `age` master key.";
};
}