Hi Guix! This patch adds support for partial download of fixed-output derivations. I'm not very confident it can be pushed as-is, and it has some shortcomings. First, I make sure that the guix daemon will not remove previously failed attempts when trying to build something again, when that is a fixed-output derivation. Then, I add a Range HTTP header when performing an HTTP fetch; this ensures that we only query for the part we don't already have, and append it to the target file. If a partial download fails, the same mirror/url is tried again, but the partial file is removed first, ensuring we do a complete fetch this time around. If that failed too, we try with the following url. If we only perform a complete fetch, we proceed as usual. The next url will be a partial fetch if there is already something locally. The use-case is: I have a very unreliable wifi currently and when downloading a big source (or substitute, but this patch doesn't address that use-case), the connection is sometimes dropped in the middle and i have to fetch everything from scratch. With this patch, the download resumes. Some issues that might need to be fixed: progress only shows for the rest of the file, it would be nicer if it could start again where it was before (say the connection dropped at 34%, then the progress bar should start from 34%). When there are at least two urls it goes like that: fetch a partial file, connection drops. Remove the file and try again, connection drops. Go to the next mirror, fetch a partial file. The first mirror restarted the download from the beginning, but we'd like it not to, and skip to the following mirror instead. When there is a hash mismatch, the file is fetched twice on a further attempt. When testing locally with guix build -S ghostscript (and running the daemon from ./pre-inst-env), the download went fine. Cancelling it in the middle and restarting it did continue the download instead of starting again, which is nice :). However, with that daemon there was a lot of new builds required to run guix environment guix as my user (and nothing was substituted, which is weird), whereas with the system's daemon, there was nothing to build. Maybe there's something fishy in that patch...