From ab2ae6d0e8911dcbd1477cbf199528f158f10140 Mon Sep 17 00:00:00 2001 From: andromeda Date: Mon, 6 Apr 2026 17:21:54 +0200 Subject: [PATCH] use fenix to build package, have runner script; nix run works now! --- .cargo/config.toml | 3 +- flake.lock | 109 ++++++++++++++++++++++++++++++++++++++------- flake.nix | 39 ++++++++++++---- src/main.rs | 5 ++- 4 files changed, 129 insertions(+), 27 deletions(-) diff --git a/.cargo/config.toml b/.cargo/config.toml index e5798f8..637097c 100644 --- a/.cargo/config.toml +++ b/.cargo/config.toml @@ -1,5 +1,6 @@ [target.riscv32imac-unknown-none-elf] -runner = "sudo espflash flash --monitor --chip esp32c6" +# UPDATE flake.nix to reflect any changes here in the wrapper script +runner = "espflash flash --monitor --chip esp32c6" [env] ESP_LOG="info" diff --git a/flake.lock b/flake.lock index 3db9376..dd312e0 100644 --- a/flake.lock +++ b/flake.lock @@ -1,5 +1,69 @@ { "nodes": { + "fenix": { + "inputs": { + "nixpkgs": [ + "nixpkgs" + ], + "rust-analyzer-src": "rust-analyzer-src" + }, + "locked": { + "lastModified": 1775462255, + "narHash": "sha256-YRzdvh6nvMebcgO2nDpr8dqVwKHpp1BBRUHeMxX9UAY=", + "owner": "nix-community", + "repo": "fenix", + "rev": "f90343f1ed330243d4bbdbce51acbd93b776a797", + "type": "github" + }, + "original": { + "owner": "nix-community", + "repo": "fenix", + "type": "github" + } + }, + "fenix_2": { + "inputs": { + "nixpkgs": [ + "naersk", + "nixpkgs" + ], + "rust-analyzer-src": "rust-analyzer-src_2" + }, + "locked": { + "lastModified": 1752475459, + "narHash": "sha256-z6QEu4ZFuHiqdOPbYss4/Q8B0BFhacR8ts6jO/F/aOU=", + "owner": "nix-community", + "repo": "fenix", + "rev": "bf0d6f70f4c9a9cf8845f992105652173f4b617f", + "type": "github" + }, + "original": { + "owner": "nix-community", + "repo": "fenix", + "type": "github" + } + }, + "naersk": { + "inputs": { + "fenix": "fenix_2", + "nixpkgs": [ + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1769799857, + "narHash": "sha256-88IFXZ7Sa1vxbz5pty0Io5qEaMQMMUPMonLa3Ls/ss4=", + "owner": "nix-community", + "repo": "naersk", + "rev": "9d4ed44d8b8cecdceb1d6fd76e74123d90ae6339", + "type": "github" + }, + "original": { + "owner": "nix-community", + "repo": "naersk", + "type": "github" + } + }, "nixpkgs": { "locked": { "lastModified": 1775403759, @@ -18,27 +82,42 @@ }, "root": { "inputs": { - "nixpkgs": "nixpkgs", - "rust-overlay": "rust-overlay" + "fenix": "fenix", + "naersk": "naersk", + "nixpkgs": "nixpkgs" } }, - "rust-overlay": { - "inputs": { - "nixpkgs": [ - "nixpkgs" - ] - }, + "rust-analyzer-src": { + "flake": false, "locked": { - "lastModified": 1775445266, - "narHash": "sha256-3fgIj85WHQbOamrpIw9WY3ZL1PoEvjPOjmzMYNsEQJo=", - "owner": "oxalica", - "repo": "rust-overlay", - "rev": "61747bc3cf2da179b9af356ae9e70f3b895b0c24", + "lastModified": 1775429583, + "narHash": "sha256-bFC/p7Ywyd9QIr9DbU3Q75c7AcaCm9wVmEvcI3702cY=", + "owner": "rust-lang", + "repo": "rust-analyzer", + "rev": "38fb8f92ac15853d7fa9fb47fc2d81fdd5cd6c7e", "type": "github" }, "original": { - "owner": "oxalica", - "repo": "rust-overlay", + "owner": "rust-lang", + "ref": "nightly", + "repo": "rust-analyzer", + "type": "github" + } + }, + "rust-analyzer-src_2": { + "flake": false, + "locked": { + "lastModified": 1752428706, + "narHash": "sha256-EJcdxw3aXfP8Ex1Nm3s0awyH9egQvB2Gu+QEnJn2Sfg=", + "owner": "rust-lang", + "repo": "rust-analyzer", + "rev": "591e3b7624be97e4443ea7b5542c191311aa141d", + "type": "github" + }, + "original": { + "owner": "rust-lang", + "ref": "nightly", + "repo": "rust-analyzer", "type": "github" } } diff --git a/flake.nix b/flake.nix index 08806f4..9d42c39 100644 --- a/flake.nix +++ b/flake.nix @@ -1,32 +1,53 @@ { inputs = { nixpkgs.url = "github:nixos/nixpkgs/nixpkgs-unstable"; - rust-overlay = { + fenix = { inputs.nixpkgs.follows = "nixpkgs"; - url = "github:oxalica/rust-overlay"; + url = "github:nix-community/fenix"; + }; + naersk = { + inputs.nixpkgs.follows = "nixpkgs"; + url = "github:nix-community/naersk"; }; }; outputs = { + fenix, + naersk, nixpkgs, - rust-overlay, ... }: let - pkgs = import nixpkgs { - system = "x86_64-linux"; - overlays = [(import rust-overlay)]; + pkgs = nixpkgs.legacyPackages.x86_64-linux; + toolchain = fenix.packages.x86_64-linux.fromToolchainFile { + file = ./rust-toolchain.toml; + sha256 = "sha256-zC8E38iDVJ1oPIzCqTk/Ujo9+9kx9dXq7wAwPMpkpg0="; }; - rust-bin = pkgs.rust-bin.fromRustupToolchainFile ./rust-toolchain.toml; in { devShells.x86_64-linux.default = pkgs.mkShell { buildInputs = [ pkgs.espflash pkgs.esp-generate pkgs.rust-analyzer - rust-bin + toolchain ]; shellHook = '' - export RUSTUP_TOOLCHAIN=${rust-bin} + export RUSTUP_TOOLCHAIN=${toolchain} ''; }; + packages.x86_64-linux.default = + (naersk.lib.x86_64-linux.override { + cargo = toolchain; + rustc = toolchain; + }).buildPackage { + src = ./.; + # UPDATE .cargo/config.toml to reflect changes here in the runner + postInstall = '' + mv $out/bin/esp32c6-play $out/bin/.esp32c6-play + cat<$out/bin/esp32c6-play + #!/usr/bin/bash + ${pkgs.lib.getExe pkgs.espflash} flash --monitor --chip esp32c6 $(echo $out)/bin/.esp32c6-play + EOF + chmod +x $out/bin/esp32c6-play + ''; + }; }; } diff --git a/src/main.rs b/src/main.rs index 312fe20..960438f 100644 --- a/src/main.rs +++ b/src/main.rs @@ -16,9 +16,9 @@ esp_bootloader_esp_idf::esp_app_desc!(); fn main() -> ! { let peripherals = init(); - let mut led_buffer = smart_led_buffer!(1); + let mut led_buffer = smart_led_buffer!(1 /* # of leds */); let mut rgb_led = { - let frequency = Rate::from_mhz(80); + let frequency = Rate::from_mhz(80); // max frequency of RMT let rmt = Rmt::new(peripherals.RMT, frequency).expect("failed to initialize RMT0"); SmartLedsAdapter::new(rmt.channel0, peripherals.GPIO8, &mut led_buffer) }; @@ -28,6 +28,7 @@ fn main() -> ! { let r: u8 = i; let g: u8 = i + 255 / 3; // phase shifted a third let b: u8 = i + 2 * (255 / 3); // phase shifted two thirds + write_rgb(&mut rgb_led, RGB::new(sin(r), sin(g), sin(b))); wait_ms(8);