{bash, event, utillinux}:

assert event == "reboot"
    || event == "halt"
    || event == "system-halt"
    || event == "power-off";

{
  name = "sys-" + event;
  
  job = "
start on ${event}

script
    set +e # continue in case of errors

    exec < /dev/tty1 > /dev/tty1 2>&1
    echo \"\"
    echo \"<<< SYSTEM SHUTDOWN >>>\"
    echo \"\"

    export PATH=${utillinux}/bin:${utillinux}/sbin:$PATH


    # Set the hardware clock to the system time.
    echo \"Setting the hardware clock...\"
    hwclock --systohc --utc || true


    # Do an initial sync just in case.
    sync || true


    # Kill all remaining processes except init and this one.
    echo \"Sending the TERM signal to all processes...\"
    kill -TERM -1 || true

    sleep 1 # wait briefly

    echo \"Sending the KILL signal to all processes...\"
    kill -KILL -1 || true


    # Unmount helper functions.
    getMountPoints() {
        cat /proc/mounts \\
        | grep -v '^rootfs' \\
        | sed 's|^[^ ]\\+ \\+\\([^ ]\\+\\).*|\\1|' \\
        | grep -v '/proc\\|/sys\\|/dev'
    }

    getDevice() {
        local mountPoint=$1
        cat /proc/mounts \\
        | grep -v '^rootfs' \\
        | grep \"^[^ ]\\+ \\+$mountPoint \\+\" \\
        | sed 's|^\\([^ ]\\+\\).*|\\1|'
    }

    # Unmount file systems.  We repeat this until no more file systems
    # can be unmounted.  This is to handle loopback devices, file
    # systems  mounted on other file systems and so on.
    tryAgain=1
    while test -n \"$tryAgain\"; do
        tryAgain=

        for mp in $(getMountPoints); do
            device=$(getDevice $mp)
            echo \"unmounting $mp...\"
            if umount -f -n \"$mp\"; then
                if test \"$mp\" != /; then tryAgain=1; fi
            else
                mount -n -o remount,ro \"$mp\" || true
            fi

            # Hack: work around a bug in mount (mount -o remount on a
            # loop device forgets the loop=/dev/loopN entry in
            # /etc/mtab).
            if echo \"$device\" | grep -q '/dev/loop'; then
                echo \"removing loop device $device...\"
                losetup -d \"$device\" || true
            fi
        done
    done

    cat /proc/mounts


    # Final sync.
    sync || true


    # Right now all events above power off the system.
    if test ${event} = reboot; then
        exec reboot -f
    else
        exec halt -f -p
    fi

end script
  ";
  
}