2024-06-30 08:12:46 +00:00
|
|
|
{
|
|
|
|
lib,
|
|
|
|
stdenvNoCC,
|
|
|
|
pijul,
|
|
|
|
cacert,
|
|
|
|
}:
|
2024-05-02 00:46:19 +00:00
|
|
|
|
|
|
|
lib.makeOverridable (
|
2024-06-30 08:12:46 +00:00
|
|
|
{
|
|
|
|
url,
|
|
|
|
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.
|
2024-05-02 00:46:19 +00:00
|
|
|
# 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
|
2024-06-30 08:12:46 +00:00
|
|
|
}:
|
|
|
|
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
|
|
|
|
|
|
|
|
pijul clone \
|
|
|
|
''${change:+--change "$change"} \
|
|
|
|
''${state:+--state "$state"} \
|
|
|
|
--channel "$channel" \
|
|
|
|
"$url" \
|
|
|
|
"$out"
|
|
|
|
|
|
|
|
runHook postInstall
|
|
|
|
'';
|
|
|
|
|
|
|
|
fixupPhase = ''
|
|
|
|
runHook preFixup
|
|
|
|
|
|
|
|
rm -rf "$out/.pijul"
|
|
|
|
|
|
|
|
runHook postFixup
|
|
|
|
'';
|
|
|
|
|
|
|
|
outputHashAlgo = if hash != "" then null else "sha256";
|
|
|
|
outputHashMode = "recursive";
|
|
|
|
outputHash = if hash != "" then hash else lib.fakeSha256;
|
|
|
|
|
|
|
|
inherit
|
|
|
|
url
|
|
|
|
change
|
|
|
|
state
|
|
|
|
channel
|
|
|
|
;
|
|
|
|
|
|
|
|
impureEnvVars = lib.fetchers.proxyImpureEnvVars;
|
|
|
|
}
|
2024-05-02 00:46:19 +00:00
|
|
|
)
|