forked from Shinonome/dots-hyprland
Rename scripts, move into sdata/step
This commit is contained in:
+5
-2
@@ -1,6 +1,9 @@
|
|||||||
#!/usr/bin/env bash
|
#!/usr/bin/env bash
|
||||||
cd "$(dirname "$0")"
|
cd "$(dirname "$0")"
|
||||||
|
# TODO: Use REPO_ROOT instead of base
|
||||||
|
# Also, when scripts are sourced they do not need export to inherit vars
|
||||||
export base="$(pwd)"
|
export base="$(pwd)"
|
||||||
|
REPO_ROOT="$(pwd)"
|
||||||
source ./sdata/lib/environment-variables.sh
|
source ./sdata/lib/environment-variables.sh
|
||||||
source ./sdata/lib/functions.sh
|
source ./sdata/lib/functions.sh
|
||||||
source ./sdata/lib/package-installers.sh
|
source ./sdata/lib/package-installers.sh
|
||||||
@@ -13,11 +16,11 @@ set -e
|
|||||||
# For subcommands
|
# For subcommands
|
||||||
case ${SCRIPT_SUBCOMMAND} in
|
case ${SCRIPT_SUBCOMMAND} in
|
||||||
exp-uninstall)
|
exp-uninstall)
|
||||||
source ./sdata/exp/uninstall.sh
|
source ./sdata/step/exp-uninstall.sh
|
||||||
exit
|
exit
|
||||||
;;
|
;;
|
||||||
exp-update)
|
exp-update)
|
||||||
source ./sdata/exp/update.sh
|
source ./sdata/step/exp-update.sh
|
||||||
exit
|
exit
|
||||||
;;
|
;;
|
||||||
esac
|
esac
|
||||||
|
|||||||
@@ -17,17 +17,6 @@ This script updates your dotfiles by:
|
|||||||
5. Updating script permissions
|
5. Updating script permissions
|
||||||
"
|
"
|
||||||
}
|
}
|
||||||
0
|
|
||||||
;;
|
|
||||||
shift
|
|
||||||
;;
|
|
||||||
*)
|
|
||||||
log_error "Unknown option: $1"
|
|
||||||
echo "Use --help for usage information"
|
|
||||||
exit 1
|
|
||||||
;;
|
|
||||||
esac
|
|
||||||
done
|
|
||||||
# `man getopt` to see more
|
# `man getopt` to see more
|
||||||
para=$(getopt \
|
para=$(getopt \
|
||||||
-o hfpnv \
|
-o hfpnv \
|
||||||
@@ -52,6 +41,7 @@ FORCE_CHECK=false
|
|||||||
CHECK_PACKAGES=false
|
CHECK_PACKAGES=false
|
||||||
DRY_RUN=false
|
DRY_RUN=false
|
||||||
VERBOSE=false
|
VERBOSE=false
|
||||||
|
SKIP_NOTICE=false
|
||||||
|
|
||||||
eval set -- "$para"
|
eval set -- "$para"
|
||||||
while true ; do
|
while true ; do
|
||||||
|
|||||||
@@ -43,13 +43,6 @@ while true ; do
|
|||||||
--exp-files) EXPERIMENTAL_FILES_SCRIPT=true;shift;;
|
--exp-files) EXPERIMENTAL_FILES_SCRIPT=true;shift;;
|
||||||
--via-nix) INSTALL_VIA_NIX=true;shift;;
|
--via-nix) INSTALL_VIA_NIX=true;shift;;
|
||||||
|
|
||||||
## Update script specific options
|
|
||||||
-u|--update-force) UPDATE_FORCE=true;shift;;
|
|
||||||
-p|--packages) UPDATE_PACKAGES=true;shift;;
|
|
||||||
-n|--dry-run) UPDATE_DRY_RUN=true;shift;;
|
|
||||||
-v|--verbose) UPDATE_VERBOSE=true;shift;;
|
|
||||||
--skip-notice) SKIP_NOTICE=true;shift;;
|
|
||||||
|
|
||||||
## Ones with parameter
|
## Ones with parameter
|
||||||
--fontset)
|
--fontset)
|
||||||
case $2 in
|
case $2 in
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
#!/usr/bin/env bash
|
#!/usr/bin/env bash
|
||||||
#
|
#
|
||||||
# test_update.sh - Test suite for update.sh
|
# exp-update-tester.sh - Test suite for update.sh
|
||||||
#
|
#
|
||||||
set -euo pipefail
|
set -euo pipefail
|
||||||
|
|
||||||
@@ -140,18 +140,18 @@ test_dots_structure() {
|
|||||||
|
|
||||||
cat > test_detection.sh << 'EOF'
|
cat > test_detection.sh << 'EOF'
|
||||||
#!/bin/bash
|
#!/bin/bash
|
||||||
REPO_DIR="$1"
|
REPO_ROOT="$1"
|
||||||
detect_repo_structure() {
|
detect_repo_structure() {
|
||||||
local found_dirs=()
|
local found_dirs=()
|
||||||
if [[ -d "${REPO_DIR}/dots/.config" ]]; then
|
if [[ -d "${REPO_ROOT}/dots/.config" ]]; then
|
||||||
found_dirs+=("dots/.config")
|
found_dirs+=("dots/.config")
|
||||||
[[ -d "${REPO_DIR}/dots/.local/bin" ]] && found_dirs+=("dots/.local/bin")
|
[[ -d "${REPO_ROOT}/dots/.local/bin" ]] && found_dirs+=("dots/.local/bin")
|
||||||
elif [[ -d "${REPO_DIR}/.config" ]]; then
|
elif [[ -d "${REPO_ROOT}/.config" ]]; then
|
||||||
found_dirs+=(".config")
|
found_dirs+=(".config")
|
||||||
[[ -d "${REPO_DIR}/.local/bin" ]] && found_dirs+=(".local/bin")
|
[[ -d "${REPO_ROOT}/.local/bin" ]] && found_dirs+=(".local/bin")
|
||||||
else
|
else
|
||||||
for candidate in "dots/.config" ".config" "dots/.local/bin" ".local/bin"; do
|
for candidate in "dots/.config" ".config" "dots/.local/bin" ".local/bin"; do
|
||||||
if [[ -d "${REPO_DIR}/${candidate}" ]]; then
|
if [[ -d "${REPO_ROOT}/${candidate}" ]]; then
|
||||||
if [[ ! " ${found_dirs[*]} " =~ " ${candidate} " ]]; then
|
if [[ ! " ${found_dirs[*]} " =~ " ${candidate} " ]]; then
|
||||||
found_dirs+=("${candidate}")
|
found_dirs+=("${candidate}")
|
||||||
fi
|
fi
|
||||||
@@ -200,18 +200,18 @@ test_flat_structure() {
|
|||||||
|
|
||||||
cat > test_detection.sh << 'EOF'
|
cat > test_detection.sh << 'EOF'
|
||||||
#!/bin/bash
|
#!/bin/bash
|
||||||
REPO_DIR="$1"
|
REPO_ROOT="$1"
|
||||||
detect_repo_structure() {
|
detect_repo_structure() {
|
||||||
local found_dirs=()
|
local found_dirs=()
|
||||||
if [[ -d "${REPO_DIR}/dots/.config" ]]; then
|
if [[ -d "${REPO_ROOT}/dots/.config" ]]; then
|
||||||
found_dirs+=("dots/.config")
|
found_dirs+=("dots/.config")
|
||||||
[[ -d "${REPO_DIR}/dots/.local/bin" ]] && found_dirs+=("dots/.local/bin")
|
[[ -d "${REPO_ROOT}/dots/.local/bin" ]] && found_dirs+=("dots/.local/bin")
|
||||||
elif [[ -d "${REPO_DIR}/.config" ]]; then
|
elif [[ -d "${REPO_ROOT}/.config" ]]; then
|
||||||
found_dirs+=(".config")
|
found_dirs+=(".config")
|
||||||
[[ -d "${REPO_DIR}/.local/bin" ]] && found_dirs+=(".local/bin")
|
[[ -d "${REPO_ROOT}/.local/bin" ]] && found_dirs+=(".local/bin")
|
||||||
else
|
else
|
||||||
for candidate in "dots/.config" ".config" "dots/.local/bin" ".local/bin"; do
|
for candidate in "dots/.config" ".config" "dots/.local/bin" ".local/bin"; do
|
||||||
if [[ -d "${REPO_DIR}/${candidate}" ]]; then
|
if [[ -d "${REPO_ROOT}/${candidate}" ]]; then
|
||||||
if [[ ! " ${found_dirs[*]} " =~ " ${candidate} " ]]; then
|
if [[ ! " ${found_dirs[*]} " =~ " ${candidate} " ]]; then
|
||||||
found_dirs+=("${candidate}")
|
found_dirs+=("${candidate}")
|
||||||
fi
|
fi
|
||||||
@@ -285,16 +285,16 @@ EOF
|
|||||||
|
|
||||||
cat > test_ignore.sh << 'EOF'
|
cat > test_ignore.sh << 'EOF'
|
||||||
#!/bin/bash
|
#!/bin/bash
|
||||||
REPO_DIR="$1"
|
REPO_ROOT="$1"
|
||||||
UPDATE_IGNORE_FILE="${REPO_DIR}/.updateignore"
|
UPDATE_IGNORE_FILE="${REPO_ROOT}/.updateignore"
|
||||||
HOME_UPDATE_IGNORE_FILE="/dev/null"
|
HOME_UPDATE_IGNORE_FILE="/dev/null"
|
||||||
|
|
||||||
should_ignore() {
|
should_ignore() {
|
||||||
local file_path="$1"
|
local file_path="$1"
|
||||||
local relative_path="${file_path#$HOME/}"
|
local relative_path="${file_path#$HOME/}"
|
||||||
local repo_relative=""
|
local repo_relative=""
|
||||||
if [[ "$file_path" == "$REPO_DIR"* ]]; then
|
if [[ "$file_path" == "$REPO_ROOT"* ]]; then
|
||||||
repo_relative="${file_path#$REPO_DIR/}"
|
repo_relative="${file_path#$REPO_ROOT/}"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
for ignore_file in "$UPDATE_IGNORE_FILE" "$HOME_UPDATE_IGNORE_FILE"; do
|
for ignore_file in "$UPDATE_IGNORE_FILE" "$HOME_UPDATE_IGNORE_FILE"; do
|
||||||
@@ -326,11 +326,11 @@ should_ignore() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
test_cases=(
|
test_cases=(
|
||||||
"$REPO_DIR/app.log:0"
|
"$REPO_ROOT/app.log:0"
|
||||||
"$REPO_DIR/secrets/key.txt:0"
|
"$REPO_ROOT/secrets/key.txt:0"
|
||||||
"$REPO_DIR/.config/private-config:0"
|
"$REPO_ROOT/.config/private-config:0"
|
||||||
"$REPO_DIR/.config/backup-file:0"
|
"$REPO_ROOT/.config/backup-file:0"
|
||||||
"$REPO_DIR/normal-config:1"
|
"$REPO_ROOT/normal-config:1"
|
||||||
)
|
)
|
||||||
|
|
||||||
all_passed=true
|
all_passed=true
|
||||||
@@ -14,22 +14,20 @@
|
|||||||
#
|
#
|
||||||
set -euo pipefail
|
set -euo pipefail
|
||||||
|
|
||||||
REPO_DIR="$(pwd)"
|
|
||||||
|
|
||||||
# TODO: For Arch(-Linux) specific part please check if pacman exists first, if not it should be skipped.
|
# TODO: For Arch(-Linux) specific part please check if pacman exists first, if not it should be skipped.
|
||||||
|
|
||||||
# TODO: Is this really needed? `git pull` should do a full upgrade, not partially, which means this script will be updated along with the folder structure together.
|
# TODO: Is this really needed? `git pull` should do a full upgrade, not partially, which means this script will be updated along with the folder structure together.
|
||||||
# Try to find the packages directory (different names in different versions)
|
# Try to find the packages directory (different names in different versions)
|
||||||
if [[ -d "${REPO_DIR}/dist-arch" ]]; then
|
if [[ -d "${REPO_ROOT}/dist-arch" ]]; then
|
||||||
ARCH_PACKAGES_DIR="${REPO_DIR}/dist-arch"
|
ARCH_PACKAGES_DIR="${REPO_ROOT}/dist-arch"
|
||||||
elif [[ -d "${REPO_DIR}/arch-packages" ]]; then
|
elif [[ -d "${REPO_ROOT}/arch-packages" ]]; then
|
||||||
ARCH_PACKAGES_DIR="${REPO_DIR}/arch-packages"
|
ARCH_PACKAGES_DIR="${REPO_ROOT}/arch-packages"
|
||||||
elif [[ -d "${REPO_DIR}/sdist/arch" ]]; then
|
elif [[ -d "${REPO_ROOT}/sdist/arch" ]]; then
|
||||||
ARCH_PACKAGES_DIR="${REPO_DIR}/sdist/arch"
|
ARCH_PACKAGES_DIR="${REPO_ROOT}/sdist/arch"
|
||||||
else
|
else
|
||||||
ARCH_PACKAGES_DIR="${REPO_DIR}/dist-arch" # Default fallback
|
ARCH_PACKAGES_DIR="${REPO_ROOT}/dist-arch" # Default fallback
|
||||||
fi
|
fi
|
||||||
UPDATE_IGNORE_FILE="${REPO_DIR}/.updateignore"
|
UPDATE_IGNORE_FILE="${REPO_ROOT}/.updateignore"
|
||||||
HOME_UPDATE_IGNORE_FILE="${HOME}/.updateignore"
|
HOME_UPDATE_IGNORE_FILE="${HOME}/.updateignore"
|
||||||
|
|
||||||
# TODO: Is this really needed? `git pull` should do a full upgrade, not partially, which means this script will be updated along with the folder structure together.
|
# TODO: Is this really needed? `git pull` should do a full upgrade, not partially, which means this script will be updated along with the folder structure together.
|
||||||
@@ -38,19 +36,19 @@ detect_repo_structure() {
|
|||||||
local found_dirs=()
|
local found_dirs=()
|
||||||
|
|
||||||
# Check for dots/ prefixed structure
|
# Check for dots/ prefixed structure
|
||||||
if [[ -d "${REPO_DIR}/dots/.config" ]]; then
|
if [[ -d "${REPO_ROOT}/dots/.config" ]]; then
|
||||||
found_dirs+=("dots/.config")
|
found_dirs+=("dots/.config")
|
||||||
[[ -d "${REPO_DIR}/dots/.local/bin" ]] && found_dirs+=("dots/.local/bin")
|
[[ -d "${REPO_ROOT}/dots/.local/bin" ]] && found_dirs+=("dots/.local/bin")
|
||||||
[[ -d "${REPO_DIR}/dots/.local/share" ]] && found_dirs+=("dots/.local/share")
|
[[ -d "${REPO_ROOT}/dots/.local/share" ]] && found_dirs+=("dots/.local/share")
|
||||||
# Check for flat structure
|
# Check for flat structure
|
||||||
elif [[ -d "${REPO_DIR}/.config" ]]; then
|
elif [[ -d "${REPO_ROOT}/.config" ]]; then
|
||||||
found_dirs+=(".config")
|
found_dirs+=(".config")
|
||||||
[[ -d "${REPO_DIR}/.local/bin" ]] && found_dirs+=(".local/bin")
|
[[ -d "${REPO_ROOT}/.local/bin" ]] && found_dirs+=(".local/bin")
|
||||||
[[ -d "${REPO_DIR}/.local/share" ]] && found_dirs+=(".local/share")
|
[[ -d "${REPO_ROOT}/.local/share" ]] && found_dirs+=(".local/share")
|
||||||
else
|
else
|
||||||
# Manual detection of common directories
|
# Manual detection of common directories
|
||||||
for candidate in "dots/.config" ".config" "config" "dots/.local/bin" ".local/bin" "dots/.local/share" ".local/share"; do
|
for candidate in "dots/.config" ".config" "config" "dots/.local/bin" ".local/bin" "dots/.local/share" ".local/share"; do
|
||||||
if [[ -d "${REPO_DIR}/${candidate}" ]]; then
|
if [[ -d "${REPO_ROOT}/${candidate}" ]]; then
|
||||||
# Avoid duplicates
|
# Avoid duplicates
|
||||||
if [[ ! " ${found_dirs[*]} " =~ " ${candidate} " ]]; then
|
if [[ ! " ${found_dirs[*]} " =~ " ${candidate} " ]]; then
|
||||||
found_dirs+=("${candidate}")
|
found_dirs+=("${candidate}")
|
||||||
@@ -104,8 +102,8 @@ should_ignore() {
|
|||||||
|
|
||||||
# Also get path relative to repo for repo-level ignores
|
# Also get path relative to repo for repo-level ignores
|
||||||
local repo_relative=""
|
local repo_relative=""
|
||||||
if [[ "$file_path" == "$REPO_DIR"* ]]; then
|
if [[ "$file_path" == "$REPO_ROOT"* ]]; then
|
||||||
repo_relative="${file_path#$REPO_DIR/}"
|
repo_relative="${file_path#$REPO_ROOT/}"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
# Check both repo and home ignore files
|
# Check both repo and home ignore files
|
||||||
@@ -354,7 +352,7 @@ check_pkgbuild_changed() {
|
|||||||
|
|
||||||
[[ ! -f "$pkgbuild_path" ]] && return 1
|
[[ ! -f "$pkgbuild_path" ]] && return 1
|
||||||
|
|
||||||
local relative_path="${pkgbuild_path#$REPO_DIR/}"
|
local relative_path="${pkgbuild_path#$REPO_ROOT/}"
|
||||||
|
|
||||||
if [[ "$FORCE_CHECK" == true ]]; then
|
if [[ "$FORCE_CHECK" == true ]]; then
|
||||||
return 0
|
return 0
|
||||||
@@ -501,7 +499,7 @@ build_packages() {
|
|||||||
log_error "Failed to build package $pkg_name"
|
log_error "Failed to build package $pkg_name"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
cd "$REPO_DIR" || log_die "Failed to return to repository directory"
|
cd "$REPO_ROOT" || log_die "Failed to return to repository directory"
|
||||||
done
|
done
|
||||||
|
|
||||||
if [[ $rebuilt_packages -eq 0 ]]; then
|
if [[ $rebuilt_packages -eq 0 ]]; then
|
||||||
@@ -523,7 +521,7 @@ get_changed_files() {
|
|||||||
# Get files that changed in the last pull
|
# Get files that changed in the last pull
|
||||||
local has_changes=false
|
local has_changes=false
|
||||||
while IFS= read -r file; do
|
while IFS= read -r file; do
|
||||||
local full_path="${REPO_DIR}/${file}"
|
local full_path="${REPO_ROOT}/${file}"
|
||||||
if [[ "$full_path" == "$dir_path"/* ]] && [[ -f "$full_path" ]]; then
|
if [[ "$full_path" == "$dir_path"/* ]] && [[ -f "$full_path" ]]; then
|
||||||
printf '%s\0' "$full_path"
|
printf '%s\0' "$full_path"
|
||||||
has_changes=true
|
has_changes=true
|
||||||
@@ -554,7 +552,7 @@ has_new_commits() {
|
|||||||
# Main script starts here
|
# Main script starts here
|
||||||
log_header "Dotfiles Update Script"
|
log_header "Dotfiles Update Script"
|
||||||
|
|
||||||
if [[ "$SKIP_NOTICE" != true ]]; then
|
if [[ "$SKIP_NOTICE" == false ]]; then
|
||||||
log_warning "THIS SCRIPT IS NOT FULLY TESTED AND MAY CAUSE ISSUES!"
|
log_warning "THIS SCRIPT IS NOT FULLY TESTED AND MAY CAUSE ISSUES!"
|
||||||
log_warning "It might be safer if you want to preserve your modifications and not delete added files,"
|
log_warning "It might be safer if you want to preserve your modifications and not delete added files,"
|
||||||
log_warning " but this can cause partial updates and therefore unexpected behavior like in #1856."
|
log_warning " but this can cause partial updates and therefore unexpected behavior like in #1856."
|
||||||
@@ -566,9 +564,10 @@ if [[ "$SKIP_NOTICE" != true ]]; then
|
|||||||
exit 1
|
exit 1
|
||||||
fi
|
fi
|
||||||
fi
|
fi
|
||||||
|
exit
|
||||||
|
|
||||||
# Check if we're in a git repository
|
# Check if we're in a git repository
|
||||||
cd "$REPO_DIR" || log_die "Failed to change to repository directory"
|
cd "$REPO_ROOT" || log_die "Failed to change to repository directory"
|
||||||
|
|
||||||
if git rev-parse --is-inside-work-tree &>/dev/null; then
|
if git rev-parse --is-inside-work-tree &>/dev/null; then
|
||||||
log_info "Running in git repository: $(git rev-parse --show-toplevel)"
|
log_info "Running in git repository: $(git rev-parse --show-toplevel)"
|
||||||
@@ -583,10 +582,10 @@ if detected_dirs=$(detect_repo_structure); then
|
|||||||
read -ra MONITOR_DIRS <<<"$detected_dirs"
|
read -ra MONITOR_DIRS <<<"$detected_dirs"
|
||||||
log_success "Detected repository structure:"
|
log_success "Detected repository structure:"
|
||||||
for dir in "${MONITOR_DIRS[@]}"; do
|
for dir in "${MONITOR_DIRS[@]}"; do
|
||||||
if [[ -d "${REPO_DIR}/${dir}" ]]; then
|
if [[ -d "${REPO_ROOT}/${dir}" ]]; then
|
||||||
log_info " ✓ ${REPO_DIR}/${dir}"
|
log_info " ✓ ${REPO_ROOT}/${dir}"
|
||||||
else
|
else
|
||||||
log_warning " ✗ ${REPO_DIR}/${dir} (not found, will skip)"
|
log_warning " ✗ ${REPO_ROOT}/${dir} (not found, will skip)"
|
||||||
fi
|
fi
|
||||||
done
|
done
|
||||||
else
|
else
|
||||||
@@ -763,7 +762,7 @@ if [[ "$process_files" == true ]]; then
|
|||||||
files_created=0
|
files_created=0
|
||||||
|
|
||||||
for dir_name in "${MONITOR_DIRS[@]}"; do
|
for dir_name in "${MONITOR_DIRS[@]}"; do
|
||||||
repo_dir_path="${REPO_DIR}/${dir_name}"
|
repo_dir_path="${REPO_ROOT}/${dir_name}"
|
||||||
|
|
||||||
if [[ ! -d "$repo_dir_path" ]]; then
|
if [[ ! -d "$repo_dir_path" ]]; then
|
||||||
if [[ "$VERBOSE" == true ]]; then
|
if [[ "$VERBOSE" == true ]]; then
|
||||||
@@ -882,7 +881,7 @@ fi
|
|||||||
if [[ ! -f "$HOME_UPDATE_IGNORE_FILE" && ! -f "$UPDATE_IGNORE_FILE" ]]; then
|
if [[ ! -f "$HOME_UPDATE_IGNORE_FILE" && ! -f "$UPDATE_IGNORE_FILE" ]]; then
|
||||||
echo
|
echo
|
||||||
log_info "Tip: Create ignore files to exclude files from updates:"
|
log_info "Tip: Create ignore files to exclude files from updates:"
|
||||||
echo " - Repository ignore: ${REPO_DIR}/.updateignore"
|
echo " - Repository ignore: ${REPO_ROOT}/.updateignore"
|
||||||
echo " - User ignore: ~/.updateignore"
|
echo " - User ignore: ~/.updateignore"
|
||||||
echo
|
echo
|
||||||
echo "Example patterns:"
|
echo "Example patterns:"
|
||||||
Reference in New Issue
Block a user