Jag hackade nyligen ihop ett program som läser in ett API och presenterar detta som en ATOM/RSS-feed. Det blev inte snyggt, men nu kan jag följa en blogg som normalt saknar ett RSS-flöde i min RSS-läsare.
Det trixigaste var att lyckas förstå hur en kör ett program som detta i NixOS, men utan att behöva stöka allt för mycket. Jag ville att skriptet ska köras varje timme och jag ville använda några förpaketerade paketberoenden. I korthet, Nix-Writers fixade biffen!
{ pkgs, ... }:
let
python-hack = pkgs.writers.writePython3 "pythonhack" {
libraries = [ pkgs.python3Packages.feedgen pkgs.python3Packages.requests ];
} (builtins.readFile "/path/to/script.py");
in {
systemd.services.python-hack = {
description = "hack hack hack";
serviceConfig = {
Type = "oneshot";
User = "foobar";
ExecStart = python-hack; # samma namn som i let-blocket
};
};
systemd.timers.python-hack = {
wantedBy = [ "timers.target" ];
partOf = [ "python-hack.service" ];
timerConfig.OnCalendar = "hourly";
};
}
Det är nog lite hackigt att använda writers-funktionaliteten såhär, det är nog tänkt att användas för att skriva programkod direkt i nix-filen, istället för att bara läsa in källkoden från en fil som här ovan. Men det fungerade, och det var relativt enkelt att sätta ihop.