From 5562ae7986e368a2cf885b0de1ef043368f2f58f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Stig-=C3=98rjan=20Smelror?= Date: Sat, 9 Mar 2024 00:36:09 +0100 Subject: [PATCH] Update zrep initialization to use ZREP_CONFIG variable for configuration file path. Prompt user for zrep installation directory if ZREP_CONFIG doesn't exist. Add source command for .zrep_addons in .zshrc if not present. Create or update .zrep_addons file with addon handling logic. Modify zrep_enable and zrep_disable functions to use ZREP_CONFIG variable. Update main function to call zrep_load_config. Ensure proper sourcing of .zrep_addons after enabling/disabling packages. Include necessary error handling and informative messages. - Sat, 09 Mar 2024 00:36:09 +0100 --- zrep | 136 +++++++++++++++++++++++++++++------------------------------ 1 file changed, 67 insertions(+), 69 deletions(-) diff --git a/zrep b/zrep index 18297e8..d51a679 100755 --- a/zrep +++ b/zrep @@ -85,46 +85,59 @@ function zrep_msg() { } function zrep_init() { - - local config_file="$HOME/.zreprc" local zshrc_file="$HOME/.zshrc" + local addons_file="$HOME/.zrep_addons" local install_dir # Check if .zreprc exists - if [[ ! -f $config_file ]]; then - echo "$config_file not found. Creating it..." + if [[ ! -f $ZREP_CONFIG ]]; then + echo "$ZREP_CONFIG not found. Creating it..." # Prompt user for install directory - read "?Enter zrep installation directory [$HOME/.zrep]: " install_dir - install_dir=${install_dir:-$HOME/.zrep} + read "install_dir?Enter zrep installation directory [$HOME/.zrep]: " + install_dir=${install_dir:-"$HOME/.zrep"} # Write to .zreprc - echo "[main]" > $config_file - echo "zrep_install_dir = $install_dir" >> $config_file + echo "[main]" > $ZREP_CONFIG + echo "zrep_install_dir='$install_dir'" >> "$ZREP_CONFIG" else - echo "Running zini $config_file" - zini $config_file - echo "Setting install_dir" - install_dir=${config[zrep_install_dir]} - echo "install_dir=${install_dir}" + echo "Loading configuration from $ZREP_CONFIG" + zini $ZREP_CONFIG + install_dir=${config[main_zrep_install_dir]} fi # Ensure zrep_install_dir exists mkdir -p "$install_dir" - # Update or add fpath in .zshrc, ensuring no duplicate or empty entries - if ! grep -q "fpath=(.*$install_dir)" "$zshrc_file"; then - echo "Adding zrep installation directory to fpath in .zshrc..." - echo "fpath=('$install_dir' \$fpath)" >> "$zshrc_file" - if ! grep -q "^export fpath" "$zshrc_file"; then - echo "export fpath" >> "$zshrc_file" - fi - else - echo "zrep installation directory ($install_dir) is already included in fpath." + # Check if .zshrc already sources .zrep_addons, if not, add it + if ! grep -q "source $addons_file" "$zshrc_file"; then + echo "Adding source command for .zrep_addons to .zshrc..." + echo "source $addons_file" >> "$zshrc_file" fi - source ${zshrc_file} - echo "zrep initialization complete." + # Create or update the .zrep_addons file + if [[ ! -f $addons_file ]]; then + echo "Creating file $addons_file..." + cat > "$addons_file" < /dev/null; then @@ -370,7 +382,7 @@ function zrep_parse_installed_json() { } function zrep_parse_package_name() { - echo "Looking for package ${1}" + # echo "Looking for package ${1}" package_name="$1" installed_json="${config[main_zrep_install_dir]}/installed.json" author="${package_name%/*}" @@ -392,8 +404,13 @@ function zrep_enable() { # Assuming zrep_parse_package_name sets 'addon_path' correctly # and 'package_name' is in 'author/script' format - # Load existing addons from .zrep_addons - source ~/.zrep_addons + # Initialize addons array if .zrep_addons does not exist + if [ ! -f "${config[main_zrep_install_dir]}/.addons" ]; then + addons=() + else + # Load existing addons from ${config[main_zrep_install_dir]}/.addons + source "${config[main_zrep_install_dir]}/.addons" + fi # Check if the addon is already enabled local addon_exists=0 @@ -419,27 +436,14 @@ function zrep_enable() { echo " '$addon'" done echo ")" - echo - echo 'if [[ -n ${addons[@]} ]]; then' - echo ' local unique_addons=()' - echo ' for addon in "${addons[@]}"; do' - echo ' if [[ ! " ${fpath[@]} " =~ " ${addon} " ]]; then' - echo ' unique_addons+=("$addon")' - echo ' fi' - echo ' done' - echo ' if [[ ${#unique_addons[@]} -gt 0 ]]; then' - echo ' fpath=("${unique_addons[@]}" $fpath)' - echo ' fi' - echo ' export fpath' - echo 'else' - echo ' echo "zrep: No addons enabled."' - echo 'fi' - } > ${HOME}/.zrep_addons + } > "${config[main_zrep_install_dir]}/.addons" # Source the updated .zrep_addons to apply changes - source ${HOME}/.zrep_addons + source "${HOME}/.zrep_addons" + autoload -Uz "${script}" - echo "Package '$package_name' has been enabled and added to fpath." + zrep_msg info "\nPackage '$package_name' has been enabled and added to fpath." + zrep_msg info "You may have to run 'source ~/.zrep_addons' to get access to it." } function zrep_disable() { @@ -449,8 +453,13 @@ function zrep_disable() { # Assuming zrep_parse_package_name sets 'addon_path' correctly # and 'package_name' is in 'author/script' format - # Load existing addons from .zrep_addons - source ${HOME}/.zrep_addons + # Initialize addons array if .zrep_addons does not exist + if [ ! -f "${config[main_zrep_install_dir]}/.addons" ]; then + addons=() + else + # Load existing addons from ${config[main_zrep_install_dir]}/.addons + source "${config[main_zrep_install_dir]}/.addons" + fi # Initialize a new array for addons local new_addons=() @@ -468,7 +477,7 @@ function zrep_disable() { done if ((found == 0)); then - echo "Package '$package_name' is not currently enabled." + zrep_msg debug "\nPackage '$package_name' is not currently enabled." return 0 fi @@ -479,27 +488,14 @@ function zrep_disable() { echo " '$addon'" done echo ")" - echo - echo 'if [[ -n ${addons[@]} ]]; then' - echo ' local unique_addons=()' - echo ' for addon in "${addons[@]}"; do' - echo ' if [[ ! " ${fpath[@]} " =~ " ${addon} " ]]; then' - echo ' unique_addons+=("$addon")' - echo ' fi' - echo ' done' - echo ' if [[ ${#unique_addons[@]} -gt 0 ]]; then' - echo ' fpath=("${unique_addons[@]}" $fpath)' - echo ' fi' - echo ' export fpath' - echo 'else' - echo ' echo "zrep: No addons enabled."' - echo 'fi' - } > ${HOME}/.zrep_addons + } > ${config[main_zrep_install_dir]}/.addons # Source the updated .zrep_addons to apply changes source ${HOME}/.zrep_addons + unfunction ${script} 2>/dev/null || true - echo "Package '$package_name' has been disabled and removed from fpath." + zrep_msg info "\nPackage '$package_name (${script})' has been disabled and removed from fpath." + zrep_msg info "You may have to run 'source ~/.zrep_addons' to remove it from your shell." } # Help function to display available options @@ -544,7 +540,7 @@ function main() { zrep_main_version_string - load_config + zrep_load_config # Check if the second argument is "help" and the first argument is not empty if [[ "${2}" == "help" && -n "${1}" ]]; then @@ -586,9 +582,11 @@ function main() { ;; enable) zrep_enable ${2} + source "${HOME}/.zrep_addons" ;; disable) zrep_disable ${2} + source "${HOME}/.zrep_addons" ;; *) zrep_help