diff --git a/nix/firmware.nix b/nix/firmware.nix
index 6cc494600a401c1fa6448534aff27e690c51ccc3..073e8d98a893a4a80df7ebae2101690bb1a9713f 100644
--- a/nix/firmware.nix
+++ b/nix/firmware.nix
@@ -6,6 +6,7 @@ let
     repo = "micropython";
     rev = "62f004ba424920a01e60c7a9a064b8ec9cd69c12";
     sha256 = "1v2aisrsy9g22jjlgq6yf5k111bvr3j9lr38jb77cgmhnp8sxfzi";
+    fetchSubmodules = true;
   };
 in
   pkgsCross.armhf-embedded.stdenv.mkDerivation {
@@ -14,7 +15,8 @@ in
     postPatch = ''
       substituteInPlace card10-cross.ini \
         --replace arm-none-eabi arm-none-eabihf
-      ln -s ${micropython} lib/micropython/micropython
+      rmdir lib/micropython/micropython
+      ln -s ${micropython}/ lib/micropython/micropython
     '';
     nativeBuildInputs = [ ninja meson python3 gcc ];
     mesonFlags = [