commit 6219d5b9600dac3fcc0599d7ed038b2c2c022720 Author: √(noham)² <100566912+NohamR@users.noreply.github.com> Date: Wed Oct 22 11:38:17 2025 +0200 3.22 update diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..92363e5 --- /dev/null +++ b/.gitignore @@ -0,0 +1,2 @@ +hashtab_3.22 +qmldiff diff --git a/3.22/.DS_Store b/3.22/.DS_Store new file mode 100644 index 0000000..5008ddf Binary files /dev/null and b/3.22/.DS_Store differ diff --git a/3.22/clock.qmd b/3.22/clock.qmd new file mode 100644 index 0000000..da87956 --- /dev/null +++ b/3.22/clock.qmd @@ -0,0 +1,66 @@ +; credit for the original clock implementation: https://github.com/StarNumber12046/xovi-qmd-extensions/blob/main/clock.qmd +AFFECT [[4911547370760691430]] + TRAVERSE [[3819512207256720568]] > [[14125623155555875541]]#[[15885405667098360701]] + LOCATE BEFORE [[16385778650434842232]]#[[7709552963638993992]] + INSERT { + ~&16385778650434842232&~ { + ~&5972374&~: clockSidebarItem + ~&8399878573055752961&~: "clockSidebarObject" + ~&214642559243&~: ~&5971598&~.~&6460516198169535423&~(getCestTime(), set_Format_Date) + ~&8399601734642709923&~: ~&"4628214070783643584&~ + ~&7082453764421&~: ~&214625660372&~ + ~&233726547792244&~: ~&6504329801&~ + + /* 1000 = 1 second / 60000 = 1 minute */ + property ~&197088788&~ set_Timer: 60000 + property ~&7083178290016&~ set_Format_Date: "dd/MM hh:mm" + + function getCestTime() { + ~&197102514&~ now = new ~&6502586279&~(); + ~&197102514&~ utc = now.getTime() + (now.getTimezoneOffset() * 60000); + ~&197102514&~ cestTime = new ~&6502586279&~(utc + (2 * 3600000)); /* UTC + 2 hours +*/ + ~&7083121450889&~ cestTime; + } + + ~&254480451320573660&~.~&495334332051582499&~: { + ~&214642559243&~ = ~&5971598&~.~&6460516198169535423&~(getCestTime(), set_Format_Date); + } + + ~&254542236275632405&~: { + + ~&5972376&~ (clockSidebarItem.set_Timer === 60000) { + clockSidebarItem.set_Timer = 1000; + clockSidebarItem.set_Format_Date = "dd/MM hh:mm:ss"; + } ~&6503784146&~ { + clockSidebarItem.set_Timer = 60000; + clockSidebarItem.set_Format_Date = "dd/MM hh:mm"; + } + + ~&214642551402&~.~&7713147298280334&~ = clockSidebarItem.set_Timer + clockSidebarItem.~&214642559243&~ = ~&5971598&~.~&6460516198169535423&~(clockSidebarItem.getCestTime(), clockSidebarItem.set_Format_Date); + } + + /* Timer for update time */ + ~&214604601930&~ { + ~&5972374&~: ~&214642551402&~ + ~&7713147298280334&~: clockSidebarItem.set_Timer + ~&7083121289162&~: ~&6504329801&~ + ~&233743626668842&~: ~&6504329801&~ + + ~&495358363329399331&~: { + clockSidebarItem.~&214642559243&~ = ~&5971598&~.~&6460516198169535423&~(clockSidebarItem.getCestTime(), clockSidebarItem.set_Format_Date); + } + } + + ~&7081629735527&~.preferredHeight: ~&7082020628281&~.~&15061686673205541622&~ + ~&7081629735527&~.~&7797818826744279624&~: ~&7083038346995&~.~&214646099849&~ + ~&11921478716705041271&~: ~&233744436321411&~ + + function ~&7712792149454042&~() { + ~&7083211098251&~(); + } + } + } + END TRAVERSE +END AFFECT diff --git a/3.22/convertToText_remover.qmd b/3.22/convertToText_remover.qmd new file mode 100644 index 0000000..dbadf56 --- /dev/null +++ b/3.22/convertToText_remover.qmd @@ -0,0 +1,11 @@ +AFFECT [[3197972396468700595]] + TRAVERSE [[6502786168]]#[[10742505294233322867]] + TRAVERSE [[11969557448369804645]]#[[214642769434]] + REMOVE [[2329322817130602767]]#[[3012293087768835154]] + END TRAVERSE + END TRAVERSE +END AFFECT + +AFFECT [[3888036476130402266]] + REMOVE [[454089850271038938]] +END AFFECT \ No newline at end of file diff --git a/3.22/favoriteButton.qmd b/3.22/favoriteButton.qmd new file mode 100644 index 0000000..a978b34 --- /dev/null +++ b/3.22/favoriteButton.qmd @@ -0,0 +1,26 @@ +AFFECT [[5376273845699449139]] + TRAVERSE [[4656948266548654837]]#[[15623861903200516464]] + TRAVERSE [[254480451320573660]]#[[6102115889703265601]] > [[1046376476496319351]] + REDEFINE [[17525352808359626518]] + LOCATE BEFORE STREAM / ~&425121728314878811&~.~&254477135848310940&~.~&14006514494546121251&~ { ~&5972374&~: ~&12179665760735428534&~ / + INSERT { + ~&425121728314878811&~.~&254477135848310940&~.~&14006514494546121251&~ { + ~&5972374&~: favoriteActionButton + property ~&197102514&~ ~&11921478716705041271&~: ~&15623861903200516464&~ + + function ~&7712792149454042&~() { + ~&254540341572282132&~.~&6036465494905709935&~.~&10766985859136561867&~(~&"7713002743984265&~); + ~&15623861903200516464&~.~&1211463668584179656&~(); + } + + ~&254547663413443306&~: !!~&11921478716705041271&~ && ~&11921478716705041271&~.~&233724259532396&~ === favoriteActionButton + ~&6504315758&~: ~&6504222003&~(~&"7711638953809001&~) + ~&8399601734642709923&~: ~&15623861903200516464&~.~&254547531013851119&~.~&4526712843927276830&~ ? ~&"4876731380093562698&~ : ~&"15094524446772117066&~ + ~&233748328658231&~: !~&15623861903200516464&~.~&254547531013851119&~.~&233729934123842&~ + ~&254542236275632405&~: ~&7712792149454042&~() + }, + } + END REDEFINE + END TRAVERSE + END TRAVERSE +END AFFECT \ No newline at end of file diff --git a/3.22/forceSync.qmd b/3.22/forceSync.qmd new file mode 100644 index 0000000..3e0825f --- /dev/null +++ b/3.22/forceSync.qmd @@ -0,0 +1,40 @@ +AFFECT [[12542166428983872557]] + IMPORT [[9024234502391964376]] 1.0 + + TRAVERSE [[7711468349764991]] > [[6502786168]] > [[8397788359424131273]] > [[14125623155555875541]]#[[7082882068103]] + + LOCATE AFTER [[254501108490678590]]#[[254547536040299418]] + INSERT { + function triggerSyncCheck() { + ~&5972376&~ (~&14175747548438553957&~.~&502031083907209467&~.~&233743626668842&~) { + ~&7083121450889&~; + } + + ~&214622607920&~ topLevelIds = ["", ~&"214642862219&~]; + ~&197085552&~ (~&214622607920&~ collectionId ~&5972574&~ topLevelIds) { + ~&214622607920&~ topLevelCollection = ~&233694067165438&~.~&8399431778896295215&~(collectionId); + ~&5972376&~ (topLevelCollection.~&7083177691309&~ === ~&214587000859&~.~&254503380775952400&~) { + topLevelCollection.~&6025662252395059196&~(~&214587000859&~.~&214602094399&~); + } + } + + ~&14175747548438553957&~.~&502031083907209467&~.startCheck(); + } + + ~&254501558939456351&~ { + ~&7081629735527&~.~&254522510204479688&~: ~&5971598&~.~&8397757669215083186&~ | ~&5971598&~.~&7711439549327527&~ + ~&233744706647566&~: ~&425121728314878811&~.~&7082020628281&~.~&233744706647566&~.~&214641496386&~ + + ~&8398116566483627918&~ { + ~&7081629735527&~.preferredHeight: ~&7082020628281&~.~&5533764238088913777&~ + ~&7081629735527&~.~&7797818826744279624&~: ~&7082020628281&~.~&5533764238088913777&~ + ~&8399601734642709923&~: ~&"5525520263628201950&~ + ~&481641799955318521&~: ~&5971598&~.~&233696851602406&~ + ~&254542236275632405&~: ~&7082882068103&~.triggerSyncCheck() + } + } + } + + END TRAVERSE + +END AFFECT \ No newline at end of file diff --git a/3.22/hideDocumentClose.qmd b/3.22/hideDocumentClose.qmd new file mode 100644 index 0000000..6b1c3b8 --- /dev/null +++ b/3.22/hideDocumentClose.qmd @@ -0,0 +1,8 @@ +; credit: https://github.com/StarNumber12046/xovi-qmd-extensions/blob/main/hideShowToolbar.qmd +AFFECT [[2857280009207495592]] + TRAVERSE [[8397993708429497603]] > [[16948093199847579651]]#[[476924601591820571]] + REPLACE [[233748328658231]] WITH { + ~&233748328658231&~: ~&214625660372&~ + } + END TRAVERSE +END AFFECT \ No newline at end of file diff --git a/3.22/quickSettingsClock.qmd b/3.22/quickSettingsClock.qmd new file mode 100644 index 0000000..d28db17 --- /dev/null +++ b/3.22/quickSettingsClock.qmd @@ -0,0 +1,63 @@ +; credit for the original clock implementation: https://github.com/StarNumber12046/xovi-qmd-extensions/blob/main/quickSettingsClock.qmd +AFFECT [[12542166428983872557]] + IMPORT [[9024234502391964376]] 1.0 + + TRAVERSE [[7711468349764991]] > [[6502786168]] > [[8397788359424131273]] > [[14125623155555875541]] > [[6502786168]] > [[254501558939456351]]#[[254548156692664613]] + + LOCATE BEFORE [[3875623948647577544]]#[[6090168079272128033]] + INSERT { + ~&14397210151462632996&~ { + ~&5972374&~: quickSettingsClock + + property bool showSeconds: ~&214625660372&~ + property ~&7083178290016&~ minuteFormat: "dd/MM hh:mm" + property ~&7083178290016&~ secondFormat: "dd/MM hh:mm:ss" + property ~&197088788&~ minuteInterval: 60000 + property ~&197088788&~ secondInterval: 1000 + property ~&197088788&~ cestOffset: 2 * 3600000 + + ~&6504315758&~: ~&5971598&~.~&6460516198169535423&~(getCestTime(), minuteFormat) + + function getCestTime() { + ~&197102514&~ now = new ~&6502586279&~(); + ~&197102514&~ utc = now.getTime() + (now.getTimezoneOffset() * 60000); + ~&7083121450889&~ new ~&6502586279&~(utc + cestOffset); + } + + function updateClock() { + ~&6504315758&~ = ~&5971598&~.~&6460516198169535423&~(getCestTime(), showSeconds ? secondFormat : minuteFormat); + } + + ~&254480451320573660&~.~&495334332051582499&~: { + updateClock(); + } + + onShowSecondsChanged: { + quickSettingsClockTimer.~&233743006639214&~(); + updateClock(); + } + + ~&214604601930&~ { + ~&5972374&~: quickSettingsClockTimer + ~&7713147298280334&~: quickSettingsClock.showSeconds ? quickSettingsClock.secondInterval : quickSettingsClock.minuteInterval + ~&7083121289162&~: ~&6504329801&~ + ~&233743626668842&~: ~&6504329801&~ + + ~&495358363329399331&~: { + quickSettingsClock.updateClock(); + } + } + + ~&254494525842443467&~ { + ~&233721384511543&~.~&6503816592&~: ~&7083038346995&~ + ~&477346538929698200&~: ~&5971598&~.PointingHandCursor + ~&254542236275632405&~: { + quickSettingsClock.showSeconds = !quickSettingsClock.showSeconds; + } + } + } + } + + END TRAVERSE + +END AFFECT \ No newline at end of file diff --git a/3.22/tagButton.qmd b/3.22/tagButton.qmd new file mode 100644 index 0000000..d4330d8 --- /dev/null +++ b/3.22/tagButton.qmd @@ -0,0 +1,27 @@ +AFFECT [[5376273845699449139]] + TRAVERSE [[4656948266548654837]]#[[15623861903200516464]] + TRAVERSE [[254480451320573660]]#[[6102115889703265601]] > [[1046376476496319351]] + REDEFINE [[17525352808359626518]] + LOCATE BEFORE STREAM / ~&425121728314878811&~.~&254477135848310940&~.~&14006514494546121251&~ { ~&5972374&~: ~&12179665760735428534&~ / + INSERT { + ~&425121728314878811&~.~&254477135848310940&~.~&14006514494546121251&~ { + ~&5972374&~: tagActionButton + property ~&197102514&~ ~&11921478716705041271&~: ~&15623861903200516464&~ + + function ~&7712792149454042&~() { + ~&254540341572282132&~.~&6036465494905709935&~.~&10766985859136561867&~(~&"197100325&~); + ~&15623861903200516464&~.~&214641748202&~ = ~&"233704090302484&~; + ~&15623861903200516464&~.~&12140756533706751453&~(); + } + + ~&254547663413443306&~: !!~&11921478716705041271&~ && ~&11921478716705041271&~.~&233724259532396&~ === tagActionButton + ~&6504315758&~: ~&6504222003&~(~&"197065477&~) + ~&8399601734642709923&~: ~&"13873223703509132460&~ + ~&233748328658231&~: !~&15623861903200516464&~.~&254547531013851119&~.~&233729934123842&~ + ~&254542236275632405&~: ~&7712792149454042&~() + }, + } + END REDEFINE + END TRAVERSE + END TRAVERSE +END AFFECT \ No newline at end of file diff --git a/3.22/uncompressDock.qmd b/3.22/uncompressDock.qmd new file mode 100644 index 0000000..6e53725 --- /dev/null +++ b/3.22/uncompressDock.qmd @@ -0,0 +1,48 @@ +; credit: https://github.com/StarNumber12046/xovi-qmd-extensions/blob/main/uncompressCreate.qmd +AFFECT [[9238134294692494357]] + IMPORT [[11386068989125244955]] 1.0 + TRAVERSE [[6502786168]]#[[6504254477]] + TRAVERSE [[254501108490678590]]#[[16596251247453125840]] > [[254501558939456351]]#[[6391657810197849963]] + LOCATE AFTER [[7081201431623]]#[[6504074876]] + INSERT { + ~&254501108490678590&~ { + ~&233748328658231&~: ~&6504254477&~.~&233720974218682&~.~&7713146641368448&~(~&8397858752669353458&~.~&233679647243674&~.~&7711997891205770&~) + ~&7082729686082&~: 64 + ~&214646099849&~: 2 + ~&214622605608&~: ~&"214621299494&~ + } + ~&7081201431623&~ { + ~&5972374&~: notebookButton + ~&233748328658231&~: ~&6504254477&~.~&233720974218682&~.~&7713146641368448&~(~&8397858752669353458&~.~&233679647243674&~.~&7711997891205770&~) + ~&8399601734642709923&~: ~&"8609871731041592465&~ + ~&254542236275632405&~: ~&6504254477&~.~&7834776454199036121&~(); + } + ~&254501108490678590&~ { + ~&233748328658231&~: ~&6504254477&~.~&233720974218682&~.~&7713146641368448&~(~&8397858752669353458&~.~&233679647243674&~.~&8397854845390750421&~) + ~&7082729686082&~: 64 + ~&214646099849&~: 2 + ~&214622605608&~: ~&"214621299494&~ + } + ~&7081201431623&~ { + ~&5972374&~: folderButton + ~&233748328658231&~: ~&6504254477&~.~&233720974218682&~.~&7713146641368448&~(~&8397858752669353458&~.~&233679647243674&~.~&8397854845390750421&~) + ~&8399601734642709923&~: ~&"1888152859110688812&~ + ~&254542236275632405&~: ~&6504254477&~.~&4100702871256454852&~(); + } + ~&254501108490678590&~ { + ~&233748328658231&~: ~&6504254477&~.~&233720974218682&~.~&7713146641368448&~(~&8397858752669353458&~.~&233679647243674&~.~&8398512905398897727&~) + ~&7082729686082&~: 64 + ~&214646099849&~: 2 + ~&214622605608&~: ~&"214621299494&~ + } + ~&7081201431623&~ { + ~&5972374&~: quickSheetsButton + ~&233748328658231&~: ~&6504254477&~.~&233720974218682&~.~&7713146641368448&~(~&8397858752669353458&~.~&233679647243674&~.~&8398512905398897727&~) + ~&8399601734642709923&~: ~&"5726907772531472741&~ + ~&254542236275632405&~: ~&6504254477&~.~&8127652744343790830&~(); + } + } + REMOVE [[7081201431623]]#[[6504074876]] + END TRAVERSE + END TRAVERSE +END AFFECT \ No newline at end of file diff --git a/README.md b/README.md new file mode 100644 index 0000000..c9780bf --- /dev/null +++ b/README.md @@ -0,0 +1,51 @@ +# Xovi Extensions + +This repo consists of multiple xovi (.qmd) extensions that are QoL improvements to the xochitl interface. These require [qt-resource-rebuilder](https://github.com/asivery/rm-xovi-extensions/tree/master/qt-resource-rebuilder) to work. + +Instructions to install xovi can be found [here](https://github.com/asivery/rmpp-xovi-extensions/blob/master/INSTALL.MD). + +Download the extensions from the folder matching your reMarkable software version. + +Copy the `.qmd` files to `/home/root/xovi/exthome/qt-resource-rebuilder/` and restart xovi. + +Some of the QMD files in this repo are my own and some are modifications I've made to extensions created by others in the community. Modifications will link to the original author. + +Extensions have been tested only for the latest reMarkable OS version, though they may work on newer versions. + +Beta releases are not tested nor supported. + +## Extensions + +### Version 3.22 + +#### `clock.qmd` +- Adds a live clock to the library sidebar; tap the entry to toggle seconds display. +![Sidebar clock showing minutes](images/clock_1.png) +![Sidebar clock showing seconds](images/clock_2.png) + +#### `quickSettingsClock.qmd` +- Injects a tappable clock into the Quick Settings header; tap to toggle between minute and second precision. +![Quick settings clock](images/quickSettingsClock.png) + +#### `forceSync.qmd` +- Adds a cloud button in Quick Settings that forces a library sync when tapped (need further testing to confirm it works as intended). +![Force sync button in quick settings](images/forceSync.png) + +#### `favoriteButton.qmd` +- Restores a `Favorite` action in the document list header for faster pinning. +![Favorite button in action bar](images/favoriteButton.png) + +#### `tagButton.qmd` +- Puts a `Tag` action next to other list controls to open the tag editor directly. +![Tag button in action bar](images/tagButton.png) + +#### `convertToText_remover.qmd` +- Removes the `Convert to text` option from selection menus and the toolbar. +![Convert to text removed from menu](images/convertToText_remover.png) + +#### `uncompressDock.qmd` +- Replaces the condensed `More` menu in the new document dock with dedicated buttons for notebook, folder, and quick sheet creation. +![Expanded create menu buttons](images/uncompressDock.png) + +#### `hideDocumentClose.qmd` +- Hides the close button in the document toolbar to prevent accidental exits. \ No newline at end of file diff --git a/hash.sh b/hash.sh new file mode 100755 index 0000000..3781789 --- /dev/null +++ b/hash.sh @@ -0,0 +1,34 @@ +#!/bin/bash + +# Configuration +QMLDIFF="./qmldiff" +HASHTAB="hashtab_3.22" + +# Usage +if [ $# -lt 1 ]; then + echo "Usage: $0 [-r]" + echo "Example: $0 /path/to/folder" + echo " $0 /path/to/folder -r" + exit 1 +fi + +FOLDER="$1" +REVERSE_FLAG="$2" + +# Check if folder exists +if [ ! -d "$FOLDER" ]; then + echo "Error: Folder not found → $FOLDER" + exit 1 +fi + +# Process each .qmd file in the folder +for file in "$FOLDER"/*.qmd; do + if [ -f "$file" ]; then + echo "Processing: $file" + "$QMLDIFF" hash-diffs "$HASHTAB" "$file" $REVERSE_FLAG + echo "✅ Done: $file" + echo + fi +done + +echo "All files processed successfully." \ No newline at end of file diff --git a/images/clock_1.png b/images/clock_1.png new file mode 100644 index 0000000..9892eec Binary files /dev/null and b/images/clock_1.png differ diff --git a/images/clock_2.png b/images/clock_2.png new file mode 100644 index 0000000..a9e023a Binary files /dev/null and b/images/clock_2.png differ diff --git a/images/convertToText_remover.png b/images/convertToText_remover.png new file mode 100644 index 0000000..203dc28 Binary files /dev/null and b/images/convertToText_remover.png differ diff --git a/images/favoriteButton.png b/images/favoriteButton.png new file mode 100644 index 0000000..df6719e Binary files /dev/null and b/images/favoriteButton.png differ diff --git a/images/forceSync.png b/images/forceSync.png new file mode 100644 index 0000000..14c5fd1 Binary files /dev/null and b/images/forceSync.png differ diff --git a/images/quickSettingsClock.png b/images/quickSettingsClock.png new file mode 100644 index 0000000..e595603 Binary files /dev/null and b/images/quickSettingsClock.png differ diff --git a/images/tagButton.png b/images/tagButton.png new file mode 100644 index 0000000..49ed5ca Binary files /dev/null and b/images/tagButton.png differ diff --git a/images/uncompressDock.png b/images/uncompressDock.png new file mode 100644 index 0000000..a8d41ff Binary files /dev/null and b/images/uncompressDock.png differ