#!/usr/bin/env bash # App enablement and editor selection helpers. enable_asusctl() { local log="$1" if command -v asusctl >/dev/null 2>&1; then local OVERLAY_SA="config/hypr/configs/Startup_Apps.conf" mkdir -p "$(dirname "$OVERLAY_SA")" touch "$OVERLAY_SA" grep -qx 'exec-once = rog-control-center' "$OVERLAY_SA" || echo 'exec-once = rog-control-center' >>"$OVERLAY_SA" fi } enable_blueman() { local log="$1" if command -v blueman-applet >/dev/null 2>&1; then local OVERLAY_SA="config/hypr/configs/Startup_Apps.conf" mkdir -p "$(dirname "$OVERLAY_SA")" touch "$OVERLAY_SA" grep -qx 'exec-once = blueman-applet' "$OVERLAY_SA" || echo 'exec-once = blueman-applet' >>"$OVERLAY_SA" fi } enable_ags() { local log="$1" if command -v ags >/dev/null 2>&1; then echo "${INFO:-[INFO]} AGS detected - enabling in startup and refresh scripts" 2>&1 | tee -a "$log" local OVERLAY_SA="config/hypr/configs/Startup_Apps.conf" mkdir -p "$(dirname "$OVERLAY_SA")" touch "$OVERLAY_SA" grep -qx 'exec-once = ags' "$OVERLAY_SA" || echo 'exec-once = ags' >>"$OVERLAY_SA" sed -i '/#ags -q && ags &/s/^#//' config/hypr/scripts/RefreshNoWaybar.sh sed -i '/#ags -q && ags &/s/^#//' config/hypr/scripts/Refresh.sh fi } enable_quickshell() { local log="$1" if command -v qs >/dev/null 2>&1; then echo "${INFO:-[INFO]} Quickshell detected - enabling in startup and refresh scripts" 2>&1 | tee -a "$log" local OVERLAY_SA="config/hypr/configs/Startup_Apps.conf" mkdir -p "$(dirname "$OVERLAY_SA")" touch "$OVERLAY_SA" grep -qx 'exec-once = qs' "$OVERLAY_SA" || echo 'exec-once = qs' >>"$OVERLAY_SA" sed -i '/#pkill qs && qs &/s/^#//' config/hypr/scripts/RefreshNoWaybar.sh sed -i '/#pkill qs && qs &/s/^#//' config/hypr/scripts/Refresh.sh fi } ensure_keybinds_init() { local log="$1" local OVERLAY_SA="config/hypr/configs/Startup_Apps.conf" mkdir -p "$(dirname "$OVERLAY_SA")" if ! grep -qx 'exec-once = \$scriptsDir/KeybindsLayoutInit.sh' "$OVERLAY_SA"; then echo 'exec-once = $scriptsDir/KeybindsLayoutInit.sh' >>"$OVERLAY_SA" echo "${INFO:-[INFO]} Added KeybindsLayoutInit.sh to user Startup_Apps overlay" 2>&1 | tee -a "$log" fi } install_terminal_configs() { local log="$1" # Ghostty local GHOSTTY_SRC="config/ghostty/ghostty.config" local GHOSTTY_DIR="${XDG_CONFIG_HOME:-$HOME/.config}/ghostty" local GHOSTTY_DEST="$GHOSTTY_DIR/config" if [ -f "$GHOSTTY_SRC" ]; then mkdir -p "$GHOSTTY_DIR" install -m 0644 "$GHOSTTY_SRC" "$GHOSTTY_DEST" 2>&1 | tee -a "$log" if [ -f "$GHOSTTY_DIR/wallust.conf" ]; then sed -i -E 's/^(\\s*palette\\s*=\\s*)([0-9]{1,2}):/\\1\\2=/' "$GHOSTTY_DIR/wallust.conf" 2>&1 | tee -a "$log" || true fi else echo "${ERROR:-[ERROR]} - $GHOSTTY_SRC not found; skipping Ghostty config install." 2>&1 | tee -a "$log" fi # WezTerm local WEZTERM_SRC="config/wezterm/wezterm.lua" local WEZTERM_DIR="${XDG_CONFIG_HOME:-$HOME/.config}/wezterm" local WEZTERM_DEST="$WEZTERM_DIR/wezterm.lua" if [ -f "$WEZTERM_SRC" ]; then mkdir -p "$WEZTERM_DIR" install -m 0644 "$WEZTERM_SRC" "$WEZTERM_DEST" 2>&1 | tee -a "$log" else echo "${ERROR:-[ERROR]} - $WEZTERM_SRC not found; skipping WezTerm config install." 2>&1 | tee -a "$log" fi } choose_default_editor() { local log="$1" local editor_set=0 update_editor() { local editor=$1 sed -i "s/#env = EDITOR,.*/env = EDITOR,$editor #default editor/" config/hypr/UserConfigs/01-UserDefaults.conf echo "${OK:-[OK]} Default editor set to ${MAGENTA:-}$editor${RESET:-}." 2>&1 | tee -a "$log" } if command -v nvim &>/dev/null; then printf "${INFO:-[INFO]} ${MAGENTA:-}neovim${RESET:-} is detected as installed\n" if ! read -r -p "${CAT:-[ACTION]} Do you want to make ${MAGENTA:-}neovim${RESET:-} the default editor? (y/N): " EDITOR_CHOICE /dev/null; then printf "${INFO:-[INFO]} ${MAGENTA:-}vim${RESET:-} is detected as installed\n" if read -r -p "${CAT:-[ACTION]} Do you want to make ${MAGENTA:-}vim${RESET:-} the default editor? (y/N): " EDITOR_CHOICE &1 | tee -a "$log"; } _warn() { echo "[${APP_NAME}] WARN: $*" 1>&2 | tee -a "$log"; } _err() { echo "[${APP_NAME}] ERROR: $*" 1>&2 | tee -a "$log"; } # Distro detection if grep -qi '^ID=nixos' /etc/os-release 2>/dev/null; then _warn "NixOS detected. Skipping ${APP_NAME} install in this script." return 0 fi if grep -qi '^ID=arch' /etc/os-release 2>/dev/null; then if command -v pacman >/dev/null 2>&1 && pacman -Qi weather-waybar >/dev/null 2>&1; then _log "weather-waybar already installed via pacman." return 0 fi if command -v yay >/dev/null 2>&1; then _log "Attempting to install AUR package 'weather-waybar' via yay" if yay -S --noconfirm weather-waybar; then _log "AUR install succeeded." return 0 else _warn "AUR install failed; will fall back to bundled asset." fi else _warn "yay not found on Arch; falling back to bundled asset." fi fi # Asset path validation if [[ ! -f "$ASSET" ]]; then _err "Asset not found: $ASSET" return 1 fi if ! command -v gzip >/dev/null 2>&1; then _err "Missing required command: gzip" return 1 fi # Sudo handling for /usr/bin local SUDO="" if [[ $EUID -ne 0 ]]; then if command -v sudo >/dev/null 2>&1; then SUDO="sudo" else _err "sudo not available; cannot write to ${INSTALL_PATH} as non-root" return 1 fi fi _log "Installing prebuilt binary to ${INSTALL_PATH} from ${ASSET}" if ${SUDO} sh -c "gzip -dc '$ASSET' > '${INSTALL_PATH}'" && ${SUDO} chmod 0755 "${INSTALL_PATH}"; then if "${INSTALL_PATH}" -h >/dev/null 2>&1; then _log "Installed ${APP_NAME} successfully." else _warn "${APP_NAME} installed, but a basic self-check did not run." fi else _err "Failed to install ${APP_NAME} to ${INSTALL_PATH}" return 1 fi }