inet-mon/flake.nix
Ricardo (XenGi) Band 041956c137
improve flake
2026-05-30 19:26:30 +02:00

132 lines
3.7 KiB
Nix

{
description = "ESP32 development tools";
inputs = {
nixpkgs.url = "github:nixos/nixpkgs/nixos-25.11";
flake-utils.url = "github:numtide/flake-utils";
nixpkgs-esp-dev = {
#url = "github:mirrexagon/nixpkgs-esp-dev";
url = "github:dvdvgt/nixpkgs-esp-dev/update-v6.0.1";
inputs = {
nixpkgs.follows = "nixpkgs";
flake-utils.follows = "flake-utils";
};
};
};
outputs =
{
self,
nixpkgs,
flake-utils,
nixpkgs-esp-dev,
}:
flake-utils.lib.eachDefaultSystem (
system:
let
pkgs = import nixpkgs {
inherit system;
overlays = [ (import "${nixpkgs-esp-dev}/overlay.nix") ];
config.permittedInsecurePackages = [
"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
git
minicom
usbutils
gawk
coreutils
cmake
ninja
];
};
}
);
}