Compare commits

...

2 Commits

Author SHA1 Message Date
d25704ee86 Fix broken upload script because of missing shebang 2025-10-17 15:38:37 +02:00
b53c9c75cf Rename to arduino-sketch-builder-nix 2025-10-17 14:26:02 +02:00
3 changed files with 38 additions and 31 deletions

View File

@@ -1,45 +1,41 @@
# arduino-nix
# arduino-sketch-builder-nix
A flake that allows building an `arduino-cli` environment with certain packages and libraries pre-installed.
A flake that allows building Arduino sketches with nix.
This project is based on [arduino-nix](https://github.com/bouk/arduino-nix).
## Example
You need to provide a package index and library index to use `arduino-nix`. You can find some at [arduino-indexes](https://github.com/bouk/arduino-indexes).
Alternatively, you can download them at https://downloads.arduino.cc/packages/package_index.json and https://downloads.arduino.cc/libraries/library_index.json
From the indexes you create overlays which then make the Arduino packages and libraries available for the wrapArduinoCLI function provided by this flake.
```nix
{
inputs = {
nixpkgs.url = "github:NixOS/nixpkgs/nixpkgs-unstable";
flake-utils.url = "github:numtide/flake-utils";
arduino-nix.url = "github:bouk/arduino-nix";
arduino-sketch-builder-nix.url = "git+https://git.clerie.de/clerie/arduino-sketch-builder-nix";
arduino-index = {
url = "github:bouk/arduino-indexes";
flake = false;
};
arduino-esp32 = {
url = "github:espressif/arduino-esp32/gh-pages";
flake = false;
};
};
outputs = {
self,
nixpkgs,
flake-utils,
arduino-nix,
arduino-sketch-builder-nix,
arduino-index,
arduino-esp32,
...
}@attrs:
let
overlays = [
(arduino-nix.overlay)
(arduino-nix.mkArduinoPackageOverlay (arduino-index + "/index/package_index.json"))
(arduino-nix.mkArduinoPackageOverlay (arduino-index + "/index/package_rp2040_index.json"))
(arduino-nix.mkArduinoLibraryOverlay (arduino-index + "/index/library_index.json"))
(arduino-nix.mkArduinoPackageOverlay (pkgs.fetchurl {
url = "https://raw.githubusercontent.com/espressif/arduino-esp32/8bae7e23376c6087a55e46456049ae6d73b72e16/package_esp32_index.json";
hash = "sha256-0kvZeRDtE/JKJes86omyN4cf4HWfX68P7xPfE+BvTC8=";
}))
(arduino-sketch-builder-nix.overlay)
(arduino-sketch-builder-nix.mkArduinoPackageOverlay (arduino-index + "/index/package_index.json"))
(arduino-sketch-builder-nix.mkArduinoPackageOverlay (arduino-index + "/index/package_rp2040_index.json"))
(arduino-sketch-builder-nix.mkArduinoLibraryOverlay (arduino-index + "/index/library_index.json"))
(arduino-sketch-builder-nix.mkArduinoPackageOverlay (arduino-esp32 + "/package_esp32_index.json"))
];
in
(flake-utils.lib.eachDefaultSystem (system:
@@ -51,11 +47,11 @@ From the indexes you create overlays which then make the Arduino packages and li
# arduinoEnv provides bin/arduino-cli and some useful helpers functions
arduinoEnv = pkgs.makeArduinoEnv {
libraries = with pkgs.arduinoLibraries; [
(arduino-nix.latestVersion ADS1X15)
(arduino-nix.latestVersion Ethernet_Generic)
(arduino-nix.latestVersion SCL3300)
(arduino-nix.latestVersion TMCStepper)
(arduino-nix.latestVersion pkgs.arduinoLibraries."Adafruit PWM Servo Driver Library")
(arduino-sketch-builder-nix.latestVersion ADS1X15)
(arduino-sketch-builder-nix.latestVersion Ethernet_Generic)
(arduino-sketch-builder-nix.latestVersion SCL3300)
(arduino-sketch-builder-nix.latestVersion TMCStepper)
(arduino-sketch-builder-nix.latestVersion pkgs.arduinoLibraries."Adafruit PWM Servo Driver Library")
];
packages = with pkgs.arduinoPackages; [
@@ -101,7 +97,15 @@ From the indexes you create overlays which then make the Arduino packages and li
}
```
## Interactive arduino-cli usage:
### Package and library index
You need to provide a package index and library index. You can use [arduino-indexes](https://github.com/bouk/arduino-indexes) as a collection of common indexes. Accessing them via this git repo allows Nix Flakes to pin them as an input.
Alternatively, you can just download and check in the official Arduino indexes:
- <https://downloads.arduino.cc/packages/package_index.json>
- <https://downloads.arduino.cc/libraries/library_index.json>
### Interactive arduino-cli usage:
```
nix shell .#arduinoEnv
@@ -109,7 +113,7 @@ nix shell .#arduinoEnv
This adds a wrapped version of `arduino-cli` to your path that reflects you Arduino environment.
## Build Arduino Sketch
### Build Arduino Sketch
```
nix build .#my-rp2040-project
@@ -117,7 +121,7 @@ nix build .#my-rp2040-project
Now you have `result` in your current working directory containing the compile outputs.
## Upload to board
### Upload to board
```
nix run .#my-rp2040-project.uploadArduinoSketch -- -p /dev/ttyUSB0

View File

@@ -59,9 +59,12 @@ let
uploadArduinoSketch = arduinoEnv: {
arduinoSketch
, fqbn
}: pkgs.writeScriptBin "upload-arduino-sketch" ''
}: pkgs.writeShellApplication {
name = "upload-arduino-sketch";
text = ''
${arduinoEnv}/bin/arduino-cli upload --log --input-dir=${arduinoSketch} --fqbn=${fqbn} "$@"
'';
'';
};
binaryTarball = {
arduinoSketch

View File

@@ -1,5 +1,5 @@
{
description = "Wrapper for arduino-cli";
description = "Build Arduino sketches";
outputs = { self }: {
mkArduinoPackageOverlay = packageIndexFile: (self: super: {