diff --git a/nix/firmware.nix b/nix/firmware.nix
index 0e181c99ccdc31dc8517bd3c2a054c32c3ec84ab..6cc494600a401c1fa6448534aff27e690c51ccc3 100644
--- a/nix/firmware.nix
+++ b/nix/firmware.nix
@@ -1,16 +1,25 @@
-{ pkgsCross, python3, ninja, meson, gcc }:
+{ fetchFromGitHub, pkgsCross, python3, ninja, meson, gcc }:
 
-pkgsCross.armhf-embedded.stdenv.mkDerivation {
-  name = "card10";
-  src = ./..;
-  postPatch = ''
-    substituteInPlace card10-cross.ini \
-      --replace arm-none-eabi arm-none-eabihf
-  '';
-  nativeBuildInputs = [ ninja meson python3 gcc ];
-  mesonFlags = [
-    "--cross-file card10-cross.ini"
-    "--optimization s"
-  ];
-  ninjaFlags = [ "-v" ];
-}
+let
+  micropython = fetchFromGitHub {
+    owner = "micropython";
+    repo = "micropython";
+    rev = "62f004ba424920a01e60c7a9a064b8ec9cd69c12";
+    sha256 = "1v2aisrsy9g22jjlgq6yf5k111bvr3j9lr38jb77cgmhnp8sxfzi";
+  };
+in
+  pkgsCross.armhf-embedded.stdenv.mkDerivation {
+    name = "card10";
+    src = ./..;
+    postPatch = ''
+      substituteInPlace card10-cross.ini \
+        --replace arm-none-eabi arm-none-eabihf
+      ln -s ${micropython} lib/micropython/micropython
+    '';
+    nativeBuildInputs = [ ninja meson python3 gcc ];
+    mesonFlags = [
+      "--cross-file card10-cross.ini"
+      "--optimization s"
+    ];
+    ninjaFlags = [ "-v" ];
+  }