mirror of
https://github.com/omacom/omarchy.git
synced 2026-09-28 14:23:08 +08:00
The runner already rejects a slash, a bare . or .. The installer still joined the type into hooks/<type>.d before mkdir/cp, so a name nothing can run could still land on disk.
43 lines
1.2 KiB
Bash
Executable File
43 lines
1.2 KiB
Bash
Executable File
#!/bin/bash
|
|
|
|
# omarchy:summary=Install a hook into ~/.config/omarchy/hooks/<type>.d/
|
|
# omarchy:group=hook
|
|
# omarchy:name=install
|
|
# omarchy:args=<type> <file>
|
|
# omarchy:examples=omarchy hook install post-update ~/my-hook
|
|
|
|
set -e
|
|
|
|
if (( $# != 2 )); then
|
|
echo "Usage: omarchy-hook-install <type> <file>"
|
|
exit 1
|
|
fi
|
|
|
|
HOOK_TYPE=$1
|
|
HOOK_FILE=$2
|
|
|
|
# Hook types are the same labels omarchy-hook runs (post-update, theme-set).
|
|
# The type becomes a directory under the hooks directory. A slash would turn
|
|
# it into directory levels. A bare `.` or `..` is a name the runner already
|
|
# refuses, so installing under it would write a hook nothing can run. Refuse
|
|
# those rather than mkdir/cp into them. Dots inside a name (a..b) are fine.
|
|
if [[ -z $HOOK_TYPE || $HOOK_TYPE == */* || $HOOK_TYPE == "." || $HOOK_TYPE == ".." ]]; then
|
|
echo "Invalid hook name: $HOOK_TYPE" >&2
|
|
exit 2
|
|
fi
|
|
|
|
HOOK_DIR="$HOME/.config/omarchy/hooks/$HOOK_TYPE.d"
|
|
HOOK_NAME=$(basename "$HOOK_FILE")
|
|
HOOK_PATH="$HOOK_DIR/$HOOK_NAME"
|
|
|
|
if [[ ! -f $HOOK_FILE ]]; then
|
|
echo "Hook file not found: $HOOK_FILE"
|
|
exit 1
|
|
fi
|
|
|
|
mkdir -p "$HOOK_DIR"
|
|
cp "$HOOK_FILE" "$HOOK_PATH"
|
|
chmod 755 "$HOOK_PATH"
|
|
|
|
echo "Installed $HOOK_TYPE hook: $HOOK_PATH"
|