#!/usr/bin/env bash # This script was generated by bashly 1.1.10 (https://bashly.dannyb.co) # Modifying it manually is not recommended # :wrapper.bash3_bouncer if [[ "${BASH_VERSINFO:-0}" -lt 4 ]]; then printf "bash version 4 or higher is required\n" >&2 exit 1 fi # :command.master_script # :command.version_command version_command() { echo "$version" } # :command.usage autostart_manage_usage() { if [[ -n $long_usage ]]; then printf "autostart-manage - Manage autostart\n" echo else printf "autostart-manage - Manage autostart\n" echo fi printf "%s\n" "$(blue "Usage:")" printf " autostart-manage COMMAND\n" printf " autostart-manage [COMMAND] --help | -h\n" printf " autostart-manage --version | -v\n" echo # :command.usage_commands printf "%s\n" "$(blue "Commands:")" printf " %s Generate bash completions\n" "$(green "completions")" printf " %s List available programs\n" "$(green "list") " printf " %s Get the current status of all programs\n" "$(green "info") " printf " %s Remove all programs from autostart and the re-enable all\n" "$(green "sync") " printf " %s Add a single program to autostart\n" "$(green "enable") " printf " %s Remove a single program from autostart\n" "$(green "disable") " printf " %s Restart programs from autostart\n" "$(green "restart") " printf " %s Start programs from autostart\n" "$(green "start") " printf " %s Check status of programs from autostart\n" "$(green "status") " printf " %s Stop programs from autostart\n" "$(green "stop") " printf " %s Kill the program from autostart\n" "$(green "kill") " printf " %s Show the log for a single program from autostart\n" "$(green "log") " printf " %s Execute a single program from autostart\n" "$(green "exec") " printf " %s Run all programs\n" "$(green "run") " printf " %s Run all the wayland specific tasks and all programs\n" "$(green "run-wayland")" printf " %s Run all the xorg specific tasks and all programs\n" "$(green "run-xorg") " echo # :command.long_usage if [[ -n $long_usage ]]; then printf "%s\n" "$(blue "Options:")" # :command.usage_fixed_flags printf " %s\n" "$(yellow "--help, -h")" printf " Show this help\n" echo printf " %s\n" "$(yellow "--version, -v")" printf " Show version number\n" echo # :command.usage_environment_variables printf "%s\n" "$(blue "Environment Variables:")" # :environment_variable.usage printf " %s\n" "$(cyan "HOSTNAME")" printf " The hostname to use. We will try to get the value automatically.\n" echo fi } # :command.usage autostart_manage_completions_usage() { if [[ -n $long_usage ]]; then printf "autostart-manage completions - Generate bash completions\n" echo else printf "autostart-manage completions - Generate bash completions\n" echo fi printf "%s\n" "$(blue "Usage:")" printf " autostart-manage completions\n" printf " autostart-manage completions --help | -h\n" echo # :command.long_usage if [[ -n $long_usage ]]; then printf "%s\n" "$(blue "Options:")" # :command.usage_fixed_flags printf " %s\n" "$(yellow "--help, -h")" printf " Show this help\n" echo fi } # :command.usage autostart_manage_list_usage() { if [[ -n $long_usage ]]; then printf "autostart-manage list - List available programs\n" echo else printf "autostart-manage list - List available programs\n" echo fi printf "%s\n" "$(blue "Usage:")" printf " autostart-manage list\n" printf " autostart-manage list --help | -h\n" echo # :command.long_usage if [[ -n $long_usage ]]; then printf "%s\n" "$(blue "Options:")" # :command.usage_fixed_flags printf " %s\n" "$(yellow "--help, -h")" printf " Show this help\n" echo fi } # :command.usage autostart_manage_info_usage() { if [[ -n $long_usage ]]; then printf "autostart-manage info - Get the current status of all programs\n" echo else printf "autostart-manage info - Get the current status of all programs\n" echo fi printf "%s\n" "$(blue "Usage:")" printf " autostart-manage info\n" printf " autostart-manage info --help | -h\n" echo # :command.long_usage if [[ -n $long_usage ]]; then printf "%s\n" "$(blue "Options:")" # :command.usage_fixed_flags printf " %s\n" "$(yellow "--help, -h")" printf " Show this help\n" echo fi } # :command.usage autostart_manage_sync_usage() { if [[ -n $long_usage ]]; then printf "autostart-manage sync - Remove all programs from autostart and the re-enable all\n" echo else printf "autostart-manage sync - Remove all programs from autostart and the re-enable all\n" echo fi printf "%s\n" "$(blue "Usage:")" printf " autostart-manage sync [GROUPS]\n" printf " autostart-manage sync --help | -h\n" echo # :command.long_usage if [[ -n $long_usage ]]; then printf "%s\n" "$(blue "Options:")" # :command.usage_fixed_flags printf " %s\n" "$(yellow "--help, -h")" printf " Show this help\n" echo # :command.usage_args printf "%s\n" "$(blue "Arguments:")" # :argument.usage printf " %s\n" "$(red "GROUPS")" printf " Extra groups to sync\n" echo fi } # :command.usage autostart_manage_enable_usage() { if [[ -n $long_usage ]]; then printf "autostart-manage enable - Add a single program to autostart\n" echo else printf "autostart-manage enable - Add a single program to autostart\n" echo fi printf "%s\n" "$(blue "Usage:")" printf " autostart-manage enable PROGRAM\n" printf " autostart-manage enable --help | -h\n" echo # :command.long_usage if [[ -n $long_usage ]]; then printf "%s\n" "$(blue "Options:")" # :command.usage_fixed_flags printf " %s\n" "$(yellow "--help, -h")" printf " Show this help\n" echo # :command.usage_args printf "%s\n" "$(blue "Arguments:")" # :argument.usage printf " %s\n" "$(red "PROGRAM")" printf " Program to add to autostart\n" echo fi } # :command.usage autostart_manage_disable_usage() { if [[ -n $long_usage ]]; then printf "autostart-manage disable - Remove a single program from autostart\n" echo else printf "autostart-manage disable - Remove a single program from autostart\n" echo fi printf "%s\n" "$(blue "Usage:")" printf " autostart-manage disable PROGRAM\n" printf " autostart-manage disable --help | -h\n" echo # :command.long_usage if [[ -n $long_usage ]]; then printf "%s\n" "$(blue "Options:")" # :command.usage_fixed_flags printf " %s\n" "$(yellow "--help, -h")" printf " Show this help\n" echo # :command.usage_args printf "%s\n" "$(blue "Arguments:")" # :argument.usage printf " %s\n" "$(red "PROGRAM")" printf " Program to add to autostart\n" echo fi } # :command.usage autostart_manage_restart_usage() { if [[ -n $long_usage ]]; then printf "autostart-manage restart - Restart programs from autostart\n" echo else printf "autostart-manage restart - Restart programs from autostart\n" echo fi printf "%s\n" "$(blue "Usage:")" printf " autostart-manage restart [PROGRAM]\n" printf " autostart-manage restart --help | -h\n" echo # :command.long_usage if [[ -n $long_usage ]]; then printf "%s\n" "$(blue "Options:")" # :command.usage_fixed_flags printf " %s\n" "$(yellow "--help, -h")" printf " Show this help\n" echo # :command.usage_args printf "%s\n" "$(blue "Arguments:")" # :argument.usage printf " %s\n" "$(red "PROGRAM")" printf " Program to add to autostart\n" printf " Default: *\n" echo fi } # :command.usage autostart_manage_start_usage() { if [[ -n $long_usage ]]; then printf "autostart-manage start - Start programs from autostart\n" echo else printf "autostart-manage start - Start programs from autostart\n" echo fi printf "%s\n" "$(blue "Usage:")" printf " autostart-manage start [PROGRAM]\n" printf " autostart-manage start --help | -h\n" echo # :command.long_usage if [[ -n $long_usage ]]; then printf "%s\n" "$(blue "Options:")" # :command.usage_fixed_flags printf " %s\n" "$(yellow "--help, -h")" printf " Show this help\n" echo # :command.usage_args printf "%s\n" "$(blue "Arguments:")" # :argument.usage printf " %s\n" "$(red "PROGRAM")" printf " Program to start to autostart\n" printf " Default: *\n" echo fi } # :command.usage autostart_manage_status_usage() { if [[ -n $long_usage ]]; then printf "autostart-manage status - Check status of programs from autostart\n" echo else printf "autostart-manage status - Check status of programs from autostart\n" echo fi printf "%s\n" "$(blue "Usage:")" printf " autostart-manage status [PROGRAM]\n" printf " autostart-manage status --help | -h\n" echo # :command.long_usage if [[ -n $long_usage ]]; then printf "%s\n" "$(blue "Options:")" # :command.usage_fixed_flags printf " %s\n" "$(yellow "--help, -h")" printf " Show this help\n" echo # :command.usage_args printf "%s\n" "$(blue "Arguments:")" # :argument.usage printf " %s\n" "$(red "PROGRAM")" printf " Program to check status on\n" printf " Default: *\n" echo fi } # :command.usage autostart_manage_stop_usage() { if [[ -n $long_usage ]]; then printf "autostart-manage stop - Stop programs from autostart\n" echo else printf "autostart-manage stop - Stop programs from autostart\n" echo fi printf "%s\n" "$(blue "Usage:")" printf " autostart-manage stop [PROGRAM]\n" printf " autostart-manage stop --help | -h\n" echo # :command.long_usage if [[ -n $long_usage ]]; then printf "%s\n" "$(blue "Options:")" # :command.usage_fixed_flags printf " %s\n" "$(yellow "--help, -h")" printf " Show this help\n" echo # :command.usage_args printf "%s\n" "$(blue "Arguments:")" # :argument.usage printf " %s\n" "$(red "PROGRAM")" printf " Program to stop\n" printf " Default: *\n" echo fi } # :command.usage autostart_manage_kill_usage() { if [[ -n $long_usage ]]; then printf "autostart-manage kill - Kill the program from autostart\n" echo else printf "autostart-manage kill - Kill the program from autostart\n" echo fi printf "%s\n" "$(blue "Usage:")" printf " autostart-manage kill PROGRAM\n" printf " autostart-manage kill --help | -h\n" echo # :command.long_usage if [[ -n $long_usage ]]; then printf "%s\n" "$(blue "Options:")" # :command.usage_fixed_flags printf " %s\n" "$(yellow "--help, -h")" printf " Show this help\n" echo # :command.usage_args printf "%s\n" "$(blue "Arguments:")" # :argument.usage printf " %s\n" "$(red "PROGRAM")" printf " Program to kill\n" echo fi } # :command.usage autostart_manage_log_usage() { if [[ -n $long_usage ]]; then printf "autostart-manage log - Show the log for a single program from autostart\n" echo else printf "autostart-manage log - Show the log for a single program from autostart\n" echo fi printf "Alias: logs\n" echo printf "%s\n" "$(blue "Usage:")" printf " autostart-manage log PROGRAM\n" printf " autostart-manage log --help | -h\n" echo # :command.long_usage if [[ -n $long_usage ]]; then printf "%s\n" "$(blue "Options:")" # :command.usage_fixed_flags printf " %s\n" "$(yellow "--help, -h")" printf " Show this help\n" echo # :command.usage_args printf "%s\n" "$(blue "Arguments:")" # :argument.usage printf " %s\n" "$(red "PROGRAM")" printf " Program to log\n" echo fi } # :command.usage autostart_manage_exec_usage() { if [[ -n $long_usage ]]; then printf "autostart-manage exec - Execute a single program from autostart\n" echo else printf "autostart-manage exec - Execute a single program from autostart\n" echo fi printf "%s\n" "$(blue "Usage:")" printf " autostart-manage exec PROGRAM\n" printf " autostart-manage exec --help | -h\n" echo # :command.long_usage if [[ -n $long_usage ]]; then printf "%s\n" "$(blue "Options:")" # :command.usage_fixed_flags printf " %s\n" "$(yellow "--help, -h")" printf " Show this help\n" echo # :command.usage_args printf "%s\n" "$(blue "Arguments:")" # :argument.usage printf " %s\n" "$(red "PROGRAM")" printf " Program to execute\n" echo fi } # :command.usage autostart_manage_run_usage() { if [[ -n $long_usage ]]; then printf "autostart-manage run - Run all programs\n" echo else printf "autostart-manage run - Run all programs\n" echo fi printf "%s\n" "$(blue "Usage:")" printf " autostart-manage run\n" printf " autostart-manage run --help | -h\n" echo # :command.long_usage if [[ -n $long_usage ]]; then printf "%s\n" "$(blue "Options:")" # :command.usage_fixed_flags printf " %s\n" "$(yellow "--help, -h")" printf " Show this help\n" echo fi } # :command.usage autostart_manage_run_wayland_usage() { if [[ -n $long_usage ]]; then printf "autostart-manage run-wayland - Run all the wayland specific tasks and all programs\n" echo else printf "autostart-manage run-wayland - Run all the wayland specific tasks and all programs\n" echo fi printf "%s\n" "$(blue "Usage:")" printf " autostart-manage run-wayland\n" printf " autostart-manage run-wayland --help | -h\n" echo # :command.long_usage if [[ -n $long_usage ]]; then printf "%s\n" "$(blue "Options:")" # :command.usage_fixed_flags printf " %s\n" "$(yellow "--help, -h")" printf " Show this help\n" echo fi } # :command.usage autostart_manage_run_xorg_usage() { if [[ -n $long_usage ]]; then printf "autostart-manage run-xorg - Run all the xorg specific tasks and all programs\n" echo else printf "autostart-manage run-xorg - Run all the xorg specific tasks and all programs\n" echo fi printf "%s\n" "$(blue "Usage:")" printf " autostart-manage run-xorg\n" printf " autostart-manage run-xorg --help | -h\n" echo # :command.long_usage if [[ -n $long_usage ]]; then printf "%s\n" "$(blue "Options:")" # :command.usage_fixed_flags printf " %s\n" "$(yellow "--help, -h")" printf " Show this help\n" echo fi } # :command.normalize_input # :command.normalize_input_function normalize_input() { local arg flags passthru passthru=false while [[ $# -gt 0 ]]; do arg="$1" if [[ $passthru == true ]]; then input+=("$arg") elif [[ $arg =~ ^(--[a-zA-Z0-9_\-]+)=(.+)$ ]]; then input+=("${BASH_REMATCH[1]}") input+=("${BASH_REMATCH[2]}") elif [[ $arg =~ ^(-[a-zA-Z0-9])=(.+)$ ]]; then input+=("${BASH_REMATCH[1]}") input+=("${BASH_REMATCH[2]}") elif [[ $arg =~ ^-([a-zA-Z0-9][a-zA-Z0-9]+)$ ]]; then flags="${BASH_REMATCH[1]}" for ((i = 0; i < ${#flags}; i++)); do input+=("-${flags:i:1}") done elif [[ "$arg" == "--" ]]; then passthru=true input+=("$arg") else input+=("$arg") fi shift done } # :command.inspect_args inspect_args() { if ((${#args[@]})); then readarray -t sorted_keys < <(printf '%s\n' "${!args[@]}" | sort) echo args: for k in "${sorted_keys[@]}"; do echo "- \${args[$k]} = ${args[$k]}" done else echo args: none fi if ((${#other_args[@]})); then echo echo other_args: echo "- \${other_args[*]} = ${other_args[*]}" for i in "${!other_args[@]}"; do echo "- \${other_args[$i]} = ${other_args[$i]}" done fi if ((${#deps[@]})); then readarray -t sorted_keys < <(printf '%s\n' "${!deps[@]}" | sort) echo echo deps: for k in "${sorted_keys[@]}"; do echo "- \${deps[$k]} = ${deps[$k]}" done fi if ((${#env_var_names[@]})); then readarray -t sorted_names < <(printf '%s\n' "${env_var_names[@]}" | sort) echo echo "environment variables:" for k in "${sorted_names[@]}"; do echo "- \$$k = ${!k:-}" done fi } # :command.user_lib # autostart-manage/lib/colors.sh print_in_color() { local color="$1" shift if [[ -z ${NO_COLOR+x} ]]; then printf "$color%b\e[0m\n" "$*" else printf "%b\n" "$*" fi } red() { print_in_color "\e[31m" "$*"; } green() { print_in_color "\e[32m" "$*"; } yellow() { print_in_color "\e[33m" "$*"; } blue() { print_in_color "\e[34m" "$*"; } magenta() { print_in_color "\e[35m" "$*"; } cyan() { print_in_color "\e[36m" "$*"; } bold() { print_in_color "\e[1m" "$*"; } underlined() { print_in_color "\e[4m" "$*"; } red_bold() { print_in_color "\e[1;31m" "$*"; } green_bold() { print_in_color "\e[1;32m" "$*"; } yellow_bold() { print_in_color "\e[1;33m" "$*"; } blue_bold() { print_in_color "\e[1;34m" "$*"; } magenta_bold() { print_in_color "\e[1;35m" "$*"; } cyan_bold() { print_in_color "\e[1;36m" "$*"; } red_underlined() { print_in_color "\e[4;31m" "$*"; } green_underlined() { print_in_color "\e[4;32m" "$*"; } yellow_underlined() { print_in_color "\e[4;33m" "$*"; } blue_underlined() { print_in_color "\e[4;34m" "$*"; } magenta_underlined() { print_in_color "\e[4;35m" "$*"; } cyan_underlined() { print_in_color "\e[4;36m" "$*"; } # autostart-manage/lib/common.sh #!/usr/bin/env bash _systemctl () { systemctl --user "${@:2}" "autostart@$1.service" } _query_autostart_toml() { 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)) or ([.value.group] | inside($extra_groups)) or $extra_groups == ["*"] ) | '"$1" \ "$XDG_CONFIG_HOME/autostart.toml" } _list () { _query_autostart_toml '.value.alias // .key' "$1" } _autostart_run_graphical () { set +e pass x # Try to unlock yubikey asap start-audio pipewire wait-for-service "network-online.target" # Execute only if not already running # Don't match keepassxc-proxy if ! (pgrep -l keepassxc | grep -v prox) >/dev/null then if pass x then (pass keepass | head -n 1 | keepassxc --pw-stdin ~/sync/passwords.kdbx) & fi fi autoinstall run graphical autostart-manage run } _echo_table () { for unit in "$@" do if [ "$(_systemctl "$unit" is-enabled)" = "enabled" ] then _enabled=$(green "enabled") else _enabled=$(red "disabled") fi if _systemctl "$unit" is-active --quiet then _active=$(green "active") else _active=$(red "inactive") fi printf "%s\t%s\t%s\t%s\n" \ "$unit" \ "$_enabled" \ "$_active" \ "$(_get_autostart_cmd "$unit")" done } _get_autostart_cmd () { _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' "*" } # autostart-manage/lib/send_completions.sh send_completions() { echo $'# autostart-manage completion -*- shell-script -*-' echo $'' echo $'# This bash completions script was generated by' echo $'# completely (https://github.com/dannyben/completely)' echo $'# Modifying it manually is not recommended' echo $'' echo $'_autostart-manage_completions_filter() {' echo $' local words="$1"' echo $' local cur=${COMP_WORDS[COMP_CWORD]}' echo $' local result=()' echo $'' echo $' if [[ "${cur:0:1}" == "-" ]]; then' echo $' echo "$words"' echo $' ' echo $' else' echo $' for word in $words; do' echo $' [[ "${word:0:1}" != "-" ]] && result+=("$word")' echo $' done' echo $'' echo $' echo "${result[*]}"' echo $'' echo $' fi' echo $'}' echo $'' echo $'_autostart-manage_completions() {' echo $' local cur=${COMP_WORDS[COMP_CWORD]}' echo $' local compwords=("${COMP_WORDS[@]:1:$COMP_CWORD-1}")' echo $' local compline="${compwords[*]}"' echo $'' echo $' case "$compline" in' echo $' \'completions\'*)' echo $' while read -r; do COMPREPLY+=( "$REPLY" ); done < <( compgen -W "$(_autostart-manage_completions_filter "--help -h")" -- "$cur" )' echo $' ;;' echo $'' echo $' \'run-wayland\'*)' echo $' while read -r; do COMPREPLY+=( "$REPLY" ); done < <( compgen -W "$(_autostart-manage_completions_filter "--help -h")" -- "$cur" )' echo $' ;;' echo $'' echo $' \'run-xorg\'*)' echo $' while read -r; do COMPREPLY+=( "$REPLY" ); done < <( compgen -W "$(_autostart-manage_completions_filter "--help -h")" -- "$cur" )' echo $' ;;' echo $'' echo $' \'restart\'*)' echo $' while read -r; do COMPREPLY+=( "$REPLY" ); done < <( compgen -W "$(_autostart-manage_completions_filter "$(autostart-manage list) --help -h")" -- "$cur" )' echo $' ;;' echo $'' echo $' \'disable\'*)' echo $' while read -r; do COMPREPLY+=( "$REPLY" ); done < <( compgen -W "$(_autostart-manage_completions_filter "$(autostart-manage list) --help -h")" -- "$cur" )' echo $' ;;' echo $'' echo $' \'status\'*)' echo $' while read -r; do COMPREPLY+=( "$REPLY" ); done < <( compgen -W "$(_autostart-manage_completions_filter "$(autostart-manage list) --help -h")" -- "$cur" )' echo $' ;;' echo $'' echo $' \'enable\'*)' echo $' while read -r; do COMPREPLY+=( "$REPLY" ); done < <( compgen -W "$(_autostart-manage_completions_filter "$(autostart-manage list) --help -h")" -- "$cur" )' echo $' ;;' echo $'' echo $' \'start\'*)' echo $' while read -r; do COMPREPLY+=( "$REPLY" ); done < <( compgen -W "$(_autostart-manage_completions_filter "$(autostart-manage list) --help -h")" -- "$cur" )' echo $' ;;' echo $'' echo $' \'sync\'*)' echo $' while read -r; do COMPREPLY+=( "$REPLY" ); done < <( compgen -W "$(_autostart-manage_completions_filter "--help -h")" -- "$cur" )' echo $' ;;' echo $'' echo $' \'info\'*)' echo $' while read -r; do COMPREPLY+=( "$REPLY" ); done < <( compgen -W "$(_autostart-manage_completions_filter "--help -h")" -- "$cur" )' echo $' ;;' echo $'' echo $' \'stop\'*)' echo $' while read -r; do COMPREPLY+=( "$REPLY" ); done < <( compgen -W "$(_autostart-manage_completions_filter "$(autostart-manage list) --help -h")" -- "$cur" )' echo $' ;;' echo $'' echo $' \'kill\'*)' echo $' while read -r; do COMPREPLY+=( "$REPLY" ); done < <( compgen -W "$(_autostart-manage_completions_filter "$(autostart-manage list) --help -h")" -- "$cur" )' echo $' ;;' echo $'' echo $' \'logs\'*)' echo $' while read -r; do COMPREPLY+=( "$REPLY" ); done < <( compgen -W "$(_autostart-manage_completions_filter "$(autostart-manage list) --help -h")" -- "$cur" )' echo $' ;;' echo $'' echo $' \'exec\'*)' echo $' while read -r; do COMPREPLY+=( "$REPLY" ); done < <( compgen -W "$(_autostart-manage_completions_filter "$(autostart-manage list) --help -h")" -- "$cur" )' echo $' ;;' echo $'' echo $' \'list\'*)' echo $' while read -r; do COMPREPLY+=( "$REPLY" ); done < <( compgen -W "$(_autostart-manage_completions_filter "--help -h")" -- "$cur" )' echo $' ;;' echo $'' echo $' \'log\'*)' echo $' while read -r; do COMPREPLY+=( "$REPLY" ); done < <( compgen -W "$(_autostart-manage_completions_filter "$(autostart-manage list) --help -h")" -- "$cur" )' echo $' ;;' echo $'' echo $' \'run\'*)' echo $' while read -r; do COMPREPLY+=( "$REPLY" ); done < <( compgen -W "$(_autostart-manage_completions_filter "--help -h")" -- "$cur" )' echo $' ;;' echo $'' echo $' *)' echo $' while read -r; do COMPREPLY+=( "$REPLY" ); done < <( compgen -W "$(_autostart-manage_completions_filter "--help --version -h -v completions disable enable exec info kill list log logs restart run run-wayland run-xorg start status stop sync")" -- "$cur" )' echo $' ;;' echo $'' echo $' esac' echo $'} &&' echo $'complete -F _autostart-manage_completions autostart-manage' echo $'' echo $'# ex: filetype=sh' } # autostart-manage/lib/systemd_files.sh #!/usr/bin/env bash _deploy_service_file() { cat < "$1" [Unit] Description=Autostart several tools and services StartLimitIntervalSec=120 StartLimitBurst=10 [Service] KillMode=process ExecStart=/bin/sh -c ". \$HOME/.profile && autostart-manage exec '%i'" Restart=on-failure RestartSec=5s EOF } _deploy_target_file() { cat < "$1" [Unit] Description=Current graphical user session Documentation=man:systemd.special(7) RefuseManualStart=no StopWhenUnneeded=no EOF } # :command.command_functions # :command.function autostart_manage_completions_command() { # autostart-manage/completions_command.sh #!/usr/bin/env bash send_completions } # :command.function autostart_manage_list_command() { # autostart-manage/list_command.sh #!/usr/bin/env bash _list "*" } # :command.function autostart_manage_info_command() { # autostart-manage/info_command.sh #!/usr/bin/env bash autostart_units=() while IFS='' read -r line do autostart_units+=("$line") done < <(_list "*") _echo_table "${autostart_units[@]}" | column -t -s$'\t' --table-columns 'Unit,Enabled?,Active?,Command' } # :command.function autostart_manage_sync_command() { # autostart-manage/sync_command.sh #!/usr/bin/env bash rm -f "$HOME/.config/systemd/user/autostart.target.wants/"* autostart_units=() while IFS='' read -r line do autostart_units+=("autostart@$line.service") done < <(_list "${args[groups]:-}") systemctl --user add-wants autostart.target "${autostart_units[@]}" } # :command.function autostart_manage_enable_command() { # autostart-manage/systemctl.sh #!/usr/bin/env bash systemctl_args=("$action") if [[ $action == "enable" ]]; then systemctl_args=("add-wants" "autostart.target") fi #shellcheck disable=SC2068 _systemctl "${args[program]:?}" "${systemctl_args[@]}" } # :command.function autostart_manage_disable_command() { # autostart-manage/systemctl.sh #!/usr/bin/env bash systemctl_args=("$action") if [[ $action == "enable" ]]; then systemctl_args=("add-wants" "autostart.target") fi #shellcheck disable=SC2068 _systemctl "${args[program]:?}" "${systemctl_args[@]}" } # :command.function autostart_manage_restart_command() { # autostart-manage/systemctl.sh #!/usr/bin/env bash systemctl_args=("$action") if [[ $action == "enable" ]]; then systemctl_args=("add-wants" "autostart.target") fi #shellcheck disable=SC2068 _systemctl "${args[program]:?}" "${systemctl_args[@]}" } # :command.function autostart_manage_start_command() { # autostart-manage/systemctl.sh #!/usr/bin/env bash systemctl_args=("$action") if [[ $action == "enable" ]]; then systemctl_args=("add-wants" "autostart.target") fi #shellcheck disable=SC2068 _systemctl "${args[program]:?}" "${systemctl_args[@]}" } # :command.function autostart_manage_status_command() { # autostart-manage/systemctl.sh #!/usr/bin/env bash systemctl_args=("$action") if [[ $action == "enable" ]]; then systemctl_args=("add-wants" "autostart.target") fi #shellcheck disable=SC2068 _systemctl "${args[program]:?}" "${systemctl_args[@]}" } # :command.function autostart_manage_stop_command() { # autostart-manage/systemctl.sh #!/usr/bin/env bash systemctl_args=("$action") if [[ $action == "enable" ]]; then systemctl_args=("add-wants" "autostart.target") fi #shellcheck disable=SC2068 _systemctl "${args[program]:?}" "${systemctl_args[@]}" } # :command.function autostart_manage_kill_command() { # autostart-manage/systemctl.sh #!/usr/bin/env bash systemctl_args=("$action") if [[ $action == "enable" ]]; then systemctl_args=("add-wants" "autostart.target") fi #shellcheck disable=SC2068 _systemctl "${args[program]:?}" "${systemctl_args[@]}" } # :command.function autostart_manage_log_command() { # autostart-manage/log_command.sh #!/usr/bin/env bash journalctl --user -fu "autostart@${args[program]:?}.service" } # :command.function autostart_manage_exec_command() { # autostart-manage/exec_command.sh #!/usr/bin/env bash program=${args[program]:?} sleep "$(_get_autostart_delay "$program")" bash -c "$(_get_autostart_cmd "$program")" } # :command.function autostart_manage_run_command() { # autostart-manage/run_command.sh #!/usr/bin/env bash systemctl --user start autostart.target } # :command.function autostart_manage_run_wayland_command() { # autostart-manage/run_wayland_command.sh #!/usr/bin/env bash _autostart_run_graphical killall -SIGUSR2 waybar } # :command.function autostart_manage_run_xorg_command() { # autostart-manage/run_xorg_command.sh #!/usr/bin/env bash feh --bg-fill "$XDG_PICTURES_DIR/wallpaper/active_wallpaper" "$HOME/.config/polybar/launch.sh" & "$HOME/.config/bspwm/focus-voip.py" & numlockx on xsetroot -cursor_name left_ptr xrdb "$HOME/.Xresources" _autostart_run_graphical } # :command.parse_requirements parse_requirements() { # :command.fixed_flags_filter while [[ $# -gt 0 ]]; do case "${1:-}" in --version | -v) version_command exit ;; --help | -h) long_usage=yes autostart_manage_usage exit ;; *) break ;; esac done # :command.environment_variables_filter env_var_names+=("HOSTNAME") # :command.dependencies_filter if command -v tomlq >/dev/null 2>&1; then deps['tomlq']="$(command -v tomlq | head -n1)" else printf "missing dependency: tomlq\n" >&2 printf "%s\n" "please install yq (https://github.com/kislyuk/yq)" >&2 exit 1 fi # :command.command_filter action=${1:-} case $action in -*) ;; completions) action="completions" shift autostart_manage_completions_parse_requirements "$@" shift $# ;; list) action="list" shift autostart_manage_list_parse_requirements "$@" shift $# ;; info) action="info" shift autostart_manage_info_parse_requirements "$@" shift $# ;; sync) action="sync" shift autostart_manage_sync_parse_requirements "$@" shift $# ;; enable) action="enable" shift autostart_manage_enable_parse_requirements "$@" shift $# ;; disable) action="disable" shift autostart_manage_disable_parse_requirements "$@" shift $# ;; restart) action="restart" shift autostart_manage_restart_parse_requirements "$@" shift $# ;; start) action="start" shift autostart_manage_start_parse_requirements "$@" shift $# ;; status) action="status" shift autostart_manage_status_parse_requirements "$@" shift $# ;; stop) action="stop" shift autostart_manage_stop_parse_requirements "$@" shift $# ;; kill) action="kill" shift autostart_manage_kill_parse_requirements "$@" shift $# ;; log | logs) action="log" shift autostart_manage_log_parse_requirements "$@" shift $# ;; exec) action="exec" shift autostart_manage_exec_parse_requirements "$@" shift $# ;; run) action="run" shift autostart_manage_run_parse_requirements "$@" shift $# ;; run-wayland) action="run-wayland" shift autostart_manage_run_wayland_parse_requirements "$@" shift $# ;; run-xorg) action="run-xorg" shift autostart_manage_run_xorg_parse_requirements "$@" shift $# ;; # :command.command_fallback "") autostart_manage_usage >&2 exit 1 ;; *) printf "invalid command: %s\n" "$action" >&2 exit 1 ;; esac # :command.parse_requirements_while while [[ $# -gt 0 ]]; do key="$1" case "$key" in -?*) printf "invalid option: %s\n" "$key" >&2 exit 1 ;; *) # :command.parse_requirements_case # :command.parse_requirements_case_simple printf "invalid argument: %s\n" "$key" >&2 exit 1 ;; esac done } # :command.parse_requirements autostart_manage_completions_parse_requirements() { # :command.fixed_flags_filter while [[ $# -gt 0 ]]; do case "${1:-}" in --help | -h) long_usage=yes autostart_manage_completions_usage exit ;; *) break ;; esac done # :command.command_filter action="completions" # :command.parse_requirements_while while [[ $# -gt 0 ]]; do key="$1" case "$key" in -?*) printf "invalid option: %s\n" "$key" >&2 exit 1 ;; *) # :command.parse_requirements_case # :command.parse_requirements_case_simple printf "invalid argument: %s\n" "$key" >&2 exit 1 ;; esac done } # :command.parse_requirements autostart_manage_list_parse_requirements() { # :command.fixed_flags_filter while [[ $# -gt 0 ]]; do case "${1:-}" in --help | -h) long_usage=yes autostart_manage_list_usage exit ;; *) break ;; esac done # :command.command_filter action="list" # :command.parse_requirements_while while [[ $# -gt 0 ]]; do key="$1" case "$key" in -?*) printf "invalid option: %s\n" "$key" >&2 exit 1 ;; *) # :command.parse_requirements_case # :command.parse_requirements_case_simple printf "invalid argument: %s\n" "$key" >&2 exit 1 ;; esac done } # :command.parse_requirements autostart_manage_info_parse_requirements() { # :command.fixed_flags_filter while [[ $# -gt 0 ]]; do case "${1:-}" in --help | -h) long_usage=yes autostart_manage_info_usage exit ;; *) break ;; esac done # :command.command_filter action="info" # :command.parse_requirements_while while [[ $# -gt 0 ]]; do key="$1" case "$key" in -?*) printf "invalid option: %s\n" "$key" >&2 exit 1 ;; *) # :command.parse_requirements_case # :command.parse_requirements_case_simple printf "invalid argument: %s\n" "$key" >&2 exit 1 ;; esac done } # :command.parse_requirements autostart_manage_sync_parse_requirements() { # :command.fixed_flags_filter while [[ $# -gt 0 ]]; do case "${1:-}" in --help | -h) long_usage=yes autostart_manage_sync_usage exit ;; *) break ;; esac done # :command.command_filter action="sync" # :command.parse_requirements_while while [[ $# -gt 0 ]]; do key="$1" case "$key" in -?*) printf "invalid option: %s\n" "$key" >&2 exit 1 ;; *) # :command.parse_requirements_case # :command.parse_requirements_case_simple # :argument.case if [[ -z ${args['groups']+x} ]]; then args['groups']=$1 shift else printf "invalid argument: %s\n" "$key" >&2 exit 1 fi ;; esac done } # :command.parse_requirements autostart_manage_enable_parse_requirements() { # :command.fixed_flags_filter while [[ $# -gt 0 ]]; do case "${1:-}" in --help | -h) long_usage=yes autostart_manage_enable_usage exit ;; *) break ;; esac done # :command.command_filter action="enable" # :command.parse_requirements_while while [[ $# -gt 0 ]]; do key="$1" case "$key" in -?*) printf "invalid option: %s\n" "$key" >&2 exit 1 ;; *) # :command.parse_requirements_case # :command.parse_requirements_case_simple # :argument.case if [[ -z ${args['program']+x} ]]; then args['program']=$1 shift else printf "invalid argument: %s\n" "$key" >&2 exit 1 fi ;; esac done # :command.required_args_filter if [[ -z ${args['program']+x} ]]; then printf "missing required argument: PROGRAM\nusage: autostart-manage enable PROGRAM\n" >&2 exit 1 fi } # :command.parse_requirements autostart_manage_disable_parse_requirements() { # :command.fixed_flags_filter while [[ $# -gt 0 ]]; do case "${1:-}" in --help | -h) long_usage=yes autostart_manage_disable_usage exit ;; *) break ;; esac done # :command.command_filter action="disable" # :command.parse_requirements_while while [[ $# -gt 0 ]]; do key="$1" case "$key" in -?*) printf "invalid option: %s\n" "$key" >&2 exit 1 ;; *) # :command.parse_requirements_case # :command.parse_requirements_case_simple # :argument.case if [[ -z ${args['program']+x} ]]; then args['program']=$1 shift else printf "invalid argument: %s\n" "$key" >&2 exit 1 fi ;; esac done # :command.required_args_filter if [[ -z ${args['program']+x} ]]; then printf "missing required argument: PROGRAM\nusage: autostart-manage disable PROGRAM\n" >&2 exit 1 fi } # :command.parse_requirements autostart_manage_restart_parse_requirements() { # :command.fixed_flags_filter while [[ $# -gt 0 ]]; do case "${1:-}" in --help | -h) long_usage=yes autostart_manage_restart_usage exit ;; *) break ;; esac done # :command.command_filter action="restart" # :command.parse_requirements_while while [[ $# -gt 0 ]]; do key="$1" case "$key" in -?*) printf "invalid option: %s\n" "$key" >&2 exit 1 ;; *) # :command.parse_requirements_case # :command.parse_requirements_case_simple # :argument.case if [[ -z ${args['program']+x} ]]; then args['program']=$1 shift else printf "invalid argument: %s\n" "$key" >&2 exit 1 fi ;; esac done # :command.default_assignments [[ -n ${args['program']:-} ]] || args['program']="*" } # :command.parse_requirements autostart_manage_start_parse_requirements() { # :command.fixed_flags_filter while [[ $# -gt 0 ]]; do case "${1:-}" in --help | -h) long_usage=yes autostart_manage_start_usage exit ;; *) break ;; esac done # :command.command_filter action="start" # :command.parse_requirements_while while [[ $# -gt 0 ]]; do key="$1" case "$key" in -?*) printf "invalid option: %s\n" "$key" >&2 exit 1 ;; *) # :command.parse_requirements_case # :command.parse_requirements_case_simple # :argument.case if [[ -z ${args['program']+x} ]]; then args['program']=$1 shift else printf "invalid argument: %s\n" "$key" >&2 exit 1 fi ;; esac done # :command.default_assignments [[ -n ${args['program']:-} ]] || args['program']="*" } # :command.parse_requirements autostart_manage_status_parse_requirements() { # :command.fixed_flags_filter while [[ $# -gt 0 ]]; do case "${1:-}" in --help | -h) long_usage=yes autostart_manage_status_usage exit ;; *) break ;; esac done # :command.command_filter action="status" # :command.parse_requirements_while while [[ $# -gt 0 ]]; do key="$1" case "$key" in -?*) printf "invalid option: %s\n" "$key" >&2 exit 1 ;; *) # :command.parse_requirements_case # :command.parse_requirements_case_simple # :argument.case if [[ -z ${args['program']+x} ]]; then args['program']=$1 shift else printf "invalid argument: %s\n" "$key" >&2 exit 1 fi ;; esac done # :command.default_assignments [[ -n ${args['program']:-} ]] || args['program']="*" } # :command.parse_requirements autostart_manage_stop_parse_requirements() { # :command.fixed_flags_filter while [[ $# -gt 0 ]]; do case "${1:-}" in --help | -h) long_usage=yes autostart_manage_stop_usage exit ;; *) break ;; esac done # :command.command_filter action="stop" # :command.parse_requirements_while while [[ $# -gt 0 ]]; do key="$1" case "$key" in -?*) printf "invalid option: %s\n" "$key" >&2 exit 1 ;; *) # :command.parse_requirements_case # :command.parse_requirements_case_simple # :argument.case if [[ -z ${args['program']+x} ]]; then args['program']=$1 shift else printf "invalid argument: %s\n" "$key" >&2 exit 1 fi ;; esac done # :command.default_assignments [[ -n ${args['program']:-} ]] || args['program']="*" } # :command.parse_requirements autostart_manage_kill_parse_requirements() { # :command.fixed_flags_filter while [[ $# -gt 0 ]]; do case "${1:-}" in --help | -h) long_usage=yes autostart_manage_kill_usage exit ;; *) break ;; esac done # :command.command_filter action="kill" # :command.parse_requirements_while while [[ $# -gt 0 ]]; do key="$1" case "$key" in -?*) printf "invalid option: %s\n" "$key" >&2 exit 1 ;; *) # :command.parse_requirements_case # :command.parse_requirements_case_simple # :argument.case if [[ -z ${args['program']+x} ]]; then args['program']=$1 shift else printf "invalid argument: %s\n" "$key" >&2 exit 1 fi ;; esac done # :command.required_args_filter if [[ -z ${args['program']+x} ]]; then printf "missing required argument: PROGRAM\nusage: autostart-manage kill PROGRAM\n" >&2 exit 1 fi } # :command.parse_requirements autostart_manage_log_parse_requirements() { # :command.fixed_flags_filter while [[ $# -gt 0 ]]; do case "${1:-}" in --help | -h) long_usage=yes autostart_manage_log_usage exit ;; *) break ;; esac done # :command.command_filter action="log" # :command.parse_requirements_while while [[ $# -gt 0 ]]; do key="$1" case "$key" in -?*) printf "invalid option: %s\n" "$key" >&2 exit 1 ;; *) # :command.parse_requirements_case # :command.parse_requirements_case_simple # :argument.case if [[ -z ${args['program']+x} ]]; then args['program']=$1 shift else printf "invalid argument: %s\n" "$key" >&2 exit 1 fi ;; esac done # :command.required_args_filter if [[ -z ${args['program']+x} ]]; then printf "missing required argument: PROGRAM\nusage: autostart-manage log PROGRAM\n" >&2 exit 1 fi } # :command.parse_requirements autostart_manage_exec_parse_requirements() { # :command.fixed_flags_filter while [[ $# -gt 0 ]]; do case "${1:-}" in --help | -h) long_usage=yes autostart_manage_exec_usage exit ;; *) break ;; esac done # :command.command_filter action="exec" # :command.parse_requirements_while while [[ $# -gt 0 ]]; do key="$1" case "$key" in -?*) printf "invalid option: %s\n" "$key" >&2 exit 1 ;; *) # :command.parse_requirements_case # :command.parse_requirements_case_simple # :argument.case if [[ -z ${args['program']+x} ]]; then args['program']=$1 shift else printf "invalid argument: %s\n" "$key" >&2 exit 1 fi ;; esac done # :command.required_args_filter if [[ -z ${args['program']+x} ]]; then printf "missing required argument: PROGRAM\nusage: autostart-manage exec PROGRAM\n" >&2 exit 1 fi } # :command.parse_requirements autostart_manage_run_parse_requirements() { # :command.fixed_flags_filter while [[ $# -gt 0 ]]; do case "${1:-}" in --help | -h) long_usage=yes autostart_manage_run_usage exit ;; *) break ;; esac done # :command.command_filter action="run" # :command.parse_requirements_while while [[ $# -gt 0 ]]; do key="$1" case "$key" in -?*) printf "invalid option: %s\n" "$key" >&2 exit 1 ;; *) # :command.parse_requirements_case # :command.parse_requirements_case_simple printf "invalid argument: %s\n" "$key" >&2 exit 1 ;; esac done } # :command.parse_requirements autostart_manage_run_wayland_parse_requirements() { # :command.fixed_flags_filter while [[ $# -gt 0 ]]; do case "${1:-}" in --help | -h) long_usage=yes autostart_manage_run_wayland_usage exit ;; *) break ;; esac done # :command.command_filter action="run-wayland" # :command.parse_requirements_while while [[ $# -gt 0 ]]; do key="$1" case "$key" in -?*) printf "invalid option: %s\n" "$key" >&2 exit 1 ;; *) # :command.parse_requirements_case # :command.parse_requirements_case_simple printf "invalid argument: %s\n" "$key" >&2 exit 1 ;; esac done } # :command.parse_requirements autostart_manage_run_xorg_parse_requirements() { # :command.fixed_flags_filter while [[ $# -gt 0 ]]; do case "${1:-}" in --help | -h) long_usage=yes autostart_manage_run_xorg_usage exit ;; *) break ;; esac done # :command.command_filter action="run-xorg" # :command.parse_requirements_while while [[ $# -gt 0 ]]; do key="$1" case "$key" in -?*) printf "invalid option: %s\n" "$key" >&2 exit 1 ;; *) # :command.parse_requirements_case # :command.parse_requirements_case_simple printf "invalid argument: %s\n" "$key" >&2 exit 1 ;; esac done } # :command.user_hooks before_hook() { # autostart-manage/before.sh #!/usr/bin/env bash service_file="$HOME/.config/systemd/user/autostart@.service" if [ ! -f "$service_file" ]; then _deploy_service_file "$service_file" fi target_file="$HOME/.config/systemd/user/autostart.target" if [ ! -f "$target_file" ]; then _deploy_target_file "$target_file" fi } # :command.initialize initialize() { version="0.1.3" long_usage='' set -euo pipefail } # :command.run run() { declare -A args=() declare -A deps=() declare -a other_args=() declare -a env_var_names=() declare -a input=() normalize_input "$@" parse_requirements "${input[@]}" before_hook case "$action" in "completions") autostart_manage_completions_command ;; "list") autostart_manage_list_command ;; "info") autostart_manage_info_command ;; "sync") autostart_manage_sync_command ;; "enable") autostart_manage_enable_command ;; "disable") autostart_manage_disable_command ;; "restart") autostart_manage_restart_command ;; "start") autostart_manage_start_command ;; "status") autostart_manage_status_command ;; "stop") autostart_manage_stop_command ;; "kill") autostart_manage_kill_command ;; "log") autostart_manage_log_command ;; "exec") autostart_manage_exec_command ;; "run") autostart_manage_run_command ;; "run-wayland") autostart_manage_run_wayland_command ;; "run-xorg") autostart_manage_run_xorg_command ;; esac } initialize run "$@"