diff --git a/ChangeLog.md b/ChangeLog.md
--- a/ChangeLog.md
+++ b/ChangeLog.md
@@ -1,5 +1,10 @@
 # Changelog for horizon-spec
 
+## v0.6
+
+* Change Overlay to wrap a `PackageSet` rather than a `PackageList`. The
+  compiler field is needed for cabal preprocessing.
+
 ## v0.5
 
 * Add `doBenchmark`, `includeBenchmarks`, `includeExecutables` and
diff --git a/dhall/package.dhall b/dhall/package.dhall
--- a/dhall/package.dhall
+++ b/dhall/package.dhall
@@ -70,7 +70,7 @@
 
 let PackageSet = { compiler : Compiler, packages : PackageList }
 
-let Overlay = PackageList
+let Overlay = PackageSet
 
 let PackageSetExportSettings =
       { packagesDir : Directory
diff --git a/horizon-spec.cabal b/horizon-spec.cabal
--- a/horizon-spec.cabal
+++ b/horizon-spec.cabal
@@ -1,6 +1,6 @@
 cabal-version:      3.0
 name:               horizon-spec
-version:            0.5
+version:            0.6
 synopsis:           Horizon Stable Package Set Type Definitions
 description:
   This package contains the type definitions for the Horizon stable package set (https://horizon-haskell.net). This is a schema used to define package sets sourcing from hackage and git.
diff --git a/src/Horizon/Spec.hs b/src/Horizon/Spec.hs
--- a/src/Horizon/Spec.hs
+++ b/src/Horizon/Spec.hs
@@ -148,7 +148,7 @@
 
 type Overlay :: Type
 newtype Overlay where
-  MkOverlay :: { fromOverlay :: PackageList } -> Overlay
+  MkOverlay :: { fromOverlay :: PackageSet } -> Overlay
   deriving stock (Show, Eq, Generic)
   deriving newtype (FromDhall, ToDhall)
 
diff --git a/test/data/modified-overlay/input.dhall b/test/data/modified-overlay/input.dhall
--- a/test/data/modified-overlay/input.dhall
+++ b/test/data/modified-overlay/input.dhall
@@ -1,18 +1,9 @@
 let H = ../../../dhall/package.dhall
 
-in    H.modPackageList
-        H.Modifiers::{ doCheck = True, doJailbreak = False }
-        ( toMap
-            { lens = H.callHackage "lens" "5.2"
-            , Cabal-syntax =
-                H.callGit
-                  "https://gitlab.haskell.org/ghc/packages/Cabal"
-                  "e714824c6e652bf894f914bc57feccc15759668a"
-                  (Some "Cabal-syntax")
-            , network-mux =
-                H.callTarball
-                  "https://input-output-hk.github.io/cardano-haskell-packages/package/network-mux-0.2.0.0.tar.gz"
-            , myPackage = H.callLocal "./myPackage"
-            }
-        )
+in    { compiler = "ghc-9.4.2"
+      , packages =
+          H.modPackageList
+            H.Modifiers::{ doCheck = True, doJailbreak = False }
+            (toMap ../packages.dhall)
+      }
     : H.Overlay
diff --git a/test/data/modified-overlay/output.golden b/test/data/modified-overlay/output.golden
--- a/test/data/modified-overlay/output.golden
+++ b/test/data/modified-overlay/output.golden
@@ -1,88 +1,91 @@
-[ { mapKey = "Cabal-syntax"
-  , mapValue =
-    { source =
-        < FromGit : { url : Text, revision : Text, subdir : Optional Text }
-        | FromHackage : { name : Text, version : Text }
-        | FromLocal : Text
-        | FromTarball : Text
-        >.FromGit
-          { url = "https://gitlab.haskell.org/ghc/packages/Cabal"
-          , revision = "e714824c6e652bf894f914bc57feccc15759668a"
-          , subdir = Some "Cabal-syntax/"
-          }
-    , modifiers =
-      { doBenchmark = False
-      , doCheck = True
-      , doJailbreak = False
-      , enableProfiling = True
-      , includeBenchmarks = True
-      , includeExecutables = True
-      , includeTests = True
+{ compiler = "ghc-9.4.2"
+, packages =
+  [ { mapKey = "Cabal-syntax"
+    , mapValue =
+      { source =
+          < FromGit : { url : Text, revision : Text, subdir : Optional Text }
+          | FromHackage : { name : Text, version : Text }
+          | FromLocal : Text
+          | FromTarball : Text
+          >.FromGit
+            { url = "https://gitlab.haskell.org/ghc/packages/Cabal"
+            , revision = "e714824c6e652bf894f914bc57feccc15759668a"
+            , subdir = Some "Cabal-syntax/"
+            }
+      , modifiers =
+        { doBenchmark = False
+        , doCheck = True
+        , doJailbreak = False
+        , enableProfiling = True
+        , includeBenchmarks = True
+        , includeExecutables = True
+        , includeTests = True
+        }
+      , flags = [] : List < Enable : Text | Disable : Text >
       }
-    , flags = [] : List < Enable : Text | Disable : Text >
     }
-  }
-, { mapKey = "lens"
-  , mapValue =
-    { source =
-        < FromGit : { url : Text, revision : Text, subdir : Optional Text }
-        | FromHackage : { name : Text, version : Text }
-        | FromLocal : Text
-        | FromTarball : Text
-        >.FromHackage
-          { name = "lens", version = "5.2" }
-    , modifiers =
-      { doBenchmark = False
-      , doCheck = True
-      , doJailbreak = False
-      , enableProfiling = True
-      , includeBenchmarks = True
-      , includeExecutables = True
-      , includeTests = True
+  , { mapKey = "lens"
+    , mapValue =
+      { source =
+          < FromGit : { url : Text, revision : Text, subdir : Optional Text }
+          | FromHackage : { name : Text, version : Text }
+          | FromLocal : Text
+          | FromTarball : Text
+          >.FromHackage
+            { name = "lens", version = "5.2" }
+      , modifiers =
+        { doBenchmark = False
+        , doCheck = True
+        , doJailbreak = False
+        , enableProfiling = True
+        , includeBenchmarks = True
+        , includeExecutables = True
+        , includeTests = True
+        }
+      , flags = [] : List < Enable : Text | Disable : Text >
       }
-    , flags = [] : List < Enable : Text | Disable : Text >
     }
-  }
-, { mapKey = "myPackage"
-  , mapValue =
-    { source =
-        < FromGit : { url : Text, revision : Text, subdir : Optional Text }
-        | FromHackage : { name : Text, version : Text }
-        | FromLocal : Text
-        | FromTarball : Text
-        >.FromLocal
-          "myPackage/"
-    , modifiers =
-      { doBenchmark = False
-      , doCheck = True
-      , doJailbreak = False
-      , enableProfiling = True
-      , includeBenchmarks = True
-      , includeExecutables = True
-      , includeTests = True
+  , { mapKey = "myPackage"
+    , mapValue =
+      { source =
+          < FromGit : { url : Text, revision : Text, subdir : Optional Text }
+          | FromHackage : { name : Text, version : Text }
+          | FromLocal : Text
+          | FromTarball : Text
+          >.FromLocal
+            "myPackage/"
+      , modifiers =
+        { doBenchmark = False
+        , doCheck = True
+        , doJailbreak = False
+        , enableProfiling = True
+        , includeBenchmarks = True
+        , includeExecutables = True
+        , includeTests = True
+        }
+      , flags = [] : List < Enable : Text | Disable : Text >
       }
-    , flags = [] : List < Enable : Text | Disable : Text >
     }
-  }
-, { mapKey = "network-mux"
-  , mapValue =
-    { source =
-        < FromGit : { url : Text, revision : Text, subdir : Optional Text }
-        | FromHackage : { name : Text, version : Text }
-        | FromLocal : Text
-        | FromTarball : Text
-        >.FromTarball
-          "https://input-output-hk.github.io/cardano-haskell-packages/package/network-mux-0.2.0.0.tar.gz"
-    , modifiers =
-      { doBenchmark = False
-      , doCheck = True
-      , doJailbreak = False
-      , enableProfiling = True
-      , includeBenchmarks = True
-      , includeExecutables = True
-      , includeTests = True
+  , { mapKey = "network-mux"
+    , mapValue =
+      { source =
+          < FromGit : { url : Text, revision : Text, subdir : Optional Text }
+          | FromHackage : { name : Text, version : Text }
+          | FromLocal : Text
+          | FromTarball : Text
+          >.FromTarball
+            "https://input-output-hk.github.io/cardano-haskell-packages/package/network-mux-0.2.0.0.tar.gz"
+      , modifiers =
+        { doBenchmark = False
+        , doCheck = True
+        , doJailbreak = False
+        , enableProfiling = True
+        , includeBenchmarks = True
+        , includeExecutables = True
+        , includeTests = True
+        }
+      , flags = [] : List < Enable : Text | Disable : Text >
       }
-    , flags = [] : List < Enable : Text | Disable : Text >
     }
-  }
-]
+  ]
+}
diff --git a/test/data/modified-package-set/input.dhall b/test/data/modified-package-set/input.dhall
--- a/test/data/modified-package-set/input.dhall
+++ b/test/data/modified-package-set/input.dhall
@@ -4,18 +4,6 @@
       , packages =
           H.modPackageList
             H.Modifiers::{ doCheck = True, doJailbreak = False }
-            ( toMap
-                { lens = H.callHackage "lens" "5.2"
-                , Cabal-syntax =
-                    H.callGit
-                      "https://gitlab.haskell.org/ghc/packages/Cabal"
-                      "e714824c6e652bf894f914bc57feccc15759668a"
-                      (Some "Cabal-syntax")
-                , network-mux =
-                    H.callTarball
-                      "https://input-output-hk.github.io/cardano-haskell-packages/package/network-mux-0.2.0.0.tar.gz"
-                , myPackage = H.callLocal "./myPackage"
-                }
-            )
+            (toMap ../packages.dhall)
       }
     : H.PackageSet
diff --git a/test/data/sample-overlay/input.dhall b/test/data/sample-overlay/input.dhall
--- a/test/data/sample-overlay/input.dhall
+++ b/test/data/sample-overlay/input.dhall
@@ -1,15 +1,3 @@
 let H = ../../../dhall/package.dhall
 
-in  toMap
-      { lens = H.callHackage "lens" "5.2"
-      , Cabal-syntax =
-          H.callGit
-            "https://gitlab.haskell.org/ghc/packages/Cabal"
-            "e714824c6e652bf894f914bc57feccc15759668a"
-            (Some "Cabal-syntax")
-      , network-mux =
-          H.callTarball
-            "https://input-output-hk.github.io/cardano-haskell-packages/package/network-mux-0.2.0.0.tar.gz"
-      , myPackage = H.callLocal "./myPackage"
-      }
-    : H.Overlay
+in  { compiler = "ghc-9.4.2", packages = toMap ../packages.dhall } : H.Overlay
diff --git a/test/data/sample-overlay/output.golden b/test/data/sample-overlay/output.golden
--- a/test/data/sample-overlay/output.golden
+++ b/test/data/sample-overlay/output.golden
@@ -1,88 +1,91 @@
-[ { mapKey = "Cabal-syntax"
-  , mapValue =
-    { source =
-        < FromGit : { url : Text, revision : Text, subdir : Optional Text }
-        | FromHackage : { name : Text, version : Text }
-        | FromLocal : Text
-        | FromTarball : Text
-        >.FromGit
-          { url = "https://gitlab.haskell.org/ghc/packages/Cabal"
-          , revision = "e714824c6e652bf894f914bc57feccc15759668a"
-          , subdir = Some "Cabal-syntax/"
-          }
-    , modifiers =
-      { doBenchmark = False
-      , doCheck = False
-      , doJailbreak = True
-      , enableProfiling = True
-      , includeBenchmarks = True
-      , includeExecutables = True
-      , includeTests = True
+{ compiler = "ghc-9.4.2"
+, packages =
+  [ { mapKey = "Cabal-syntax"
+    , mapValue =
+      { source =
+          < FromGit : { url : Text, revision : Text, subdir : Optional Text }
+          | FromHackage : { name : Text, version : Text }
+          | FromLocal : Text
+          | FromTarball : Text
+          >.FromGit
+            { url = "https://gitlab.haskell.org/ghc/packages/Cabal"
+            , revision = "e714824c6e652bf894f914bc57feccc15759668a"
+            , subdir = Some "Cabal-syntax/"
+            }
+      , modifiers =
+        { doBenchmark = False
+        , doCheck = False
+        , doJailbreak = True
+        , enableProfiling = True
+        , includeBenchmarks = True
+        , includeExecutables = True
+        , includeTests = True
+        }
+      , flags = [] : List < Enable : Text | Disable : Text >
       }
-    , flags = [] : List < Enable : Text | Disable : Text >
     }
-  }
-, { mapKey = "lens"
-  , mapValue =
-    { source =
-        < FromGit : { url : Text, revision : Text, subdir : Optional Text }
-        | FromHackage : { name : Text, version : Text }
-        | FromLocal : Text
-        | FromTarball : Text
-        >.FromHackage
-          { name = "lens", version = "5.2" }
-    , modifiers =
-      { doBenchmark = False
-      , doCheck = False
-      , doJailbreak = True
-      , enableProfiling = True
-      , includeBenchmarks = True
-      , includeExecutables = True
-      , includeTests = True
+  , { mapKey = "lens"
+    , mapValue =
+      { source =
+          < FromGit : { url : Text, revision : Text, subdir : Optional Text }
+          | FromHackage : { name : Text, version : Text }
+          | FromLocal : Text
+          | FromTarball : Text
+          >.FromHackage
+            { name = "lens", version = "5.2" }
+      , modifiers =
+        { doBenchmark = False
+        , doCheck = False
+        , doJailbreak = True
+        , enableProfiling = True
+        , includeBenchmarks = True
+        , includeExecutables = True
+        , includeTests = True
+        }
+      , flags = [] : List < Enable : Text | Disable : Text >
       }
-    , flags = [] : List < Enable : Text | Disable : Text >
     }
-  }
-, { mapKey = "myPackage"
-  , mapValue =
-    { source =
-        < FromGit : { url : Text, revision : Text, subdir : Optional Text }
-        | FromHackage : { name : Text, version : Text }
-        | FromLocal : Text
-        | FromTarball : Text
-        >.FromLocal
-          "myPackage/"
-    , modifiers =
-      { doBenchmark = False
-      , doCheck = False
-      , doJailbreak = True
-      , enableProfiling = True
-      , includeBenchmarks = True
-      , includeExecutables = True
-      , includeTests = True
+  , { mapKey = "myPackage"
+    , mapValue =
+      { source =
+          < FromGit : { url : Text, revision : Text, subdir : Optional Text }
+          | FromHackage : { name : Text, version : Text }
+          | FromLocal : Text
+          | FromTarball : Text
+          >.FromLocal
+            "myPackage/"
+      , modifiers =
+        { doBenchmark = False
+        , doCheck = False
+        , doJailbreak = True
+        , enableProfiling = True
+        , includeBenchmarks = True
+        , includeExecutables = True
+        , includeTests = True
+        }
+      , flags = [] : List < Enable : Text | Disable : Text >
       }
-    , flags = [] : List < Enable : Text | Disable : Text >
     }
-  }
-, { mapKey = "network-mux"
-  , mapValue =
-    { source =
-        < FromGit : { url : Text, revision : Text, subdir : Optional Text }
-        | FromHackage : { name : Text, version : Text }
-        | FromLocal : Text
-        | FromTarball : Text
-        >.FromTarball
-          "https://input-output-hk.github.io/cardano-haskell-packages/package/network-mux-0.2.0.0.tar.gz"
-    , modifiers =
-      { doBenchmark = False
-      , doCheck = False
-      , doJailbreak = True
-      , enableProfiling = True
-      , includeBenchmarks = True
-      , includeExecutables = True
-      , includeTests = True
+  , { mapKey = "network-mux"
+    , mapValue =
+      { source =
+          < FromGit : { url : Text, revision : Text, subdir : Optional Text }
+          | FromHackage : { name : Text, version : Text }
+          | FromLocal : Text
+          | FromTarball : Text
+          >.FromTarball
+            "https://input-output-hk.github.io/cardano-haskell-packages/package/network-mux-0.2.0.0.tar.gz"
+      , modifiers =
+        { doBenchmark = False
+        , doCheck = False
+        , doJailbreak = True
+        , enableProfiling = True
+        , includeBenchmarks = True
+        , includeExecutables = True
+        , includeTests = True
+        }
+      , flags = [] : List < Enable : Text | Disable : Text >
       }
-    , flags = [] : List < Enable : Text | Disable : Text >
     }
-  }
-]
+  ]
+}
diff --git a/test/data/sample-package-set/input.dhall b/test/data/sample-package-set/input.dhall
--- a/test/data/sample-package-set/input.dhall
+++ b/test/data/sample-package-set/input.dhall
@@ -1,17 +1,4 @@
 let H = ../../../dhall/package.dhall
 
-in    { compiler = "ghc-9.4.2"
-      , packages = toMap
-          { lens = H.callHackage "lens" "5.2"
-          , Cabal-syntax =
-              H.callGit
-                "https://gitlab.haskell.org/ghc/packages/Cabal"
-                "e714824c6e652bf894f914bc57feccc15759668a"
-                (Some "Cabal-syntax")
-          , network-mux =
-              H.callTarball
-                "https://input-output-hk.github.io/cardano-haskell-packages/package/network-mux-0.2.0.0.tar.gz"
-          , myPackage = H.callLocal "./myPackage"
-          }
-      }
+in    { compiler = "ghc-9.4.2", packages = toMap ../packages.dhall }
     : H.PackageSet
