@gwp1 That's not too different from Easter. I have another virtual switch for the current program (as a string). it's set to default unless a specific program is found. My logic is quite easy:
at 1 am, get the current holiday via webcal.guru/fixed dates. save it to a virtual entity. try to match current holiday with pre-defined light programs. save the value to a virtual entity. when dark, cycle every 15 minutes and randomize lights according to the current light program.For Christmas Time after Thanksgiving, you could set a virtual entity/global variable (Christmas Time) to true when it's Thanksgiving and run the corresponding lights only if both are not true. Then, the day after, you'll still have the variable/entity to true, but a different holiday. I have a fixed Christmas Time (1 Dec to 6 Jan), because that's the range we usually have in Italy, so it's easier for me.
I was thinking of creating a specific Controller for Holiday Lights, integrated with webcal.guru or similar, but I fear what every one of us is doing is quite different.