esp32-c3-ntfy-client-attempt/flake.nix
2025-10-18 04:32:19 -07:00

73 lines
2.2 KiB
Nix

{
inputs = {
esp-rs-nix = {
url = "github:leighleighleigh/esp-rs-nix";
};
flake-utils.url = "github:numtide/flake-utils";
nixpkgs.url = "github:NixOS/nixpkgs/nixpkgs-unstable";
};
outputs = { nixpkgs, flake-utils, esp-rs-nix, ... }@inputs: let
arch = "riscv32imc-unknown-none-elf";
mkPkgs = system: (import nixpkgs) {
inherit system;
rust.rustcTarget = arch;
};
eachSystemOutputs = flake-utils.lib.eachDefaultSystem (system: let
pkgs = mkPkgs system;
lib = pkgs.lib;
inherit (esp-rs-nix.packages.${system}) esp-rs;
inherit (lib.meta) getExe;
buildy = pkgs.writeShellScriptBin "build" ''
set -euox pipefail
PACKAGE_NAME="$(${getExe pkgs.toml-cli} get -r Cargo.toml package.name)"
EXE="''${PROJECT_DIR}/target/${arch}/release/''${PACKAGE_NAME}"
cargo build --release &&
sudo espflash flash ''${EXE}
'';
esp-shell = pkgs.mkShell rec {
name = "esp-shell";
buildInputs = [
esp-rs
buildy
pkgs.rustup
pkgs.espflash
pkgs.clippy
pkgs.pkg-config
pkgs.stdenv.cc
pkgs.libusb1
pkgs.python3
pkgs.mprocs
pkgs.toml-cli
pkgs.moreutils
pkgs.gdb
];
LD_LIBRARY_PATH = "${pkgs.lib.makeLibraryPath buildInputs}";
shellHook = ''
export PATH="${lib.makeBinPath [pkgs.rust-analyzer]}:$PATH"
export PROJECT_DIR="$(pwd)";
# custom bashrc stuff
export PS1_PREFIX="(esp-rs)"
. ~/.bashrc
export LD_LIBRARY_PATH="''${LD_LIBRARY_PATH}:${LD_LIBRARY_PATH}"
# this is important - it tells rustup where to find the esp toolchain,
# without needing to copy it into your local ~/.rustup/ folder.
export RUSTUP_TOOLCHAIN=${esp-rs}
# Load shell completions for espflash
if (which espflash >/dev/null 2>&1); then
. <(espflash completions $(basename $SHELL))
fi
'';
};
in {
devShells = {
inherit esp-shell;
default = esp-shell;
};
});
in eachSystemOutputs;
}