Add systemd based autostart system
This commit is contained in:
parent
0c17b6454a
commit
e1ef91b696
5 changed files with 87 additions and 2 deletions
66
.bin/autostart-manage
Executable file
66
.bin/autostart-manage
Executable file
|
@ -0,0 +1,66 @@
|
||||||
|
#!/usr/bin/env bash
|
||||||
|
|
||||||
|
base_dir="$HOME/.config/systemd/user/"
|
||||||
|
|
||||||
|
_filename () {
|
||||||
|
echo "autostart-$1.service"
|
||||||
|
}
|
||||||
|
|
||||||
|
_systemctl () {
|
||||||
|
systemctl --user "${@:2}" "$(_filename "$1")"
|
||||||
|
}
|
||||||
|
|
||||||
|
_echo_table () {
|
||||||
|
printf "Unit\tFilename\tEnabled\n"
|
||||||
|
for unit in "$@"
|
||||||
|
do
|
||||||
|
printf "%s\t%s\t%s\n" \
|
||||||
|
"$unit" \
|
||||||
|
"$(_filename "$unit")" \
|
||||||
|
"$(_systemctl "$unit" is-enabled)"
|
||||||
|
done
|
||||||
|
}
|
||||||
|
|
||||||
|
_autostart_manage_add () {
|
||||||
|
cat <<EOF >"$base_dir$(_filename "$1")"
|
||||||
|
[Unit]
|
||||||
|
Description=$1
|
||||||
|
|
||||||
|
[Service]
|
||||||
|
ExecStart=$2
|
||||||
|
EOF
|
||||||
|
}
|
||||||
|
|
||||||
|
_autostart_manage_list () {
|
||||||
|
systemctl --user list-unit-files \
|
||||||
|
| grep "autostart-" \
|
||||||
|
| awk '{print $1}' \
|
||||||
|
| sed -e 's/^autostart-//' -e 's/.service$//'
|
||||||
|
}
|
||||||
|
|
||||||
|
_autostart_manage_info () {
|
||||||
|
mapfile -t autostart_units < <( _autostart_manage_list )
|
||||||
|
_echo_table "${autostart_units[@]}" | column -t -s$'\t'
|
||||||
|
}
|
||||||
|
|
||||||
|
_autostart_manage_enable () {
|
||||||
|
_systemctl "$1" add-wants autostart.target
|
||||||
|
}
|
||||||
|
|
||||||
|
_autostart_manage_disable () {
|
||||||
|
_systemctl "$1" disable
|
||||||
|
}
|
||||||
|
|
||||||
|
_autostart_manage_rm () {
|
||||||
|
rm "$base_dir$(_filename "$1")"
|
||||||
|
}
|
||||||
|
|
||||||
|
case $1 in
|
||||||
|
list) _autostart_manage_list ;;
|
||||||
|
info) _autostart_manage_info ;;
|
||||||
|
add) _autostart_manage_add "$2" "$3" ;;
|
||||||
|
enable) _autostart_manage_enable "$2" ;;
|
||||||
|
disable) _autostart_manage_disable "$2" ;;
|
||||||
|
rm) _autostart_manage_rm "$2" ;;
|
||||||
|
*) echo "'$1' is not valid" ;;
|
||||||
|
esac
|
|
@ -2,7 +2,7 @@
|
||||||
|
|
||||||
_dote_completions()
|
_dote_completions()
|
||||||
{
|
{
|
||||||
if [ "${#COMP_WORDS[@]}" != "2" ]; then
|
if [ "${#COMP_WORDS[@]}" == "1" ]; then
|
||||||
return
|
return
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
@ -13,3 +13,17 @@ _dote_completions()
|
||||||
done < <(compgen -W "$(.e -l)" "${COMP_WORDS[1]}")
|
done < <(compgen -W "$(.e -l)" "${COMP_WORDS[1]}")
|
||||||
}
|
}
|
||||||
complete -F _dote_completions ".e"
|
complete -F _dote_completions ".e"
|
||||||
|
|
||||||
|
_autostart_manage_completions()
|
||||||
|
{
|
||||||
|
if [ "${#COMP_WORDS[@]}" == "2" ]; then
|
||||||
|
return
|
||||||
|
fi
|
||||||
|
|
||||||
|
COMPREPLY=()
|
||||||
|
while IFS='' read -r line
|
||||||
|
do
|
||||||
|
COMPREPLY+=("$line")
|
||||||
|
done < <(compgen -W "$(autostart-manage list)" "${COMP_WORDS[1]}")
|
||||||
|
}
|
||||||
|
complete -F _autostart_manage_completions "autostart-manage"
|
||||||
|
|
5
.config/systemd/user/autostart.target
Normal file
5
.config/systemd/user/autostart.target
Normal file
|
@ -0,0 +1,5 @@
|
||||||
|
[Unit]
|
||||||
|
Description=Current graphical user session
|
||||||
|
Documentation=man:systemd.special(7)
|
||||||
|
RefuseManualStart=no
|
||||||
|
StopWhenUnneeded=no
|
|
@ -29,7 +29,7 @@ _autostart_apps()
|
||||||
_autostart()
|
_autostart()
|
||||||
{
|
{
|
||||||
### wait for audio
|
### wait for audio
|
||||||
start_audio pipewire
|
start-audio pipewire
|
||||||
|
|
||||||
### wait for internet
|
### wait for internet
|
||||||
wait_for_service "network-online.target"
|
wait_for_service "network-online.target"
|
||||||
|
|
Loading…
Reference in a new issue