anchor.diff:  , ncurses
   , readline
   , withGui ? false
  -, gtk2 ? null
  +, gtk3 ? null
  +, wrapGAppsHook
   , withTeensyduino ? false
     /* Packages needed for Teensyduino */
   , upx
  
positive.code: 
    # This will be patched into `arduino` wrapper script
    # Java loads gtk dynamically, so we need to provide it using LD_LIBRARY_PATH
    dynamicLibraryPath = lib.makeLibraryPath [ gtk2 ];
    javaPath = lib.makeBinPath [ jdk ];
  
    # Everything else will be patched into rpath
  
negative.code: , udev
  }:
  
  assert withGui -> gtk3 != null && wrapGAppsHook != null;
  assert withTeensyduino -> withGui;
  let
    externalDownloads = import ./downloads.nix {
  