From 03c4f9fcaf9bf093e832798c81cc84f37ba3a23b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Stig-=C3=98rjan=20Smelror?= Date: Wed, 28 Feb 2024 23:41:09 +0100 Subject: [PATCH] Big update. The frontend is close to working. - Wed, 28 Feb 2024 23:41:09 +0100 --- functions/zrep_init | 43 ------ zrep | 313 +++++++++++++++++++++++++++++++++++++++++--- 2 files changed, 293 insertions(+), 63 deletions(-) delete mode 100644 functions/zrep_init diff --git a/functions/zrep_init b/functions/zrep_init deleted file mode 100644 index bd73f4b..0000000 --- a/functions/zrep_init +++ /dev/null @@ -1,43 +0,0 @@ -autoload -Uz zini -echo "zrep_init: FPATH: $fpath" -# Initialize zrep -zrep_init() { - local config_file="$HOME/.zreprc" - local zshrc_file="$HOME/.zshrc" - local install_dir - - # Check if .zreprc exists - if [[ ! -f $config_file ]]; then - echo "$config_file not found. Creating it..." - # Prompt user for install directory - read "?Enter zrep installation directory [$HOME/.zrep]: " install_dir - install_dir=${install_dir:-$HOME/.zrep} - - # Write to .zreprc - echo "[main]" > $config_file - echo "zrep_install_dir = $install_dir" >> $config_file - else - echo "Running zini $config_file" - zini $config_file - echo "Setting install_dir" - install_dir=${config[zrep_install_dir]} - echo "install_dir=${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." - fi - - source ${zshrc_file} - echo "zrep initialization complete." -} diff --git a/zrep b/zrep index fe34042..4ec4630 100755 --- a/zrep +++ b/zrep @@ -2,6 +2,10 @@ VERSION="0.0.1" # Sat-2024-02-24 ZREP="Zsh Repository Tool" +# Define the path to .zreprc +ZREP_CONFIG="$HOME/.zreprc" + +# echo "START: $fpath" function zrep_fpath() { local base_dir="$1" @@ -14,26 +18,221 @@ function zrep_fpath() { # Add directories containing at least one file to fpath for dir in $base_dir/**/*(/N); do - if [[ -n $(ls -A "$dir") ]]; then + if [[ -n $(ls -A "$dir/") ]]; then fpath=($dir $fpath) fi done } -zrep_fpath ${HOME}/bin/include - +zrep_fpath ${HOME}/.zrep/functions autoload -Uz zini -# Define the path to .zreprc -ZREP_CONFIG="$HOME/.zreprc" +# List of colors available +black="\033[0;30m" +red="\033[0;31m" +green="\033[0;32m" +yellow="\033[0;33m" +blue="\033[0;34m" +magenta="\033[0;35m" +cyan="\033[0;36m" +white="\033[0;37m" +bold_black="\033[1;30m" +bold_red="\033[1;31m" +bold_green="\033[1;32m" +bold_yellow="\033[1;33m" +bold_blue="\033[1;34m" +bold_magenta="\033[1;35m" +bold_cyan="\033[1;36m" +bold_white="\033[1;37m" +black_bg="\033[40m" +red_bg="\033[41m" +green_bg="\033[42m" +yellow_bg="\033[43m" +blue_bg="\033[44m" +magenta_bg="\033[45m" +cyan_bg="\033[46m" +white_bg="\033[47m" +end="\033[0m" + + +function zrep_version() { + zrep_msg info "Created by kekePower - 2024" + zrep_msg info "- https://git.kekepower.com/kekePower/zrep/${end}" + zrep_msg info "Please see '${ZSH_SCRIPT:t} help' for more info" + exit +} + +function zrep_msg() { + + # Determine the color based on the type + # local color="${end}" # Default to no color if type is unrecognized + case ${1} in + std) color="${green}" ;; + info) color="${yellow}" ;; + debug) color="${red}" ;; + other) color="${bold_yellow}" ;; + sub) color="${magenta}" ;; + main) color="${white} ${green_bg}" ;; + esac + + # echo "1=$1\n2=$2\ncolor=$color" + printf "${color}%b${end}\n" "${2}" + +} + +function zrep_init() { + local config_file="$HOME/.zreprc" + local zshrc_file="$HOME/.zshrc" + local install_dir + + # Check if .zreprc exists + if [[ ! -f $config_file ]]; then + echo "$config_file not found. Creating it..." + # Prompt user for install directory + read "?Enter zrep installation directory [$HOME/.zrep]: " install_dir + install_dir=${install_dir:-$HOME/.zrep} + + # Write to .zreprc + echo "[main]" > $config_file + echo "zrep_install_dir = $install_dir" >> $config_file + else + echo "Running zini $config_file" + zini $config_file + echo "Setting install_dir" + install_dir=${config[zrep_install_dir]} + echo "install_dir=${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." + fi + + source ${zshrc_file} + echo "zrep initialization complete." +} + +# Function to parse remote JSON data and extract author, script, and version +function zrep_parse_remote() { + local url="$1" + local json_data + + # Fetch JSON data from the URL + json_data=$(curl -s "$url") + + # Extract author, script, and version using jq + author=$(echo "$json_data" | jq -r '.authors[0].name') + script=$(echo "$json_data" | jq -r '.authors[0].scripts[0].name') + version=$(echo "$json_data" | jq -r '.authors[0].scripts[0].version') + + # Set the variables as global + export author + export script + export version + + # local dlurl="https://kekepower.com/zrep/download.php?a=${author}&s=${script}&v=${version}" + # echo "zrep_parse_remote: ${dlurl}" + +} + +# Function to write to installed.json after successful install +function zrep_update_installed_json() { + local author="$1" + local script="$2" + local version="$3" + local json_file="${config[main_zrep_install_dir]}/installed.json" + + # Check if installed.json exists, create it if not + if [[ ! -f "$json_file" ]]; then + echo '[]' >| "$json_file" + fi + + # Create JSON object + local json_object='{"author":"'$author'", "script":"'$script'", "version":"'$version'"}' + + # Check if the entry already exists in installed.json + if grep -q "$json_object" "$json_file"; then + echo "Package '$script' by '$author' version $version is already installed." + return 0 + fi + + # Add the entry to installed.json + echo "$json_object" >> "$json_file" + + echo "Package '$script' by '$author' version $version installed successfully." +} + + +# Function to install a package by unzipping it to ${config[main_zrep_install_dir]} +function zrep_install_package() { + + zrep_parse_remote "https://kekepower.com/zrep/packages.json" + + # Construct the download URL + local dlurl="https://kekepower.com/zrep/download.php?a=${author}&s=${script}&v=${version}" + echo "${dlurl}" + # exit + + # Get the base directory where the package will be installed + local baseDir="${config[main_zrep_install_dir]}/" + + # Create the directory if it doesn't exist + mkdir -p "$baseDir" + + # Download the package zip file + local zipFile="/tmp/${author}_${package}_${version}.zip" + curl -s -o "$zipFile" "$dlurl" + + # Check if the download was successful + if [[ $? -ne 0 ]]; then + echo "Error: Failed to download the package." + return 1 + fi + + # Unzip the package to the installation directory + unzip -q "$zipFile" -d "$baseDir" + + # Check if the unzip operation was successful + if [[ $? -ne 0 ]]; then + echo "Error: Failed to unzip the package." + return 1 + else + zrep_update_installed_json "$author" "$script" "$version" + fi + + # Clean up: Remove the downloaded zip file + rm "$zipFile" +} + +# Function to list installed packages from installed.json +function zrep_list_installed_packages() { + local installed_json="${config[main_zrep_install_dir]}/installed.json" + + # Check if installed.json exists + if [[ ! -f "$installed_json" ]]; then + echo "No installed packages found." + return 0 + fi + + # Parse installed.json and list packages + zrep_msg main "\nInstalled packages:" + zrep_msg other " - $(jq -r '.[] | "\(.author)/\(.script) (\(.version))"' "$installed_json")" +} # Function to load configuration function load_config() { -autoload -Uz zrep_init if [[ -f "$ZREP_CONFIG" ]]; then - # echo ".zreprc found, loading configuration..." zini "$ZREP_CONFIG" - zrep_fpath ${config[main_zrep_install_dir]} + zrep_fpath ${config[main_zrep_install_dir]} else if [[ "$1" == "init" ]]; then echo "$ZREP_CONFIG not found. Proceeding with 'zrep init'..." @@ -52,33 +251,107 @@ autoload -Uz zrep_init fi } +# Function to remove a package from installed.json +function zrep_remove_package() { + local package_name="$1" + local installed_json="${config[main_zrep_install_dir]}/installed.json" + + # Check if installed.json exists + if [[ ! -f "$installed_json" ]]; then + echo "Error: installed.json not found." + return 1 + fi + + # Get package information from installed.json + local package_info + package_info=$(zrep_parse_installed_json | jq ".[] | select(.author + \"/\" + .script == \"$package_name\")") + + # Check if the package is installed + if [[ -z "$package_info" ]]; then + echo "Error: Package '$package_name' is not installed." + return 1 + fi + + # Display package information + echo "Package information:" + echo "$package_info" | jq . + + # Ask user for confirmation + read -q "REPLY?Are you sure you want to remove this package? (y/n) " + echo + if [[ "$REPLY" =~ ^[Yy]$ ]]; then + # Remove the package from installed.json + jq "map(select(.author + \"/\" + .script != \"$package_name\"))" "$installed_json" > "$installed_json.tmp" + mv "$installed_json.tmp" "$installed_json" + echo "Package '$package_name' removed successfully." + else + echo "Removal canceled." + fi +} + +# Function to parse installed.json +function zrep_parse_installed_json() { + local installed_json="${config[main_zrep_install_dir]}/installed.json" + jq -c '.' "$installed_json" +} + +# Help function to display available options +function zrep_help() { + zrep_msg sub "Usage: zrep [arguments]" + zrep_msg other "Available commands:" + zrep_msg other " init: Initialize zrep" + zrep_msg other " install : Install a package" + zrep_msg other " remove : Remove a package" + zrep_msg other " update: Update zrep" + zrep_msg other " version: Display zrep version" + zrep_msg other " list: List installed packages" +} + + # Main script logic -main() { - # Load configuration +function main() { + load_config # Example command handling structure case "$1" in init) - autoload -Uz zrep_init - zrep_init - zrep_fpath ${config[main_zrep_install_dir]} - exit + zrep_init + zrep_fpath ${config[main_zrep_install_dir]} + exit ;; install) - echo "Install function here" + zrep_msg info "Install function here" + zrep_install_package ${1} + ;; + remove) + # Parse the command argument to extract the package name + zrep_remove_package_name="${1:-}" + if [[ -z "$zrep_remove_package_name" ]]; then + echo "Usage: zrep remove package_name" + else + zrep_remove_package "$zrep_remove_package_name" + fi ;; update) - echo "Update function here" + zrep_msg info "Update function here" + ;; + version) + zrep_version + ;; + list) + zrep_list_installed_packages + ;; + help) + zrep_help ;; *) - echo "Usage: zrep [arguments]" - echo "Available commands: init, install, update" + zrep_help ;; esac } +echo "${magenta}${blue_bg} ${ZREP} ${end}${bold_white}${blue_bg}${VERSION} ${end}" + # Call main with all passed arguments main "$@" - -#echo "END: $fpath"