Note
This README was last updated when I was running NothingOS version 2.6
Tip
FASTBOOT NOTE; Fastboot mode can be accessed without ADB by booting with [POWER] + [VOLUME DOWN]
Settings > About phone > Software info > Tap build number Back Developer options > - OEM unlocking - USB debugging
- Get adb/fastboot tools
adb reboot bootloader
- Wait until phone rebooted
fastboot flashing unlock
- Message appears, press volume up to apply
- Wait for process to complete
fastboot reboot
Caution
Reflash stock bootloader first and boot it before relocking. If there is no working legit bootloader present after re-locking the bootloader, you'll brick the device!
adb reboot bootloader
fastboot flashing lock
Note
Patching happens on the phone itself to make the process less error-prone.
- Download latest Magisk apk and sideload the app onto the phone
- https://github.com/topjohnwu/Magisk/releases
adb install magisk.apk
- Download (or extract) the bootloader partition image matching your OS version
- OR Download from
- OR Extract bootloader .img file from full OTA's
- Nothing Phone has A/B partition scheme so bootloader is hidden inside
payload.bin
- Use https://github.com/ssut/payload-dumper-go/releases
payload-dumper-go -p boot payload.bin
- Nothing Phone has A/B partition scheme so bootloader is hidden inside
adb push <bootloader.img> /sdcard/Download
- Patch bootloader image with Magisk
- Open Magisk app
- Next to title "Magisk", tap "Install"
- Choose "Select and Patch a File"
- Tap "Let's go"
- Pick bootloader partition image and patch
adb pull /sdcard/Download/magisk_patched<>.img
Caution
It's best to work in a non-persisted way when performing manual actions. This is why booting from memory is preferred instead of flashing the image!
adb reboot bootloader
fastboot boot <magisk_patched<>.img>
- Wait for phone to boot
- Patch bootloader from Magisk app
- Open Magisk app
- Tap "Install"
- Choose "Direct Install"
- Tap "Let's go"
Or, from fastboot, run the command fastboot flash boot <magisk_patched<>.img>
- Unroot from Magisk app
- Open Magisk app
- Tap "Uninstall Magisk"
- Tap "Restore images"
Or, from fastboot, run the command adb flash boot original_bootloader.img
Tip
The unroot steps from the Magisk app are also part of using the builtin patcher to do OS updates.
Note
Update packages (which in itself are zip files of partition images) are distributed in "full" or "delta". The latter can only be used to upgrade from a specific older version to a new version. Not all OS versions get a "full" update package, and often it takes a few weeks before the "full" packages become available to users.
Note
Delta updates calculate partition checksums! If you force apply them, you'll brick the phone and require EDL
- Provided the builtin updater application wants to update your operating system
- Uninstall Magisk from the bootloader image
- ! Updates from the builtin updater are almost always delta updates, so you need original partition images!
- Open Magisk app
- Tap "Uninstall Magisk"
- Tap "Restore images"
- Start the update from the builtin updater application
- ! DO NOT REBOOT
- Go back to the Magisk app when the updater asks to reboot the phone
- Re-root updated bootloader
- Open Magisk app
- Next to the "Magisk" title, tap "Install"
- Choose "Install to inactive slot (after OTA)"
- Tap "Let's go"
- Tap "Reboot" after patching completes
Tip
Patching the bootloader partition from the Magisk app leaves behind an image copy of the original bootloader. This image copy makes reverting to stock and performing OTA updates easy!
Installed from app store, driver activated through Magisk root.
My CF.Lumen settings. |
My CF.Lumen settings (cont.) |
My CF.Lumen settings (cont.) |
Note
I bought the app from the store, using an older google account, but I cannot seem to get the app to recognize I have a pro license. Thankfully it has a freeload option though!
Installed from app store, installs a boot script through Magisk root.
No configuration.
I needed bootloop saver about 5 times since I started rooting, and of those times it failed me 4 out of 5.
For me this piece of software does not do what I expect from it.
- Magisk Zygote
Hide existence of magisk and other device unlocking tools/features from apps
Tip
You don't need complex hooking (LSPosed lib injection + Hide my Applist function overrides) for Payconiq/Argenta/Bancontact. Banking apps don't seem to care about developer mode. You might have to toggle on/off USB debugging (ADB) though.
-
Open Magisk app
-
Install the Safetynet fix module
-
Enforce DenyList
- Open settings
- Scroll to header "Magisk"
- Tap "Enforce Denylist"
-
Add apps to DenyList
-
Reboot
-
Profit
Note
I originally added Google play services to denylist too as some guides recommended it. Magisk automatically deselects the play services after reboot so I guess it's not needed ¯\_(ツ)_/¯
The apps currently on my Magisk denylist. |
Tip
Keep the configuration of Acc simple. External battery control is flaky at best and you'll save yourself lots of headache
Caution
I have never gotten Acca to work properly, and only use it to read details on the Acca process and charging amperages once every few months.
I limit both wireless charging and charging through USB with ACC. I limit charging amperages, limit maximum battery percentage, and charging cycles to keep battery cool.
- https://github.com/VR-25/acc/tree/v2022.7.30-dev
- Do not handle acc installations through the AccA app, because uninstall/reinstall doesn't properly happen 2 out of 3 times!
The AccA app is sheit, use it for monitoring and nothing else.
- https://github.com/MatteCarra/AccA/tree/v1.0.35
- The AccA app is a front-end for acc and the apk also holds the Magisk Module
- Don't install acc through AccA, it doesn't always properly work
- Run the script
acc-setup.sh
in an elevated terminaladb push '<acc-setup.sh>' /sdcard/Download
adb shell
su
- Allow the terminal to receive root permissions
- Tap on "Grant" in the Magisk popup
sh /sdcard/Download/acc-setup.sh
adb reboot
Acc controls both USB charging and Qi charging.
- Not sure if there is kernel support (as of 2022-08-15) for "Battery Idle" mode, which bypasses the battery during charging, or not.
- Not officially confirmed, but
- The stats look kinda convincing at 0mA current.
- Using switch battery/charge_control_limit 0 _ battery/charge_control_limit_max
- Using forceOff
- Required because heat management tools would turn on usb/wireless charging coil again
Terminal emulator. DON'T DOWNLOAD THE APP STORE VERSION
Don't need a Dolby (or any other root) mod, could use the Wavelet app from the app store just fine.
Wavelet picks its configuration depending on the active audio sync. It'll automatically switch to settings for your default speakers, bluetooth speakers, bluetooth car connection etc.
Default tuning IS ABSOLUTELY HORRIBLE. The phone actually has one speaker and the earpiece "acts" as a stereo companion... but their physical properties are entirely different.
So we have to very aggressively tune and limit! This will lower the maximum volume output, but that's still acceptable (it's still louder than a shower). And tuning the sounds stage is a balancing act to keep the metallic resonance as low as possible.
Wavelet settings with activated modules displayed. |
Nothing Phone 1 equalize settings. |
Nothing Phone 1 limiter settings. |
Nothing Phone 1 audio balancer settings. |
Result; A very very noticeable improvement!
The JBL Flip 4 sounds really good out of the box. I tweaked it a bit to pack more punch since I mostly play more "hard" music.
The balancer settings are set like this because I don't like the volume stepper (BIG ANDROID PROBLEM BTW) and this volume reduction gives me better volume loudness control in overall atmospheres (kitchen, bathroom, fitness, garden, beach).
Wavelet settings with activated modules displayed. |
JBL Flip 4 equalize settings. |
JBL Flip 4 audio balancer settings. |
HORRIBLE AUDIO. ABSOLUTELY HORRIBLE.
TODO
Note
Mini cars have an option for "Harman Kardon tuned audio", providing 6(?) more tweeters and 2(?) subwoofers. The audio setup is supposedly also tuned to the car interior. I don't know if it works, but anything better than the default audio setup is worth it. Believe me.
NothingOS comes with Google's dialer application, but that one has various features enabled/disabled on a per phone basis. The app GAppsMod allows to toggle settings and enable features that are otherwise not available by default.
TODO Installation instructions GAppsMod
Basic tuning to enable the call recorder function. |
The camera is a piece of a modern smartphone I never understood the hype for. But physically "taking an image" comes down to making an interpretation of the raw light data.
So obviously there are people with various stands on the purism spectrum. And, honestly, most out of the box camera apps produce horrible images in the average case by oversmoothing, over unsharpen, oversaturating certain hues.
The AI boom has not improved the situation. As someone who appreciates the raw-ness of things, because of the sense of truth behind it, I will never understand the appeal of AI postprocessing images.
The Google camera app is exclusive to the Pixel phones, but because this is Android we can sideload (and entirely reconfigure the processing pipeline of) the app on many other phones.
Admittedly I have been intrigued by what people call "the best photo processing app" for non-apple hardware and wanted to see for myself. What I did is detailed below.
-
https://www.celsoazevedo.com/files/android/google-camera/dev-suggested/
- There are multiple versions of GCAM because of device specific modifications
- Release; BSG 8.1 [BSG is the modder name]
- Releases from BigKaka should also work
-
https://www.celsoazevedo.com/files/android/google-camera/f/settings09/
- Config files for GCam might/will unlock camera specs and improve picture performance
- Above link has meta information
- As for config file, there is a telegram group for photo enthousiasts on the Nothing Phone
Yes, it's overwhelming for a beginner
- Builtin Nothing Camera
- GCAM LMC 8.4 R15 snapcam
- LMC R14.xml (adb copy to /sdcard//LMC8.4/LMC\ R14.xml)
Caution
It's not possible to remap the power button to open the camera on double tick (which is my preferred way of opening the camera). Because the stock camera app opens on that shortcut, I basically never use the google camera app. Making the effort of opening the custom camera app through the launcher is too much work!
The complexity of ReVanced has always put me off to try it. I'm an oldskool hacker and having to install launchers/managers/companion apps to the stuff I want is off putting! What I want is simplicity, implying I do prep work on my computer and push the resulting binary to my phone. Then all features are available automatically and intuitively!
But the world isn't cool like that, not anymore. Because we make tooling that automates away helpdesk responsibilities... and big G signs their stuff and hardcodes reference inside the "stock" OS (which could be worse, don't fight me).
So to install ReVanced Youtube, you have to install the Revanced Manager app! Then, just like Magisk, you provide it a Youtube apk that is patched. The patched apk is the ReVanced Youtube app you want, install that!
Important
Once I was over the initial hurdle of process complexity, it's actually really nice to use ReVanced Youtube. It's a set and forget configuration, has intuitive features, and doesn't throw ads into my face literally every 30 seconds!
TODO
TODO
In general I keep my phone interfaces minimal, functionally oriented. The reason is simple; don't be terminally attached to my phone.
No clutter; just time / date / weather, and my name at the bottom in case I lose the phone. I also added a shortcut to enable the LED flashlight because I regularly have a need for it (once every two weeks.)
My lock screen (date: 2024-08-15). |
Also here I've chosen minimalism, using Olauncher configured to open dialer or calendar on right/left swipe. The apps I use every day get a dedicated shortcut.
Swiping up from the home screen opens the drawer allowing for autocomplete app search. I don't consider myself having any cruft apps installed, AKA I regularly use every installed app. However laying out all those app icons and visually searching through them quickly becomes tiresome. Typing fragments of the app I need is both more ergonomic and quicker.
My autocomplete suggestion gives away that my most often opened app is Youtube; I only have to type "you" and the launcher knows I want Youtube because there is no other app with the same order of characters in its name installed. Likewise for other apps, di for di-scord, wh for wh-atsapp, op for pairdr-op.
I have a dynamic background called Earth & Moon 3D Wallpaper (PRO) - by CodeKonditor but the app became unlisted since anywhere in 2023(?), for reasons unknown to me. The publisher tried to scrub their (almost) entire existence from the web. The app store link still works if you bought the app, in other cases you'll have to resort to APK mirror sites. There are a few seemingly interesting alternatives if you search for "earth live wallpaper", but I have no need nor intention to switch away.
The earth & moon wallpaper app allows me to adjust camera positions/rotations/orientations, relative star positions and distances, time of day earths rotational position. The amount of freedom is so large it is genuinely overwhelming to configure everything at first try. The app is worth it! It's also hard to communicate how good the wallpaper looks on an OLED screen.** Remember, AMOLED 👏best👏 but sadly Samsung exclusive and Apple nowadays too. RIP Oneplus X 🙏, best phone of its time!
My home screen (date: 2024-08-15). |
My app drawer (date: 2024-08-15). |
**A demo video can be found here! Video was created with scrcpy.
Important
This issue has been solved in NothingOS version 2.0 and later.
NothingOS v1.5.3 has an issue with root, see topjohnwu/Magisk#6780.
According to topjohnwu/Magisk#6780 (comment), running resetprop persist.sys.mglru_enable false
from a root shell will disable the new LRU system and prevent Out-of-memory (OOM) issues.
The change above does not survive reboot and requires a persistent solution, aka a module.
Download sources here https://github.com/LukeSkyD/NP1-MGLRU-FIX/, zip them, install them through Magisk.
This option gives user apps control over the hosts file, allowing systemwide adblock/website blocking functionality.
Don't really need it since it doesn't work on most apps (like Youtube). For the Youtube app I'm using Revanced.
Too simplistic, I rather have the features of Wavelet.
- Dolby Atmos Magisk module
?? Untested