about summary refs log tree commit diff
diff options
context:
space:
mode:
-rw-r--r--README.md4
-rw-r--r--client.nix15
-rw-r--r--flake.lock8
-rw-r--r--flake.nix2
-rw-r--r--server.nix49
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