Add add-zsh-helper.sh
This commit is contained in:
parent
79514428fa
commit
5b1a36db38
188
add-zsh-helper.sh
Normal file
188
add-zsh-helper.sh
Normal file
@ -0,0 +1,188 @@
|
|||||||
|
#!/usr/bin/env bash
|
||||||
|
# Installs ffx Zsh wrappers globally via ~/.ffx.zshrc.snippet.
|
||||||
|
# Prompts for ffx.sh's directory, validates it, or tries to find it automatically.
|
||||||
|
|
||||||
|
set -euo pipefail
|
||||||
|
|
||||||
|
SNIPPET="$HOME/.ffx.zshrc.snippet"
|
||||||
|
ZSHRC="$HOME/.zshrc"
|
||||||
|
|
||||||
|
find_ffx() {
|
||||||
|
local found
|
||||||
|
|
||||||
|
# First check the current directory.
|
||||||
|
if [[ -f "./ffx.sh" ]]; then
|
||||||
|
printf '%s\n' "$(cd . && pwd)/ffx.sh"
|
||||||
|
return 0
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Search common locations, excluding slow/system-wide paths.
|
||||||
|
found="$(
|
||||||
|
find "$HOME/Desktop" "$HOME/Downloads" "$HOME/Documents" "$HOME" \
|
||||||
|
-maxdepth 5 \
|
||||||
|
-type f \
|
||||||
|
-name 'ffx.sh' \
|
||||||
|
-print 2>/dev/null |
|
||||||
|
head -n 1 || true
|
||||||
|
)"
|
||||||
|
|
||||||
|
[[ -n "$found" ]] || return 1
|
||||||
|
printf '%s\n' "$found"
|
||||||
|
}
|
||||||
|
|
||||||
|
echo "ffx.sh installer"
|
||||||
|
echo
|
||||||
|
|
||||||
|
read -r -p "Directory containing ffx.sh (Enter to auto-find): " FFX_DIR
|
||||||
|
|
||||||
|
if [[ -n "$FFX_DIR" ]]; then
|
||||||
|
FFX_DIR="${FFX_DIR/#\~/$HOME}"
|
||||||
|
FFX_SCRIPT="$FFX_DIR/ffx.sh"
|
||||||
|
else
|
||||||
|
echo "Searching for ffx.sh..."
|
||||||
|
FFX_SCRIPT="$(find_ffx || true)"
|
||||||
|
|
||||||
|
if [[ -z "$FFX_SCRIPT" ]]; then
|
||||||
|
echo "Could not automatically find ffx.sh."
|
||||||
|
read -r -p "Enter the full path to ffx.sh: " FFX_SCRIPT
|
||||||
|
FFX_SCRIPT="${FFX_SCRIPT/#\~/$HOME}"
|
||||||
|
else
|
||||||
|
echo "Found: $FFX_SCRIPT"
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [[ -d "$FFX_SCRIPT" ]]; then
|
||||||
|
FFX_SCRIPT="$FFX_SCRIPT/ffx.sh"
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [[ ! -f "$FFX_SCRIPT" ]]; then
|
||||||
|
echo "Error: ffx.sh was not found at:"
|
||||||
|
echo " $FFX_SCRIPT"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [[ ! -x "$FFX_SCRIPT" ]]; then
|
||||||
|
echo "Making ffx.sh executable..."
|
||||||
|
chmod +x "$FFX_SCRIPT"
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [[ ! -x "$FFX_SCRIPT" ]]; then
|
||||||
|
echo "Error: ffx.sh is not executable:"
|
||||||
|
echo " $FFX_SCRIPT"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
if ! "$FFX_SCRIPT" --version >/dev/null 2>&1; then
|
||||||
|
echo "Error: ffx.sh exists but could not run successfully:"
|
||||||
|
echo " $FFX_SCRIPT"
|
||||||
|
echo
|
||||||
|
echo "Try manually:"
|
||||||
|
echo " \"$FFX_SCRIPT\" --version"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
FFX_SCRIPT="$(cd "$(dirname "$FFX_SCRIPT")" && pwd)/ffx.sh"
|
||||||
|
|
||||||
|
echo "Using ffx.sh:"
|
||||||
|
echo " $FFX_SCRIPT"
|
||||||
|
|
||||||
|
# Write / replace the separate Zsh snippet.
|
||||||
|
cat > "$SNIPPET" <<EOF
|
||||||
|
# --- ffx zsh wrappers ---
|
||||||
|
# Generated by install-ffx-zsh.sh
|
||||||
|
FFX_SCRIPT="$FFX_SCRIPT"
|
||||||
|
|
||||||
|
# star.mp3 -> star333033.mp3
|
||||||
|
ffx_output_name() {
|
||||||
|
local input="\$1"
|
||||||
|
local dir base ext hash
|
||||||
|
|
||||||
|
dir="\${input:h}"
|
||||||
|
base="\${input:t}"
|
||||||
|
|
||||||
|
if [[ "\$base" == *.* && "\$base" != .* ]]; then
|
||||||
|
ext=".\${base##*.}"
|
||||||
|
base="\${base%.*}"
|
||||||
|
else
|
||||||
|
ext=""
|
||||||
|
fi
|
||||||
|
|
||||||
|
hash="\$(printf '%06d' "\$(( (RANDOM << 1 ^ RANDOM) % 1000000 ))")"
|
||||||
|
print -r -- "\${dir}/\${base}\${hash}\${ext}"
|
||||||
|
}
|
||||||
|
|
||||||
|
bass() {
|
||||||
|
local input="\$1" percent="\$2" fine_db="\$3"
|
||||||
|
local output="\${4:-\$(ffx_output_name "\$input")}"
|
||||||
|
"\$FFX_SCRIPT" bass "\$input" "\$percent" "\$fine_db" "\$output"
|
||||||
|
}
|
||||||
|
|
||||||
|
treble() {
|
||||||
|
local input="\$1" percent="\$2" fine_db="\$3"
|
||||||
|
local output="\${4:-\$(ffx_output_name "\$input")}"
|
||||||
|
"\$FFX_SCRIPT" treble "\$input" "\$percent" "\$fine_db" "\$output"
|
||||||
|
}
|
||||||
|
|
||||||
|
volume() {
|
||||||
|
local input="\$1" db="\$2"
|
||||||
|
local output="\${3:-\$(ffx_output_name "\$input")}"
|
||||||
|
"\$FFX_SCRIPT" volume "\$input" "\$db" "\$output"
|
||||||
|
}
|
||||||
|
|
||||||
|
distort() {
|
||||||
|
local input="\$1" drive="\${2:-2}"
|
||||||
|
local output="\${3:-\$(ffx_output_name "\$input")}"
|
||||||
|
"\$FFX_SCRIPT" distort "\$input" "\$drive" "\$output"
|
||||||
|
}
|
||||||
|
|
||||||
|
trim() {
|
||||||
|
local input="\$1" start="\$2" end="\$3"
|
||||||
|
local output="\${4:-\$(ffx_output_name "\$input")}"
|
||||||
|
"\$FFX_SCRIPT" trim "\$input" "\$start" "\$end" "\$output"
|
||||||
|
}
|
||||||
|
|
||||||
|
tempo() {
|
||||||
|
local input="\$1" speed="\$2"
|
||||||
|
local output="\${3:-\$(ffx_output_name "\$input")}"
|
||||||
|
"\$FFX_SCRIPT" tempo "\$input" "\$speed" "\$output"
|
||||||
|
}
|
||||||
|
|
||||||
|
pitch() {
|
||||||
|
local input="\$1" semitones="\$2"
|
||||||
|
local output="\${3:-\$(ffx_output_name "\$input")}"
|
||||||
|
"\$FFX_SCRIPT" pitch "\$input" "\$semitones" "\$output"
|
||||||
|
}
|
||||||
|
|
||||||
|
bassboost() {
|
||||||
|
local input="\$1"
|
||||||
|
local output="\${2:-\$(ffx_output_name "\$input")}"
|
||||||
|
"\$FFX_SCRIPT" bass "\$input" 5 1 "\$output"
|
||||||
|
}
|
||||||
|
|
||||||
|
grunge() {
|
||||||
|
local input="\$1"
|
||||||
|
local output="\${2:-\$(ffx_output_name "\$input")}"
|
||||||
|
"\$FFX_SCRIPT" distort "\$input" 2 "\$output"
|
||||||
|
}
|
||||||
|
EOF
|
||||||
|
|
||||||
|
touch "$ZSHRC"
|
||||||
|
|
||||||
|
grep -qxF 'source "$HOME/.ffx.zshrc.snippet"' "$ZSHRC" ||
|
||||||
|
printf '\nsource "$HOME/.ffx.zshrc.snippet"\n' >> "$ZSHRC"
|
||||||
|
|
||||||
|
if [[ -n "${ZSH_VERSION:-}" ]]; then
|
||||||
|
source "$ZSHRC"
|
||||||
|
fi
|
||||||
|
|
||||||
|
echo
|
||||||
|
echo "installed helper: $SNIPPET"
|
||||||
|
echo "added lines to: $ZSHRC"
|
||||||
|
echo
|
||||||
|
echo "reload your current zsh session with:"
|
||||||
|
echo " source ~/.zshrc"
|
||||||
|
echo
|
||||||
|
echo "examples:"
|
||||||
|
echo " bassboost ~/Music/song.mp3"
|
||||||
|
echo " grunge ~/Music/song.mp3"
|
||||||
|
echo " tempo ~/Music/song.mp3 1.5"
|
||||||
Loading…
x
Reference in New Issue
Block a user