Add autoinstall command
This commit is contained in:
parent
d6985ded7e
commit
b5eaaead9b
14 changed files with 344 additions and 4 deletions
18
autoinstall/archive_command.sh
Normal file
18
autoinstall/archive_command.sh
Normal file
|
@ -0,0 +1,18 @@
|
|||
#!/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
|
107
autoinstall/bashly.yml
Normal file
107
autoinstall/bashly.yml
Normal file
|
@ -0,0 +1,107 @@
|
|||
name: autoinstall
|
||||
help: Install files, repository and else
|
||||
version: 0.1.0
|
||||
|
||||
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
|
||||
|
||||
- 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
|
||||
|
||||
- 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
|
20
autoinstall/before.sh
Normal file
20
autoinstall/before.sh
Normal file
|
@ -0,0 +1,20 @@
|
|||
#!/usr/bin/env bash
|
||||
|
||||
if [ "${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"
|
||||
rm -rf "$target"
|
||||
fi
|
3
autoinstall/completions_command.sh
Normal file
3
autoinstall/completions_command.sh
Normal file
|
@ -0,0 +1,3 @@
|
|||
#!/usr/bin/env bash
|
||||
|
||||
send_completions
|
17
autoinstall/env_command.sh
Normal file
17
autoinstall/env_command.sh
Normal file
|
@ -0,0 +1,17 @@
|
|||
#!/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
|
33
autoinstall/file_command.sh
Normal file
33
autoinstall/file_command.sh
Normal file
|
@ -0,0 +1,33 @@
|
|||
#!/usr/bin/env bash
|
||||
|
||||
pipe=${args[--pipe]:?}
|
||||
target=${args[target]:?}
|
||||
url=${args[url]:?}
|
||||
|
||||
if [ "${action:-file}" = "exe" ]
|
||||
then
|
||||
if [ -x "$(command -v "$target")" ]
|
||||
then
|
||||
return
|
||||
fi
|
||||
target="$HOME/.local/bin/$target"
|
||||
fi
|
||||
|
||||
|
||||
if [ ! -f "$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"
|
||||
fi
|
||||
|
||||
_run_hook
|
||||
fi
|
15
autoinstall/git_command.sh
Normal file
15
autoinstall/git_command.sh
Normal file
|
@ -0,0 +1,15 @@
|
|||
#!/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
|
42
autoinstall/lib/colors.sh
Normal file
42
autoinstall/lib/colors.sh
Normal file
|
@ -0,0 +1,42 @@
|
|||
## 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" "$*"; }
|
20
autoinstall/lib/common.sh
Normal file
20
autoinstall/lib/common.sh
Normal file
|
@ -0,0 +1,20 @@
|
|||
#!/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
|
||||
}
|
40
autoinstall/run_command.sh
Normal file
40
autoinstall/run_command.sh
Normal file
|
@ -0,0 +1,40 @@
|
|||
#!/usr/bin/env bash
|
||||
|
||||
group=${args[group]:?}
|
||||
|
||||
_config_query() {
|
||||
tomlq -c --arg group "$group" \
|
||||
'.autoinstall | map(select(.group == $group)) | '"$1" \
|
||||
"$XDG_CONFIG_HOME/autoinstall.toml"
|
||||
}
|
||||
|
||||
#length=$(_config_query "length")
|
||||
_config_query ".[]" | while read -r entry; do
|
||||
install_args=()
|
||||
|
||||
type=$(echo "$entry" | jq -r '.type')
|
||||
source=$(echo "$entry" | jq -r '.source')
|
||||
target=$(echo "$entry" | jq -r '.target')
|
||||
hook=$(echo "$entry" | jq -r '.hook // ""')
|
||||
pipe=$(echo "$entry" | jq -r '.pipe // ""')
|
||||
|
||||
if [[ -n "$hook" ]]; then
|
||||
install_args+=("--hook=$hook")
|
||||
fi
|
||||
|
||||
install_args+=("$type")
|
||||
|
||||
if [[ -n "$pipe" ]]; then
|
||||
install_args+=("--pipe=$pipe")
|
||||
fi
|
||||
|
||||
if [[ $source = \$* ]]
|
||||
then
|
||||
source=$(eval "echo $source")
|
||||
fi
|
||||
install_args+=("$source")
|
||||
|
||||
install_args+=("$(eval "echo $target")")
|
||||
|
||||
autoinstall "${install_args[@]}"
|
||||
done
|
16
autoinstall/text_command.sh
Normal file
16
autoinstall/text_command.sh
Normal file
|
@ -0,0 +1,16 @@
|
|||
#!/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
|
|
@ -3,9 +3,7 @@ help: Manage autostart
|
|||
version: 0.1.0
|
||||
|
||||
dependencies:
|
||||
yq:
|
||||
command: [tomlq]
|
||||
help: please install yq (https://github.com/kislyuk/yq)
|
||||
tomlq: please install yq (https://github.com/kislyuk/yq)
|
||||
|
||||
environment_variables:
|
||||
- name: HOSTNAME
|
||||
|
@ -76,6 +74,7 @@ commands:
|
|||
- $(autostart-manage list)
|
||||
filename: systemctl.sh
|
||||
- name: log
|
||||
alias: logs
|
||||
help: Show the log for a single program from autostart
|
||||
args:
|
||||
- name: program
|
||||
|
|
|
@ -18,6 +18,7 @@ _list () {
|
|||
}
|
||||
|
||||
_autostart_run_graphical () {
|
||||
set +e
|
||||
pass x # Try to unlock yubikey asap
|
||||
|
||||
start-audio pipewire
|
||||
|
@ -33,7 +34,7 @@ _autostart_run_graphical () {
|
|||
fi
|
||||
fi
|
||||
|
||||
autoinstall graphical
|
||||
autoinstall run graphical
|
||||
autostart-manage run
|
||||
}
|
||||
|
||||
|
|
9
run.sh
Executable file
9
run.sh
Executable file
|
@ -0,0 +1,9 @@
|
|||
#!/usr/bin/env sh
|
||||
|
||||
target=$(cat .target)
|
||||
|
||||
[ -n "$target" ] || exit 1
|
||||
|
||||
make generate
|
||||
|
||||
"./output/$target" "$@"
|
Loading…
Reference in a new issue