Tenes que agregar tu usuario a estos grupos: tty uucp plugdev dialout (no estoy seguro de la ultima, la va si o si es uucp)

sudo usermod -aG uucp plugdev dialout tty $USER

Instalacion

git clone https://github.com/arduino/arduino-cli    
cd arduino-cli
bash install.sh  
cd bin/  
sudo mv arduino-cli /usr/bin  

Agregar y descargar un indice adicional:

arduino-cli core update-index --additional-urls https://raw.githubusercontent.com/espressif/arduino-esp32/gh-pages/package_esp32_index.json

Iniciar la configuracion:

arduino-cli config init
arduino-cli config dump --verbose 

Cuando inicias la configuracion te crea un archivo en ~/.arduino/arduino-cli.yaml podes editar ese archivo y agregar la URL del indice en ese archivo en vez de usar –additional-urls como se demostro en el paso 1.

Configurando arduino-cli para usarlo con ESP32

Buscar core:

arduino-cli core search esp32

Instala el ESP32 Core:

arduino-cli core install esp32:esp32 (Pesa como 4 GB)

Podes buscar el FQBN (necesario para compilar) usando el comando

arduino-cli board search esp32
arduino-cli board details -b esp32:esp32:esp32wrover
arduino-cli board details -b <Tu FQBN>

Crea un nuevo sketch:

arduino-cli sketch new ejemplo
cd ejemplo

No hace falta si ya tenes un archivo ino. Directamente pasa al siguiente paso.

Para compilar el sketch:

arduino-cli compile --fqbn esp32:esp32:esp32 .
o
arduino-cli compile --fqbn esp32:esp32:esp32wrover .
o
arduino-cli compile --fqbn "esp32:esp32:esp32wrover:UploadSpeed=115200,PartitionScheme=huge_app,FlashMode=qio,FlashFreq=80,DebugLevel=none,EraseFlash=none" .

Compilar y subir!!!! Usa esta

arduino-cli compile -u -p /dev/ttyUSB0 --fqbn "esp32:esp32:esp32wrover:UploadSpeed=115200,PartitionScheme=huge_app,FlashMode=qio,FlashFreq=80,DebugLevel=none,EraseFlash=none" .

Para subirlo al esp32:

arduino-cli upload -p /dev/ttyUSB0 --fqbn esp32:esp32:esp32 .
o 
arduino-cli upload -p /dev/ttyUSB9 --fqbn esp32:esp32:esp32wrover .
o
arduino-cli upload -p /dev/ttyUSB0 --fqbn "esp32:esp32:esp32wrover:UploadSpeed=115200,PartitionScheme=huge_app,FlashMode=qio,FlashFreq=80,DebugLevel=none,EraseFlash=none" .

Para monitorearlo:

sudo pacman --noconfirm -S screen

screen /dev/ttyUSB0 115200

arduino-cli monitor -p /dev/ttyUSB4 -b esp32:esp32:esp32wrover -c baudrate=115200

Buscar librerias:

arduino-cli lib search DH11

Instalando librerias:

arduino-cli lib install "DHT sensor library"

Para compilar y subir:

arduino-cli compile --fqbn esp32:esp32:esp32 -u -p /dev/ttyUSB0
arduino-cli compile --fqbn esp32:esp32:esp32wrover -u -p /dev/ttyUSB0