diff --git a/pkgs/development/embedded/arduino/arduino-core/chrootenv.nix b/pkgs/development/embedded/arduino/arduino-core/chrootenv.nix new file mode 100644 index 00000000000..4c13b2493a9 --- /dev/null +++ b/pkgs/development/embedded/arduino/arduino-core/chrootenv.nix @@ -0,0 +1,36 @@ +{ lib, buildFHSUserEnv, arduino-core-unwrapped, withGui ? false, withTeensyduino ? false }: +let + arduino-unwrapped = arduino-core-unwrapped.override { inherit withGui withTeensyduino; }; +in +buildFHSUserEnv { + name = "arduino"; + + targetPkgs = + pkgs: (with pkgs; [ + ncurses + arduino-unwrapped + zlib + (python3.withPackages (p: with p; [ + pyserial + ])) + ]); + multiPkgs = null; + + extraInstallCommands = '' + ${lib.optionalString withGui '' + # desktop file + mkdir -p $out/share/applications + cp ${arduino-core-unwrapped.src}/build/linux/dist/desktop.template $out/share/applications/arduino.desktop + substituteInPlace $out/share/applications/arduino.desktop \ + --replace '' "$out/bin/arduino" \ + --replace '' "$out/share/arduino/icons/128x128/apps/arduino.png" + # icon file + mkdir -p $out/share/arduino + cp -r ${arduino-core-unwrapped.src}/build/shared/icons $out/share/arduino + ''} + ''; + + runScript = "arduino"; + + meta = arduino-core-unwrapped.meta; +} diff --git a/pkgs/development/embedded/arduino/arduino-core/default.nix b/pkgs/development/embedded/arduino/arduino-core/default.nix index 25d0301d032..6b2c6203a39 100644 --- a/pkgs/development/embedded/arduino/arduino-core/default.nix +++ b/pkgs/development/embedded/arduino/arduino-core/default.nix @@ -69,17 +69,16 @@ let xorg.libXxf86vm zlib ]; - teensy_architecture = if stdenv.hostPlatform.isx86_32 then "linux32" - else if stdenv.hostPlatform.isx86_64 then "linux64" - else if stdenv.hostPlatform.isAarch64 then "linuxaarch64" - else if stdenv.hostPlatform.isAarch32 then "linuxarm" - else throw "${stdenv.hostPlatform.system} is not supported in teensy"; + teensy_architecture = + if stdenv.hostPlatform.isx86_32 then "linux32" + else if stdenv.hostPlatform.isx86_64 then "linux64" + else if stdenv.hostPlatform.isAarch64 then "linuxaarch64" + else if stdenv.hostPlatform.isAarch32 then "linuxarm" + else throw "${stdenv.hostPlatform.system} is not supported in teensy"; - pname = (if withTeensyduino then "teensyduino" else "arduino") - + lib.optionalString (!withGui) "-core"; in stdenv.mkDerivation rec { - inherit pname; + pname = (if withTeensyduino then "teensyduino" else "arduino") + lib.optionalString (!withGui) "-core"; version = "1.8.16"; src = fetchFromGitHub { @@ -195,8 +194,8 @@ stdenv.mkDerivation rec { chmod +w ./TeensyduinoInstall.${teensy_architecture} upx -d ./TeensyduinoInstall.${teensy_architecture} patchelf --set-interpreter $(cat $NIX_CC/nix-support/dynamic-linker) \ - --set-rpath "${teensy_libpath}" \ - ./TeensyduinoInstall.${teensy_architecture} + --set-rpath "${teensy_libpath}" \ + ./TeensyduinoInstall.${teensy_architecture} chmod +x ./TeensyduinoInstall.${teensy_architecture} ./TeensyduinoInstall.${teensy_architecture} --dir=$out/share/arduino # Check for successful installation @@ -213,8 +212,8 @@ stdenv.mkDerivation rec { preFixup = '' for file in $(find $out -type f \( -perm /0111 -o -name \*.so\* \) ); do - patchelf --set-interpreter "$(cat $NIX_CC/nix-support/dynamic-linker)" "$file" || true - patchelf --set-rpath ${rpath}:$out/lib $file || true + patchelf --set-interpreter "$(cat $NIX_CC/nix-support/dynamic-linker)" "$file" || true + patchelf --set-rpath ${rpath}:$out/lib $file || true done ${lib.concatMapStringsSep "\n" @@ -235,15 +234,15 @@ stdenv.mkDerivation rec { ${lib.optionalString withTeensyduino '' # Patch the Teensy loader binary patchelf --debug \ - --set-interpreter $(cat $NIX_CC/nix-support/dynamic-linker) \ - --set-rpath "${teensy_libpath}" \ - $out/share/arduino/hardware/tools/teensy{,_ports,_reboot,_restart,_serialmon} + --set-interpreter $(cat $NIX_CC/nix-support/dynamic-linker) \ + --set-rpath "${teensy_libpath}" \ + $out/share/arduino/hardware/tools/teensy{,_ports,_reboot,_restart,_serialmon} ''} ''; meta = with lib; { description = "Open-source electronics prototyping platform"; - homepage = "http://arduino.cc/"; + homepage = "https://www.arduino.cc/"; license = if withTeensyduino then licenses.unfreeRedistributable else licenses.gpl2; platforms = platforms.linux; maintainers = with maintainers; [ antono auntie robberer bjornfor bergey ]; diff --git a/pkgs/development/octave-modules/arduino/default.nix b/pkgs/development/octave-modules/arduino/default.nix index 77089827c4b..fd97c55a40e 100644 --- a/pkgs/development/octave-modules/arduino/default.nix +++ b/pkgs/development/octave-modules/arduino/default.nix @@ -2,7 +2,7 @@ , lib , fetchurl , instrument-control -, arduino +, arduino-core-unwrapped }: buildOctavePackage rec { @@ -18,9 +18,8 @@ buildOctavePackage rec { instrument-control ]; - # Might be able to use pkgs.arduino-core propagatedBuildInputs = [ - arduino + arduino-core-unwrapped ]; meta = with lib; { diff --git a/pkgs/top-level/all-packages.nix b/pkgs/top-level/all-packages.nix index 9c89cc40388..029bb7ceb66 100644 --- a/pkgs/top-level/all-packages.nix +++ b/pkgs/top-level/all-packages.nix @@ -1273,7 +1273,8 @@ with pkgs; arduino-cli = callPackage ../development/embedded/arduino/arduino-cli { }; - arduino-core = callPackage ../development/embedded/arduino/arduino-core { }; + arduino-core = callPackage ../development/embedded/arduino/arduino-core/chrootenv.nix { }; + arduino-core-unwrapped = callPackage ../development/embedded/arduino/arduino-core { }; arduino-mk = callPackage ../development/embedded/arduino/arduino-mk {}; diff --git a/pkgs/top-level/octave-packages.nix b/pkgs/top-level/octave-packages.nix index b4aeb905280..3895d7871f9 100644 --- a/pkgs/top-level/octave-packages.nix +++ b/pkgs/top-level/octave-packages.nix @@ -54,7 +54,7 @@ makeScope newScope (self: writeRequiredOctavePackagesHook; arduino = callPackage ../development/octave-modules/arduino { - inherit (pkgs) arduino; + inherit (pkgs) arduino-core-unwrapped; }; audio = callPackage ../development/octave-modules/audio { };