Add syncing with extra groups

This commit is contained in:
Tobias Reisinger 2024-10-23 22:32:11 +02:00
parent f48b7c8690
commit ab7c74f888
Signed by: serguzim
GPG key ID: 13AD60C237A28DFE
7 changed files with 23 additions and 18 deletions

View file

@ -17,6 +17,6 @@ generate: get-target output-dir completions
docs: generate
BASHLY_SOURCE_DIR=$(TARGET) bashly render :mandoc ./output/man1
deploy: generate docs
install: generate docs
cp -f ./output/$(TARGET) ~/.local/bin/
cp -f ./output/man1/$(TARGET)*.1 ~/.local/share/man/man1/

View file

@ -19,6 +19,10 @@ commands:
help: Get the current status of all programs
- name: sync
help: Remove all programs from autostart and the re-enable all
args:
- name: groups
required: false
help: Extra groups to sync
- name: enable
help: Add a single program to autostart
args:

View file

@ -2,6 +2,5 @@
program=${args[program]:?}
cmd=$(_get_autostart_cmd "$program")
sleep "$(_get_autostart_delay "$program")"
bash -c "$cmd"
bash -c "$(_get_autostart_cmd "$program")"

View file

@ -4,6 +4,6 @@ autostart_units=()
while IFS='' read -r line
do
autostart_units+=("$line")
done < <(_list)
done < <(_list "*")
_echo_table "${autostart_units[@]}" | column -t -s$'\t' --table-columns 'Unit,Enabled?,Active?,Command'

View file

@ -5,16 +5,21 @@ _systemctl () {
}
_query_autostart_toml() {
tomlq -r --arg host "$HOSTNAME" \
groups_json=$(echo -n "$2" | tr "," "\n" | jq -R . | jq -s .)
tomlq -r \
--arg host "$HOSTNAME" \
--argjson extra_groups "$groups_json" \
'.hosts[$host].groups as $groups | .apps | to_entries[] | select(
(.value.hosts | contains([$host])) or
([.value.group] | inside($groups))
([.value.group] | inside($groups)) or
([.value.group] | inside($extra_groups)) or
$extra_groups == ["*"]
) | '"$1" \
"$XDG_CONFIG_HOME/autostart.toml"
}
_list () {
_query_autostart_toml '.value.alias // .key'
_query_autostart_toml '.value.alias // .key' "$1"
}
_autostart_run_graphical () {
@ -41,7 +46,7 @@ _autostart_run_graphical () {
_echo_table () {
for unit in "$@"
do
if _systemctl "$unit" is-enabled --quiet
if [ "$(_systemctl "$unit" is-enabled)" = "enabled" ]
then
_enabled=$(green "enabled")
else
@ -64,9 +69,9 @@ _echo_table () {
}
_get_autostart_cmd () {
_query_autostart_toml 'select((.key == "'"$1"'") or (.value.alias == "'"$1"'")) | .value.command'
_query_autostart_toml 'select((.key == "'"$1"'") or (.value.alias == "'"$1"'")) | .value.command' "*"
}
_get_autostart_delay () {
_query_autostart_toml 'select((.key == "'"$1"'") or (.value.alias == "'"$1"'")) | .value.delay // 0'
_query_autostart_toml 'select((.key == "'"$1"'") or (.value.alias == "'"$1"'")) | .value.delay // 0' "*"
}

View file

@ -1,3 +1,3 @@
#!/usr/bin/env bash
_list
_list "*"

View file

@ -1,14 +1,11 @@
#!/usr/bin/env bash
rm "$HOME/.config/systemd/user/autostart.target.wants/"*
rm -f "$HOME/.config/systemd/user/autostart.target.wants/"*
autostart_units=()
while IFS='' read -r line
do
autostart_units+=("$line")
done < <(_list)
autostart_units+=("autostart@$line.service")
done < <(_list "${args[groups]:-}")
for unit in "${autostart_units[@]}"
do
_systemctl "$unit" add-wants autostart.target
done
systemctl --user add-wants autostart.target "${autostart_units[@]}"