Init
This commit is contained in:
commit
d6985ded7e
18 changed files with 348 additions and 0 deletions
3
.envrc
Normal file
3
.envrc
Normal file
|
@ -0,0 +1,3 @@
|
|||
use nix
|
||||
|
||||
printf '\nPlease set and export $BASHLY_SOURCE_DIR\n\n'
|
4
.gitignore
vendored
Normal file
4
.gitignore
vendored
Normal file
|
@ -0,0 +1,4 @@
|
|||
.target
|
||||
output/
|
||||
|
||||
autostart-manage/lib/send_completions.sh
|
20
Makefile
Normal file
20
Makefile
Normal file
|
@ -0,0 +1,20 @@
|
|||
target:
|
||||
@echo "Enter target directory:"
|
||||
@read target; \
|
||||
echo $$target > .target
|
||||
|
||||
get-target:
|
||||
$(eval TARGET := $(shell cat .target))
|
||||
|
||||
output-dir:
|
||||
mkdir -p ./output
|
||||
|
||||
generate: get-target output-dir
|
||||
BASHLY_SOURCE_DIR=$(TARGET) bashly generate
|
||||
|
||||
completions: generate
|
||||
BASHLY_SOURCE_DIR=$(TARGET) bashly add --force completions_script ./output/_$(TARGET)
|
||||
|
||||
deploy: completions
|
||||
cp -f ./output/$(TARGET) ~/.local/bin/
|
||||
cp -f ./output/_$(TARGET) ~/.config/completionsrc.d/
|
99
autostart-manage/bashly.yml
Normal file
99
autostart-manage/bashly.yml
Normal file
|
@ -0,0 +1,99 @@
|
|||
name: autostart-manage
|
||||
help: Manage autostart
|
||||
version: 0.1.0
|
||||
|
||||
dependencies:
|
||||
yq:
|
||||
command: [tomlq]
|
||||
help: 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
|
||||
- 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: log
|
||||
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
|
3
autostart-manage/completions_command.sh
Normal file
3
autostart-manage/completions_command.sh
Normal file
|
@ -0,0 +1,3 @@
|
|||
#!/usr/bin/env bash
|
||||
|
||||
send_completions
|
7
autostart-manage/exec_command.sh
Normal file
7
autostart-manage/exec_command.sh
Normal file
|
@ -0,0 +1,7 @@
|
|||
#!/usr/bin/env bash
|
||||
|
||||
program=${args[program]:?}
|
||||
|
||||
cmd=$(_get_autostart_cmd "$program")
|
||||
sleep "$(_get_autostart_delay "$program")"
|
||||
bash -c "$cmd"
|
9
autostart-manage/info_command.sh
Normal file
9
autostart-manage/info_command.sh
Normal file
|
@ -0,0 +1,9 @@
|
|||
#!/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'
|
42
autostart-manage/lib/colors.sh
Normal file
42
autostart-manage/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" "$*"; }
|
57
autostart-manage/lib/common.sh
Normal file
57
autostart-manage/lib/common.sh
Normal file
|
@ -0,0 +1,57 @@
|
|||
#!/usr/bin/env bash
|
||||
|
||||
_systemctl () {
|
||||
systemctl --user "${@:2}" "autostart@$1.service"
|
||||
}
|
||||
|
||||
_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"
|
||||
}
|
||||
|
||||
_list () {
|
||||
_query_autostart_toml '.value.alias // .key'
|
||||
}
|
||||
|
||||
_autostart_run_graphical () {
|
||||
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 graphical
|
||||
autostart-manage run
|
||||
}
|
||||
|
||||
_echo_table () {
|
||||
for unit in "$@"
|
||||
do
|
||||
printf "%s\t%s\t%s\t%s\n" \
|
||||
"$unit" \
|
||||
"$(_systemctl "$unit" is-enabled)" \
|
||||
"$(_systemctl "$unit" is-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'
|
||||
}
|
3
autostart-manage/list_command.sh
Normal file
3
autostart-manage/list_command.sh
Normal file
|
@ -0,0 +1,3 @@
|
|||
#!/usr/bin/env bash
|
||||
|
||||
_list
|
3
autostart-manage/log_command.sh
Normal file
3
autostart-manage/log_command.sh
Normal file
|
@ -0,0 +1,3 @@
|
|||
#!/usr/bin/env bash
|
||||
|
||||
journalctl --user -fu "autostart@${args[program]:?}.service"
|
3
autostart-manage/run_command.sh
Normal file
3
autostart-manage/run_command.sh
Normal file
|
@ -0,0 +1,3 @@
|
|||
#!/usr/bin/env bash
|
||||
|
||||
systemctl --user start autostart.target
|
5
autostart-manage/run_wayland_command.sh
Normal file
5
autostart-manage/run_wayland_command.sh
Normal file
|
@ -0,0 +1,5 @@
|
|||
#!/usr/bin/env bash
|
||||
|
||||
_autostart_run_graphical
|
||||
|
||||
killall -SIGUSR2 waybar
|
12
autostart-manage/run_xorg_command.sh
Normal file
12
autostart-manage/run_xorg_command.sh
Normal file
|
@ -0,0 +1,12 @@
|
|||
#!/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
|
14
autostart-manage/sync_command.sh
Normal file
14
autostart-manage/sync_command.sh
Normal file
|
@ -0,0 +1,14 @@
|
|||
#!/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
|
9
autostart-manage/systemctl.sh
Normal file
9
autostart-manage/systemctl.sh
Normal file
|
@ -0,0 +1,9 @@
|
|||
#!/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[@]}"
|
49
settings.yml
Normal file
49
settings.yml
Normal file
|
@ -0,0 +1,49 @@
|
|||
# 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
|
6
shell.nix
Normal file
6
shell.nix
Normal file
|
@ -0,0 +1,6 @@
|
|||
with import <nixpkgs> {};
|
||||
mkShell {
|
||||
nativeBuildInputs = [
|
||||
bashly
|
||||
];
|
||||
}
|
Loading…
Reference in a new issue