diff --git a/build_trigger.module b/build_trigger.module
index 260edd6..e45f793 100644
--- a/build_trigger.module
+++ b/build_trigger.module
@@ -1,5 +1,12 @@
 <?php
 
+/**
+ * @file
+ */
+
+use Drupal\Core\Hook\Attribute\LegacyHook;
+use Drupal\build_trigger\Hook\BuildTriggerHooks;
+
 /**
  * @file
  * Primary module hooks for Build trigger module.
@@ -8,41 +15,23 @@
 /**
  * Implements hook_theme().
  */
+#[LegacyHook]
 function build_trigger_theme($existing, $type, $theme, $path) {
-  return [
-    'build_job' => [
-      'render element' => 'elements',
-    ],
-  ];
+  return \Drupal::service(BuildTriggerHooks::class)->theme($existing, $type, $theme, $path);
 }
 
 /**
  * Implements hook_preprocess_HOOK() for build_job.
  */
+#[LegacyHook]
 function build_trigger_preprocess_build_job(&$variables) {
-
-  /** @var  $build_job \Drupal\build_trigger\Entity\BuildJob */
-  $build_job = $variables['elements']['#build_job'];
-  $details = $build_job->getDetails();
-  $environment = $build_job->getEnvironment();
-  $plugin = $environment->getPlugin();
-
-  $variables['active'] = $build_job->isActive();
-  $variables['build_job'] = $build_job;
-  $variables['changed'] = $build_job->getChangedTime();
-  $variables['created'] = $build_job->getCreatedTime();
-  $variables['details'] = $plugin->render($details);
-  $variables['environment'] = $environment;
-  $variables['owner'] = $build_job->getOwner()->getAccountName();
-  $variables['plugin'] = $plugin;
-  $variables['status'] = $build_job->getStatus();
+  \Drupal::service(BuildTriggerHooks::class)->preprocessBuildJob($variables);
 }
 
 /**
  * Implements hook_preprocess_HOOK() for menu.
  */
+#[LegacyHook]
 function build_trigger_preprocess_menu(&$variables) {
-  if ($variables['menu_name'] == 'admin') {
-    $variables['#attached']['library'][] = 'build_trigger/menu_links';
-  }
+  \Drupal::service(BuildTriggerHooks::class)->preprocessMenu($variables);
 }
diff --git a/build_trigger.services.yml b/build_trigger.services.yml
index 50da37c..7be9ac0 100644
--- a/build_trigger.services.yml
+++ b/build_trigger.services.yml
@@ -2,3 +2,7 @@ services:
   plugin.manager.build_environment:
     class: Drupal\build_trigger\BuildEnvironmentPluginManager
     parent: default_plugin_manager
+
+  Drupal\build_trigger\Hook\BuildTriggerHooks:
+    class: Drupal\build_trigger\Hook\BuildTriggerHooks
+    autowire: true
diff --git a/modules/build_trigger_gitlab_pipeline/build_trigger_gitlab_pipeline.module b/modules/build_trigger_gitlab_pipeline/build_trigger_gitlab_pipeline.module
index 671e2f3..9f93ca5 100644
--- a/modules/build_trigger_gitlab_pipeline/build_trigger_gitlab_pipeline.module
+++ b/modules/build_trigger_gitlab_pipeline/build_trigger_gitlab_pipeline.module
@@ -1,7 +1,14 @@
 <?php
 
+/**
+ * @file
+ */
+
 declare(strict_types=1);
 
+use Drupal\Core\Hook\Attribute\LegacyHook;
+use Drupal\build_trigger_gitlab_pipeline\Hook\BuildTriggerGitlabPipelineHooks;
+
 /**
  * @file
  * Primary module hooks for Gitlab pipeline plugin module.
@@ -10,14 +17,7 @@ declare(strict_types=1);
 /**
  * Implements hook_theme().
  */
+#[LegacyHook]
 function build_trigger_gitlab_pipeline_theme($existing, $type, $theme, $path): array {
-  return [
-    'gitlab_pipeline_details' => [
-      'variables' => [
-        'details' => NULL,
-        'error' => NULL,
-        'stages' => [],
-      ]
-    ],
-  ];
+  return \Drupal::service(BuildTriggerGitlabPipelineHooks::class)->theme($existing, $type, $theme, $path);
 }
diff --git a/modules/build_trigger_gitlab_pipeline/build_trigger_gitlab_pipeline.services.yml b/modules/build_trigger_gitlab_pipeline/build_trigger_gitlab_pipeline.services.yml
index a93732b..348c9fd 100644
--- a/modules/build_trigger_gitlab_pipeline/build_trigger_gitlab_pipeline.services.yml
+++ b/modules/build_trigger_gitlab_pipeline/build_trigger_gitlab_pipeline.services.yml
@@ -2,3 +2,7 @@ services:
   build_trigger_gitlab_pipeline.gitlab_api:
     class: Drupal\build_trigger_gitlab_pipeline\GitlabApi
     arguments: ['@http_client', '@config.factory']
