Skip to main content
Before you begin:
  • Ensure you have a Nest Generation 2 thermostat (check compatibility)
  • Do NOT use this on a thermostat critical for heating/cooling (experimental software)
  • This will brick your device if done incorrectly - proceed at your own risk

Prerequisites

Youโ€™ll need:
  • Linux computer or macOS
    • โš ๏ธ Windows is NOT supported (including WSL)
  • Nest Generation 2 thermostat
    • Check for green bubble level on back plate (not blue)
  • Micro USB cable (data-capable, not charging-only)
  • Build tools and dependencies installed

Step 1: Clone Repository

Clone the repository:
git clone https://github.com/codykociemba/NoLongerEvil-Thermostat.git
cd NoLongerEvil-Thermostat

Step 2: Install Dependencies

  • Ubuntu/Debian
  • macOS
sudo apt-get update
sudo apt-get install build-essential libusb-1.0-0-dev gcc pkg-config

Step 3: Build omap_loader

Build the USB flashing tool:
chmod +x build.sh
./build.sh
The build script will automatically detect your operating system (Linux, macOS, or Windows) and build the appropriate binary.

Step 4: Start the Installer

IMPORTANT: Start the installer BEFORE rebooting your thermostat into DFU mode.
chmod +x install.sh
./install.sh
For macOS users: You may need to grant USB permissions. If you encounter permission issues, check System Preferences โ†’ Security & Privacy.
The script will wait for the device to enter DFU mode.

Step 5: Enter DFU Mode

Follow these steps carefully:
  1. Charge the device - Ensure your Nest Thermostat is properly charged (at least 50% battery recommended)
  2. Remove from wall - Remove the Nest from its back plate/wall mount
  3. Connect via USB - Plug the Nest into your computer using a micro USB cable
  4. Wait for the installer - Make sure the install.sh script is running and waiting
  5. Reboot the device - Press and hold down on the display for 10-15 seconds until the device reboots
  6. DFU mode active - Once it reboots, the device will enter DFU mode and the installer script will recognize it and begin flashing
The firmware installer will automatically detect the device and flash the custom bootloader (x-load, u-boot) and kernel (uImage).

Step 6: Wait for Boot

After the firmware is flashed successfully, you should see the No Longer Evil logo on the device screen. Important:
  • Keep the device plugged in via USB
  • Wait for the device to complete its boot sequence (this may take 3-4 minutes)
  • Do not disconnect or power off the device during this time

Step 7: Register Account

Once the device has fully rebooted:
  1. Visit https://nolongerevil.com in your web browser
  2. Register an account (or sign in if you already have one)
  3. Navigate to your Dashboard
You will see a โ€œNo devicesโ€ screen that prompts you for an entry code.
To link your Nest device to your No Longer Evil account:
  1. On your Nest device, navigate to: Settings โ†’ Nest App โ†’ Get Entry Code
  2. The device will display a unique entry code
  3. Enter this code on the No Longer Evil dashboard
  4. Your device is now linked and ready to use!

Step 9: Reinstall on Wall

Once everything is working:
  1. Align the Nest with the backplate on the wall
  2. Push gently until it clicks into place
  3. The device will reconnect to HVAC power and charge

๐ŸŽ‰ Success!

Your Nest Thermostat is now running No Longer Evil and connected to your account!

What Gets Flashed

The firmware installation process installs three components:
  1. x-load.bin - First-stage bootloader (X-Loader for OMAP)
  2. u-boot.bin - Second-stage bootloader (Das U-Boot) loaded at address 0x80100000
  3. uImage - Linux kernel image loaded at address 0x80A00000
After flashing, the device jumps to execution at 0x80100000 (u-boot).

Something Went Wrong?

See Entry Code Issues

Credits & Acknowledgments

This project builds upon the excellent work of several security researchers and developers: Without their groundbreaking research, open-source contributions, and advocacy for device ownership rights, this work would not be possible. Thank you!

Get Help

Join our Discord community or open a GitHub issue for assistance