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 35835aa..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 install: generate docs - cp -f ./output/$(TARGET) ~/.local/bin/ - cp -f ./output/man1/$(TARGET)*.1 ~/.local/share/man/man1/ + 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 f145fab..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" ] && ! echo "$target" | grep -q "/" -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/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 5ea6714..0000000 --- a/autoinstall/run_command.sh +++ /dev/null @@ -1,88 +0,0 @@ -#!/usr/bin/env bash - -group=${args[group]:?} -file=${args[--file]:-} -clean=${args[--clean]:-} - -_install_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[@]}" -} - -_handle_entry() { - unset AUTOINSTALL_ITEM_TYPE \ - AUTOINSTALL_ITEM_SOURCE \ - AUTOINSTALL_ITEM_TARGET \ - AUTOINSTALL_ITEM_HOOK \ - AUTOINSTALL_ITEM_PIPE \ - AUTOINSTALL_ITEM_COMPLETIONS - - eval "$1" - - # check if we have the required vars - if [[ -z "${AUTOINSTALL_ITEM_TYPE:-}" \ - || -z "${AUTOINSTALL_ITEM_SOURCE:-}" \ - || -z "${AUTOINSTALL_ITEM_TARGET:-}" ]] - then - return - fi - - _install_entry "$AUTOINSTALL_ITEM_TYPE" "$AUTOINSTALL_ITEM_SOURCE" \ - "$AUTOINSTALL_ITEM_TARGET" "${AUTOINSTALL_ITEM_HOOK:-}" "${AUTOINSTALL_ITEM_PIPE:-}" "${AUTOINSTALL_ITEM_COMPLETIONS:-}" - -} - -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 - - if [[ "$group" != "all" ]] - then - # check if group is in groups - if ! echo "$entry" | grep -qE "^AUTOINSTALL_ITEM_GROUPS=\"(.*,)?$group(,.*)?\"$" - then - continue - fi - fi - - _handle_entry "$entry" || true # ignore errors -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/lib/colors.sh b/autostart-manage/lib/colors.sh deleted file mode 100644 index cbdc015..0000000 --- a/autostart-manage/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/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: 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 99% rename from autostart-manage/bashly.yml rename to src/bashly.yml index 72f5d1a..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) 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 100% rename from autostart-manage/exec_command.sh rename to src/exec_command.sh diff --git a/autostart-manage/info_command.sh b/src/info_command.sh similarity index 100% rename from autostart-manage/info_command.sh rename to src/info_command.sh diff --git a/autoinstall/lib/colors.sh b/src/lib/colors.sh similarity index 100% rename from autoinstall/lib/colors.sh rename to src/lib/colors.sh diff --git a/autostart-manage/lib/common.sh b/src/lib/common.sh similarity index 100% rename from autostart-manage/lib/common.sh rename to src/lib/common.sh 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 100% rename from autostart-manage/list_command.sh rename to src/list_command.sh diff --git a/autostart-manage/log_command.sh b/src/log_command.sh similarity index 100% rename from autostart-manage/log_command.sh rename to src/log_command.sh 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/autostart-manage/sync_command.sh b/src/sync_command.sh similarity index 100% rename from autostart-manage/sync_command.sh rename to src/sync_command.sh 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