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 <"$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'