150 lines
		
	
	
	
		
			3.2 KiB
		
	
	
	
		
			Bash
		
	
	
		
			Executable file
		
	
	
	
	
			
		
		
	
	
			150 lines
		
	
	
	
		
			3.2 KiB
		
	
	
	
		
			Bash
		
	
	
		
			Executable file
		
	
	
	
	
#!/usr/bin/env bash
 | 
						|
 | 
						|
hostname=$(cat /proc/sys/kernel/hostname)
 | 
						|
 | 
						|
_systemctl () {
 | 
						|
	systemctl --user "${@:2}" "autostart@$1.service"
 | 
						|
}
 | 
						|
 | 
						|
_dasel () {
 | 
						|
	dasel -f "$HOME/.config/autostart.toml" -r toml -w plain "${@}"
 | 
						|
}
 | 
						|
 | 
						|
_list () {
 | 
						|
	part_root='all().filter(not(equal(type(),object))).key()'
 | 
						|
	part_host="all().filter(equal(type(),object)).filter(equal(key(),$hostname)).all().key()"
 | 
						|
	query="merge($part_host,$part_root).all()"
 | 
						|
	programs=$(_dasel "$query" \
 | 
						|
		| sort \
 | 
						|
		| uniq)
 | 
						|
 | 
						|
	for program in $programs
 | 
						|
	do
 | 
						|
		cmd=$(_get_autostart_cmd "$program")
 | 
						|
		if [ -n "$cmd" ]; then
 | 
						|
			echo "$program"
 | 
						|
		fi
 | 
						|
	done
 | 
						|
}
 | 
						|
 | 
						|
_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_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 () {
 | 
						|
	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_graphical () {
 | 
						|
	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
 |