#!/bin/sh

# This script is used by DWM to start programs when it starts

# It's meant as a sort of wrapper script to start a long running program and have it log to a file.

# Some examples:
# env LOGFILE=~/test.log start pipewire
# start pipewire; tail -f ~/.local/log/pipewire.log

LOGFILE="${LOGFILE:-${HOME}/.local/log/${1}.log}"

BOLD="$(tput bold)"
RED="$(tput setaf 1)"
GREEN="$(tput setaf 2)"
NC="$(tput sgr0)"

infolog() {
	while IFS= read -r line; do
		echo "[$(date +%X)][${BOLD}${GREEN}INF${NC}][$1] $line" >>"${LOGFILE}"
	done
}

errorlog() {
	while IFS= read -r line; do
		echo "[$(date +%X)][${BOLD}${RED}ERR${NC}][$1] $line" >>"${LOGFILE}"
	done
}

stdout="$XDG_RUNTIME_DIR/dwm-stdout"
stderr="$XDG_RUNTIME_DIR/dwm-stderr"
[ -p "$stdout" ] || mkfifo "$stdout"
[ -p "$stderr" ] || mkfifo "$stderr"
cat <"$stdout" | infolog "$1" &
cat <"$stderr" | errorlog "$1" &
# shellcheck disable=2068
pidof -sx "$1" || $@ >"$stdout" 2>"$stderr"