diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml
index c367e3bb8ca43433ba2a479eb1800933670875aa..019c7b2835825db2761ddb55d06c2c66e1b0dfc4 100644
--- a/.gitlab-ci.yml
+++ b/.gitlab-ci.yml
@@ -8,10 +8,13 @@ default:
 docs:
   stage: "build"
   script:
-    - "nix-build docs"
+    - "nix-build --attr docs --out-link result-docs"
+    # GitLab wants to lchown artifacts.  It can't do that to store paths.  Get
+    # a copy of the docs outside of the store.
+    - "cp --recursive --no-preserve=mode ./result-docs/docs ./docs-build/"
   artifacts:
     paths:
-      - "./result/docs/"
+      - "./docs-build/"
     expose_as: "documentation"
 
 unit-tests:
diff --git a/default.nix b/default.nix
new file mode 100644
index 0000000000000000000000000000000000000000..578e5f4e5a07c07e578ea8b5e8531a0c93346e24
--- /dev/null
+++ b/default.nix
@@ -0,0 +1,4 @@
+{ pkgs ? import ./nixpkgs-2105.nix { } }:
+{
+  docs = pkgs.callPackage ./docs.nix { };
+}
diff --git a/docs/docs.nix b/docs.nix
similarity index 92%
rename from docs/docs.nix
rename to docs.nix
index d764aa783f619a36b4313570a75c3843c76d0eaf..b13c7b58c100553c522cb71912089c6fdbfaed4b 100644
--- a/docs/docs.nix
+++ b/docs.nix
@@ -5,7 +5,7 @@ in
 stdenv.mkDerivation rec {
   version = "0.0";
   name = "privatestorageio-${version}";
-  src = lib.cleanSource ../.;
+  src = lib.cleanSource ./.;
 
   phases = [ "unpackPhase" "buildPhase" ];
 
diff --git a/docs/default.nix b/docs/default.nix
deleted file mode 100644
index 488a7493a35bc7d3b8e0e29fd845f2b48b19b51f..0000000000000000000000000000000000000000
--- a/docs/default.nix
+++ /dev/null
@@ -1,2 +0,0 @@
-{ pkgs ? import ../nixpkgs-2105.nix { } }:
-pkgs.callPackage ./docs.nix { }