+
+  Drupal\build_trigger_gitlab_pipeline\Hook\BuildTriggerGitlabPipelineHooks:
+    class: Drupal\build_trigger_gitlab_pipeline\Hook\BuildTriggerGitlabPipelineHooks
+    autowire: true
diff --git a/modules/build_trigger_gitlab_pipeline/src/Form/SettingsForm.php b/modules/build_trigger_gitlab_pipeline/src/Form/SettingsForm.php
index 817d6f3..de6e787 100644
--- a/modules/build_trigger_gitlab_pipeline/src/Form/SettingsForm.php
+++ b/modules/build_trigger_gitlab_pipeline/src/Form/SettingsForm.php
@@ -30,7 +30,7 @@ class SettingsForm extends ConfigFormBase {
    * {@inheritdoc}
    */
   public function buildForm(array $form, FormStateInterface $form_state): array {
-    $form =  parent::buildForm($form, $form_state);
+    $form = parent::buildForm($form, $form_state);
     $config = $this->config('build_trigger_gitlab_pipeline.settings');
 
     $form['gitlab_url'] = [
@@ -72,8 +72,7 @@ class SettingsForm extends ConfigFormBase {
 
     $config->set('gitlab_url', (string) $form_state->getValue('gitlab_url'))
       ->set('gitlab_api_token', (string) $form_state->getValue('gitlab_api_token'))
-      ->set('gitlab_stages', (string) $form_state->getValue('gitlab_stages'))
-      ->save(TRUE);
+      ->set('gitlab_stages', (string) $form_state->getValue('gitlab_stages'))->save();
 
     parent::submitForm($form, $form_state);
   }
diff --git a/modules/build_trigger_gitlab_pipeline/src/Hook/BuildTriggerGitlabPipelineHooks.php b/modules/build_trigger_gitlab_pipeline/src/Hook/BuildTriggerGitlabPipelineHooks.php
new file mode 100644
index 0000000..b7b94b6
--- /dev/null
+++ b/modules/build_trigger_gitlab_pipeline/src/Hook/BuildTriggerGitlabPipelineHooks.php
@@ -0,0 +1,32 @@
+<?php
+
+namespace Drupal\build_trigger_gitlab_pipeline\Hook;
+
+use Drupal\Core\Hook\Attribute\Hook;
+
+/**
+ * Hook implementations for build_trigger_gitlab_pipeline.
+ */
+class BuildTriggerGitlabPipelineHooks {
+  /**
+   * @file
+   * Primary module hooks for Gitlab pipeline plugin module.
+   */
+
+  /**
+   * Implements hook_theme().
+   */
+  #[Hook('theme')]
+  public static function theme($existing, $type, $theme, $path): array {
+    return [
+      'gitlab_pipeline_details' => [
+        'variables' => [
+          'details' => NULL,
+          'error' => NULL,
+          'stages' => [],
+        ],
+      ],
+    ];
+  }
+
+}
diff --git a/src/Hook/BuildTriggerHooks.php b/src/Hook/BuildTriggerHooks.php
new file mode 100644
index 0000000..3401d27
--- /dev/null
+++ b/src/Hook/BuildTriggerHooks.php
@@ -0,0 +1,59 @@
+<?php
+
+namespace Drupal\build_trigger\Hook;
+
+use Drupal\Core\Hook\Attribute\Hook;
+
+/**
+ * Hook implementations for build_trigger.
+ */
+class BuildTriggerHooks {
+  /**
+   * @file
+   * Primary module hooks for Build trigger module.
+   */
+
+  /**
+   * Implements hook_theme().
+   */
+  #[Hook('theme')]
+  public static function theme($existing, $type, $theme, $path) {
+    return [
+      'build_job' => [
+        'render element' => 'elements',
+      ],
+    ];
+  }
+
+  /**
+   * Implements hook_preprocess_HOOK() for build_job.
+   */
+  #[Hook('preprocess_build_job')]
+  public static function preprocessBuildJob(&$variables) {
+    /** @var  \Drupal\build_trigger\Entity\BuildJob $build_job */
+    $build_job = $variables['elements']['#build_job'];
+    $details = $build_job->getDetails();
+    $environment = $build_job->getEnvironment();
+    $plugin = $environment->getPlugin();
+    $variables['active'] = $build_job->isActive();
+    $variables['build_job'] = $build_job;
+    $variables['changed'] = $build_job->getChangedTime();
+    $variables['created'] = $build_job->getCreatedTime();
+    $variables['details'] = $plugin->render($details);
+    $variables['environment'] = $environment;
+    $variables['owner'] = $build_job->getOwner()->getAccountName();
+    $variables['plugin'] = $plugin;
+    $variables['status'] = $build_job->getStatus();
+  }
+
+  /**
+   * Implements hook_preprocess_HOOK() for menu.
+   */
+  #[Hook('preprocess_menu')]
+  public static function preprocessMenu(&$variables) {
+    if ($variables['menu_name'] == 'admin') {
+      $variables['#attached']['library'][] = 'build_trigger/menu_links';
+    }
+  }
+
+}
