lib: add fetchFromSteam fetcher
This commit is contained in:
parent
573f1954b0
commit
ed6abfe02b
29
README.md
29
README.md
|
@ -74,6 +74,35 @@ the service user and group
|
||||||
a variant of ghidra built with a headless openjdk, intended to reduce closure size for server
|
a variant of ghidra built with a headless openjdk, intended to reduce closure size for server
|
||||||
operation
|
operation
|
||||||
|
|
||||||
|
## lib documentation
|
||||||
|
|
||||||
|
### `fetchFromSteam`
|
||||||
|
|
||||||
|
a fetcher that downloads binaries from [Steam](https://store.steampowered.com/) using
|
||||||
|
[DepotDownloader](https://github.com/SteamRE/DepotDownloader). this is intended for game servers
|
||||||
|
that are distributed via Steam. use [SteamDB](https://steamdb.info) to get the needed IDs.
|
||||||
|
|
||||||
|
Usage:
|
||||||
|
|
||||||
|
```nix
|
||||||
|
pkgs.fetchFromSteam {
|
||||||
|
name = "..."; # optional
|
||||||
|
appId = "...";
|
||||||
|
depot = {
|
||||||
|
depotId = "...";
|
||||||
|
manifestId = "...";
|
||||||
|
beta = "..."; # optional
|
||||||
|
};
|
||||||
|
|
||||||
|
additionalDepots = [
|
||||||
|
# same format as the main `depot`
|
||||||
|
# use this to include eg the steamworks redistributable depot
|
||||||
|
];
|
||||||
|
|
||||||
|
hash = pkgs.lib.fakeHash;
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
## licensing
|
## licensing
|
||||||
|
|
||||||
this repository is NOT licensed under a "standard" FOSS license. instead, it uses
|
this repository is NOT licensed under a "standard" FOSS license. instead, it uses
|
||||||
|
|
|
@ -7,6 +7,8 @@
|
||||||
|
|
||||||
nixpkgs.overlays = [
|
nixpkgs.overlays = [
|
||||||
(final: prev: {
|
(final: prev: {
|
||||||
|
fetchFromSteam = prev.callPackage ./lib/fetchsteam {};
|
||||||
|
|
||||||
ghidra_headless = prev.ghidra.override {
|
ghidra_headless = prev.ghidra.override {
|
||||||
openjdk17 = prev.openjdk17_headless;
|
openjdk17 = prev.openjdk17_headless;
|
||||||
};
|
};
|
||||||
|
|
|
@ -0,0 +1,13 @@
|
||||||
|
if [ -e "$NIX_ATTRS_SH_FILE" ]; then . "$NIX_ATTRS_SH_FILE"; elif [ -f .attrs.sh ]; then . .attrs.sh; fi
|
||||||
|
source $stdenv/setup
|
||||||
|
echo "Downloading Steam depots for appId $appId into $out"
|
||||||
|
|
||||||
|
export HOME="$PWD"
|
||||||
|
mkdir -p "$out"
|
||||||
|
|
||||||
|
for args in "${depotArgs[@]}"; do
|
||||||
|
echo "Downloading component: $args"
|
||||||
|
DepotDownloader $args -dir "$out" -validate
|
||||||
|
done
|
||||||
|
|
||||||
|
rm -rf "$out/.DepotDownloader"
|
|
@ -0,0 +1,50 @@
|
||||||
|
{ lib, stdenvNoCC, system, cacert, depotdownloader }:
|
||||||
|
let
|
||||||
|
checkDepot = depot: with builtins;
|
||||||
|
hasAttr "depotId" depot && hasAttr "manifestId" depot;
|
||||||
|
depotFormat = "{ depotId = ...; manifestId = ...; [beta = ...;] }";
|
||||||
|
in lib.makeOverridable (
|
||||||
|
{
|
||||||
|
name ? null,
|
||||||
|
appId,
|
||||||
|
depot,
|
||||||
|
additionalDepots ? [],
|
||||||
|
hash
|
||||||
|
}:
|
||||||
|
if ! checkDepot depot then
|
||||||
|
throw "Invalid format for depot: must be ${depotFormat}"
|
||||||
|
else if ! builtins.all checkDepot additionalDepots then
|
||||||
|
throw "Invalid format for additionalDepots: must be ${depotFormat}"
|
||||||
|
else
|
||||||
|
let
|
||||||
|
depotOs =
|
||||||
|
if system == "x86_64-linux" then
|
||||||
|
"linux"
|
||||||
|
else
|
||||||
|
throw "fetchFromSteam does not currently support systems other than x86_64-linux";
|
||||||
|
makeDepotArg = depot:
|
||||||
|
"-app ${appId} -depot ${depot.depotId} -manifest ${depot.manifestId} -os ${depotOs}"
|
||||||
|
+ (lib.optionalString (builtins.hasAttr "beta" depot) " -beta ${depot.beta}");
|
||||||
|
depotArgs = builtins.map makeDepotArg [ depot ] ++ additionalDepots;
|
||||||
|
in stdenvNoCC.mkDerivation {
|
||||||
|
name = "steam-depot-${appId}" + (lib.optionalString (name != null) "-${name}");
|
||||||
|
builder = ./builder.sh;
|
||||||
|
|
||||||
|
inherit appId;
|
||||||
|
inherit depotArgs;
|
||||||
|
|
||||||
|
nativeBuildInputs = [
|
||||||
|
depotdownloader
|
||||||
|
cacert
|
||||||
|
];
|
||||||
|
SSL_CERT_FILE = "${cacert}/etc/ssl/certs/ca-bundle.crt";
|
||||||
|
|
||||||
|
# impureEnvVars are not handled here
|
||||||
|
# if used in an environment with eg, an http proxy, consult DepotDownloader and/or .NET for how to
|
||||||
|
# configure that sort of thing
|
||||||
|
|
||||||
|
outputHashMode = "recursive";
|
||||||
|
outputHash = hash;
|
||||||
|
|
||||||
|
preferLocalBuild = true;
|
||||||
|
})
|
Loading…
Reference in New Issue