Automatic Switching Between Light and Dark Solarized Modes
I've recently switched to using the solarized color theme. At first it took getting used to the lower contrast; however, I was persuaded to keep trying based on the research behind the choice of the colors. I'm now quite happy with it.
With solarized there are 2 mode of operation, light mode and dark mode. These modes have the somewhat obvious meanings, light mode uses a light background with darker text, and dark mode uses a dark background with light text. I like both modes, and find that the dark mode is well suited to nighttime use and likewise the light mode is good for daytime.
So the next question was how to make this automatic. I use iTerm on the Mac so I created 2 profiles 1 for each mode and gave each profile a hot key. But what about when the sun sets or rises and I've got windows open? Also I use different colors for the TMUX status bar depending on the mode, I'd like those long running sessions to update as well depending on the time of the day.
In order to update running programs I created a shell script (which also uses applescript if iTerm is running) to update both iTerm and TMUX based on an hour range. I then execute this script once an hour using crontab.
One of the features of solarized is that the only difference between the light and dark modes is the choices for foreground color and background color. So we only have to swap those two values. I also change the color of the text behind the cursor.
Update color mode shell script.
#!/bin/bash
# Set Color Values
darkend=600 # 6am
darkstart=2000 # 10pm
timeval="$(date +%k%M)" # current time
if [ $timeval -gt $darkend -a $timeval -lt $darkstart ]; then
# Dark Mode
itermcolors='{{64842, 62778, 56626}, {21257, 26684, 28737}, {60037, 58326, 52284}}'
tmux_cur_fg=black
tmux_bg=colour7
else
# Light Mode
itermcolors='{{0, 7722, 9941}, {28873, 33398, 33872}, {0, 10207, 12694}}'
tmux_cur_fg=white
tmux_bg="#124741"
fi
# Adjust iTerm
if [ -n "$(ps x | grep iTerm | grep -v grep)" ]; then
osascript <<- EOF
tell application "iTerm"
repeat with aSession in sessions of current terminal
tell aSession
set theColors to $itermcolors
set background color to item 1 of theColors
set foreground color to item 2 of theColors
set cursor_text color to item 3 of theColors
end tell
end repeat
end tell
EOF
fi
# Adjust TMUX
sessions="$(tmux ls 2>/dev/null | cut -f1 -d:)"
for s in $sessions; do
tmux set-window-option -t $s -g window-status-current-fg $tmux_cur_fg > /dev/null
tmux set-window-option -t $s -g status-bg $tmux_bg > /dev/null
done
Crontab entry
0 * * * * /users/chopps/bin/update-color-mode.sh