{ config, pkgs, domain, ... }: { systemd.timers."nx_cal_lr" = { enable = true; wantedBy = [ "timers.target" ]; timerConfig = { OnBootSec = "41m"; OnUnitActiveSec = "24h"; Unit = "nx_cal_lr.service"; }; }; systemd.services."nx_cal_lr" = { script = let nx_cal_lr = (pkgs.writers.writePython3Bin "nx_cal_lr" { libraries = with pkgs.python3Packages; [ ics requests ]; flakeIgnore = [ "E302" "E305" "E226" "E501" ]; } /*python */ '' from ics import Calendar import requests def filter_events(events): return [event for event in events if ("LR" in event.name) or ("TBD" in event.name)] def fetch_and_save_ical_events(ical_url, save_path): """ Fetch events from an iCal URL and save them as a single combined calendar. """ try: # Fetch the iCal data response = requests.get(ical_url) response.raise_for_status() # Parse the iCal data calendar = Calendar(response.text) # Adjust events adjusted_events = filter_events(list(calendar.events)) # Create a new combined calendar combined_calendar = Calendar() for event in adjusted_events: combined_calendar.events.add(event) # Save the combined calendar to a single .ics file with open(save_path, 'w') as file: file.writelines(combined_calendar.serialize_iter()) print(f"Saved combined calendar to {save_path}") except requests.exceptions.RequestException as e: print(f"Error fetching iCal data: {e}") except Exception as e: print(f"Error processing iCal data: {e}") if __name__ == "__main__": # Replace with your iCal URL and target file path ICAL_URL = "https://zlypher.github.io/lol-events/cal/league-of-legends-nlc.ical" SAVE_PATH = "${config.services.nginx.virtualHosts."${domain}".root}/lr.ics" fetch_and_save_ical_events(ICAL_URL, SAVE_PATH) ''); in '' ${nx_cal_lr}/bin/nx_cal_lr ''; serviceConfig = { Type = "oneshot"; User = "nx2"; }; }; }