anchor.diff:  , udev
   }:
   
  -assert withGui -> gtk3 != null && wrapGAppsHook != null;
   assert withTeensyduino -> withGui;
   let
     externalDownloads = import ./downloads.nix {
  
positive.code:   # Used because teensyduino requires jars be a specific size
    arduino_dist_src = fetchurl {
      url = "https://downloads.arduino.cc/arduino-${version}-${teensy_architecture}.tar.xz";
      sha256 =
        {
          linux64 = "sha256-VK+Skl2xjqPWYEEKt1CCLwBZRxoyRfYQ3/60Byen9po=";
          linux32 = "sha256-fjqV4avddmWAdFqMuUNUcDguxv3SI45m5QHFiWP8EKE=";
          linuxarm = "sha256-Br8vUN7njI7VCH+ZvUh44l8LcgW+61+Q0x2AiXxIhTM=";
          linuxaarch64 = "sha256-bOizBUUuyINg0/EqEatBq9lECT97JXxKbesCGyCA3YQ=";
        }.${teensy_architecture} or (throw "No arduino binaries for ${teensy_architecture}");
    };
  
    # the glib setup hook will populate GSETTINGS_SCHEMAS_PATH,
  
negative.code:                         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;
    version = "1.8.16";
  
    src = fetchFromGitHub {
      owner = "arduino";
  