diff --git a/.gitlab-ci-env.sh b/.gitlab-ci-env.sh
index e055861482b5c1614a142cd3457cb9fce253d4ba..d615bff8669efbc3606e3c367e75882f841788d9 100755
--- a/.gitlab-ci-env.sh
+++ b/.gitlab-ci-env.sh
@@ -26,32 +26,11 @@ if [[ "$SYSTEM" == "linux" ]]; then
   fi
   export STARPU_DIR=/home/gitlab/install/starpu${STARPU_VARIANT}
 
-  # add additional env. var. depending on the starpu variant
-  case $STARPU_VARIANT in
-    -hip )
-      export CMAKE_PREFIX_PATH=$STARPU_DIR:/opt/rocm
-      export LD_LIBRARY_PATH=/opt/rocm/lib
-      ;;
-    -hipcuda )
-      export CMAKE_PREFIX_PATH=$STARPU_DIR:$HIPCUDA_DIR
-      export LD_LIBRARY_PATH=$HIPCUDA_DIR/lib
-      export HIP_PLATFORM=nvidia
-      export HIP_PATH=$HIPCUDA_DIR
-      ;;
-    * )
-      ;;
-  esac
-
   # for build: better to rely on pkg-config than to guess libraries with the env. var.
-  export PKG_CONFIG_PATH=$PARSEC_DIR/lib/pkgconfig:$PKG_CONFIG_PATH
   export PKG_CONFIG_PATH=$STARPU_DIR/lib/pkgconfig:$PKG_CONFIG_PATH
-  export PKG_CONFIG_PATH=$SIMGRID_DIR/lib/pkgconfig:$PKG_CONFIG_PATH
 
   # for ctest: we need this at runtime
-  export LD_LIBRARY_PATH=$PARSEC_DIR/lib:$LD_LIBRARY_PATH
-  export LD_LIBRARY_PATH=$QUARK_DIR/lib:$LD_LIBRARY_PATH
   export LD_LIBRARY_PATH=$STARPU_DIR/lib:$LD_LIBRARY_PATH
-  export LD_LIBRARY_PATH=$SIMGRID_DIR/lib:$LD_LIBRARY_PATH
 
 elif [[ "$SYSTEM" == "windows" ]]; then
 
diff --git a/.gitlab/build.sh b/.gitlab/build.sh
index de06d28ccbb1424496d8169a107b7c404ae247bb..a3ef571a10ac7488299e1de34e8e040e9365662d 100755
--- a/.gitlab/build.sh
+++ b/.gitlab/build.sh
@@ -3,8 +3,25 @@ set -ex
 
 SCAN=""
 
-if [[ "$SYSTEM" != "windows" ]]; then
-  if [[ "$SYSTEM" == "macosx" ]]; then
+# Configure with CMake
+case $SYSTEM in
+
+  linux)
+    echo "build on linux"
+    source .gitlab-ci-env.sh $CHAM_CI_ENV_ARG
+    if [[ $CI_COMMIT_REF_NAME == $CI_DEFAULT_BRANCH ]]; then
+      SCAN="scan-build -plist --intercept-first --exclude CMakeFiles --analyze-headers -o analyzer_reports "
+    fi
+    eval '${SCAN}cmake -B build-${VERSION} -S . -C cmake_modules/gitlab-ci-initial-cache.cmake $BUILD_OPTIONS'
+    ;;
+
+  guix)
+    echo "build on guix"
+    cmake -B build-${VERSION} -S . -C cmake_modules/gitlab-ci-initial-cache.cmake $BUILD_OPTIONS
+    ;;
+
+  macosx)
+    echo "build on macosx"
     # check starpu is already installed and install it if necessary
     DEP_INSTALLED=`brew ls --versions starpu | cut -d " " -f 2`
     if [[ -z "${DEP_INSTALLED}" ]]; then
@@ -24,23 +41,27 @@ if [[ "$SYSTEM" != "windows" ]]; then
     cmake -B build-${VERSION} -S . \
           -DBUILD_SHARED_LIBS=ON -DCMAKE_INSTALL_PREFIX=$PWD/install-${VERSION} \
           -DMORSE_ENABLE_COVERAGE=OFF -DBLA_PREFER_PKGCONFIG=ON
