{ depot , pkgs ? import {} , ... }: let heatshrink2 = pm: pm.buildPythonPackage rec { pname = "heatshrink2"; version = "0.11.0"; src = pkgs.fetchFromGitHub { owner = "eerimoq"; repo = "pyheatshrink"; rev = version; hash = "sha256:1122abg9yf3shbb3h6kzh8f8vmhgxy1w9ck0mjg1zqyncry2hwiz"; fetchSubmodules = true; }; propagatedBuildInputs = with pm; [ cython ]; }; scons = pkgs.scons.overridePythonAttrs (_: rec { version = "4.4.0"; src = pkgs.fetchurl { url = "mirror://sourceforge/scons/scons/${version}/SCons-${version}.tar.gz"; sha256 = "0pv836q2j37w29hg5w5d7ssjfglv9kq5yd0v1vm1cj4j78qb4hrx"; }; }); python-with-deps = pkgs.python3.withPackages (pm: with pm; [ pillow (heatshrink2 pm) protobuf setuptools pyserial grpcio grpcio-tools (pm.toPythonModule scons) ansi colorlog ]); deps = with pkgs; [ gcc-arm-embedded-10 openocd clang dfu-util git protobuf python-with-deps ]; in pkgs.stdenvNoCC.mkDerivation rec { pname = "flipper-firmware"; version = "RM0209-2252-0.76.1-dcbe3cd"; upstreamVersion = "0.76.1"; src = pkgs.fetchgit { url = "https://github.com/RogueMaster/flipperzero-firmware-wPlugins.git"; rev = "dcbe3cd255bc2c2d5da9d3f2859a11f45d8bc2d4"; fetchSubmodules = true; sha256 = "1zs10b9rxbbxcwv9r28q8vyx3jkkg71mg4xfpf18zmkzj3wczaiv"; }; patches = [ ./0001-simply-do-not-run-git.patch ./0002-proto_ver_generator-use-changelog-not-git.patch ./0003-scripts-fbt-version-no-git.patch ./0004-scripts-sconsdist-disable-strict_timestamps-allow-FS.patch ]; nativeBuildInputs = deps; WORKFLOW_BRANCH_OR_TAG = version; DIST_SUFFIX = ""; CUSTOM_FLIPPER_NAME = ""; FBT_NOENV = 1; FBT_NO_SYNC = 1; buildPhase = '' runHook preBuild mkdir -p $NIX_BUILD_TOP/bin ln -s $(command -v arm-none-eabi-gcc) $NIX_BUILD_TOP/bin/arm-none-eabi-cc export PATH=$NIX_BUILD_TOP/bin:$PATH export WORKFLOW_BRANCH_OR_TAG DIST_SUFFIX CUSTOM_FLIPPER_NAME echo building icons ./fbt icons echo building resources ./fbt -j$NIX_BUILD_CORES COMPACT=1 DEBUG=0 resources icons echo building firmware ./fbt -j$NIX_BUILD_CORES --with-updater COMPACT=1 DEBUG=0 updater_package runHook postBuild ''; installPhase = '' runHook preInstall cp -r dist $out runHook postInstall ''; passthru.deps = deps; passthru.upload = let firmware = depot.nix.pkgs.flipperzero-firmware; in pkgs.writeShellApplication { name = "upload-f0"; runtimeInputs = [ pkgs.google-cloud-sdk ]; text = '' echo "Uploading ${firmware.version}" gcloud storage cp "${firmware}/f7-C/*-update-*.tgz" "gs://lukegb-flipperzero/${firmware.name}.tgz" ''; }; }