nix-config/hosts/owncast/owncast-archiver.nix

Ignoring revisions in .git-blame-ignore-revs. Click here to bypass and see the normal blame view.

63 lines
1.5 KiB
Nix
Raw Normal View History

2022-12-12 21:57:00 +01:00
{ config, lib, pkgs, ... }:
let
2023-11-11 23:21:00 +01:00
owncastArchiver = with pkgs; writeShellScript "owncast-archiver.sh" ''
2022-12-12 21:57:00 +01:00
PATH=${lib.makeBinPath [ coreutils curl jq ffmpeg ]}
while true; do
STATUS="$(curl -s https://owncast.c3d2.de/api/status)"
ONLINE="$(echo "$STATUS" | jq -r .online)"
if [ "$ONLINE" = true ]; then
TITLE="$(echo "$STATUS" | jq -r .streamTitle)"
ffmpeg -i https://owncast.c3d2.de/hls/0/stream.m3u8 -c copy "$(echo "$(date -Iseconds)_$TITLE.mkv"|tr " +<>:/" "____\\-\\-")"
fi
sleep ${toString cfg.pollInterval}
done
'';
cfg = config.services.owncast-archiver;
in
{
options.services.owncast-archiver = with lib; {
enable = mkEnableOption "owncast archiver";
targetDir = mkOption {
type = types.str;
2023-05-27 18:55:15 +02:00
default = "/archive";
2022-12-12 21:57:00 +01:00
};
pollInterval = mkOption {
type = types.int;
default = 10;
};
};
config = lib.mkIf cfg.enable {
users.users.archiver = {
isSystemUser = true;
group = "nginx";
};
2023-11-11 23:21:00 +01:00
systemd = {
services.owncast-archiver = {
wantedBy = [ "multi-user.target" ];
after = [ "owncast.service" ];
serviceConfig = {
ReadWritePaths = cfg.targetDir;
WorkingDirectory = cfg.targetDir;
User = "archiver";
ExecStart = owncastArchiver;
Restart = "always";
RestartSec = 60;
};
2022-12-12 21:57:00 +01:00
};
2023-11-11 23:21:00 +01:00
tmpfiles.rules = [
"d ${cfg.targetDir} 0770 archiver nginx -"
2023-11-11 23:21:00 +01:00
];
2022-12-12 21:57:00 +01:00
};
};
}