diff options
-rw-r--r-- | README.md | 4 | ||||
-rw-r--r-- | client.nix | 15 | ||||
-rw-r--r-- | flake.lock | 8 | ||||
-rw-r--r-- | flake.nix | 2 | ||||
-rw-r--r-- | server.nix | 49 |
5 files changed, 45 insertions, 33 deletions
diff --git a/README.md b/README.md index cddd2bb..3a0cbb5 100644 --- a/README.md +++ b/README.md @@ -1,12 +1,12 @@ # reMder reMder is a little tool to render reMarkable document files to PDF. It works -by running the official reMarkable firmware in QEMU and using the USB web +by running the official reMarkable 2 firmware in QEMU and using the USB web interface's PDF rendering functionality to render your documents. As a result, it should be able to render any reMarkable document, in particular those created on newer firmware versions. -Currently, reMder uses firmware version v3.14.1.9. +Currently, reMder uses firmware version v3.20.0.92. ## Building diff --git a/client.nix b/client.nix index ad58693..8744f2b 100644 --- a/client.nix +++ b/client.nix @@ -24,20 +24,25 @@ writeShellApplication { ssh = "sshpass -p ${sshPassword} ssh -q -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null -p ${toString sshPort}"; guest = "root@127.0.0.1"; documentDir = "/home/root/.local/share/remarkable/xochitl"; + baseUrl = "http://127.0.0.1:${toString httpPort}"; in '' in="$1" out="$2" - in_basename="$(basename "$in")" - ${ssh} ${guest} rm -rf ${documentDir} ${ssh} ${guest} mkdir ${documentDir} - rsync --rsh="${ssh}" "$in" ${guest}:${documentDir} - ${ssh} ${guest} "unzip '${documentDir}/$in_basename' -d ${documentDir}" + curl \ + '${baseUrl}/upload' \ + -H 'Origin: http://10.11.99.1' \ + -H 'Accept: */*' \ + -H 'Referer: http://10.11.99.1/' \ + -H 'Connection: keep-alive' \ + -F "file=@$in;filename=to-render.rmdoc;type=application/octet-stream" + doc_id="$(${ssh} ${guest} find ${documentDir} -name '\*.metadata' -exec basename {} .metadata '\;')" - curl -f -o "$out" "http://127.0.0.1:${toString httpPort}/download/$doc_id/placeholder" + curl -f -o "$out" "${baseUrl}/download/$doc_id/placeholder" ''; } diff --git a/flake.lock b/flake.lock index f1a530d..d3db19f 100644 --- a/flake.lock +++ b/flake.lock @@ -20,16 +20,16 @@ }, "nixpkgs": { "locked": { - "lastModified": 1739995532, - "narHash": "sha256-VLO7dFb+wWP67xx2J2AZUmRgqQVPKgKKCbi1sOoHyM4=", + "lastModified": 1751451772, + "narHash": "sha256-OYG84f84/XTR/aTsubgk+yJlYKVgA46q2ev7pkftK5c=", "owner": "malte-v", "repo": "nixpkgs", - "rev": "70c2893bfff404322b2c200253df28bf59b6f482", + "rev": "1072864e1d6b5878632d9dca84117a6dcaf52d96", "type": "github" }, "original": { "owner": "malte-v", - "ref": "raspi3", + "ref": "raspi4", "repo": "nixpkgs", "type": "github" } diff --git a/flake.nix b/flake.nix index f8bf227..c96b9c9 100644 --- a/flake.nix +++ b/flake.nix @@ -1,6 +1,6 @@ { inputs = { - nixpkgs.url = "github:malte-v/nixpkgs/raspi3"; + nixpkgs.url = "github:malte-v/nixpkgs/raspi4"; flake-utils.url = "github:numtide/flake-utils"; }; outputs = diff --git a/server.nix b/server.nix index dc4fcd6..d8f5d2d 100644 --- a/server.nix +++ b/server.nix @@ -12,19 +12,19 @@ httpPort, }: let - updateName = "remarkable-production-memfault-image-3.14.1.9-rm2-public"; + updateName = "remarkable-production-image-3.20.0.92-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="; + hash = "sha256-GK3CX/P2MXbX4AZsu8dvu00/id8R1FB9aVvqHOjTJos="; }; xochitlConfig = writeText "xochitl.conf" '' [General] DeveloperPassword=${sshPassword} - wifion=false + AirplaneMode=true WebInterfaceEnabled=true IdleSuspendDelay=0 SuspendPowerOffDelay=0 @@ -38,6 +38,11 @@ let ATTR{type}=="1", KERNEL=="eth*", NAME="usb0" ''; + mmcSymlinkUdevRule = writeText "" '' + ACTION=="add", KERNEL=="vda", SYMLINK+="mmcblk2" + ACTION=="add", KERNEL=="vda[0-9]", SYMLINK+="mmcblk2p%n" + ''; + usbNetworkConfig = writeText "10-usb.network" '' [Match] Name=usb* @@ -49,18 +54,24 @@ let xochitlService = writeText "xochitl.service" '' [Unit] Description=reMarkable main application - After=home.mount network.target + DefaultDependencies=no + Conflicts=shutdown.target + Before=shutdown.target + Wants=rm-sync.service + After=var-lib-uboot.mount dbus.socket + Requires=dbus.socket [Service] ExecStart=/usr/bin/xochitl --system - Restart=always + Restart=on-failure + NotifyAccess=all # 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; @@ -89,7 +100,7 @@ let guestfish --rw --blocksize=512 --add $out <<EOF run - # not the original partition table of the RM2 + # not the original partition table of the RM2, sizes differ part-init /dev/sda gpt part-add /dev/sda p 2048 2099199 part-add /dev/sda p 2099200 10487807 @@ -100,30 +111,26 @@ let upload ${rootfsImage} /dev/sda2 resize2fs /dev/sda2 # we disable the orphan_file feature to avoid the error - # '/dev/vda4 has unsupported feature(s): FEATURE_C12' - # when e2fsck runs at boot + # 'unsupported feature(s): FEATURE_C12' when e2fsck runs at boot mkfs ext4 /dev/sda4 features:^orphan_file mount /dev/sda2 / - copy-in ${kernel}/lib/modules /lib - - download /etc/fstab fstab - ! sed -i 's/mmcblk2p/vda/' fstab - upload fstab /etc/fstab + copy-in ${kernel}/lib/modules /usr/lib upload ${ifnameUdevRule} /etc/udev/rules.d/70-persistent-net.rules + upload ${mmcSymlinkUdevRule} /etc/udev/rules.d/70-mmc-symlinks.rules upload ${usbNetworkConfig} /etc/systemd/network/10-usb.network - upload ${xochitlService} /lib/systemd/system/xochitl.service + upload ${xochitlService} /usr/lib/systemd/system/xochitl.service # delete any systemd units that hinder or delay startup - rm /lib/systemd/system/kdump.service - rm /lib/systemd/system/wacom_flash.service - rm /lib/systemd/system/memfaultd.service - rm /lib/systemd/system/swupdate.service - rm /lib/systemd/system/swupdate.socket - rm /etc/systemd/system/multi-user.target.wants/busybox-ifplugd@usb1.service + rm /usr/lib/systemd/system/wacom_flash.service + rm /usr/lib/systemd/system/memfaultd.service + rm /usr/lib/systemd/system/swupdate.service + rm /usr/lib/systemd/system/swupdate.socket + rm /usr/lib/systemd/system/system-hardening.service + rm /usr/lib/systemd/system/wpa_supplicant.service upload ${fakefbdev}/lib/libfakefbdev.so /usr/lib/libfakefbdev.so chmod 0755 /usr/lib/libfakefbdev.so |