-  else
-    source .gitlab-ci-env.sh $CHAM_CI_ENV_ARG
-    if [[ $CI_COMMIT_REF_NAME == $CI_DEFAULT_BRANCH ]]
-    then
-      SCAN="scan-build -plist --intercept-first --exclude CMakeFiles --analyze-headers -o analyzer_reports "
-    fi
-    eval '${SCAN}cmake -B build-${VERSION} -S . -C cmake_modules/gitlab-ci-initial-cache.cmake $BUILD_OPTIONS'
-  fi
-else
-  # on windows the mpi_f08 interface is missing, see https://www.scivision.dev/windows-mpi-msys2/
-  # do not use static libraries because executables are too large and the build
-  # directory can reach more than 10Go
-  cmake -GNinja -B build-${VERSION} -S . \
-        -DBUILD_SHARED_LIBS=ON -DCMAKE_INSTALL_PREFIX=$PWD/install-${VERSION} \
-        -DCHAMELEON_USE_MPI=OFF
-fi
+    ;;
+
+  windows)
+    echo "build on windows"
+    # on windows the mpi_f08 interface is missing, see https://www.scivision.dev/windows-mpi-msys2/
+    # do not use static libraries because executables are too large and the build
+    # directory can reach more than 10Go
+    cmake -GNinja -B build-${VERSION} -S . \
+          -DBUILD_SHARED_LIBS=ON -DCMAKE_INSTALL_PREFIX=$PWD/install-${VERSION} \
+          -DCHAMELEON_USE_MPI=OFF
+    ;;
+  *)
+    echo "The SYSTEM environment variable is $SYSTEM. It is not one of : linux, guix, macosx, windows -> exit 1."
+    exit 1
+    ;;
+esac
+
+# Compile
 eval '${SCAN}cmake --build build-${VERSION} -j 4'
+
+# Install
 cmake --install build-${VERSION}
 
 #
@@ -59,6 +80,8 @@ export FC=gfortran
 
 # Set the path variables
 if [[ "$SYSTEM" == "linux" ]]; then
+  #export LIBRARY_PATH=$PWD/../../install-${VERSION}/lib:/usr/local/lib:$LIBRARY_PATH
+  #export LD_LIBRARY_PATH=$PWD/../../install-${VERSION}/lib:/usr/local/lib:$LD_LIBRARY_PATH
   export LIBRARY_PATH=$PWD/../../install-${VERSION}/lib:$LIBRARY_PATH
   export LD_LIBRARY_PATH=$PWD/../../install-${VERSION}/lib:$LD_LIBRARY_PATH
 elif [[ "$SYSTEM" == "macosx" ]]; then
@@ -69,10 +92,12 @@ elif [[ "$SYSTEM" == "windows" ]]; then
   export PATH=$PWD/../../install-${VERSION}/bin:$PATH
 fi
 
-# 1) using cmake:
-./link_cmake.sh $PWD/../../install-${VERSION}
-# 2) using pkg-config:
-./link_pkgconfig.sh $PWD/../../install-${VERSION}
+#if [[ "$SYSTEM" != "guix" ]]; then
+  # 1) using cmake:
+  ./link_cmake.sh $PWD/../../install-${VERSION}
+  # 2) using pkg-config:
+  ./link_pkgconfig.sh $PWD/../../install-${VERSION}
+#fi
 
 cd ../..
 rm -r install-${VERSION}
diff --git a/.gitlab/build.yml b/.gitlab/build.yml
index b79afef185608c55a760b731963fd3fd2db321f9..e5d6743322aec15b494fc88129fb6f2672b926b3 100644
--- a/.gitlab/build.yml
+++ b/.gitlab/build.yml
@@ -1,16 +1,18 @@
 ---
-.build_script_linux:
+.build_script_common:
   stage: build
-  tags: ["docker", "large"]
   extends: .only-master-mr
-  script:
-    - bash .gitlab/build.sh | tee ${LOGNAME}.log
   artifacts:
     name: "$CI_JOB_NAME-$CI_COMMIT_REF_SLUG"
-    expire_in: 180 minutes
+    expire_in: 1 week
     untracked: true
     when: always
 
+.build_script_linux:
+  extends: .build_script_common
+  script:
+    - bash .gitlab/build.sh | tee ${LOGNAME}.log
+
 build_hmat:
   extends: .build_script_linux
   variables:
@@ -27,7 +29,6 @@ build_openmp:
     LOGNAME: "chameleon-build-${SYSTEM}-${VERSION}"
     BUILD_OPTIONS: "-DCHAMELEON_SCHED=OPENMP"
 
