commit 377aeedafbfd326205e39565f90ca68f293d0bb6 Author: andromeda Date: Wed Apr 8 00:52:29 2026 +0200 init diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..fcfc4a1 --- /dev/null +++ b/.gitignore @@ -0,0 +1 @@ +result* diff --git a/README.md b/README.md new file mode 100644 index 0000000..630498f --- /dev/null +++ b/README.md @@ -0,0 +1,7 @@ +# nix-mdk + +this is a nix flake for the [mdk](https://github.com/cpq/mdk) single-header ESP32C3 SDK. It also provides the awesome [esputil](https://github.com/cpq/esputil) flashing utility. + +## todo + +- add support for ESP32 diff --git a/flake.lock b/flake.lock new file mode 100644 index 0000000..ab429ce --- /dev/null +++ b/flake.lock @@ -0,0 +1,27 @@ +{ + "nodes": { + "nixpkgs": { + "locked": { + "lastModified": 1767313136, + "narHash": "sha256-16KkgfdYqjaeRGBaYsNrhPRRENs0qzkQVUooNHtoy2w=", + "owner": "nixos", + "repo": "nixpkgs", + "rev": "ac62194c3917d5f474c1a844b6fd6da2db95077d", + "type": "github" + }, + "original": { + "owner": "nixos", + "ref": "nixos-25.05", + "repo": "nixpkgs", + "type": "github" + } + }, + "root": { + "inputs": { + "nixpkgs": "nixpkgs" + } + } + }, + "root": "root", + "version": 7 +} diff --git a/flake.nix b/flake.nix new file mode 100644 index 0000000..708c644 --- /dev/null +++ b/flake.nix @@ -0,0 +1,72 @@ +{ + 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";}; + }; +}