diff --git a/.gitignore b/.gitignore index cfac3d9..42a230f 100644 --- a/.gitignore +++ b/.gitignore @@ -1,2 +1,3 @@ .idea -.shellcheckrc \ No newline at end of file +.shellcheckrc +klipper_repos.txt \ No newline at end of file diff --git a/klipper_repos.txt b/klipper_repos.txt new file mode 100644 index 0000000..be83f45 --- /dev/null +++ b/klipper_repos.txt @@ -0,0 +1,12 @@ +############################################################## +## DO NOT REMOVE OR EDIT THIS COMMENT BLOCK! ## +## ## +## Always add the URL and branch in this form: ## +## , ## +## Example: ## +## https://github.com/Klipper3d/klipper,master ## +## ## +## A wrong format will cause issues! You have been warned! ## +############################################################## +##~~~~~ Add the custom repositories below this line ~~~~~~~~## +https://github.com/Klipper3d/klipper,master diff --git a/scripts/switch_branch.sh b/scripts/switch_branch.sh deleted file mode 100755 index 1773ef5..0000000 --- a/scripts/switch_branch.sh +++ /dev/null @@ -1,36 +0,0 @@ -#!/bin/bash - -#=======================================================================# -# Copyright (C) 2020 - 2022 Dominik Willner # -# # -# This file is part of KIAUH - Klipper Installation And Update Helper # -# https://github.com/th33xitus/kiauh # -# # -# This file may be distributed under the terms of the GNU GPLv3 license # -#=======================================================================# - -set -e - -switch_to_master(){ - cd $KLIPPER_DIR - status_msg "Switching...Please wait ..."; echo - git fetch origin -q && git checkout master; echo -} - -switch_to_scurve_shaping(){ - cd $KLIPPER_DIR - status_msg "Switching...Please wait ..."; echo - if ! git remote | grep dmbutyugin -q; then - git remote add dmbutyugin $DMBUTYUGIN_REPO - fi - git fetch dmbutyugin -q && git checkout scurve-shaping; echo -} - -switch_to_scurve_smoothing(){ - cd $KLIPPER_DIR - status_msg "Switching...Please wait ..."; echo - if ! git remote | grep dmbutyugin -q; then - git remote add dmbutyugin $DMBUTYUGIN_REPO - fi - git fetch dmbutyugin -q && git checkout scurve-smoothing; echo -} \ No newline at end of file diff --git a/scripts/switch_klipper_repo.sh b/scripts/switch_klipper_repo.sh new file mode 100644 index 0000000..e4a7f2a --- /dev/null +++ b/scripts/switch_klipper_repo.sh @@ -0,0 +1,131 @@ +#!/bin/bash + +#=======================================================================# +# Copyright (C) 2020 - 2022 Dominik Willner # +# # +# This file is part of KIAUH - Klipper Installation And Update Helper # +# https://github.com/th33xitus/kiauh # +# # +# This file may be distributed under the terms of the GNU GPLv3 license # +#=======================================================================# + +set -e + +function change_klipper_repo_menu(){ + local repo_file="${SRCDIR}/kiauh/klipper_repos.txt" + local url branch i=0 + + top_border + echo -e "| ~~~~~~~~ [ Set custom Klipper repo ] ~~~~~~~~ | " + hr + blank_line + ### dynamically generate the repolist from the klipper_repos.txt textfile + get_klipper_repo_list "${repo_file}" + blank_line + back_help_footer + + while IFS="," read -r col1 col2; do + url+=("${col1}") + branch+=("${col2}") + i=$((i+1)) + done < <(grep "" "${repo_file}" | tail -n "+12") + + while true; do + read -p "${cyan}Select Klipper repo:${white} " option + if [ "${option}" = "b" ] || [ "${option}" = "B" ]; then + clear && print_header + settings_menu + break + elif [ "${option}" = "h" ] || [ "${option}" = "H" ]; then + clear && print_header + show_custom_klipper_repo_help + elif [ "${option}" -le ${#url[@]} ]; then + if [ -d "${KLIPPER_DIR}" ]; then + top_border + echo -e "| ${red}!!! ATTENTION !!!${white} |" + echo -e "| Existing Klipper folder found! Proceeding will remove | " + echo -e "| the existing Klipper folder and replace it with a | " + echo -e "| clean copy of the previously selected source repo! | " + bottom_border + while true; do + read -p "${cyan}###### Proceed? (Y/n):${white} " yn + case "${yn}" in + Y|y|Yes|yes|"") + select_msg "Yes" + switch_klipper_repo "${url[${option}]}" "${branch[${option}]}" + set_custom_klipper_repo "${url[${option}]}" "${branch[${option}]}" + break;; + N|n|No|no) + select_msg "No" + break;; + *) + error_msg "Invalid command!";; + esac + done + else + status_msg "Set custom Klipper repository to:\n ● Repository URL: ${url[${option}]}\n ● Branch: ${branch[${option}]}" + set_custom_klipper_repo "${url[${option}]}" "${branch[${option}]}" + ok_msg "This repo will now be used for new Klipper installations!\n" + fi + break + else + clear && print_header + print_error "Invalid command!" + change_klipper_repo_menu + fi + done +} + +#================================================# +#=================== HELPERS ====================# +#================================================# + +function get_klipper_repo_list(){ + local repo_file=${1} i=0 + while IFS="," read -r col1 col2; do + col1=$(echo "${col1}" | sed "s/https:\/\/github\.com\///" | sed "s/\.git$//" ) + col1=${yellow}${col1}${white} + printf "| ${i}) %s → %-31s|\n" "${col1}" "${col2}" + i=$((i+1)) + done < <(grep "" "${repo_file}" | tail -n "+12") +} + +function switch_klipper_repo(){ + local url branch + url=${1} branch=${2} + status_msg "Switching Klipper repository..." + do_action_service "stop" "klipper" + cd ~ && rm -rf "${KLIPPER_DIR}" + git clone "${url}" && cd "${KLIPPER_DIR}" + git checkout "${branch}" && cd ~ + do_action_service "start" "klipper" +} + +function show_custom_klipper_repo_help(){ + top_border + echo -e "| ~~~~ < ? > Help: Custom Klipper repo < ? > ~~~~ |" + hr + echo -e "| With this setting, it is possible to install Klipper | " + echo -e "| from a custom repository. It will also switch an | " + echo -e "| existing Klipper installation to the newly selected | " + echo -e "| source repository. | " + echo -e "| A list of selectable repositories is automatically | " + echo -e "| generated by a 'klipper_repos.txt' textfile in KIAUHs | " + echo -e "| root folder. You can add as many additional repos as | " + echo -e "| you wish. Make sure to always add URL ${red}and${white} branch! | " + blank_line + echo -e "| Default: ${red}none${white} |" + blank_line + back_footer + while true; do + read -p "${cyan}###### Please select:${white} " choice + case "${choice}" in + B|b) + clear && print_header + change_klipper_repo_menu + break;; + *) + deny_action "show_settings_help";; + esac + done +} \ No newline at end of file diff --git a/scripts/ui/settings_menu.sh b/scripts/ui/settings_menu.sh index ba8c27a..4fb91f1 100755 --- a/scripts/ui/settings_menu.sh +++ b/scripts/ui/settings_menu.sh @@ -14,14 +14,31 @@ set -e function settings_ui() { read_kiauh_ini local custom_cfg_loc="${custom_klipper_cfg_loc}" + local custom_repo="${custom_klipper_repo}" + local custom_branch="${custom_klipper_repo_branch}" local ms_pre_rls="${mainsail_install_unstable}" local fl_pre_rls="${fluidd_install_unstable}" + ### config location if [ -z "${custom_cfg_loc}" ]; then custom_cfg_loc="${cyan}${KLIPPER_CONFIG}${white}" else custom_cfg_loc="${cyan}${custom_cfg_loc}${white}" fi + ### custom repository + custom_repo=$(echo "${custom_repo}" | sed "s/https:\/\/github\.com\///" | sed "s/\.git$//" ) + if [ -z "${custom_repo}" ]; then + custom_repo="${cyan}Klipper3D/klipper${white}" + else + custom_repo="${cyan}${custom_repo}${white}" + fi + ### custom repository branch + if [ -z "${custom_branch}" ]; then + custom_branch="${cyan}master${white}" + else + custom_branch="${cyan}${custom_branch}${white}" + fi + ### webinterface stable toggle if [ "${ms_pre_rls}" == "false" ]; then ms_pre_rls="${red}● ${ms_pre_rls}${white}" else @@ -37,15 +54,27 @@ function settings_ui() { echo -e "| $(title_msg "~~~~~~~~~~~~ [ KIAUH Settings ] ~~~~~~~~~~~~~") |" hr echo -e "| Klipper: |" - printf "| Config folder: %-49s|\n" "${custom_cfg_loc}" - blank_line + echo -e "| ● Config folder: |" + printf "| %-60s|\n" "${custom_cfg_loc}" + echo -e "| ● Repository: |" + printf "| %-70s|\n" "${custom_repo} (${custom_branch})" + hr echo -e "| Install unstable releases: |" - printf "| Mainsail: %-56s|\n" "${ms_pre_rls}" - printf "| Fluidd: %-56s|\n" "${fl_pre_rls}" + printf "| Mainsail: %-55s|\n" "${ms_pre_rls}" + printf "| Fluidd: %-55s|\n" "${fl_pre_rls}" hr echo -e "| 1) Change Klipper config folder location |" - echo -e "| 2) Allow / Disallow unstable Mainsail releases |" - echo -e "| 3) Allow / Disallow unstable Fluidd releases |" + echo -e "| 2) Set custom Klipper repository |" + if [ "${mainsail_install_unstable}" == "false" ]; then + echo -e "| 3) ${green}Allow${white} unstable Mainsail releases |" + else + echo -e "| 3) ${red}Disallow${white} unstable Mainsail releases |" + fi + if [ "${fluidd_install_unstable}" == "false" ]; then + echo -e "| 4) ${green}Allow${white} unstable Fluidd releases |" + else + echo -e "| 4) ${red}Disallow${white} unstable Fluidd releases |" + fi back_help_footer } @@ -89,6 +118,7 @@ function show_settings_help(){ } settings_menu(){ + clear && print_header settings_ui while true; do read -p "${cyan}Perform action:${white} " action; echo @@ -96,9 +126,13 @@ settings_menu(){ 1) change_klipper_cfg_folder && settings_ui;; 2) - switch_mainsail_releasetype && settings_ui;; + clear && print_header + change_klipper_repo_menu + settings_ui;; 3) - switch_fluidd_releasetype && settings_ui;; + switch_mainsail_releasetype && settings_menu;; + 4) + switch_fluidd_releasetype && settings_menu;; B|b) clear main_menu diff --git a/scripts/utilities.sh b/scripts/utilities.sh index e5e9266..32e8aa6 100644 --- a/scripts/utilities.sh +++ b/scripts/utilities.sh @@ -134,6 +134,12 @@ function init_ini(){ if ! grep -Eq "^custom_klipper_cfg_loc=" "${INI_FILE}"; then echo -e "\ncustom_klipper_cfg_loc=\c" >> "${INI_FILE}" fi + if ! grep -Eq "^custom_klipper_repo=" "${INI_FILE}"; then + echo -e "\ncustom_klipper_repo=\c" >> "${INI_FILE}" + fi + if ! grep -Eq "^custom_klipper_repo_branch=" "${INI_FILE}"; then + echo -e "\ncustom_klipper_repo_branch=\c" >> "${INI_FILE}" + fi if ! grep -Eq "^mainsail_install_unstable=" "${INI_FILE}"; then echo -e "\nmainsail_install_unstable=false\c" >> "${INI_FILE}" fi @@ -304,6 +310,27 @@ function switch_fluidd_releasetype() { fi } +function switch_fluidd_releasetype() { + read_kiauh_ini + local state="${fluidd_install_unstable}" + if [ "${state}" == "false" ]; then + sed -i '/fluidd_install_unstable=/s/false/true/' "${INI_FILE}" + log_info "fluidd_install_unstable changed (false -> true) " + else + sed -i '/fluidd_install_unstable=/s/true/false/' "${INI_FILE}" + log_info "fluidd_install_unstable changed (true -> false) " + fi +} + +function set_custom_klipper_repo() { + read_kiauh_ini + local repo_url=${1} branch=${2} + sed -i "/^custom_klipper_repo=/d" "${INI_FILE}" + sed -i '$a'"custom_klipper_repo=${repo_url}" "${INI_FILE}" + sed -i "/^custom_klipper_repo_branch=/d" "${INI_FILE}" + sed -i '$a'"custom_klipper_repo_branch=${branch}" "${INI_FILE}" +} + #================================================# #=============== HANDLE SERVICES ================# #================================================#