-
 build_parsec:
   extends: .build_script_linux
   variables:
@@ -50,25 +51,34 @@ build_starpu:
     SYSTEM: linux
     VERSION: starpu
     LOGNAME: "chameleon-build-${SYSTEM}-${VERSION}"
-    BUILD_OPTIONS: "-DCHAMELEON_USE_CUDA=ON -DCHAMELEON_USE_MPI=ON"
+    BUILD_OPTIONS: "-DCHAMELEON_USE_CUDA=OFF -DCHAMELEON_USE_MPI=ON"
 
-build_starpu_hip:
-  extends: .build_script_linux
+.build_script_guix:
+  tags: ['plafrim']
+  extends: .build_script_common
+  script:
+    - guix describe -f channels
+    - guix shell --pure --preserve=SYSTEM --preserve=VERSION --preserve=LOGNAME --preserve=BUILD_OPTIONS
+                 -D chameleon-${GUIX_CHAMELEON_VARIANT} coreutils bash-minimal --
+                 bash .gitlab/build.sh | tee ${LOGNAME}.log
+
+build_starpu_cuda:
+  extends: .build_script_guix
   variables:
-    SYSTEM: linux
-    VERSION: starpu_hip
+    SYSTEM: guix
+    VERSION: starpu_cuda
+    GUIX_CHAMELEON_VARIANT: cuda
     LOGNAME: "chameleon-build-${SYSTEM}-${VERSION}"
-    CHAM_CI_ENV_ARG: hip
-    BUILD_OPTIONS: "-DCHAMELEON_USE_HIP_ROC=ON -DCHAMELEON_USE_MPI=ON"
+    BUILD_OPTIONS: "-DCHAMELEON_USE_CUDA=ON -DCHAMELEON_USE_MPI=ON -DBLA_VENDOR=OpenBLAS"
 
-build_starpu_hipcuda:
-  extends: .build_script_linux
+build_starpu_hip:
+  extends: .build_script_guix
   variables:
-    SYSTEM: linux
-    VERSION: starpu_hipcuda
+    SYSTEM: guix
+    VERSION: starpu_hip
+    GUIX_CHAMELEON_VARIANT: hip
     LOGNAME: "chameleon-build-${SYSTEM}-${VERSION}"
-    CHAM_CI_ENV_ARG: hipcuda
-    BUILD_OPTIONS: "-DCHAMELEON_USE_HIP_CUDA=ON -DCHAMELEON_HIPBLAS_PATH=/home/gitlab/hipcuda/hipblas -DCHAMELEON_USE_MPI=ON"
+    BUILD_OPTIONS: "-DCHAMELEON_USE_HIP_ROC=ON -DCHAMELEON_USE_MPI=ON -DBLA_VENDOR=OpenBLAS -DCMAKE_C_COMPILER=gcc -DCMAKE_Fortran_COMPILER=gfortran"
 
 build_starpu_simgrid:
   extends: .build_script_linux
@@ -91,7 +101,7 @@ build_starpu_macosx:
     - bash .gitlab/build.sh | tee ${LOGNAME}.log
   artifacts:
     name: "$CI_JOB_NAME-$CI_COMMIT_REF_SLUG"
-    expire_in: 180 minutes
+    expire_in: 1 week
     paths:
       - ${LOGNAME}.log
   cache:
@@ -113,7 +123,7 @@ build_starpu_macosx:
     - bash -lc .gitlab/build.sh | tee "$env:LOGNAME.log"
   artifacts:
     name: "$CI_JOB_NAME-$CI_COMMIT_REF_SLUG"
-    expire_in: 180 minutes
+    expire_in: 1 week
     paths:
       - ${LOGNAME}.log
   cache:
diff --git a/.gitlab/check_link/link_cmake.sh b/.gitlab/check_link/link_cmake.sh
index 613218956c689e3187ae72e99207f2d51a2b2305..3b995b52b32a4c3702af05adb3e557494efedc94 100755
--- a/.gitlab/check_link/link_cmake.sh
+++ b/.gitlab/check_link/link_cmake.sh
@@ -21,7 +21,7 @@ then
     exit 1
 fi
 cmake -B build -DCMAKE_PREFIX_PATH=$1
-cmake --build    build --verbose
+cmake --build build --verbose
 if [[ "$VERSION" != "starpu_simgrid" ]]; then
     ctest --test-dir build --verbose
 fi