diff --git a/doc/manual/packages/s3-substituter.xml b/doc/manual/packages/s3-substituter.xml
new file mode 100644
index 000000000..9fe137d72
--- /dev/null
+++ b/doc/manual/packages/s3-substituter.xml
@@ -0,0 +1,142 @@
+
+
+
+Serving a Nix store via AWS S3 or S3-compatible Service
+
+Nix has built-in support for storing and fetching store paths
+from Amazon S3 and S3 compatible services. This uses the same
+binary cache mechanism that Nix usually uses to
+fetch prebuilt binaries from cache.nixos.org.
+
+In this example we will use the bucket named
+example-bucket.
+
+
+ Anonymous Reads to your S3-compatible binary cache
+
+ If your binary cache is publicly accessible and does not
+ require authentication, the simplest and easiest way to use Nix with
+ your S3 compatible binary cache is to use the HTTP URL for that
+ cache.
+
+ For AWS S3 the binary cache URL for example bucket will be
+ exactly https://example-bucket.s3.amazonaws.com. For S3
+ compatible binary caches ago have to consult your software's
+ documentation.
+
+ Your bucket will need the following bucket policy:
+
+
+
+
+
+
+
+ Authenticated Reads to your S3 binary cache
+
+ For AWS S3 the binary cache URL for example bucket will be
+ exactly s3://example-bucket.
+
+ Nix will use the default
+ credential provider chain for authenticating requests to
+ Amazon S3.
+
+ Nix supports authenticated writes to S3 compatible binary
+ caches but only supports Authenticated reads from Amazon S3.
+ Additionally, the following limitations are in place for
+ authenticated reads:
+
+
+ The bucket must actually be hosted by Amazon S3 and
+ not an S3 compatible
+ service.
+
+ The bucket must be within the
+ us-east-1 region.
+
+ The Amazon credentials, if stored in a credential
+ profile, must be stored in the default
+ profile.
+
+
+ Your bucket will need a bucket policy allowing the desired
+ users to perform the s3:GetObject action on all
+ objects in the bucket.
+
+
+
+
+ Authenticated Writes to your S3-compatible binary cache
+
+ Nix support fully supports writing to Amazon S3 and S3
+ compatible buckets. The binary cache URL for our example bucket will
+ be s3://example-bucket.
+
+ Nix will use the default
+ credential provider chain for authenticating requests to
+ Amazon S3.
+
+ The following options can be specified as URL parameters to
+ the S3 URL:
+
+ profile
+
+
+ The name of the AWS configuration profile to use. By default
+ Nix will use the default profile.
+
+
+
+
+ region
+
+
+ The region of the S3 bucket. us–east-1 by
+ default.
+
+
+
+
+
+ Uploading with non-default credential profile for Amazon S3
+ nix copy --to ssh://machine nixpkgs.hello s3://example-bucket?profile=cache-upload
+
+
+ The user writing to the bucket will need to perform the
+ following actions against the bucket:
+
+
+ s3:ListBucket
+ s3:GetBucketLocation
+ s3:ListObjects
+ s3:GetObject
+ s3:PutObject
+ s3:ListBucketMultipartUploads
+ s3:CreateMultipartUpload
+ s3:ListMultipartUploadParts
+ s3:AbortMultipartUpload
+
+
+
diff --git a/doc/manual/packages/sharing-packages.xml b/doc/manual/packages/sharing-packages.xml
index 8465c182e..bb6c52b8f 100644
--- a/doc/manual/packages/sharing-packages.xml
+++ b/doc/manual/packages/sharing-packages.xml
@@ -15,5 +15,6 @@ packages between machines.
+