diff --git a/nix/default.nix b/nix/default.nix
index 6b45d562bccf9479c2534a502b34618bcb5e692c..bf61a1b3287b163d90aa7329e1d59c082d89c136 100644
--- a/nix/default.nix
+++ b/nix/default.nix
@@ -25,13 +25,15 @@ let mk_buildInputs = { opamPackages ? [], nixPackages ? [] } :
         } // args);
 in
 
-rec {
+pkgs.lib.makeExtensible
+(self: {
   inherit src mk_buildInputs;
   buildInputs = mk_buildInputs {};
-  installed = main.out;
+  installed = self.main.out;
   main = mk_deriv {
         name = "frama-c";
-        inherit src buildInputs;
+        src = self.src;
+        buildInputs =self.buildInputs;
         outputs = [ "out" "build_dir" ];
         postPatch = ''
                patchShebangs .
@@ -73,9 +75,9 @@ rec {
 
   lint = mk_deriv {
         name = "frama-c-lint";
-        inherit src;
+        src = self.src;
         buildInputs =
-          (mk_buildInputs {
+          (self.mk_buildInputs {
             nixPackages = [ pkgs.bc ];
             opamPackages = [
               { name = "ocp-indent"; constraint = "=1.7.0"; }
@@ -102,9 +104,9 @@ rec {
 
   tests = mk_deriv {
         name = "frama-c-test";
-        inherit buildInputs;
-        build_dir = main.build_dir;
-        src = main.build_dir + "/dir.tar";
+        buildInputs = self.buildInputs;
+        build_dir = self.main.build_dir;
+        src = self.main.build_dir + "/dir.tar";
         sourceRoot = ".";
         postUnpack = ''
                find . \( -name "Makefile*" -or -name ".depend" -o -name "ptests_config" -o -name "config.status" \) -exec bash -c "t=\$(stat -c %y \"\$0\"); sed -i -e \"s&$(cat $build_dir/old_pwd)&$(pwd)&g\" \"\$0\"; touch -d \"\$t\" \"\$0\"" {} \;
@@ -124,9 +126,9 @@ rec {
 
   build-distrib-tarball = mk_deriv {
         name = "frama-c-build-distrib-tarball";
-        inherit src;
+        src = self.src;
         buildInputs =
-          (mk_buildInputs {
+          (self.mk_buildInputs {
             opamPackages = [
               { name = "headache"; constraint = "=1.05"; }
             ];} );
@@ -151,8 +153,8 @@ rec {
 
   build-from-distrib-tarball = mk_deriv {
         name = "frama-c-build-from-distrib-tarball";
-        inherit buildInputs;
-        src = build-distrib-tarball.out ;
+        buildInputs = self.buildInputs;
+        src = self.build-distrib-tarball.out ;
         outputs = [ "out" ];
         configurePhase = ''
                unset CC
@@ -169,9 +171,9 @@ rec {
 
   wp-qualif = mk_deriv {
         name = "frama-c-wp-qualif";
-        buildInputs = mk_buildInputs { };
-        build_dir = main.build_dir;
-        src = main.build_dir + "/dir.tar";
+        buildInputs = self.mk_buildInputs { };
+        build_dir = self.main.build_dir;
+        src = self.main.build_dir + "/dir.tar";
         sourceRoot = ".";
         postUnpack = ''
                find . \( -name "Makefile*" -or -name ".depend" -o -name "ptests_config" -o -name "config.status" \) -exec bash -c "t=\$(stat -c %y \"\$0\"); sed -i -e \"s&$(cat $build_dir/old_pwd)&$(pwd)&g\" \"\$0\"; touch -d \"\$t\" \"\$0\"" {} \;
@@ -197,9 +199,9 @@ rec {
 
   aorai-prove = mk_deriv {
         name = "frama-c-aorai-prove";
-        buildInputs = mk_buildInputs { };
-        build_dir = main.build_dir;
-        src = main.build_dir + "/dir.tar";
+        buildInputs = self.mk_buildInputs { };
+        build_dir = self.main.build_dir;
+        src = self.main.build_dir + "/dir.tar";
         sourceRoot = ".";
         postUnpack = ''
                find . \( -name "Makefile*" -or -name ".depend" -o -name "ptests_config" -o -name "test_config*" -o -name "config.status" \) -exec bash -c "t=\$(stat -c %y \"\$0\"); sed -i -e \"s&$(cat $build_dir/old_pwd)&$(pwd)&g\" \"\$0\"; touch -d \"\$t\" \"\$0\"" {} \;
@@ -225,9 +227,9 @@ rec {
 
   e-acsl-tests-dev = mk_deriv {
         name = "frama-c-e-acsl-tests-dev";
-        buildInputs = mk_buildInputs { nixPackages = [ pkgs.gmp pkgs.getopt ]; };
-        build_dir = main.build_dir;
-        src = main.build_dir + "/dir.tar";
+        buildInputs = self.mk_buildInputs { nixPackages = [ pkgs.gmp pkgs.getopt ]; };
+        build_dir = self.main.build_dir;
+        src = self.main.build_dir + "/dir.tar";
         sourceRoot = ".";
         postUnpack = ''
                find . \( -name "Makefile*" -or -name ".depend" -o -name "ptests_config" -o -name "config.status" \) -exec bash -c "t=\$(stat -c %y \"\$0\"); sed -i -e \"s&$(cat $build_dir/old_pwd)&$(pwd)&g\" \"\$0\"; touch -d \"\$t\" \"\$0\"" {} \;
@@ -247,8 +249,8 @@ rec {
 
   internal = mk_deriv {
         name = "frama-c-internal";
-        inherit src;
-        buildInputs = (mk_buildInputs { opamPackages = [ "xml-light" ]; } ) ++
+        src = self.src;
+        buildInputs = (self.mk_buildInputs { opamPackages = [ "xml-light" ]; } ) ++
                     [ pkgs.getopt
                       pkgs.libxslt pkgs.libxml2 pkgs.autoPatchelfHook
                       pkgs.swiProlog
@@ -320,4 +322,4 @@ rec {
         '';
   };
 
-}
+})
diff --git a/nix/frama-ci.nix b/nix/frama-ci.nix
index 7cfc5f43524b5b55ba76d95c0de0934a6550343c..d78e85527b47dea9320e89f8e73cc335fd145909 100644
--- a/nix/frama-ci.nix
+++ b/nix/frama-ci.nix
@@ -5,8 +5,8 @@ let
     src = builtins.fetchGit {
             "url" = "https://bobot:${password}@git.frama-c.com/frama-c/Frama-CI.git";
             "name" = "Frama-CI";
-            "rev" = "285cc9569c1ae0bfadb51320ba7d1d4c73b6bba0";
-            "ref" = "master";
+            "rev" = "e7625c0709dafafae64fc33319ba7fccae3f7070";
+            "ref" = "feature/pure-local-launch";
     };
  in
  {