121 lines
3.1 KiB
Nix
121 lines
3.1 KiB
Nix
{
|
|
lib,
|
|
stdenvNoCC,
|
|
cacert,
|
|
python3,
|
|
}:
|
|
|
|
lib.extendMkDerivation {
|
|
constructDrv = stdenvNoCC.mkDerivation;
|
|
excludeDrvArgNames = [
|
|
"derivationArgs"
|
|
"sha1"
|
|
"sha256"
|
|
"sha512"
|
|
];
|
|
extendDrvArgs =
|
|
finalAttrs:
|
|
lib.fetchers.withNormalizedHash { } (
|
|
{
|
|
|
|
endpoint ? "https://api.itch.io",
|
|
|
|
# The name of the environment variable that contains the itch.io API key.
|
|
# The environment variable needs to be set for the nix building process,
|
|
# which is nix-daemon for multi-user mode.
|
|
apiKeyVar ? "NIX_ITCHIO_API_KEY",
|
|
|
|
# The game store page URL in the format of https://{author}.itch.io/{game}
|
|
gameUrl,
|
|
|
|
# The upload ID of the downloadable file.
|
|
# To get the upload ID, look at the request URL when you download it.
|
|
upload,
|
|
|
|
# Derivation name.
|
|
name ? null,
|
|
|
|
# The extra message printed when the API key is not provided
|
|
# or when the account of the API key did not purchase the game.
|
|
extraMessage ? null,
|
|
|
|
# Show the download URL without actually downloading it, for testing purposes.
|
|
# Notice that this can potentially leak the API key.
|
|
showUrl ? false,
|
|
|
|
outputHash ? lib.fakeHash,
|
|
outputHashAlgo ? null,
|
|
preFetch ? "",
|
|
postFetch ? "",
|
|
nativeBuildInputs ? [ ],
|
|
impureEnvVars ? [ ],
|
|
passthru ? { },
|
|
meta ? { },
|
|
preferLocalBuild ? true,
|
|
derivationArgs ? { },
|
|
}:
|
|
let
|
|
finalHashHasColon = lib.hasInfix ":" finalAttrs.hash;
|
|
finalHashColonMatch = lib.match "([^:]+)[:](.*)" finalAttrs.hash;
|
|
in
|
|
derivationArgs
|
|
// {
|
|
__structuredAttrs = true;
|
|
|
|
name = if name != null then name else baseNameOf gameUrl;
|
|
|
|
hash =
|
|
if outputHashAlgo == null || outputHash == "" || lib.hasPrefix outputHashAlgo outputHash then
|
|
outputHash
|
|
else
|
|
"${outputHashAlgo}:${outputHash}";
|
|
outputHash =
|
|
if finalAttrs.hash == "" then
|
|
lib.fakeHash
|
|
else if finalHashHasColon then
|
|
lib.elemAt finalHashColonMatch 1
|
|
else
|
|
finalAttrs.hash;
|
|
outputHashAlgo = if finalHashHasColon then lib.head finalHashColonMatch else null;
|
|
outputHashMode = "flat";
|
|
|
|
nativeBuildInputs = [
|
|
cacert
|
|
python3
|
|
]
|
|
++ nativeBuildInputs;
|
|
|
|
inherit preferLocalBuild;
|
|
|
|
# ENV
|
|
nixpkgsVersion = lib.trivial.release;
|
|
uploadName = name;
|
|
inherit
|
|
endpoint
|
|
apiKeyVar
|
|
gameUrl
|
|
extraMessage
|
|
showUrl
|
|
preFetch
|
|
postFetch
|
|
;
|
|
impureEnvVars =
|
|
lib.fetchers.proxyImpureEnvVars
|
|
++ [
|
|
apiKeyVar
|
|
"NIX_CONNECT_TIMEOUT"
|
|
]
|
|
++ impureEnvVars;
|
|
|
|
builder = builtins.toFile "builder.sh" ''
|
|
source "$NIX_ATTRS_SH_FILE"
|
|
runHook preFetch
|
|
python ${./fetchitchio.py}
|
|
runHook postFetch
|
|
'';
|
|
}
|
|
);
|
|
|
|
inheritFunctionArgs = false;
|
|
}
|