diff --git a/README.md b/README.md
index 26dfd9d..c3047ae 100644
--- a/README.md
+++ b/README.md
@@ -28,6 +28,11 @@ $ $path
 
 *(My [implementation](https://github.com/ckiee/nixfiles/blob/aac57f56e417e31f00fd495d8a30fb399ecbc19b/deploy/hm-only.nix#L10) of [this](https://github.com/ckiee/nixfiles/blob/aac57f56e417e31f00fd495d8a30fb399ecbc19b/bin/c#L92-L95) ~ckie)*
 
+## Hydra
+
+If you want to build your project in our hydra, add a new project in this
+[file](terraform/hydra-projects.tf).
+
 ## Support
 
 If you hit any issues, ping us on Matrix in the
@@ -47,11 +52,10 @@ room (see the admin list below) or create an issue here:
 
 ## Services
 
-* BuildKite agent - on build01
-* GitLab agent - on build01
-* hound - on build01
-* https://hydra.nix-community.org - on build01
-* matterbridge - on build01
+* GitLab agent - on build03
+* hound - on build03
+* https://hydra.nix-community.org - on build03
+* matterbridge - on build03
 * ryantm-updater bot - on build02
 
 ## Hosts
diff --git a/services/hydra/create-declarative-project.sh b/services/hydra/create-declarative-project.sh
deleted file mode 100755
index 3deafef..0000000
--- a/services/hydra/create-declarative-project.sh
+++ /dev/null
@@ -1,47 +0,0 @@
-#!/usr/bin/env bash
-#
-# Usage example
-# URL=http://localhost:3000 ./create-declarative-project.sh
-
-set -euo pipefail
-
-HYDRA_ADMIN_USERNAME=${HYDRA_ADMIN_USERNAME:-admin}
-HYDRA_ADMIN_PASSWORD=${HYDRA_ADMIN_PASSWORD:-admin}
-URL=${URL:-http://localhost:3000}
-DECL_FILE=${DECL_FILE:-"spec.json"}
-DECL_TYPE=${DECL_TYPE:-"git"}
-DECL_VALUE=${DECL_VALUE:-"https://github.com/shlevy/declarative-hydra-example"}
-DECL_PROJECT_NAME=${DECL_PROJECT_NAME:-"example"}
-DECL_DISPLAY_NAME=${DECL_DISPLAY_NAME:-"An example project"}
-DECL_DESCRIPTION=${DECL_DESCRIPTION:-""}
-DECL_HOMEPAGE=${DECL_HOMEPAGE:-""}
-
-mycurl() {
-  curl --fail --referer "${URL}" -H "Accept: application/json" -H "Content-Type: application/json" "$@"
-}
-
-echo "Logging to $URL with user $HYDRA_ADMIN_USERNAME"
-cat >data.json <<EOF
-{ "username": "$HYDRA_ADMIN_USERNAME", "password": "$HYDRA_ADMIN_PASSWORD" }
-EOF
-mycurl -X POST -d '@data.json' "$URL/login" -c hydra-cookie.txt
-
-echo -e "\nCreating project:"
-cat >data.json <<EOF
-{
-  "displayname":"$DECL_DISPLAY_NAME",
-  "description":"$DECL_DESCRIPTION",
-  "homepage":"$DECL_HOMEPAGE",
-  "enabled":"1",
-  "visible":"1",
-  "declarative": {
-    "file": "$DECL_FILE",
-    "type":"$DECL_TYPE",
-    "value":"$DECL_VALUE"
-  }
-}
-EOF
-cat data.json
-mycurl --silent -X PUT "$URL/project/$DECL_PROJECT_NAME" -d @data.json -b hydra-cookie.txt
-
-rm -f data.json hydra-cookie.txt
diff --git a/services/hydra/declarative-projects.nix b/services/hydra/declarative-projects.nix
deleted file mode 100644
index 5643ce9..0000000
--- a/services/hydra/declarative-projects.nix
+++ /dev/null
@@ -1,41 +0,0 @@
-{ lib, pkgs, config, ... }:
-
-{
-  services.hydra.declarativeProjects = {
-    emacs-overlay = {
-      displayName = "Emacs Overlay";
-      inputValue = "https://github.com/nix-community/emacs-overlay";
-      specFile = "hydra/spec.json";
-      description = "Bleeding edge emacs overlay";
-      homepage = "https://github.com/nix-community/emacs-overlay";
-    };
-    nix-data = {
-      displayName = "nix-data";
-      inputValue = "https://github.com/nix-community/nix-data";
-      specFile = "spec.json";
-      description = "Standard set of packages and overlays for data-scientists";
-      homepage = "https://github.com/nix-community/nix-data";
-    };
-    simple-nixos-mailserver = {
-      displayName = "Simple NixOS MailServer";
-      inputValue = "https://gitlab.com/simple-nixos-mailserver/nixos-mailserver";
-      specFile = ".hydra/spec.json";
-      description = "A complete and Simple Nixos Mailserver";
-      homepage = "https://gitlab.com/simple-nixos-mailserver/nixos-mailserver";
-    };
-    redoxpkgs = {
-      displayName = "Redoxpkgs";
-      inputValue = "https://github.com/nix-community/redoxpkgs";
-      specFile = ".hydra/spec.json";
-      description = "Packages for Redox";
-      homepage = "https://github.com/nix-community/redoxpkgs";
-    };
-    rust-for-linux = {
-      displayName = "Rust For Linux";
-      inputValue = "https://github.com/rust-for-linux/nix";
-      specFile = ".hydra/spec.json";
-      description = "Linux Kernel with Rust support";
-      homepage = "https://github.com/Rust-for-Linux/linux";
-    };
-  };
-}
diff --git a/services/hydra/default.nix b/services/hydra/default.nix
index b1778aa..f45294d 100644
--- a/services/hydra/default.nix
+++ b/services/hydra/default.nix
@@ -6,25 +6,8 @@ let
   cfg = config;
 
   hydraPort = 3000;
-  hydraAdmin = "admin";
-  hydraAdminPasswordFile = config.sops.secrets.hydra-admin-password.path;
-  hydraUsersFile = config.sops.secrets.hydra-users.path;
-
-  createDeclarativeProjectScript = pkgs.stdenv.mkDerivation {
-    name = "create-declarative-project";
-    unpackPhase = ":";
-    buildInputs = [ pkgs.makeWrapper ];
-    installPhase = "install -m755 -D ${./create-declarative-project.sh} $out/bin/create-declarative-project";
-    postFixup = ''
-      wrapProgram "$out/bin/create-declarative-project" \
-        --prefix PATH ":" ${lib.makeBinPath [ pkgs.curl ]}
-    '';
-  };
-
 in
 {
-  imports = [ ./declarative-projects.nix ];
-
   options.services.hydra = {
     adminPasswordFile = mkOption {
       type = types.str;
@@ -39,44 +22,6 @@ in
         Password hash is computed by applying sha1 to the password.
       '';
     };
-
-    declarativeProjects = mkOption {
-      description = "Declarative projects";
-      default = { };
-      type = with types; attrsOf (submodule {
-        options = {
-          inputValue = mkOption {
-            type = types.str;
-            description = "The input value";
-            example = "https://github.com/shlevy/declarative-hydra-example";
-          };
-          inputType = mkOption {
-            type = types.str;
-            default = "git";
-            description = "The type of the input value";
-          };
-          specFile = mkOption {
-            type = types.str;
-            default = "spec.json";
-            description = "The declarative spec file name";
-          };
-          displayName = mkOption {
-            type = types.str;
-            description = "The diplay name of the declarative project";
-          };
-          description = mkOption {
-            type = types.str;
-            default = "";
-            description = "The description of the declarative project";
-          };
-          homepage = mkOption {
-            type = types.str;
-            default = "";
-            description = "The homepage of the declarative project";
-          };
-        };
-      });
-    };
   };
   config = {
     sops.secrets.hydra-admin-password.owner = "hydra";
@@ -106,9 +51,9 @@ in
       notificationSender = "hydra@hydra.nix-community.org";
       port = hydraPort;
       useSubstitutes = true;
-      adminPasswordFile = hydraAdminPasswordFile;
+      adminPasswordFile = config.sops.secrets.hydra-admin-password.path;
 
-      usersFile = hydraUsersFile;
+      usersFile = config.sops.secrets.hydra-users.path;
       extraConfig = ''
         max_output_size = ${builtins.toString (8 * 1024 * 1024 * 1024)}
 
@@ -187,19 +132,7 @@ in
 
         export HYDRA_ADMIN_PASSWORD=$(cat ${cfg.services.hydra.adminPasswordFile})
         export URL=http://localhost:${toString hydraPort}
-      '' +
-      (concatStringsSep "\n" (mapAttrsToList
-        (n: v: ''
-          export DECL_PROJECT_NAME="${n}"
-          export DECL_DISPLAY_NAME="${v.displayName}"
-          export DECL_VALUE="${v.inputValue}"
-          export DECL_TYPE="${v.inputType}"
-          export DECL_FILE="${v.specFile}"
-          export DECL_DESCRIPTION="${v.description}"
-          export DECL_HOMEPAGE="${v.homepage}"
-          ${createDeclarativeProjectScript}/bin/create-declarative-project
-        '')
-        cfg.services.hydra.declarativeProjects));
+      '';
     };
   };
 }
diff --git a/terraform/README.md b/terraform/README.md
index 6f58fca..f8f9762 100644
--- a/terraform/README.md
+++ b/terraform/README.md
@@ -1,3 +1,3 @@
 # Terraform
 
-Only used for DNS management right now.
+Used for DNS management and creating hydra projects.
diff --git a/terraform/hydra-jobsets.tf b/terraform/hydra-jobsets.tf
deleted file mode 100644
index 6840685..0000000
--- a/terraform/hydra-jobsets.tf
+++ /dev/null
@@ -1,28 +0,0 @@
-resource "hydra_project" "kittybox" {
-  name         = "kittybox"
-  display_name = "Kittybox"
-  description  = "The IndieWeb blogging solution"
-  homepage     = "https://sr.ht/~vikanezrimaya/kittybox"
-  owner        = "admin"
-  enabled      = true
-  visible      = true
-}
-
-
-resource "hydra_jobset" "kittybox" {
-  project     = hydra_project.kittybox.name
-  state       = "enabled"
-  visible     = true
-  name        = "main"
-  type        = "flake"
-  description = "main branch"
-
-  flake_uri = "git+https://git.sr.ht/~vikanezrimaya/kittybox?ref=main"
-
-  check_interval    = 300
-  scheduling_shares = 3000
-  keep_evaluations  = 3
-
-  email_notifications = false
-  #email_override      = ""
-}
diff --git a/terraform/hydra-projects.tf b/terraform/hydra-projects.tf
new file mode 100644
index 0000000..ff42d47
--- /dev/null
+++ b/terraform/hydra-projects.tf
@@ -0,0 +1,108 @@
+# See https://github.com/DeterminateSystems/terraform-provider-hydra for explanation
+
+resource "hydra_project" "kittybox" {
+  name         = "kittybox"
+  display_name = "Kittybox"
+  description  = "The IndieWeb blogging solution"
+  homepage     = "https://sr.ht/~vikanezrimaya/kittybox"
+  owner        = "admin"
+  enabled      = true
+  visible      = true
+}
+
+resource "hydra_jobset" "kittybox" {
+  project     = hydra_project.kittybox.name
+  state       = "enabled"
+  visible     = true
+  name        = "main"
+  type        = "flake"
+  description = "main branch"
+
+  flake_uri = "git+https://git.sr.ht/~vikanezrimaya/kittybox?ref=main"
+
+  check_interval    = 300
+  scheduling_shares = 3000
+  keep_evaluations  = 3
+
+  email_notifications = false
+}
+
+resource "hydra_project" "emacs_overlay" {
+  name         = "emacs-overlay"
+  display_name = "Emacs Overlay"
+  description  = "Bleeding edge emacs overlay"
+  homepage     = "https://github.com/nix-community/emacs-overlay"
+  owner        = "admin"
+  enabled      = true
+  visible      = true
+
+  declarative {
+    file = "hydra/spec.json"
+    type = "git"
+    value = "https://github.com/nix-community/emacs-overlay"
+  }
+}
+
+resource "hydra_project" "nix_data" {
+  name         = "nix-data"
+  display_name = "nix-data"
+  description  = "Standard set of packages and overlays for data-scientists"
+  homepage     = "https://github.com/nix-community/nix-data"
+  owner        = "admin"
+  enabled      = true
+  visible      = true
+
+  declarative {
+    file = "spec.json"
+    type = "git"
+    value = "https://github.com/nix-community/nix-data"
+  }
+}
+
+resource "hydra_project" "simple_nixos_mailserver" {
+  name         = "simple-nixos-mailserver"
+  display_name = "Simple NixOS MailServer"
+  description  = "A complete and Simple Nixos Mailserver"
+  homepage     = "https://gitlab.com/simple-nixos-mailserver/nixos-mailserver"
+  owner        = "admin"
+  enabled      = true
+  visible      = true
+
+  declarative {
+    file = ".hydra/spec.json"
+    type = "git"
+    value = "https://gitlab.com/simple-nixos-mailserver/nixos-mailserver"
+  }
+}
+
+resource "hydra_project" "redoxpkgs" {
+  name         = "redoxpkgs"
+  display_name = "Redoxpkgs"
+  description  = "Packages for Redox"
+  homepage     = "https://github.com/nix-community/redoxpkgs"
+  owner        = "admin"
+  enabled      = true
+  visible      = true
+
+  declarative {
+    file = ".hydra/spec.json"
+    type = "git"
+    value = "https://github.com/nix-community/redoxpkgs"
+  }
+}
+
+resource "hydra_project" "rust_for_linux" {
+  name         = "rust-for-linux"
+  display_name = "Rust For Linux"
+  description  = "Linux Kernel with Rust support"
+  homepage     = "https://github.com/Rust-for-Linux/linux"
+  owner        = "admin"
+  enabled      = true
+  visible      = true
+
+  declarative {
+    file = ".hydra/spec.json"
+    type = "git"
+    value = "https://github.com/rust-for-linux/nix"
+  }
+}