#!/usr/bin/env bash hostname=$(cat /proc/sys/kernel/hostname) _systemctl () { systemctl --user "${@:2}" "autostart@$1.service" } _query_autostart_toml() { tomlq -r --arg host "$hostname" \ '.hosts[$host].groups as $groups | .apps | to_entries[] | select( (.value.hosts | contains([$host])) or ([.value.group] | inside($groups)) ) | '"$1" \ "$XDG_CONFIG_HOME/autostart.toml" } _list () { _query_autostart_toml '.value.alias // .key' } _echo_table () { for unit in "$@" do printf "%s\t%s\t%s\t%s\n" \ "$unit" \ "$(_systemctl "$unit" is-enabled)" \ "$(_systemctl "$unit" is-active)" \ "$(_get_autostart_cmd "$unit")" done } _autostart_manage_list () { _list } _autostart_manage_info () { autostart_units=() while IFS='' read -r line do autostart_units+=("$line") done < <(_list) _echo_table "${autostart_units[@]}" | column -t -s$'\t' --table-columns 'Unit,Enabled?,Active?,Command' } _autostart_manage_log () { journalctl --user -fu "autostart@$1.service" } _autostart_manage_sync () { rm "$HOME/.config/systemd/user/autostart.target.wants/"* autostart_units=() while IFS='' read -r line do autostart_units+=("$line") done < <(_list) for unit in "${autostart_units[@]}" do _systemctl "$unit" add-wants autostart.target done } _get_autostart_cmd () { _query_autostart_toml 'select((.key == "'"$1"'") or (.value.alias == "'"$1"'")) | .value.command' } _autostart_manage_exec () { cmd=$(_get_autostart_cmd "$1") bash -c "$cmd" } _autostart_run_graphical () { pass x # Try to unlock yubikey asap start-audio pipewire wait-for-service "network-online.target" # Execute only if not already running # Don't match keepassxc-proxy if ! (pgrep -l keepassxc | grep -v prox) >/dev/null then if pass x then (pass keepass | head -n 1 | keepassxc --pw-stdin ~/sync/passwords.kdbx) & fi fi autoinstall graphical autostart-manage run } _autostart_run_wayland () { _autostart_run_graphical killall -SIGUSR2 waybar } _autostart_run_xorg () { feh --bg-fill "$XDG_PICTURES_DIR/wallpaper/active_wallpaper" "$HOME/.config/polybar/launch.sh" & "$HOME/.config/bspwm/focus-voip.py" & numlockx on xsetroot -cursor_name left_ptr xrdb "$HOME/.Xresources" _autostart_run_graphical } case $1 in list) _autostart_manage_list ;; info) _autostart_manage_info ;; sync) _autostart_manage_sync ;; enable) _systemctl "$2" add-wants autostart.target ;; disable) _systemctl "$2" disable ;; restart) _systemctl "${2:-*}" restart;; log) _autostart_manage_log "$2";; start) _systemctl "${2:-*}" start;; status) _systemctl "${2:-*}" status ;; stop) _systemctl "${2:-*}" stop ;; run) systemctl --user start autostart.target ;; run-xorg) _autostart_run_xorg ;; run-wayland) _autostart_run_wayland ;; exec) _autostart_manage_exec "$2" ;; *) echo "'$1' is not valid" ;; esac