I built a wallpaper switching script to help me be aware of the day outside my computer.

It uses a python package called astral to test whether the time is before or after local sunset (this changes with the seasons, of course).

Then the script automatically downloads a photo from a live webcam on top of a local TV station, sets it to be the background, and switches my local color scheme to light or dark themes as appropriate.

This runs on a cronjob, every 15 minutes, so that I have a slowly-updating view of the sun passing over the city all day.

Recently upgraded to astral v2. I want to clean up the hacky shell-script parts of it but I'll document them all below:

import datetime
from astral.sun import sun
from astral.geocoder import lookup, database
import pytz
import subprocess

tz = pytz.timezone('US/Mountain')
now = datetime.datetime.now()
now = tz.localize(now)

city = lookup("Albuquerque", database())

s = sun(city.observer, date=now)
print('Dawn:    %s' % str(s['dawn']))
print('Sunrise: %s' % str(s['sunrise']))
print('Noon:    %s' % str(s['noon']))
print('Sunset:  %s' % str(s['sunset']))
print('Dusk:    %s' % str(s['dusk']))
print('Now:     %s' % str(now))

if s['dawn'] <= now <= s['dusk']    :

This is the code for the shell scripts. I guess it's mostly the same, just one variable changed in the subprocess. When I was writing this in 2017 I didn't really understand how to craft a formatted string or template in python, so I just copied my shell scripts into a folder and hardwired the URL of the webcam

#! /bin/bash

curl http://wwc.instacam.com/instacamimg/KOBTV/KOBTV_l.jpg --output  ~/sol/kobtv.jpg
wal --backend colorthief --saturate 0.5 -li ~/sol/kobtv.jpg
oomoxify-cli -s /opt/spotify/Apps -f "Input Mono" ~/.cache/wal/colors-oomox
#! /bin/bash

curl http://wwc.instacam.com/instacamimg/KOBTV/KOBTV_l.jpg --output ~/sol/kobtv.jpg
wal --backend colorthief --saturate 0.5 -i ~/sol/kobtv.jpg
oomoxify-cli -s /opt/spotify/Apps -f "Input Mono" ~/.cache/wal/colors-oomox

I have some pictures of this on an old hard drive, I'll find them soon