aboutsummaryrefslogtreecommitdiff
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