parent
ab7c74f888
commit
b49d6a4c3a
33 changed files with 2240 additions and 383 deletions
2
.envrc
2
.envrc
|
@ -1,3 +1 @@
|
||||||
use nix
|
use nix
|
||||||
|
|
||||||
export BASHLY_SOURCE_DIR=$(cat .target)
|
|
||||||
|
|
|
@ -3,45 +3,30 @@ on:
|
||||||
tags:
|
tags:
|
||||||
- v**
|
- v**
|
||||||
jobs:
|
jobs:
|
||||||
build-artifacts:
|
release:
|
||||||
runs-on: docker
|
runs-on: docker
|
||||||
strategy:
|
|
||||||
matrix:
|
|
||||||
tool:
|
|
||||||
- autoinstall
|
|
||||||
- autostart-manage
|
|
||||||
steps:
|
steps:
|
||||||
- uses: https://code.forgejo.org/actions/checkout@v3
|
- uses: https://code.forgejo.org/actions/checkout@v3
|
||||||
- id: install-dependencies
|
- id: install-dependencies
|
||||||
run: |
|
run: |
|
||||||
apt update
|
apt update
|
||||||
|
# TODO add pandoc for docs
|
||||||
apt install -y make ruby
|
apt install -y make ruby
|
||||||
gem install bashly
|
gem install bashly
|
||||||
shell: bash
|
shell: bash
|
||||||
- id: run-bashly
|
- id: run-bashly
|
||||||
run: |
|
run: |
|
||||||
echo "${{ matrix.tool }}" > .target
|
|
||||||
make generate
|
make generate
|
||||||
|
#make docs
|
||||||
shell: bash
|
shell: bash
|
||||||
- uses: https://code.forgejo.org/actions/upload-artifact@v3
|
- id: prepare-release
|
||||||
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
|
|
||||||
run: |
|
run: |
|
||||||
mkdir /tmp/artifacts-out
|
mkdir /tmp/release
|
||||||
mv $(find /tmp/artifacts-in -type f) /tmp/artifacts-out
|
cp ./autoinstall /tmp/release
|
||||||
|
#cp -r ./man1 /tmp/release
|
||||||
shell: bash
|
shell: bash
|
||||||
- uses: https://code.forgejo.org/actions/forgejo-release@v1
|
- uses: https://code.forgejo.org/actions/forgejo-release@v1
|
||||||
with:
|
with:
|
||||||
direction: upload
|
direction: upload
|
||||||
release-dir: /tmp/artifacts-out
|
release-dir: /tmp/release
|
||||||
token: ${{ github.token }}
|
token: ${{ github.token }}
|
||||||
|
|
7
.gitignore
vendored
7
.gitignore
vendored
|
@ -1,5 +1,4 @@
|
||||||
.target
|
src/lib/send_completions.sh
|
||||||
output/
|
|
||||||
|
|
||||||
autoinstall/lib/send_completions.sh
|
autoinstall
|
||||||
autostart-manage/lib/send_completions.sh
|
man1
|
||||||
|
|
24
Makefile
24
Makefile
|
@ -1,22 +1,12 @@
|
||||||
target:
|
completions:
|
||||||
@echo "Select target directory"
|
bashly add completions
|
||||||
@echo $$(find . -name bashly.yml | sed -e 's/.\///' -e 's/\/.*//' | $$DMENU) > .target
|
|
||||||
|
|
||||||
get-target:
|
generate: completions
|
||||||
$(eval TARGET := $(shell cat .target))
|
bashly generate --upgrade
|
||||||
|
|
||||||
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
|
|
||||||
|
|
||||||
docs: generate
|
docs: generate
|
||||||
BASHLY_SOURCE_DIR=$(TARGET) bashly render :mandoc ./output/man1
|
bashly render :mandoc ./man1
|
||||||
|
|
||||||
install: generate docs
|
install: generate docs
|
||||||
cp -f ./output/$(TARGET) ~/.local/bin/
|
cp -f ./autoinstall ~/.local/bin/
|
||||||
cp -f ./output/man1/$(TARGET)*.1 ~/.local/share/man/man1/
|
cp -f ./man1/autoinstall*.1 ~/.local/share/man/man1/
|
||||||
|
|
|
@ -1,111 +0,0 @@
|
||||||
name: autostart-manage
|
|
||||||
help: Manage autostart
|
|
||||||
version: 0.1.3
|
|
||||||
|
|
||||||
dependencies:
|
|
||||||
tomlq: please install yq (https://github.com/kislyuk/yq)
|
|
||||||
|
|
||||||
environment_variables:
|
|
||||||
- name: HOSTNAME
|
|
||||||
help: The hostname to use. We will try to get the value automatically.
|
|
||||||
|
|
||||||
commands:
|
|
||||||
- name: completions
|
|
||||||
help: Generate bash completions
|
|
||||||
|
|
||||||
- name: list
|
|
||||||
help: List available programs
|
|
||||||
- name: info
|
|
||||||
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:
|
|
||||||
- name: program
|
|
||||||
required: true
|
|
||||||
help: Program to add to autostart
|
|
||||||
completions:
|
|
||||||
- $(autostart-manage list)
|
|
||||||
filename: systemctl.sh
|
|
||||||
- name: disable
|
|
||||||
help: Remove a single program from autostart
|
|
||||||
args:
|
|
||||||
- name: program
|
|
||||||
required: true
|
|
||||||
help: Program to add to autostart
|
|
||||||
completions:
|
|
||||||
- $(autostart-manage list)
|
|
||||||
filename: systemctl.sh
|
|
||||||
- name: restart
|
|
||||||
help: Restart programs from autostart
|
|
||||||
args:
|
|
||||||
- name: program
|
|
||||||
help: Program to add to autostart
|
|
||||||
default: "*"
|
|
||||||
completions:
|
|
||||||
- $(autostart-manage list)
|
|
||||||
filename: systemctl.sh
|
|
||||||
- name: start
|
|
||||||
help: Start programs from autostart
|
|
||||||
args:
|
|
||||||
- name: program
|
|
||||||
help: Program to start to autostart
|
|
||||||
default: "*"
|
|
||||||
completions:
|
|
||||||
- $(autostart-manage list)
|
|
||||||
filename: systemctl.sh
|
|
||||||
- name: status
|
|
||||||
help: Check status of programs from autostart
|
|
||||||
args:
|
|
||||||
- name: program
|
|
||||||
help: Program to check status on
|
|
||||||
default: "*"
|
|
||||||
completions:
|
|
||||||
- $(autostart-manage list)
|
|
||||||
filename: systemctl.sh
|
|
||||||
- name: stop
|
|
||||||
help: Stop programs from autostart
|
|
||||||
args:
|
|
||||||
- name: program
|
|
||||||
help: Program to stop
|
|
||||||
default: "*"
|
|
||||||
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
|
|
||||||
args:
|
|
||||||
- name: program
|
|
||||||
required: true
|
|
||||||
help: Program to log
|
|
||||||
completions:
|
|
||||||
- $(autostart-manage list)
|
|
||||||
- name: exec
|
|
||||||
help: Execute a single program from autostart
|
|
||||||
args:
|
|
||||||
- name: program
|
|
||||||
required: true
|
|
||||||
help: Program to execute
|
|
||||||
completions:
|
|
||||||
- $(autostart-manage list)
|
|
||||||
- name: run
|
|
||||||
help: Run all programs
|
|
||||||
- name: run-wayland
|
|
||||||
help: Run all the wayland specific tasks and all programs
|
|
||||||
- name: run-xorg
|
|
||||||
help: Run all the xorg specific tasks and all programs
|
|
|
@ -1,11 +0,0 @@
|
||||||
#!/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
|
|
|
@ -1,3 +0,0 @@
|
||||||
#!/usr/bin/env bash
|
|
||||||
|
|
||||||
send_completions
|
|
|
@ -1,6 +0,0 @@
|
||||||
#!/usr/bin/env bash
|
|
||||||
|
|
||||||
program=${args[program]:?}
|
|
||||||
|
|
||||||
sleep "$(_get_autostart_delay "$program")"
|
|
||||||
bash -c "$(_get_autostart_cmd "$program")"
|
|
|
@ -1,9 +0,0 @@
|
||||||
#!/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'
|
|
|
@ -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" "$*"; }
|
|
|
@ -1,77 +0,0 @@
|
||||||
#!/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' "*"
|
|
||||||
}
|
|
|
@ -1,26 +0,0 @@
|
||||||
#!/usr/bin/env bash
|
|
||||||
|
|
||||||
_deploy_service_file() {
|
|
||||||
cat <<EOF > "$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 <<EOF > "$1"
|
|
||||||
[Unit]
|
|
||||||
Description=Current graphical user session
|
|
||||||
Documentation=man:systemd.special(7)
|
|
||||||
RefuseManualStart=no
|
|
||||||
StopWhenUnneeded=no
|
|
||||||
EOF
|
|
||||||
}
|
|
|
@ -1,3 +0,0 @@
|
||||||
#!/usr/bin/env bash
|
|
||||||
|
|
||||||
_list "*"
|
|
|
@ -1,3 +0,0 @@
|
||||||
#!/usr/bin/env bash
|
|
||||||
|
|
||||||
journalctl --user -fu "autostart@${args[program]:?}.service"
|
|
|
@ -1,3 +0,0 @@
|
||||||
#!/usr/bin/env bash
|
|
||||||
|
|
||||||
systemctl --user start autostart.target
|
|
|
@ -1,5 +0,0 @@
|
||||||
#!/usr/bin/env bash
|
|
||||||
|
|
||||||
_autostart_run_graphical
|
|
||||||
|
|
||||||
killall -SIGUSR2 waybar
|
|
|
@ -1,12 +0,0 @@
|
||||||
#!/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
|
|
|
@ -1,11 +0,0 @@
|
||||||
#!/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[@]}"
|
|
|
@ -1,9 +0,0 @@
|
||||||
#!/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[@]}"
|
|
2220
output/autostart-manage
Executable file
2220
output/autostart-manage
Executable file
File diff suppressed because it is too large
Load diff
6
run.sh
6
run.sh
|
@ -1,11 +1,7 @@
|
||||||
#!/usr/bin/env sh
|
#!/usr/bin/env sh
|
||||||
|
|
||||||
target=$(cat .target)
|
|
||||||
|
|
||||||
[ -n "$target" ] || exit 1
|
|
||||||
|
|
||||||
make generate
|
make generate
|
||||||
|
|
||||||
printf "\nBuild complete. Running...\n==========================\n\n"
|
printf "\nBuild complete. Running...\n==========================\n\n"
|
||||||
|
|
||||||
time "./output/$target" "$@"
|
time ./autoinstall "$@"
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
name: autoinstall
|
name: autoinstall
|
||||||
help: Install files, repository and else
|
help: Install files, repository and else
|
||||||
version: 0.1.3
|
version: 0.1.4
|
||||||
|
|
||||||
flags:
|
flags:
|
||||||
- long: --clean
|
- long: --clean
|
Loading…
Reference in a new issue