106 lines
2.0 KiB
Bash
Executable File
106 lines
2.0 KiB
Bash
Executable File
#!/usr/bin/env zsh
|
|
|
|
loglvl=()
|
|
typeset -A loglvl
|
|
loglvl[err]=3
|
|
loglvl[warning]=4
|
|
loglvl[notice]=5
|
|
loglvl[info]=6
|
|
loglvl[debug]=7
|
|
|
|
minlevel=$loglvl[${LOG_LEVEL:-info}]
|
|
|
|
function writelog {
|
|
level=$loglvl[$1]
|
|
if ! (( minlevel > level )); then
|
|
return
|
|
fi
|
|
printf "<%d>%s\n" 1 "$1" 2 "$2"
|
|
}
|
|
|
|
parserror=err
|
|
|
|
function parse-config {
|
|
|
|
writelog debug "Checking for config file $HOME/.config/wallpaper/config"
|
|
|
|
if ! [[ -f $HOME/.config/wallpaper/config ]]; then
|
|
writelog $parserror "Config does not exist, cannot operate."
|
|
return 6
|
|
fi
|
|
|
|
writelog debug "Loading config file"
|
|
|
|
source $HOME/.config/wallpaper/config
|
|
IFS=' '
|
|
|
|
writelog debug "Config file loaded, got COLOR='$COLOR' IMAGE='$IMAGE' MODE='$MODE'"
|
|
|
|
args=()
|
|
|
|
good_config=0
|
|
|
|
if (( ${+COLOR} )); then
|
|
args+="--color=${COLOR}"
|
|
good_config=1
|
|
writelog debug "Config is valid: COLOR is specified"
|
|
fi
|
|
if (( ${+IMAGE} )); then
|
|
args+="--image=$IMAGE"
|
|
good_config=1
|
|
writelog debug "Config is valid: IMAGE is specified"
|
|
fi
|
|
if (( ${+MODE} )); then
|
|
args+="--mode=$MODE"
|
|
fi
|
|
|
|
if ! [[ $good_config == '1' ]]; then
|
|
writelog $parserror "Missing COLOR or IMAGE, cannot set background."
|
|
return 78
|
|
fi
|
|
|
|
writelog debug "Arguments parsed, got args='$args'"
|
|
|
|
}
|
|
|
|
function reload {
|
|
systemd-notify --reloading --status "Reloading config"
|
|
parse-config
|
|
if (( ? != 0 )); then
|
|
writelog err "Reload failed"
|
|
systemd-notify --ready --status "Config reload failed. Background not changed."
|
|
return
|
|
fi
|
|
kill $swaybg_pid
|
|
# now will return to the while loop where swaybg will be relaunched with new $args
|
|
}
|
|
|
|
function stop {
|
|
writelog info "Received stop request, shutting down..."
|
|
systemd-notify --stopping
|
|
should_exit=1
|
|
kill $swaybg_pid
|
|
}
|
|
|
|
parse-config
|
|
exit_code=$?
|
|
parserror=warning
|
|
|
|
if (( exit_code )); then
|
|
exit $exit_code
|
|
fi
|
|
|
|
trap reload 1
|
|
trap stop 15
|
|
|
|
should_exit=0
|
|
while [[ $should_exit == 0 ]]; do
|
|
writelog debug "Launching swaybg"
|
|
swaybg --output='*' "$=args" &
|
|
swaybg_pid=$!
|
|
writelog debug "swaybg launched with pid $swaybg_pid"
|
|
sleep 0.1
|
|
systemd-notify --ready --status "Wallpaper set"
|
|
wait
|
|
done
|