# nix-mirror: a tool for mirroring nix binary caches
## Background
It is possible to mirror a nix binary cache using the `nix` command line tool using a command sucn as:
```
xzcat store-paths.xz | nix copy --from https://cache.nixos.org --to file:///path/to/where/the/mirror/should/end/up
```
where store-paths.xz is a file containing the store-paths of all binaries in
the cache, e.g. https://channels.nixos.org/nixos-unstable/store-paths.xz
However that command will use a lot of system resources since it will unpack
all of the downloaded files and repack them before writing them to disk (if I
have understood the reasons for the high cpu usage correctly).
## Features
- [x] Parallel downloads
- [x] Atomic downloads
- [x] Sha256 verification of downloaded archives.
## Building
### With cargo
Make sure to have openssl and pkg-config installed and run `cargo build`.
If using nix you can use the provided `shell.nix` which is only a symlink to
`default.nix` to get the dependencies.
### With nix
Run `nix-build` as usual.
## Usage
- `nix-mirror --help` to show application help
- `nix-mirror store-paths.xz ./mirror` to download all the archives in
`store-paths.xz` and their transitive dependencies to the directory `./mirror`.
## License
Licensed under either of
- [Apache License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0)
- [MIT license](http://opensource.org/licenses/MIT)
at your option.