{ 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)