{
  perSystem = { libMy, pkgs, ... }:
  let
    genImgsPy = pkgs.python3.withPackages (ps: with ps; [ pillow ]);
  in
  {
    devenv.shells.firmware = libMy.withRootdir {
      packages = with pkgs; [
        esp-idf-esp32s3
        picocom
        lv_font_conv
        imagemagick
      ];

      env = {
        # PICO_SDK_PATH = "${pkgs.pico-sdk}/lib/pico-sdk";
      };

      scripts = {
        init.exec = ''
          idf.py set-target esp32s3
        '';
        gen-fonts.exec = ''
          for s in 40 180; do
            DEBUG='*' lv_font_conv --font assets/Tungsten-Bold.ttf --bpp 4 --size $s -r 0x20-0x7F --no-compress \
              --format lvgl --lv-include lvgl.h --lv-font-name lv_font_tungsten_"$s" -o main/font/tungsten_"$s".c
          done
        '';
        gen-imgs.exec = ''
          for e in moon star sleep; do
            magick assets/''${e}_orig.png -resize 120x120 assets/$e.png
          done

          ${genImgsPy}/bin/python gen-imgs.py
        '';
      };
    };
  };
}