mirror of
https://github.com/kuhyx/testsAndMisc.git
synced 2026-11-11 20:54:00 +01:00
setup_syncyomi.sh 408 -> 138 (two cuts), setup_personal_website.sh 396 -> 192, fix_thorium.sh 377 -> 208. All three already declared SCRIPT_DIR and the splitter added a second one, which aborts at runtime with "readonly variable" while bash -n and shellcheck stay clean. The stubbed run caught it; the splitter now reuses an existing declaration. Fixed SC2164 in build_website rather than suppressing it: a bare cd "$WEBSITE_SRC" inside a subshell, with pnpm install and pnpm run build after it. A failed cd would have built in the caller's directory. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_011w2Pj4Ek3ZNMQVYcFHgXDY
209 lines
4.8 KiB
Bash
Executable File
209 lines
4.8 KiB
Bash
Executable File
#!/usr/bin/env bash
|
|
|
|
# Fix Thorium Browser crashes and startup issues
|
|
#
|
|
# Common causes addressed:
|
|
# - Corrupted Local State file (most common)
|
|
# - Stale singleton lock files
|
|
# - Corrupted GPU/shader cache
|
|
# - Profile database corruption
|
|
#
|
|
# Usage:
|
|
# ./fix_thorium.sh # Auto-fix common issues
|
|
# ./fix_thorium.sh --aggressive # Also clear more caches (may lose some settings)
|
|
# ./fix_thorium.sh --test # Test if Thorium starts after fix
|
|
|
|
set -euo pipefail
|
|
|
|
SCRIPT_DIR="$(dirname "$(readlink -f "$0")")"
|
|
# shellcheck source=../../lib/common.sh
|
|
source "$SCRIPT_DIR/../../lib/common.sh"
|
|
|
|
# Configuration
|
|
THORIUM_CONFIG_DIR="${HOME}/.config/thorium"
|
|
BACKUP_SUFFIX=".bak.$(date +%Y%m%d_%H%M%S)"
|
|
AGGRESSIVE=false
|
|
TEST_AFTER=false
|
|
|
|
# Colors for output
|
|
RED='\033[0;31m'
|
|
GREEN='\033[0;32m'
|
|
YELLOW='\033[1;33m'
|
|
NC='\033[0m' # No Color
|
|
|
|
usage() {
|
|
cat << EOF
|
|
fix_thorium.sh - Fix Thorium Browser crashes and startup issues
|
|
|
|
Usage: $(basename "$0") [OPTIONS]
|
|
|
|
Options:
|
|
--aggressive Clear additional caches (IndexedDB, Service Worker, etc.)
|
|
May cause loss of some site data but more thorough fix
|
|
--test Test if Thorium starts successfully after applying fixes
|
|
--dry-run Show what would be done without making changes
|
|
-h, --help Show this help message
|
|
|
|
Common issues fixed:
|
|
- Corrupted 'Local State' file (causes immediate segfault)
|
|
- Stale singleton lock files (prevents startup)
|
|
- Corrupted GPU/shader cache
|
|
- Crashpad errors
|
|
|
|
Examples:
|
|
$(basename "$0") # Apply standard fixes
|
|
$(basename "$0") --test # Fix and verify browser starts
|
|
$(basename "$0") --aggressive # Deep clean (use if standard fix fails)
|
|
EOF
|
|
}
|
|
|
|
DRY_RUN=false
|
|
|
|
while [[ $# -gt 0 ]]; do
|
|
case "$1" in
|
|
--aggressive)
|
|
AGGRESSIVE=true
|
|
shift
|
|
;;
|
|
--test)
|
|
TEST_AFTER=true
|
|
shift
|
|
;;
|
|
--dry-run)
|
|
DRY_RUN=true
|
|
shift
|
|
;;
|
|
-h | --help)
|
|
usage
|
|
exit 0
|
|
;;
|
|
*)
|
|
log_error "Unknown option: $1"
|
|
usage
|
|
exit 1
|
|
;;
|
|
esac
|
|
done
|
|
|
|
# Check if Thorium is installed
|
|
check_thorium_installed() {
|
|
if ! command -v thorium-browser &> /dev/null; then
|
|
log_error "thorium-browser not found in PATH"
|
|
echo -e "${YELLOW}Install with: yay -S thorium-browser-bin${NC}"
|
|
exit 1
|
|
fi
|
|
log_info "Found Thorium: $(thorium-browser --version 2> /dev/null | head -1)"
|
|
}
|
|
|
|
# Check if config directory exists
|
|
check_config_exists() {
|
|
if [[ ! -d $THORIUM_CONFIG_DIR ]]; then
|
|
log_warn "Thorium config directory not found: $THORIUM_CONFIG_DIR"
|
|
log_info "This may be a fresh install - try running thorium-browser directly"
|
|
exit 0
|
|
fi
|
|
}
|
|
|
|
# Kill any running Thorium processes
|
|
kill_thorium() {
|
|
local count
|
|
count=$(pgrep -c thorium 2> /dev/null || true)
|
|
count=${count:-0}
|
|
|
|
if [[ $count -gt 0 ]]; then
|
|
log_info "Stopping $count running Thorium process(es)..."
|
|
if [[ $DRY_RUN == true ]]; then
|
|
echo " [dry-run] Would kill thorium processes"
|
|
else
|
|
pkill -9 thorium 2> /dev/null || true
|
|
sleep 1
|
|
fi
|
|
fi
|
|
}
|
|
|
|
# Backup a file/directory if it exists
|
|
backup_if_exists() {
|
|
local path="$1"
|
|
local name
|
|
name=$(basename "$path")
|
|
|
|
if [[ -e $path ]]; then
|
|
local backup_path="${path}${BACKUP_SUFFIX}"
|
|
if [[ $DRY_RUN == true ]]; then
|
|
echo " [dry-run] Would backup: $name"
|
|
else
|
|
mv "$path" "$backup_path"
|
|
log_ok "Backed up: $name -> $(basename "$backup_path")"
|
|
fi
|
|
return 0
|
|
fi
|
|
return 1
|
|
}
|
|
|
|
# Remove file/directory if it exists
|
|
remove_if_exists() {
|
|
local path="$1"
|
|
local name
|
|
name=$(basename "$path")
|
|
|
|
if [[ -e $path ]]; then
|
|
if [[ $DRY_RUN == true ]]; then
|
|
echo " [dry-run] Would remove: $name"
|
|
else
|
|
rm -rf "$path"
|
|
log_ok "Removed: $name"
|
|
fi
|
|
return 0
|
|
fi
|
|
return 1
|
|
}
|
|
|
|
# shellcheck source=lib/thorium_repairs.sh
|
|
source "$SCRIPT_DIR/lib/thorium_repairs.sh"
|
|
|
|
main() {
|
|
echo "========================================"
|
|
echo " Thorium Browser Fix Script"
|
|
echo "========================================"
|
|
echo ""
|
|
|
|
if [[ $DRY_RUN == true ]]; then
|
|
echo -e "${YELLOW}[DRY RUN MODE - no changes will be made]${NC}"
|
|
echo ""
|
|
fi
|
|
|
|
check_thorium_installed
|
|
check_config_exists
|
|
|
|
echo ""
|
|
log_info "Applying fixes to: $THORIUM_CONFIG_DIR"
|
|
echo ""
|
|
|
|
kill_thorium
|
|
fix_local_state
|
|
fix_singleton_locks
|
|
fix_gpu_cache
|
|
fix_crash_reports
|
|
fix_aggressive
|
|
|
|
echo ""
|
|
echo "========================================"
|
|
log_ok "Fixes applied!"
|
|
echo "========================================"
|
|
|
|
if [[ $DRY_RUN != true ]]; then
|
|
echo ""
|
|
echo "Backups created with suffix: $BACKUP_SUFFIX"
|
|
echo "To restore: mv ~/.config/thorium/Local\\ State${BACKUP_SUFFIX} ~/.config/thorium/Local\\ State"
|
|
fi
|
|
|
|
test_thorium
|
|
|
|
if [[ $TEST_AFTER != true ]]; then
|
|
echo ""
|
|
echo "Run 'thorium-browser' to test, or use: $(basename "$0") --test"
|
|
fi
|
|
}
|
|
|
|
main "$@"
|