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 docs: generate
BASHLY_SOURCE_DIR=$(TARGET) bashly render :mandoc ./output/man1 BASHLY_SOURCE_DIR=$(TARGET) bashly render :mandoc ./output/man1
deploy: generate docs install: generate docs
cp -f ./output/$(TARGET) ~/.local/bin/ cp -f ./output/$(TARGET) ~/.local/bin/
cp -f ./output/man1/$(TARGET)*.1 ~/.local/share/man/man1/ 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 help: Get the current status of all programs
- name: sync - name: sync
help: Remove all programs from autostart and the re-enable all help: Remove all programs from autostart and the re-enable all
args:
- name: groups
required: false
help: Extra groups to sync
- name: enable - name: enable
help: Add a single program to autostart help: Add a single program to autostart
args: args:

View file

@ -2,6 +2,5 @@
program=${args[program]:?} program=${args[program]:?}
cmd=$(_get_autostart_cmd "$program")
sleep "$(_get_autostart_delay "$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 while IFS='' read -r line
do do
autostart_units+=("$line") autostart_units+=("$line")
done < <(_list) done < <(_list "*")
_echo_table "${autostart_units[@]}" | column -t -s$'\t' --table-columns 'Unit,Enabled?,Active?,Command' _echo_table "${autostart_units[@]}" | column -t -s$'\t' --table-columns 'Unit,Enabled?,Active?,Command'

View file

@ -5,16 +5,21 @@ _systemctl () {
} }
_query_autostart_toml() { _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( '.hosts[$host].groups as $groups | .apps | to_entries[] | select(
(.value.hosts | contains([$host])) or (.value.hosts | contains([$host])) or
([.value.group] | inside($groups)) ([.value.group] | inside($groups)) or
([.value.group] | inside($extra_groups)) or
$extra_groups == ["*"]
) | '"$1" \ ) | '"$1" \
"$XDG_CONFIG_HOME/autostart.toml" "$XDG_CONFIG_HOME/autostart.toml"
} }
_list () { _list () {
_query_autostart_toml '.value.alias // .key' _query_autostart_toml '.value.alias // .key' "$1"
} }
_autostart_run_graphical () { _autostart_run_graphical () {
@ -41,7 +46,7 @@ _autostart_run_graphical () {
_echo_table () { _echo_table () {
for unit in "$@" for unit in "$@"
do do
if _systemctl "$unit" is-enabled --quiet if [ "$(_systemctl "$unit" is-enabled)" = "enabled" ]
then then
_enabled=$(green "enabled") _enabled=$(green "enabled")
else else
@ -64,9 +69,9 @@ _echo_table () {
} }
_get_autostart_cmd () { _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 () { _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 #!/usr/bin/env bash
_list _list "*"

View file

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