#!/usr/bin/env bash # strict mode set -euo pipefail IFS=$'\n\t' # Script constants readonly DOTFILES_ROOT="$HOME/dotfiles" readonly DOTFILES_BIN="$DOTFILES_ROOT/bin" readonly DOTFILES_CONFIG="$DOTFILES_ROOT/config/config.yaml" # Source helper functions if [[ ! -f "$DOTFILES_BIN/helpers/functions.sh" ]]; then echo "Error: Required helper functions not found" exit 1 fi source "$DOTFILES_BIN/helpers/functions.sh" export DOTFILES_CONFIG # Command functions update() { local update_script="$DOTFILES_BIN/actions/update.sh" if [[ ! -x "$update_script" ]]; then printfe "%s\n" "red" "Error: Update script not found or not executable" return 1 fi "$update_script" $@ } term() { local term_script="$DOTFILES_BIN/actions/term.sh" if [[ ! -x "$term_script" ]]; then printfe "%s\n" "red" "Error: Terminal script not found or not executable" return 1 fi "$term_script" "$@" } help() { local help_script="$DOTFILES_BIN/actions/help.sh" if [[ ! -x "$help_script" ]]; then printfe "%s\n" "red" "Error: Help script not found or not executable" return 1 fi "$help_script" "$@" } secrets() { local secrets_script="$DOTFILES_BIN/actions/secrets.sh" if [[ ! -x "$secrets_script" ]]; then printfe "%s\n" "red" "Error: Secrets script not found or not executable" return 1 fi "$secrets_script" "$@" } ensure_git_hooks() { local hooks_dir="$DOTFILES_ROOT/.git/hooks" local target_link="$DOTFILES_BIN/actions/git" # Validate target directory exists if [[ ! -d "$target_link" ]]; then printfe "%s\n" "red" "Error: Git hooks source directory does not exist: $target_link" return 1 fi # Handle existing symlink if [[ -L "$hooks_dir" ]]; then local current_link current_link=$(readlink "$hooks_dir") if [[ "$current_link" != "$target_link" ]]; then printfe "%s\n" "yellow" "Incorrect git hooks symlink found. Removing and recreating..." rm "$hooks_dir" else return 0 fi fi # Handle existing directory if [[ -d "$hooks_dir" ]]; then printfe "%s\n" "yellow" "Removing existing hooks directory..." rm -rf "$hooks_dir" fi # Create new symlink if ln -s "$target_link" "$hooks_dir"; then printfe "%s\n" "green" "Git hooks successfully configured!" else printfe "%s\n" "red" "Failed to create git hooks symlink" return 1 fi } main() { # Ensure we're in the correct directory if [[ ! -d "$DOTFILES_ROOT" ]]; then printfe "%s\n" "red" "Error: Dotfiles directory not found" exit 1 fi # Setup git hooks ensure_git_hooks || exit 1 # Parse commands case "${1:-help}" in update) shift; update "$@" ;; help) shift; help "$@" ;; term) shift; term "$@" ;; secrets) shift; secrets "$@" ;; *) help ;; esac } main "$@"