{ config, pkgs, ... }: { imports = [ ./syncthing.nix ]; # Update and start Jinja-Compose project # during boot and after every 30 minutes. # To view the log, run # journalctl -b -u Jinja-Compose -f # systemd.timers."Jinja-Compose" = { wantedBy = [ "timers.target" ]; partOf = [ "Jinja-Compose.service" ]; timerConfig = { OnBootSec = "0m"; OnUnitInactiveSec = "30m"; AccuracySec = "1m"; RandomizedDelaySec = "1m"; }; }; # TODO: Add shutdown script (./docker-compose down). systemd.services."Jinja-Compose" = { description = "Update and start Jinja-Compose project"; serviceConfig = { Type = "oneshot"; PrivateTmp = true; User = "root"; }; path = with pkgs; [ # The `docker-compose` helper script is written in `bash` (!) bash docker ]; script = '' set -eu -o pipefail # We use one of the following # some-command 2> >(sed 's/^/<3> /' >&2) # some-command 2>&1 | sed 's/^/<3> /' 1>&2 # to prefix each line of stdout and stderr from some-command with # "<3> " # Source: https://superuser.com/a/882025/919675 # # With this prefix, the stderr output is treated as error messages by systemd. # See https://www.freedesktop.org/software/systemd/man/latest/sd-daemon.html # They can be viewed with # journalctl -b -u Jinja-Compose.service /jc-config/docker-compose pull 2>&1 | sed 's/^/<3> /' /jc-config/docker-compose up -d --wait 2>&1 | sed 's/^/<3> /' ''; }; }