diff --git a/.config/picom/picom.conf b/.config/picom/picom.conf index b318cd1e9..6757afd25 100644 --- a/.config/picom/picom.conf +++ b/.config/picom/picom.conf @@ -24,8 +24,7 @@ blur-kern = "3x3box"; blur-strength = 5; blur-background-exclude = [ "class_g = 'Dunst'", - "class_g = 'librewolf-default'", - "class_g = 'firefox-default'", + "class_g = 'firefox'", "class_g = 'LibreWolf'", "class_g = 'easyeffects'", "class_g *= 'slop'", diff --git a/.config/zsh/profile b/.config/zsh/profile index 29ad4b368..a15ed5b6c 100644 --- a/.config/zsh/profile +++ b/.config/zsh/profile @@ -3,7 +3,7 @@ export EDITOR="nvim" export TERMINAL="kitty" -export BROWSER="librewolf" +export BROWSER="firefox" # Settings export VIRTUAL_ENV_DISABLE_PROMPT=1 diff --git a/.librewolf/generate.sh b/.librewolf/generate.sh deleted file mode 100755 index 39f8ce775..000000000 --- a/.librewolf/generate.sh +++ /dev/null @@ -1,3 +0,0 @@ -#!/bin/sh -# cd $HOME/.dotfiles/.librewolf || exit -librewolf --no-remote --CreateProfile "librewolf $HOME/.local/share/librewolf" diff --git a/.librewolf/librewolf.overrides.cfg b/.librewolf/librewolf.overrides.cfg deleted file mode 100644 index 38b0362e7..000000000 --- a/.librewolf/librewolf.overrides.cfg +++ /dev/null @@ -1,9 +0,0 @@ -defaultPref("identity.fxaccounts.enabled", true); -defaultPref("middlemouse.paste", false); -defaultPref("general.autoScroll", true); -defaultPref("security.OCSP.require", false); -defaultPref("browser.uidensity", 1); -defaultPref("browser.compactmode.show", true); -defaultPref("browser.fullscreen.autohide", false); -defaultPref("full-screen-api.ignore-widgets", true); -defaultPref("toolkit.legacyUserProfileCustomizations.stylesheets", true); diff --git a/.local/share/librewolf/chrome/includes/colours.css b/.local/share/firefox/chrome/includes/colours.css similarity index 100% rename from .local/share/librewolf/chrome/includes/colours.css rename to .local/share/firefox/chrome/includes/colours.css diff --git a/.local/share/librewolf/chrome/includes/config.css b/.local/share/firefox/chrome/includes/config.css similarity index 100% rename from .local/share/librewolf/chrome/includes/config.css rename to .local/share/firefox/chrome/includes/config.css diff --git a/.local/share/librewolf/chrome/includes/layout.css b/.local/share/firefox/chrome/includes/layout.css similarity index 100% rename from .local/share/librewolf/chrome/includes/layout.css rename to .local/share/firefox/chrome/includes/layout.css diff --git a/.local/share/librewolf/chrome/includes/nav-bar.css b/.local/share/firefox/chrome/includes/nav-bar.css similarity index 100% rename from .local/share/librewolf/chrome/includes/nav-bar.css rename to .local/share/firefox/chrome/includes/nav-bar.css diff --git a/.local/share/librewolf/chrome/includes/responsive.css b/.local/share/firefox/chrome/includes/responsive.css similarity index 100% rename from .local/share/librewolf/chrome/includes/responsive.css rename to .local/share/firefox/chrome/includes/responsive.css diff --git a/.local/share/librewolf/chrome/includes/tabs.css b/.local/share/firefox/chrome/includes/tabs.css similarity index 100% rename from .local/share/librewolf/chrome/includes/tabs.css rename to .local/share/firefox/chrome/includes/tabs.css diff --git a/.local/share/librewolf/chrome/userChrome.css b/.local/share/firefox/chrome/userChrome.css similarity index 100% rename from .local/share/librewolf/chrome/userChrome.css rename to .local/share/firefox/chrome/userChrome.css diff --git a/.local/share/firefox/updater.sh b/.local/share/firefox/updater.sh new file mode 100755 index 000000000..4d1b147df --- /dev/null +++ b/.local/share/firefox/updater.sh @@ -0,0 +1,401 @@ +#!/usr/bin/env bash + +## arkenfox user.js updater for macOS and Linux + +## version: 3.7 +## Author: Pat Johnson (@overdodactyl) +## Additional contributors: @earthlng, @ema-pe, @claustromaniac, @infinitewarp + +## DON'T GO HIGHER THAN VERSION x.9 !! ( because of ASCII comparison in update_updater() ) + +# Check if running as root and if any files have the owner/group as root/wheel. +if [ "${EUID:-"$(id -u)"}" -eq 0 ]; then + printf "You shouldn\'t run this with elevated privileges (such as with doas/sudo).\n" + exit 1 +elif [ -n "$(find ./ -user 0 -o -group 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 -o -group 0 + exit 1 +fi + +readonly CURRDIR=$(pwd) + +SCRIPT_FILE=$(readlink -f "${BASH_SOURCE[0]}" 2>/dev/null || greadlink -f "${BASH_SOURCE[0]}" 2>/dev/null) +[ -z "$SCRIPT_FILE" ] && SCRIPT_FILE=${BASH_SOURCE[0]} +readonly SCRIPT_DIR=$(dirname "${SCRIPT_FILE}") + + +######################### +# Base variables # +######################### + +# Colors used for printing +RED='\033[0;31m' +BLUE='\033[0;34m' +BBLUE='\033[1;34m' +GREEN='\033[0;32m' +ORANGE='\033[0;33m' +CYAN='\033[0;36m' +NC='\033[0m' # No Color + +# Argument defaults +UPDATE='check' +CONFIRM='yes' +OVERRIDE='user-overrides.js' +BACKUP='multiple' +COMPARE=false +SKIPOVERRIDE=false +VIEW=false +PROFILE_PATH=false +ESR=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 + echo -e "${RED}This script requires curl or wget.\nProcess aborted${NC}" + exit 1 +fi + + +show_banner() { + echo -e "${BBLUE} + ############################################################################ + #### #### + #### arkenfox user.js #### + #### Hardening the Privacy and Security Settings of Firefox #### + #### Maintained by @Thorin-Oakenpants and @earthlng #### + #### Updater for macOS and Linux by @overdodactyl #### + #### #### + ############################################################################" + echo -e "${NC}\n" + echo -e "Documentation for this script is available here: ${CYAN}https://github.com/arkenfox/user.js/wiki/5.1-Updater-[Options]#-maclinux${NC}\n" +} + +######################### +# Arguments # +######################### + +usage() { + echo + echo -e "${BLUE}Usage: $0 [-bcdehlnrsuv] [-p PROFILE] [-o OVERRIDE]${NC}" 1>&2 # Echo usage string to standard error + echo -e " +Optional Arguments: + -h Show this help message and exit. + -p PROFILE Path to your Firefox profile (if different than the dir of this script) + IMPORTANT: If the path contains spaces, wrap the entire argument in quotes. + -l Choose your Firefox profile from a list + -u Update updater.sh and execute silently. Do not seek confirmation. + -d Do not look for updates to updater.sh. + -s Silently update user.js. Do not seek confirmation. + -b Only keep one backup of each file. + -c Create a diff file comparing old and new user.js within userjs_diffs. + -o OVERRIDE Filename or path to overrides file (if different than user-overrides.js). + If used with -p, paths should be relative to PROFILE or absolute paths + If given a directory, all files inside will be appended recursively. + You can pass multiple files or directories by passing a comma separated list. + Note: If a directory is given, only files inside ending in the extension .js are appended + IMPORTANT: Do not add spaces between files/paths. Ex: -o file1.js,file2.js,dir1 + IMPORTANT: If any file/path contains spaces, wrap the entire argument in quotes. + Ex: -o \"override folder\" + -n Do not append any overrides, even if user-overrides.js exists. + -v Open the resulting user.js file. + -r Only download user.js to a temporary file and open it. + -e Activate ESR related preferences." + echo + exit 1 +} + +######################### +# File Handling # +######################### + +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 +} + +open_file() { # expects one argument: file_path + if [ "$(uname)" == 'Darwin' ]; then + open "$1" + elif [ "$(uname -s | cut -c -5)" == "Linux" ]; then + xdg-open "$1" + else + echo -e "${RED}Error: Sorry, opening files is not supported for your OS.${NC}" + fi +} + +readIniFile() { # expects one argument: absolute path of profiles.ini + declare -r inifile="$1" + + # tempIni will contain: [ProfileX], Name=, IsRelative= and Path= (and Default= if present) of the only (if) or the selected (else) profile + if [ "$(grep -c '^\[Profile' "${inifile}")" -eq "1" ]; then ### only 1 profile found + tempIni="$(grep '^\[Profile' -A 4 "${inifile}")" + else + echo -e "Profiles found:\n––––––––––––––––––––––––––––––" + ## cmd-substitution to strip trailing newlines and in quotes to keep internal ones: + echo "$(grep --color=never -E 'Default=[^1]|\[Profile[0-9]*\]|Name=|Path=|^$' "${inifile}")" + echo '––––––––––––––––––––––––––––––' + read -p 'Select the profile number ( 0 for Profile0, 1 for Profile1, etc ) : ' -r + echo -e "\n" + if [[ $REPLY =~ ^(0|[1-9][0-9]*)$ ]]; then + tempIni="$(grep "^\[Profile${REPLY}" -A 4 "${inifile}")" || { + echo -e "${RED}Profile${REPLY} does not exist!${NC}" && exit 1 + } + else + echo -e "${RED}Invalid selection!${NC}" && exit 1 + fi + fi + + # extracting 0 or 1 from the "IsRelative=" line + declare -r pathisrel=$(sed -n 's/^IsRelative=\([01]\)$/\1/p' <<< "${tempIni}") + + # extracting only the path itself, excluding "Path=" + PROFILE_PATH=$(sed -n 's/^Path=\(.*\)$/\1/p' <<< "${tempIni}") + # update global variable if path is relative + [[ ${pathisrel} == "1" ]] && PROFILE_PATH="$(dirname "${inifile}")/${PROFILE_PATH}" +} + +getProfilePath() { + declare -r f1=~/Library/Application\ Support/Firefox/profiles.ini + declare -r f2=~/.mozilla/firefox/profiles.ini + + if [ "$PROFILE_PATH" = false ]; then + PROFILE_PATH="$SCRIPT_DIR" + elif [ "$PROFILE_PATH" = 'list' ]; then + if [[ -f "$f1" ]]; then + readIniFile "$f1" # updates PROFILE_PATH or exits on error + elif [[ -f "$f2" ]]; then + readIniFile "$f2" + else + echo -e "${RED}Error: Sorry, -l is not supported for your OS${NC}" + exit 1 + fi + #else + # PROFILE_PATH already set by user with -p + fi +} + +######################### +# Update updater.sh # +######################### + +# Returns the version number of a updater.sh file +get_updater_version() { + echo "$(sed -n '5 s/.*[[:blank:]]\([[:digit:]]*\.[[:digit:]]*\)/\1/p' "$1")" +} + +# Update updater.sh +# Default: Check for update, if available, ask user if they want to execute it +# Args: +# -d: New version will not be looked for and update will not occur +# -u: Check for update, if available, execute without asking +update_updater() { + [ "$UPDATE" = 'no' ] && return 0 # User signified not to check for updates + + declare -r tmpfile="$(download_file 'https://raw.githubusercontent.com/arkenfox/user.js/master/updater.sh')" + [ -z "${tmpfile}" ] && echo -e "${RED}Error! Could not download updater.sh${NC}" && return 1 # check if download failed + + if [[ $(get_updater_version "$SCRIPT_FILE") < $(get_updater_version "${tmpfile}") ]]; then + if [ "$UPDATE" = 'check' ]; then + echo -e "There is a newer version of updater.sh available. ${RED}Update and execute Y/N?${NC}" + read -p "" -n 1 -r + echo -e "\n\n" + [[ $REPLY =~ ^[Yy]$ ]] || return 0 # Update available, but user chooses not to update + fi + else + return 0 # No update available + fi + mv "${tmpfile}" "$SCRIPT_FILE" + chmod u+x "$SCRIPT_FILE" + "$SCRIPT_FILE" "$@" -d + exit 0 +} + +######################### +# Update user.js # +######################### + +# Returns version number of a user.js file +get_userjs_version() { + [ -e "$1" ] && echo "$(sed -n '4p' "$1")" || echo "Not detected." +} + +add_override() { + input=$1 + if [ -f "$input" ]; then + echo "" >> user.js + cat "$input" >> user.js + echo -e "Status: ${GREEN}Override file appended:${NC} ${input}" + elif [ -d "$input" ]; then + SAVEIFS=$IFS + IFS=$'\n\b' # Set IFS + FILES="${input}"/*.js + for f in $FILES + do + add_override "$f" + done + IFS=$SAVEIFS # restore $IFS + else + echo -e "${ORANGE}Warning: Could not find override file:${NC} ${input}" + fi +} + +remove_comments() { # expects 2 arguments: from-file and to-file + sed -e '/^\/\*.*\*\/[[:space:]]*$/d' -e '/^\/\*/,/\*\//d' -e 's|^[[:space:]]*//.*$||' -e '/^[[:space:]]*$/d' -e 's|);[[:space:]]*//.*|);|' "$1" > "$2" +} + +# Applies latest version of user.js and any custom overrides +update_userjs() { + declare -r newfile="$(download_file 'https://raw.githubusercontent.com/arkenfox/user.js/master/user.js')" + [ -z "${newfile}" ] && echo -e "${RED}Error! Could not download user.js${NC}" && return 1 # check if download failed + + echo -e "Please observe the following information: + Firefox profile: ${ORANGE}$(pwd)${NC} + Available online: ${ORANGE}$(get_userjs_version "$newfile")${NC} + Currently using: ${ORANGE}$(get_userjs_version user.js)${NC}\n\n" + + if [ "$CONFIRM" = 'yes' ]; then + echo -e "This script will update to the latest user.js file and append any custom configurations from user-overrides.js. ${RED}Continue Y/N? ${NC}" + read -p "" -n 1 -r + echo -e "\n" + if ! [[ $REPLY =~ ^[Yy]$ ]]; then + echo -e "${RED}Process aborted${NC}" + rm "$newfile" + return 1 + fi + fi + + # Copy a version of user.js to diffs folder for later comparison + if [ "$COMPARE" = true ]; then + mkdir -p userjs_diffs + cp user.js userjs_diffs/past_user.js &>/dev/null + fi + + # backup user.js + mkdir -p userjs_backups + local bakname="userjs_backups/user.js.backup.$(date +"%Y-%m-%d_%H%M")" + [ "$BACKUP" = 'single' ] && bakname='userjs_backups/user.js.backup' + cp user.js "$bakname" &>/dev/null + + mv "${newfile}" user.js + echo -e "Status: ${GREEN}user.js has been backed up and replaced with the latest version!${NC}" + + if [ "$ESR" = true ]; then + sed -e 's/\/\* \(ESR[0-9]\{2,\}\.x still uses all.*\)/\/\/ \1/' user.js > user.js.tmp && mv user.js.tmp user.js + echo -e "Status: ${GREEN}ESR related preferences have been activated!${NC}" + fi + + # apply overrides + if [ "$SKIPOVERRIDE" = false ]; then + while IFS=',' read -ra FILES; do + for FILE in "${FILES[@]}"; do + add_override "$FILE" + done + done <<< "$OVERRIDE" + fi + + # create diff + if [ "$COMPARE" = true ]; then + pastuserjs='userjs_diffs/past_user.js' + past_nocomments='userjs_diffs/past_userjs.txt' + current_nocomments='userjs_diffs/current_userjs.txt' + + remove_comments "$pastuserjs" "$past_nocomments" + remove_comments user.js "$current_nocomments" + + diffname="userjs_diffs/diff_$(date +"%Y-%m-%d_%H%M").txt" + diff=$(diff -w -B -U 0 "$past_nocomments" "$current_nocomments") + if [ -n "$diff" ]; then + echo "$diff" > "$diffname" + echo -e "Status: ${GREEN}A diff file was created:${NC} ${PWD}/${diffname}" + else + echo -e "Warning: ${ORANGE}Your new user.js file appears to be identical. No diff file was created.${NC}" + [ "$BACKUP" = 'multiple' ] && rm "$bakname" &>/dev/null + fi + rm "$past_nocomments" "$current_nocomments" "$pastuserjs" &>/dev/null + fi + + [ "$VIEW" = true ] && open_file "${PWD}/user.js" +} + +######################### +# Execute # +######################### + +if [ $# != 0 ]; then + # Display usage if first argument is -help or --help + if [ "$1" = '--help' ] || [ "$1" = '-help' ]; then + usage + else + while getopts ":hp:ludsno:bcvre" opt; do + case $opt in + h) + usage + ;; + p) + PROFILE_PATH=${OPTARG} + ;; + l) + PROFILE_PATH='list' + ;; + u) + UPDATE='yes' + ;; + d) + UPDATE='no' + ;; + s) + CONFIRM='no' + ;; + n) + SKIPOVERRIDE=true + ;; + o) + OVERRIDE=${OPTARG} + ;; + b) + BACKUP='single' + ;; + c) + COMPARE=true + ;; + v) + VIEW=true + ;; + e) + ESR=true + ;; + r) + tfile="$(download_file 'https://raw.githubusercontent.com/arkenfox/user.js/master/user.js')" + [ -z "${tfile}" ] && echo -e "${RED}Error! Could not download user.js${NC}" && exit 1 # check if download failed + mv "$tfile" "${tfile}.js" + echo -e "${ORANGE}Warning: user.js was saved to temporary file ${tfile}.js${NC}" + open_file "${tfile}.js" + exit 0 + ;; + \?) + echo -e "${RED}\n Error! Invalid option: -$OPTARG${NC}" >&2 + usage + ;; + :) + echo -e "${RED}Error! Option -$OPTARG requires an argument.${NC}" >&2 + exit 2 + ;; + esac + done + fi +fi + +show_banner +update_updater "$@" + +getProfilePath # updates PROFILE_PATH or exits on error +cd "$PROFILE_PATH" && update_userjs + +cd "$CURRDIR" diff --git a/.local/share/firefox/user-overrides.js b/.local/share/firefox/user-overrides.js new file mode 100644 index 000000000..d3cfe4eab --- /dev/null +++ b/.local/share/firefox/user-overrides.js @@ -0,0 +1,40 @@ +// Turn on middle mouse click scrolling +user_pref("middlemouse.paste", false); +user_pref("general.autoScroll", true); + +// Compact the browser UI +user_pref("browser.uidensity", 1); +user_pref("browser.compactmode.show", true); + +// Allow custom browser CSS +user_pref("toolkit.legacyUserProfileCustomizations.stylesheets", true); + +// Enable DRM +user_pref("media.eme.enabled", true); + +// Set startup page to homepage +user_pref("browser.startup.page", 1); + +// Don't clear history on browser shutdown +user_pref("privacy.clearOnShutdown.history", false); + +// Allow search suggestions +// Override these if you trust the searchengine you have set as default +user_pref("browser.search.suggest.enabled", true); +user_pref("browser.urlbar.suggest.searches", true); + +// Disable password/credential saving +user_pref("signon.rememberSignons", false); +user_pref("security.nocertdb", true); + +// Turn off letterboxing +user_pref("privacy.resistFingerprinting.letterboxing", false); + +// Set homepage +user_pref("browser.startup.homepage", "https://search.snaile.de/"); + +// Don't make firefox aware of window manager fullscreening +// user_pref("full-screen-api.ignore-widgets", true); + +// Don't autohide toolbar on fullscreen +// user_pref("browser.fullscreen.autohide", false); diff --git a/.local/src/dwm b/.local/src/dwm index 449102681..b1eba4fae 160000 --- a/.local/src/dwm +++ b/.local/src/dwm @@ -1 +1 @@ -Subproject commit 449102681013d262a186677b1fcbf86e51c93270 +Subproject commit b1eba4fae25f96465fdac5a0e0a013c38d9bcdc9 diff --git a/.mozilla/firefox/generate.sh b/.mozilla/firefox/generate.sh new file mode 100755 index 000000000..eca63944e --- /dev/null +++ b/.mozilla/firefox/generate.sh @@ -0,0 +1,3 @@ +#!/bin/sh +# cd $HOME/.dotfiles/.mozilla/firefox || exit +firefox --no-remote --CreateProfile "firefox $HOME/.local/share/firefox"