diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml
index 3197845daa48b3b1e1c8f69779bf599c84187eef..cf3ff71f127c241922b065107e97d7f503fc7070 100644
--- a/.gitlab-ci.yml
+++ b/.gitlab-ci.yml
@@ -8,7 +8,7 @@ variables:
 default:
   # built via:
   #     docker load < $(nix-build nix/docker-image.nix)
-  image: registry.k0.hswaw.net/q3k/flow3r-build:xm5xqlpswrnav5pi36qjphyg8v7gplik
+  image: registry.k0.hswaw.net/q3k/flow3r-build:kvy1jakg8i4jxx4skhpy6si3vvslsgrb
 
 clang-tidy:
   stage: check
diff --git a/nix/docker-image.nix b/nix/docker-image.nix
index da6daa138c109bd992c06d93df2a526f4f842453..8f557176c3dec23f0d6f203966fc74714b4d93d7 100644
--- a/nix/docker-image.nix
+++ b/nix/docker-image.nix
@@ -18,8 +18,13 @@ pkgs.dockerTools.buildImage {
 
       mypy
 
+      (python3.withPackages (ps: with ps; [
+        sphinx sphinx_rtd_theme
+        black
+      ]))
+
       # random build tools
-      python3 gcc gnused findutils gnugrep
+      gcc gnused findutils gnugrep
       git wget gnumake
       cmake ninja pkgconfig
     ];
diff --git a/nix/pkgs.nix b/nix/pkgs.nix
index 4e457dd2a6d0baf172b3440cd90b2de4f45899e8..41a2b3d72d7fe1bc7d58f657670c9ffb7c4d9ae5 100644
--- a/nix/pkgs.nix
+++ b/nix/pkgs.nix
@@ -24,6 +24,7 @@ in with nixpkgs; rec {
 
     python3Packages.sphinx
     python3Packages.sphinx_rtd_theme
+    python3Packages.black
     mypy
   ];
   fwdev = fwbuild ++ [
diff --git a/tools/format.sh b/tools/format.sh
index 6f3da1cc7cc50547ff445fc9913cc0b9ca33bf0d..2f496d74f301254eddd13de506017e792033c0d7 100755
--- a/tools/format.sh
+++ b/tools/format.sh
@@ -1,6 +1,13 @@
 #!/usr/bin/env bash
 set -e -x
 
+# Python: black
+black \
+    python_payload \
+    sim \
+    tools
+
+# C: clang-format
 find . \
     -type d \
     \( \