{"id":42781337,"url":"https://github.com/arnaduga/r2-custom-updater","last_synced_at":"2026-01-29T22:43:02.322Z","repository":{"id":211722625,"uuid":"729810515","full_name":"arnaduga/r2-custom-updater","owner":"arnaduga","description":"A reMarkable 2 custom template updater script","archived":false,"fork":false,"pushed_at":"2024-01-03T09:51:55.000Z","size":8247,"stargazers_count":1,"open_issues_count":4,"forks_count":1,"subscribers_count":2,"default_branch":"main","last_synced_at":"2024-01-03T10:53:36.560Z","etag":null,"topics":["remarkable","remarkable-2","remarkable-tablet","remarkable2"],"latest_commit_sha":null,"homepage":"","language":"Shell","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/arnaduga.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null}},"created_at":"2023-12-10T12:38:41.000Z","updated_at":"2023-12-31T23:45:30.000Z","dependencies_parsed_at":"2023-12-10T14:22:53.004Z","dependency_job_id":"2825722c-8280-4c1b-8db3-3c09cc9bc0f5","html_url":"https://github.com/arnaduga/r2-custom-updater","commit_stats":null,"previous_names":["arnaduga/r2-custom-updater"],"tags_count":0,"template":null,"template_full_name":null,"purl":"pkg:github/arnaduga/r2-custom-updater","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/arnaduga%2Fr2-custom-updater","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/arnaduga%2Fr2-custom-updater/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/arnaduga%2Fr2-custom-updater/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/arnaduga%2Fr2-custom-updater/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/arnaduga","download_url":"https://codeload.github.com/arnaduga/r2-custom-updater/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/arnaduga%2Fr2-custom-updater/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":28888447,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-01-29T21:06:44.224Z","status":"ssl_error","status_checked_at":"2026-01-29T21:06:42.160Z","response_time":59,"last_error":"SSL_read: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["remarkable","remarkable-2","remarkable-tablet","remarkable2"],"created_at":"2026-01-29T22:43:01.598Z","updated_at":"2026-01-29T22:43:02.315Z","avatar_url":"https://github.com/arnaduga.png","language":"Shell","funding_links":[],"categories":[],"sub_categories":[],"readme":"# reMarkable 2 custom template updater\n\nWith a reMarkable 2 tablet, you can have some custom templates (unofficially). That is very great an useful!\n\nHowever, everytime you get an official update, your custom templates are lost.\n\nThe goal of this script is to simplify reapplying your custom template settings, by uploading the images files and updating the `templates.json` file if the settings are gone (2 successive calls won't make duplications).\n\nThis script works only on `bash/zsh`, sorry Windows users...\n\n\n\nThis repo include a bonus: 8 O'RLY cover templates!\n\n![image](./assets/bonus.png)\n\nHave fun!\n\n\n## Pre-requisite\n\n### (Recommended) Assign a fixed IP to your reMarkable 2 tablet\n\nThis step is absolutely optional, however, it makes it easy for future usages. \nOn you router settings, assign a fixed address to your reMarkable 2 tablet, for instance `192.168.0.50`.\n\n\u003e **Warning**: some routers distribute addresses on a different range, like `192.168.1.x`. \n\u003e \n\u003e Please adjust according to your home network.\n\n### Get your reMarkable 2 IP address and ssh password\n\nThere multiple websites and blog posts explaining how to retrieve the ip address and the password for SSH to the reMarkable tablet.\n\nYou can look at [here](https://philerb.com/2021/12/26/remarkable-tablet-ssh/) or [here](https://www.simplykyra.com/learn-how-to-access-your-remarkable-through-the-command-line/).\n\n### Set a SSH key\n\nThe script (heavily) relays on `ssh` to access to your reMarkable tablet and adjust files.\n\nThere are 2 information required by the script to run: \n    - Tablet IP address (fixed IP if you follow the first recommendation)\n    - SSH identity key (private key)\n\nBy default, there is no public/private key associated with your tablet, just a password.\n\nTo generate a new keypair (it is recommanded to not use an existing one), in a shell window, type the following commands: \n\n```bash\n$ ssh-keygen -t rsa -b 2048 -C \"remarkable2\"\nGenerating public/private rsa key pair.\nEnter file in which to save the key (/Users/arnaduga/.ssh/id_rsa): /Users/arnaduga/.ssh/remarkable2\nEnter passphrase (empty for no passphrase):\nEnter same passphrase again:\nYour identification has been saved in /Users/arnaduga/.ssh/remarkable2\nYour public key has been saved in /Users/arnaduga/.ssh/remarkable2.pub\nThe key fingerprint is:\nSHA256:vpmnCa4UytfCwOGT4f+EQ2SzXI12HxQF+/uMtmw9m9o reMarkable2\nThe key's randomart image is:\n+---[RSA 2048]----+\n|          ++.    |\n|       o . .     |\n|  o + + o o      |\n| + B = . . o     |\n|  B =   S . .    |\n| . B + .     .   |\n|  o O + .   ..   |\n|   o * . =..o=o. |\n|    ..o *o o=oEo |\n+----[SHA256]-----+\n```\n\n\u003e **Note**: the folder will differ, as hopefully your username is not `arnaduga`. Adujst accordingly.\n\nThen, to copy your public key to the tablet (considering the table is ip `192.168.0.50`):\n\n```bash\n$ ssh-copy-id -i ~/.ssh/remarkable2 root@192.168.0.50\n```\n\nYou will be asked for the SSH password.\n\nThat's it!\n\nTo test the SSH connection using the key, you can type `ssh -i ~/.ssh/remarkable2 root@192.168.0.50`\n\n\n### Software pre-requisites\n\nOnly one major dependency is required by the script: `jq`, a standard tool to handle JSON file.\n\nTo check if `jq` is installed on your system, type `jq --version`. \n\nTo install `jq`, please refer to your system. It could be `sudo apt install jq` or `sudo dnf install jq` or `brew install jq`...\n\nIn case you did not check the dependency before running the script, don't worry, you will be warned!\n\n## Usage\n\n### Prepare your templates\n\nFirst of all, you have to prepare some template files. These can be `png` (bitmap) or `svg` (vector) image file.\n\nFor reference, and bootstrap, you can find in the `./originals` folder of this repo, the original files from a reMarkable 2 tablet. It can be very useful for the picture size.\n\nYou can store your templates in any folder you want. \n\nThis repo includes some templates to be used as notebook covers, and the picture files are located in the `./templates/` folder.\n\n\n### Prepare the custom reference\n\nTo let the script know what are the templates you want to add to your tablet, please create a dedicated `json` file, from `custom.json` model.\n\nThe structure of the file is: \n\n```javascript\n{\n    \"templates\": [\n        {\n            \"name\": \"\u003ctemplate name\u003e\",\n            \"filename\": \"\u003ctemplate filename\u003e\",\n            \"iconCode\": \"\u003cicon code\u003e\",\n            \"categories\": [\n                \"\u003ccategory\u003e\"\n            ]\n        }\n        /* *** other templates definition *** */\n    ]\n}\n```\n\nwhere:\n    - `\u003ctemplate name\u003e` is the tempalte name, as display in the templates list\n    - `\u003ctemplate filename\u003e` is the template filename, without extension\n    - `\u003cicon code\u003e` is the icon code. Unfortunately, we can note create new icon code. We have to use one of the existing one. Please look at `./originals/templates.json` file to find them\n    - `\u003ccategory\u003e` is a category to classify the template. POssible values:   `Creative`, `Grids`, `Life/organize`, `Lines`\n\n\nFor instance, here is a `custom.json` file to manage 2 additionnal custom templates:\n```javascript\n{\n    \"templates\": [\n        {\n            \"name\": \"O'RLY - Squirrel\",\n            \"filename\": \"ORLY-squirel\",\n            \"iconCode\": \"\\ue9fe\",\n            \"categories\": [\n                \"Creative\"\n            ]\n        },\n        {\n            \"name\": \"O'RLY - Pokemon\",\n            \"filename\": \"ORLY-pokemon\",\n            \"iconCode\": \"\\ue9fe\",\n            \"categories\": [\n                \"Creative\", \n                \"Life/Organize\"\n            ]\n        }\n    ]\n}\n```\n\n\n### Script options\n\nHere the help of the script itself, for reference:\n```bash\n$ ./reMarkable-update.sh -h\n\n----------=== reMarkable-update.sh - v1.0 ===----------\n\nSource: https://github.com/arnaduga/r2-custom-updater\nLicense: MIT\n\nScript to update a reMarkable tablet with custome templates (after an update)\n\nUsage: update.sh -r \u003cIP_reMarkable\u003e -i \u003cSSH_identity_file\u003e -t \u003ctemplate_folder\u003e -c \u003ccustom_json_template_file\u003e\n\n\n  -r \u003cip_reMarkable.json\u003e           MANDATORY   : IP of the reMarkable tablet\n  -c \u003ccustom_json_template_file\u003e    MANDATORY   : JSON file contains your custom template definition\n  -i \u003cSSH_identity_file\u003e            MANDATORY   : the private key to connect to reMarkable tablet\n  -t \u003ctemplate_folder\u003e              MANDATORY   : template hosting all your custom template (png|svg)\n  -d                                OPTIONAL    : Activate the debug log mode\n  -h                                OPTIONAL    : Display THIS message\n\n$\n```\n\n### Run the script\n\nConsidering all the previous information gathered (ip and identity file) and all the custom setup prepare (`custom.json` file and `*.png`/`*.svg` files), script runs like this, _after waking up your reMarkable tablet_:\n\n```bash\n$ ./reMarkable-update.sh -r 192.168.0.50 -i ~/.ssh/remarkable2 -c custom.json -t templates\n[INFO ][2023-12-10-13:45:52] Pre-requisites checks...\n[INFO ][2023-12-10-13:45:52] Checking dependencies\n[LOG  ][2023-12-10-13:45:52] Starting update script\n[INFO ][2023-12-10-13:45:52] Getting remote file (/usr/share/remarkable/templates/templates.json)\n[INFO ][2023-12-10-13:46:28] Processing template name O'RLY - Squirrel\n[INFO ][2023-12-10-13:46:28] Copying file to remote (templates/ORLY-squirel.png)\n[INFO ][2023-12-10-13:46:29] Processing template name O'RLY - Pokemon\n[INFO ][2023-12-10-13:46:29] Copying file to remote (templates/ORLY-pokemon.png)\n[INFO ][2023-12-10-13:46:32] Processing template name O'RLY - Octopus\n[INFO ][2023-12-10-13:46:32] Copying file to remote (templates/ORLY-octopus.png)\n[INFO ][2023-12-10-13:46:33] Processing template name O'RLY - Llama\n[INFO ][2023-12-10-13:46:33] Copying file to remote (templates/ORLY-llama.png)\n[INFO ][2023-12-10-13:46:35] Processing template name O'RLY - Jabba\n[INFO ][2023-12-10-13:46:35] Copying file to remote (templates/ORLY-jabba.png)\n[INFO ][2023-12-10-13:46:36] Processing template name O'RLY - Hedgehog\n[INFO ][2023-12-10-13:46:36] Copying file to remote (templates/ORLY-hedgehog.png)\n[INFO ][2023-12-10-13:46:37] Processing template name O'RLY - Hamster\n[INFO ][2023-12-10-13:46:37] Copying file to remote (templates/ORLY-hamster.png)\n[INFO ][2023-12-10-13:46:39] Processing template name O'RLY - Hamster 2\n[INFO ][2023-12-10-13:46:40] Copying file to remote (templates/ORLY-hamster-2.png)\n[LOG  ][2023-12-10-13:46:41] In case of error, backup file is: backups/templates.json.2023-12-10-134641\n[INFO ][2023-12-10-13:46:41] Copy files to remote\n[INFO ][2023-12-10-13:46:41] Copying file to remote (templates.json)\n[INFO ][2023-12-10-13:46:41] Restarting main reMarkable application (xochitl)\n[LOG  ][2023-12-10-13:46:42] Update script done.\n\n```\n\n_That's all folks!_\n\n\n## Limitations\n\nSome limits and improvements are required. They are listed in the [repo issue tracker](https://github.com/arnaduga/r2-custom-updater/issues).\n\n\n## Questions?\n\nIf you have some questions, bug reports or remarks, please use the [repo issue tracker](https://github.com/arnaduga/r2-custom-updater/issues).","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Farnaduga%2Fr2-custom-updater","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Farnaduga%2Fr2-custom-updater","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Farnaduga%2Fr2-custom-updater/lists"}