This commit is contained in:
parent
ab7c74f888
commit
ff19aeaf32
32 changed files with 19 additions and 530 deletions
2
.envrc
2
.envrc
|
@ -1,3 +1 @@
|
|||
use nix
|
||||
|
||||
export BASHLY_SOURCE_DIR=$(cat .target)
|
||||
|
|
|
@ -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 }}
|
||||
|
|
7
.gitignore
vendored
7
.gitignore
vendored
|
@ -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
|
||||
|
|
24
Makefile
24
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/
|
||||
|
|
|
@ -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
|
|
@ -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)
|
|
@ -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
|
|
@ -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
|
|
@ -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
|
|
@ -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
|
|
@ -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
|
|
@ -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
|
||||
}
|
|
@ -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
|
|
@ -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
|
|
@ -1,3 +0,0 @@
|
|||
#!/usr/bin/env bash
|
||||
|
||||
send_completions
|
|
@ -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" "$*"; }
|
49
settings.yml
49
settings.yml
|
@ -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
|
|
@ -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)
|
Loading…
Reference in a new issue