fix: improve install script PATH handling for more shells

- Add ZDOTDIR support for zsh users who relocate their config
- Add XDG_CONFIG_HOME paths for zsh and bash
- Add ash and sh shell support (Alpine/BusyBox)
- Warn user instead of silently creating .bashrc when no config found
- Add user feedback on what file was modified
- Handle non-writable config files gracefully
This commit is contained in:
0xallam
2026-01-18 19:08:02 -08:00
committed by Ahmed Allam
parent 86f8835ccb
commit 7417e6f8d0

View File

@@ -209,11 +209,16 @@ check_docker() {
add_to_path() { add_to_path() {
local config_file=$1 local config_file=$1
local command=$2 local command=$2
if grep -Fxq "$command" "$config_file" 2>/dev/null; then if grep -Fxq "$command" "$config_file" 2>/dev/null; then
return 0 print_message info "${MUTED}PATH already configured in ${NC}$config_file"
elif [[ -w $config_file ]]; then elif [[ -w $config_file ]]; then
echo -e "\n# strix" >> "$config_file" echo -e "\n# strix" >> "$config_file"
echo "$command" >> "$config_file" echo "$command" >> "$config_file"
print_message info "${MUTED}Successfully added ${NC}strix ${MUTED}to \$PATH in ${NC}$config_file"
else
print_message warning "Manually add the directory to $config_file (or similar):"
print_message info " $command"
fi fi
} }
@@ -226,13 +231,19 @@ setup_path() {
config_files="$HOME/.config/fish/config.fish" config_files="$HOME/.config/fish/config.fish"
;; ;;
zsh) zsh)
config_files="$HOME/.zshrc $HOME/.zshenv" config_files="${ZDOTDIR:-$HOME}/.zshrc ${ZDOTDIR:-$HOME}/.zshenv $XDG_CONFIG_HOME/zsh/.zshrc $XDG_CONFIG_HOME/zsh/.zshenv"
;; ;;
bash) bash)
config_files="$HOME/.bashrc $HOME/.bash_profile $HOME/.profile" config_files="$HOME/.bashrc $HOME/.bash_profile $HOME/.profile $XDG_CONFIG_HOME/bash/.bashrc $XDG_CONFIG_HOME/bash/.bash_profile"
;;
ash)
config_files="$HOME/.ashrc $HOME/.profile /etc/profile"
;;
sh)
config_files="$HOME/.ashrc $HOME/.profile /etc/profile"
;; ;;
*) *)
config_files="$HOME/.bashrc $HOME/.profile" config_files="$HOME/.bashrc $HOME/.bash_profile $XDG_CONFIG_HOME/bash/.bashrc $XDG_CONFIG_HOME/bash/.bash_profile"
;; ;;
esac esac
@@ -245,23 +256,36 @@ setup_path() {
done done
if [[ -z $config_file ]]; then if [[ -z $config_file ]]; then
config_file="$HOME/.bashrc" print_message warning "No config file found for $current_shell. You may need to manually add to PATH:"
touch "$config_file" print_message info " export PATH=$INSTALL_DIR:\$PATH"
fi elif [[ ":$PATH:" != *":$INSTALL_DIR:"* ]]; then
if [[ ":$PATH:" != *":$INSTALL_DIR:"* ]]; then
case $current_shell in case $current_shell in
fish) fish)
add_to_path "$config_file" "fish_add_path $INSTALL_DIR" add_to_path "$config_file" "fish_add_path $INSTALL_DIR"
;; ;;
zsh)
add_to_path "$config_file" "export PATH=$INSTALL_DIR:\$PATH"
;;
bash)
add_to_path "$config_file" "export PATH=$INSTALL_DIR:\$PATH"
;;
ash)
add_to_path "$config_file" "export PATH=$INSTALL_DIR:\$PATH"
;;
sh)
add_to_path "$config_file" "export PATH=$INSTALL_DIR:\$PATH"
;;
*) *)
add_to_path "$config_file" "export PATH=\"$INSTALL_DIR:\$PATH\"" export PATH=$INSTALL_DIR:$PATH
print_message warning "Manually add the directory to $config_file (or similar):"
print_message info " export PATH=$INSTALL_DIR:\$PATH"
;; ;;
esac esac
fi fi
if [ -n "${GITHUB_ACTIONS-}" ] && [ "${GITHUB_ACTIONS}" == "true" ]; then if [ -n "${GITHUB_ACTIONS-}" ] && [ "${GITHUB_ACTIONS}" == "true" ]; then
echo "$INSTALL_DIR" >> "$GITHUB_PATH" echo "$INSTALL_DIR" >> "$GITHUB_PATH"
print_message info "Added $INSTALL_DIR to \$GITHUB_PATH"
fi fi
} }