{ inputs.nixpkgs.url = "github:nixos/nixpkgs/nixos-25.05"; outputs = { nixpkgs, self, ... }: let pkgs = nixpkgs.legacyPackages.x86_64-linux; src = pkgs.fetchzip { url = "https://github.com/cpq/mdk/archive/e2c1d4e4bd9b152dfa32b48a7c0ae5f5a8b8276d.zip"; sha256 = "sha256-IBlM/c75KscqxKccGbiiiyjcxyLvUQb+ycHFGEpFAn8="; }; esp32c3example = {exampleName}: (pkgs.callPackage ({ pkgsCross, gitMinimal, fetchzip, esputil, lib, ... }: pkgsCross.riscv64-embedded.stdenv.mkDerivation { pname = "esp32c3-${exampleName}"; version = "0.0.2"; inherit src; MDK = "/build/source"; # so it jumps to build directory for ARCH = "esp32c3"; TOOLCHAIN = "riscv64-none-elf"; nativeBuildInputs = [ gitMinimal ]; patchPhase = '' cp ${esputil}/bin/esputil esputil ''; buildPhase = '' git init echo $ESPUTIL make -C examples/${exampleName} build ''; installPhase = '' mkdir -p $out/bin cp ./examples/${exampleName}/firmware.{bin,elf} $out/bin/ cat<$out/bin/esp32c3-${exampleName} #!/usr/bin/env bash ${esputil}/bin/esputil flash 0 $(echo $out)/bin/firmware.bin EOF chmod +x $out/bin/esp32c3-${exampleName} ''; }) {esputil = self.packages.x86_64-linux.esputil;}); in { packages.x86_64-linux.esputil = pkgs.callPackage ({ stdenv, fetchzip, ... }: stdenv.mkDerivation { pname = "esputil"; version = "1.0.1"; src = fetchzip { url = "https://github.com/cpq/esputil/archive/refs/tags/1.0.1.zip"; sha256 = "sha256-yP/JPmk+5X7Ok89rOjqtiyQmIryxTiLZ0/Eil0XJHLA="; }; installPhase = '' mkdir -p $out/bin cp ./esputil $out/bin/esputil -r ''; }) {}; packages.x86_64-linux.esp32c3-blinky = esp32c3example {exampleName = "blinky";}; packages.x86_64-linux.esp32c3-bme280 = esp32c3example {exampleName = "bme280";}; packages.x86_64-linux.esp32c3-button = esp32c3example {exampleName = "button";}; packages.x86_64-linux.esp32c3-ws2812 = esp32c3example {exampleName = "ws2812";}; }; }