diff --git a/flake.nix b/flake.nix
index d372c3a446598b8fe02247dc792a5e448babbae8..83a55daf90f52f5b4226788555a4212847ba0f50 100644
--- a/flake.nix
+++ b/flake.nix
@@ -40,16 +40,7 @@
       checks = hslib.checks {};
       devShells = hslib.devShells {
         shellHook = ''
-          cat >cabal.project.local <<EOF
-          -- This file is auto-generated by the flake devShell's shellHook.  Do
-          -- not edit this file.  Make changes in flake.nix.
-          tests: true
-          packages:
-            -- These aren't released on hackage yet so we have to get them
-            -- another way.  Here, we get them from the Nix store.
-            -- tahoe-chk
-            ${tahoe-chk}
-          EOF
+          nix run .#generate-cabal-project
         '';
         extraBuildInputs = pkgs:
           with pkgs; [
@@ -59,6 +50,27 @@
       packages = hslib.packages {};
       apps.hlint = hslib.apps.hlint {};
 
+      apps.generate-cabal-project = {
+        type = "app";
+        program = "${
+          pkgs.writeShellApplication {
+            name = "generate-cabal-project";
+            text = ''
+              cat >cabal.project.local <<EOF
+              -- This file is auto-generated by the flake devShell's shellHook.  Do
+              -- not edit this file.  Make changes in flake.nix.
+              tests: true
+              packages:
+                -- These aren't released on hackage yet so we have to get them
+                -- another way.  Here, we get them from the Nix store.
+                -- tahoe-chk
+                ${tahoe-chk}
+              EOF
+            '';
+          }
+        }/bin/generate-cabal-project";
+      };
+
       # Using the working directory of `nix run`, do a build with cabal and
       # then run the test suite.
       apps.cabal-test = {
@@ -69,6 +81,7 @@
             runtimeInputs = with pkgs; [pkg-config haskell.compiler.${ghcVersion} cabal-install];
 
             text = ''
+              nix run .#generate-cabal-project
               cabal update hackage.haskell.org
               cabal build all
               cabal run tests