     "ueberauth.Elixir.Ueberauth.providers.slack": fn conf ->
       [{_, team_id}] = Conform.Conf.get(conf, "ueberauth.Elixir.Ueberauth.providers.slack")
       {Ueberauth.Strategy.Slack, [team: team_id]}
+    end,
+    "gatekeeper.doorlock.type": fn conf ->
+      [{_, type}] = Conform.Conf.get(conf, "gatekeeper.doorlock.type")
+      case type do
+        "gpio" -> ElixirALE.GPIO
+        "dummy" -> Gatekeeper.GPIODummy
+      end
+    end,
+    "gatekeeper.doorbell.type": fn conf ->
+      [{_, type}] = Conform.Conf.get(conf, "gatekeeper.doorbell.type")
+      case type do
+        "gpio" -> ElixirALE.GPIO
+        "dummy" -> Gatekeeper.GPIODummy
+      end
     end
   ],
   validators: []

      hidden: false,
      to: "gatekeeper.doorlock.door_id"
    ],
    "gatekeeper.Elixir.GatekeeperWeb.Endpoint.url.host": [
      commented: false,
      datatype: :binary,

      datatype: :binary,
      doc: "Secret key used for securing session cookies",
      hidden: false,
      env_var: "SECRET_KEY_BASE",
      to: "gatekeeper.Elixir.GatekeeperWeb.Endpoint.secret_key_base"
    ],
    "gatekeeper.Elixir.GatekeeperWeb.Endpoint.http.port": [
