.dotfiles/.config/cfg_backups/251123_00h02m01s/.local/bin/hyde-shell
2026-01-18 21:08:16 -07:00

197 lines
5.2 KiB
Bash
Executable File

#!/usr/bin/env bash
# This script will soon be used to resolve $PATHS and LIB_DIR specific to hyde
# wallbash script can source this script to resolve the paths cleanly on a separate shell
if [[ -z "${BASH_SOURCE[0]}" ]]; then
echo "Script is sourced"
EXECUTABLE="${0}"
else
EXECUTABLE="${BASH_SOURCE[0]}"
fi
BIN_DIR=$(dirname "$(which "${EXECUTABLE:-hyde-shell}")")
LIB_DIR="${BIN_DIR}/../lib"
SHARE_DIR="${BIN_DIR}/../share"
PATH="$BIN_DIR:$LIB_DIR/hyde:$PATH" #! I added this to the PATH to make sure that the hyde commands are available in the shell
export BIN_DIR LIB_DIR SHARE_DIR
# shellcheck disable=SC1091
if ! source "${LIB_DIR}/hyde/globalcontrol.sh"; then
echo "Error: Could not load HyDE, broken installation?"
exit 1
fi
USAGE() {
cat <<USAGE
Usage: $(basename "$0") [command]
Commands:
--help, help, -h : Display this help message
-i, interactive : Start an interactive shell
-r, reload : Reload HyDE
zoom : Zoom in/out Hyprland
wallbash : Execute a wallbash script
Available HyDE commands:
$(list_script)
USAGE
}
interactive_shell() {
history_file="/tmp/.hyde_shell_history"
touch "$history_file"
history -r "$history_file"
while true; do
read -rep "hyde-shell> " cmd
if [[ "$cmd" == "exit" ]]; then
break
elif declare -f "${cmd%% *}" >/dev/null; then
eval "$cmd"
history -s "$cmd"
history -w "$history_file"
else
echo "Available commands:"
compgen -A function
echo -e "\e[31mCommand not found: $cmd\e[0m"
echo -e "\e[32mAvailable commands:\e[0m"
compgen -A function | while read -r function; do
echo -e "\e[34m$function\e[0m"
done
fi
done
}
zoom() { #? Zoom in/out Hyprland
# case
intensity=${2:-0.1}
local cursor_state
local cursor_state
cursor_state="$(hyprctl getoption cursor:no_hardware_cursors 1 -j | jq .int)"
trap 'hyprctl -q keyword cursor:no_hardware_cursors "$cursor_state"' EXIT
case $1 in
in) #? Zoom in
hyprctl -q keyword cursor:no_hardware_cursors 1
hyprctl -q keyword cursor:zoom_factor "$(hyprctl getoption cursor:zoom_factor -j | jq --arg zoomFactor "$intensity" '.float + ($zoomFactor | tonumber)')"
;;
out) #? Zoom out
hyprctl -q keyword cursor:no_hardware_cursors 1
hyprctl -q keyword cursor:zoom_factor "$(
hyprctl getoption cursor:zoom_factor -j | jq --arg zoomFactor "$intensity" '
if (.float - ($zoomFactor | tonumber)) < 1 then 1 else (.float - ($zoomFactor | tonumber)) end'
)"
;;
reset) #? Reset Zoom
hyprctl -q keyword cursor:zoom_factor 1
;;
*)
echo "Usage: zoom [in|out|reset] [intensity]"
;;
esac
}
call_wallbashScript() {
local scriptName=$1
shift
local args=("${@}")
local dirs=("${wallbashDirs[@]}")
sanitized_dirs=()
for dir in "${dirs[@]}"; do
if [[ -d "$dir" ]]; then
sanitized_dirs+=("$dir")
fi
done
dirs=("${sanitized_dirs[@]}")
script_path=$(find "${dirs[@]}" -type f -path "*/scripts/*" -name "${scriptName}.sh" -exec echo {} \; -quit)
for func in $(compgen -A function); do
export -f "${func?}"
done
if [[ -n "$script_path" ]]; then
"$script_path" "${args[@]}"
else
case $scriptName in
*)
echo "Usage: wallbash [script-name] [args]"
echo "Executes the specified wallbash script with the provided arguments."
echo "Available scripts:"
for dir in "${dirs[@]}"; do
if [[ -d "$dir" ]]; then
echo -e "\n[ $dir ]"
find "$dir" -type f -path "*/scripts/*" -name "*.sh" -exec basename {} \;
fi
done
;;
esac
fi
}
hyde_reload() {
print_log -sec "hyde" "Reloading HyDE"
"$LIB_DIR/hyde/swwwallcache.sh" -t ""
"$LIB_DIR/hyde/theme.switch.sh"
}
list_script() {
find "$LIB_DIR/hyde" -type f \( -name "*.sh" -o -name "*.py" \) -exec basename {} \;
}
if [[ ! "${BASH_SOURCE[0]}" != "${0}" ]]; then
case $1 in
-i | interactive)
interactive_shell
;;
-r | reload)
hyde_reload
;;
zoom)
shift
zoom "$@"
;;
wallbash)
shift
call_wallbashScript "$@"
;;
--help | help | -h)
USAGE
;;
--list-script)
list_script
;;
--list-script-path)
find "$LIB_DIR/hyde" -type f \( -name "*.sh" -o -name "*.py" \) -exec echo {} \;
;;
"")
for func in $(compgen -A function); do
export -f "${func?}"
done
;;
*)
if [ -f "${LIB_DIR}/hyde/${1}.sh" ]; then
bash "${LIB_DIR}/hyde/${1}.sh" "${@:2}"
elif [ -f "${LIB_DIR}/hyde/${1}.py" ]; then
python "${LIB_DIR}/hyde/${1}.py" "${@:2}"
elif [ -f "${LIB_DIR}/hyde/${1}" ]; then
"${LIB_DIR}/hyde/${1}" "${@:2}"
elif [ -f "${1}" ] && [ -x "${1}" ]; then
"$1" "${@:2}"
else
echo "Command not found: $1"
echo "Available commands:"
list_script
fi
;;
esac
fi