diff --git a/common/playbooks/notebooks.yaml b/common/playbooks/notebooks.yaml
index 5ebaa69ad88967a8710247432504ad4485a074bd..9b442af92ec0e36461e709f31c0c18e8e52e5923 100644
--- a/common/playbooks/notebooks.yaml
+++ b/common/playbooks/notebooks.yaml
@@ -23,6 +23,20 @@
       debug:
         msg: "{{ item.key }} = {{ item.value }}"
       loop: "{{ deployment_secrets | dict2items }}"
+    - name: Nexus Repository Secrets
+      when: nexus_hostname is defined
+      block:
+        - name: Get Secrets From Vault for Nexus Repository
+          set_fact:
+            nexus_secrets: "{{ lookup('community.hashi_vault.hashi_vault', (vault_mount_point, 'nexus') | join('/'), token_validate=false) }}"
+        - name: Debug Nexus Repository Secrets
+          debug:
+            msg: "{{ item.key }} = {{ item.value }}"
+          loop: "{{ nexus_secrets | dict2items }}"
+      rescue:
+        - name: Vault Lookup for Nexus Repository
+          fail:
+            msg: "Failed vault lookup for Nexus Repository"
     - name: Copy config file to master
       vars:
         name: "{{ item | basename | splitext | first }}"
diff --git a/egi-devel/deployments/hub.yaml b/egi-devel/deployments/hub.yaml
index 3a56748aef1b344a9f070058d27f9a1e78227928..4adbe91eca1e13ebdcb852f3cfcbe47d10870faf 100644
--- a/egi-devel/deployments/hub.yaml
+++ b/egi-devel/deployments/hub.yaml
@@ -15,6 +15,12 @@ ingress:
         - "{{ notebooks_hostname }}"
       secretName: acme-tls-hub
 
+imagePullSecret:
+  create: true
+  registry: "{{ registry_notebooks_hostname }}"
+  username: notebooks-reader
+  password: "{{ nexus_secrets['notebooks-reader'] }}"
+
 singleuser:
   # keep resource limits in sync with:
   # - profileList
@@ -82,7 +88,6 @@ singleuser:
         args:
           - "--CondaKernelSpecManager.env_filter='/opt/conda$'"
         image: "eginotebooks/single-user-ai:sha-0e47d79"
-    # TODO: Matlab
     - display_name: RELIANCE project environment - 12 GB RAM / 2 core
       description: >
         Notebook environment for RELIANCE project includes Python, R, Julia and Octave kernels
@@ -96,6 +101,28 @@ singleuser:
         - urn:mace:egi.eu:group:vo.reliance-project.eu:role=member#aai.egi.eu
         - urn:mace:egi.eu:www.egi.eu:notebooks-support:member@egi.eu
         - urn:mace:egi.eu:group:notebooks-support#sso.egi.eu
+    - display_name: MATLAB Environment (Basic) - 4GB RAM / 4 cores
+      description: >
+        The MATLAB environment 24.1.0.2537033 (R2024a) (requires a
+        <a href="https://github.com/mathworks/jupyter-matlab-proxy/blob/main/MATLAB-Licensing-Info.md">
+        valid license</a>), includes Python and MATLAB kernels
+      kubespawner_override:
+        cpu_guarantee: 2
+        cpu_limit: 4
+        mem_guarantee: 2G
+        mem_limit: 4G
+        image: "{{ registry_notebooks_hostname }}/matlab:r2024a-notebook"
+    - display_name: MATLAB Environment (Full) - 4GB RAM / 4 cores
+      description: >
+        The MATLAB environment 24.1.0.2537033 (R2024a) with toolboxes (requires a
+        <a href="https://github.com/mathworks/jupyter-matlab-proxy/blob/main/MATLAB-Licensing-Info.md">
+        valid license</a>), includes Python and MATLAB kernels
+      kubespawner_override:
+        cpu_guarantee: 2
+        cpu_limit: 4
+        mem_guarantee: 2G
+        mem_limit: 4G
+        image: "{{ registry_notebooks_hostname }}/matlab:r2024a-full"
     - display_name: EISCAT environment - 4 GB RAM / 2 cores
       description: >
         The EISCAT environment.