{ lib, mkShell, zephyrPackages, cmake, ninja, gnumake, python3, toolchains ? with zephyrPackages.toolchains; [ arm-zephyr-eabi ], enableWest ? false, zephyrSrc ? zephyrPackages.src, modules ? [ ], extraPackages ? [ ], extraAttrs ? { }, }: let zephyr-sdk = zephyrPackages.sdk.override { inherit toolchains; }; in mkShell ( { packages = [ cmake ninja gnumake python3 ] ++ ( with python3.pkgs; [ # requirements-base.txt pyelftools pyyaml pykwalify canopen packaging progress psutil pylink-square pyserial requests anytree intelhex ] ++ lib.optional enableWest python3.pkgs.west ++ extraPackages ); ZEPHYR_TOOLCHAIN_VARIANT = "zephyr"; ZEPHYR_SDK_INSTALL_DIR = "${zephyr-sdk}"; } // lib.optionalAttrs (zephyrSrc != null) { ZEPHYR_BASE = "${zephyrSrc}"; shellHook = '' PATH="${zephyrSrc}/scripts:$PATH" ''; } // lib.optionalAttrs (modules != [ ]) { ZEPHYR_MODULES = lib.concatStringsSep ";" (map (pkg: pkg.passthru.modulePath) modules); } // extraAttrs )