diff --git a/flake.nix b/flake.nix
index 19381efd..78024656 100644
--- a/flake.nix
+++ b/flake.nix
@@ -9,14 +9,6 @@
     let
       systems = [ "x86_64-linux" "aarch64-linux" ];
       forEachSystem = nixpkgs.lib.genAttrs systems;
-
-      overlayList = [ self.overlays.default nix.overlays.default ];
-
-      pkgsBySystem = forEachSystem (system: import nixpkgs {
-        inherit system;
-        overlays = overlayList;
-      });
-
     in
     rec {
 
@@ -30,7 +22,6 @@
       };
 
       hydraJobs = {
-
         build = forEachSystem (system: packages.${system}.hydra);
 
         buildNoTests = forEachSystem (system:
@@ -39,19 +30,21 @@
           })
         );
 
-        manual = forEachSystem (system:
-          let pkgs = pkgsBySystem.${system}; in
-          pkgs.runCommand "hydra-manual-${pkgs.hydra.version}" { }
+        manual = forEachSystem (system: let
+          pkgs = nixpkgs.legacyPackages.${system};
+          hydra = self.packages.${pkgs.hostPlatform.system}.hydra;
+        in
+          pkgs.runCommand "hydra-manual-${hydra.version}" { }
             ''
               mkdir -p $out/share
-              cp -prvd ${pkgs.hydra}/share/doc $out/share/
+              cp -prvd ${hydra}/share/doc $out/share/
 
               mkdir $out/nix-support
               echo "doc manual $out/share/doc/hydra" >> $out/nix-support/hydra-build-products
             '');
 
         tests = import ./nixos-tests.nix {
-          inherit forEachSystem nixpkgs pkgsBySystem nixosModules;
+          inherit forEachSystem nixpkgs nixosModules;
         };
 
         container = nixosConfigurations.container.config.system.build.toplevel;
@@ -64,12 +57,17 @@
       });
 
       packages = forEachSystem (system: {
-        hydra = pkgsBySystem.${system}.hydra;
-        default = pkgsBySystem.${system}.hydra;
+        hydra = nixpkgs.legacyPackages.${system}.callPackage ./package.nix {
+          inherit (nixpkgs.lib) fileset;
+          rawSrc = self;
+          nix = nix.packages.${system}.nix;
+          nix-perl-bindings = nix.hydraJobs.perlBindings.${system};
+        };
+        default = self.packages.${system}.hydra;
       });
 
       nixosModules = import ./nixos-modules {
-        overlays = overlayList;
+        inherit self;
       };
 
       nixosConfigurations.container = nixpkgs.lib.nixosSystem {
@@ -77,7 +75,6 @@
         modules =
           [
             self.nixosModules.hydra
-            self.nixosModules.overlayNixpkgsForThisHydra
             self.nixosModules.hydraTest
             self.nixosModules.hydraProxy
             {
diff --git a/nixos-modules/default.nix b/nixos-modules/default.nix
index dac705c3..62b18406 100644
--- a/nixos-modules/default.nix
+++ b/nixos-modules/default.nix
@@ -1,11 +1,10 @@
-{ overlays }:
+{ self }:
 
 {
-  hydra = import ./hydra.nix;
-
-  overlayNixpkgsForThisHydra = { pkgs, ... }: {
-    nixpkgs = { inherit overlays; };
-    services.hydra.package = pkgs.hydra;
+  hydra = { pkgs, lib,... }: {
+    _file = ./default.nix;
+    imports = [ ./hydra.nix ];
+    services.hydra-dev.package = lib.mkDefault self.packages.${pkgs.hostPlatform.system}.hydra;
   };
 
   hydraTest = { pkgs, ... }: {
diff --git a/nixos-modules/hydra.nix b/nixos-modules/hydra.nix
index 6a2390c4..c471b0ef 100644
--- a/nixos-modules/hydra.nix
+++ b/nixos-modules/hydra.nix
@@ -68,8 +68,6 @@ in
 
       package = mkOption {
         type = types.path;
-        default = pkgs.hydra;
-        defaultText = literalExpression "pkgs.hydra";
         description = "The Hydra package.";
       };
 
diff --git a/nixos-tests.nix b/nixos-tests.nix
index 19a9ba35..9efe68c8 100644
--- a/nixos-tests.nix
+++ b/nixos-tests.nix
@@ -1,13 +1,12 @@
-{ forEachSystem, nixpkgs, pkgsBySystem, nixosModules }:
+{ forEachSystem, nixpkgs, nixosModules }:
 
 let
   # NixOS configuration used for VM tests.
   hydraServer =
-    { config, pkgs, ... }:
+    { pkgs, ... }:
     {
       imports = [
         nixosModules.hydra
-        nixosModules.overlayNixpkgsForThisHydra
         nixosModules.hydraTest
       ];
 
@@ -44,11 +43,10 @@ in
     });
 
   notifications = forEachSystem (system:
-    let pkgs = pkgsBySystem.${system}; in
     with import (nixpkgs + "/nixos/lib/testing-python.nix") { inherit system; };
     simpleTest {
       name = "hydra-notifications";
-      nodes.machine = { pkgs, ... }: {
+      nodes.machine = {
         imports = [ hydraServer ];
         services.hydra-dev.extraConfig = ''
           <influxdb>
@@ -89,7 +87,7 @@ in
 
         # Setup the project and jobset
         machine.succeed(
-            "su - hydra -c 'perl -I ${pkgs.hydra.perlDeps}/lib/perl5/site_perl ${./t/setup-notifications-jobset.pl}' >&2"
+            "su - hydra -c 'perl -I ${config.services.hydra-dev.package.perlDeps}/lib/perl5/site_perl ${./t/setup-notifications-jobset.pl}' >&2"
         )
 
         # Wait until hydra has build the job and
@@ -103,7 +101,7 @@ in
     });
 
   gitea = forEachSystem (system:
-    let pkgs = pkgsBySystem.${system}; in
+    let pkgs = nixpkgs.legacyPackages.${system}; in
     with import (nixpkgs + "/nixos/lib/testing-python.nix") { inherit system; };
     makeTest {
       name = "hydra-gitea";
@@ -298,7 +296,7 @@ in
     });
 
   validate-openapi = forEachSystem (system:
-    let pkgs = pkgsBySystem.${system}; in
+    let pkgs = nixpkgs.legacyPackages.${system}; in
     pkgs.runCommand "validate-openapi"
     { buildInputs = [ pkgs.openapi-generator-cli ]; }
     ''