aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorQuentin Dufour <quentin@deuxfleurs.fr>2021-10-04 18:27:57 +0200
committerQuentin Dufour <quentin@deuxfleurs.fr>2021-10-19 16:56:07 +0200
commitdc017a0cab40cb2f33a01b420bb1b04038abb875 (patch)
tree239b6a9245b842a4daaceead93b71d8ddbeab498
parent1acf7e4c66aab0a0b5bcce8eb2965b35d587dd2a (diff)
downloadgarage-feature/static.tar.gz
garage-feature/static.zip
Build Garage with Nixfeature/static
-rw-r--r--.drone.yml636
-rw-r--r--Cargo.nix2496
-rw-r--r--Dockerfile9
-rw-r--r--Makefile7
-rw-r--r--default.nix75
-rw-r--r--doc/book/src/SUMMARY.md3
-rw-r--r--doc/book/src/development/devenv.md150
-rw-r--r--doc/book/src/development/miscellaneous_notes.md134
-rw-r--r--doc/book/src/development/release_process.md184
-rw-r--r--doc/book/src/development/scripts.md113
-rwxr-xr-xmake_docker.sh20
-rw-r--r--nix/build_index.nix146
-rw-r--r--nix/common.nix27
-rw-r--r--nix/kaniko.nix23
-rw-r--r--nix/nix.conf7
-rw-r--r--script/builder_image/Dockerfile7
-rw-r--r--script/builder_image/Makefile8
-rwxr-xr-xscript/dev-bucket.sh3
-rwxr-xr-xscript/dev-cluster.sh9
-rwxr-xr-xscript/dev-configure.sh9
-rwxr-xr-xscript/test-smoke.sh4
-rw-r--r--shell.nix69
-rw-r--r--src/garage/admin_rpc.rs4
23 files changed, 4007 insertions, 136 deletions
diff --git a/.drone.yml b/.drone.yml
index 8ef74fc9..ccda9e0a 100644
--- a/.drone.yml
+++ b/.drone.yml
@@ -6,103 +6,122 @@ workspace:
base: /drone/garage
volumes:
-- name: cargo_home
+- name: nix_store
+ host:
+ path: /var/lib/drone/nix
+- name: nix_config
temp: {}
+environment:
+ HOME: /drone/garage
+
steps:
- - name: restore-cache
- image: meltwater/drone-cache:dev
+ - name: setup nix
+ image: nixpkgs/nix:nixos-21.05
volumes:
- - name: cargo_home
- path: /drone/cargo
- environment:
- AWS_ACCESS_KEY_ID:
- from_secret: cache_aws_access_key_id
- AWS_SECRET_ACCESS_KEY:
- from_secret: cache_aws_secret_access_key
- pull: true
- settings:
- restore: true
- archive_format: "gzip"
- bucket: drone-cache
- cache_key: '{{ .Repo.Name }}_{{ checksum "Cargo.lock" }}_{{ arch }}_{{ os }}_gzip'
- region: garage
- mount:
- - '/drone/cargo'
- - 'target'
- path_style: true
- endpoint: https://garage.deuxfleurs.fr
- when:
- branch:
- - nonexistent_skip_this_step
+ - name: nix_store
+ path: /nix
+ - name: nix_config
+ path: /etc/nix
+ commands:
+ - cp nix/nix.conf /etc/nix/nix.conf
+ - nix-build --no-build-output --no-out-link shell.nix --arg release false -A inputDerivation
- name: code quality
- image: superboum/garage_builder_amd64:4
+ image: nixpkgs/nix:nixos-21.05
volumes:
- - name: cargo_home
- path: /drone/cargo
- environment:
- CARGO_HOME: /drone/cargo
+ - name: nix_store
+ path: /nix
+ - name: nix_config
+ path: /etc/nix
commands:
- - cargo fmt -- --check
- - cargo clippy -- --deny warnings
+ - nix-shell --arg release false --run "cargo fmt -- --check"
+ - nix-shell --arg release false --run "cargo clippy -- --allow clippy::needless_borrow --allow clippy::needless-return --deny warnings"
- name: build
- image: superboum/garage_builder_amd64:4
+ image: nixpkgs/nix:nixos-21.05
volumes:
- - name: cargo_home
- path: /drone/cargo
- environment:
- CARGO_HOME: /drone/cargo
+ - name: nix_store
+ path: /nix
+ - name: nix_config
+ path: /etc/nix
commands:
- - pwd
- - cargo build
+ - nix-build --no-build-output --argstr target x86_64-unknown-linux-musl --arg release false --argstr git_version $DRONE_COMMIT
- - name: cargo-test
- image: superboum/garage_builder_amd64:4
+ - name: unit tests
+ image: nixpkgs/nix:nixos-21.05
volumes:
- - name: cargo_home
- path: /drone/cargo
- environment:
- CARGO_HOME: /drone/cargo
+ - name: nix_store
+ path: /nix
+ - name: nix_config
+ path: /etc/nix
commands:
- - cargo test
+ - |
+ nix-build \
+ --no-build-output \
+ --argstr target x86_64-unknown-linux-musl \
+ --argstr compileMode test
+ - ./result*/bin/garage_api*
+ - ./result*/bin/garage_model*
+ - ./result*/bin/garage_rpc*
+ - ./result*/bin/garage_table*
+ - ./result*/bin/garage_util*
+ - ./result*/bin/garage_web*
+ - ./result*/bin/garage*
- - name: rebuild-cache
- image: meltwater/drone-cache:dev
+ - name: smoke-test
+ image: nixpkgs/nix:nixos-21.05
volumes:
- - name: cargo_home
- path: /drone/cargo
+ - name: nix_store
+ path: /nix
+ - name: nix_config
+ path: /etc/nix
+ commands:
+ - nix-build --no-build-output --argstr target x86_64-unknown-linux-musl --arg release false --argstr git_version $DRONE_COMMIT
+ - nix-shell --arg release false --run ./script/test-smoke.sh || (cat /tmp/garage.log; false)
+
+ - name: update cache
+ image: nixpkgs/nix:nixos-21.05
environment:
AWS_ACCESS_KEY_ID:
from_secret: cache_aws_access_key_id
AWS_SECRET_ACCESS_KEY:
from_secret: cache_aws_secret_access_key
- pull: true
- settings:
- rebuild: true
- archive_format: "gzip"
- bucket: drone-cache
- cache_key: '{{ .Repo.Name }}_{{ checksum "Cargo.lock" }}_{{ arch }}_{{ os }}_gzip'
- region: garage
- mount:
- - '/drone/cargo'
- - 'target'
- path_style: true
- endpoint: https://garage.deuxfleurs.fr
- when:
- branch:
- - nonexistent_skip_this_step
-
- - name: smoke-test
- image: superboum/garage_builder_amd64:4
+ NIX_PRIV_KEY:
+ from_secret: nix_priv_key
volumes:
- - name: cargo_home
- path: /drone/cargo
- environment:
- CARGO_HOME: /drone/cargo
+ - name: nix_store
+ path: /nix
+ - name: nix_config
+ path: /etc/nix
commands:
- - ./script/test-smoke.sh || (cat /tmp/garage.log; false)
+ - (umask 377 && echo $NIX_PRIV_KEY > /etc/nix/signing-key.sec)
+ - |
+ nix copy --to 's3://nix?endpoint=garage.deuxfleurs.fr&region=garage&secret-key=/etc/nix/signing-key.sec' \
+ $(nix-store -qR --include-outputs \
+ $(nix-build --no-out-link shell.nix --arg release false -A inputDerivation))
+ - |
+ nix copy --to 's3://nix?endpoint=garage.deuxfleurs.fr&region=garage&secret-key=/etc/nix/signing-key.sec' \
+ $(nix-store -qR --include-outputs \
+ $(nix-instantiate --argstr target x86_64-unknown-linux-musl --argstr compileMode test))
+ - |
+ nix copy --to 's3://nix?endpoint=garage.deuxfleurs.fr&region=garage&secret-key=/etc/nix/signing-key.sec' \
+ $(nix-store -qR --include-outputs \
+ $(nix-instantiate --argstr target x86_64-unknown-linux-musl --arg release false))
+ when:
+ event:
+ - cron
+
+trigger:
+ event:
+ - custom
+ - push
+ - pull_request
+ - tag
+ - cron
+
+node:
+ nix: 1
---
kind: pipeline
@@ -137,8 +156,477 @@ steps:
repo:
- Deuxfleurs/garage
+trigger:
+ event:
+ - custom
+ - push
+ - pull_request
+
+node:
+ nix: 1
+
+---
+kind: pipeline
+type: docker
+name: release-linux-x86_64
+
+volumes:
+- name: nix_store
+ host:
+ path: /var/lib/drone/nix
+- name: nix_config
+ temp: {}
+
+environment:
+ TARGET: x86_64-unknown-linux-musl
+
+steps:
+ - name: setup nix
+ image: nixpkgs/nix:nixos-21.05
+ volumes:
+ - name: nix_store
+ path: /nix
+ - name: nix_config
+ path: /etc/nix
+ commands:
+ - cp nix/nix.conf /etc/nix/nix.conf
+ - nix-build --no-build-output --no-out-link shell.nix -A inputDerivation
+
+ - name: build
+ image: nixpkgs/nix:nixos-21.05
+ volumes:
+ - name: nix_store
+ path: /nix
+ - name: nix_config
+ path: /etc/nix
+ commands:
+ - nix-build --no-build-output --argstr target $TARGET --arg release true --argstr git_version $DRONE_COMMIT
+
+ - name: integration
+ image: nixpkgs/nix:nixos-21.05
+ volumes:
+ - name: nix_store
+ path: /nix
+ - name: nix_config
+ path: /etc/nix
+ commands:
+ - nix-shell --run ./script/test-smoke.sh || (cat /tmp/garage.log; false)
+
+ - name: update cache
+ image: nixpkgs/nix:nixos-21.05
+ environment:
+ AWS_ACCESS_KEY_ID:
+ from_secret: cache_aws_access_key_id
+ AWS_SECRET_ACCESS_KEY:
+ from_secret: cache_aws_secret_access_key
+ NIX_PRIV_KEY:
+ from_secret: nix_priv_key
+ volumes:
+ - name: nix_store
+ path: /nix
+ - name: nix_config
+ path: /etc/nix
+ commands:
+ - (umask 377 && echo $NIX_PRIV_KEY > /etc/nix/signing-key.sec)
+ - |
+ nix copy --to 's3://nix?endpoint=garage.deuxfleurs.fr&region=garage&secret-key=/etc/nix/signing-key.sec' \
+ $(nix-store -qR --include-outputs \
+ $(nix-instantiate --argstr target $TARGET --arg release true))
+
+ - name: push static binary
+ image: nixpkgs/nix:nixos-21.05
+ volumes:
+ - name: nix_store
+ path: /nix
+ - name: nix_config
+ path: /etc/nix
+ environment:
+ AWS_ACCESS_KEY_ID:
+ from_secret: garagehq_aws_access_key_id
+ AWS_SECRET_ACCESS_KEY:
+ from_secret: garagehq_aws_secret_access_key
+ commands:
+ - nix-shell --arg rust false --arg integration false --run "to_s3"
+
+ - name: docker build and publish
+ image: nixpkgs/nix:nixos-21.05
+ volumes:
+ - name: nix_store
+ path: /nix
+ - name: nix_config
+ path: /etc/nix
+ environment:
+ DOCKER_AUTH:
+ from_secret: docker_auth
+ DOCKER_PLATFORM: "linux/amd64"
+ CONTAINER_NAME: "dxflrs/amd64_garage"
+ HOME: "/kaniko"
+ commands:
+ - mkdir -p /kaniko/.docker
+ - echo $DOCKER_AUTH > /kaniko/.docker/config.json
+ - export CONTAINER_TAG=${DRONE_TAG:-$DRONE_COMMIT}
+ - nix-shell --arg rust false --arg integration false --run "to_docker"
+
+
+trigger:
+ event:
+ - promote
+ - cron
+
+node:
+ nix: 1
+
+---
+kind: pipeline
+type: docker
+name: release-linux-i686
+
+volumes:
+- name: nix_store
+ host:
+ path: /var/lib/drone/nix
+- name: nix_config
+ temp: {}
+
+environment:
+ TARGET: i686-unknown-linux-musl
+
+steps:
+ - name: setup nix
+ image: nixpkgs/nix:nixos-21.05
+ volumes:
+ - name: nix_store
+ path: /nix
+ - name: nix_config
+ path: /etc/nix
+ commands:
+ - cp nix/nix.conf /etc/nix/nix.conf
+ - nix-build --no-build-output --no-out-link shell.nix -A inputDerivation
+
+ - name: build
+ image: nixpkgs/nix:nixos-21.05
+ volumes:
+ - name: nix_store
+ path: /nix
+ - name: nix_config
+ path: /etc/nix
+ commands:
+ - nix-build --no-build-output --argstr target $TARGET --arg release true --argstr git_version $DRONE_COMMIT
+
+ - name: integration
+ image: nixpkgs/nix:nixos-21.05
+ volumes:
+ - name: nix_store
+ path: /nix
+ - name: nix_config
+ path: /etc/nix
+ commands:
+ - nix-shell --run ./script/test-smoke.sh || (cat /tmp/garage.log; false)
+
+ - name: update cache
+ image: nixpkgs/nix:nixos-21.05
+ environment:
+ AWS_ACCESS_KEY_ID:
+ from_secret: cache_aws_access_key_id
+ AWS_SECRET_ACCESS_KEY:
+ from_secret: cache_aws_secret_access_key
+ NIX_PRIV_KEY:
+ from_secret: nix_priv_key
+ volumes:
+ - name: nix_store
+ path: /nix
+ - name: nix_config
+ path: /etc/nix
+ commands:
+ - (umask 377 && echo $NIX_PRIV_KEY > /etc/nix/signing-key.sec)
+ - |
+ nix copy --to 's3://nix?endpoint=garage.deuxfleurs.fr&region=garage&secret-key=/etc/nix/signing-key.sec' \
+ $(nix-store -qR --include-outputs \
+ $(nix-instantiate --argstr target $TARGET --arg release true))
+
+ - name: push static binary
+ image: nixpkgs/nix:nixos-21.05
+ volumes:
+ - name: nix_store
+ path: /nix
+ - name: nix_config
+ path: /etc/nix
+ environment:
+ AWS_ACCESS_KEY_ID:
+ from_secret: garagehq_aws_access_key_id
+ AWS_SECRET_ACCESS_KEY:
+ from_secret: garagehq_aws_secret_access_key
+ commands:
+ - nix-shell --arg rust false --arg integration false --run "to_s3"
+
+ - name: docker build and publish
+ image: nixpkgs/nix:nixos-21.05
+ volumes:
+ - name: nix_store
+ path: /nix
+ - name: nix_config
+ path: /etc/nix
+ environment:
+ DOCKER_AUTH:
+ from_secret: docker_auth
+ DOCKER_PLATFORM: "linux/386"
+ CONTAINER_NAME: "dxflrs/386_garage"
+ HOME: "/kaniko"
+ commands:
+ - mkdir -p /kaniko/.docker
+ - echo $DOCKER_AUTH > /kaniko/.docker/config.json
+ - export CONTAINER_TAG=${DRONE_TAG:-$DRONE_COMMIT}
+ - nix-shell --arg rust false --arg integration false --run "to_docker"
+
+trigger:
+ event:
+ - promote
+ - cron
+
+node:
+ nix: 1
+
+---
+kind: pipeline
+type: docker
+name: release-linux-aarch64
+
+volumes:
+- name: nix_store
+ host:
+ path: /var/lib/drone/nix
+- name: nix_config
+ temp: {}
+
+environment:
+ TARGET: aarch64-unknown-linux-musl
+
+steps:
+ - name: setup nix
+ image: nixpkgs/nix:nixos-21.05
+ volumes:
+ - name: nix_store
+ path: /nix
+ - name: nix_config
+ path: /etc/nix
+ commands:
+ - cp nix/nix.conf /etc/nix/nix.conf
+ - nix-build --no-build-output --no-out-link ./shell.nix --arg rust false --arg integration false -A inputDerivation
+
+ - name: build
+ image: nixpkgs/nix:nixos-21.05
+ volumes:
+ - name: nix_store
+ path: /nix
+ - name: nix_config
+ path: /etc/nix
+ commands:
+ - nix-build --no-build-output --argstr target $TARGET --arg release true --argstr git_version $DRONE_COMMIT
+
+ - name: update cache
+ image: nixpkgs/nix:nixos-21.05
+ environment:
+ AWS_ACCESS_KEY_ID:
+ from_secret: cache_aws_access_key_id
+ AWS_SECRET_ACCESS_KEY:
+ from_secret: cache_aws_secret_access_key
+ NIX_PRIV_KEY:
+ from_secret: nix_priv_key
+ volumes:
+ - name: nix_store
+ path: /nix
+ - name: nix_config
+ path: /etc/nix
+ commands:
+ - (umask 377 && echo $NIX_PRIV_KEY > /etc/nix/signing-key.sec)
+ - |
+ nix copy --to 's3://nix?endpoint=garage.deuxfleurs.fr&region=garage&secret-key=/etc/nix/signing-key.sec' \
+ $(nix-store -qR --include-outputs \
+ $(nix-instantiate --argstr target $TARGET --arg release true))
+
+ - name: push static binary
+ image: nixpkgs/nix:nixos-21.05
+ volumes:
+ - name: nix_store
+ path: /nix
+ - name: nix_config
+ path: /etc/nix
+ environment:
+ AWS_ACCESS_KEY_ID:
+ from_secret: garagehq_aws_access_key_id
+ AWS_SECRET_ACCESS_KEY:
+ from_secret: garagehq_aws_secret_access_key
+ commands:
+ - nix-shell --arg rust false --arg integration false --run "to_s3"
+
+ - name: docker build and publish
+ image: nixpkgs/nix:nixos-21.05
+ volumes:
+ - name: nix_store
+ path: /nix
+ - name: nix_config
+ path: /etc/nix
+ environment:
+ DOCKER_AUTH:
+ from_secret: docker_auth
+ DOCKER_PLATFORM: "linux/arm64"
+ CONTAINER_NAME: "dxflrs/arm64_garage"
+ HOME: "/kaniko"
+ commands:
+ - mkdir -p /kaniko/.docker
+ - echo $DOCKER_AUTH > /kaniko/.docker/config.json
+ - export CONTAINER_TAG=${DRONE_TAG:-$DRONE_COMMIT}
+ - nix-shell --arg rust false --arg integration false --run "to_docker"
+
+trigger:
+ event:
+ - promote
+ - cron
+
+node:
+ nix: 1
+
+---
+kind: pipeline
+type: docker
+name: release-linux-armv6l
+
+volumes:
+- name: nix_store
+ host:
+ path: /var/lib/drone/nix
+- name: nix_config
+ temp: {}
+
+environment:
+ TARGET: armv6l-unknown-linux-musleabihf
+
+steps:
+ - name: setup nix
+ image: nixpkgs/nix:nixos-21.05
+ volumes:
+ - name: nix_store
+ path: /nix
+ - name: nix_config
+ path: /etc/nix
+ commands:
+ - cp nix/nix.conf /etc/nix/nix.conf
+ - nix-build --no-build-output --no-out-link --arg rust false --arg integration false -A inputDerivation
+
+ - name: build
+ image: nixpkgs/nix:nixos-21.05
+ volumes:
+ - name: nix_store
+ path: /nix
+ - name: nix_config
+ path: /etc/nix
+ commands:
+ - nix-build --no-build-output --argstr target $TARGET --arg release true --argstr git_version $DRONE_COMMIT
+
+ - name: update cache
+ image: nixpkgs/nix:nixos-21.05
+ environment:
+ AWS_ACCESS_KEY_ID:
+ from_secret: cache_aws_access_key_id
+ AWS_SECRET_ACCESS_KEY:
+ from_secret: cache_aws_secret_access_key
+ NIX_PRIV_KEY:
+ from_secret: nix_priv_key
+ volumes:
+ - name: nix_store
+ path: /nix
+ - name: nix_config
+ path: /etc/nix
+ commands:
+ - (umask 377 && echo $NIX_PRIV_KEY > /etc/nix/signing-key.sec)
+ - |
+ nix copy --to 's3://nix?endpoint=garage.deuxfleurs.fr&region=garage&secret-key=/etc/nix/signing-key.sec' \
+ $(nix-store -qR --include-outputs \
+ $(nix-instantiate --argstr target $TARGET --arg release true))
+
+ - name: push static binary
+ image: nixpkgs/nix:nixos-21.05
+ volumes:
+ - name: nix_store
+ path: /nix
+ - name: nix_config
+ path: /etc/nix
+ environment:
+ AWS_ACCESS_KEY_ID:
+ from_secret: garagehq_aws_access_key_id
+ AWS_SECRET_ACCESS_KEY:
+ from_secret: garagehq_aws_secret_access_key
+ commands:
+ - nix-shell --arg integration false --arg rust false --run "to_s3"
+
+ - name: docker build and publish
+ image: nixpkgs/nix:nixos-21.05
+ volumes:
+ - name: nix_store
+ path: /nix
+ - name: nix_config
+ path: /etc/nix
+ environment:
+ DOCKER_AUTH:
+ from_secret: docker_auth
+ DOCKER_PLATFORM: "linux/arm"
+ CONTAINER_NAME: "dxflrs/arm_garage"
+ HOME: "/kaniko"
+ commands:
+ - mkdir -p /kaniko/.docker
+ - echo $DOCKER_AUTH > /kaniko/.docker/config.json
+ - export CONTAINER_TAG=${DRONE_TAG:-$DRONE_COMMIT}
+ - nix-shell --arg rust false --arg integration false --run "to_docker"
+
+trigger:
+ event:
+ - promote
+ - cron
+
+node:
+ nix: 1
+
+---
+kind: pipeline
+type: docker
+name: refresh-release-page
+
+volumes:
+- name: nix_store
+ host:
+ path: /var/lib/drone/nix
+
+steps:
+ - name: refresh-index
+ image: nixpkgs/nix:nixos-21.05
+ volumes:
+ - name: nix_store
+ path: /nix
+ environment:
+ AWS_ACCESS_KEY_ID:
+ from_secret: garagehq_aws_access_key_id
+ AWS_SECRET_ACCESS_KEY:
+ from_secret: garagehq_aws_secret_access_key
+ commands:
+ - mkdir -p /etc/nix && cp nix/nix.conf /etc/nix/nix.conf
+ - nix-shell --arg integration false --arg rust false --run "refresh_index"
+
+depends_on:
+ - release-linux-x86_64
+ - release-linux-i686
+ - release-linux-aarch64
+ - release-linux-armv6l
+
+trigger:
+ event:
+ - promote
+ - cron
+
+node:
+ nix: 1
+
---
kind: signature
-hmac: f0f2e947c8aa8bc5b83d25b4da22f3eb711b3fe1cc80ead4f93428dbd3d44164
+hmac: 1c33490cc2902564c4250a409c156683d0d549b8c9d5aee4e46d1bde4e0ccf2c
...
diff --git a/Cargo.nix b/Cargo.nix
new file mode 100644
index 00000000..7038ce8b
--- /dev/null
+++ b/Cargo.nix
@@ -0,0 +1,2496 @@
+# This file was @generated by cargo2nix 0.9.0.
+# It is not intended to be manually edited.
+
+args@{
+ release ? true,
+ rootFeatures ? [
+ "garage_util/default"
+ "garage_rpc/default"
+ "garage_table/default"
+ "garage_model/default"
+ "garage_api/default"
+ "garage_web/default"
+ "garage/default"
+ ],
+ rustPackages,
+ buildRustPackages,
+ hostPlatform,
+ hostPlatformCpu ? null,
+ hostPlatformFeatures ? [],
+ mkRustCrate,
+ rustLib,
+ lib,
+ workspaceSrc,
+}:
+let
+ workspaceSrc = if args.workspaceSrc == null then ./. else args.workspaceSrc;
+in let
+ inherit (rustLib) fetchCratesIo fetchCrateLocal fetchCrateGit fetchCrateAlternativeRegistry expandFeatures decideProfile genDrvsByProfile;
+ profilesByName = {
+ dev = builtins.fromTOML "lto = \"off\"\n";
+ release = builtins.fromTOML "debug = true\n";
+ };
+ rootFeatures' = expandFeatures rootFeatures;
+ overridableMkRustCrate = f:
+ let
+ drvs = genDrvsByProfile profilesByName ({ profile, profileName }: mkRustCrate ({ inherit release profile hostPlatformCpu hostPlatformFeatures; } // (f profileName)));
+ in { compileMode ? null, profileName ? decideProfile compileMode release }:
+ let drv = drvs.${profileName}; in if compileMode == null then drv else drv.override { inherit compileMode; };
+in
+{
+ cargo2nixVersion = "0.9.0";
+ workspace = {
+ garage_util = rustPackages.unknown.garage_util."0.3.0";
+ garage_rpc = rustPackages.unknown.garage_rpc."0.3.0";
+ garage_table = rustPackages.unknown.garage_table."0.3.0";
+ garage_model = rustPackages.unknown.garage_model."0.3.0";
+ garage_api = rustPackages.unknown.garage_api."0.3.0";
+ garage_web = rustPackages.unknown.garage_web."0.3.0";
+ garage = rustPackages.unknown.garage."0.3.0";
+ };
+ "registry+https://github.com/rust-lang/crates.io-index".aho-corasick."0.7.15" = overridableMkRustCrate (profileName: rec {
+ name = "aho-corasick";
+ version = "0.7.15";
+ registry = "registry+https://github.com/rust-lang/crates.io-index";
+ src = fetchCratesIo { inherit name version; sha256 = "7404febffaa47dac81aa44dba71523c9d069b1bdc50a77db41195149e17f68e5"; };
+ features = builtins.concatLists [
+ [ "default" ]
+ [ "std" ]
+ ];
+ dependencies = {
+ memchr = rustPackages."registry+https://github.com/rust-lang/crates.io-index".memchr."2.3.4" { inherit profileName; };
+ };
+ });
+
+ "registry+https://github.com/rust-lang/crates.io-index".arc-swap."1.2.0" = overridableMkRustCrate (profileName: rec {
+ name = "arc-swap";
+ version = "1.2.0";
+ registry = "registry+https://github.com/rust-lang/crates.io-index";
+ src = fetchCratesIo { inherit name version; sha256 = "d4d7d63395147b81a9e570bcc6243aaf71c017bd666d4909cfef0085bdda8d73"; };
+ });
+
+ "registry+https://github.com/rust-lang/crates.io-index".arrayvec."0.5.2" = overridableMkRustCrate (profileName: rec {
+ name = "arrayvec";
+ version = "0.5.2";
+ registry = "registry+https://github.com/rust-lang/crates.io-index";
+ src = fetchCratesIo { inherit name version; sha256 = "23b62fc65de8e4e7f52534fb52b0f3ed04746ae267519eef2a83941e8085068b"; };
+ features = builtins.concatLists [
+ [ "default" ]
+ [ "std" ]
+ ];
+ });
+
+ "registry+https://github.com/rust-lang/crates.io-index".atty."0.2.14" = overridableMkRustCrate (profileName: rec {
+ name = "atty";
+ version = "0.2.14";
+ registry = "registry+https://github.com/rust-lang/crates.io-index";
+ src = fetchCratesIo { inherit name version; sha256 = "d9b39be18770d11421cdb1b9947a45dd3f37e93092cbf377614828a319d5fee8"; };
+ dependencies = {
+ ${ if hostPlatform.parsed.kernel.name == "hermit" then "hermit_abi" else null } = rustPackages."registry+https://github.com/rust-lang/crates.io-index".hermit-abi."0.1.18" { inherit profileName; };
+ ${ if hostPlatform.isUnix then "libc" else null } = rustPackages."registry+https://github.com/rust-lang/crates.io-index".libc."0.2.90" { inherit profileName; };
+ ${ if hostPlatform.isWindows then "winapi" else null } = rustPackages."registry+https://github.com/rust-lang/crates.io-index".winapi."0.3.9" { inherit profileName; };
+ };
+ });
+
+ "registry+https://github.com/rust-lang/crates.io-index".autocfg."1.0.1" = overridableMkRustCrate (profileName: rec {
+ name = "autocfg";
+ version = "1.0.1";
+ registry = "registry+https://github.com/rust-lang/crates.io-index";
+ src = fetchCratesIo { inherit name version; sha256 = "cdb031dd78e28731d87d56cc8ffef4a8f36ca26c38fe2de700543e627f8a464a"; };
+ });
+
+ "registry+https://github.com/rust-lang/crates.io-index".base64."0.13.0" = overridableMkRustCrate (profileName: rec {
+ name = "base64";
+ version = "0.13.0";
+ registry = "registry+https://github.com/rust-lang/crates.io-index";
+ src = fetchCratesIo { inherit name version; sha256 = "904dfeac50f3cdaba28fc6f57fdcddb75f49ed61346676a78c4ffe55877802fd"; };
+ features = builtins.concatLists [
+ [ "default" ]
+ [ "std" ]
+ ];
+ });
+
+ "registry+https://github.com/rust-lang/crates.io-index".bitflags."1.2.1" = overridableMkRustCrate (profileName: rec {
+ name = "bitflags";
+ version = "1.2.1";
+ registry = "registry+https://github.com/rust-lang/crates.io-index";
+ src = fetchCratesIo { inherit name version; sha256 = "cf1de2fe8c75bc145a2f577add951f8134889b4795d47466a54a5c846d691693"; };
+ features = builtins.concatLists [
+ [ "default" ]
+ ];
+ });
+
+ "registry+https://github.com/rust-lang/crates.io-index".blake2."0.9.1" = overridableMkRustCrate (profileName: rec {
+ name = "blake2";
+ version = "0.9.1";
+ registry = "registry+https://github.com/rust-lang/crates.io-index";
+ src = fetchCratesIo { inherit name version; sha256 = "10a5720225ef5daecf08657f23791354e1685a8c91a4c60c7f3d3b2892f978f4"; };
+ features = builtins.concatLists [
+ [ "default" ]
+ [ "std" ]
+ ];
+ dependencies = {
+ crypto_mac = rustPackages."registry+https://github.com/rust-lang/crates.io-index".crypto-mac."0.8.0" { inherit profileName; };
+ digest = rustPackages."registry+https://github.com/rust-lang/crates.io-index".digest."0.9.0" { inherit profileName; };
+ opaque_debug = rustPackages."registry+https://github.com/rust-lang/crates.io-index".opaque-debug."0.3.0" { inherit profileName; };
+ };
+ });
+
+ "registry+https://github.com/rust-lang/crates.io-index".block-buffer."0.9.0" = overridableMkRustCrate (profileName: rec {
+ name = "block-buffer";
+ version = "0.9.0";
+ registry = "registry+https://github.com/rust-lang/crates.io-index";
+ src = fetchCratesIo { inherit name version; sha256 = "4152116fd6e9dadb291ae18fc1ec3575ed6d84c29642d97890f4b4a3417297e4"; };
+ dependencies = {
+ generic_array = rustPackages."registry+https://github.com/rust-lang/crates.io-index".generic-array."0.14.4" { inherit profileName; };
+ };
+ });
+
+ "registry+https://github.com/rust-lang/crates.io-index".bumpalo."3.6.1" = overridableMkRustCrate (profileName: rec {
+ name = "bumpalo";
+ version = "3.6.1";
+ registry = "registry+https://github.com/rust-lang/crates.io-index";
+ src = fetchCratesIo { inherit name version; sha256 = "63396b8a4b9de3f4fdfb320ab6080762242f66a8ef174c49d8e19b674db4cdbe"; };
+ features = builtins.concatLists [
+ [ "default" ]
+ ];
+ });
+
+ "registry+https://github.com/rust-lang/crates.io-index".byteorder."1.4.3" = overridableMkRustCrate (profileName: rec {
+ name = "byteorder";
+ version = "1.4.3";
+ registry = "registry+https://github.com/rust-lang/crates.io-index";
+ src = fetchCratesIo { inherit name version; sha256 = "14c189c53d098945499cdfa7ecc63567cf3886b3332b312a5b4585d8d3a6a610"; };
+ features = builtins.concatLists [
+ [ "default" ]
+ [ "std" ]
+ ];
+ });
+
+ "registry+https://github.com/rust-lang/crates.io-index".bytes."1.0.1" = overridableMkRustCrate (profileName: rec {
+ name = "bytes";
+ version = "1.0.1";
+ registry = "registry+https://github.com/rust-lang/crates.io-index";
+ src = fetchCratesIo { inherit name version; sha256 = "b700ce4376041dcd0a327fd0097c41095743c4c8af8887265942faf1100bd040"; };
+ features = builtins.concatLists [
+ [ "default" ]
+ [ "std" ]
+ ];
+ });
+
+ "registry+https://github.com/rust-lang/crates.io-index".cc."1.0.67" = overridableMkRustCrate (profileName: rec {
+ name = "cc";
+ version = "1.0.67";
+ registry = "registry+https://github.com/rust-lang/crates.io-index";
+ src = fetchCratesIo { inherit name version; sha256 = "e3c69b077ad434294d3ce9f1f6143a2a4b89a8a2d54ef813d85003a4fd1137fd"; };
+ });
+
+ "registry+https://github.com/rust-lang/crates.io-index".cfg-if."1.0.0" = overridableMkRustCrate (profileName: rec {
+ name = "cfg-if";
+ version = "1.0.0";
+ registry = "registry+https://github.com/rust-lang/crates.io-index";
+ src = fetchCratesIo { inherit name version; sha256 = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd"; };
+ });
+
+ "registry+https://github.com/rust-lang/crates.io-index".chrono."0.4.19" = overridableMkRustCrate (profileName: rec {
+ name = "chrono";
+ version = "0.4.19";
+ registry = "registry+https://github.com/rust-lang/crates.io-index";
+ src = fetchCratesIo { inherit name version; sha256 = "670ad68c9088c2a963aaa298cb369688cf3f9465ce5e2d4ca10e6e0098a1ce73"; };
+ features = builtins.concatLists [
+ [ "clock" ]
+ [ "default" ]
+ [ "libc" ]
+ [ "oldtime" ]
+ [ "std" ]
+ [ "time" ]
+ [ "winapi" ]
+ ];
+ dependencies = {
+ libc = rustPackages."registry+https://github.com/rust-lang/crates.io-index".libc."0.2.90" { inherit profileName; };
+ num_integer = rustPackages."registry+https://github.com/rust-lang/crates.io-index".num-integer."0.1.44" { inherit profileName; };
+ num_traits = rustPackages."registry+https://github.com/rust-lang/crates.io-index".num-traits."0.2.14" { inherit profileName; };
+ time = rustPackages."registry+https://github.com/rust-lang/crates.io-index".time."0.1.43" { inherit profileName; };
+ ${ if hostPlatform.isWindows then "winapi" else null } = rustPackages."registry+https://github.com/rust-lang/crates.io-index".winapi."0.3.9" { inherit profileName; };
+ };
+ });
+
+ "registry+https://github.com/rust-lang/crates.io-index".clap."2.33.3" = overridableMkRustCrate (profileName: rec {
+ name = "clap";
+ version = "2.33.3";
+ registry = "registry+https://github.com/rust-lang/crates.io-index";
+ src = fetchCratesIo { inherit name version; sha256 = "37e58ac78573c40708d45522f0d80fa2f01cc4f9b4e2bf749807255454312002"; };
+ dependencies = {
+ bitflags = rustPackages."registry+https://github.com/rust-lang/crates.io-index".bitflags."1.2.1" { inherit profileName; };
+ textwrap = rustPackages."registry+https://github.com/rust-lang/crates.io-index".textwrap."0.11.0" { inherit profileName; };
+ unicode_width = rustPackages."registry+https://github.com/rust-lang/crates.io-index".unicode-width."0.1.8" { inherit profileName; };
+ };
+ });
+
+ "registry+https://github.com/rust-lang/crates.io-index".cpuid-bool."0.1.2" = overridableMkRustCrate (profileName: rec {
+ name = "cpuid-bool";
+ version = "0.1.2";
+ registry = "registry+https://github.com/rust-lang/crates.io-index";
+ src = fetchCratesIo { inherit name version; sha256 = "8aebca1129a03dc6dc2b127edd729435bbc4a37e1d5f4d7513165089ceb02634"; };
+ });
+
+ "registry+https://github.com/rust-lang/crates.io-index".crc32fast."1.2.1" = overridableMkRustCrate (profileName: rec {
+ name = "crc32fast";
+ version = "1.2.1";
+ registry = "registry+https://github.com/rust-lang/crates.io-index";
+ src = fetchCratesIo { inherit name version; sha256 = "81156fece84ab6a9f2afdb109ce3ae577e42b1228441eded99bd77f627953b1a"; };
+ features = builtins.concatLists [
+ [ "default" ]
+ [ "std" ]
+ ];
+ dependencies = {
+ cfg_if = rustPackages."registry+https://github.com/rust-lang/crates.io-index".cfg-if."1.0.0" { inherit profileName; };
+ };
+ });
+
+ "registry+https://github.com/rust-lang/crates.io-index".crossbeam-epoch."0.9.3" = overridableMkRustCrate (profileName: rec {
+ name = "crossbeam-epoch";
+ version = "0.9.3";
+ registry = "registry+https://github.com/rust-lang/crates.io-index";
+ src = fetchCratesIo { inherit name version; sha256 = "2584f639eb95fea8c798496315b297cf81b9b58b6d30ab066a75455333cf4b12"; };
+ features = builtins.concatLists [
+ [ "alloc" ]
+ [ "default" ]
+ [ "lazy_static" ]
+ [ "std" ]
+ ];
+ dependencies = {
+ cfg_if = rustPackages."registry+https://github.com/rust-lang/crates.io-index".cfg-if."1.0.0" { inherit profileName; };
+ crossbeam_utils = rustPackages."registry+https://github.com/rust-lang/crates.io-index".crossbeam-utils."0.8.3" { inherit profileName; };
+ lazy_static = rustPackages."registry+https://github.com/rust-lang/crates.io-index".lazy_static."1.4.0" { inherit profileName; };
+ memoffset = rustPackages."registry+https://github.com/rust-lang/crates.io-index".memoffset."0.6.1" { inherit profileName; };
+ scopeguard = rustPackages."registry+https://github.com/rust-lang/crates.io-index".scopeguard."1.1.0" { inherit profileName; };
+ };
+ });
+
+ "registry+https://github.com/rust-lang/crates.io-index".crossbeam-utils."0.8.3" = overridableMkRustCrate (profileName: rec {
+ name = "crossbeam-utils";
+ version = "0.8.3";
+ registry = "registry+https://github.com/rust-lang/crates.io-index";
+ src = fetchCratesIo { inherit name version; sha256 = "e7e9d99fa91428effe99c5c6d4634cdeba32b8cf784fc428a2a687f61a952c49"; };
+ features = builtins.concatLists [
+ [ "default" ]
+ [ "lazy_static" ]
+ [ "std" ]
+ ];
+ dependencies = {
+ cfg_if = rustPackages."registry+https://github.com/rust-lang/crates.io-index".cfg-if."1.0.0" { inherit profileName; };
+ lazy_static = rustPackages."registry+https://github.com/rust-lang/crates.io-index".lazy_static."1.4.0" { inherit profileName; };
+ };
+ buildDependencies = {
+ autocfg = buildRustPackages."registry+https://github.com/rust-lang/crates.io-index".autocfg."1.0.1" { profileName = "__noProfile"; };
+ };
+ });
+
+ "registry+https://github.com/rust-lang/crates.io-index".crypto-mac."0.8.0" = overridableMkRustCrate (profileName: rec {
+ name = "crypto-mac";
+ version = "0.8.0";
+ registry = "registry+https://github.com/rust-lang/crates.io-index";
+ src = fetchCratesIo { inherit name version; sha256 = "b584a330336237c1eecd3e94266efb216c56ed91225d634cb2991c5f3fd1aeab"; };
+ features = builtins.concatLists [
+ [ "std" ]
+ ];
+ dependencies = {
+ generic_array = rustPackages."registry+https://github.com/rust-lang/crates.io-index".generic-array."0.14.4" { inherit profileName; };
+ subtle = rustPackages."registry+https://github.com/rust-lang/crates.io-index".subtle."2.4.0" { inherit profileName; };
+ };
+ });
+
+ "registry+https://github.com/rust-lang/crates.io-index".crypto-mac."0.10.0" = overridableMkRustCrate (profileName: rec {
+ name = "crypto-mac";
+ version = "0.10.0";
+ registry = "registry+https://github.com/rust-lang/crates.io-index";
+ src = fetchCratesIo { inherit name version; sha256 = "4857fd85a0c34b3c3297875b747c1e02e06b6a0ea32dd892d8192b9ce0813ea6"; };
+ dependencies = {
+ generic_array = rustPackages."registry+https://github.com/rust-lang/crates.io-index".generic-array."0.14.4" { inherit profileName; };
+ subtle = rustPackages."registry+https://github.com/rust-lang/crates.io-index".subtle."2.4.0" { inherit profileName; };
+ };
+ });
+
+ "registry+https://github.com/rust-lang/crates.io-index".digest."0.9.0" = overridableMkRustCrate (profileName: rec {
+ name = "digest";
+ version = "0.9.0";
+ registry = "registry+https://github.com/rust-lang/crates.io-index";
+ src = fetchCratesIo { inherit name version; sha256 = "d3dd60d1080a57a05ab032377049e0591415d2b31afd7028356dbf3cc6dcb066"; };
+ features = builtins.concatLists [
+ [ "alloc" ]
+ [ "std" ]
+ ];
+ dependencies = {
+ generic_array = rustPackages."registry+https://github.com/rust-lang/crates.io-index".generic-array."0.14.4" { inherit profileName; };
+ };
+ });
+
+ "registry+https://github.com/rust-lang/crates.io-index".env_logger."0.7.1" = overridableMkRustCrate (profileName: rec {
+ name = "env_logger";
+ version = "0.7.1";
+ registry = "registry+https://github.com/rust-lang/crates.io-index";
+ src = fetchCratesIo { inherit name version; sha256 = "44533bbbb3bb3c1fa17d9f2e4e38bbbaf8396ba82193c4cb1b6445d711445d36"; };
+ features = builtins.concatLists [
+ [ "atty" ]
+ [ "default" ]
+ [ "humantime" ]
+ [ "regex" ]
+ [ "termcolor" ]
+ ];
+ dependencies = {
+ atty = rustPackages."registry+https://github.com/rust-lang/crates.io-index".atty."0.2.14" { inherit profileName; };
+ humantime = rustPackages."registry+https://github.com/rust-lang/crates.io-index".humantime."1.3.0" { inherit profileName; };
+ log = rustPackages."registry+https://github.com/rust-lang/crates.io-index".log."0.4.14" { inherit profileName; };
+ regex = rustPackages."registry+https://github.com/rust-lang/crates.io-index".regex."1.4.5" { inherit profileName; };
+ termcolor = rustPackages."registry+https://github.com/rust-lang/crates.io-index".termcolor."1.1.2" { inherit profileName; };
+ };
+ });
+
+ "registry+https://github.com/rust-lang/crates.io-index".err-derive."0.3.0" = overridableMkRustCrate (profileName: rec {
+ name = "err-derive";
+ version = "0.3.0";
+ registry = "registry+https://github.com/rust-lang/crates.io-index";
+ src = fetchCratesIo { inherit name version; sha256 = "dcc7f65832b62ed38939f98966824eb6294911c3629b0e9a262bfb80836d9686"; };
+ features = builtins.concatLists [
+ [ "default" ]
+ [ "std" ]
+ ];
+ dependencies = {
+ proc_macro_error = rustPackages."registry+https://github.com/rust-lang/crates.io-index".proc-macro-error."1.0.4" { inherit profileName; };
+ proc_macro2 = rustPackages."registry+https://github.com/rust-lang/crates.io-index".proc-macro2."1.0.24" { inherit profileName; };
+ quote = rustPackages."registry+https://github.com/rust-lang/crates.io-index".quote."1.0.9" { inherit profileName; };
+ syn = rustPackages."registry+https://github.com/rust-lang/crates.io-index".syn."1.0.64" { inherit profileName; };
+ synstructure = rustPackages."registry+https://github.com/rust-lang/crates.io-index".synstructure."0.12.4" { inherit profileName; };
+ };
+ buildDependencies = {
+ rustversion = buildRustPackages."registry+https://github.com/rust-lang/crates.io-index".rustversion."1.0.4" { profileName = "__noProfile"; };
+ };
+ });
+
+ "registry+https://github.com/rust-lang/crates.io-index".fnv."1.0.7" = overridableMkRustCrate (profileName: rec {
+ name = "fnv";
+ version = "1.0.7";
+ registry = "registry+https://github.com/rust-lang/crates.io-index";
+ src = fetchCratesIo { inherit name version; sha256 = "3f9eec918d3f24069decb9af1554cad7c880e2da24a9afd88aca000531ab82c1"; };
+ features = builtins.concatLists [
+ [ "default" ]
+ [ "std" ]
+ ];
+ });
+
+ "registry+https://github.com/rust-lang/crates.io-index".form_urlencoded."1.0.1" = overridableMkRustCrate (profileName: rec {
+ name = "form_urlencoded";
+ version = "1.0.1";
+ registry = "registry+https://github.com/rust-lang/crates.io-index";
+ src = fetchCratesIo { inherit name version; sha256 = "5fc25a87fa4fd2094bffb06925852034d90a17f0d1e05197d4956d3555752191"; };
+ dependencies = {
+ matches = rustPackages."registry+https://github.com/rust-lang/crates.io-index".matches."0.1.8" { inherit profileName; };
+ percent_encoding = rustPackages."registry+https://github.com/rust-lang/crates.io-index".percent-encoding."2.1.0" { inherit profileName; };
+ };
+ });
+
+ "registry+https://github.com/rust-lang/crates.io-index".fs2."0.4.3" = overridableMkRustCrate (profileName: rec {
+ name = "fs2";
+ version = "0.4.3";
+ registry = "registry+https://github.com/rust-lang/crates.io-index";
+ src = fetchCratesIo { inherit name version; sha256 = "9564fc758e15025b46aa6643b1b77d047d1a56a1aea6e01002ac0c7026876213"; };
+ dependencies = {
+ ${ if hostPlatform.isUnix then "libc" else null } = rustPackages."registry+https://github.com/rust-lang/crates.io-index".libc."0.2.90" { inherit profileName; };
+ ${ if hostPlatform.isWindows then "winapi" else null } = rustPackages."registry+https://github.com/rust-lang/crates.io-index".winapi."0.3.9" { inherit profileName; };
+ };
+ });
+
+ "registry+https://github.com/rust-lang/crates.io-index".futures."0.3.13" = overridableMkRustCrate (profileName: rec {
+ name = "futures";
+ version = "0.3.13";
+ registry = "registry+https://github.com/rust-lang/crates.io-index";
+ src = fetchCratesIo { inherit name version; sha256 = "7f55667319111d593ba876406af7c409c0ebb44dc4be6132a783ccf163ea14c1"; };
+ features = builtins.concatLists [
+ [ "alloc" ]
+ [ "async-await" ]
+ [ "default" ]
+ [ "executor" ]
+ [ "futures-executor" ]
+ [ "std" ]
+ ];
+ dependencies = {
+ futures_channel = rustPackages."registry+https://github.com/rust-lang/crates.io-index".futures-channel."0.3.13" { inherit profileName; };
+ futures_core = rustPackages."registry+https://github.com/rust-lang/crates.io-index".futures-core."0.3.13" { inherit profileName; };
+ futures_executor = rustPackages."registry+https://github.com/rust-lang/crates.io-index".futures-executor."0.3.13" { inherit profileName; };
+ futures_io = rustPackages."registry+https://github.com/rust-lang/crates.io-index".futures-io."0.3.13" { inherit profileName; };
+ futures_sink = rustPackages."registry+https://github.com/rust-lang/crates.io-index".futures-sink."0.3.13" { inherit profileName; };
+ futures_task = rustPackages."registry+https://github.com/rust-lang/crates.io-index".futures-task."0.3.13" { inherit profileName; };
+ futures_util = rustPackages."registry+https://github.com/rust-lang/crates.io-index".futures-util."0.3.13" { inherit profileName; };
+ };
+ });
+
+ "registry+https://github.com/rust-lang/crates.io-index".futures-channel."0.3.13" = overridableMkRustCrate (profileName: rec {
+ name = "futures-channel";
+ version = "0.3.13";
+ registry = "registry+https://github.com/rust-lang/crates.io-index";
+ src = fetchCratesIo { inherit name version; sha256 = "8c2dd2df839b57db9ab69c2c9d8f3e8c81984781937fe2807dc6dcf3b2ad2939"; };
+ features = builtins.concatLists [
+ [ "alloc" ]
+ [ "default" ]
+ [ "futures-sink" ]
+ [ "sink" ]
+ [ "std" ]
+ ];
+ dependencies = {
+ futures_core = rustPackages."registry+https://github.com/rust-lang/crates.io-index".futures-core."0.3.13" { inherit profileName; };
+ futures_sink = rustPackages."registry+https://github.com/rust-lang/crates.io-index".futures-sink."0.3.13" { inherit profileName; };
+ };
+ });
+
+ "registry+https://github.com/rust-lang/crates.io-index".futures-core."0.3.13" = overridableMkRustCrate (profileName: rec {
+ name = "futures-core";
+ version = "0.3.13";
+ registry = "registry+https://github.com/rust-lang/crates.io-index";
+ src = fetchCratesIo { inherit name version; sha256 = "15496a72fabf0e62bdc3df11a59a3787429221dd0710ba8ef163d6f7a9112c94"; };
+ features = builtins.concatLists [
+ [ "alloc" ]
+ (lib.optional (rootFeatures' ? "garage" || rootFeatures' ? "garage_api" || rootFeatures' ? "garage_model" || rootFeatures' ? "garage_rpc" || rootFeatures' ? "garage_table" || rootFeatures' ? "garage_web") "default")
+ [ "std" ]
+ ];
+ });
+
+ "registry+https://github.com/rust-lang/crates.io-index".futures-executor."0.3.13" = overridableMkRustCrate (profileName: rec {
+ name = "futures-executor";
+ version = "0.3.13";
+ registry = "registry+https://github.com/rust-lang/crates.io-index";
+ src = fetchCratesIo { inherit name version; sha256 = "891a4b7b96d84d5940084b2a37632dd65deeae662c114ceaa2c879629c9c0ad1"; };
+ features = builtins.concatLists [
+ [ "std" ]
+ ];
+ dependencies = {
+ futures_core = rustPackages."registry+https://github.com/rust-lang/crates.io-index".futures-core."0.3.13" { inherit profileName; };
+ futures_task = rustPackages."registry+https://github.com/rust-lang/crates.io-index".futures-task."0.3.13" { inherit profileName; };
+ futures_util = rustPackages."registry+https://github.com/rust-lang/crates.io-index".futures-util."0.3.13" { inherit profileName; };
+ };
+ });
+
+ "registry+https://github.com/rust-lang/crates.io-index".futures-io."0.3.13" = overridableMkRustCrate (profileName: rec {
+ name = "futures-io";
+ version = "0.3.13";
+ registry = "registry+https://github.com/rust-lang/crates.io-index";
+ src = fetchCratesIo { inherit name version; sha256 = "d71c2c65c57704c32f5241c1223167c2c3294fd34ac020c807ddbe6db287ba59"; };
+ features = builtins.concatLists [
+ [ "std" ]
+ ];
+ });
+
+ "registry+https://github.com/rust-lang/crates.io-index".futures-macro."0.3.13" = overridableMkRustCrate (profileName: rec {
+ name = "futures-macro";
+ version = "0.3.13";
+ registry = "registry+https://github.com/rust-lang/crates.io-index";
+ src = fetchCratesIo { inherit name version; sha256 = "ea405816a5139fb39af82c2beb921d52143f556038378d6db21183a5c37fbfb7"; };
+ dependencies = {
+ proc_macro_hack = buildRustPackages."registry+https://github.com/rust-lang/crates.io-index".proc-macro-hack."0.5.19" { profileName = "__noProfile"; };
+ proc_macro2 = rustPackages."registry+https://github.com/rust-lang/crates.io-index".proc-macro2."1.0.24" { inherit profileName; };
+ quote = rustPackages."registry+https://github.com/rust-lang/crates.io-index".quote."1.0.9" { inherit profileName; };
+ syn = rustPackages."registry+https://github.com/rust-lang/crates.io-index".syn."1.0.64" { inherit profileName; };
+ };
+ });
+
+ "registry+https://github.com/rust-lang/crates.io-index".futures-sink."0.3.13" = overridableMkRustCrate (profileName: rec {
+ name = "futures-sink";
+ version = "0.3.13";
+ registry = "registry+https://github.com/rust-lang/crates.io-index";
+ src = fetchCratesIo { inherit name version; sha256 = "85754d98985841b7d4f5e8e6fbfa4a4ac847916893ec511a2917ccd8525b8bb3"; };
+ features = builtins.concatLists [
+ [ "alloc" ]
+ (lib.optional (rootFeatures' ? "garage" || rootFeatures' ? "garage_api" || rootFeatures' ? "garage_model" || rootFeatures' ? "garage_rpc" || rootFeatures' ? "garage_table" || rootFeatures' ? "garage_web") "default")
+ [ "std" ]
+ ];
+ });
+
+ "registry+https://github.com/rust-lang/crates.io-index".futures-task."0.3.13" = overridableMkRustCrate (profileName: rec {
+ name = "futures-task";
+ version = "0.3.13";
+ registry = "registry+https://github.com/rust-lang/crates.io-index";
+ src = fetchCratesIo { inherit name version; sha256 = "fa189ef211c15ee602667a6fcfe1c1fd9e07d42250d2156382820fba33c9df80"; };
+ features = builtins.concatLists [
+ [ "alloc" ]
+ [ "std" ]
+ ];
+ });
+
+ "registry+https://github.com/rust-lang/crates.io-index".futures-util."0.3.13" = overridableMkRustCrate (profileName: rec {
+ name = "futures-util";
+ version = "0.3.13";
+ registry = "registry+https://github.com/rust-lang/crates.io-index";
+ src = fetchCratesIo { inherit name version; sha256 = "1812c7ab8aedf8d6f2701a43e1243acdbcc2b36ab26e2ad421eb99ac963d96d1"; };
+ features = builtins.concatLists [
+ [ "alloc" ]
+ [ "async-await" ]
+ [ "async-await-macro" ]
+ [ "channel" ]
+ (lib.optional (rootFeatures' ? "garage" || rootFeatures' ? "garage_api" || rootFeatures' ? "garage_model" || rootFeatures' ? "garage_rpc" || rootFeatures' ? "garage_table" || rootFeatures' ? "garage_web") "default")
+ [ "futures-channel" ]
+ [ "futures-io" ]
+ [ "futures-macro" ]
+ [ "futures-sink" ]
+ [ "io" ]
+ [ "memchr" ]
+ [ "proc-macro-hack" ]
+ [ "proc-macro-nested" ]
+ [ "sink" ]
+ [ "slab" ]
+ [ "std" ]
+ ];
+ dependencies = {
+ futures_channel = rustPackages."registry+https://github.com/rust-lang/crates.io-index".futures-channel."0.3.13" { inherit profileName; };
+ futures_core = rustPackages."registry+https://github.com/rust-lang/crates.io-index".futures-core."0.3.13" { inherit profileName; };
+ futures_io = rustPackages."registry+https://github.com/rust-lang/crates.io-index".futures-io."0.3.13" { inherit profileName; };
+ futures_macro = buildRustPackages."registry+https://github.com/rust-lang/crates.io-index".futures-macro."0.3.13" { profileName = "__noProfile"; };
+ futures_sink = rustPackages."registry+https://github.com/rust-lang/crates.io-index".futures-sink."0.3.13" { inherit profileName; };
+ futures_task = rustPackages."registry+https://github.com/rust-lang/crates.io-index".futures-task."0.3.13" { inherit profileName; };
+ memchr = rustPackages."registry+https://github.com/rust-lang/crates.io-index".memchr."2.3.4" { inherit profileName; };
+ pin_project_lite = rustPackages."registry+https://github.com/rust-lang/crates.io-index".pin-project-lite."0.2.6" { inherit profileName; };
+ pin_utils = rustPackages."registry+https://github.com/rust-lang/crates.io-index".pin-utils."0.1.0" { inherit profileName; };
+ proc_macro_hack = buildRustPackages."registry+https://github.com/rust-lang/crates.io-index".proc-macro-hack."0.5.19" { profileName = "__noProfile"; };
+ proc_macro_nested = rustPackages."registry+https://github.com/rust-lang/crates.io-index".proc-macro-nested."0.1.7" { inherit profileName; };
+ slab = rustPackages."registry+https://github.com/rust-lang/crates.io-index".slab."0.4.2" { inherit profileName; };
+ };
+ });
+
+ "registry+https://github.com/rust-lang/crates.io-index".fxhash."0.2.1" = overridableMkRustCrate (profileName: rec {
+ name = "fxhash";
+ version = "0.2.1";
+ registry = "registry+https://github.com/rust-lang/crates.io-index";
+ src = fetchCratesIo { inherit name version; sha256 = "c31b6d751ae2c7f11320402d34e41349dd1016f8d5d45e48c4312bc8625af50c"; };
+ dependencies = {
+ byteorder = rustPackages."registry+https://github.com/rust-lang/crates.io-index".byteorder."1.4.3" { inherit profileName; };
+ };
+ });
+
+ "unknown".garage."0.3.0" = overridableMkRustCrate (profileName: rec {
+ name = "garage";
+ version = "0.3.0";
+ registry = "unknown";
+ src = fetchCrateLocal (workspaceSrc + "/src/garage");
+ dependencies = {
+ bytes = rustPackages."registry+https://github.com/rust-lang/crates.io-index".bytes."1.0.1" { inherit profileName; };
+ futures = rustPackages."registry+https://github.com/rust-lang/crates.io-index".futures."0.3.13" { inherit profileName; };
+ futures_util = rustPackages."registry+https://github.com/rust-lang/crates.io-index".futures-util."0.3.13" { inherit profileName; };
+ garage_api = rustPackages."unknown".garage_api."0.3.0" { inherit profileName; };
+ garage_model = rustPackages."unknown".garage_model."0.3.0" { inherit profileName; };
+ garage_rpc = rustPackages."unknown".garage_rpc."0.3.0" { inherit profileName; };
+ garage_table = rustPackages."unknown".garage_table."0.3.0" { inherit profileName; };
+ garage_util = rustPackages."unknown".garage_util."0.3.0" { inherit profileName; };
+ garage_web = rustPackages."unknown".garage_web."0.3.0" { inherit profileName; };
+ git_version = rustPackages."registry+https://github.com/rust-lang/crates.io-index".git-version."0.3.4" { inherit profileName; };
+ hex = rustPackages."registry+https://github.com/rust-lang/crates.io-index".hex."0.4.3" { inherit profileName; };
+ log = rustPackages."registry+https://github.com/rust-lang/crates.io-index".log."0.4.14" { inherit profileName; };
+ pretty_env_logger = rustPackages."registry+https://github.com/rust-lang/crates.io-index".pretty_env_logger."0.4.0" { inherit profileName; };
+ rand = rustPackages."registry+https://github.com/rust-lang/crates.io-index".rand."0.8.3" { inherit profileName; };
+ rmp_serde = rustPackages."registry+https://github.com/rust-lang/crates.io-index".rmp-serde."0.15.4" { inherit profileName; };
+ serde = rustPackages."registry+https://github.com/rust-lang/crates.io-index".serde."1.0.124" { inherit profileName; };
+ sled = rustPackages."registry+https://github.com/rust-lang/crates.io-index".sled."0.34.6" { inherit profileName; };
+ structopt = rustPackages."registry+https://github.com/rust-lang/crates.io-index".structopt."0.3.21" { inherit profileName; };
+ tokio = rustPackages."registry+https://github.com/rust-lang/crates.io-index".tokio."1.3.0" { inherit profileName; };
+ toml = rustPackages."registry+https://github.com/rust-lang/crates.io-index".toml."0.5.8" { inherit profileName; };
+ };
+ });
+
+ "unknown".garage_api."0.3.0" = overridableMkRustCrate (profileName: rec {
+ name = "garage_api";
+ version = "0.3.0";
+ registry = "unknown";
+ src = fetchCrateLocal (workspaceSrc + "/src/api");
+ dependencies = {
+ base64 = rustPackages."registry+https://github.com/rust-lang/crates.io-index".base64."0.13.0" { inherit profileName; };
+ bytes = rustPackages."registry+https://github.com/rust-lang/crates.io-index".bytes."1.0.1" { inherit profileName; };
+ chrono = rustPackages."registry+https://github.com/rust-lang/crates.io-index".chrono."0.4.19" { inherit profileName; };
+ crypto_mac = rustPackages."registry+https://github.com/rust-lang/crates.io-index".crypto-mac."0.10.0" { inherit profileName; };
+ err_derive = buildRustPackages."registry+https://github.com/rust-lang/crates.io-index".err-derive."0.3.0" { profileName = "__noProfile"; };
+ futures = rustPackages."registry+https://github.com/rust-lang/crates.io-index".futures."0.3.13" { inherit profileName; };
+ futures_util = rustPackages."registry+https://github.com/rust-lang/crates.io-index".futures-util."0.3.13" { inherit profileName; };
+ garage_model = rustPackages."unknown".garage_model."0.3.0" { inherit profileName; };
+ garage_table = rustPackages."unknown".garage_table."0.3.0" { inherit profileName; };
+ garage_util = rustPackages."unknown".garage_util."0.3.0" { inherit profileName; };
+ hex = rustPackages."registry+https://github.com/rust-lang/crates.io-index".hex."0.4.3" { inherit profileName; };
+ hmac = rustPackages."registry+https://github.com/rust-lang/crates.io-index".hmac."0.10.1" { inherit profileName; };
+ http = rustPackages."registry+https://github.com/rust-lang/crates.io-index".http."0.2.3" { inherit profileName; };
+ http_range = rustPackages."registry+https://github.com/rust-lang/crates.io-index".http-range."0.1.4" { inherit profileName; };
+ httpdate = rustPackages."registry+https://github.com/rust-lang/crates.io-index".httpdate."0.3.2" { inherit profileName; };
+ hyper = rustPackages."registry+https://github.com/rust-lang/crates.io-index".hyper."0.14.4" { inherit profileName; };
+ log = rustPackages."registry+https://github.com/rust-lang/crates.io-index".log."0.4.14" { inherit profileName; };
+ md5 = rustPackages."registry+https://github.com/rust-lang/crates.io-index".md-5."0.9.1" { inherit profileName; };
+ percent_encoding = rustPackages."registry+https://github.com/rust-lang/crates.io-index".percent-encoding."2.1.0" { inherit profileName; };
+ quick_xml = rustPackages."registry+https://github.com/rust-lang/crates.io-index".quick-xml."0.21.0" { inherit profileName; };
+ roxmltree = rustPackages."registry+https://github.com/rust-lang/crates.io-index".roxmltree."0.14.0" { inherit profileName; };
+ serde = rustPackages."registry+https://github.com/rust-lang/crates.io-index".serde."1.0.124" { inherit profileName; };
+ sha2 = rustPackages."registry+https://github.com/rust-lang/crates.io-index".sha2."0.9.3" { inherit profileName; };
+ tokio = rustPackages."registry+https://github.com/rust-lang/crates.io-index".tokio."1.3.0" { inherit profileName; };
+ url = rustPackages."registry+https://github.com/rust-lang/crates.io-index".url."2.2.1" { inherit profileName; };
+ };
+ });
+
+ "unknown".garage_model."0.3.0" = overridableMkRustCrate (profileName: rec {
+ name = "garage_model";
+ version = "0.3.0";
+ registry = "unknown";
+ src = fetchCrateLocal (workspaceSrc + "/src/model");
+ dependencies = {
+ arc_swap = rustPackages."registry+https://github.com/rust-lang/crates.io-index".arc-swap."1.2.0" { inherit profileName; };
+ futures = rustPackages."registry+https://github.com/rust-lang/crates.io-index".futures."0.3.13" { inherit profileName; };
+ futures_util = rustPackages."registry+https://github.com/rust-lang/crates.io-index".futures-util."0.3.13" { inherit profileName; };
+ garage_rpc = rustPackages."unknown".garage_rpc."0.3.0" { inherit profileName; };
+ garage_table = rustPackages."unknown".garage_table."0.3.0" { inherit profileName; };
+ garage_util = rustPackages."unknown".garage_util."0.3.0" { inherit profileName; };
+ hex = rustPackages."registry+https://github.com/rust-lang/crates.io-index".hex."0.4.3" { inherit profileName; };
+ log = rustPackages."registry+https://github.com/rust-lang/crates.io-index".log."0.4.14" { inherit profileName; };
+ rand = rustPackages."registry+https://github.com/rust-lang/crates.io-index".rand."0.8.3" { inherit profileName; };
+ rmp_serde = rustPackages."registry+https://github.com/rust-lang/crates.io-index".rmp-serde."0.15.4" { inherit profileName; };
+ serde = rustPackages."registry+https://github.com/rust-lang/crates.io-index".serde."1.0.124" { inherit profileName; };
+ serde_bytes = rustPackages."registry+https://github.com/rust-lang/crates.io-index".serde_bytes."0.11.5" { inherit profileName; };
+ sled = rustPackages."registry+https://github.com/rust-lang/crates.io-index".sled."0.34.6" { inherit profileName; };
+ tokio = rustPackages."registry+https://github.com/rust-lang/crates.io-index".tokio."1.3.0" { inherit profileName; };
+ };
+ });
+
+ "registry+https://github.com/rust-lang/crates.io-index".garage_rpc."0.2.1" = overridableMkRustCrate (profileName: rec {
+ name = "garage_rpc";
+ version = "0.2.1";
+ registry = "registry+https://github.com/rust-lang/crates.io-index";
+ src = fetchCratesIo { inherit name version; sha256 = "48c182633cebe4abed9594afb14770fc45402513765d38a4b19659ae0ccb2a2f"; };
+ dependencies = {
+ arc_swap = rustPackages."registry+https://github.com/rust-lang/crates.io-index".arc-swap."1.2.0" { inherit profileName; };
+ bytes = rustPackages."registry+https://github.com/rust-lang/crates.io-index".bytes."1.0.1" { inherit profileName; };
+ futures = rustPackages."registry+https://github.com/rust-lang/crates.io-index".futures."0.3.13" { inherit profileName; };
+ futures_util = rustPackages."registry+https://github.com/rust-lang/crates.io-index".futures-util."0.3.13" { inherit profileName; };
+ garage_util = rustPackages."registry+https://github.com/rust-lang/crates.io-index".garage_util."0.2.1" { inherit profileName; };
+ gethostname = rustPackages."registry+https://github.com/rust-lang/crates.io-index".gethostname."0.2.1" { inherit profileName; };
+ hex = rustPackages."registry+https://github.com/rust-lang/crates.io-index".hex."0.4.3" { inherit profileName; };
+ http = rustPackages."registry+https://github.com/rust-lang/crates.io-index".http."0.2.3" { inherit profileName; };
+ hyper = rustPackages."registry+https://github.com/rust-lang/crates.io-index".hyper."0.14.4" { inherit profileName; };
+ hyper_rustls = rustPackages."registry+https://github.com/rust-lang/crates.io-index".hyper-rustls."0.22.1" { inherit profileName; };
+ log = rustPackages."registry+https://github.com/rust-lang/crates.io-index".log."0.4.14" { inherit profileName; };
+ rmp_serde = rustPackages."registry+https://github.com/rust-lang/crates.io-index".rmp-serde."0.15.4" { inherit profileName; };
+ rustls = rustPackages."registry+https://github.com/rust-lang/crates.io-index".rustls."0.19.0" { inherit profileName; };
+ serde = rustPackages."registry+https://github.com/rust-lang/crates.io-index".serde."1.0.124" { inherit profileName; };
+ serde_json = rustPackages."registry+https://github.com/rust-lang/crates.io-index".serde_json."1.0.64" { inherit profileName; };
+ tokio = rustPackages."registry+https://github.com/rust-lang/crates.io-index".tokio."1.3.0" { inherit profileName; };
+ tokio_rustls = rustPackages."registry+https://github.com/rust-lang/crates.io-index".tokio-rustls."0.22.0" { inherit profileName; };
+ tokio_stream = rustPackages."registry+https://github.com/rust-lang/crates.io-index".tokio-stream."0.1.4" { inherit profileName; };
+ webpki = rustPackages."registry+https://github.com/rust-lang/crates.io-index".webpki."0.21.4" { inherit profileName; };
+ };
+ });
+
+ "unknown".garage_rpc."0.3.0" = overridableMkRustCrate (profileName: rec {
+ name = "garage_rpc";
+ version = "0.3.0";
+ registry = "unknown";
+ src = fetchCrateLocal (workspaceSrc + "/src/rpc");
+ dependencies = {
+ arc_swap = rustPackages."registry+https://github.com/rust-lang/crates.io-index".arc-swap."1.2.0" { inherit profileName; };
+ bytes = rustPackages."registry+https://github.com/rust-lang/crates.io-index".bytes."1.0.1" { inherit profileName; };
+ futures = rustPackages."registry+https://github.com/rust-lang/crates.io-index".futures."0.3.13" { inherit profileName; };
+ futures_util = rustPackages."registry+https://github.com/rust-lang/crates.io-index".futures-util."0.3.13" { inherit profileName; };
+ garage_rpc_021 = rustPackages."registry+https://github.com/rust-lang/crates.io-index".garage_rpc."0.2.1" { inherit profileName; };
+ garage_util = rustPackages."unknown".garage_util."0.3.0" { inherit profileName; };
+ gethostname = rustPackages."registry+https://github.com/rust-lang/crates.io-index".gethostname."0.2.1" { inherit profileName; };
+ hex = rustPackages."registry+https://github.com/rust-lang/crates.io-index".hex."0.4.3" { inherit profileName; };
+ http = rustPackages."registry+https://github.com/rust-lang/crates.io-index".http."0.2.3" { inherit profileName; };
+ hyper = rustPackages."registry+https://github.com/rust-lang/crates.io-index".hyper."0.14.4" { inherit profileName; };
+ hyper_rustls = rustPackages."registry+https://github.com/rust-lang/crates.io-index".hyper-rustls."0.22.1" { inherit profileName; };
+ log = rustPackages."registry+https://github.com/rust-lang/crates.io-index".log."0.4.14" { inherit profileName; };
+ rmp_serde = rustPackages."registry+https://github.com/rust-lang/crates.io-index".rmp-serde."0.15.4" { inherit profileName; };
+ rustls = rustPackages."registry+https://github.com/rust-lang/crates.io-index".rustls."0.19.0" { inherit profileName; };
+ serde = rustPackages."registry+https://github.com/rust-lang/crates.io-index".serde."1.0.124" { inherit profileName; };
+ serde_json = rustPackages."registry+https://github.com/rust-lang/crates.io-index".serde_json."1.0.64" { inherit profileName; };
+ tokio = rustPackages."registry+https://github.com/rust-lang/crates.io-index".tokio."1.3.0" { inherit profileName; };
+ tokio_rustls = rustPackages."registry+https://github.com/rust-lang/crates.io-index".tokio-rustls."0.22.0" { inherit profileName; };
+ tokio_stream = rustPackages."registry+https://github.com/rust-lang/crates.io-index".tokio-stream."0.1.4" { inherit profileName; };
+ webpki = rustPackages."registry+https://github.com/rust-lang/crates.io-index".webpki."0.21.4" { inherit profileName; };
+ };
+ });
+
+ "unknown".garage_table."0.3.0" = overridableMkRustCrate (profileName: rec {
+ name = "garage_table";
+ version = "0.3.0";
+ registry = "unknown";
+ src = fetchCrateLocal (workspaceSrc + "/src/table");
+ dependencies = {
+ bytes = rustPackages."registry+https://github.com/rust-lang/crates.io-index".bytes."1.0.1" { inherit profileName; };
+ futures = rustPackages."registry+https://github.com/rust-lang/crates.io-index".futures."0.3.13" { inherit profileName; };
+ futures_util = rustPackages."registry+https://github.com/rust-lang/crates.io-index".futures-util."0.3.13" { inherit profileName; };
+ garage_rpc = rustPackages."unknown".garage_rpc."0.3.0" { inherit profileName; };
+ garage_util = rustPackages."unknown".garage_util."0.3.0" { inherit profileName; };
+ hexdump = rustPackages."registry+https://github.com/rust-lang/crates.io-index".hexdump."0.1.1" { inherit profileName; };
+ log = rustPackages."registry+https://github.com/rust-lang/crates.io-index".log."0.4.14" { inherit profileName; };
+ rand = rustPackages."registry+https://github.com/rust-lang/crates.io-index".rand."0.8.3" { inherit profileName; };
+ rmp_serde = rustPackages."registry+https://github.com/rust-lang/crates.io-index".rmp-serde."0.15.4" { inherit profileName; };
+ serde = rustPackages."registry+https://github.com/rust-lang/crates.io-index".serde."1.0.124" { inherit profileName; };
+ serde_bytes = rustPackages."registry+https://github.com/rust-lang/crates.io-index".serde_bytes."0.11.5" { inherit profileName; };
+ sled = rustPackages."registry+https://github.com/rust-lang/crates.io-index".sled."0.34.6" { inherit profileName; };
+ tokio = rustPackages."registry+https://github.com/rust-lang/crates.io-index".tokio."1.3.0" { inherit profileName; };
+ };
+ });
+
+ "registry+https://github.com/rust-lang/crates.io-index".garage_util."0.2.1" = overridableMkRustCrate (profileName: rec {
+ name = "garage_util";
+ version = "0.2.1";
+ registry = "registry+https://github.com/rust-lang/crates.io-index";
+ src = fetchCratesIo { inherit name version; sha256 = "aef76d3779e406a16fdcaffe8d86b8ae2943a549d2b33f2c20930838764464c0"; };
+ dependencies = {
+ blake2 = rustPackages."registry+https://github.com/rust-lang/crates.io-index".blake2."0.9.1" { inherit profileName; };
+ chrono = rustPackages."registry+https://github.com/rust-lang/crates.io-index".chrono."0.4.19" { inherit profileName; };
+ err_derive = buildRustPackages."registry+https://github.com/rust-lang/crates.io-index".err-derive."0.3.0" { profileName = "__noProfile"; };
+ futures = rustPackages."registry+https://github.com/rust-lang/crates.io-index".futures."0.3.13" { inherit profileName; };
+ hex = rustPackages."registry+https://github.com/rust-lang/crates.io-index".hex."0.4.3" { inherit profileName; };
+ http = rustPackages."registry+https://github.com/rust-lang/crates.io-index".http."0.2.3" { inherit profileName; };
+ hyper = rustPackages."registry+https://github.com/rust-lang/crates.io-index".hyper."0.14.4" { inherit profileName; };
+ log = rustPackages."registry+https://github.com/rust-lang/crates.io-index".log."0.4.14" { inherit profileName; };
+ rand = rustPackages."registry+https://github.com/rust-lang/crates.io-index".rand."0.8.3" { inherit profileName; };
+ rmp_serde = rustPackages."registry+https://github.com/rust-lang/crates.io-index".rmp-serde."0.15.4" { inherit profileName; };
+ rustls = rustPackages."registry+https://github.com/rust-lang/crates.io-index".rustls."0.19.0" { inherit profileName; };
+ serde = rustPackages."registry+https://github.com/rust-lang/crates.io-index".serde."1.0.124" { inherit profileName; };
+ serde_json = rustPackages."registry+https://github.com/rust-lang/crates.io-index".serde_json."1.0.64" { inherit profileName; };
+ sha2 = rustPackages."registry+https://github.com/rust-lang/crates.io-index".sha2."0.9.3" { inherit profileName; };
+ sled = rustPackages."registry+https://github.com/rust-lang/crates.io-index".sled."0.34.6" { inherit profileName; };
+ tokio = rustPackages."registry+https://github.com/rust-lang/crates.io-index".tokio."1.3.0" { inherit profileName; };
+ toml = rustPackages."registry+https://github.com/rust-lang/crates.io-index".toml."0.5.8" { inherit profileName; };
+ webpki = rustPackages."registry+https://github.com/rust-lang/crates.io-index".webpki."0.21.4" { inherit profileName; };
+ xxhash_rust = rustPackages."registry+https://github.com/rust-lang/crates.io-index".xxhash-rust."0.8.2" { inherit profileName; };
+ };
+ });
+
+ "unknown".garage_util."0.3.0" = overridableMkRustCrate (profileName: rec {
+ name = "garage_util";
+ version = "0.3.0";
+ registry = "unknown";
+ src = fetchCrateLocal (workspaceSrc + "/src/util");
+ dependencies = {
+ blake2 = rustPackages."registry+https://github.com/rust-lang/crates.io-index".blake2."0.9.1" { inherit profileName; };
+ chrono = rustPackages."registry+https://github.com/rust-lang/crates.io-index".chrono."0.4.19" { inherit profileName; };
+ err_derive = buildRustPackages."registry+https://github.com/rust-lang/crates.io-index".err-derive."0.3.0" { profileName = "__noProfile"; };
+ futures = rustPackages."registry+https://github.com/rust-lang/crates.io-index".futures."0.3.13" { inherit profileName; };
+ hex = rustPackages."registry+https://github.com/rust-lang/crates.io-index".hex."0.4.3" { inherit profileName; };
+ http = rustPackages."registry+https://github.com/rust-lang/crates.io-index".http."0.2.3" { inherit profileName; };
+ hyper = rustPackages."registry+https://github.com/rust-lang/crates.io-index".hyper."0.14.4" { inherit profileName; };
+ log = rustPackages."registry+https://github.com/rust-lang/crates.io-index".log."0.4.14" { inherit profileName; };
+ rand = rustPackages."registry+https://github.com/rust-lang/crates.io-index".rand."0.8.3" { inherit profileName; };
+ rmp_serde = rustPackages."registry+https://github.com/rust-lang/crates.io-index".rmp-serde."0.15.4" { inherit profileName; };
+ rustls = rustPackages."registry+https://github.com/rust-lang/crates.io-index".rustls."0.19.0" { inherit profileName; };
+ serde = rustPackages."registry+https://github.com/rust-lang/crates.io-index".serde."1.0.124" { inherit profileName; };
+ serde_json = rustPackages."registry+https://github.com/rust-lang/crates.io-index".serde_json."1.0.64" { inherit profileName; };
+ sha2 = rustPackages."registry+https://github.com/rust-lang/crates.io-index".sha2."0.9.3" { inherit profileName; };
+ sled = rustPackages."registry+https://github.com/rust-lang/crates.io-index".sled."0.34.6" { inherit profileName; };
+ tokio = rustPackages."registry+https://github.com/rust-lang/crates.io-index".tokio."1.3.0" { inherit profileName; };
+ toml = rustPackages."registry+https://github.com/rust-lang/crates.io-index".toml."0.5.8" { inherit profileName; };
+ webpki = rustPackages."registry+https://github.com/rust-lang/crates.io-index".webpki."0.21.4" { inherit profileName; };
+ xxhash_rust = rustPackages."registry+https://github.com/rust-lang/crates.io-index".xxhash-rust."0.8.2" { inherit profileName; };
+ };
+ });
+
+ "unknown".garage_web."0.3.0" = overridableMkRustCrate (profileName: rec {
+ name = "garage_web";
+ version = "0.3.0";
+ registry = "unknown";
+ src = fetchCrateLocal (workspaceSrc + "/src/web");
+ dependencies = {
+ err_derive = buildRustPackages."registry+https://github.com/rust-lang/crates.io-index".err-derive."0.3.0" { profileName = "__noProfile"; };
+ futures = rustPackages."registry+https://github.com/rust-lang/crates.io-index".futures."0.3.13" { inherit profileName; };
+ garage_api = rustPackages."unknown".garage_api."0.3.0" { inherit profileName; };
+ garage_model = rustPackages."unknown".garage_model."0.3.0" { inherit profileName; };
+ garage_table = rustPackages."unknown".garage_table."0.3.0" { inherit profileName; };
+ garage_util = rustPackages."unknown".garage_util."0.3.0" { inherit profileName; };
+ http = rustPackages."registry+https://github.com/rust-lang/crates.io-index".http."0.2.3" { inherit profileName; };
+ hyper = rustPackages."registry+https://github.com/rust-lang/crates.io-index".hyper."0.14.4" { inherit profileName; };
+ idna = rustPackages."registry+https://github.com/rust-lang/crates.io-index".idna."0.2.2" { inherit profileName; };
+ log = rustPackages."registry+https://github.com/rust-lang/crates.io-index".log."0.4.14" { inherit profileName; };
+ percent_encoding = rustPackages."registry+https://github.com/rust-lang/crates.io-index".percent-encoding."2.1.0" { inherit profileName; };
+ };
+ });
+
+ "registry+https://github.com/rust-lang/crates.io-index".generic-array."0.14.4" = overridableMkRustCrate (profileName: rec {
+ name = "generic-array";
+ version = "0.14.4";
+ registry = "registry+https://github.com/rust-lang/crates.io-index";
+ src = fetchCratesIo { inherit name version; sha256 = "501466ecc8a30d1d3b7fc9229b122b2ce8ed6e9d9223f1138d4babb253e51817"; };
+ dependencies = {
+ typenum = rustPackages."registry+https://github.com/rust-lang/crates.io-index".typenum."1.13.0" { inherit profileName; };
+ };
+ buildDependencies = {
+ version_check = buildRustPackages."registry+https://github.com/rust-lang/crates.io-index".version_check."0.9.3" { profileName = "__noProfile"; };
+ };
+ });
+
+ "registry+https://github.com/rust-lang/crates.io-index".gethostname."0.2.1" = overridableMkRustCrate (profileName: rec {
+ name = "gethostname";
+ version = "0.2.1";
+ registry = "registry+https://github.com/rust-lang/crates.io-index";
+ src = fetchCratesIo { inherit name version; sha256 = "e692e296bfac1d2533ef168d0b60ff5897b8b70a4009276834014dd8924cc028"; };
+ dependencies = {
+ ${ if !hostPlatform.isWindows then "libc" else null } = rustPackages."registry+https://github.com/rust-lang/crates.io-index".libc."0.2.90" { inherit profileName; };
+ ${ if hostPlatform.isWindows then "winapi" else null } = rustPackages."registry+https://github.com/rust-lang/crates.io-index".winapi."0.3.9" { inherit profileName; };
+ };
+ });
+
+ "registry+https://github.com/rust-lang/crates.io-index".getrandom."0.2.2" = overridableMkRustCrate (profileName: rec {
+ name = "getrandom";
+ version = "0.2.2";
+ registry = "registry+https://github.com/rust-lang/crates.io-index";
+ src = fetchCratesIo { inherit name version; sha256 = "c9495705279e7140bf035dde1f6e750c162df8b625267cd52cc44e0b156732c8"; };
+ features = builtins.concatLists [
+ [ "std" ]
+ ];
+ dependencies = {
+ cfg_if = rustPackages."registry+https://github.com/rust-lang/crates.io-index".cfg-if."1.0.0" { inherit profileName; };
+ ${ if hostPlatform.isUnix then "libc" else null } = rustPackages."registry+https://github.com/rust-lang/crates.io-index".libc."0.2.90" { inherit profileName; };
+ ${ if hostPlatform.parsed.kernel.name == "wasi" then "wasi" else null } = rustPackages."registry+https://github.com/rust-lang/crates.io-index".wasi."0.10.2+wasi-snapshot-preview1" { inherit profileName; };
+ };
+ });
+
+ "registry+https://github.com/rust-lang/crates.io-index".git-version."0.3.4" = overridableMkRustCrate (profileName: rec {
+ name = "git-version";
+ version = "0.3.4";
+ registry = "registry+https://github.com/rust-lang/crates.io-index";
+ src = fetchCratesIo { inherit name version; sha256 = "94918e83f1e01dedc2e361d00ce9487b14c58c7f40bab148026fa39d42cb41e2"; };
+ dependencies = {
+ git_version_macro = buildRustPackages."registry+https://github.com/rust-lang/crates.io-index".git-version-macro."0.3.4" { profileName = "__noProfile"; };
+ proc_macro_hack = buildRustPackages."registry+https://github.com/rust-lang/crates.io-index".proc-macro-hack."0.5.19" { profileName = "__noProfile"; };
+ };
+ });
+
+ "registry+https://github.com/rust-lang/crates.io-index".git-version-macro."0.3.4" = overridableMkRustCrate (profileName: rec {
+ name = "git-version-macro";
+ version = "0.3.4";
+ registry = "registry+https://github.com/rust-lang/crates.io-index";
+ src = fetchCratesIo { inherit name version; sha256 = "34a97a52fdee1870a34fa6e4b77570cba531b27d1838874fef4429a791a3d657"; };
+ dependencies = {
+ proc_macro_hack = buildRustPackages."registry+https://github.com/rust-lang/crates.io-index".proc-macro-hack."0.5.19" { profileName = "__noProfile"; };
+ proc_macro2 = rustPackages."registry+https://github.com/rust-lang/crates.io-index".proc-macro2."1.0.24" { inherit profileName; };
+ quote = rustPackages."registry+https://github.com/rust-lang/crates.io-index".quote."1.0.9" { inherit profileName; };
+ syn = rustPackages."registry+https://github.com/rust-lang/crates.io-index".syn."1.0.64" { inherit profileName; };
+ };
+ });
+
+ "registry+https://github.com/rust-lang/crates.io-index".h2."0.3.1" = overridableMkRustCrate (profileName: rec {
+ name = "h2";
+ version = "0.3.1";
+ registry = "registry+https://github.com/rust-lang/crates.io-index";
+ src = fetchCratesIo { inherit name version; sha256 = "d832b01df74254fe364568d6ddc294443f61cbec82816b60904303af87efae78"; };
+ dependencies = {
+ bytes = rustPackages."registry+https://github.com/rust-lang/crates.io-index".bytes."1.0.1" { inherit profileName; };
+ fnv = rustPackages."registry+https://github.com/rust-lang/crates.io-index".fnv."1.0.7" { inherit profileName; };
+ futures_core = rustPackages."registry+https://github.com/rust-lang/crates.io-index".futures-core."0.3.13" { inherit profileName; };
+ futures_sink = rustPackages."registry+https://github.com/rust-lang/crates.io-index".futures-sink."0.3.13" { inherit profileName; };
+ futures_util = rustPackages."registry+https://github.com/rust-lang/crates.io-index".futures-util."0.3.13" { inherit profileName; };
+ http = rustPackages."registry+https://github.com/rust-lang/crates.io-index".http."0.2.3" { inherit profileName; };
+ indexmap = rustPackages."registry+https://github.com/rust-lang/crates.io-index".indexmap."1.6.2" { inherit profileName; };
+ slab = rustPackages."registry+https://github.com/rust-lang/crates.io-index".slab."0.4.2" { inherit profileName; };
+ tokio = rustPackages."registry+https://github.com/rust-lang/crates.io-index".tokio."1.3.0" { inherit profileName; };
+ tokio_util = rustPackages."registry+https://github.com/rust-lang/crates.io-index".tokio-util."0.6.4" { inherit profileName; };
+ tracing = rustPackages."registry+https://github.com/rust-lang/crates.io-index".tracing."0.1.25" { inherit profileName; };
+ };
+ });
+
+ "registry+https://github.com/rust-lang/crates.io-index".hashbrown."0.9.1" = overridableMkRustCrate (profileName: rec {
+ name = "hashbrown";
+ version = "0.9.1";
+ registry = "registry+https://github.com/rust-lang/crates.io-index";
+ src = fetchCratesIo { inherit name version; sha256 = "d7afe4a420e3fe79967a00898cc1f4db7c8a49a9333a29f8a4bd76a253d5cd04"; };
+ features = builtins.concatLists [
+ [ "raw" ]
+ ];
+ });
+
+ "registry+https://github.com/rust-lang/crates.io-index".heck."0.3.2" = overridableMkRustCrate (profileName: rec {
+ name = "heck";
+ version = "0.3.2";
+ registry = "registry+https://github.com/rust-lang/crates.io-index";
+ src = fetchCratesIo { inherit name version; sha256 = "87cbf45460356b7deeb5e3415b5563308c0a9b057c85e12b06ad551f98d0a6ac"; };
+ dependencies = {
+ unicode_segmentation = rustPackages."registry+https://github.com/rust-lang/crates.io-index".unicode-segmentation."1.7.1" { inherit profileName; };
+ };
+ });
+
+ "registry+https://github.com/rust-lang/crates.io-index".hermit-abi."0.1.18" = overridableMkRustCrate (profileName: rec {
+ name = "hermit-abi";
+ version = "0.1.18";
+ registry = "registry+https://github.com/rust-lang/crates.io-index";
+ src = fetchCratesIo { inherit name version; sha256 = "322f4de77956e22ed0e5032c359a0f1273f1f7f0d79bfa3b8ffbc730d7fbcc5c"; };
+ features = builtins.concatLists [
+ [ "default" ]
+ ];
+ dependencies = {
+ libc = rustPackages."registry+https://github.com/rust-lang/crates.io-index".libc."0.2.90" { inherit profileName; };
+ };
+ });
+
+ "registry+https://github.com/rust-lang/crates.io-index".hex."0.4.3" = overridableMkRustCrate (profileName: rec {
+ name = "hex";
+ version = "0.4.3";
+ registry = "registry+https://github.com/rust-lang/crates.io-index";
+ src = fetchCratesIo { inherit name version; sha256 = "7f24254aa9a54b5c858eaee2f5bccdb46aaf0e486a595ed5fd8f86ba55232a70"; };
+ features = builtins.concatLists [
+ [ "alloc" ]
+ [ "default" ]
+ [ "std" ]
+ ];
+ });
+
+ "registry+https://github.com/rust-lang/crates.io-index".hexdump."0.1.1" = overridableMkRustCrate (profileName: rec {
+ name = "hexdump";
+ version = "0.1.1";
+ registry = "registry+https://github.com/rust-lang/crates.io-index";
+ src = fetchCratesIo { inherit name version; sha256 = "e40283dadb02f3af778878be1d717b17b4e4ab92e1d935ab03a730b0542905f2"; };
+ dependencies = {
+ arrayvec = rustPackages."registry+https://github.com/rust-lang/crates.io-index".arrayvec."0.5.2" { inherit profileName; };
+ itertools = rustPackages."registry+https://github.com/rust-lang/crates.io-index".itertools."0.4.19" { inherit profileName; };
+ };
+ });
+
+ "registry+https://github.com/rust-lang/crates.io-index".hmac."0.10.1" = overridableMkRustCrate (profileName: rec {
+ name = "hmac";
+ version = "0.10.1";
+ registry = "registry+https://github.com/rust-lang/crates.io-index";
+ src = fetchCratesIo { inherit name version; sha256 = "c1441c6b1e930e2817404b5046f1f989899143a12bf92de603b69f4e0aee1e15"; };
+ dependencies = {
+ crypto_mac = rustPackages."registry+https://github.com/rust-lang/crates.io-index".crypto-mac."0.10.0" { inherit profileName; };
+ digest = rustPackages."registry+https://github.com/rust-lang/crates.io-index".digest."0.9.0" { inherit profileName; };
+ };
+ });
+
+ "registry+https://github.com/rust-lang/crates.io-index".http."0.2.3" = overridableMkRustCrate (profileName: rec {
+ name = "http";
+ version = "0.2.3";
+ registry = "registry+https://github.com/rust-lang/crates.io-index";
+ src = fetchCratesIo { inherit name version; sha256 = "7245cd7449cc792608c3c8a9eaf69bd4eabbabf802713748fd739c98b82f0747"; };
+ dependencies = {
+ bytes = rustPackages."registry+https://github.com/rust-lang/crates.io-index".bytes."1.0.1" { inherit profileName; };
+ fnv = rustPackages."registry+https://github.com/rust-lang/crates.io-index".fnv."1.0.7" { inherit profileName; };
+ itoa = rustPackages."registry+https://github.com/rust-lang/crates.io-index".itoa."0.4.7" { inherit profileName; };
+ };
+ });
+
+ "registry+https://github.com/rust-lang/crates.io-index".http-body."0.4.0" = overridableMkRustCrate (profileName: rec {
+ name = "http-body";
+ version = "0.4.0";
+ registry = "registry+https://github.com/rust-lang/crates.io-index";
+ src = fetchCratesIo { inherit name version; sha256 = "2861bd27ee074e5ee891e8b539837a9430012e249d7f0ca2d795650f579c1994"; };
+ dependencies = {
+ bytes = rustPackages."registry+https://github.com/rust-lang/crates.io-index".bytes."1.0.1" { inherit profileName; };
+ http = rustPackages."registry+https://github.com/rust-lang/crates.io-index".http."0.2.3" { inherit profileName; };
+ };
+ });
+
+ "registry+https://github.com/rust-lang/crates.io-index".http-range."0.1.4" = overridableMkRustCrate (profileName: rec {
+ name = "http-range";
+ version = "0.1.4";
+ registry = "registry+https://github.com/rust-lang/crates.io-index";
+ src = fetchCratesIo { inherit name version; sha256 = "eee9694f83d9b7c09682fdb32213682939507884e5bcf227be9aff5d644b90dc"; };
+ });
+
+ "registry+https://github.com/rust-lang/crates.io-index".httparse."1.3.5" = overridableMkRustCrate (profileName: rec {
+ name = "httparse";
+ version = "1.3.5";
+ registry = "registry+https://github.com/rust-lang/crates.io-index";
+ src = fetchCratesIo { inherit name version; sha256 = "615caabe2c3160b313d52ccc905335f4ed5f10881dd63dc5699d47e90be85691"; };
+ features = builtins.concatLists [
+ [ "default" ]
+ [ "std" ]
+ ];
+ });
+
+ "registry+https://github.com/rust-lang/crates.io-index".httpdate."0.3.2" = overridableMkRustCrate (profileName: rec {
+ name = "httpdate";
+ version = "0.3.2";
+ registry = "registry+https://github.com/rust-lang/crates.io-index";
+ src = fetchCratesIo { inherit name version; sha256 = "494b4d60369511e7dea41cf646832512a94e542f68bb9c49e54518e0f468eb47"; };
+ });
+
+ "registry+https://github.com/rust-lang/crates.io-index".humantime."1.3.0" = overridableMkRustCrate (profileName: rec {
+ name = "humantime";
+ version = "1.3.0";
+ registry = "registry+https://github.com/rust-lang/crates.io-index";
+ src = fetchCratesIo { inherit name version; sha256 = "df004cfca50ef23c36850aaaa59ad52cc70d0e90243c3c7737a4dd32dc7a3c4f"; };
+ dependencies = {
+ quick_error = rustPackages."registry+https://github.com/rust-lang/crates.io-index".quick-error."1.2.3" { inherit profileName; };
+ };
+ });
+
+ "registry+https://github.com/rust-lang/crates.io-index".hyper."0.14.4" = overridableMkRustCrate (profileName: rec {
+ name = "hyper";
+ version = "0.14.4";
+ registry = "registry+https://github.com/rust-lang/crates.io-index";
+ src = fetchCratesIo { inherit name version; sha256 = "e8e946c2b1349055e0b72ae281b238baf1a3ea7307c7e9f9d64673bdd9c26ac7"; };
+ features = builtins.concatLists [
+ (lib.optional (rootFeatures' ? "garage" || rootFeatures' ? "garage_api" || rootFeatures' ? "garage_model" || rootFeatures' ? "garage_rpc" || rootFeatures' ? "garage_table" || rootFeatures' ? "garage_web") "client")
+ [ "default" ]
+ (lib.optional (rootFeatures' ? "garage" || rootFeatures' ? "garage_api" || rootFeatures' ? "garage_model" || rootFeatures' ? "garage_rpc" || rootFeatures' ? "garage_table" || rootFeatures' ? "garage_web") "full")
+ (lib.optional (rootFeatures' ? "garage" || rootFeatures' ? "garage_api" || rootFeatures' ? "garage_model" || rootFeatures' ? "garage_rpc" || rootFeatures' ? "garage_table" || rootFeatures' ? "garage_web") "h2")
+ (lib.optional (rootFeatures' ? "garage" || rootFeatures' ? "garage_api" || rootFeatures' ? "garage_model" || rootFeatures' ? "garage_rpc" || rootFeatures' ? "garage_table" || rootFeatures' ? "garage_web") "http1")
+ (lib.optional (rootFeatures' ? "garage" || rootFeatures' ? "garage_api" || rootFeatures' ? "garage_model" || rootFeatures' ? "garage_rpc" || rootFeatures' ? "garage_table" || rootFeatures' ? "garage_web") "http2")
+ (lib.optional (rootFeatures' ? "garage" || rootFeatures' ? "garage_api" || rootFeatures' ? "garage_model" || rootFeatures' ? "garage_rpc" || rootFeatures' ? "garage_table" || rootFeatures' ? "garage_web") "runtime")
+ (lib.optional (rootFeatures' ? "garage" || rootFeatures' ? "garage_api" || rootFeatures' ? "garage_model" || rootFeatures' ? "garage_rpc" || rootFeatures' ? "garage_table" || rootFeatures' ? "garage_web") "server")
+ (lib.optional (rootFeatures' ? "garage" || rootFeatures' ? "garage_api" || rootFeatures' ? "garage_model" || rootFeatures' ? "garage_rpc" || rootFeatures' ? "garage_table" || rootFeatures' ? "garage_web") "socket2")
+ (lib.optional (rootFeatures' ? "garage" || rootFeatures' ? "garage_api" || rootFeatures' ? "garage_model" || rootFeatures' ? "garage_rpc" || rootFeatures' ? "garage_table" || rootFeatures' ? "garage_web") "stream")
+ (lib.optional (rootFeatures' ? "garage" || rootFeatures' ? "garage_api" || rootFeatures' ? "garage_model" || rootFeatures' ? "garage_rpc" || rootFeatures' ? "garage_table" || rootFeatures' ? "garage_web") "tcp")
+ ];
+ dependencies = {
+ bytes = rustPackages."registry+https://github.com/rust-lang/crates.io-index".bytes."1.0.1" { inherit profileName; };
+ futures_channel = rustPackages."registry+https://github.com/rust-lang/crates.io-index".futures-channel."0.3.13" { inherit profileName; };
+ futures_core = rustPackages."registry+https://github.com/rust-lang/crates.io-index".futures-core."0.3.13" { inherit profileName; };
+ futures_util = rustPackages."registry+https://github.com/rust-lang/crates.io-index".futures-util."0.3.13" { inherit profileName; };
+ ${ if rootFeatures' ? "garage" || rootFeatures' ? "garage_api" || rootFeatures' ? "garage_model" || rootFeatures' ? "garage_rpc" || rootFeatures' ? "garage_table" || rootFeatures' ? "garage_web" then "h2" else null } = rustPackages."registry+https://github.com/rust-lang/crates.io-index".h2."0.3.1" { inherit profileName; };
+ http = rustPackages."registry+https://github.com/rust-lang/crates.io-index".http."0.2.3" { inherit profileName; };
+ http_body = rustPackages."registry+https://github.com/rust-lang/crates.io-index".http-body."0.4.0" { inherit profileName; };
+ httparse = rustPackages."registry+https://github.com/rust-lang/crates.io-index".httparse."1.3.5" { inherit profileName; };
+ httpdate = rustPackages."registry+https://github.com/rust-lang/crates.io-index".httpdate."0.3.2" { inherit profileName; };
+ itoa = rustPackages."registry+https://github.com/rust-lang/crates.io-index".itoa."0.4.7" { inherit profileName; };
+ pin_project = rustPackages."registry+https://github.com/rust-lang/crates.io-index".pin-project."1.0.5" { inherit profileName; };
+ ${ if rootFeatures' ? "garage" || rootFeatures' ? "garage_api" || rootFeatures' ? "garage_model" || rootFeatures' ? "garage_rpc" || rootFeatures' ? "garage_table" || rootFeatures' ? "garage_web" then "socket2" else null } = rustPackages."registry+https://github.com/rust-lang/crates.io-index".socket2."0.3.19" { inherit profileName; };
+ tokio = rustPackages."registry+https://github.com/rust-lang/crates.io-index".tokio."1.3.0" { inherit profileName; };
+ tower_service = rustPackages."registry+https://github.com/rust-lang/crates.io-index".tower-service."0.3.1" { inherit profileName; };
+ tracing = rustPackages."registry+https://github.com/rust-lang/crates.io-index".tracing."0.1.25" { inherit profileName; };
+ want = rustPackages."registry+https://github.com/rust-lang/crates.io-index".want."0.3.0" { inherit profileName; };
+ };
+ });
+
+ "registry+https://github.com/rust-lang/crates.io-index".hyper-rustls."0.22.1" = overridableMkRustCrate (profileName: rec {
+ name = "hyper-rustls";
+ version = "0.22.1";
+ registry = "registry+https://github.com/rust-lang/crates.io-index";
+ src = fetchCratesIo { inherit name version; sha256 = "5f9f7a97316d44c0af9b0301e65010573a853a9fc97046d7331d7f6bc0fd5a64"; };
+ dependencies = {
+ futures_util = rustPackages."registry+https://github.com/rust-lang/crates.io-index".futures-util."0.3.13" { inherit profileName; };
+ hyper = rustPackages."registry+https://github.com/rust-lang/crates.io-index".hyper."0.14.4" { inherit profileName; };
+ log = rustPackages."registry+https://github.com/rust-lang/crates.io-index".log."0.4.14" { inherit profileName; };
+ rustls = rustPackages."registry+https://github.com/rust-lang/crates.io-index".rustls."0.19.0" { inherit profileName; };
+ tokio = rustPackages."registry+https://github.com/rust-lang/crates.io-index".tokio."1.3.0" { inherit profileName; };
+ tokio_rustls = rustPackages."registry+https://github.com/rust-lang/crates.io-index".tokio-rustls."0.22.0" { inherit profileName; };
+ webpki = rustPackages."registry+https://github.com/rust-lang/crates.io-index".webpki."0.21.4" { inherit profileName; };
+ };
+ });
+
+ "registry+https://github.com/rust-lang/crates.io-index".idna."0.2.2" = overridableMkRustCrate (profileName: rec {
+ name = "idna";
+ version = "0.2.2";
+ registry = "registry+https://github.com/rust-lang/crates.io-index";
+ src = fetchCratesIo { inherit name version; sha256 = "89829a5d69c23d348314a7ac337fe39173b61149a9864deabd260983aed48c21"; };
+ dependencies = {
+ matches = rustPackages."registry+https://github.com/rust-lang/crates.io-index".matches."0.1.8" { inherit profileName; };
+ unicode_bidi = rustPackages."registry+https://github.com/rust-lang/crates.io-index".unicode-bidi."0.3.4" { inherit profileName; };
+ unicode_normalization = rustPackages."registry+https://github.com/rust-lang/crates.io-index".unicode-normalization."0.1.17" { inherit profileName; };
+ };
+ });
+
+ "registry+https://github.com/rust-lang/crates.io-index".indexmap."1.6.2" = overridableMkRustCrate (profileName: rec {
+ name = "indexmap";
+ version = "1.6.2";
+ registry = "registry+https://github.com/rust-lang/crates.io-index";
+ src = fetchCratesIo { inherit name version; sha256 = "824845a0bf897a9042383849b02c1bc219c2383772efcd5c6f9766fa4b81aef3"; };
+ features = builtins.concatLists [
+ [ "std" ]
+ ];
+ dependencies = {
+ hashbrown = rustPackages."registry+https://github.com/rust-lang/crates.io-index".hashbrown."0.9.1" { inherit profileName; };
+ };
+ buildDependencies = {
+ autocfg = buildRustPackages."registry+https://github.com/rust-lang/crates.io-index".autocfg."1.0.1" { profileName = "__noProfile"; };
+ };
+ });
+
+ "registry+https://github.com/rust-lang/crates.io-index".instant."0.1.9" = overridableMkRustCrate (profileName: rec {
+ name = "instant";
+ version = "0.1.9";
+ registry = "registry+https://github.com/rust-lang/crates.io-index";
+ src = fetchCratesIo { inherit name version; sha256 = "61124eeebbd69b8190558df225adf7e4caafce0d743919e5d6b19652314ec5ec"; };
+ dependencies = {
+ cfg_if = rustPackages."registry+https://github.com/rust-lang/crates.io-index".cfg-if."1.0.0" { inherit profileName; };
+ };
+ });
+
+ "registry+https://github.com/rust-lang/crates.io-index".itertools."0.4.19" = overridableMkRustCrate (profileName: rec {
+ name = "itertools";
+ version = "0.4.19";
+ registry = "registry+https://github.com/rust-lang/crates.io-index";
+ src = fetchCratesIo { inherit name version; sha256 = "c4a9b56eb56058f43dc66e58f40a214b2ccbc9f3df51861b63d51dec7b65bc3f"; };
+ });
+
+ "registry+https://github.com/rust-lang/crates.io-index".itoa."0.4.7" = overridableMkRustCrate (profileName: rec {
+ name = "itoa";
+ version = "0.4.7";
+ registry = "registry+https://github.com/rust-lang/crates.io-index";
+ src = fetchCratesIo { inherit name version; sha256 = "dd25036021b0de88a0aff6b850051563c6516d0bf53f8638938edbb9de732736"; };
+ features = builtins.concatLists [
+ [ "default" ]
+ [ "std" ]
+ ];
+ });
+
+ "registry+https://github.com/rust-lang/crates.io-index".js-sys."0.3.49" = overridableMkRustCrate (profileName: rec {
+ name = "js-sys";
+ version = "0.3.49";
+ registry = "registry+https://github.com/rust-lang/crates.io-index";
+ src = fetchCratesIo { inherit name version; sha256 = "dc15e39392125075f60c95ba416f5381ff6c3a948ff02ab12464715adf56c821"; };
+ dependencies = {
+ wasm_bindgen = rustPackages."registry+https://github.com/rust-lang/crates.io-index".wasm-bindgen."0.2.72" { inherit profileName; };
+ };
+ });
+
+ "registry+https://github.com/rust-lang/crates.io-index".lazy_static."1.4.0" = overridableMkRustCrate (profileName: rec {
+ name = "lazy_static";
+ version = "1.4.0";
+ registry = "registry+https://github.com/rust-lang/crates.io-index";
+ src = fetchCratesIo { inherit name version; sha256 = "e2abad23fbc42b3700f2f279844dc832adb2b2eb069b2df918f455c4e18cc646"; };
+ });
+
+ "registry+https://github.com/rust-lang/crates.io-index".libc."0.2.90" = overridableMkRustCrate (profileName: rec {
+ name = "libc";
+ version = "0.2.90";
+ registry = "registry+https://github.com/rust-lang/crates.io-index";
+ src = fetchCratesIo { inherit name version; sha256 = "ba4aede83fc3617411dc6993bc8c70919750c1c257c6ca6a502aed6e0e2394ae"; };
+ features = builtins.concatLists [
+ [ "align" ]
+ [ "default" ]
+ [ "std" ]
+ ];
+ });
+
+ "registry+https://github.com/rust-lang/crates.io-index".lock_api."0.4.2" = overridableMkRustCrate (profileName: rec {
+ name = "lock_api";
+ version = "0.4.2";
+ registry = "registry+https://github.com/rust-lang/crates.io-index";
+ src = fetchCratesIo { inherit name version; sha256 = "dd96ffd135b2fd7b973ac026d28085defbe8983df057ced3eb4f2130b0831312"; };
+ dependencies = {
+ scopeguard = rustPackages."registry+https://github.com/rust-lang/crates.io-index".scopeguard."1.1.0" { inherit profileName; };
+ };
+ });
+
+ "registry+https://github.com/rust-lang/crates.io-index".log."0.4.14" = overridableMkRustCrate (profileName: rec {
+ name = "log";
+ version = "0.4.14";
+ registry = "registry+https://github.com/rust-lang/crates.io-index";
+ src = fetchCratesIo { inherit name version; sha256 = "51b9bbe6c47d51fc3e1a9b945965946b4c44142ab8792c50835a980d362c2710"; };
+ features = builtins.concatLists [
+ (lib.optional (rootFeatures' ? "garage") "std")
+ ];
+ dependencies = {
+ cfg_if = rustPackages."registry+https://github.com/rust-lang/crates.io-index".cfg-if."1.0.0" { inherit profileName; };
+ };
+ });
+
+ "registry+https://github.com/rust-lang/crates.io-index".matches."0.1.8" = overridableMkRustCrate (profileName: rec {
+ name = "matches";
+ version = "0.1.8";
+ registry = "registry+https://github.com/rust-lang/crates.io-index";
+ src = fetchCratesIo { inherit name version; sha256 = "7ffc5c5338469d4d3ea17d269fa8ea3512ad247247c30bd2df69e68309ed0a08"; };
+ });
+
+ "registry+https://github.com/rust-lang/crates.io-index".md-5."0.9.1" = overridableMkRustCrate (profileName: rec {
+ name = "md-5";
+ version = "0.9.1";
+ registry = "registry+https://github.com/rust-lang/crates.io-index";
+ src = fetchCratesIo { inherit name version; sha256 = "7b5a279bb9607f9f53c22d496eade00d138d1bdcccd07d74650387cf94942a15"; };
+ features = builtins.concatLists [
+ [ "default" ]
+ [ "std" ]
+ ];
+ dependencies = {
+ block_buffer = rustPackages."registry+https://github.com/rust-lang/crates.io-index".block-buffer."0.9.0" { inherit profileName; };
+ digest = rustPackages."registry+https://github.com/rust-lang/crates.io-index".digest."0.9.0" { inherit profileName; };
+ opaque_debug = rustPackages."registry+https://github.com/rust-lang/crates.io-index".opaque-debug."0.3.0" { inherit profileName; };
+ };
+ });
+
+ "registry+https://github.com/rust-lang/crates.io-index".memchr."2.3.4" = overridableMkRustCrate (profileName: rec {
+ name = "memchr";
+ version = "2.3.4";
+ registry = "registry+https://github.com/rust-lang/crates.io-index";
+ src = fetchCratesIo { inherit name version; sha256 = "0ee1c47aaa256ecabcaea351eae4a9b01ef39ed810004e298d2511ed284b1525"; };
+ features = builtins.concatLists [
+ [ "default" ]
+ [ "std" ]
+ (lib.optional (rootFeatures' ? "garage") "use_std")
+ ];
+ });
+
+ "registry+https://github.com/rust-lang/crates.io-index".memoffset."0.6.1" = overridableMkRustCrate (profileName: rec {
+ name = "memoffset";
+ version = "0.6.1";
+ registry = "registry+https://github.com/rust-lang/crates.io-index";
+ src = fetchCratesIo { inherit name version; sha256 = "157b4208e3059a8f9e78d559edc658e13df41410cb3ae03979c83130067fdd87"; };
+ features = builtins.concatLists [
+ [ "default" ]
+ ];
+ buildDependencies = {
+ autocfg = buildRustPackages."registry+https://github.com/rust-lang/crates.io-index".autocfg."1.0.1" { profileName = "__noProfile"; };
+ };
+ });
+
+ "registry+https://github.com/rust-lang/crates.io-index".mio."0.7.10" = overridableMkRustCrate (profileName: rec {
+ name = "mio";
+ version = "0.7.10";
+ registry = "registry+https://github.com/rust-lang/crates.io-index";
+ src = fetchCratesIo { inherit name version; sha256 = "2182a122f3b7f3f5329cb1972cee089ba2459a0a80a56935e6e674f096f8d839"; };
+ features = builtins.concatLists [
+ [ "default" ]
+ [ "net" ]
+ [ "os-ext" ]
+ [ "os-poll" ]
+ [ "os-util" ]
+ [ "tcp" ]
+ [ "udp" ]
+ [ "uds" ]
+ ];
+ dependencies = {
+ ${ if hostPlatform.isUnix then "libc" else null } = rustPackages."registry+https://github.com/rust-lang/crates.io-index".libc."0.2.90" { inherit profileName; };
+ log = rustPackages."registry+https://github.com/rust-lang/crates.io-index".log."0.4.14" { inherit profileName; };
+ ${ if hostPlatform.isWindows then "miow" else null } = rustPackages."registry+https://github.com/rust-lang/crates.io-index".miow."0.3.6" { inherit profileName; };
+ ${ if hostPlatform.isWindows then "ntapi" else null } = rustPackages."registry+https://github.com/rust-lang/crates.io-index".ntapi."0.3.6" { inherit profileName; };
+ ${ if hostPlatform.isWindows then "winapi" else null } = rustPackages."registry+https://github.com/rust-lang/crates.io-index".winapi."0.3.9" { inherit profileName; };
+ };
+ });
+
+ "registry+https://github.com/rust-lang/crates.io-index".miow."0.3.6" = overridableMkRustCrate (profileName: rec {
+ name = "miow";
+ version = "0.3.6";
+ registry = "registry+https://github.com/rust-lang/crates.io-index";
+ src = fetchCratesIo { inherit name version; sha256 = "5a33c1b55807fbed163481b5ba66db4b2fa6cde694a5027be10fb724206c5897"; };
+ dependencies = {
+ socket2 = rustPackages."registry+https://github.com/rust-lang/crates.io-index".socket2."0.3.19" { inherit profileName; };
+ winapi = rustPackages."registry+https://github.com/rust-lang/crates.io-index".winapi."0.3.9" { inherit profileName; };
+ };
+ });
+
+ "registry+https://github.com/rust-lang/crates.io-index".ntapi."0.3.6" = overridableMkRustCrate (profileName: rec {
+ name = "ntapi";
+ version = "0.3.6";
+ registry = "registry+https://github.com/rust-lang/crates.io-index";
+ src = fetchCratesIo { inherit name version; sha256 = "3f6bb902e437b6d86e03cce10a7e2af662292c5dfef23b65899ea3ac9354ad44"; };
+ features = builtins.concatLists [
+ [ "default" ]
+ [ "user" ]
+ ];
+ dependencies = {
+ winapi = rustPackages."registry+https://github.com/rust-lang/crates.io-index".winapi."0.3.9" { inherit profileName; };
+ };
+ });
+
+ "registry+https://github.com/rust-lang/crates.io-index".num-integer."0.1.44" = overridableMkRustCrate (profileName: rec {
+ name = "num-integer";
+ version = "0.1.44";
+ registry = "registry+https://github.com/rust-lang/crates.io-index";
+ src = fetchCratesIo { inherit name version; sha256 = "d2cc698a63b549a70bc047073d2949cce27cd1c7b0a4a862d08a8031bc2801db"; };
+ dependencies = {
+ num_traits = rustPackages."registry+https://github.com/rust-lang/crates.io-index".num-traits."0.2.14" { inherit profileName; };
+ };
+ buildDependencies = {
+ autocfg = buildRustPackages."registry+https://github.com/rust-lang/crates.io-index".autocfg."1.0.1" { profileName = "__noProfile"; };
+ };
+ });
+
+ "registry+https://github.com/rust-lang/crates.io-index".num-traits."0.2.14" = overridableMkRustCrate (profileName: rec {
+ name = "num-traits";
+ version = "0.2.14";
+ registry = "registry+https://github.com/rust-lang/crates.io-index";
+ src = fetchCratesIo { inherit name version; sha256 = "9a64b1ec5cda2586e284722486d802acf1f7dbdc623e2bfc57e65ca1cd099290"; };
+ features = builtins.concatLists [
+ [ "default" ]
+ [ "std" ]
+ ];
+ buildDependencies = {
+ autocfg = buildRustPackages."registry+https://github.com/rust-lang/crates.io-index".autocfg."1.0.1" { profileName = "__noProfile"; };
+ };
+ });
+
+ "registry+https://github.com/rust-lang/crates.io-index".num_cpus."1.13.0" = overridableMkRustCrate (profileName: rec {
+ name = "num_cpus";
+ version = "1.13.0";
+ registry = "registry+https://github.com/rust-lang/crates.io-index";
+ src = fetchCratesIo { inherit name version; sha256 = "05499f3756671c15885fee9034446956fff3f243d6077b91e5767df161f766b3"; };
+ dependencies = {
+ ${ if (hostPlatform.parsed.cpu.name == "x86_64" || hostPlatform.parsed.cpu.name == "aarch64") && hostPlatform.parsed.kernel.name == "hermit" then "hermit_abi" else null } = rustPackages."registry+https://github.com/rust-lang/crates.io-index".hermit-abi."0.1.18" { inherit profileName; };
+ libc = rustPackages."registry+https://github.com/rust-lang/crates.io-index".libc."0.2.90" { inherit profileName; };
+ };
+ });
+
+ "registry+https://github.com/rust-lang/crates.io-index".once_cell."1.7.2" = overridableMkRustCrate (profileName: rec {
+ name = "once_cell";
+ version = "1.7.2";
+ registry = "registry+https://github.com/rust-lang/crates.io-index";
+ src = fetchCratesIo { inherit name version; sha256 = "af8b08b04175473088b46763e51ee54da5f9a164bc162f615b91bc179dbf15a3"; };
+ features = builtins.concatLists [
+ [ "alloc" ]
+ [ "default" ]
+ [ "race" ]
+ [ "std" ]
+ ];
+ });
+
+ "registry+https://github.com/rust-lang/crates.io-index".opaque-debug."0.3.0" = overridableMkRustCrate (profileName: rec {
+ name = "opaque-debug";
+ version = "0.3.0";
+ registry = "registry+https://github.com/rust-lang/crates.io-index";
+ src = fetchCratesIo { inherit name version; sha256 = "624a8340c38c1b80fd549087862da4ba43e08858af025b236e509b6649fc13d5"; };
+ });
+
+ "registry+https://github.com/rust-lang/crates.io-index".parking_lot."0.11.1" = overridableMkRustCrate (profileName: rec {
+ name = "parking_lot";
+ version = "0.11.1";
+ registry = "registry+https://github.com/rust-lang/crates.io-index";
+ src = fetchCratesIo { inherit name version; sha256 = "6d7744ac029df22dca6284efe4e898991d28e3085c706c972bcd7da4a27a15eb"; };
+ features = builtins.concatLists [
+ [ "default" ]
+ ];
+ dependencies = {
+ instant = rustPackages."registry+https://github.com/rust-lang/crates.io-index".instant."0.1.9" { inherit profileName; };
+ lock_api = rustPackages."registry+https://github.com/rust-lang/crates.io-index".lock_api."0.4.2" { inherit profileName; };
+ parking_lot_core = rustPackages."registry+https://github.com/rust-lang/crates.io-index".parking_lot_core."0.8.3" { inherit profileName; };
+ };
+ });
+
+ "registry+https://github.com/rust-lang/crates.io-index".parking_lot_core."0.8.3" = overridableMkRustCrate (profileName: rec {
+ name = "parking_lot_core";
+ version = "0.8.3";
+ registry = "registry+https://github.com/rust-lang/crates.io-index";
+ src = fetchCratesIo { inherit name version; sha256 = "fa7a782938e745763fe6907fc6ba86946d72f49fe7e21de074e08128a99fb018"; };
+ dependencies = {
+ cfg_if = rustPackages."registry+https://github.com/rust-lang/crates.io-index".cfg-if."1.0.0" { inherit profileName; };
+ instant = rustPackages."registry+https://github.com/rust-lang/crates.io-index".instant."0.1.9" { inherit profileName; };
+ ${ if hostPlatform.isUnix then "libc" else null } = rustPackages."registry+https://github.com/rust-lang/crates.io-index".libc."0.2.90" { inherit profileName; };
+ ${ if hostPlatform.parsed.kernel.name == "redox" then "syscall" else null } = rustPackages."registry+https://github.com/rust-lang/crates.io-index".redox_syscall."0.2.5" { inherit profileName; };
+ smallvec = rustPackages."registry+https://github.com/rust-lang/crates.io-index".smallvec."1.6.1" { inherit profileName; };
+ ${ if hostPlatform.isWindows then "winapi" else null } = rustPackages."registry+https://github.com/rust-lang/crates.io-index".winapi."0.3.9" { inherit profileName; };
+ };
+ });
+
+ "registry+https://github.com/rust-lang/crates.io-index".percent-encoding."2.1.0" = overridableMkRustCrate (profileName: rec {
+ name = "percent-encoding";
+ version = "2.1.0";
+ registry = "registry+https://github.com/rust-lang/crates.io-index";
+ src = fetchCratesIo { inherit name version; sha256 = "d4fd5641d01c8f18a23da7b6fe29298ff4b55afcccdf78973b24cf3175fee32e"; };
+ });
+
+ "registry+https://github.com/rust-lang/crates.io-index".pin-project."1.0.5" = overridableMkRustCrate (profileName: rec {
+ name = "pin-project";
+ version = "1.0.5";
+ registry = "registry+https://github.com/rust-lang/crates.io-index";
+ src = fetchCratesIo { inherit name version; sha256 = "96fa8ebb90271c4477f144354485b8068bd8f6b78b428b01ba892ca26caf0b63"; };
+ dependencies = {
+ pin_project_internal = buildRustPackages."registry+https://github.com/rust-lang/crates.io-index".pin-project-internal."1.0.5" { profileName = "__noProfile"; };
+ };
+ });
+
+ "registry+https://github.com/rust-lang/crates.io-index".pin-project-internal."1.0.5" = overridableMkRustCrate (profileName: rec {
+ name = "pin-project-internal";
+ version = "1.0.5";
+ registry = "registry+https://github.com/rust-lang/crates.io-index";
+ src = fetchCratesIo { inherit name version; sha256 = "758669ae3558c6f74bd2a18b41f7ac0b5a195aea6639d6a9b5e5d1ad5ba24c0b"; };
+ dependencies = {
+ proc_macro2 = rustPackages."registry+https://github.com/rust-lang/crates.io-index".proc-macro2."1.0.24" { inherit profileName; };
+ quote = rustPackages."registry+https://github.com/rust-lang/crates.io-index".quote."1.0.9" { inherit profileName; };
+ syn = rustPackages."registry+https://github.com/rust-lang/crates.io-index".syn."1.0.64" { inherit profileName; };
+ };
+ });
+
+ "registry+https://github.com/rust-lang/crates.io-index".pin-project-lite."0.2.6" = overridableMkRustCrate (profileName: rec {
+ name = "pin-project-lite";
+ version = "0.2.6";
+ registry = "registry+https://github.com/rust-lang/crates.io-index";
+ src = fetchCratesIo { inherit name version; sha256 = "dc0e1f259c92177c30a4c9d177246edd0a3568b25756a977d0632cf8fa37e905"; };
+ });
+
+ "registry+https://github.com/rust-lang/crates.io-index".pin-utils."0.1.0" = overridableMkRustCrate (profileName: rec {
+ name = "pin-utils";
+ version = "0.1.0";
+ registry = "registry+https://github.com/rust-lang/crates.io-index";
+ src = fetchCratesIo { inherit name version; sha256 = "8b870d8c151b6f2fb93e84a13146138f05d02ed11c7e7c54f8826aaaf7c9f184"; };
+ });
+
+ "registry+https://github.com/rust-lang/crates.io-index".ppv-lite86."0.2.10" = overridableMkRustCrate (profileName: rec {
+ name = "ppv-lite86";
+ version = "0.2.10";
+ registry = "registry+https://github.com/rust-lang/crates.io-index";
+ src = fetchCratesIo { inherit name version; sha256 = "ac74c624d6b2d21f425f752262f42188365d7b8ff1aff74c82e45136510a4857"; };
+ features = builtins.concatLists [
+ [ "simd" ]
+ [ "std" ]
+ ];
+ });
+
+ "registry+https://github.com/rust-lang/crates.io-index".pretty_env_logger."0.4.0" = overridableMkRustCrate (profileName: rec {
+ name = "pretty_env_logger";
+ version = "0.4.0";
+ registry = "registry+https://github.com/rust-lang/crates.io-index";
+ src = fetchCratesIo { inherit name version; sha256 = "926d36b9553851b8b0005f1275891b392ee4d2d833852c417ed025477350fb9d"; };
+ dependencies = {
+ env_logger = rustPackages."registry+https://github.com/rust-lang/crates.io-index".env_logger."0.7.1" { inherit profileName; };
+ log = rustPackages."registry+https://github.com/rust-lang/crates.io-index".log."0.4.14" { inherit profileName; };
+ };
+ });
+
+ "registry+https://github.com/rust-lang/crates.io-index".proc-macro-error."1.0.4" = overridableMkRustCrate (profileName: rec {
+ name = "proc-macro-error";
+ version = "1.0.4";
+ registry = "registry+https://github.com/rust-lang/crates.io-index";
+ src = fetchCratesIo { inherit name version; sha256 = "da25490ff9892aab3fcf7c36f08cfb902dd3e71ca0f9f9517bea02a73a5ce38c"; };
+ features = builtins.concatLists [
+ [ "default" ]
+ [ "syn" ]
+ [ "syn-error" ]
+ ];
+ dependencies = {
+ proc_macro_error_attr = buildRustPackages."registry+https://github.com/rust-lang/crates.io-index".proc-macro-error-attr."1.0.4" { profileName = "__noProfile"; };
+ proc_macro2 = rustPackages."registry+https://github.com/rust-lang/crates.io-index".proc-macro2."1.0.24" { inherit profileName; };
+ quote = rustPackages."registry+https://github.com/rust-lang/crates.io-index".quote."1.0.9" { inherit profileName; };
+ syn = rustPackages."registry+https://github.com/rust-lang/crates.io-index".syn."1.0.64" { inherit profileName; };
+ };
+ buildDependencies = {
+ version_check = buildRustPackages."registry+https://github.com/rust-lang/crates.io-index".version_check."0.9.3" { profileName = "__noProfile"; };
+ };
+ });
+
+ "registry+https://github.com/rust-lang/crates.io-index".proc-macro-error-attr."1.0.4" = overridableMkRustCrate (profileName: rec {
+ name = "proc-macro-error-attr";
+ version = "1.0.4";
+ registry = "registry+https://github.com/rust-lang/crates.io-index";
+ src = fetchCratesIo { inherit name version; sha256 = "a1be40180e52ecc98ad80b184934baf3d0d29f979574e439af5a55274b35f869"; };
+ dependencies = {
+ proc_macro2 = rustPackages."registry+https://github.com/rust-lang/crates.io-index".proc-macro2."1.0.24" { inherit profileName; };
+ quote = rustPackages."registry+https://github.com/rust-lang/crates.io-index".quote."1.0.9" { inherit profileName; };
+ };
+ buildDependencies = {
+ version_check = buildRustPackages."registry+https://github.com/rust-lang/crates.io-index".version_check."0.9.3" { profileName = "__noProfile"; };
+ };
+ });
+
+ "registry+https://github.com/rust-lang/crates.io-index".proc-macro-hack."0.5.19" = overridableMkRustCrate (profileName: rec {
+ name = "proc-macro-hack";
+ version = "0.5.19";
+ registry = "registry+https://github.com/rust-lang/crates.io-index";
+ src = fetchCratesIo { inherit name version; sha256 = "dbf0c48bc1d91375ae5c3cd81e3722dff1abcf81a30960240640d223f59fe0e5"; };
+ });
+
+ "registry+https://github.com/rust-lang/crates.io-index".proc-macro-nested."0.1.7" = overridableMkRustCrate (profileName: rec {
+ name = "proc-macro-nested";
+ version = "0.1.7";
+ registry = "registry+https://github.com/rust-lang/crates.io-index";
+ src = fetchCratesIo { inherit name version; sha256 = "bc881b2c22681370c6a780e47af9840ef841837bc98118431d4e1868bd0c1086"; };
+ });
+
+ "registry+https://github.com/rust-lang/crates.io-index".proc-macro2."1.0.24" = overridableMkRustCrate (profileName: rec {
+ name = "proc-macro2";
+ version = "1.0.24";
+ registry = "registry+https://github.com/rust-lang/crates.io-index";
+ src = fetchCratesIo { inherit name version; sha256 = "1e0704ee1a7e00d7bb417d0770ea303c1bccbabf0ef1667dae92b5967f5f8a71"; };
+ features = builtins.concatLists [
+ [ "default" ]
+ [ "proc-macro" ]
+ ];
+ dependencies = {
+ unicode_xid = rustPackages."registry+https://github.com/rust-lang/crates.io-index".unicode-xid."0.2.1" { inherit profileName; };
+ };
+ });
+
+ "registry+https://github.com/rust-lang/crates.io-index".quick-error."1.2.3" = overridableMkRustCrate (profileName: rec {
+ name = "quick-error";
+ version = "1.2.3";
+ registry = "registry+https://github.com/rust-lang/crates.io-index";
+ src = fetchCratesIo { inherit name version; sha256 = "a1d01941d82fa2ab50be1e79e6714289dd7cde78eba4c074bc5a4374f650dfe0"; };
+ });
+
+ "registry+https://github.com/rust-lang/crates.io-index".quick-xml."0.21.0" = overridableMkRustCrate (profileName: rec {
+ name = "quick-xml";
+ version = "0.21.0";
+ registry = "registry+https://github.com/rust-lang/crates.io-index";
+ src = fetchCratesIo { inherit name version; sha256 = "0452695941410a58c8ce4391707ba9bad26a247173bd9886a05a5e8a8babec75"; };
+ features = builtins.concatLists [
+ [ "default" ]
+ [ "serde" ]
+ [ "serialize" ]
+ ];
+ dependencies = {
+ memchr = rustPackages."registry+https://github.com/rust-lang/crates.io-index".memchr."2.3.4" { inherit profileName; };
+ serde = rustPackages."registry+https://github.com/rust-lang/crates.io-index".serde."1.0.124" { inherit profileName; };
+ };
+ });
+
+ "registry+https://github.com/rust-lang/crates.io-index".quote."1.0.9" = overridableMkRustCrate (profileName: rec {
+ name = "quote";
+ version = "1.0.9";
+ registry = "registry+https://github.com/rust-lang/crates.io-index";
+ src = fetchCratesIo { inherit name version; sha256 = "c3d0b9745dc2debf507c8422de05d7226cc1f0644216dfdfead988f9b1ab32a7"; };
+ features = builtins.concatLists [
+ [ "default" ]
+ [ "proc-macro" ]
+ ];
+ dependencies = {
+ proc_macro2 = rustPackages."registry+https://github.com/rust-lang/crates.io-index".proc-macro2."1.0.24" { inherit profileName; };
+ };
+ });
+
+ "registry+https://github.com/rust-lang/crates.io-index".rand."0.8.3" = overridableMkRustCrate (profileName: rec {
+ name = "rand";
+ version = "0.8.3";
+ registry = "registry+https://github.com/rust-lang/crates.io-index";
+ src = fetchCratesIo { inherit name version; sha256 = "0ef9e7e66b4468674bfcb0c81af8b7fa0bb154fa9f28eb840da5c447baeb8d7e"; };
+ features = builtins.concatLists [
+ [ "alloc" ]
+ [ "default" ]
+ [ "getrandom" ]
+ [ "libc" ]
+ [ "rand_chacha" ]
+ [ "rand_hc" ]
+ [ "std" ]
+ [ "std_rng" ]
+ ];
+ dependencies = {
+ ${ if hostPlatform.isUnix then "libc" else null } = rustPackages."registry+https://github.com/rust-lang/crates.io-index".libc."0.2.90" { inherit profileName; };
+ ${ if !(hostPlatform.parsed.kernel.name == "emscripten") then "rand_chacha" else null } = rustPackages."registry+https://github.com/rust-lang/crates.io-index".rand_chacha."0.3.0" { inherit profileName; };
+ rand_core = rustPackages."registry+https://github.com/rust-lang/crates.io-index".rand_core."0.6.2" { inherit profileName; };
+ ${ if hostPlatform.parsed.kernel.name == "emscripten" then "rand_hc" else null } = rustPackages."registry+https://github.com/rust-lang/crates.io-index".rand_hc."0.3.0" { inherit profileName; };
+ };
+ });
+
+ "registry+https://github.com/rust-lang/crates.io-index".rand_chacha."0.3.0" = overridableMkRustCrate (profileName: rec {
+ name = "rand_chacha";
+ version = "0.3.0";
+ registry = "registry+https://github.com/rust-lang/crates.io-index";
+ src = fetchCratesIo { inherit name version; sha256 = "e12735cf05c9e10bf21534da50a147b924d555dc7a547c42e6bb2d5b6017ae0d"; };
+ features = builtins.concatLists [
+ [ "std" ]
+ ];
+ dependencies = {
+ ppv_lite86 = rustPackages."registry+https://github.com/rust-lang/crates.io-index".ppv-lite86."0.2.10" { inherit profileName; };
+ rand_core = rustPackages."registry+https://github.com/rust-lang/crates.io-index".rand_core."0.6.2" { inherit profileName; };
+ };
+ });
+
+ "registry+https://github.com/rust-lang/crates.io-index".rand_core."0.6.2" = overridableMkRustCrate (profileName: rec {
+ name = "rand_core";
+ version = "0.6.2";
+ registry = "registry+https://github.com/rust-lang/crates.io-index";
+ src = fetchCratesIo { inherit name version; sha256 = "34cf66eb183df1c5876e2dcf6b13d57340741e8dc255b48e40a26de954d06ae7"; };
+ features = builtins.concatLists [
+ [ "alloc" ]
+ [ "getrandom" ]
+ [ "std" ]
+ ];
+ dependencies = {
+ getrandom = rustPackages."registry+https://github.com/rust-lang/crates.io-index".getrandom."0.2.2" { inherit profileName; };
+ };
+ });
+
+ "registry+https://github.com/rust-lang/crates.io-index".rand_hc."0.3.0" = overridableMkRustCrate (profileName: rec {
+ name = "rand_hc";
+ version = "0.3.0";
+ registry = "registry+https://github.com/rust-lang/crates.io-index";
+ src = fetchCratesIo { inherit name version; sha256 = "3190ef7066a446f2e7f42e239d161e905420ccab01eb967c9eb27d21b2322a73"; };
+ dependencies = {
+ rand_core = rustPackages."registry+https://github.com/rust-lang/crates.io-index".rand_core."0.6.2" { inherit profileName; };
+ };
+ });
+
+ "registry+https://github.com/rust-lang/crates.io-index".redox_syscall."0.2.5" = overridableMkRustCrate (profileName: rec {
+ name = "redox_syscall";
+ version = "0.2.5";
+ registry = "registry+https://github.com/rust-lang/crates.io-index";
+ src = fetchCratesIo { inherit name version; sha256 = "94341e4e44e24f6b591b59e47a8a027df12e008d73fd5672dbea9cc22f4507d9"; };
+ dependencies = {
+ bitflags = rustPackages."registry+https://github.com/rust-lang/crates.io-index".bitflags."1.2.1" { inherit profileName; };
+ };
+ });
+
+ "registry+https://github.com/rust-lang/crates.io-index".regex."1.4.5" = overridableMkRustCrate (profileName: rec {
+ name = "regex";
+ version = "1.4.5";
+ registry = "registry+https://github.com/rust-lang/crates.io-index";
+ src = fetchCratesIo { inherit name version; sha256 = "957056ecddbeba1b26965114e191d2e8589ce74db242b6ea25fc4062427a5c19"; };
+ features = builtins.concatLists [
+ [ "aho-corasick" ]
+ [ "default" ]
+ [ "memchr" ]
+ [ "perf" ]
+ [ "perf-cache" ]
+ [ "perf-dfa" ]
+ [ "perf-inline" ]
+ [ "perf-literal" ]
+ [ "std" ]
+ [ "unicode" ]
+ [ "unicode-age" ]
+ [ "unicode-bool" ]
+ [ "unicode-case" ]
+ [ "unicode-gencat" ]
+ [ "unicode-perl" ]
+ [ "unicode-script" ]
+ [ "unicode-segment" ]
+ ];
+ dependencies = {
+ aho_corasick = rustPackages."registry+https://github.com/rust-lang/crates.io-index".aho-corasick."0.7.15" { inherit profileName; };
+ memchr = rustPackages."registry+https://github.com/rust-lang/crates.io-index".memchr."2.3.4" { inherit profileName; };
+ regex_syntax = rustPackages."registry+https://github.com/rust-lang/crates.io-index".regex-syntax."0.6.23" { inherit profileName; };
+ };
+ });
+
+ "registry+https://github.com/rust-lang/crates.io-index".regex-syntax."0.6.23" = overridableMkRustCrate (profileName: rec {
+ name = "regex-syntax";
+ version = "0.6.23";
+ registry = "registry+https://github.com/rust-lang/crates.io-index";
+ src = fetchCratesIo { inherit name version; sha256 = "24d5f089152e60f62d28b835fbff2cd2e8dc0baf1ac13343bef92ab7eed84548"; };
+ features = builtins.concatLists [
+ [ "default" ]
+ [ "unicode" ]
+ [ "unicode-age" ]
+ [ "unicode-bool" ]
+ [ "unicode-case" ]
+ [ "unicode-gencat" ]
+ [ "unicode-perl" ]
+ [ "unicode-script" ]
+ [ "unicode-segment" ]
+ ];
+ });
+
+ "registry+https://github.com/rust-lang/crates.io-index".ring."0.16.20" = overridableMkRustCrate (profileName: rec {
+ name = "ring";
+ version = "0.16.20";
+ registry = "registry+https://github.com/rust-lang/crates.io-index";
+ src = fetchCratesIo { inherit name version; sha256 = "3053cf52e236a3ed746dfc745aa9cacf1b791d846bdaf412f60a8d7d6e17c8fc"; };
+ features = builtins.concatLists [
+ [ "alloc" ]
+ [ "default" ]
+ [ "dev_urandom_fallback" ]
+ [ "once_cell" ]
+ ];
+ dependencies = {
+ ${ if hostPlatform.parsed.kernel.name == "android" || hostPlatform.parsed.kernel.name == "linux" then "libc" else null } = rustPackages."registry+https://github.com/rust-lang/crates.io-index".libc."0.2.90" { inherit profileName; };
+ ${ if hostPlatform.parsed.kernel.name == "dragonfly" || hostPlatform.parsed.kernel.name == "freebsd" || hostPlatform.parsed.kernel.name == "illumos" || hostPlatform.parsed.kernel.name == "netbsd" || hostPlatform.parsed.kernel.name == "openbsd" || hostPlatform.parsed.kernel.name == "solaris" || hostPlatform.parsed.kernel.name == "android" || hostPlatform.parsed.kernel.name == "linux" then "once_cell" else null } = rustPackages."registry+https://github.com/rust-lang/crates.io-index".once_cell."1.7.2" { inherit profileName; };
+ ${ if hostPlatform.parsed.cpu.name == "i686" || hostPlatform.parsed.cpu.name == "x86_64" || (hostPlatform.parsed.cpu.name == "aarch64" || hostPlatform.parsed.cpu.name == "arm" || hostPlatform.parsed.cpu.name == "armv6l" || hostPlatform.parsed.cpu.name == "armv7l") && (hostPlatform.parsed.kernel.name == "android" || hostPlatform.parsed.kernel.name == "fuchsia" || hostPlatform.parsed.kernel.name == "linux") then "spin" else null } = rustPackages."registry+https://github.com/rust-lang/crates.io-index".spin."0.5.2" { inherit profileName; };
+ untrusted = rustPackages."registry+https://github.com/rust-lang/crates.io-index".untrusted."0.7.1" { inherit profileName; };
+ ${ if hostPlatform.parsed.cpu.name == "wasm32" && hostPlatform.parsed.vendor.name == "unknown" && hostPlatform.parsed.kernel.name == "unknown" && hostPlatform.parsed.abi.name == "" then "web_sys" else null } = rustPackages."registry+https://github.com/rust-lang/crates.io-index".web-sys."0.3.49" { inherit profileName; };
+ ${ if hostPlatform.parsed.kernel.name == "windows" then "winapi" else null } = rustPackages."registry+https://github.com/rust-lang/crates.io-index".winapi."0.3.9" { inherit profileName; };
+ };
+ buildDependencies = {
+ cc = buildRustPackages."registry+https://github.com/rust-lang/crates.io-index".cc."1.0.67" { profileName = "__noProfile"; };
+ };
+ });
+
+ "registry+https://github.com/rust-lang/crates.io-index".rmp."0.8.10" = overridableMkRustCrate (profileName: rec {
+ name = "rmp";
+ version = "0.8.10";
+ registry = "registry+https://github.com/rust-lang/crates.io-index";
+ src = fetchCratesIo { inherit name version; sha256 = "4f55e5fa1446c4d5dd1f5daeed2a4fe193071771a2636274d0d7a3b082aa7ad6"; };
+ dependencies = {
+ byteorder = rustPackages."registry+https://github.com/rust-lang/crates.io-index".byteorder."1.4.3" { inherit profileName; };
+ num_traits = rustPackages."registry+https://github.com/rust-lang/crates.io-index".num-traits."0.2.14" { inherit profileName; };
+ };
+ });
+
+ "registry+https://github.com/rust-lang/crates.io-index".rmp-serde."0.15.4" = overridableMkRustCrate (profileName: rec {
+ name = "rmp-serde";
+ version = "0.15.4";
+ registry = "registry+https://github.com/rust-lang/crates.io-index";
+ src = fetchCratesIo { inherit name version; sha256 = "839395ef53057db96b84c9238ab29e1a13f2e5c8ec9f66bef853ab4197303924"; };
+ dependencies = {
+ byteorder = rustPackages."registry+https://github.com/rust-lang/crates.io-index".byteorder."1.4.3" { inherit profileName; };
+ rmp = rustPackages."registry+https://github.com/rust-lang/crates.io-index".rmp."0.8.10" { inherit profileName; };
+ serde = rustPackages."registry+https://github.com/rust-lang/crates.io-index".serde."1.0.124" { inherit profileName; };
+ };
+ });
+
+ "registry+https://github.com/rust-lang/crates.io-index".roxmltree."0.14.0" = overridableMkRustCrate (profileName: rec {
+ name = "roxmltree";
+ version = "0.14.0";
+ registry = "registry+https://github.com/rust-lang/crates.io-index";
+ src = fetchCratesIo { inherit name version; sha256 = "bf58a7d05b28e14b1e8902fa04c4d5d6109f5450ef71a5e6597f66e53f541504"; };
+ dependencies = {
+ xmlparser = rustPackages."registry+https://github.com/rust-lang/crates.io-index".xmlparser."0.13.3" { inherit profileName; };
+ };
+ });
+
+ "registry+https://github.com/rust-lang/crates.io-index".rustls."0.19.0" = overridableMkRustCrate (profileName: rec {
+ name = "rustls";
+ version = "0.19.0";
+ registry = "registry+https://github.com/rust-lang/crates.io-index";
+ src = fetchCratesIo { inherit name version; sha256 = "064fd21ff87c6e87ed4506e68beb42459caa4a0e2eb144932e6776768556980b"; };
+ features = builtins.concatLists [
+ [ "default" ]
+ [ "log" ]
+ [ "logging" ]
+ ];
+ dependencies = {
+ base64 = rustPackages."registry+https://github.com/rust-lang/crates.io-index".base64."0.13.0" { inherit profileName; };
+ log = rustPackages."registry+https://github.com/rust-lang/crates.io-index".log."0.4.14" { inherit profileName; };
+ ring = rustPackages."registry+https://github.com/rust-lang/crates.io-index".ring."0.16.20" { inherit profileName; };
+ sct = rustPackages."registry+https://github.com/rust-lang/crates.io-index".sct."0.6.0" { inherit profileName; };
+ webpki = rustPackages."registry+https://github.com/rust-lang/crates.io-index".webpki."0.21.4" { inherit profileName; };
+ };
+ });
+
+ "registry+https://github.com/rust-lang/crates.io-index".rustversion."1.0.4" = overridableMkRustCrate (profileName: rec {
+ name = "rustversion";
+ version = "1.0.4";
+ registry = "registry+https://github.com/rust-lang/crates.io-index";
+ src = fetchCratesIo { inherit name version; sha256 = "cb5d2a036dc6d2d8fd16fde3498b04306e29bd193bf306a57427019b823d5acd"; };
+ });
+
+ "registry+https://github.com/rust-lang/crates.io-index".ryu."1.0.5" = overridableMkRustCrate (profileName: rec {
+ name = "ryu";
+ version = "1.0.5";
+ registry = "registry+https://github.com/rust-lang/crates.io-index";
+ src = fetchCratesIo { inherit name version; sha256 = "71d301d4193d031abdd79ff7e3dd721168a9572ef3fe51a1517aba235bd8f86e"; };
+ });
+
+ "registry+https://github.com/rust-lang/crates.io-index".scopeguard."1.1.0" = overridableMkRustCrate (profileName: rec {
+ name = "scopeguard";
+ version = "1.1.0";
+ registry = "registry+https://github.com/rust-lang/crates.io-index";
+ src = fetchCratesIo { inherit name version; sha256 = "d29ab0c6d3fc0ee92fe66e2d99f700eab17a8d57d1c1d3b748380fb20baa78cd"; };
+ });
+
+ "registry+https://github.com/rust-lang/crates.io-index".sct."0.6.0" = overridableMkRustCrate (profileName: rec {
+ name = "sct";
+ version = "0.6.0";
+ registry = "registry+https://github.com/rust-lang/crates.io-index";
+ src = fetchCratesIo { inherit name version; sha256 = "e3042af939fca8c3453b7af0f1c66e533a15a86169e39de2657310ade8f98d3c"; };
+ dependencies = {
+ ring = rustPackages."registry+https://github.com/rust-lang/crates.io-index".ring."0.16.20" { inherit profileName; };
+ untrusted = rustPackages."registry+https://github.com/rust-lang/crates.io-index".untrusted."0.7.1" { inherit profileName; };
+ };
+ });
+
+ "registry+https://github.com/rust-lang/crates.io-index".serde."1.0.124" = overridableMkRustCrate (profileName: rec {
+ name = "serde";
+ version = "1.0.124";
+ registry = "registry+https://github.com/rust-lang/crates.io-index";
+ src = fetchCratesIo { inherit name version; sha256 = "bd761ff957cb2a45fbb9ab3da6512de9de55872866160b23c25f1a841e99d29f"; };
+ features = builtins.concatLists [
+ [ "default" ]
+ [ "derive" ]
+ [ "rc" ]
+ [ "serde_derive" ]
+ [ "std" ]
+ ];
+ dependencies = {
+ serde_derive = buildRustPackages."registry+https://github.com/rust-lang/crates.io-index".serde_derive."1.0.124" { profileName = "__noProfile"; };
+ };
+ });
+
+ "registry+https://github.com/rust-lang/crates.io-index".serde_bytes."0.11.5" = overridableMkRustCrate (profileName: rec {
+ name = "serde_bytes";
+ version = "0.11.5";
+ registry = "registry+https://github.com/rust-lang/crates.io-index";
+ src = fetchCratesIo { inherit name version; sha256 = "16ae07dd2f88a366f15bd0632ba725227018c69a1c8550a927324f8eb8368bb9"; };
+ features = builtins.concatLists [
+ [ "default" ]
+ [ "std" ]
+ ];
+ dependencies = {
+ serde = rustPackages."registry+https://github.com/rust-lang/crates.io-index".serde."1.0.124" { inherit profileName; };
+ };
+ });
+
+ "registry+https://github.com/rust-lang/crates.io-index".serde_derive."1.0.124" = overridableMkRustCrate (profileName: rec {
+ name = "serde_derive";
+ version = "1.0.124";
+ registry = "registry+https://github.com/rust-lang/crates.io-index";
+ src = fetchCratesIo { inherit name version; sha256 = "1800f7693e94e186f5e25a28291ae1570da908aff7d97a095dec1e56ff99069b"; };
+ features = builtins.concatLists [
+ [ "default" ]
+ ];
+ dependencies = {
+ proc_macro2 = rustPackages."registry+https://github.com/rust-lang/crates.io-index".proc-macro2."1.0.24" { inherit profileName; };
+ quote = rustPackages."registry+https://github.com/rust-lang/crates.io-index".quote."1.0.9" { inherit profileName; };
+ syn = rustPackages."registry+https://github.com/rust-lang/crates.io-index".syn."1.0.64" { inherit profileName; };
+ };
+ });
+
+ "registry+https://github.com/rust-lang/crates.io-index".serde_json."1.0.64" = overridableMkRustCrate (profileName: rec {
+ name = "serde_json";
+ version = "1.0.64";
+ registry = "registry+https://github.com/rust-lang/crates.io-index";
+ src = fetchCratesIo { inherit name version; sha256 = "799e97dc9fdae36a5c8b8f2cae9ce2ee9fdce2058c57a93e6099d919fd982f79"; };
+ features = builtins.concatLists [
+ [ "default" ]
+ [ "std" ]
+ ];
+ dependencies = {
+ itoa = rustPackages."registry+https://github.com/rust-lang/crates.io-index".itoa."0.4.7" { inherit profileName; };
+ ryu = rustPackages."registry+https://github.com/rust-lang/crates.io-index".ryu."1.0.5" { inherit profileName; };
+ serde = rustPackages."registry+https://github.com/rust-lang/crates.io-index".serde."1.0.124" { inherit profileName; };
+ };
+ });
+
+ "registry+https://github.com/rust-lang/crates.io-index".sha2."0.9.3" = overridableMkRustCrate (profileName: rec {
+ name = "sha2";
+ version = "0.9.3";
+ registry = "registry+https://github.com/rust-lang/crates.io-index";
+ src = fetchCratesIo { inherit name version; sha256 = "fa827a14b29ab7f44778d14a88d3cb76e949c45083f7dbfa507d0cb699dc12de"; };
+ features = builtins.concatLists [
+ [ "default" ]
+ [ "std" ]
+ ];
+ dependencies = {
+ block_buffer = rustPackages."registry+https://github.com/rust-lang/crates.io-index".block-buffer."0.9.0" { inherit profileName; };
+ cfg_if = rustPackages."registry+https://github.com/rust-lang/crates.io-index".cfg-if."1.0.0" { inherit profileName; };
+ ${ if hostPlatform.parsed.cpu.name == "i686" || hostPlatform.parsed.cpu.name == "x86_64" then "cpuid_bool" else null } = rustPackages."registry+https://github.com/rust-lang/crates.io-index".cpuid-bool."0.1.2" { inherit profileName; };
+ digest = rustPackages."registry+https://github.com/rust-lang/crates.io-index".digest."0.9.0" { inherit profileName; };
+ opaque_debug = rustPackages."registry+https://github.com/rust-lang/crates.io-index".opaque-debug."0.3.0" { inherit profileName; };
+ };
+ });
+
+ "registry+https://github.com/rust-lang/crates.io-index".signal-hook-registry."1.3.0" = overridableMkRustCrate (profileName: rec {
+ name = "signal-hook-registry";
+ version = "1.3.0";
+ registry = "registry+https://github.com/rust-lang/crates.io-index";
+ src = fetchCratesIo { inherit name version; sha256 = "16f1d0fef1604ba8f7a073c7e701f213e056707210e9020af4528e0101ce11a6"; };
+ dependencies = {
+ libc = rustPackages."registry+https://github.com/rust-lang/crates.io-index".libc."0.2.90" { inherit profileName; };
+ };
+ });
+
+ "registry+https://github.com/rust-lang/crates.io-index".slab."0.4.2" = overridableMkRustCrate (profileName: rec {
+ name = "slab";
+ version = "0.4.2";
+ registry = "registry+https://github.com/rust-lang/crates.io-index";
+ src = fetchCratesIo { inherit name version; sha256 = "c111b5bd5695e56cffe5129854aa230b39c93a305372fdbb2668ca2394eea9f8"; };
+ });
+
+ "registry+https://github.com/rust-lang/crates.io-index".sled."0.34.6" = overridableMkRustCrate (profileName: rec {
+ name = "sled";
+ version = "0.34.6";
+ registry = "registry+https://github.com/rust-lang/crates.io-index";
+ src = fetchCratesIo { inherit name version; sha256 = "1d0132f3e393bcb7390c60bb45769498cf4550bcb7a21d7f95c02b69f6362cdc"; };
+ features = builtins.concatLists [
+ [ "default" ]
+ [ "no_metrics" ]
+ ];
+ dependencies = {
+ crc32fast = rustPackages."registry+https://github.com/rust-lang/crates.io-index".crc32fast."1.2.1" { inherit profileName; };
+ crossbeam_epoch = rustPackages."registry+https://github.com/rust-lang/crates.io-index".crossbeam-epoch."0.9.3" { inherit profileName; };
+ crossbeam_utils = rustPackages."registry+https://github.com/rust-lang/crates.io-index".crossbeam-utils."0.8.3" { inherit profileName; };
+ ${ if hostPlatform.parsed.kernel.name == "linux" || hostPlatform.parsed.kernel.name == "darwin" || hostPlatform.parsed.kernel.name == "windows" then "fs2" else null } = rustPackages."registry+https://github.com/rust-lang/crates.io-index".fs2."0.4.3" { inherit profileName; };
+ fxhash = rustPackages."registry+https://github.com/rust-lang/crates.io-index".fxhash."0.2.1" { inherit profileName; };
+ libc = rustPackages."registry+https://github.com/rust-lang/crates.io-index".libc."0.2.90" { inherit profileName; };
+ log = rustPackages."registry+https://github.com/rust-lang/crates.io-index".log."0.4.14" { inherit profileName; };
+ parking_lot = rustPackages."registry+https://github.com/rust-lang/crates.io-index".parking_lot."0.11.1" { inherit profileName; };
+ };
+ });
+
+ "registry+https://github.com/rust-lang/crates.io-index".smallvec."1.6.1" = overridableMkRustCrate (profileName: rec {
+ name = "smallvec";
+ version = "1.6.1";
+ registry = "registry+https://github.com/rust-lang/crates.io-index";
+ src = fetchCratesIo { inherit name version; sha256 = "fe0f37c9e8f3c5a4a66ad655a93c74daac4ad00c441533bf5c6e7990bb42604e"; };
+ });
+
+ "registry+https://github.com/rust-lang/crates.io-index".socket2."0.3.19" = overridableMkRustCrate (profileName: rec {
+ name = "socket2";
+ version = "0.3.19";
+ registry = "registry+https://github.com/rust-lang/crates.io-index";
+ src = fetchCratesIo { inherit name version; sha256 = "122e570113d28d773067fab24266b66753f6ea915758651696b6e35e49f88d6e"; };
+ dependencies = {
+ ${ if hostPlatform.isUnix then "cfg_if" else null } = rustPackages."registry+https://github.com/rust-lang/crates.io-index".cfg-if."1.0.0" { inherit profileName; };
+ ${ if hostPlatform.isUnix then "libc" else null } = rustPackages."registry+https://github.com/rust-lang/crates.io-index".libc."0.2.90" { inherit profileName; };
+ ${ if hostPlatform.isWindows then "winapi" else null } = rustPackages."registry+https://github.com/rust-lang/crates.io-index".winapi."0.3.9" { inherit profileName; };
+ };
+ });
+
+ "registry+https://github.com/rust-lang/crates.io-index".spin."0.5.2" = overridableMkRustCrate (profileName: rec {
+ name = "spin";
+ version = "0.5.2";
+ registry = "registry+https://github.com/rust-lang/crates.io-index";
+ src = fetchCratesIo { inherit name version; sha256 = "6e63cff320ae2c57904679ba7cb63280a3dc4613885beafb148ee7bf9aa9042d"; };
+ });
+
+ "registry+https://github.com/rust-lang/crates.io-index".structopt."0.3.21" = overridableMkRustCrate (profileName: rec {
+ name = "structopt";
+ version = "0.3.21";
+ registry = "registry+https://github.com/rust-lang/crates.io-index";
+ src = fetchCratesIo { inherit name version; sha256 = "5277acd7ee46e63e5168a80734c9f6ee81b1367a7d8772a2d765df2a3705d28c"; };
+ dependencies = {
+ clap = rustPackages."registry+https://github.com/rust-lang/crates.io-index".clap."2.33.3" { inherit profileName; };
+ lazy_static = rustPackages."registry+https://github.com/rust-lang/crates.io-index".lazy_static."1.4.0" { inherit profileName; };
+ structopt_derive = buildRustPackages."registry+https://github.com/rust-lang/crates.io-index".structopt-derive."0.4.14" { profileName = "__noProfile"; };
+ };
+ });
+
+ "registry+https://github.com/rust-lang/crates.io-index".structopt-derive."0.4.14" = overridableMkRustCrate (profileName: rec {
+ name = "structopt-derive";
+ version = "0.4.14";
+ registry = "registry+https://github.com/rust-lang/crates.io-index";
+ src = fetchCratesIo { inherit name version; sha256 = "5ba9cdfda491b814720b6b06e0cac513d922fc407582032e8706e9f137976f90"; };
+ dependencies = {
+ heck = rustPackages."registry+https://github.com/rust-lang/crates.io-index".heck."0.3.2" { inherit profileName; };
+ proc_macro_error = rustPackages."registry+https://github.com/rust-lang/crates.io-index".proc-macro-error."1.0.4" { inherit profileName; };
+ proc_macro2 = rustPackages."registry+https://github.com/rust-lang/crates.io-index".proc-macro2."1.0.24" { inherit profileName; };
+ quote = rustPackages."registry+https://github.com/rust-lang/crates.io-index".quote."1.0.9" { inherit profileName; };
+ syn = rustPackages."registry+https://github.com/rust-lang/crates.io-index".syn."1.0.64" { inherit profileName; };
+ };
+ });
+
+ "registry+https://github.com/rust-lang/crates.io-index".subtle."2.4.0" = overridableMkRustCrate (profileName: rec {
+ name = "subtle";
+ version = "2.4.0";
+ registry = "registry+https://github.com/rust-lang/crates.io-index";
+ src = fetchCratesIo { inherit name version; sha256 = "1e81da0851ada1f3e9d4312c704aa4f8806f0f9d69faaf8df2f3464b4a9437c2"; };
+ });
+
+ "registry+https://github.com/rust-lang/crates.io-index".syn."1.0.64" = overridableMkRustCrate (profileName: rec {
+ name = "syn";
+ version = "1.0.64";
+ registry = "registry+https://github.com/rust-lang/crates.io-index";
+ src = fetchCratesIo { inherit name version; sha256 = "3fd9d1e9976102a03c542daa2eff1b43f9d72306342f3f8b3ed5fb8908195d6f"; };
+ features = builtins.concatLists [
+ [ "clone-impls" ]
+ [ "default" ]
+ [ "derive" ]
+ [ "extra-traits" ]
+ [ "full" ]
+ [ "parsing" ]
+ [ "printing" ]
+ [ "proc-macro" ]
+ [ "quote" ]
+ [ "visit" ]
+ [ "visit-mut" ]
+ ];
+ dependencies = {
+ proc_macro2 = rustPackages."registry+https://github.com/rust-lang/crates.io-index".proc-macro2."1.0.24" { inherit profileName; };
+ quote = rustPackages."registry+https://github.com/rust-lang/crates.io-index".quote."1.0.9" { inherit profileName; };
+ unicode_xid = rustPackages."registry+https://github.com/rust-lang/crates.io-index".unicode-xid."0.2.1" { inherit profileName; };
+ };
+ });
+
+ "registry+https://github.com/rust-lang/crates.io-index".synstructure."0.12.4" = overridableMkRustCrate (profileName: rec {
+ name = "synstructure";
+ version = "0.12.4";
+ registry = "registry+https://github.com/rust-lang/crates.io-index";
+ src = fetchCratesIo { inherit name version; sha256 = "b834f2d66f734cb897113e34aaff2f1ab4719ca946f9a7358dba8f8064148701"; };
+ features = builtins.concatLists [
+ [ "default" ]
+ [ "proc-macro" ]
+ ];
+ dependencies = {
+ proc_macro2 = rustPackages."registry+https://github.com/rust-lang/crates.io-index".proc-macro2."1.0.24" { inherit profileName; };
+ quote = rustPackages."registry+https://github.com/rust-lang/crates.io-index".quote."1.0.9" { inherit profileName; };
+ syn = rustPackages."registry+https://github.com/rust-lang/crates.io-index".syn."1.0.64" { inherit profileName; };
+ unicode_xid = rustPackages."registry+https://github.com/rust-lang/crates.io-index".unicode-xid."0.2.1" { inherit profileName; };
+ };
+ });
+
+ "registry+https://github.com/rust-lang/crates.io-index".termcolor."1.1.2" = overridableMkRustCrate (profileName: rec {
+ name = "termcolor";
+ version = "1.1.2";
+ registry = "registry+https://github.com/rust-lang/crates.io-index";
+ src = fetchCratesIo { inherit name version; sha256 = "2dfed899f0eb03f32ee8c6a0aabdb8a7949659e3466561fc0adf54e26d88c5f4"; };
+ dependencies = {
+ ${ if hostPlatform.isWindows then "winapi_util" else null } = rustPackages."registry+https://github.com/rust-lang/crates.io-index".winapi-util."0.1.5" { inherit profileName; };
+ };
+ });
+
+ "registry+https://github.com/rust-lang/crates.io-index".textwrap."0.11.0" = overridableMkRustCrate (profileName: rec {
+ name = "textwrap";
+ version = "0.11.0";
+ registry = "registry+https://github.com/rust-lang/crates.io-index";
+ src = fetchCratesIo { inherit name version; sha256 = "d326610f408c7a4eb6f51c37c330e496b08506c9457c9d34287ecc38809fb060"; };
+ dependencies = {
+ unicode_width = rustPackages."registry+https://github.com/rust-lang/crates.io-index".unicode-width."0.1.8" { inherit profileName; };
+ };
+ });
+
+ "registry+https://github.com/rust-lang/crates.io-index".time."0.1.43" = overridableMkRustCrate (profileName: rec {
+ name = "time";
+ version = "0.1.43";
+ registry = "registry+https://github.com/rust-lang/crates.io-index";
+ src = fetchCratesIo { inherit name version; sha256 = "ca8a50ef2360fbd1eeb0ecd46795a87a19024eb4b53c5dc916ca1fd95fe62438"; };
+ dependencies = {
+ libc = rustPackages."registry+https://github.com/rust-lang/crates.io-index".libc."0.2.90" { inherit profileName; };
+ ${ if hostPlatform.isWindows then "winapi" else null } = rustPackages."registry+https://github.com/rust-lang/crates.io-index".winapi."0.3.9" { inherit profileName; };
+ };
+ });
+
+ "registry+https://github.com/rust-lang/crates.io-index".tinyvec."1.1.1" = overridableMkRustCrate (profileName: rec {
+ name = "tinyvec";
+ version = "1.1.1";
+ registry = "registry+https://github.com/rust-lang/crates.io-index";
+ src = fetchCratesIo { inherit name version; sha256 = "317cca572a0e89c3ce0ca1f1bdc9369547fe318a683418e42ac8f59d14701023"; };
+ features = builtins.concatLists [
+ [ "alloc" ]
+ [ "default" ]
+ [ "tinyvec_macros" ]
+ ];
+ dependencies = {
+ tinyvec_macros = rustPackages."registry+https://github.com/rust-lang/crates.io-index".tinyvec_macros."0.1.0" { inherit profileName; };
+ };
+ });
+
+ "registry+https://github.com/rust-lang/crates.io-index".tinyvec_macros."0.1.0" = overridableMkRustCrate (profileName: rec {
+ name = "tinyvec_macros";
+ version = "0.1.0";
+ registry = "registry+https://github.com/rust-lang/crates.io-index";
+ src = fetchCratesIo { inherit name version; sha256 = "cda74da7e1a664f795bb1f8a87ec406fb89a02522cf6e50620d016add6dbbf5c"; };
+ });
+
+ "registry+https://github.com/rust-lang/crates.io-index".tokio."1.3.0" = overridableMkRustCrate (profileName: rec {
+ name = "tokio";
+ version = "1.3.0";
+ registry = "registry+https://github.com/rust-lang/crates.io-index";
+ src = fetchCratesIo { inherit name version; sha256 = "8d56477f6ed99e10225f38f9f75f872f29b8b8bd8c0b946f63345bb144e9eeda"; };
+ features = builtins.concatLists [
+ [ "bytes" ]
+ [ "default" ]
+ [ "fs" ]
+ [ "io-util" ]
+ [ "libc" ]
+ [ "macros" ]
+ [ "memchr" ]
+ [ "mio" ]
+ [ "net" ]
+ [ "num_cpus" ]
+ [ "once_cell" ]
+ [ "rt" ]
+ [ "rt-multi-thread" ]
+ [ "signal" ]
+ [ "signal-hook-registry" ]
+ [ "sync" ]
+ [ "time" ]
+ [ "tokio-macros" ]
+ [ "winapi" ]
+ ];
+ dependencies = {
+ bytes = rustPackages."registry+https://github.com/rust-lang/crates.io-index".bytes."1.0.1" { inherit profileName; };
+ ${ if hostPlatform.isUnix then "libc" else null } = rustPackages."registry+https://github.com/rust-lang/crates.io-index".libc."0.2.90" { inherit profileName; };
+ memchr = rustPackages."registry+https://github.com/rust-lang/crates.io-index".memchr."2.3.4" { inherit profileName; };
+ mio = rustPackages."registry+https://github.com/rust-lang/crates.io-index".mio."0.7.10" { inherit profileName; };
+ num_cpus = rustPackages."registry+https://github.com/rust-lang/crates.io-index".num_cpus."1.13.0" { inherit profileName; };
+ once_cell = rustPackages."registry+https://github.com/rust-lang/crates.io-index".once_cell."1.7.2" { inherit profileName; };
+ pin_project_lite = rustPackages."registry+https://github.com/rust-lang/crates.io-index".pin-project-lite."0.2.6" { inherit profileName; };
+ ${ if hostPlatform.isUnix then "signal_hook_registry" else null } = rustPackages."registry+https://github.com/rust-lang/crates.io-index".signal-hook-registry."1.3.0" { inherit profileName; };
+ tokio_macros = buildRustPackages."registry+https://github.com/rust-lang/crates.io-index".tokio-macros."1.1.0" { profileName = "__noProfile"; };
+ ${ if hostPlatform.isWindows then "winapi" else null } = rustPackages."registry+https://github.com/rust-lang/crates.io-index".winapi."0.3.9" { inherit profileName; };
+ };
+ buildDependencies = {
+ autocfg = buildRustPackages."registry+https://github.com/rust-lang/crates.io-index".autocfg."1.0.1" { profileName = "__noProfile"; };
+ };
+ });
+
+ "registry+https://github.com/rust-lang/crates.io-index".tokio-macros."1.1.0" = overridableMkRustCrate (profileName: rec {
+ name = "tokio-macros";
+ version = "1.1.0";
+ registry = "registry+https://github.com/rust-lang/crates.io-index";
+ src = fetchCratesIo { inherit name version; sha256 = "caf7b11a536f46a809a8a9f0bb4237020f70ecbf115b842360afb127ea2fda57"; };
+ dependencies = {
+ proc_macro2 = rustPackages."registry+https://github.com/rust-lang/crates.io-index".proc-macro2."1.0.24" { inherit profileName; };
+ quote = rustPackages."registry+https://github.com/rust-lang/crates.io-index".quote."1.0.9" { inherit profileName; };
+ syn = rustPackages."registry+https://github.com/rust-lang/crates.io-index".syn."1.0.64" { inherit profileName; };
+ };
+ });
+
+ "registry+https://github.com/rust-lang/crates.io-index".tokio-rustls."0.22.0" = overridableMkRustCrate (profileName: rec {
+ name = "tokio-rustls";
+ version = "0.22.0";
+ registry = "registry+https://github.com/rust-lang/crates.io-index";
+ src = fetchCratesIo { inherit name version; sha256 = "bc6844de72e57df1980054b38be3a9f4702aba4858be64dd700181a8a6d0e1b6"; };
+ dependencies = {
+ rustls = rustPackages."registry+https://github.com/rust-lang/crates.io-index".rustls."0.19.0" { inherit profileName; };
+ tokio = rustPackages."registry+https://github.com/rust-lang/crates.io-index".tokio."1.3.0" { inherit profileName; };
+ webpki = rustPackages."registry+https://github.com/rust-lang/crates.io-index".webpki."0.21.4" { inherit profileName; };
+ };
+ });
+
+ "registry+https://github.com/rust-lang/crates.io-index".tokio-stream."0.1.4" = overridableMkRustCrate (profileName: rec {
+ name = "tokio-stream";
+ version = "0.1.4";
+ registry = "registry+https://github.com/rust-lang/crates.io-index";
+ src = fetchCratesIo { inherit name version; sha256 = "c535f53c0cfa1acace62995a8994fc9cc1f12d202420da96ff306ee24d576469"; };
+ features = builtins.concatLists [
+ [ "default" ]
+ [ "net" ]
+ [ "time" ]
+ ];
+ dependencies = {
+ futures_core = rustPackages."registry+https://github.com/rust-lang/crates.io-index".futures-core."0.3.13" { inherit profileName; };
+ pin_project_lite = rustPackages."registry+https://github.com/rust-lang/crates.io-index".pin-project-lite."0.2.6" { inherit profileName; };
+ tokio = rustPackages."registry+https://github.com/rust-lang/crates.io-index".tokio."1.3.0" { inherit profileName; };
+ };
+ });
+
+ "registry+https://github.com/rust-lang/crates.io-index".tokio-util."0.6.4" = overridableMkRustCrate (profileName: rec {
+ name = "tokio-util";
+ version = "0.6.4";
+ registry = "registry+https://github.com/rust-lang/crates.io-index";
+ src = fetchCratesIo { inherit name version; sha256 = "ec31e5cc6b46e653cf57762f36f71d5e6386391d88a72fd6db4508f8f676fb29"; };
+ features = builtins.concatLists [
+ [ "codec" ]
+ [ "default" ]
+ ];
+ dependencies = {
+ bytes = rustPackages."registry+https://github.com/rust-lang/crates.io-index".bytes."1.0.1" { inherit profileName; };
+ futures_core = rustPackages."registry+https://github.com/rust-lang/crates.io-index".futures-core."0.3.13" { inherit profileName; };
+ futures_sink = rustPackages."registry+https://github.com/rust-lang/crates.io-index".futures-sink."0.3.13" { inherit profileName; };
+ log = rustPackages."registry+https://github.com/rust-lang/crates.io-index".log."0.4.14" { inherit profileName; };
+ pin_project_lite = rustPackages."registry+https://github.com/rust-lang/crates.io-index".pin-project-lite."0.2.6" { inherit profileName; };
+ tokio = rustPackages."registry+https://github.com/rust-lang/crates.io-index".tokio."1.3.0" { inherit profileName; };
+ };
+ });
+
+ "registry+https://github.com/rust-lang/crates.io-index".toml."0.5.8" = overridableMkRustCrate (profileName: rec {
+ name = "toml";
+ version = "0.5.8";
+ registry = "registry+https://github.com/rust-lang/crates.io-index";
+ src = fetchCratesIo { inherit name version; sha256 = "a31142970826733df8241ef35dc040ef98c679ab14d7c3e54d827099b3acecaa"; };
+ features = builtins.concatLists [
+ [ "default" ]
+ ];
+ dependencies = {
+ serde = rustPackages."registry+https://github.com/rust-lang/crates.io-index".serde."1.0.124" { inherit profileName; };
+ };
+ });
+
+ "registry+https://github.com/rust-lang/crates.io-index".tower-service."0.3.1" = overridableMkRustCrate (profileName: rec {
+ name = "tower-service";
+ version = "0.3.1";
+ registry = "registry+https://github.com/rust-lang/crates.io-index";
+ src = fetchCratesIo { inherit name version; sha256 = "360dfd1d6d30e05fda32ace2c8c70e9c0a9da713275777f5a4dbb8a1893930c6"; };
+ });
+
+ "registry+https://github.com/rust-lang/crates.io-index".tracing."0.1.25" = overridableMkRustCrate (profileName: rec {
+ name = "tracing";
+ version = "0.1.25";
+ registry = "registry+https://github.com/rust-lang/crates.io-index";
+ src = fetchCratesIo { inherit name version; sha256 = "01ebdc2bb4498ab1ab5f5b73c5803825e60199229ccba0698170e3be0e7f959f"; };
+ features = builtins.concatLists [
+ [ "std" ]
+ ];
+ dependencies = {
+ cfg_if = rustPackages."registry+https://github.com/rust-lang/crates.io-index".cfg-if."1.0.0" { inherit profileName; };
+ pin_project_lite = rustPackages."registry+https://github.com/rust-lang/crates.io-index".pin-project-lite."0.2.6" { inherit profileName; };
+ tracing_core = rustPackages."registry+https://github.com/rust-lang/crates.io-index".tracing-core."0.1.17" { inherit profileName; };
+ };
+ });
+
+ "registry+https://github.com/rust-lang/crates.io-index".tracing-core."0.1.17" = overridableMkRustCrate (profileName: rec {
+ name = "tracing-core";
+ version = "0.1.17";
+ registry = "registry+https://github.com/rust-lang/crates.io-index";
+ src = fetchCratesIo { inherit name version; sha256 = "f50de3927f93d202783f4513cda820ab47ef17f624b03c096e86ef00c67e6b5f"; };
+ features = builtins.concatLists [
+ [ "lazy_static" ]
+ [ "std" ]
+ ];
+ dependencies = {
+ lazy_static = rustPackages."registry+https://github.com/rust-lang/crates.io-index".lazy_static."1.4.0" { inherit profileName; };
+ };
+ });
+
+ "registry+https://github.com/rust-lang/crates.io-index".try-lock."0.2.3" = overridableMkRustCrate (profileName: rec {
+ name = "try-lock";
+ version = "0.2.3";
+ registry = "registry+https://github.com/rust-lang/crates.io-index";
+ src = fetchCratesIo { inherit name version; sha256 = "59547bce71d9c38b83d9c0e92b6066c4253371f15005def0c30d9657f50c7642"; };
+ });
+
+ "registry+https://github.com/rust-lang/crates.io-index".typenum."1.13.0" = overridableMkRustCrate (profileName: rec {
+ name = "typenum";
+ version = "1.13.0";
+ registry = "registry+https://github.com/rust-lang/crates.io-index";
+ src = fetchCratesIo { inherit name version; sha256 = "879f6906492a7cd215bfa4cf595b600146ccfac0c79bcbd1f3000162af5e8b06"; };
+ });
+
+ "registry+https://github.com/rust-lang/crates.io-index".unicode-bidi."0.3.4" = overridableMkRustCrate (profileName: rec {
+ name = "unicode-bidi";
+ version = "0.3.4";
+ registry = "registry+https://github.com/rust-lang/crates.io-index";
+ src = fetchCratesIo { inherit name version; sha256 = "49f2bd0c6468a8230e1db229cff8029217cf623c767ea5d60bfbd42729ea54d5"; };
+ features = builtins.concatLists [
+ [ "default" ]
+ ];
+ dependencies = {
+ matches = rustPackages."registry+https://github.com/rust-lang/crates.io-index".matches."0.1.8" { inherit profileName; };
+ };
+ });
+
+ "registry+https://github.com/rust-lang/crates.io-index".unicode-normalization."0.1.17" = overridableMkRustCrate (profileName: rec {
+ name = "unicode-normalization";
+ version = "0.1.17";
+ registry = "registry+https://github.com/rust-lang/crates.io-index";
+ src = fetchCratesIo { inherit name version; sha256 = "07fbfce1c8a97d547e8b5334978438d9d6ec8c20e38f56d4a4374d181493eaef"; };
+ features = builtins.concatLists [
+ [ "default" ]
+ [ "std" ]
+ ];
+ dependencies = {
+ tinyvec = rustPackages."registry+https://github.com/rust-lang/crates.io-index".tinyvec."1.1.1" { inherit profileName; };
+ };
+ });
+
+ "registry+https://github.com/rust-lang/crates.io-index".unicode-segmentation."1.7.1" = overridableMkRustCrate (profileName: rec {
+ name = "unicode-segmentation";
+ version = "1.7.1";
+ registry = "registry+https://github.com/rust-lang/crates.io-index";
+ src = fetchCratesIo { inherit name version; sha256 = "bb0d2e7be6ae3a5fa87eed5fb451aff96f2573d2694942e40543ae0bbe19c796"; };
+ });
+
+ "registry+https://github.com/rust-lang/crates.io-index".unicode-width."0.1.8" = overridableMkRustCrate (profileName: rec {
+ name = "unicode-width";
+ version = "0.1.8";
+ registry = "registry+https://github.com/rust-lang/crates.io-index";
+ src = fetchCratesIo { inherit name version; sha256 = "9337591893a19b88d8d87f2cec1e73fad5cdfd10e5a6f349f498ad6ea2ffb1e3"; };
+ features = builtins.concatLists [
+ [ "default" ]
+ ];
+ });
+
+ "registry+https://github.com/rust-lang/crates.io-index".unicode-xid."0.2.1" = overridableMkRustCrate (profileName: rec {
+ name = "unicode-xid";
+ version = "0.2.1";
+ registry = "registry+https://github.com/rust-lang/crates.io-index";
+ src = fetchCratesIo { inherit name version; sha256 = "f7fe0bb3479651439c9112f72b6c505038574c9fbb575ed1bf3b797fa39dd564"; };
+ features = builtins.concatLists [
+ [ "default" ]
+ ];
+ });
+
+ "registry+https://github.com/rust-lang/crates.io-index".untrusted."0.7.1" = overridableMkRustCrate (profileName: rec {
+ name = "untrusted";
+ version = "0.7.1";
+ registry = "registry+https://github.com/rust-lang/crates.io-index";
+ src = fetchCratesIo { inherit name version; sha256 = "a156c684c91ea7d62626509bce3cb4e1d9ed5c4d978f7b4352658f96a4c26b4a"; };
+ });
+
+ "registry+https://github.com/rust-lang/crates.io-index".url."2.2.1" = overridableMkRustCrate (profileName: rec {
+ name = "url";
+ version = "2.2.1";
+ registry = "registry+https://github.com/rust-lang/crates.io-index";
+ src = fetchCratesIo { inherit name version; sha256 = "9ccd964113622c8e9322cfac19eb1004a07e636c545f325da085d5cdde6f1f8b"; };
+ dependencies = {
+ form_urlencoded = rustPackages."registry+https://github.com/rust-lang/crates.io-index".form_urlencoded."1.0.1" { inherit profileName; };
+ idna = rustPackages."registry+https://github.com/rust-lang/crates.io-index".idna."0.2.2" { inherit profileName; };
+ matches = rustPackages."registry+https://github.com/rust-lang/crates.io-index".matches."0.1.8" { inherit profileName; };
+ percent_encoding = rustPackages."registry+https://github.com/rust-lang/crates.io-index".percent-encoding."2.1.0" { inherit profileName; };
+ };
+ });
+
+ "registry+https://github.com/rust-lang/crates.io-index".version_check."0.9.3" = overridableMkRustCrate (profileName: rec {
+ name = "version_check";
+ version = "0.9.3";
+ registry = "registry+https://github.com/rust-lang/crates.io-index";
+ src = fetchCratesIo { inherit name version; sha256 = "5fecdca9a5291cc2b8dcf7dc02453fee791a280f3743cb0905f8822ae463b3fe"; };
+ });
+
+ "registry+https://github.com/rust-lang/crates.io-index".want."0.3.0" = overridableMkRustCrate (profileName: rec {
+ name = "want";
+ version = "0.3.0";
+ registry = "registry+https://github.com/rust-lang/crates.io-index";
+ src = fetchCratesIo { inherit name version; sha256 = "1ce8a968cb1cd110d136ff8b819a556d6fb6d919363c61534f6860c7eb172ba0"; };
+ dependencies = {
+ log = rustPackages."registry+https://github.com/rust-lang/crates.io-index".log."0.4.14" { inherit profileName; };
+ try_lock = rustPackages."registry+https://github.com/rust-lang/crates.io-index".try-lock."0.2.3" { inherit profileName; };
+ };
+ });
+
+ "registry+https://github.com/rust-lang/crates.io-index".wasi."0.10.2+wasi-snapshot-preview1" = overridableMkRustCrate (profileName: rec {
+ name = "wasi";
+ version = "0.10.2+wasi-snapshot-preview1";
+ registry = "registry+https://github.com/rust-lang/crates.io-index";
+ src = fetchCratesIo { inherit name version; sha256 = "fd6fbd9a79829dd1ad0cc20627bf1ed606756a7f77edff7b66b7064f9cb327c6"; };
+ features = builtins.concatLists [
+ [ "default" ]
+ [ "std" ]
+ ];
+ });
+
+ "registry+https://github.com/rust-lang/crates.io-index".wasm-bindgen."0.2.72" = overridableMkRustCrate (profileName: rec {
+ name = "wasm-bindgen";
+ version = "0.2.72";
+ registry = "registry+https://github.com/rust-lang/crates.io-index";
+ src = fetchCratesIo { inherit name version; sha256 = "8fe8f61dba8e5d645a4d8132dc7a0a66861ed5e1045d2c0ed940fab33bac0fbe"; };
+ features = builtins.concatLists [
+ [ "default" ]
+ [ "spans" ]
+ [ "std" ]
+ ];
+ dependencies = {
+ cfg_if = rustPackages."registry+https://github.com/rust-lang/crates.io-index".cfg-if."1.0.0" { inherit profileName; };
+ wasm_bindgen_macro = buildRustPackages."registry+https://github.com/rust-lang/crates.io-index".wasm-bindgen-macro."0.2.72" { profileName = "__noProfile"; };
+ };
+ });
+
+ "registry+https://github.com/rust-lang/crates.io-index".wasm-bindgen-backend."0.2.72" = overridableMkRustCrate (profileName: rec {
+ name = "wasm-bindgen-backend";
+ version = "0.2.72";
+ registry = "registry+https://github.com/rust-lang/crates.io-index";
+ src = fetchCratesIo { inherit name version; sha256 = "046ceba58ff062da072c7cb4ba5b22a37f00a302483f7e2a6cdc18fedbdc1fd3"; };
+ features = builtins.concatLists [
+ [ "spans" ]
+ ];
+ dependencies = {
+ bumpalo = rustPackages."registry+https://github.com/rust-lang/crates.io-index".bumpalo."3.6.1" { inherit profileName; };
+ lazy_static = rustPackages."registry+https://github.com/rust-lang/crates.io-index".lazy_static."1.4.0" { inherit profileName; };
+ log = rustPackages."registry+https://github.com/rust-lang/crates.io-index".log."0.4.14" { inherit profileName; };
+ proc_macro2 = rustPackages."registry+https://github.com/rust-lang/crates.io-index".proc-macro2."1.0.24" { inherit profileName; };
+ quote = rustPackages."registry+https://github.com/rust-lang/crates.io-index".quote."1.0.9" { inherit profileName; };
+ syn = rustPackages."registry+https://github.com/rust-lang/crates.io-index".syn."1.0.64" { inherit profileName; };
+ wasm_bindgen_shared = rustPackages."registry+https://github.com/rust-lang/crates.io-index".wasm-bindgen-shared."0.2.72" { inherit profileName; };
+ };
+ });
+
+ "registry+https://github.com/rust-lang/crates.io-index".wasm-bindgen-macro."0.2.72" = overridableMkRustCrate (profileName: rec {
+ name = "wasm-bindgen-macro";
+ version = "0.2.72";
+ registry = "registry+https://github.com/rust-lang/crates.io-index";
+ src = fetchCratesIo { inherit name version; sha256 = "0ef9aa01d36cda046f797c57959ff5f3c615c9cc63997a8d545831ec7976819b"; };
+ features = builtins.concatLists [
+ [ "spans" ]
+ ];
+ dependencies = {
+ quote = rustPackages."registry+https://github.com/rust-lang/crates.io-index".quote."1.0.9" { inherit profileName; };
+ wasm_bindgen_macro_support = rustPackages."registry+https://github.com/rust-lang/crates.io-index".wasm-bindgen-macro-support."0.2.72" { inherit profileName; };
+ };
+ });
+
+ "registry+https://github.com/rust-lang/crates.io-index".wasm-bindgen-macro-support."0.2.72" = overridableMkRustCrate (profileName: rec {
+ name = "wasm-bindgen-macro-support";
+ version = "0.2.72";
+ registry = "registry+https://github.com/rust-lang/crates.io-index";
+ src = fetchCratesIo { inherit name version; sha256 = "96eb45c1b2ee33545a813a92dbb53856418bf7eb54ab34f7f7ff1448a5b3735d"; };
+ features = builtins.concatLists [
+ [ "spans" ]
+ ];
+ dependencies = {
+ proc_macro2 = rustPackages."registry+https://github.com/rust-lang/crates.io-index".proc-macro2."1.0.24" { inherit profileName; };
+ quote = rustPackages."registry+https://github.com/rust-lang/crates.io-index".quote."1.0.9" { inherit profileName; };
+ syn = rustPackages."registry+https://github.com/rust-lang/crates.io-index".syn."1.0.64" { inherit profileName; };
+ wasm_bindgen_backend = rustPackages."registry+https://github.com/rust-lang/crates.io-index".wasm-bindgen-backend."0.2.72" { inherit profileName; };
+ wasm_bindgen_shared = rustPackages."registry+https://github.com/rust-lang/crates.io-index".wasm-bindgen-shared."0.2.72" { inherit profileName; };
+ };
+ });
+
+ "registry+https://github.com/rust-lang/crates.io-index".wasm-bindgen-shared."0.2.72" = overridableMkRustCrate (profileName: rec {
+ name = "wasm-bindgen-shared";
+ version = "0.2.72";
+ registry = "registry+https://github.com/rust-lang/crates.io-index";
+ src = fetchCratesIo { inherit name version; sha256 = "b7148f4696fb4960a346eaa60bbfb42a1ac4ebba21f750f75fc1375b098d5ffa"; };
+ });
+
+ "registry+https://github.com/rust-lang/crates.io-index".web-sys."0.3.49" = overridableMkRustCrate (profileName: rec {
+ name = "web-sys";
+ version = "0.3.49";
+ registry = "registry+https://github.com/rust-lang/crates.io-index";
+ src = fetchCratesIo { inherit name version; sha256 = "59fe19d70f5dacc03f6e46777213facae5ac3801575d56ca6cbd4c93dcd12310"; };
+ features = builtins.concatLists [
+ [ "Crypto" ]
+ [ "EventTarget" ]
+ [ "Window" ]
+ ];
+ dependencies = {
+ js_sys = rustPackages."registry+https://github.com/rust-lang/crates.io-index".js-sys."0.3.49" { inherit profileName; };
+ wasm_bindgen = rustPackages."registry+https://github.com/rust-lang/crates.io-index".wasm-bindgen."0.2.72" { inherit profileName; };
+ };
+ });
+
+ "registry+https://github.com/rust-lang/crates.io-index".webpki."0.21.4" = overridableMkRustCrate (profileName: rec {
+ name = "webpki";
+ version = "0.21.4";
+ registry = "registry+https://github.com/rust-lang/crates.io-index";
+ src = fetchCratesIo { inherit name version; sha256 = "b8e38c0608262c46d4a56202ebabdeb094cef7e560ca7a226c6bf055188aa4ea"; };
+ features = builtins.concatLists [
+ [ "default" ]
+ [ "std" ]
+ [ "trust_anchor_util" ]
+ ];
+ dependencies = {
+ ring = rustPackages."registry+https://github.com/rust-lang/crates.io-index".ring."0.16.20" { inherit profileName; };
+ untrusted = rustPackages."registry+https://github.com/rust-lang/crates.io-index".untrusted."0.7.1" { inherit profileName; };
+ };
+ });
+
+ "registry+https://github.com/rust-lang/crates.io-index".winapi."0.3.9" = overridableMkRustCrate (profileName: rec {
+ name = "winapi";
+ version = "0.3.9";
+ registry = "registry+https://github.com/rust-lang/crates.io-index";
+ src = fetchCratesIo { inherit name version; sha256 = "5c839a674fcd7a98952e593242ea400abe93992746761e38641405d28b00f419"; };
+ features = builtins.concatLists [
+ [ "cfg" ]
+ [ "consoleapi" ]
+ [ "errhandlingapi" ]
+ [ "evntrace" ]
+ [ "fileapi" ]
+ [ "handleapi" ]
+ [ "in6addr" ]
+ [ "inaddr" ]
+ [ "ioapiset" ]
+ [ "minwinbase" ]
+ [ "minwindef" ]
+ [ "mswsock" ]
+ [ "namedpipeapi" ]
+ [ "ntdef" ]
+ [ "ntsecapi" ]
+ [ "ntstatus" ]
+ (lib.optional (rootFeatures' ? "garage") "processenv")
+ [ "processthreadsapi" ]
+ [ "profileapi" ]
+ [ "std" ]
+ [ "synchapi" ]
+ [ "sysinfoapi" ]
+ [ "timezoneapi" ]
+ [ "winbase" ]
+ (lib.optional (rootFeatures' ? "garage") "wincon")
+ [ "windef" ]
+ [ "winerror" ]
+ [ "winioctl" ]
+ [ "winnt" ]
+ [ "winsock2" ]
+ [ "ws2def" ]
+ [ "ws2ipdef" ]
+ [ "ws2tcpip" ]
+ [ "wtypesbase" ]
+ ];
+ dependencies = {
+ ${ if hostPlatform.config == "i686-pc-windows-gnu" then "winapi_i686_pc_windows_gnu" else null } = rustPackages."registry+https://github.com/rust-lang/crates.io-index".winapi-i686-pc-windows-gnu."0.4.0" { inherit profileName; };
+ ${ if hostPlatform.config == "x86_64-pc-windows-gnu" then "winapi_x86_64_pc_windows_gnu" else null } = rustPackages."registry+https://github.com/rust-lang/crates.io-index".winapi-x86_64-pc-windows-gnu."0.4.0" { inherit profileName; };
+ };
+ });
+
+ "registry+https://github.com/rust-lang/crates.io-index".winapi-i686-pc-windows-gnu."0.4.0" = overridableMkRustCrate (profileName: rec {
+ name = "winapi-i686-pc-windows-gnu";
+ version = "0.4.0";
+ registry = "registry+https://github.com/rust-lang/crates.io-index";
+ src = fetchCratesIo { inherit name version; sha256 = "ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6"; };
+ });
+
+ "registry+https://github.com/rust-lang/crates.io-index".winapi-util."0.1.5" = overridableMkRustCrate (profileName: rec {
+ name = "winapi-util";
+ version = "0.1.5";
+ registry = "registry+https://github.com/rust-lang/crates.io-index";
+ src = fetchCratesIo { inherit name version; sha256 = "70ec6ce85bb158151cae5e5c87f95a8e97d2c0c4b001223f33a334e3ce5de178"; };
+ dependencies = {
+ ${ if hostPlatform.isWindows then "winapi" else null } = rustPackages."registry+https://github.com/rust-lang/crates.io-index".winapi."0.3.9" { inherit profileName; };
+ };
+ });
+
+ "registry+https://github.com/rust-lang/crates.io-index".winapi-x86_64-pc-windows-gnu."0.4.0" = overridableMkRustCrate (profileName: rec {
+ name = "winapi-x86_64-pc-windows-gnu";
+ version = "0.4.0";
+ registry = "registry+https://github.com/rust-lang/crates.io-index";
+ src = fetchCratesIo { inherit name version; sha256 = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f"; };
+ });
+
+ "registry+https://github.com/rust-lang/crates.io-index".xmlparser."0.13.3" = overridableMkRustCrate (profileName: rec {
+ name = "xmlparser";
+ version = "0.13.3";
+ registry = "registry+https://github.com/rust-lang/crates.io-index";
+ src = fetchCratesIo { inherit name version; sha256 = "114ba2b24d2167ef6d67d7d04c8cc86522b87f490025f39f0303b7db5bf5e3d8"; };
+ features = builtins.concatLists [
+ [ "default" ]
+ [ "std" ]
+ ];
+ });
+
+ "registry+https://github.com/rust-lang/crates.io-index".xxhash-rust."0.8.2" = overridableMkRustCrate (profileName: rec {
+ name = "xxhash-rust";
+ version = "0.8.2";
+ registry = "registry+https://github.com/rust-lang/crates.io-index";
+ src = fetchCratesIo { inherit name version; sha256 = "e575e15bedf6e57b5c2d763ffc6c3c760143466cbd09d762d539680ab5992ded"; };
+ features = builtins.concatLists [
+ [ "xxh3" ]
+ ];
+ });
+
+}
diff --git a/Dockerfile b/Dockerfile
index 9ce6468a..05d2d81d 100644
--- a/Dockerfile
+++ b/Dockerfile
@@ -1,10 +1,7 @@
-FROM archlinux:latest
+FROM scratch
-RUN mkdir -p /garage/meta
-RUN mkdir -p /garage/data
ENV RUST_BACKTRACE=1
ENV RUST_LOG=garage=info
-COPY target/release/garage.stripped /garage/garage
-
-CMD /garage/garage server -c /garage/config.toml
+COPY result/bin/garage /
+CMD [ "/garage", "server", "-c", "config.toml"]
diff --git a/Makefile b/Makefile
index 7242f1d6..c0ebc075 100644
--- a/Makefile
+++ b/Makefile
@@ -1,4 +1,4 @@
-.PHONY: doc
+.PHONY: doc all release shell
all:
clear; cargo build
@@ -7,4 +7,7 @@ doc:
cd doc/book; mdbook build
release:
- RUSTFLAGS="-C link-arg=-fuse-ld=lld -C target-cpu=x86-64 -C target-feature=+sse2" cargo build --release --no-default-features
+ nix-build --arg release true
+
+shell:
+ nix-shell
diff --git a/default.nix b/default.nix
new file mode 100644
index 00000000..649f0133
--- /dev/null
+++ b/default.nix
@@ -0,0 +1,75 @@
+{
+ system ? builtins.currentSystem,
+ release ? false,
+ target ? "x86_64-unknown-linux-musl",
+ compileMode ? null,
+ git_version ? null,
+}:
+
+with import ./nix/common.nix;
+
+let
+ crossSystem = { config = target; };
+in let
+
+ pkgs = import pkgsSrc {
+ inherit system crossSystem;
+ overlays = [ cargo2nixOverlay rustOverlay ];
+ };
+ rustDist = pkgs.buildPackages.rust-bin.stable.latest.default;
+
+ /*
+ The following complexity should be abstracted by makePackageSet' (note the final quote).
+ However its code uses deprecated features of rust-overlay that can lead to bug.
+ Instead, we build our own rustChannel object with the recommended API of rust-overlay.
+ */
+ rustChannel = rustDist // {
+ cargo = rustDist;
+ rustc = rustDist.override {
+ targets = [
+ (pkgs.rustBuilder.rustLib.realHostTriple pkgs.stdenv.targetPlatform)
+ ];
+ };
+ };
+
+ overrides = pkgs.buildPackages.rustBuilder.overrides.all ++ [
+ (pkgs.rustBuilder.rustLib.makeOverride {
+ name = "garage";
+ overrideAttrs = drv: if git_version != null then {
+ preConfigure = ''
+ ${drv.preConfigure or ""}
+ export GIT_VERSION="${git_version}"
+ '';
+ } else {};
+ })
+ ];
+
+ packageFun = import ./Cargo.nix;
+
+ rustPkgs = pkgs.rustBuilder.makePackageSet {
+ inherit packageFun rustChannel release;
+ packageOverrides = overrides;
+
+ buildRustPackages = pkgs.buildPackages.rustBuilder.makePackageSet {
+ inherit rustChannel packageFun;
+ packageOverrides = overrides;
+ };
+
+ localPatterns = [
+ /*
+ The way the default rules are written make think we match recursively, on full path, but the rules are misleading.
+ In fact, the regex is only called on root elements of the crate (and not recursively).
+ This behavior does not work well with our nested modules.
+ We tried to build a "deny list" but negative lookup ahead are not supported on Nix.
+ As a workaround, we have to register all our submodules in this allow list...
+ */
+ ''^(src|tests)'' # fixed default
+ ''.*\.(rs|toml)$'' # fixed default
+ ''^(crdt|replication)'' # our crate submodules
+ ];
+ };
+
+in
+ if compileMode == "test"
+ then builtins.mapAttrs (name: value: rustPkgs.workspace.${name} { inherit compileMode; }) rustPkgs.workspace
+ else rustPkgs.workspace.garage { inherit compileMode; }
diff --git a/doc/book/src/SUMMARY.md b/doc/book/src/SUMMARY.md
index 9447c3b2..264714b1 100644
--- a/doc/book/src/SUMMARY.md
+++ b/doc/book/src/SUMMARY.md
@@ -25,7 +25,8 @@
- [Development](./development/index.md)
- [Setup your environment](./development/devenv.md)
- - [Your first contribution]()
+ - [Development scripts](./development/scripts.md)
+ - [Release process](./development/release_process.md)
- [Working Documents](./working_documents/index.md)
- [Load Balancing Data](./working_documents/load_balancing.md)
diff --git a/doc/book/src/development/devenv.md b/doc/book/src/development/devenv.md
index 6cb7c554..78affa48 100644
--- a/doc/book/src/development/devenv.md
+++ b/doc/book/src/development/devenv.md
@@ -1,17 +1,145 @@
# Setup your development environment
-We propose the following quickstart to setup a full dev. environment as quickly as possible:
+Depending on your tastes, you can bootstrap your development environment in a traditional Rust way or through Nix.
- 1. Setup a rust/cargo environment. eg. `dnf install rust cargo`
- 2. Install awscli v2 by following the guide [here](https://docs.aws.amazon.com/cli/latest/userguide/install-cliv2.html).
- 3. Run `cargo build` to build the project
- 4. Run `./script/dev-cluster.sh` to launch a test cluster (feel free to read the script)
- 5. Run `./script/dev-configure.sh` to configure your test cluster with default values (same datacenter, 100 tokens)
- 6. Run `./script/dev-bucket.sh` to create a bucket named `eprouvette` and an API key that will be stored in `/tmp/garage.s3`
- 7. Run `source ./script/dev-env-aws.sh` to configure your CLI environment
- 8. You can use `garage` to manage the cluster. Try `garage --help`.
- 9. You can use the `awsgrg` alias to add, remove, and delete files. Try `awsgrg help`, `awsgrg cp /proc/cpuinfo s3://eprouvette/cpuinfo.txt`, or `awsgrg ls s3://eprouvette`. `awsgrg` is a wrapper on the `aws s3` command pre-configured with the previously generated API key (the one in `/tmp/garage.s3`) and localhost as the endpoint.
+## The Nix way
-Now you should be ready to start hacking on garage!
+Nix is a generic package manager we use to precisely define our development environment.
+Instructions on how to install it are given on their [Download page](https://nixos.org/download.html).
+Check that your installation is working by running the following commands:
+```
+nix-shell --version
+nix-build --version
+nix-env --version
+```
+
+Now, you can clone our git repository (run `nix-env -iA git` if you do not have git yet):
+
+```bash
+git clone https://git.deuxfleurs.fr/Deuxfleurs/garage
+cd garage
+```
+
+*Optionnaly, you can use our nix.conf file to speed up compilations:*
+
+```bash
+sudo mkdir -p /etc/nix
+sudo cp nix/nix.conf /etc/nix/nix.conf
+sudo killall nix-daemon
+```
+
+Now you can enter our nix-shell, all the required packages will be downloaded but they will not pollute your environment outside of the shell:
+
+```bash
+nix-shell
+```
+
+You can use the traditionnal Rust development workflow:
+
+```bash
+cargo build # compile the project
+cargo run # execute the project
+cargo test # run the tests
+cargo fmt # format the project, run it before any commit!
+cargo clippy # run the linter, run it before any commit!
+```
+
+You can build the project with Nix by running:
+
+```bash
+nix-build
+```
+
+You can parallelize the build (if you use our nix.conf file, it is already automatically done).
+To use all your cores when building a derivation use `-j`, and to build multiple derivations at once use `--max-jobs`.
+The special value `auto` will be replaced by the number of cores of your computer.
+An example:
+
+```bash
+nix-build -j $(nproc) --max-jobs auto
+```
+
+Our build has multiple parameters you might want to set:
+ - `release` build with release optimisations instead of debug
+ - `target allows` for cross compilation
+ - `compileMode` can be set to test or bench to build a unit test runner
+ - `git_version` to inject the hash to display when running `garage stats`
+
+An example:
+
+```bash
+nix-build \
+ --arg release true \
+ --argstr target x86_64-unknown-linux-musl \
+ --argstr compileMode build \
+ --git_version $(git rev-parse HEAD)
+```
+
+*The result is located in `result/bin`. You can pass arguments to cross compile: check `.drone.yml` for examples.*
+
+If you modify a `Cargo.toml` or regenerate any `Cargo.lock`, you must run `cargo2nix`:
+
+```
+cargo2nix -f
+```
+
+Many tools like rclone, `mc` (minio-client), or `aws` (awscliv2) will be available in your environment and will be useful to test Garage.
+
+**This is the recommended method.**
+
+## The Rust way
+
+You need a Rust distribution installed on your computer.
+The most simple way is to install it from [rustup](https://rustup.rs).
+Please avoid using your package manager to install Rust as some tools might be outdated or missing.
+
+Now, check your Rust distribution works by running the following commands:
+
+```bash
+rustc --version
+cargo --version
+rustfmt --version
+clippy-driver --version
+```
+
+Now, you need to clone our git repository ([how to install git](https://git-scm.com/downloads)):
+
+```bash
+git clone https://git.deuxfleurs.fr/Deuxfleurs/garage
+cd garage
+```
+
+You can now use the following commands:
+
+```bash
+cargo build # compile the project
+cargo run # execute the project
+cargo test # run the tests
+cargo fmt # format the project, run it before any commit!
+cargo clippy # run the linter, run it before any commit!
+```
+
+This is specific to our project, but you will need one last tool, `cargo2nix`.
+To install it, run:
+
+```bash
+cargo install --git https://github.com/superboum/cargo2nix --branch main cargo2nix
+```
+
+You must use it every time you modify a `Cargo.toml` or regenerate a `Cargo.lock` file as follow:
+
+```bash
+cargo build # Rebuild Cargo.lock if needed
+cargo2nix -f
+```
+
+It will output a `Cargo.nix` file which is a specific `Cargo.lock` file dedicated to Nix that is required by our CI
+which means you must include it in your commits.
+
+Later, to use our scripts and integration tests, you might need additional tools.
+These tools are listed at the end of the `shell.nix` package in the `nativeBuildInputs` part.
+It is up to you to find a way to install the ones you need on your computer.
+
+**A global drawback of this method is that it is up to you to adapt your environment to the one defined in the Nix files.**
diff --git a/doc/book/src/development/miscellaneous_notes.md b/doc/book/src/development/miscellaneous_notes.md
new file mode 100644
index 00000000..c259cba1
--- /dev/null
+++ b/doc/book/src/development/miscellaneous_notes.md
@@ -0,0 +1,134 @@
+# Miscellaneous Notes
+
+## Quirks about cargo2nix/rust in Nix
+
+If you use submodules in your crate (like `crdt` and `replication` in `garage_table`), you must list them in `default.nix`
+
+The Windows target does not work. it might be solvable through [overrides](https://github.com/cargo2nix/cargo2nix/blob/master/overlay/overrides.nix). Indeed, we pass `x86_64-pc-windows-gnu` but mingw need `x86_64-w64-mingw32`
+
+We have a simple [PR on cargo2nix](https://github.com/cargo2nix/cargo2nix/pull/201) that fixes critical bugs but the project does not seem very active currently. We must use [my patched version of cargo2nix](https://github.com/superboum/cargo2nix) to enable i686 and armv6l compilation. We might need to contribute to cargo2nix in the future.
+
+
+## Nix
+
+Nix has no armv7 + musl toolchains but armv7l is backward compatible with armv6l.
+
+Signing keys are generated with:
+
+```
+nix-store --generate-binary-cache-key nix.web.deuxfleurs.fr cache-priv-key.pem cache-pub-key.pem
+```
+
+We copy the secret key in our nix folder:
+
+```
+cp cache-priv-key.pem /etc/nix/signing-key.sec
+```
+
+Manually sign
+
+We can sign the whole store with:
+
+```
+nix sign-paths --all -k /etc/nix/signing-key.sec
+```
+
+Or simply the current package and its dependencies with:
+
+```
+nix sign-paths --recursive -k /etc/nix/signing-key.sec
+```
+
+Setting a key in `nix.conf` will do the signature at build time automatically without additional commands, edit the `nix.conf` of your builder:
+
+```toml
+secret-key-files = /etc/nix/signing-key.sec
+max-jobs = auto
+cores = 8
+```
+
+Now you are ready to build your packages:
+
+```bash
+cat > $HOME/.awsrc <<EOF
+export AWS_ACCESS_KEY_ID="xxx"
+export AWS_SECRET_ACCESS_KEY="xxx"
+EOF
+
+# source each time you want to send on the cache
+source ~/.awsrc
+
+# copy garage build dependencies (and not only the output)
+nix-build
+nix-store -qR --include-outputs $(nix-instantiate default.nix)
+ | xargs nix copy --to 's3://nix?endpoint=garage.deuxfleurs.fr&region=garage'
+
+# copy shell dependencies
+nix-build shell.nix -A inputDerivation
+nix copy $(nix-store -qR result/) --to 's3://nix?endpoint=garage.deuxfleurs.fr&region=garage'
+```
+
+More example of nix-copy
+
+```
+# nix-build produces a result/ symlink
+nix copy result/ --to 's3://nix?endpoint=garage.deuxfleurs.fr&region=garage'
+
+# alternative ways to use nix copy
+nix copy nixpkgs.garage --to ...
+nix copy /nix/store/3rbb9qsc2w6xl5xccz5ncfhy33nzv3dp-crate-garage-0.3.0 --to ...
+```
+
+
+Clear the cache:
+
+```bash
+mc rm --recursive --force garage/nix/
+```
+
+---
+
+A desirable `nix.conf` for a consumer:
+
+```toml
+substituters = https://cache.nixos.org https://nix.web.deuxfleurs.fr
+trusted-public-keys = cache.nixos.org-1:6NCHdD59X431o0gWypbMrAURkbJ16ZPMQFGspcDShjY= nix.web.deuxfleurs.fr:eTGL6kvaQn6cDR/F9lDYUIP9nCVR/kkshYfLDJf1yKs=
+```
+
+And now, whenever you run a command like:
+
+```
+nix-shell
+nix-build
+```
+
+Our cache will be checked.
+
+### Some references about Nix
+
+
+ - https://doc.rust-lang.org/nightly/rustc/platform-support.html
+ - https://nix.dev/tutorials/cross-compilation
+ - https://nixos.org/manual/nix/unstable/package-management/s3-substituter.html
+ - https://fzakaria.com/2020/09/28/nix-copy-closure-your-nix-shell.html
+ - http://www.lpenz.org/articles/nixchannel/index.html
+
+
+## Drone
+
+Do not try to set a build as trusted from the interface or the CLI tool,
+your request would be ignored. Instead, directly edit the database (table `repos`, column `repo_trusted`).
+
+Drone can do parallelism both at the step and the pipeline level. At the step level, parallelism is restricted to the same runner.
+
+## Building Docker containers
+
+We were:
+ - Unable to use the official Docker plugin because
+ - it requires to mount docker socket in the container but it is not recommended
+ - you cant set the platform when building
+ - Unable to use buildah because it needs `CLONE_USERNS` capability
+ - Unable to use the kaniko plugin for Drone as we can't set the target platform
+ - Unable to use the kaniko container provided by Google as we can't run arbitrary logic: we need to put our secret in .docker/config.json.
+
+Finally we chose to build kaniko through nix and use it in a `nix-shell`.
diff --git a/doc/book/src/development/release_process.md b/doc/book/src/development/release_process.md
new file mode 100644
index 00000000..8591fd9f
--- /dev/null
+++ b/doc/book/src/development/release_process.md
@@ -0,0 +1,184 @@
+# Release process
+
+Before releasing a new version of Garage, our code pass through a succession of checks and transformations.
+We define them as our release process.
+
+## Trigger and classify a release
+
+While we run some tests on every commits, we do not make a release for all of them.
+
+A release can be triggered manually by "promoting" a successful build.
+Otherwise, every weeks, a release build is triggered on the `main` branch.
+
+If the build is from a tag following the regex: `v[0-9]+\.[0-9]+\.[0-9]+`, it will be listed as stable.
+If it is a tag but with a different format, it will be listed as Extra.
+Otherwise, if it is a commit, it will be listed as development.
+This logic is defined in `nix/build_index.nix`.
+
+## Testing
+
+For each commit, we first pass the code to a formatter (rustfmt) and a linter (clippy).
+Then we try to build it in debug mode and run both unit tests and our integration tests.
+
+Additionnaly, when releasing, our integration tests are run on the release build for amd64 and i686.
+
+## Generated Artifacts
+
+We generate the following binary artifacts for now:
+ - **architecture**: amd64, i686, aarch64, armv6
+ - **os**: linux
+ - **format**: static binary, docker container
+
+Additionnaly we also build two web pages:
+ - the documentation (this website)
+ - [the release page](https://garagehq.deuxfleurs.fr/releases.html)
+
+We publish the static binaries on our own garage cluster (you can access them through the releases page)
+and the docker containers on Docker Hub.
+
+## Automation
+
+We automated our release process with Nix and Drone to make it more reliable.
+Here we describe how we have done in case you want to debug or improve it.
+
+### Caching build steps
+
+To speed up the CI, we use the caching feature provided by Nix.
+
+You can benefit from it by using our provided `nix.conf` as recommended or by simply adding the following lines to your file:
+
+```toml
+substituters = https://cache.nixos.org https://nix.web.deuxfleurs.fr
+trusted-public-keys = cache.nixos.org-1:6NCHdD59X431o0gWypbMrAURkbJ16ZPMQFGspcDShjY= nix.web.deuxfleurs.fr:eTGL6kvaQn6cDR/F9lDYUIP9nCVR/kkshYfLDJf1yKs=
+```
+
+Sending to the cache is done through `nix copy`, for example:
+
+```bash
+nix copy --to 's3://nix?endpoint=garage.deuxfleurs.fr&region=garage&secret-key=/etc/nix/signing-key.sec' result
+```
+
+*Note that you need the signing key. In our case, it is stored as a secret in Drone.*
+
+The previous command will only send the built packet and not its dependencies.
+To send its dependency, a tool named `nix-copy-closure` has been created but it is not compatible with the S3 protocol.
+
+Instead, you can use the following commands to list all the runtime dependencies:
+
+```bash
+nix copy \
+ --to 's3://nix?endpoint=garage.deuxfleurs.fr&region=garage&secret-key=/etc/nix/signing-key.sec' \
+ $(nix-store -qR result/)
+```
+
+*We could also write this expression with xargs but this tool is not available in our container.*
+
+But in certain cases, we want to cache compile time dependencies also.
+For example, the Nix project does not provide binaries for cross compiling to i686 and thus we need to compile gcc on our own.
+We do not want to compile gcc each time, so even if it is a compile time dependency, we want to cache it.
+
+This time, the command is a bit more involved:
+
+```bash
+nix copy --to \
+ 's3://nix?endpoint=garage.deuxfleurs.fr&region=garage&secret-key=/etc/nix/signing-key.sec' \
+ $(nix-store -qR --include-outputs \
+ $(nix-instantiate))
+```
+
+This is the command we use in our CI as we expect the final binary to change, so we mainly focus on
+caching our development dependencies.
+
+*Currently there is no automatic garbage collection of the cache: we should monitor its growth.
+Hopefully, we can erase it totally without breaking any build, the next build will only be slower.*
+
+To erase the cache:
+
+```
+mc rm --recursive --force 'garage/nix/*'
+```
+
+### Publishing Garage
+
+We defined our publishing logic in Nix, mostly as shell hooks.
+You can inspect them in `shell.nix` to see exactly how.
+Here, we will give a quick explanation on how to use them to manually publish a release.
+
+Supposing you just have built garage as follow:
+
+```bash
+nix-build --arg release true
+```
+
+To publish a static binary in `result/bin` on garagehq, run:
+
+```bash
+export AWS_ACCESS_KEY_ID=xxx
+export AWS_SECRET_ACCESS_KEY=xxx
+export DRONE_TAG=handcrafted-1.0.0 # or DRONE_COMMIT
+export TARGET=x86_64-unknown-linux-musl
+
+nix-shell --run to_s3
+```
+
+To create and publish a docker container, run:
+
+```bash
+export DOCKER_AUTH='{ "auths": { "https://index.docker.io/v1/": { "auth": "xxxx" }}}'
+export DOCKER_PLATFORM='linux/amd64' # check GOARCH and GOOS from golang.org
+export CONTAINER_NAME='me/amd64_garage'
+export CONTAINER_TAG='handcrafted-1.0.0'
+
+nix-shell --run to_docker
+```
+
+To rebuild the release page, run:
+```bash
+export AWS_ACCESS_KEY_ID=xxx
+export AWS_SECRET_ACCESS_KEY=xxx
+
+nix-shell --run refresh_index
+```
+
+If you want to compile for different architectures, you will need to repeat all these commands for each architecture.
+
+**In practise, and except for debugging, you will never directly run these commands. Release is handled by drone**
+
+### Drone
+
+Our instance is available at [https://drone.deuxfleurs.fr](https://drone.deuxfleurs.fr).
+You need an account on [https://git.deuxfleurs.fr](https://git.deuxfleurs.fr) to use it.
+
+**Drone CLI** - Drone has a CLI tool to interact with.
+It can be downloaded from its Github [release page](https://github.com/drone/drone-cli/releases).
+
+To communicate with our instance, you must setup some environment variables.
+You can get them from your [Account Settings](https://drone.deuxfleurs.fr/account).
+
+To make drone easier to use, you could create a `~/.dronerc` that you could source each time you want to use it.
+
+```
+export DRONE_SERVER=https://drone.deuxfleurs.fr
+export DRONE_TOKEN=xxx
+drone info
+```
+
+The CLI tool is very self-discoverable, just append `--help` to each subcommands.
+Start with:
+
+```bash
+drone --help
+```
+
+**.drone.yml** - The builds steps are defined in `.drone.yml`.
+You can not edit this file without resigning it.
+
+To sign it, you must be a maintainer and then run:
+
+```bash
+drone sign --save Deuxfleurs/garage
+```
+
+Looking at the file, you will see that most of the commands are `nix-shell` and `nix-build` commands with various parameters.
+
+
diff --git a/doc/book/src/development/scripts.md b/doc/book/src/development/scripts.md
new file mode 100644
index 00000000..387cb349
--- /dev/null
+++ b/doc/book/src/development/scripts.md
@@ -0,0 +1,113 @@
+# Development scripts
+
+We maintain a `script/` folder that contains some useful script to ease testing on Garage.
+
+A fully integrated script, `test-smoke.sh`, runs some basic tests on various tools such as minio client, awscli and rclone.
+To run it, enter a `nix-shell` (or install all required tools) and simply run:
+
+```bash
+nix-build # or cargo build
+./script/test-smoke.sh
+```
+
+If something fails, you can find useful logs in `/tmp/garage.log`.
+You can inspect the generated configuration and local data created by inspecting your `/tmp` directory:
+the script creates files and folder prefixed with the name "garage".
+
+## Bootstrapping a test cluster
+
+Under the hood `test-smoke.sh` uses multiple helpers scripts you can also run in case you want to manually test Garage.
+In this section, we introduce 3 scripts to quickly bootstrap a full test cluster with 3 instances.
+
+### 1. Start each daemon
+
+```bash
+./script/dev-cluster.sh
+```
+
+This script spawns 3 Garage instances with 3 configuration files.
+You can inspect the detailed configuration, including ports, by inspecting `/tmp/config.1` (change 1 by the instance number you want).
+
+This script also spawns a simple HTTPS reverse proxy through `socat` for the S3 endpoint that listens on port `4443`.
+Some libraries might require a TLS endpoint to work, refer to our issue [#64](https://git.deuxfleurs.fr/Deuxfleurs/garage/issues/64) for more detailed information on this subject.
+
+This script covers the [Launching the garage server](/quick_start/index.html#launching-the-garage-server) section of our Quick start page.
+
+### 2. Make them join the cluster
+
+```bash
+./script/dev-configure.sh
+```
+
+This script will configure each instance by assigning them a zone (`dc1`) and a weight (`1`).
+
+This script covers the [Configuring your Garage node](/quick_start/index.html#configuring-your-garage-node) section of our Quick start page.
+
+### 3. Create a key and a bucket
+
+```bash
+./script/dev-bucket.sh
+```
+
+This script will create a bucket named `eprouvette` with a key having read and write rights on this bucket.
+The key is stored in a filed named `/tmp/garage.s3` and can be used by the following tools to pre-configure them.
+
+This script covers the [Creating buckets and keys](/quick_start/index.html#creating-buckets-and-keys) section of our Quick start page.
+
+## Handlers for generic tools
+
+We provide wrappers for some CLI tools that configure themselves for your development cluster.
+They are meant to save you some configuration time as to use them, you are only required to source the right file.
+
+### awscli
+
+```bash
+source ./script/dev-env-aws.sh
+
+# some examples
+aws s3 ls s3://eprouvette
+aws s3 cp /proc/cpuinfo s3://eprouvette/cpuinfo.txt
+```
+
+### minio-client
+
+
+```bash
+source ./script/dev-env-mc.sh
+
+# some examples
+mc ls garage/
+mc cp /proc/cpuinfo garage/eprouvette/cpuinfo.txt
+```
+
+### rclone
+
+```bash
+source ./script/dev-env-rclone.sh
+
+# some examples
+rclone lsd garage:
+rclone copy /proc/cpuinfo garage:eprouvette/cpuinfo.txt
+```
+
+### s3cmd
+
+```bash
+source ./script/dev-env-s3cmd.sh
+
+# some examples
+s3cmd ls
+s3cmd put /proc/cpuinfo s3://eprouvette/cpuinfo.txt
+```
+
+### duck
+
+*Warning! Duck is not yet provided by nix-shell.*
+
+```bash
+source ./script/dev-env-duck.sh
+
+# some examples
+duck --list garage:/
+duck --upload garage:/eprouvette/ /proc/cpuinfo
+```
diff --git a/make_docker.sh b/make_docker.sh
deleted file mode 100755
index c338d0a6..00000000
--- a/make_docker.sh
+++ /dev/null
@@ -1,20 +0,0 @@
-#!/bin/sh
-
-BIN=target/release/garage
-DOCKER=lxpz/garage_amd64
-
-TAG=$1
-if [ -z "$1" ]; then
- echo "Usage: $0 <tag>"
- exit 1
-fi
-
-RUSTFLAGS="-C link-arg=-fuse-ld=lld -C target-cpu=x86-64 -C target-feature=+sse2" cargo build --release --no-default-features
-cp $BIN $BIN.stripped
-strip $BIN.stripped
-
-docker pull archlinux:latest
-docker build -t $DOCKER:$TAG .
-docker push $DOCKER:$TAG
-docker tag $DOCKER:$TAG $DOCKER:latest
-docker push $DOCKER:latest
diff --git a/nix/build_index.nix b/nix/build_index.nix
new file mode 100644
index 00000000..5107324e
--- /dev/null
+++ b/nix/build_index.nix
@@ -0,0 +1,146 @@
+{
+ path ? "/../aws-list.txt",
+}:
+
+with import ./common.nix;
+let
+ pkgs = import pkgsSrc {};
+ lib = pkgs.lib;
+
+ /* Converts a key list and a value list to a set
+
+ Example:
+ listToSet [ "name" "version" ] [ "latex" "3.14" ]
+ => { name = "latex"; version = "3.14"; }
+ */
+ listToSet = keys: values:
+ builtins.listToAttrs
+ (lib.zipListsWith
+ (a: b: { name = a; value = b; })
+ keys
+ values);
+
+ /* Says if datetime a is more recent than datetime b
+
+ Example:
+ cmpDate { date = "2021-09-10"; time = "22:12:15"; } { date = "2021-02-03"; time = "23:54:12"; }
+ => true
+ */
+ cmpDate = a: b:
+ let da = (builtins.head a.builds).date;
+ db = (builtins.head b.builds).date;
+ in
+ if da == db then (builtins.head a.builds).time > (builtins.head b.builds).time
+ else da > db;
+
+ /* Pretty platforms */
+ prettyPlatform = name:
+ if name == "aarch64-unknown-linux-musl" then "linux/arm64"
+ else if name == "armv6l-unknown-linux-musleabihf" then "linux/arm"
+ else if name == "x86_64-unknown-linux-musl" then "linux/amd64"
+ else if name == "i686-unknown-linux-musl" then "linux/386"
+ else name;
+
+ /* Parsing */
+ list = builtins.readFile (./. + path);
+ entries = lib.splitString "\n" list;
+
+ elems = builtins.filter
+ (e: (builtins.length e) == 4)
+ (map
+ (x: builtins.filter (e: e != "") (lib.splitString " " x))
+ entries);
+
+ keys = ["date" "time" "size" "path"];
+ parsed = map (entry: listToSet keys entry) elems;
+
+ subkeys = ["root" "version" "platform" "binary" ];
+ builds = map (entry: entry // listToSet subkeys (lib.splitString "/" entry.path)) parsed;
+
+ /* Aggregation */
+ builds_per_version = lib.foldl (acc: v: acc // { ${v.version} = if builtins.hasAttr v.version acc then acc.${v.version} ++ [ v ] else [ v ]; }) {} builds;
+
+ versions = builtins.attrNames builds_per_version;
+ versions_release = builtins.filter (x: builtins.match "v[0-9]+\.[0-9]+\.[0-9]+(\.[0-9]+)?" x != null) versions;
+ versions_commit = builtins.filter (x: builtins.match "[0-9a-f]{40}" x != null) versions;
+ versions_extra = lib.subtractLists (versions_release ++ versions_commit) versions;
+
+ sorted_builds = [
+ {
+ name = "Release";
+ hide = false;
+ type = "tag";
+ description = "Release builds are the official builds, they are tailored for productions and are the most tested.";
+ builds = builtins.sort (a: b: a.version > b.version) (map (x: { version = x; builds = builtins.getAttr x builds_per_version; }) versions_release);
+ }
+ {
+ name = "Extra";
+ hide = true;
+ type = "tag";
+ description = "Extra builds are built on demand to test a specific feature or a specific need.";
+ builds = builtins.sort cmpDate (map (x: { version = x; builds = builtins.getAttr x builds_per_version; }) versions_extra);
+ }
+ {
+ name = "Development";
+ hide = true;
+ type = "commit";
+ description = "Development builds are built periodically. Use them if you want to test a specific feature that is not yet released.";
+ builds = builtins.sort cmpDate (map (x: { version = x; builds = builtins.getAttr x builds_per_version; }) versions_commit);
+ }
+ ];
+
+in
+ pkgs.writeText "index.html" ''
+<!doctype html>
+<html>
+ <head>
+ <meta charset="utf-8" />
+ <title>Garage releases</title>
+ <style>
+ html, body { margin:0; padding: 0 }
+ body { font-family: 'Helvetica', Sans; }
+ section { margin: 1rem; }
+ ul { padding:0; margin: 0.2rem }
+ li {
+ border-radius: 0.2rem;
+ display: inline;
+ border: 2px #0b5d83 solid;
+ padding: 0.5rem;
+ line-height: 3rem;
+ color: #0b5d83;
+ }
+ li:hover { background-color: #0b5d83; color: #fff; }
+ li a, li a:hover { color: inherit; text-decoration: none }
+ </style>
+ </head>
+ <body>
+ ${ builtins.toString (lib.forEach sorted_builds (r: ''
+ <section>
+ <h2>${r.name} builds</h2>
+
+ <p>${r.description}</p>
+
+ ${if r.hide then "<details><summary>Show ${r.name} builds</summary>" else ""}
+ ${ builtins.toString (lib.forEach r.builds (x: ''
+ <h3> ${x.version} (${(builtins.head x.builds).date}) </h3>
+ <p>See this build on</p>
+ <p> Binaries:
+ <ul>
+ ${ builtins.toString (lib.forEach x.builds (b: ''
+ <li><a href="/${b.path}">${prettyPlatform b.platform}</a></li>
+ ''))}
+ </ul></p>
+ <p> Sources:
+ <ul>
+ <li><a href="https://git.deuxfleurs.fr/Deuxfleurs/garage/src/${r.type}/${x.version}">gitea</a></li>
+ <li><a href="https://git.deuxfleurs.fr/Deuxfleurs/garage/archive/${x.version}.zip">.zip</a></li>
+ <li><a href="https://git.deuxfleurs.fr/Deuxfleurs/garage/archive/${x.version}.tar.gz">.tar.gz</a></li>
+ </ul></p>
+ '')) }
+ ${ if builtins.length r.builds == 0 then "<em>There is no build for this category</em>" else "" }
+ ${if r.hide then "</details>" else ""}
+ </section>
+ ''))}
+ </body>
+</html>
+''
diff --git a/nix/common.nix b/nix/common.nix
new file mode 100644
index 00000000..aee38bd8
--- /dev/null
+++ b/nix/common.nix
@@ -0,0 +1,27 @@
+rec {
+ /*
+ * Fixed dependencies
+ */
+ pkgsSrc = fetchTarball {
+ # As of 2021-10-04
+ url ="https://github.com/NixOS/nixpkgs/archive/b27d18a412b071f5d7991d1648cfe78ee7afe68a.tar.gz";
+ sha256 = "1xy9zpypqfxs5gcq5dcla4bfkhxmh5nzn9dyqkr03lqycm9wg5cr";
+ };
+ cargo2nixSrc = fetchGit {
+ # As of 2021-10-06
+ url = "https://github.com/superboum/cargo2nix";
+ rev = "1364752cd784764db2ef5b1e1248727cebfae2ce";
+ };
+ rustOverlaySrc = fetchGit {
+ # As of 2021-10-05
+ url = "https://github.com/oxalica/rust-overlay";
+ rev = "9c2fc6a62ccbc6f420d71ecac6bf0b84dbbee64f";
+ };
+
+ /*
+ * Shared objects
+ */
+ rustOverlay = import rustOverlaySrc;
+ cargo2nix = import cargo2nixSrc;
+ cargo2nixOverlay = import "${cargo2nixSrc}/overlay";
+}
diff --git a/nix/kaniko.nix b/nix/kaniko.nix
new file mode 100644
index 00000000..140328b8
--- /dev/null
+++ b/nix/kaniko.nix
@@ -0,0 +1,23 @@
+pkgs:
+pkgs.buildGoModule rec {
+ pname = "kaniko";
+ version = "1.6.0";
+
+ src = pkgs.fetchFromGitHub {
+ owner = "GoogleContainerTools";
+ repo = "kaniko";
+ rev = "v${version}";
+ sha256 = "1fnclr556avxay6pvgw5ya3xbxfnf2gv4njq2hr4fd6fcjyslq5h";
+ };
+
+ vendorSha256 = null;
+
+ checkPhase = "true";
+
+ meta = with pkgs.lib; {
+ description = "kaniko is a tool to build container images from a Dockerfile, inside a container or Kubernetes cluster.";
+ homepage = "https://github.com/GoogleContainerTools/kaniko";
+ license = licenses.asl20;
+ platforms = platforms.linux;
+ };
+}
diff --git a/nix/nix.conf b/nix/nix.conf
new file mode 100644
index 00000000..8764eb3e
--- /dev/null
+++ b/nix/nix.conf
@@ -0,0 +1,7 @@
+substituters = https://cache.nixos.org https://nix.web.deuxfleurs.fr
+trusted-public-keys = cache.nixos.org-1:6NCHdD59X431o0gWypbMrAURkbJ16ZPMQFGspcDShjY= nix.web.deuxfleurs.fr:eTGL6kvaQn6cDR/F9lDYUIP9nCVR/kkshYfLDJf1yKs=
+max-jobs = auto
+cores = 4
+
+# required for containers
+sandbox = false
diff --git a/script/builder_image/Dockerfile b/script/builder_image/Dockerfile
deleted file mode 100644
index 908c7e3c..00000000
--- a/script/builder_image/Dockerfile
+++ /dev/null
@@ -1,7 +0,0 @@
-FROM rust:buster
-RUN apt-get update && \
- apt-get install --yes libsodium-dev awscli python-pip wget rclone openssl socat && \
- rm -rf /var/lib/apt/lists/*
-RUN wget https://dl.min.io/client/mc/release/linux-amd64/mc -O /usr/local/bin/mc && chmod +x /usr/local/bin/mc
-RUN rustup component add rustfmt clippy
-RUN pip install s3cmd
diff --git a/script/builder_image/Makefile b/script/builder_image/Makefile
deleted file mode 100644
index 00b0f6c7..00000000
--- a/script/builder_image/Makefile
+++ /dev/null
@@ -1,8 +0,0 @@
-DOCKER=lxpz/garage_builder_amd64
-
-docker:
- docker build -t $(DOCKER):$(TAG) .
- docker push $(DOCKER):$(TAG)
- docker tag $(DOCKER):$(TAG) $(DOCKER):latest
- docker push $(DOCKER):latest
-
diff --git a/script/dev-bucket.sh b/script/dev-bucket.sh
index 8a3587be..05d8c105 100755
--- a/script/dev-bucket.sh
+++ b/script/dev-bucket.sh
@@ -6,7 +6,8 @@ SCRIPT_FOLDER="`dirname \"$0\"`"
REPO_FOLDER="${SCRIPT_FOLDER}/../"
GARAGE_DEBUG="${REPO_FOLDER}/target/debug/"
GARAGE_RELEASE="${REPO_FOLDER}/target/release/"
-PATH="${GARAGE_DEBUG}:${GARAGE_RELEASE}:$PATH"
+NIX_RELEASE="${REPO_FOLDER}/result/bin/"
+PATH="${GARAGE_DEBUG}:${GARAGE_RELEASE}:${NIX_RELEASE}:$PATH"
garage bucket create eprouvette
KEY_INFO=`garage key new --name opérateur`
diff --git a/script/dev-cluster.sh b/script/dev-cluster.sh
index bb5f9a08..0afdd97c 100755
--- a/script/dev-cluster.sh
+++ b/script/dev-cluster.sh
@@ -6,7 +6,8 @@ SCRIPT_FOLDER="`dirname \"$0\"`"
REPO_FOLDER="${SCRIPT_FOLDER}/../"
GARAGE_DEBUG="${REPO_FOLDER}/target/debug/"
GARAGE_RELEASE="${REPO_FOLDER}/target/release/"
-PATH="${GARAGE_DEBUG}:${GARAGE_RELEASE}:$PATH"
+NIX_RELEASE="${REPO_FOLDER}/result/bin/"
+PATH="${GARAGE_DEBUG}:${GARAGE_RELEASE}:${NIX_RELEASE}:$PATH"
FANCYCOLORS=("41m" "42m" "44m" "45m" "100m" "104m")
export RUST_BACKTRACE=1
@@ -63,7 +64,13 @@ fi
(garage server -c /tmp/config.$count.toml 2>&1|while read r; do echo -en "$LABEL $r\n"; done) &
done
+RETRY=120
until garage status 2>&1|grep -q Healthy ; do
+ (( RETRY-- ))
+ if (( RETRY <= 0 )); then
+ echo -en "${MAIN_LABEL} Garage did not start"
+ exit 1
+ fi
echo -en "${MAIN_LABEL} cluster starting...\n"
sleep 1
done
diff --git a/script/dev-configure.sh b/script/dev-configure.sh
index bc8352d8..fdae959b 100755
--- a/script/dev-configure.sh
+++ b/script/dev-configure.sh
@@ -6,10 +6,17 @@ SCRIPT_FOLDER="`dirname \"$0\"`"
REPO_FOLDER="${SCRIPT_FOLDER}/../"
GARAGE_DEBUG="${REPO_FOLDER}/target/debug/"
GARAGE_RELEASE="${REPO_FOLDER}/target/release/"
-PATH="${GARAGE_DEBUG}:${GARAGE_RELEASE}:$PATH"
+NIX_RELEASE="${REPO_FOLDER}/result/bin/"
+PATH="${GARAGE_DEBUG}:${GARAGE_RELEASE}:${NIX_RELEASE}:$PATH"
sleep 5
+RETRY=120
until garage status 2>&1|grep -q Healthy ; do
+ (( RETRY-- ))
+ if (( RETRY <= 0 )); then
+ echo "garage did not start in time, failing."
+ exit 1
+ fi
echo "cluster starting..."
sleep 1
done
diff --git a/script/test-smoke.sh b/script/test-smoke.sh
index 0417b2af..335d55e9 100755
--- a/script/test-smoke.sh
+++ b/script/test-smoke.sh
@@ -8,13 +8,13 @@ SCRIPT_FOLDER="`dirname \"$0\"`"
REPO_FOLDER="${SCRIPT_FOLDER}/../"
GARAGE_DEBUG="${REPO_FOLDER}/target/debug/"
GARAGE_RELEASE="${REPO_FOLDER}/target/release/"
-PATH="${GARAGE_DEBUG}:${GARAGE_RELEASE}:$PATH"
+NIX_RELEASE="${REPO_FOLDER}/result/bin/"
+PATH="${GARAGE_DEBUG}:${GARAGE_RELEASE}:${NIX_RELEASE}:$PATH"
# @FIXME Duck is not ready for testing, we have a bug
SKIP_DUCK=1
echo "⏳ Setup"
-cargo build
${SCRIPT_FOLDER}/dev-clean.sh
${SCRIPT_FOLDER}/dev-cluster.sh > /tmp/garage.log 2>&1 &
${SCRIPT_FOLDER}/dev-configure.sh
diff --git a/shell.nix b/shell.nix
new file mode 100644
index 00000000..f407ed95
--- /dev/null
+++ b/shell.nix
@@ -0,0 +1,69 @@
+{
+ system ? builtins.currentSystem,
+ crossSystem ? null,
+ rust ? true,
+ integration ? true,
+ release ? true,
+}:
+
+with import ./nix/common.nix;
+
+let
+ pkgs = import pkgsSrc {
+ inherit system crossSystem;
+ overlays = [ cargo2nixOverlay rustOverlay ];
+ };
+ rustDist = pkgs.buildPackages.rust-bin.stable.latest.default;
+ kaniko = (import ./nix/kaniko.nix) pkgs;
+
+in
+
+pkgs.mkShell {
+ shellHook = ''
+function to_s3 {
+ aws \
+ --endpoint-url https://garage.deuxfleurs.fr \
+ --region garage \
+ s3 cp \
+ ./result/bin/garage \
+ s3://garagehq.deuxfleurs.fr/_releases/''${DRONE_TAG:-$DRONE_COMMIT}/''${TARGET}/garage
+}
+
+function to_docker {
+ executor \
+ --force \
+ --customPlatform="''${DOCKER_PLATFORM}" \
+ --destination "''${CONTAINER_NAME}:''${CONTAINER_TAG}" \
+ --context dir://`pwd` \
+ --verbosity=debug
+}
+
+function refresh_index {
+ aws \
+ --endpoint-url https://garage.deuxfleurs.fr \
+ --region garage \
+ s3 ls \
+ --recursive \
+ s3://garagehq.deuxfleurs.fr/_releases/ \
+ > aws-list.txt
+
+ nix-build nix/build_index.nix
+
+ aws \
+ --endpoint-url https://garage.deuxfleurs.fr \
+ --region garage \
+ s3 cp \
+ --content-type "text/html" \
+ result \
+ s3://garagehq.deuxfleurs.fr/_releases.html
+}
+ '';
+
+ nativeBuildInputs =
+ (if rust then [ rustDist (pkgs.callPackage cargo2nix {}).package ] else [])
+ ++
+ (if integration then [ pkgs.s3cmd pkgs.awscli2 pkgs.minio-client pkgs.rclone pkgs.socat pkgs.psmisc pkgs.which ] else [])
+ ++
+ (if release then [ pkgs.awscli2 kaniko ] else [])
+ ;
+}
diff --git a/src/garage/admin_rpc.rs b/src/garage/admin_rpc.rs
index 19cba3b6..fe5a9d88 100644
--- a/src/garage/admin_rpc.rs
+++ b/src/garage/admin_rpc.rs
@@ -423,11 +423,11 @@ impl AdminRpcHandler {
writeln!(
&mut ret,
"\nGarage version: {}",
- git_version::git_version!(
+ option_env!("GIT_VERSION").unwrap_or(git_version::git_version!(
prefix = "git:",
cargo_prefix = "cargo:",
fallback = "unknown"
- )
+ ))
)
.unwrap();