80 lines
2.2 KiB
Nix
80 lines
2.2 KiB
Nix
{ config, pkgs, hyper, ... }:
|
|
{
|
|
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_urls, save_path):
|
|
"""
|
|
Fetch events from an iCal URL and save them as a single combined calendar.
|
|
"""
|
|
try:
|
|
# Create a new combined calendar
|
|
combined_calendar = Calendar()
|
|
|
|
for url in ical_urls:
|
|
# Fetch the iCal data
|
|
response = requests.get(url)
|
|
response.raise_for_status()
|
|
|
|
# Parse the iCal data
|
|
calendar = Calendar(response.text)
|
|
|
|
# Adjust events
|
|
adjusted_events = filter_events(list(calendar.events))
|
|
|
|
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_URLS = [
|
|
"https://zlypher.github.io/lol-events/cal/league-of-legends-nlc.ical",
|
|
"https://zlypher.github.io/lol-events/cal/league-of-legends-emea-masters.ical"
|
|
]
|
|
SAVE_PATH = "${config.services.nginx.virtualHosts."${hyper.domain}".root}/lr.ics"
|
|
|
|
fetch_and_save_ical_events(ICAL_URLS, SAVE_PATH)
|
|
'');
|
|
in ''
|
|
${nx_cal_lr}/bin/nx_cal_lr
|
|
'';
|
|
serviceConfig = {
|
|
Type = "oneshot";
|
|
User = hyper.user;
|
|
};
|
|
};
|
|
}
|