feat(nixos): some moves to nixos server
This commit is contained in:
96
package/AstroTuxLauncher.nix
Normal file
96
package/AstroTuxLauncher.nix
Normal 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";
|
||||
};
|
||||
}
|
||||
@@ -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";
|
||||
|
||||
@@ -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.";
|
||||
};
|
||||
}
|
||||
Reference in New Issue
Block a user