From 2f75a298e4871ac1f6a3a09e6644aa63d69af70d Mon Sep 17 00:00:00 2001 From: Malte Voos Date: Wed, 2 Jul 2025 18:48:55 +0200 Subject: update to v3.20.0.92 --- README.md | 4 ++-- client.nix | 15 ++++++++++----- flake.lock | 8 ++++---- flake.nix | 2 +- 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 <