mirror of
https://github.com/arkenfox/user.js.git
synced 2025-11-22 21:00:28 -05:00
Use the `-f' option to instruct curl to exit with a non-zero exit code if the HTTP response indicates an error via its status code. This is the default behavior for wget, but curl will send the request and exit normally (with exit code equals to zero), as long as it's received a response from the server.
185 lines
6 KiB
Bash
Executable file
185 lines
6 KiB
Bash
Executable file
#!/usr/bin/env bash
|
|
|
|
## prefs.js cleaner for Linux/Mac
|
|
## 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 -fso'
|
|
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 firefox 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 Firefox profile seems to be in use. Close Firefox 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/arkenfox/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 Firefox 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 Firefox 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 Firefox 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 Firefox 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 Firefox 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 Firefox 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 arkenfox user.js GitHub repository.\n"
|
|
;;
|
|
Exit)
|
|
fQuit 0
|
|
;;
|
|
esac
|
|
done
|
|
|
|
fQuit 0
|