{ fetchurl, writeText, libguestfs-with-appliance, pkgsCross, qemu, runCommand, cpio, writeShellApplication, sshPassword, sshPort, httpPort, }: let updateName = "remarkable-production-memfault-image-3.14.1.9-rm2-public"; updateArchive = fetchurl { url = # TODO: this is not an official source. might be worth authenticating the updates "https://storage.googleapis.com/remarkable-versions/${updateName}.swu"; hash = "sha256-8zlAGdv+w2KO7BruRQLQC9ivGSHtK82e36ASIeRF3zI="; }; xochitlConfig = writeText "xochitl.conf" '' [General] DeveloperPassword=${sshPassword} wifion=false WebInterfaceEnabled=true IdleSuspendDelay=0 SuspendPowerOffDelay=0 ''; usbMacAddr = "52:54:00:12:34:56"; ifnameUdevRule = writeText "70-persistent-net.rules" '' SUBSYSTEM=="net", ACTION=="add", DRIVERS=="?*", \ ATTR{address}=="${usbMacAddr}", \ ATTR{type}=="1", KERNEL=="eth*", NAME="usb0" ''; usbNetworkConfig = writeText "10-usb.network" '' [Match] Name=usb* [Network] DHCP=yes ''; xochitlService = writeText "xochitl.service" '' [Unit] Description=reMarkable main application After=home.mount network.target [Service] ExecStart=/usr/bin/xochitl --system Restart=always # required to make xochitl run Environment=LD_PRELOAD=/usr/lib/libfakefbdev.so [Install] WantedBy=multi-user.target ''; fakefbdev = pkgsCross.armv7l-hf-multiplatform.gcc11Stdenv.mkDerivation { name = "fakefbdev"; src = ./fakefbdev; installFlags = [ "DESTDIR=${placeholder "out"}" ]; }; kernel = pkgsCross.armv7l-hf-multiplatform.linux_5_4; rootfsImage = runCommand "rm-rootfs.ext4" { nativeBuildInputs = [ cpio ]; } '' cpio -i --file ${updateArchive} gzip -dc ${updateName}.ext4.gz > $out ''; diskImage = runCommand "rm-disk.qcow2" { nativeBuildInputs = [ qemu libguestfs-with-appliance ]; } '' qemu-img create -f qcow2 $out 8G guestfish --rw --blocksize=512 --add $out <