187 lines
6.6 KiB
Bash
187 lines
6.6 KiB
Bash
|
#!/usr/bin/env bash
|
||
|
|
||
|
## prefs.js cleaner for Linux/Mac
|
||
|
## /!\ This script is a vendored/adapted version of Arkenfox own prefsCleaner.sh /!\
|
||
|
## author: @claustromaniac
|
||
|
## version: 2.1
|
||
|
|
||
|
## special thanks to @overdodactyl and @earthlng for a few snippets that I stol..*cough* borrowed from the updater.sh
|
||
|
|
||
|
## DON'T GO HIGHER THAN VERSION x.9 !! ( because of ASCII comparison in update_prefsCleaner() )
|
||
|
|
||
|
readonly CURRDIR=$(pwd)
|
||
|
|
||
|
## get the full path of this script (readlink for Linux, greadlink for Mac with coreutils installed)
|
||
|
SCRIPT_FILE=$(readlink -f "${BASH_SOURCE[0]}" 2>/dev/null || greadlink -f "${BASH_SOURCE[0]}" 2>/dev/null)
|
||
|
|
||
|
## fallback for Macs without coreutils
|
||
|
[ -z "$SCRIPT_FILE" ] && SCRIPT_FILE=${BASH_SOURCE[0]}
|
||
|
|
||
|
|
||
|
AUTOUPDATE=true
|
||
|
QUICKSTART=false
|
||
|
|
||
|
## download method priority: curl -> wget
|
||
|
DOWNLOAD_METHOD=''
|
||
|
if command -v curl >/dev/null; then
|
||
|
DOWNLOAD_METHOD='curl --max-redirs 3 -so'
|
||
|
elif command -v wget >/dev/null; then
|
||
|
DOWNLOAD_METHOD='wget --max-redirect 3 --quiet -O'
|
||
|
else
|
||
|
AUTOUPDATE=false
|
||
|
echo -e "No curl or wget detected.\nAutomatic self-update disabled!"
|
||
|
fi
|
||
|
|
||
|
fQuit() {
|
||
|
## change directory back to the original working directory
|
||
|
cd "${CURRDIR}"
|
||
|
[ "$1" -eq 0 ] && echo -e "\n$2" || echo -e "\n$2" >&2
|
||
|
exit $1
|
||
|
}
|
||
|
|
||
|
fUsage() {
|
||
|
echo -e "\nUsage: $0 [-ds]"
|
||
|
echo -e "
|
||
|
Optional Arguments:
|
||
|
-s Start immediately
|
||
|
-d Don't auto-update prefsCleaner.sh"
|
||
|
}
|
||
|
|
||
|
download_file() { # expects URL as argument ($1)
|
||
|
declare -r tf=$(mktemp)
|
||
|
|
||
|
$DOWNLOAD_METHOD "${tf}" "$1" &>/dev/null && echo "$tf" || echo '' # return the temp-filename or empty string on error
|
||
|
}
|
||
|
|
||
|
fFF_check() {
|
||
|
# there are many ways to see if thunderbird is running or not, some more reliable than others
|
||
|
# this isn't elegant and might not be future-proof but should at least be compatible with any environment
|
||
|
while [ -e lock ]; do
|
||
|
echo -e "\nThis Thunderbird profile seems to be in use. Close Thunderbird and try again.\n" >&2
|
||
|
read -r -p "Press any key to continue."
|
||
|
done
|
||
|
}
|
||
|
|
||
|
## returns the version number of a prefsCleaner.sh file
|
||
|
get_prefsCleaner_version() {
|
||
|
echo "$(sed -n '5 s/.*[[:blank:]]\([[:digit:]]*\.[[:digit:]]*\)/\1/p' "$1")"
|
||
|
}
|
||
|
|
||
|
## updates the prefsCleaner.sh file based on the latest public version
|
||
|
update_prefsCleaner() {
|
||
|
declare -r tmpfile="$(download_file 'https://raw.githubusercontent.com/HorlogeSkynet/thunderbird-user.js/master/prefsCleaner.sh')"
|
||
|
[ -z "$tmpfile" ] && echo -e "Error! Could not download prefsCleaner.sh" && return 1 # check if download failed
|
||
|
|
||
|
[[ $(get_prefsCleaner_version "$SCRIPT_FILE") == $(get_prefsCleaner_version "$tmpfile") ]] && return 0
|
||
|
|
||
|
mv "$tmpfile" "$SCRIPT_FILE"
|
||
|
chmod u+x "$SCRIPT_FILE"
|
||
|
"$SCRIPT_FILE" "$@" -d
|
||
|
exit 0
|
||
|
}
|
||
|
|
||
|
fClean() {
|
||
|
# the magic happens here
|
||
|
prefs="@@"
|
||
|
prefexp="user_pref[ ]*\([ ]*[\"']([^\"']+)[\"'][ ]*,"
|
||
|
while read -r line; do
|
||
|
if [[ "$line" =~ $prefexp && $prefs != *"@@${BASH_REMATCH[1]}@@"* ]]; then
|
||
|
prefs="${prefs}${BASH_REMATCH[1]}@@"
|
||
|
fi
|
||
|
done <<< "$(grep -E "$prefexp" user.js)"
|
||
|
|
||
|
while IFS='' read -r line || [[ -n "$line" ]]; do
|
||
|
if [[ "$line" =~ ^$prefexp ]]; then
|
||
|
if [[ $prefs != *"@@${BASH_REMATCH[1]}@@"* ]]; then
|
||
|
echo "$line"
|
||
|
fi
|
||
|
else
|
||
|
echo "$line"
|
||
|
fi
|
||
|
done < "$1" > prefs.js
|
||
|
}
|
||
|
|
||
|
fStart() {
|
||
|
if [ ! -e user.js ]; then
|
||
|
fQuit 1 "user.js not found in the current directory."
|
||
|
elif [ ! -e prefs.js ]; then
|
||
|
fQuit 1 "prefs.js not found in the current directory."
|
||
|
fi
|
||
|
|
||
|
fFF_check
|
||
|
mkdir -p prefsjs_backups
|
||
|
bakfile="prefsjs_backups/prefs.js.backup.$(date +"%Y-%m-%d_%H%M")"
|
||
|
mv prefs.js "${bakfile}" || fQuit 1 "Operation aborted.\nReason: Could not create backup file $bakfile"
|
||
|
echo -e "\nprefs.js backed up: $bakfile"
|
||
|
echo "Cleaning prefs.js..."
|
||
|
fClean "$bakfile"
|
||
|
fQuit 0 "All done!"
|
||
|
}
|
||
|
|
||
|
|
||
|
while getopts "sd" opt; do
|
||
|
case $opt in
|
||
|
s)
|
||
|
QUICKSTART=true
|
||
|
;;
|
||
|
d)
|
||
|
AUTOUPDATE=false
|
||
|
;;
|
||
|
esac
|
||
|
done
|
||
|
|
||
|
## change directory to the Thunderbird profile directory
|
||
|
cd "$(dirname "${SCRIPT_FILE}")"
|
||
|
|
||
|
# Check if running as root and if any files have the owner as root/wheel.
|
||
|
if [ "${EUID:-"$(id -u)"}" -eq 0 ]; then
|
||
|
fQuit 1 "You shouldn't run this with elevated privileges (such as with doas/sudo)."
|
||
|
elif [ -n "$(find ./ -user 0)" ]; then
|
||
|
printf 'It looks like this script was previously run with elevated privileges,
|
||
|
you will need to change ownership of the following files to your user:\n'
|
||
|
find . -user 0
|
||
|
fQuit 1
|
||
|
fi
|
||
|
|
||
|
[ "$AUTOUPDATE" = true ] && update_prefsCleaner "$@"
|
||
|
|
||
|
echo -e "\n\n"
|
||
|
echo " ╔══════════════════════════╗"
|
||
|
echo " ║ prefs.js cleaner ║"
|
||
|
echo " ║ by claustromaniac ║"
|
||
|
echo " ║ v2.1 ║"
|
||
|
echo " ╚══════════════════════════╝"
|
||
|
echo -e "\nThis script should be run from your Thunderbird profile directory.\n"
|
||
|
echo "It will remove any entries from prefs.js that also exist in user.js."
|
||
|
echo "This will allow inactive preferences to be reset to their default values."
|
||
|
echo -e "\nThis Thunderbird profile shouldn't be in use during the process.\n"
|
||
|
|
||
|
[ "$QUICKSTART" = true ] && fStart
|
||
|
|
||
|
echo -e "\nIn order to proceed, select a command below by entering its corresponding number.\n"
|
||
|
|
||
|
select option in Start Help Exit; do
|
||
|
case $option in
|
||
|
Start)
|
||
|
fStart
|
||
|
;;
|
||
|
Help)
|
||
|
fUsage
|
||
|
echo -e "\nThis script creates a backup of your prefs.js file before doing anything."
|
||
|
echo -e "It should be safe, but you can follow these steps if something goes wrong:\n"
|
||
|
echo "1. Make sure Thunderbird is closed."
|
||
|
echo "2. Delete prefs.js in your profile folder."
|
||
|
echo "3. Delete Invalidprefs.js if you have one in the same folder."
|
||
|
echo "4. Rename or copy your latest backup to prefs.js."
|
||
|
echo "5. Run Thunderbird and see if you notice anything wrong with it."
|
||
|
echo "6. If you do notice something wrong, especially with your extensions, and/or with the UI, go to about:support, and restart Thunderbird with add-ons disabled. Then, restart it again normally, and see if the problems were solved."
|
||
|
echo -e "If you are able to identify the cause of your issues, please bring it up on the thunderbird user.js GitHub repository.\n"
|
||
|
;;
|
||
|
Exit)
|
||
|
fQuit 0
|
||
|
;;
|
||
|
esac
|
||
|
done
|
||
|
|
||
|
fQuit 0
|