improve flake
This commit is contained in:
parent
d5882e2803
commit
041956c137
1 changed files with 91 additions and 4 deletions
95
flake.nix
95
flake.nix
|
|
@ -29,14 +29,101 @@
|
|||
"python3.13-ecdsa-0.19.1"
|
||||
];
|
||||
};
|
||||
autoSerialPort = pkgs.writeShellScriptBin "esp-port" ''
|
||||
set -euo pipefail
|
||||
|
||||
# Try common ESP USB serial patterns
|
||||
# TODO: reduce to Waveshare ESP32-S3 detection
|
||||
PORT=$(
|
||||
for p in /dev/serial/by-id/*; do
|
||||
case "$p" in
|
||||
*CP210*|*ch340*|*USB*|*ESP*) echo "$p"; break ;;
|
||||
esac
|
||||
done
|
||||
)
|
||||
|
||||
if [ -z "$PORT" ]; then
|
||||
echo "No ESP serial device found in /dev/serial/by-id"
|
||||
echo "Fallback: listing /dev/ttyUSB* /dev/ttyACM*"
|
||||
ls /dev/ttyUSB* /dev/ttyACM* 2>/dev/null || true
|
||||
exit 1
|
||||
fi
|
||||
|
||||
echo "$PORT"
|
||||
'';
|
||||
esp-idf = pkgs.esp-idf-full.override {
|
||||
rev = "v6.0.1";
|
||||
sha256 = "sha256-4KJa686qc+u7XkF/GS2o53l1SpwP2EmdqAn/qmlL1yU=";
|
||||
};
|
||||
in
|
||||
{
|
||||
apps = {
|
||||
menuconfig = {
|
||||
type = "app";
|
||||
program = "${pkgs.writeShellScriptBin "idf-menuconfig" ''
|
||||
${esp-idf}/tools/idf.py menuconfig
|
||||
''}/bin/idf-menuconfig";
|
||||
};
|
||||
build = {
|
||||
type = "app";
|
||||
program = "${pkgs.writeShellScriptBin "idf-build" ''
|
||||
${esp-idf}/tools/idf.py build
|
||||
''}/bin/idf-build";
|
||||
};
|
||||
flash = {
|
||||
type = "app";
|
||||
program = "${pkgs.writeShellScriptBin "idf-flash" ''
|
||||
set -euo pipefail
|
||||
|
||||
PORT=$(${autoSerialPort}/bin/esp-port)
|
||||
echo "Flashing on: $PORT"
|
||||
|
||||
${esp-idf}/tools/idf.py -p "$PORT" flash
|
||||
''}/bin/idf-flash";
|
||||
};
|
||||
monitor = {
|
||||
type = "app";
|
||||
program = "${pkgs.writeShellScriptBin "idf-monitor" ''
|
||||
set -euo pipefail
|
||||
|
||||
PORT=$(${autoSerialPort}/bin/esp-port)
|
||||
echo "Monitoring: $PORT"
|
||||
|
||||
${esp-idf}/tools/idf.py -p "$PORT" monitor
|
||||
''}/bin/idf-monitor";
|
||||
};
|
||||
clean = {
|
||||
type = "app";
|
||||
program = "${pkgs.writeShellScriptBin "idf-clean" ''
|
||||
${esp-idf}/tools/idf.py clean
|
||||
''}/bin/idf-clean";
|
||||
};
|
||||
full = {
|
||||
type = "app";
|
||||
program = "${pkgs.writeShellScriptBin "idf-full" ''
|
||||
set -euo pipefail
|
||||
|
||||
PORT=$(${autoSerialPort}/bin/esp-port)
|
||||
|
||||
echo "Building..."
|
||||
${esp-idf}/tools/idf.py build
|
||||
echo "Flashing on $PORT..."
|
||||
${esp-idf}/tools/idf.py -p "$PORT" flash
|
||||
echo "Starting monitor..."
|
||||
${esp-idf}/tools/idf.py -p "$PORT" monitor
|
||||
''}/bin/idf-full";
|
||||
};
|
||||
};
|
||||
devShells.default = pkgs.mkShell {
|
||||
buildInputs = with pkgs; [
|
||||
(esp-idf-full.override {
|
||||
rev = "v6.0.1";
|
||||
sha256 = "sha256-4KJa686qc+u7XkF/GS2o53l1SpwP2EmdqAn/qmlL1yU=";
|
||||
})
|
||||
esp-idf
|
||||
git
|
||||
minicom
|
||||
usbutils
|
||||
gawk
|
||||
coreutils
|
||||
cmake
|
||||
ninja
|
||||
];
|
||||
};
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in a new issue