Skip to content

Instantly share code, notes, and snippets.

Embed
What would you like to do?
Switch iTerm2 color preset automatic base on macOS dark mode.

The latest beta (3.5) includes separate color settings for light & dark mode. Toggling dark mode automatically switches colors.

Vist iTerm 2 homepage to download the beta. Thanks @stefanwascoding.


  1. Add switch_automatic.py to ~/Library/ApplicationSupport/iTerm2/Scripts/AutoLaunch with:
#!/usr/bin/env python3

import asyncio
import iterm2

async def main(connection):
    async with iterm2.VariableMonitor(connection, iterm2.VariableScopes.APP, "effectiveTheme", None) as mon:
        while True:
            # Block until theme changes
            theme = await mon.async_get()

            # Themes have space-delimited attributes, one of which will be light or dark.
            parts = theme.split(" ")
            if "dark" in parts:
                preset = await iterm2.ColorPreset.async_get(connection, "Dark Background")
            else:
                preset = await iterm2.ColorPreset.async_get(connection, "Light Background")

            # Update the list of all profiles and iterate over them.
            profiles=await iterm2.PartialProfile.async_query(connection)
            for partial in profiles:
                # Fetch the full profile and then set the color preset in it.
                profile = await partial.async_get_full_profile()
                await profile.async_set_color_preset(preset)

iterm2.run_forever(main)

Change Dark Background and Light Background to color presets you like.

  1. Enabled switch_automatic.py from Scripts menu.
@stefanwascoding
Copy link

stefanwascoding commented Oct 3, 2021

The latest beta (3.5) includes separate color settings for light & dark mode. Toggling dark mode automatically switches colors.

@plivox
Copy link

plivox commented Oct 3, 2021

The latest beta (3.5) includes separate color settings for light & dark mode. Toggling dark mode automatically switches colors.

Great!

@xplosionmind
Copy link

xplosionmind commented Dec 28, 2021

Hello everybody, this script is really helpful, but I find myself having to click on “Scripts > switch_automatic.py” when the system theme switches in order to make the iTerm theme change… shouldn’t it happen automatically as soon as the system theme changes? Am I doing something wrong?

@FradSer
Copy link
Author

FradSer commented Dec 29, 2021

@xplosionmind in ~/Library/ApplicationSupport/iTerm2/Scripts folder you can create a new folder AutoLaunch, then put the script into it, it will work always.
But the official solution is download latest beta (3.5) as @stefanwascoding said.

@xplosionmind
Copy link

xplosionmind commented Dec 29, 2021

in ~/Library/ApplicationSupport/iTerm2/Scripts folder you can create a new folder AutoLaunch, then put the script into it, it will work always.

Thanks! It now works wonderfully.


But the official solution is download latest beta (3.5) as @stefanwascoding said.

Does this mean that since 3.5 there won’t be any necessity for this script to be used?

@FradSer
Copy link
Author

FradSer commented Dec 30, 2021

@aravinds92
Copy link

aravinds92 commented Apr 6, 2022

Hello folks - I was able to get the background switching from dark to light whenever the system settings toggle. But the text color seems to reset to white every time. Is there a command I can use to set the text to different rgb combinations?

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment