Files
2026-01-22 18:37:56 -03:00

89 lines
1.9 KiB
Nix
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
{
lib,
stdenvNoCC,
pijul,
cacert,
}:
lib.makeOverridable (
{
# Remote to fetch
url,
# Additional list of remotes specifying alternative download location to be
# tried in order, if the prior remote failed to fetch.
mirrors ? [ ],
hash ? "",
change ? null,
state ? null,
channel ? "main",
name ? "fetchpijul",
# TODO: Changes in pijul are unordered so there's many ways to end up with the same repository state.
# This makes leaveDotPijul unfeasible to implement until pijul CLI implements
# a way of reordering changes to sort them in a consistent and deterministic manner.
# leaveDotPijul ? false
}:
if change != null && state != null then
throw "Only one of 'change' or 'state' can be set"
else
stdenvNoCC.mkDerivation {
inherit name;
nativeBuildInputs = [
pijul
cacert
];
strictDeps = true;
dontUnpack = true;
dontConfigure = true;
dontBuild = true;
installPhase = ''
runHook preInstall
success=
for remote in $remotes; do
if
pijul clone \
''${change:+--change "$change"} \
''${state:+--state "$state"} \
--channel "$channel" \
"$remote" \
"$out"
then
success=1
break
fi
done
if [ -z "$success" ]; then
echo "Error: couldnt clone remote from any mirror" 1>&2
exit 1
fi
runHook postInstall
'';
fixupPhase = ''
runHook preFixup
rm -rf "$out/.pijul"
runHook postFixup
'';
outputHashAlgo = null;
outputHashMode = "recursive";
outputHash = if hash != "" then hash else lib.fakeHash;
inherit
change
state
channel
;
remotes = [ url ] ++ mirrors;
impureEnvVars = lib.fetchers.proxyImpureEnvVars;
}
)