This commit is contained in:
andromeda
2026-04-08 00:52:29 +02:00
commit 377aeedafb
4 changed files with 107 additions and 0 deletions

1
.gitignore vendored Normal file
View File

@@ -0,0 +1 @@
result*

7
README.md Normal file
View File

@@ -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

27
flake.lock generated Normal file
View File

@@ -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
}

72
flake.nix Normal file
View File

@@ -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<<EOF>$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";};
};
}