#!/usr/bin/env bash _systemctl () { systemctl --user "${@:2}" "autostart@$1.service" } _dasel () { dasel -f "$HOME/.config/autostart.toml" -r toml "${@}" } _list () { part_root='all().filter(not(equal(type(),object))).key()' part_host='all().filter(equal(type(),object)).all().key()' arg="merge($part_host,$part_root).all()" _dasel "$arg" \ | sort \ | uniq #systemctl --user list-unit-files \ # | grep "autostart-" \ # | awk '{print $1}' \ # | sed -e 's/^autostart-//' -e 's/.service$//' } _echo_table () { for unit in "$@" do printf "%s\t%s\t%s\n" \ "$unit" \ "$(_systemctl "$unit" is-enabled)" \ "$(_systemctl "$unit" is-active)" 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?' } _autostart_manage_enable_all () { 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 () { hostname=$(cat /proc/sys/kernel/hostname) selector_base="all()" selector_host="all().filter(equal(type(),object)).filter(equal(key(),$hostname)).all()" selector_entry="filter(not(equal(type(),object))).filter(equal(key(),$1))" cmd=$(_dasel "$selector_base.$selector_entry") cmd_local=$(_dasel "$selector_host.$selector_entry") if [ -n "$cmd_local" ]; then if [ "$cmd_local" = "false" ]; then cmd="" else cmd="$cmd_local" fi fi echo "$cmd" } _autostart_manage_exec () { cmd=$(_get_autostart_cmd "$1") bash -c "$cmd" } _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" #pkill sxhkd; sxhkd & #pgrep -x xcompmgr > /dev/null || xcompmgr -cnfFn -D3 & start-audio pipewire wait-for-service "network-online.target" if ! pgrep -x keepassxc then pass x (pass keepass | head -n 1 | keepassxc --pw-stdin ~/sync/passwords.kdbx) & fi autoinstall graphical autostart-manage run } case $1 in list) _autostart_manage_list ;; info) _autostart_manage_info ;; enable-all) _autostart_manage_enable_all "$2" ;; enable) _systemctl "$2" add-wants autostart.target ;; disable) _systemctl "$2" disable ;; restart) _systemctl "${2:-*}" restart;; start) _systemctl "${2:-*}" start;; status) _systemctl "${2:-*}" status ;; stop) _systemctl "${2:-*}" stop ;; run) systemctl --user start autostart.target ;; run-xorg) _autostart_run_xorg ;; exec) _autostart_manage_exec "$2" ;; *) echo "'$1' is not valid" ;; esac