{ lib, pkgs }: let wrap = { packages ? [] , libraries ? [] }: let inherit (pkgs.callPackage ./lib.nix {}) latestVersion; builtinPackages = (map latestVersion (builtins.attrValues pkgs.arduinoPackages.tools.builtin)); userPath = pkgs.symlinkJoin { name = "arduino-libraries"; paths = libraries; }; dataPath = pkgs.symlinkJoin { name = "arduino-data"; paths = builtinPackages ++ packages ++ [ # Add some dummy files to keep the CLI happy (pkgs.writeTextDir "inventory.yaml" (builtins.toJSON {})) (pkgs.writeTextDir "package_index.json" (builtins.toJSON {packages = [];})) (pkgs.writeTextDir "library_index.json" (builtins.toJSON {libraries = [];})) (pkgs.runCommand "staging-dir" {} "mkdir $out/staging") ]; }; in pkgs.runCommand "arduino-cli-wrapped" { buildInputs = [ pkgs.makeWrapper ]; meta.mainProgram = "arduino-cli"; passthru = { inherit dataPath userPath; }; } '' makeWrapper ${pkgs.arduino-cli}/bin/arduino-cli $out/bin/arduino-cli \ --set ARDUINO_UPDATER_ENABLE_NOTIFICATION false \ --set ARDUINO_DIRECTORIES_DATA ${dataPath} \ --set ARDUINO_DIRECTORIES_USER ${userPath} \ --append-flags '--build-property commonhfile.fqfn=/tmp/esp8266common.h' ''; in lib.makeOverridable wrap