diff --git a/.envrc b/.envrc index 4857c1e..1d953f4 100644 --- a/.envrc +++ b/.envrc @@ -1,3 +1 @@ use nix - -export BASHLY_SOURCE_DIR=$(cat .target) diff --git a/.forgejo/workflows/release.yaml b/.forgejo/workflows/release.yaml index a574329..a5297ea 100644 --- a/.forgejo/workflows/release.yaml +++ b/.forgejo/workflows/release.yaml @@ -3,45 +3,30 @@ on: tags: - v** jobs: - build-artifacts: + release: runs-on: docker - strategy: - matrix: - tool: - - autoinstall - - autostart-manage steps: - uses: https://code.forgejo.org/actions/checkout@v3 - id: install-dependencies run: | apt update + # TODO add pandoc for docs apt install -y make ruby gem install bashly shell: bash - id: run-bashly run: | - echo "${{ matrix.tool }}" > .target make generate + #make docs shell: bash - - uses: https://code.forgejo.org/actions/upload-artifact@v3 - with: - name: ${{ matrix.tool }} - path: ${{ github.workspace }}/output/${{ matrix.tool }} - upload-release: - runs-on: docker - steps: - - uses: https://code.forgejo.org/actions/checkout@v3 - - uses: https://code.forgejo.org/actions/download-artifact@v3 - with: - path: /tmp/artifacts-in - merge-multiple: true # broken "collect-artifacts" used as workaround - - id: collect-artifacts + - id: prepare-release run: | - mkdir /tmp/artifacts-out - mv $(find /tmp/artifacts-in -type f) /tmp/artifacts-out + mkdir /tmp/release + cp ./autostart-manage /tmp/release + #cp -r ./man1 /tmp/release shell: bash - uses: https://code.forgejo.org/actions/forgejo-release@v1 with: direction: upload - release-dir: /tmp/artifacts-out + release-dir: /tmp/release token: ${{ github.token }} diff --git a/.gitignore b/.gitignore index d45b622..d0fb366 100644 --- a/.gitignore +++ b/.gitignore @@ -1,5 +1,4 @@ -.target -output/ +src/lib/send_completions.sh -autoinstall/lib/send_completions.sh -autostart-manage/lib/send_completions.sh +autostart-manage +man1 diff --git a/Makefile b/Makefile index b2a84de..1fc809f 100644 --- a/Makefile +++ b/Makefile @@ -1,22 +1,12 @@ -target: - @echo "Select target directory" - @echo $$(find . -name bashly.yml | sed -e 's/.\///' -e 's/\/.*//' | $$DMENU) > .target +completions: + bashly add completions -get-target: - $(eval TARGET := $(shell cat .target)) - -output-dir: - mkdir -p ./output - -completions: get-target - BASHLY_SOURCE_DIR=$(TARGET) bashly add completions - -generate: get-target output-dir completions - BASHLY_SOURCE_DIR=$(TARGET) bashly generate --upgrade +generate: completions + bashly generate --upgrade docs: generate - BASHLY_SOURCE_DIR=$(TARGET) bashly render :mandoc ./output/man1 + bashly render :mandoc ./man1 -deploy: generate docs - cp -f ./output/$(TARGET) ~/.local/bin/ - cp -f ./output/man1/$(TARGET)*.1 ~/.local/share/man/man1/ +install: generate docs + cp -f ./autostart-manage ~/.local/bin/ + cp -f ./man1/autostart-manage*.1 ~/.local/share/man/man1/ diff --git a/autoinstall/archive_command.sh b/autoinstall/archive_command.sh deleted file mode 100644 index 6019708..0000000 --- a/autoinstall/archive_command.sh +++ /dev/null @@ -1,18 +0,0 @@ -#!/usr/bin/env bash - -target=${args[target]:?} -url=${args[url]:?} - -if [ ! -f "$target" ] -then - echo "Installing archive $url to $target" - - target_dir=$(dirname "$target") - mkdir -p "$target_dir" - cd "$target_dir" || exit 1 - - _http_client "$url" > "$target" - tar xaf "$target" - - _run_hook -fi diff --git a/autoinstall/bashly.yml b/autoinstall/bashly.yml deleted file mode 100644 index bd7fb0f..0000000 --- a/autoinstall/bashly.yml +++ /dev/null @@ -1,127 +0,0 @@ -name: autoinstall -help: Install files, repository and else -version: 0.1.3 - -flags: - - long: --clean - short: -c - help: Clean exisiting targets - - long: --hook - short: -h - help: Hook to run if something changed - arg: hook - -environment_variables: - - name: AUTOINSTALL_CLEAN - help: Clean exisiting targets - -dependencies: - http_client: - command: [curl, wget] - help: Please install either curl or wget - -commands: - - name: completions - help: Generate bash completions - - - name: run - help: Autoinstall from file - args: - - name: group - required: true - help: The group to install - flags: - - long: --file - short: -f - help: File from which to read autoinstall-config - arg: file - default: $XDG_CONFIG_HOME/autoinstall.conf - - - name: git - help: Install a git repository - args: - - name: repo - required: true - help: The url of the git repository - - name: target - required: true - help: The path to clone the repository into - - - name: file - help: Install a file - args: - - name: url - required: true - help: The url of the file - - name: target - required: true - help: The file-path to download the file into - flags: - - long: --pipe - short: -p - help: Pipe file through command (e.g. "tar xzO") - arg: pipe - default: cat - - - name: exe - help: Install an executable - args: - - name: url - required: true - help: The url of the file - - name: target - required: true - help: The file-path to download the file into - filename: file_command.sh - flags: - - long: --pipe - short: -f - help: Pipe file through command (e.g. "tar xzO") - arg: pipe - default: cat - - long: --completions - short: -c - help: Run a command on the new exe to install completions - arg: completions - - - name: archive - help: Install an archive - args: - - name: url - required: true - help: The url of the arhive - - name: target - required: true - help: The path to clone the repository into - - - name: env - help: Create a file with envsubst - args: - - name: template - required: true - help: The path to the template - - name: target - required: true - help: The path to write the result to - dependencies: - envsubst: This tool is usually part of the gettext package - - - name: text - help: Create a file from text - args: - - name: text - required: true - help: The text to write to the file - - name: target - required: true - help: The path to write the result to - - - name: flatpak - help: Install a flatpak - args: - - name: flatpak - required: true - help: The flatpak to install - - name: mode - required: true - help: The target to install into (user or system) diff --git a/autoinstall/before.sh b/autoinstall/before.sh deleted file mode 100644 index 24b4323..0000000 --- a/autoinstall/before.sh +++ /dev/null @@ -1,30 +0,0 @@ -#!/usr/bin/env bash - -action=${action:?} - -# do nothing on some selected actions -if [ "$action" = "completions" ] || [ "$action" = "flatpak" ] || [ "$action" = "run" ] -then - return -fi - -clean=${args[--clean]:-} -target=${args[target]:?} - -if [ "$action" = "exe" ] -then - target="$HOME/.local/bin/$target" -fi - -if [ -n "$clean" ] || [ -n "${AUTOINSTALL_CLEAN:-}" ] -then - echo "Cleaning $target" - - # sanity checks - if [ -z "$target" ] || [ "$target" = "/" ] || [ "$target" = "$HOME" ] || [ "$target" = "$HOME/" ] - then - echo "Invalid target: '$target'" - exit 1 - fi - rm -rf "$target" -fi diff --git a/autoinstall/env_command.sh b/autoinstall/env_command.sh deleted file mode 100644 index 74d65d7..0000000 --- a/autoinstall/env_command.sh +++ /dev/null @@ -1,17 +0,0 @@ -#!/usr/bin/env bash - -target=${args[target]:?} -template=${args[template]:?} - -if [ ! -f "$target" ] -then - echo "Installing env-template $template to $target" - - target_dir=$(dirname "$target") - mkdir -p "$target_dir" - cd "$target_dir" || exit 1 - - envsubst < "$template" > "$target" - - _run_hook -fi diff --git a/autoinstall/file_command.sh b/autoinstall/file_command.sh deleted file mode 100644 index 08e9519..0000000 --- a/autoinstall/file_command.sh +++ /dev/null @@ -1,45 +0,0 @@ -#!/usr/bin/env bash - -pipe=${args[--pipe]:?} -completions=${args[--completions]:-} -target=${args[target]:?} -url=${args[url]:?} - -if [ "${action:-file}" = "exe" ] -then - if [ -x "$(command -v "$target")" ] - then - return - fi - exe=$target - target="$HOME/.local/bin/$target" -fi - - -if [ ! -e "$target" ] -then - echo "Installing file $url to $target" - - target_dir=$(dirname "$target") - mkdir -p "$target_dir" - cd "$target_dir" || exit 1 - - _http_client "$url" | eval "$pipe" > "$target" - - if [ "${action:-file}" = "exe" ] - then - chmod +x "$target" - - if [ -n "$completions" ] - then - echo "Installing completions for $exe" - - # path taken from "__load_completion" function - bash_completions_dir=${BASH_COMPLETION_USER_DIR:-${XDG_DATA_HOME:-$HOME/.local/share}/bash-completion}/completions - mkdir -p "$bash_completions_dir" - eval "$target $completions" > "$bash_completions_dir/_$(basename "$exe")" - fi - fi - - _run_hook -fi diff --git a/autoinstall/flatpak_command.sh b/autoinstall/flatpak_command.sh deleted file mode 100644 index 89f6e54..0000000 --- a/autoinstall/flatpak_command.sh +++ /dev/null @@ -1,13 +0,0 @@ -#!/usr/bin/env bash - -flatpak=${args[flatpak]:?} -mode=${args[mode]:?} - -if ! flatpak info "$flatpak" &> /dev/null -then - echo "Installing flatpak $flatpak" - - flatpak install -y "--$mode" "$flatpak" - - _run_hook -fi diff --git a/autoinstall/git_command.sh b/autoinstall/git_command.sh deleted file mode 100644 index 33faf65..0000000 --- a/autoinstall/git_command.sh +++ /dev/null @@ -1,15 +0,0 @@ -#!/usr/bin/env bash - -target=${args[target]:?} -repo=${args[repo]:?} - -if [ ! -d "$target" ] -then - echo "Installing repo $repo to $target" - - mkdir -p "$target" - - git clone --depth=1 "$repo" "$target" >/dev/null 2>&1 - - _run_hook -fi diff --git a/autoinstall/lib/colors.sh b/autoinstall/lib/colors.sh deleted file mode 100644 index cbdc015..0000000 --- a/autoinstall/lib/colors.sh +++ /dev/null @@ -1,42 +0,0 @@ -## Color functions [@bashly-upgrade colors] -## This file is a part of Bashly standard library -## -## Usage: -## Use any of the functions below to color or format a portion of a string. -## -## echo "before $(red this is red) after" -## echo "before $(green_bold this is green_bold) after" -## -## Color output will be disabled if `NO_COLOR` environment variable is set -## in compliance with https://no-color.org/ -## -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" "$*"; } diff --git a/autoinstall/lib/common.sh b/autoinstall/lib/common.sh deleted file mode 100644 index 584603a..0000000 --- a/autoinstall/lib/common.sh +++ /dev/null @@ -1,20 +0,0 @@ -#!/usr/bin/env bash - -_http_client() { - if [ -x "$(command -v curl)" ] - then - curl -fsSL "$1" - elif [ -x "$(command -v wget)" ] - then - wget -qO - "$1" - fi -} - -_run_hook() { - hook=${args[--hook]:-} - if [ -n "$hook" ] - then - yellow "Running hook: $hook" - bash -c "$hook" - fi -} diff --git a/autoinstall/run_command.sh b/autoinstall/run_command.sh deleted file mode 100644 index e60be67..0000000 --- a/autoinstall/run_command.sh +++ /dev/null @@ -1,84 +0,0 @@ -#!/usr/bin/env bash - -group=${args[group]:?} -file=${args[--file]:-} -clean=${args[--clean]:-} - -_handle_entry() { - type="$1" - source="$2" - target="$3" - hook="$4" - pipe="$5" - completions="$6" - - install_args=() - - if [[ -n "$hook" ]]; then - install_args+=("--hook=$hook") - fi - if [[ -n "$clean" ]]; then - install_args+=("--clean") - fi - - install_args+=("$type") - - if [[ -n "$pipe" ]]; then - install_args+=("--pipe=$pipe") - fi - if [[ -n "$completions" ]]; then - install_args+=("--completions=$completions") - fi - - if [[ $source = \$* ]] - then - source=$(eval "echo $source") - fi - install_args+=("$source") - - install_args+=("$(eval "echo $target")") - - "$0" "${install_args[@]}" || true # Continue on error -} - -file_lines=$(wc -l < "$file") -line=0 -while [[ $line -lt $file_lines ]]; do - entry=$(tail -n +$line "$file" | awk '/^$/{exit} {print} ') - entry_len=$(echo "$entry" | wc -l) - line=$((line + entry_len)) - - if [[ $entry_len -le 1 ]]; then - continue - fi - - unset AUTOINSTALL_ITEM_TYPE \ - AUTOINSTALL_ITEM_SOURCE \ - AUTOINSTALL_ITEM_TARGET \ - AUTOINSTALL_ITEM_HOOK \ - AUTOINSTALL_ITEM_PIPE \ - AUTOINSTALL_ITEM_COMPLETIONS \ - AUTOINSTALL_ITEM_GROUPS - eval "$entry" - - # check if we have the required vars - if [[ -z "${AUTOINSTALL_ITEM_TYPE:-}" \ - || -z "${AUTOINSTALL_ITEM_SOURCE:-}" \ - || -z "${AUTOINSTALL_ITEM_TARGET:-}" \ - || -z "${AUTOINSTALL_ITEM_GROUPS:-}" ]] - then - continue - fi - - if [[ "$group" != "all" ]] - then - # check if group is in groups - if [[ ! "${AUTOINSTALL_ITEM_GROUPS}" =~ (^|,)$group(,|$) ]] - then - continue - fi - fi - - _handle_entry "$AUTOINSTALL_ITEM_TYPE" "$AUTOINSTALL_ITEM_SOURCE" \ - "$AUTOINSTALL_ITEM_TARGET" "${AUTOINSTALL_ITEM_HOOK:-}" "${AUTOINSTALL_ITEM_PIPE:-}" "${AUTOINSTALL_ITEM_COMPLETIONS:-}" -done diff --git a/autoinstall/text_command.sh b/autoinstall/text_command.sh deleted file mode 100644 index 4fcd486..0000000 --- a/autoinstall/text_command.sh +++ /dev/null @@ -1,16 +0,0 @@ -#!/usr/bin/env bash - -target=${args[target]:?} -text=${args[text]:?} - -if [ ! -f "$target" ] -then - echo "Installing text '$text' to $target" - - target_dir=$(dirname "$target") - mkdir -p "$target_dir" - - echo "$text" > "$target" - - _run_hook -fi diff --git a/autostart-manage/completions_command.sh b/autostart-manage/completions_command.sh deleted file mode 100644 index 0d10993..0000000 --- a/autostart-manage/completions_command.sh +++ /dev/null @@ -1,3 +0,0 @@ -#!/usr/bin/env bash - -send_completions diff --git a/autostart-manage/log_command.sh b/autostart-manage/log_command.sh deleted file mode 100644 index 7d9657c..0000000 --- a/autostart-manage/log_command.sh +++ /dev/null @@ -1,3 +0,0 @@ -#!/usr/bin/env bash - -journalctl --user -fu "autostart@${args[program]:?}.service" diff --git a/autostart-manage/sync_command.sh b/autostart-manage/sync_command.sh deleted file mode 100644 index d08ac71..0000000 --- a/autostart-manage/sync_command.sh +++ /dev/null @@ -1,14 +0,0 @@ -#!/usr/bin/env bash - -rm "$HOME/.config/systemd/user/autostart.target.wants/"* - -autostart_units=() -while IFS='' read -r line -do - autostart_units+=("$line") -done < <(_list) - -for unit in "${autostart_units[@]}" -do - _systemctl "$unit" add-wants autostart.target -done diff --git a/run.sh b/run.sh index 7cb49dc..8125377 100755 --- a/run.sh +++ b/run.sh @@ -1,11 +1,7 @@ #!/usr/bin/env sh -target=$(cat .target) - -[ -n "$target" ] || exit 1 - make generate printf "\nBuild complete. Running...\n==========================\n\n" -"./output/$target" "$@" +time ./autostart-manage "$@" diff --git a/settings.yml b/settings.yml deleted file mode 100644 index 63e7150..0000000 --- a/settings.yml +++ /dev/null @@ -1,49 +0,0 @@ -# The path to bashly.yml -config_path: "%{source_dir}/bashly.yml" - -# The path to use for creating the bash script -target_dir: output - -# The path to use for common library files, relative to source_dir -lib_dir: lib - -# The path to use for command files, relative to source_dir -# When set to nil (~), command files will be placed directly under source_dir -# When set to any other string, command files will be placed under this -# directory, and each command will get its own subdirectory -commands_dir: ~ - -# Configure the bash options that will be added to the initialize function: -# strict: true Bash strict mode (set -euo pipefail) -# strict: false Only exit on errors (set -e) -# strict: '' Do not add any 'set' directive -# strict: <string> Add any other custom 'set' directive -strict: true - -# When true, the generated script will use tab indentation instead of spaces -# (every 2 leading spaces will be converted to a tab character) -tab_indent: true - -# When true, the generated script will consider any argument in the form of -# `-abc` as if it is `-a -b -c`. -compact_short_flags: true - -# Set to 'production' or 'development': -# env: production Generate a smaller script, without file markers -# env: development Generate with file markers -env: development - -# The extension to use when reading/writing partial script snippets -partials_extension: sh - -# Display various usage elements in color by providing the name of the color -# function. The value for each property is a name of a function that is -# available in your script, for example: `green` or `bold`. -# You can run `bashly add colors` to add a standard colors library. -# This option cannot be set via environment variables. -usage_colors: - caption: blue - command: green - arg: red - flag: yellow - environment_variable: cyan diff --git a/autostart-manage/bashly.yml b/src/bashly.yml similarity index 88% rename from autostart-manage/bashly.yml rename to src/bashly.yml index 3327140..a578c1b 100644 --- a/autostart-manage/bashly.yml +++ b/src/bashly.yml @@ -1,6 +1,6 @@ name: autostart-manage help: Manage autostart -version: 0.1.3 +version: 0.1.4 dependencies: tomlq: please install yq (https://github.com/kislyuk/yq) @@ -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: @@ -73,6 +77,15 @@ commands: completions: - $(autostart-manage list) filename: systemctl.sh + - name: kill + help: Kill the program from autostart + args: + - name: program + required: true + help: Program to kill + completions: + - $(autostart-manage list) + filename: systemctl.sh - name: log alias: logs help: Show the log for a single program from autostart diff --git a/autostart-manage/before.sh b/src/before.sh similarity index 100% rename from autostart-manage/before.sh rename to src/before.sh diff --git a/autoinstall/completions_command.sh b/src/completions_command.sh similarity index 100% rename from autoinstall/completions_command.sh rename to src/completions_command.sh diff --git a/autostart-manage/exec_command.sh b/src/exec_command.sh similarity index 63% rename from autostart-manage/exec_command.sh rename to src/exec_command.sh index 2842069..2e2c816 100644 --- a/autostart-manage/exec_command.sh +++ b/src/exec_command.sh @@ -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")" diff --git a/autostart-manage/info_command.sh b/src/info_command.sh similarity index 90% rename from autostart-manage/info_command.sh rename to src/info_command.sh index 1f895e3..566cdce 100644 --- a/autostart-manage/info_command.sh +++ b/src/info_command.sh @@ -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' diff --git a/autostart-manage/lib/colors.sh b/src/lib/colors.sh similarity index 83% rename from autostart-manage/lib/colors.sh rename to src/lib/colors.sh index cbdc015..7458e2d 100644 --- a/autostart-manage/lib/colors.sh +++ b/src/lib/colors.sh @@ -26,17 +26,26 @@ yellow() { print_in_color "\e[33m" "$*"; } blue() { print_in_color "\e[34m" "$*"; } magenta() { print_in_color "\e[35m" "$*"; } cyan() { print_in_color "\e[36m" "$*"; } +black() { print_in_color "\e[30m" "$*"; } +white() { print_in_color "\e[37m" "$*"; } + 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" "$*"; } +black_bold() { print_in_color "\e[1;30m" "$*"; } +white_bold() { print_in_color "\e[1;37m" "$*"; } + 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" "$*"; } +black_underlined() { print_in_color "\e[4;30m" "$*"; } +white_underlined() { print_in_color "\e[4;37m" "$*"; } diff --git a/autostart-manage/lib/common.sh b/src/lib/common.sh similarity index 62% rename from autostart-manage/lib/common.sh rename to src/lib/common.sh index 2479fe1..2f99562 100644 --- a/autostart-manage/lib/common.sh +++ b/src/lib/common.sh @@ -5,16 +5,25 @@ _systemctl () { } _query_autostart_toml() { - tomlq -r --arg host "$HOSTNAME" \ - '.hosts[$host].groups as $groups | .apps | to_entries[] | select( - (.value.hosts | contains([$host])) or - ([.value.group] | inside($groups)) - ) | '"$1" \ - "$XDG_CONFIG_HOME/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 == ["*"] + ) and (.value.group != "") + ) + ) | '"$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 +50,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 +73,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' "*" } diff --git a/autostart-manage/lib/systemd_files.sh b/src/lib/systemd_files.sh similarity index 100% rename from autostart-manage/lib/systemd_files.sh rename to src/lib/systemd_files.sh diff --git a/autostart-manage/list_command.sh b/src/list_command.sh similarity index 67% rename from autostart-manage/list_command.sh rename to src/list_command.sh index 0986740..c732452 100644 --- a/autostart-manage/list_command.sh +++ b/src/list_command.sh @@ -1,3 +1,3 @@ #!/usr/bin/env bash -_list +_list "*" diff --git a/src/log_command.sh b/src/log_command.sh new file mode 100644 index 0000000..8f8f075 --- /dev/null +++ b/src/log_command.sh @@ -0,0 +1,3 @@ +#!/usr/bin/env bash + +journalctl --user -b0 -fu "autostart@${args[program]:?}.service" diff --git a/autostart-manage/run_command.sh b/src/run_command.sh similarity index 100% rename from autostart-manage/run_command.sh rename to src/run_command.sh diff --git a/autostart-manage/run_wayland_command.sh b/src/run_wayland_command.sh similarity index 100% rename from autostart-manage/run_wayland_command.sh rename to src/run_wayland_command.sh diff --git a/autostart-manage/run_xorg_command.sh b/src/run_xorg_command.sh similarity index 100% rename from autostart-manage/run_xorg_command.sh rename to src/run_xorg_command.sh diff --git a/src/sync_command.sh b/src/sync_command.sh new file mode 100644 index 0000000..49dfd4e --- /dev/null +++ b/src/sync_command.sh @@ -0,0 +1,11 @@ +#!/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[@]}" diff --git a/autostart-manage/systemctl.sh b/src/systemctl.sh similarity index 100% rename from autostart-manage/systemctl.sh rename to src/systemctl.sh