her.esy.fun/src/posts/0007-switch-iterm-profile-catalina/index.org
Yann Esposito (Yogsototh) 2b90505d7b
iTerm profile switch
2019-11-10 22:05:12 +01:00

2.1 KiB

Catalina iTerm Theme switch

The script

For the script to work you need to have two iTerm profiles, one named Dark and the other one Light. Just go to Preferences then Profiles then Duplicate profile.

I use fish but you can easily adapt that in your .bashrc, .bash_profile etc…

Here is what I have in my ~/.config/fish/config.fish:

  function setItermProfile
      echo -ne "\033]50;SetProfile=$argv\a"
  end

  function sync_appearance

      set -x MacOSThemeAutoSwitch \
          (defaults read -g AppleInterfaceStyleSwitchesAutomatically 2>/dev/null)
      test -z $MacOSThemeAutoSwitch; and set -x MacOSThemeAutoSwitch 0

      set -x MacOSTheme (defaults read -g AppleInterfaceStyle 2>/dev/null)
      test -z $MacOSTheme; and set -x MacOSTheme 'nil'

      # for debug purpose only
      # echo $MacOSThemeAutoSwitch
      # echo $MacOSTheme

      if test -n $ITERM_PROFILE # check if we are using iTerm2
          switch $MacOSThemeAutoSwitch
              case 1
                  switch $MacOSTheme
                      case 'nil'
                          setItermProfile Light
                      case '*'
                          setItermProfile Dark
                  end
              case 0
                  switch $MacOSTheme
                      case 'Dark'
                          setItermProfile Dark
                      case 'Light'
                          setItermProfile Light
                      case 'nil'
                          setItermProfile Light
                  end
          end
      end
  end

  if status --is-login
      if status --is-interactive
          sync_appearance
      end
  end

If the appearance change, you can call sync_appearance function in your shell to sync with the OS dark/light appearance.