forked from Shinonome/dots-hyprland
Rearrange sdata/subcmd; add --skip-backup
This commit is contained in:
@@ -3,6 +3,16 @@
|
|||||||
|
|
||||||
# shellcheck shell=bash
|
# shellcheck shell=bash
|
||||||
|
|
||||||
|
#####################################################################################
|
||||||
|
# Notes by @clsty:
|
||||||
|
#
|
||||||
|
# I'm not the one who developed this script (see issue#2284 which discussed about the history).
|
||||||
|
# However it contains many unnecessary logics. This is typically what AI will do.
|
||||||
|
# I don't really care if it's AI-generated or not, it's just an extra option in addition to ./setup install, so as long as the users say it works, it should be fine.
|
||||||
|
# However, it's not easy to maintain something like this.
|
||||||
|
# The redundant logic should be cleaned up someday.
|
||||||
|
#
|
||||||
|
# This also applies for exp-update.tester.sh, TBH I don't think that file is really needed, and it also looks like AI-generated. Just guessing though.
|
||||||
#####################################################################################
|
#####################################################################################
|
||||||
#
|
#
|
||||||
# exp-update.sh - Enhanced dotfiles update script
|
# exp-update.sh - Enhanced dotfiles update script
|
||||||
@@ -1,6 +1,6 @@
|
|||||||
#!/usr/bin/env bash
|
#!/usr/bin/env bash
|
||||||
#
|
#
|
||||||
# exp-update-tester.sh - Test suite for exp-update.sh
|
# exp-update-tester.sh - Test suite for exp-update
|
||||||
#
|
#
|
||||||
set -euo pipefail
|
set -euo pipefail
|
||||||
|
|
||||||
@@ -129,7 +129,7 @@ log_header() { :; }
|
|||||||
log_die() { echo "ERROR: \$1"; exit 1; }
|
log_die() { echo "ERROR: \$1"; exit 1; }
|
||||||
STY_CYAN="" STY_RST="" STY_YELLOW=""
|
STY_CYAN="" STY_RST="" STY_YELLOW=""
|
||||||
|
|
||||||
# Set required environment variables for exp-update.sh
|
# Set required environment variables for exp-update/0.run.sh
|
||||||
SKIP_NOTICE=true
|
SKIP_NOTICE=true
|
||||||
REPO_ROOT="\$1"
|
REPO_ROOT="\$1"
|
||||||
CHECK_PACKAGES=false
|
CHECK_PACKAGES=false
|
||||||
@@ -139,7 +139,7 @@ VERBOSE=false
|
|||||||
NON_INTERACTIVE=true
|
NON_INTERACTIVE=true
|
||||||
SOURCE_ONLY=true
|
SOURCE_ONLY=true
|
||||||
|
|
||||||
source "$ORIGINAL_DIR/sdata/step/exp-update.sh"
|
source "$ORIGINAL_DIR/sdata/subcmd-exp-update/0.run.sh"
|
||||||
detected_dirs=\$(detect_repo_structure)
|
detected_dirs=\$(detect_repo_structure)
|
||||||
if [[ -n "\$detected_dirs" ]]; then
|
if [[ -n "\$detected_dirs" ]]; then
|
||||||
read -ra MONITOR_DIRS <<<"\$detected_dirs"
|
read -ra MONITOR_DIRS <<<"\$detected_dirs"
|
||||||
@@ -190,7 +190,7 @@ log_success() { :; }
|
|||||||
log_header() { :; }
|
log_header() { :; }
|
||||||
log_die() { echo "ERROR: \$1"; exit 1; }
|
log_die() { echo "ERROR: \$1"; exit 1; }
|
||||||
|
|
||||||
# Set required environment variables for exp-update.sh
|
# Set required environment variables for exp-update
|
||||||
SKIP_NOTICE=true
|
SKIP_NOTICE=true
|
||||||
REPO_ROOT="\$1"
|
REPO_ROOT="\$1"
|
||||||
CHECK_PACKAGES=false
|
CHECK_PACKAGES=false
|
||||||
@@ -200,7 +200,7 @@ VERBOSE=false
|
|||||||
NON_INTERACTIVE=true
|
NON_INTERACTIVE=true
|
||||||
SOURCE_ONLY=true
|
SOURCE_ONLY=true
|
||||||
|
|
||||||
source "$ORIGINAL_DIR/sdata/step/exp-update.sh"
|
source "$ORIGINAL_DIR/sdata/subcmd-exp-update/0.run.sh"
|
||||||
detected_dirs=\$(detect_repo_structure)
|
detected_dirs=\$(detect_repo_structure)
|
||||||
if [[ -n "\$detected_dirs" ]]; then
|
if [[ -n "\$detected_dirs" ]]; then
|
||||||
read -ra MONITOR_DIRS <<<"\$detected_dirs"
|
read -ra MONITOR_DIRS <<<"\$detected_dirs"
|
||||||
@@ -276,7 +276,7 @@ log_success() { :; }
|
|||||||
log_header() { :; }
|
log_header() { :; }
|
||||||
log_die() { echo "ERROR: \$1" >&2; exit 1; }
|
log_die() { echo "ERROR: \$1" >&2; exit 1; }
|
||||||
|
|
||||||
# FIXED: Set REPO_ROOT before sourcing exp-update.sh
|
# FIXED: Set REPO_ROOT before sourcing exp-update
|
||||||
REPO_ROOT="\$1"
|
REPO_ROOT="\$1"
|
||||||
export REPO_ROOT
|
export REPO_ROOT
|
||||||
|
|
||||||
@@ -293,7 +293,7 @@ HOME_UPDATE_IGNORE_FILE="/dev/null"
|
|||||||
|
|
||||||
# Source the production script to use the real should_ignore function
|
# Source the production script to use the real should_ignore function
|
||||||
# Redirect all unwanted output to stderr, then to /dev/null
|
# Redirect all unwanted output to stderr, then to /dev/null
|
||||||
source "$ORIGINAL_DIR/sdata/step/exp-update.sh" 2>/dev/null
|
source "$ORIGINAL_DIR/sdata/subcmd-exp-update/0.run.sh" 2>/dev/null
|
||||||
|
|
||||||
test_cases=(
|
test_cases=(
|
||||||
"\$REPO_ROOT/app.log:0"
|
"\$REPO_ROOT/app.log:0"
|
||||||
@@ -348,7 +348,7 @@ test_safe_read_security() {
|
|||||||
log_test "Testing safe_read uses secure assignment (printf -v)"
|
log_test "Testing safe_read uses secure assignment (printf -v)"
|
||||||
|
|
||||||
local safe_read_function
|
local safe_read_function
|
||||||
safe_read_function=$(awk '/^safe_read\(\) \{/,/^\}/' "$ORIGINAL_DIR/sdata/step/exp-update.sh")
|
safe_read_function=$(awk '/^safe_read\(\) \{/,/^\}/' "$ORIGINAL_DIR/sdata/subcmd-exp-update/0.run.sh")
|
||||||
|
|
||||||
if [[ -z "$safe_read_function" ]]; then
|
if [[ -z "$safe_read_function" ]]; then
|
||||||
log_fail "Could not find safe_read function"
|
log_fail "Could not find safe_read function"
|
||||||
@@ -547,7 +547,7 @@ log_success() { :; }
|
|||||||
log_header() { :; }
|
log_header() { :; }
|
||||||
log_die() { echo "ERROR: \$1" >&2; exit 1; }
|
log_die() { echo "ERROR: \$1" >&2; exit 1; }
|
||||||
|
|
||||||
# FIXED: Set REPO_ROOT before sourcing exp-update.sh
|
# FIXED: Set REPO_ROOT before sourcing exp-update
|
||||||
REPO_ROOT="\$1"
|
REPO_ROOT="\$1"
|
||||||
export REPO_ROOT
|
export REPO_ROOT
|
||||||
|
|
||||||
@@ -563,7 +563,7 @@ UPDATE_IGNORE_FILE="\${REPO_ROOT}/.updateignore"
|
|||||||
HOME_UPDATE_IGNORE_FILE="/dev/null"
|
HOME_UPDATE_IGNORE_FILE="/dev/null"
|
||||||
|
|
||||||
# Source the production script to use the real should_ignore function
|
# Source the production script to use the real should_ignore function
|
||||||
source "$ORIGINAL_DIR/sdata/step/exp-update.sh" 2>/dev/null
|
source "$ORIGINAL_DIR/sdata/subcmd-exp-update/0.run.sh" 2>/dev/null
|
||||||
|
|
||||||
# Load patterns into cache
|
# Load patterns into cache
|
||||||
load_ignore_patterns
|
load_ignore_patterns
|
||||||
@@ -649,7 +649,7 @@ VERBOSE=false
|
|||||||
NON_INTERACTIVE=true
|
NON_INTERACTIVE=true
|
||||||
SOURCE_ONLY=true
|
SOURCE_ONLY=true
|
||||||
|
|
||||||
source "$ORIGINAL_DIR/sdata/step/exp-update.sh" 2>/dev/null
|
source "$ORIGINAL_DIR/sdata/subcmd-exp-update/0.run.sh" 2>/dev/null
|
||||||
|
|
||||||
test_dir="/tmp/test-ensure-dir-\$\$"
|
test_dir="/tmp/test-ensure-dir-\$\$"
|
||||||
|
|
||||||
@@ -1,5 +1,6 @@
|
|||||||
# This script is meant to be sourced.
|
# This script is meant to be sourced.
|
||||||
# It's not for directly running.
|
# It's not for directly running.
|
||||||
|
printf "${STY_CYAN}[$0]: 1. Install dependencies\n${STY_RST}"
|
||||||
|
|
||||||
function outdate_detect(){
|
function outdate_detect(){
|
||||||
# Shallow clone prevent latest_commit_timestamp() from working.
|
# Shallow clone prevent latest_commit_timestamp() from working.
|
||||||
@@ -1,5 +1,6 @@
|
|||||||
# This script is meant to be sourced.
|
# This script is meant to be sourced.
|
||||||
# It's not for directly running.
|
# It's not for directly running.
|
||||||
|
printf "${STY_CYAN}[$0]: 2. Setup for permissions/services etc\n${STY_RST}"
|
||||||
|
|
||||||
# shellcheck shell=bash
|
# shellcheck shell=bash
|
||||||
|
|
||||||
@@ -1,5 +1,6 @@
|
|||||||
# This script is meant to be sourced.
|
# This script is meant to be sourced.
|
||||||
# It's not for directly running.
|
# It's not for directly running.
|
||||||
|
printf "${STY_CYAN}[$0]: 3. Copying config files\n${STY_RST}"
|
||||||
|
|
||||||
# shellcheck shell=bash
|
# shellcheck shell=bash
|
||||||
|
|
||||||
@@ -67,6 +68,15 @@ function ask_backup_configs(){
|
|||||||
if $backup;then
|
if $backup;then
|
||||||
backup_clashing_targets dots/.config $XDG_CONFIG_HOME "${BACKUP_DIR}/.config"
|
backup_clashing_targets dots/.config $XDG_CONFIG_HOME "${BACKUP_DIR}/.config"
|
||||||
backup_clashing_targets dots/.local/share $XDG_DATA_HOME "${BACKUP_DIR}/.local/share"
|
backup_clashing_targets dots/.local/share $XDG_DATA_HOME "${BACKUP_DIR}/.local/share"
|
||||||
|
printf "${STY_BLUE}Backup into \"${BACKUP_DIR}\" finished.${STY_RST}\n"
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
function auto_backup_configs(){
|
||||||
|
# Backup when $BACKUP_DIR does not exist
|
||||||
|
if [[ ! -d "$BACKUP_DIR" ]]; then
|
||||||
|
backup_clashing_targets dots/.config $XDG_CONFIG_HOME "${BACKUP_DIR}/.config"
|
||||||
|
backup_clashing_targets dots/.local/share $XDG_DATA_HOME "${BACKUP_DIR}/.local/share"
|
||||||
|
printf "${STY_BLUE}Backup into \"${BACKUP_DIR}\" finished.${STY_RST}\n"
|
||||||
fi
|
fi
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -75,10 +85,12 @@ function ask_backup_configs(){
|
|||||||
# In case some dirs does not exists
|
# In case some dirs does not exists
|
||||||
v mkdir -p $XDG_BIN_HOME $XDG_CACHE_HOME $XDG_CONFIG_HOME/quickshell $XDG_DATA_HOME
|
v mkdir -p $XDG_BIN_HOME $XDG_CACHE_HOME $XDG_CONFIG_HOME/quickshell $XDG_DATA_HOME
|
||||||
|
|
||||||
case $ask in
|
if [[ ! "${SKIP_BACKUP}" == true ]]; then
|
||||||
false) sleep 0 ;;
|
case $ask in
|
||||||
*) ask_backup_configs ;;
|
false) auto_backup_configs ;;
|
||||||
esac
|
*) ask_backup_configs ;;
|
||||||
|
esac
|
||||||
|
fi
|
||||||
|
|
||||||
# TODO: A better method for users to choose their customization,
|
# TODO: A better method for users to choose their customization,
|
||||||
# for example some users may prefer ZSH over FISH, and foot over kitty.
|
# for example some users may prefer ZSH over FISH, and foot over kitty.
|
||||||
@@ -14,6 +14,7 @@ Options for install:
|
|||||||
--skip-allsetups Skip the whole process setting up permissions/services etc
|
--skip-allsetups Skip the whole process setting up permissions/services etc
|
||||||
--skip-allfiles Skip the whole process copying configuration files
|
--skip-allfiles Skip the whole process copying configuration files
|
||||||
-s, --skip-sysupdate Skip system package upgrade e.g. \"sudo pacman -Syu\"
|
-s, --skip-sysupdate Skip system package upgrade e.g. \"sudo pacman -Syu\"
|
||||||
|
--skip-backup Skip backup conflicting files
|
||||||
--skip-quickshell Skip installing the config for Quickshell
|
--skip-quickshell Skip installing the config for Quickshell
|
||||||
--skip-hyprland Skip installing the config for Hyprland
|
--skip-hyprland Skip installing the config for Hyprland
|
||||||
--skip-fish Skip installing the config for Fish
|
--skip-fish Skip installing the config for Fish
|
||||||
@@ -33,7 +34,7 @@ cleancache(){
|
|||||||
# `man getopt` to see more
|
# `man getopt` to see more
|
||||||
para=$(getopt \
|
para=$(getopt \
|
||||||
-o hfk:cs \
|
-o hfk:cs \
|
||||||
-l help,force,fontset:,clean,skip-allgreeting,skip-alldeps,skip-allsetups,skip-allfiles,skip-sysupdate,skip-quickshell,skip-fish,skip-hyprland,skip-plasmaintg,skip-miscconf,exp-files,via-nix \
|
-l help,force,fontset:,clean,skip-allgreeting,skip-alldeps,skip-allsetups,skip-allfiles,skip-sysupdate,skip-backup,skip-quickshell,skip-fish,skip-hyprland,skip-plasmaintg,skip-miscconf,exp-files,via-nix \
|
||||||
-n "$0" -- "$@")
|
-n "$0" -- "$@")
|
||||||
[ $? != 0 ] && echo "$0: Error when getopt, please recheck parameters." && exit 1
|
[ $? != 0 ] && echo "$0: Error when getopt, please recheck parameters." && exit 1
|
||||||
#####################################################################################
|
#####################################################################################
|
||||||
@@ -63,6 +64,7 @@ while true ; do
|
|||||||
--skip-allsetups) SKIP_ALLSETUPS=true;shift;;
|
--skip-allsetups) SKIP_ALLSETUPS=true;shift;;
|
||||||
--skip-allfiles) SKIP_ALLFILES=true;shift;;
|
--skip-allfiles) SKIP_ALLFILES=true;shift;;
|
||||||
-s|--skip-sysupdate) SKIP_SYSUPDATE=true;shift;;
|
-s|--skip-sysupdate) SKIP_SYSUPDATE=true;shift;;
|
||||||
|
--skip-backup) SKIP_BACKUP=true;shift;;
|
||||||
--skip-hyprland) SKIP_HYPRLAND=true;shift;;
|
--skip-hyprland) SKIP_HYPRLAND=true;shift;;
|
||||||
--skip-fish) SKIP_FISH=true;shift;;
|
--skip-fish) SKIP_FISH=true;shift;;
|
||||||
--skip-quickshell) SKIP_QUICKSHELL=true;shift;;
|
--skip-quickshell) SKIP_QUICKSHELL=true;shift;;
|
||||||
@@ -34,75 +34,67 @@ case $1 in
|
|||||||
# Global help
|
# Global help
|
||||||
help|--help|-h)showhelp_global;exit;;
|
help|--help|-h)showhelp_global;exit;;
|
||||||
# Correct subcommand
|
# Correct subcommand
|
||||||
install|install-deps|install-setups|install-files|exp-uninstall|exp-update|exp-update-old)
|
install|exp-uninstall|exp-update|exp-update-old)
|
||||||
SCRIPT_SUBCOMMAND=$1;shift;;
|
SUBCMD_NAME=$1
|
||||||
# No subcommand
|
SUBCMD_DIR=./sdata/subcmd-$1
|
||||||
-*|"")SCRIPT_SUBCOMMAND=install;;
|
shift;;
|
||||||
|
# Correct subcommand but not using ./sdata/subcmd-$1
|
||||||
|
install-deps|install-setups|install-files)
|
||||||
|
SUBCMD_NAME=$1
|
||||||
|
SUBCMD_DIR=./sdata/subcmd-install
|
||||||
|
shift;;
|
||||||
|
# No subcommand, default to install
|
||||||
|
-*|"")
|
||||||
|
SUBCMD_NAME=install
|
||||||
|
SUBCMD_DIR=./sdata/subcmd-install
|
||||||
|
;;
|
||||||
# Wrong subcommand
|
# Wrong subcommand
|
||||||
*)printf "${STY_RED}Unknown subcommand \"$1\".${STY_RST}\n";showhelp_global;exit 1;;
|
*)printf "${STY_RED}Unknown subcommand \"$1\".${STY_RST}\n";showhelp_global;exit 1;;
|
||||||
esac
|
esac
|
||||||
#####################################################################################
|
#####################################################################################
|
||||||
case ${SCRIPT_SUBCOMMAND} in
|
if [[ -f "${SUBCMD_DIR}/options.sh" ]];
|
||||||
|
then source "${SUBCMD_DIR}/options.sh"
|
||||||
|
fi
|
||||||
|
case ${SUBCMD_NAME} in
|
||||||
install)
|
install)
|
||||||
source ./sdata/options/install.sh
|
|
||||||
if [[ "${SKIP_ALLGREETING}" != true ]]; then
|
if [[ "${SKIP_ALLGREETING}" != true ]]; then
|
||||||
source ./sdata/step/0.install-greeting.sh
|
source ${SUBCMD_DIR}/0.greeting.sh
|
||||||
fi
|
fi
|
||||||
if [[ "${SKIP_ALLDEPS}" != true ]]; then
|
if [[ "${SKIP_ALLDEPS}" != true ]]; then
|
||||||
printf "${STY_CYAN}[$0]: 1. Install dependencies\n${STY_RST}"
|
source ${SUBCMD_DIR}/1.deps-selector.sh
|
||||||
source ./sdata/step/1.install-deps-selector.sh
|
|
||||||
fi
|
fi
|
||||||
if [[ "${SKIP_ALLSETUPS}" != true ]]; then
|
if [[ "${SKIP_ALLSETUPS}" != true ]]; then
|
||||||
printf "${STY_CYAN}[$0]: 2. Setup for permissions/services etc\n${STY_RST}"
|
source ${SUBCMD_DIR}/2.setups-selector.sh
|
||||||
source ./sdata/step/2.install-setups-selector.sh
|
|
||||||
fi
|
fi
|
||||||
if [[ "${SKIP_ALLFILES}" != true ]]; then
|
if [[ "${SKIP_ALLFILES}" != true ]]; then
|
||||||
printf "${STY_CYAN}[$0]: 3. Copying config files\n${STY_RST}"
|
|
||||||
if [[ "${EXPERIMENTAL_FILES_SCRIPT}" == true ]]; then
|
if [[ "${EXPERIMENTAL_FILES_SCRIPT}" == true ]]; then
|
||||||
source ./sdata/step/3.install-files.experimental.sh
|
source ${SUBCMD_DIR}/3.files-exp.sh
|
||||||
else
|
else
|
||||||
source ./sdata/step/3.install-files.sh
|
source ${SUBCMD_DIR}/3.files.sh
|
||||||
fi
|
fi
|
||||||
fi
|
fi
|
||||||
;;
|
;;
|
||||||
install-deps)
|
install-deps)
|
||||||
source ./sdata/options/install.sh
|
|
||||||
if [[ "${SKIP_ALLDEPS}" != true ]]; then
|
if [[ "${SKIP_ALLDEPS}" != true ]]; then
|
||||||
printf "${STY_CYAN}[$0]: 1. Install dependencies\n${STY_RST}"
|
source ${SUBCMD_DIR}/1.deps-selector.sh
|
||||||
source ./sdata/step/1.install-deps-selector.sh
|
|
||||||
fi
|
fi
|
||||||
;;
|
;;
|
||||||
install-setups)
|
install-setups)
|
||||||
source ./sdata/options/install.sh
|
|
||||||
if [[ "${SKIP_ALLSETUPS}" != true ]]; then
|
if [[ "${SKIP_ALLSETUPS}" != true ]]; then
|
||||||
printf "${STY_CYAN}[$0]: 2. Setup for permissions/services etc\n${STY_RST}"
|
source ${SUBCMD_DIR}/2.setups-selector.sh
|
||||||
source ./sdata/step/2.install-setups-selector.sh
|
|
||||||
fi
|
fi
|
||||||
;;
|
;;
|
||||||
install-files)
|
install-files)
|
||||||
source ./sdata/options/install.sh
|
|
||||||
if [[ "${SKIP_ALLFILES}" != true ]]; then
|
if [[ "${SKIP_ALLFILES}" != true ]]; then
|
||||||
printf "${STY_CYAN}[$0]: 3. Copying config files\n${STY_RST}"
|
|
||||||
if [[ "${EXPERIMENTAL_FILES_SCRIPT}" == true ]]; then
|
if [[ "${EXPERIMENTAL_FILES_SCRIPT}" == true ]]; then
|
||||||
source ./sdata/step/3.install-files.experimental.sh
|
source ${SUBCMD_DIR}/3.files-exp.sh
|
||||||
else
|
else
|
||||||
source ./sdata/step/3.install-files.sh
|
source ${SUBCMD_DIR}/3.files.sh
|
||||||
fi
|
fi
|
||||||
fi
|
fi
|
||||||
;;
|
;;
|
||||||
exp-uninstall)
|
exp-*)
|
||||||
source ./sdata/options/exp-uninstall.sh
|
source ${SUBCMD_DIR}/0.run.sh
|
||||||
source ./sdata/step/exp-uninstall.sh
|
|
||||||
exit
|
|
||||||
;;
|
|
||||||
exp-update)
|
|
||||||
source ./sdata/options/exp-update.sh
|
|
||||||
source ./sdata/step/exp-update.sh
|
|
||||||
exit
|
|
||||||
;;
|
|
||||||
exp-update-old)
|
|
||||||
source ./sdata/options/exp-update-old.sh
|
|
||||||
source ./sdata/step/exp-update-old.sh
|
|
||||||
exit
|
exit
|
||||||
;;
|
;;
|
||||||
esac
|
esac
|
||||||
|
|||||||
Reference in New Issue
Block a user