diff --git a/.bin/.e b/.bin/.e
index 0ec6214..30a700b 100755
--- a/.bin/.e
+++ b/.bin/.e
@@ -4,6 +4,7 @@ declare -A mapper=(
 	[".e"]="$HOME/.bin/.e"
 	["alacritty"]="$HOME/.config/alacritty/alacritty.yml"
 	["astronvim"]="$HOME/.config/astronvim/lua/user/init.lua"
+	["autostart"]="$HOME/.bin/autostart-manage"
 	["bash"]="$HOME/.bashrc"
 	["bspwm"]="$HOME/.config/bspwm/bspwmrc"
 	["environment"]="$HOME/.config/environment"
diff --git a/.bin/autostart-manage b/.bin/autostart-manage
index d876dfb..f06e979 100755
--- a/.bin/autostart-manage
+++ b/.bin/autostart-manage
@@ -1,44 +1,38 @@
-#!/usr/bin/env bash
-
-base_dir="$HOME/.config/systemd/user/"
-
-_filename () {
-	echo "autostart-$1.service"
-}
+#!/usr/bin/env nix-shell
+#!nix-shell -i bash -p dasel hostname
+# shellcheck shell=bash
 
 _systemctl () {
-	systemctl --user "${@:2}" "$(_filename "$1")"
+	systemctl --user "${@:2}" "autostart@$1.service"
+}
+
+_dasel () {
+	dasel -f "$HOME/.config/autostart.toml" -r toml "${@}"
 }
 
 _list () {
-	systemctl --user list-unit-files \
-		| grep "autostart-" \
-		| awk '{print $1}' \
-		| sed -e 's/^autostart-//' -e 's/.service$//'
+	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 () {
-	printf "Unit\tFilename\tEnabled\tActive\n"
 	for unit in "$@"
 	do
-		printf "%s\t%s\t%s\t%s\n" \
+		printf "%s\t%s\t%s\n" \
 			"$unit" \
-			"$(_filename "$unit")" \
 			"$(_systemctl "$unit" is-enabled)" \
 			"$(_systemctl "$unit" is-active)"
 	done
 }
 
-_autostart_manage_add () {
-	cat <<EOF >"$base_dir$(_filename "$1")"
-[Unit]
-Description=$1
-
-[Service]
-ExecStart=/bin/sh -c '. \$HOME/.profile && $2'
-EOF
-}
-
 _autostart_manage_list () {
 	_list
 }
@@ -50,7 +44,7 @@ _autostart_manage_info () {
 		autostart_units+=("$line")
 	done < <(_list)
 
-	_echo_table "${autostart_units[@]}" | column -t -s$'\t'
+	_echo_table "${autostart_units[@]}" | column -t -s$'\t' --table-columns 'Unit,Enabled?,Active?'
 }
 
 _autostart_manage_enable_all () {
@@ -66,8 +60,26 @@ _autostart_manage_enable_all () {
 	done
 }
 
-_autostart_manage_rm () {
-	rm "$base_dir$(_filename "$1")"
+_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_xorg () {
@@ -78,11 +90,11 @@ _autostart_run_xorg () {
 	"$HOME/.config/bspwm/focus-voip.py" &
 
 	numlockx on
-
+	xsetroot -cursor_name left_ptr
 	xrdb "$HOME/.Xresources"
 
-	pgrep -x sxhkd > /dev/null || sxhkd &
-	pgrep -x xcompmgr > /dev/null || xcompmgr -cnfFn -D3 &
+	#pkill sxhkd; sxhkd &
+	#pgrep -x xcompmgr > /dev/null || xcompmgr -cnfFn -D3 &
 
 
 	start-audio pipewire
@@ -101,11 +113,7 @@ _autostart_run_xorg () {
 case $1 in
 	list)		_autostart_manage_list ;;
 	info)		_autostart_manage_info ;;
-	add)		_autostart_manage_add "$2" "$3" ;;
-	rm)			_autostart_manage_rm "$2" ;;
 	enable-all)	_autostart_manage_enable_all "$2" ;;
-	show)		_systemctl "$2" cat ;;
-	edit)		_systemctl "$2" edit --full ;;
 	enable)		_systemctl "$2" add-wants autostart.target ;;
 	disable)	_systemctl "$2" disable ;;
 	restart)	_systemctl "${2:-*}" restart;;
@@ -114,5 +122,6 @@ case $1 in
 	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
diff --git a/.config/autostart.toml b/.config/autostart.toml
new file mode 100644
index 0000000..f36bda2
--- /dev/null
+++ b/.config/autostart.toml
@@ -0,0 +1,23 @@
+conky-clock = 'conky --config="$HOME/.config/conky/clock.conf"'
+conky-system = 'conky --config="$HOME/.config/conky/system.conf"'
+discord = 'flatpak run com.discordapp.Discord'
+dunst = 'dunst'
+element = 'flatpak run im.riot.Riot'
+kdeconnect = '$HOME/.nix-profile/libexec/kdeconnectd'
+parcellite = 'parcellite'
+qutebrowser = 'qutebrowser'
+spotify = 'spotifyd --no-daemon'
+sxhkd = 'sxhkd'
+syncthing = 'syncthing -no-browser'
+teamspeak = 'flatpak run com.teamspeak.TeamSpeak -nosingleinstance'
+xcompmgr = 'xcompmgr -cnfFn -D3'
+
+[portalo]
+ckb-next = 'ckb-next --background'
+conky-archlinux-updates = 'conky --config="$HOME/.config/conky/archlinux-updates.conf"'
+polkit = '/usr/lib/polkit-gnome/polkit-gnome-authentication-agent-1'
+qbittorrent = 'flatpak run org.qbittorrent.qBittorrent'
+signal = 'flatpak run org.signal.Signal'
+solaar = 'solaar --window hide'
+steam = 'flatpak run com.valvesoftware.Steam -silent'
+thunderbird = 'thunderbird'