From 4a2419b54d4226f0ebd943287d7ecca04fd46c06 Mon Sep 17 00:00:00 2001 From: Brian Zalewski Date: Wed, 25 Jan 2023 08:46:31 +0000 Subject: [PATCH] Update 4 files - /home/dot_local/share/firefox/profiles.ini - /home/.chezmoiscripts/universal/run_onchange_after_40-firefox.tmpl - /home/.chezmoiscripts/darwin/run_onchange_after_10-configure-macos.tmpl - /home/dot_local/share/firefox/profiles.ini.tmpl --- ...run_onchange_after_10-configure-macos.tmpl | 2 +- .../run_onchange_after_40-firefox.tmpl | 120 +++++++++++------- home/dot_local/share/firefox/profiles.ini | 19 --- .../dot_local/share/firefox/profiles.ini.tmpl | 19 +++ 4 files changed, 95 insertions(+), 65 deletions(-) delete mode 100644 home/dot_local/share/firefox/profiles.ini create mode 100644 home/dot_local/share/firefox/profiles.ini.tmpl diff --git a/home/.chezmoiscripts/darwin/run_onchange_after_10-configure-macos.tmpl b/home/.chezmoiscripts/darwin/run_onchange_after_10-configure-macos.tmpl index 134331e2..484f4f06 100644 --- a/home/.chezmoiscripts/darwin/run_onchange_after_10-configure-macos.tmpl +++ b/home/.chezmoiscripts/darwin/run_onchange_after_10-configure-macos.tmpl @@ -940,4 +940,4 @@ done set +x logg success 'Done applying macOS settings' -logg info 'Some of these changes may require a logout/restart to take effect' +logg info 'Some of these changes may require a logout/restart to take effect' && exit 0 diff --git a/home/.chezmoiscripts/universal/run_onchange_after_40-firefox.tmpl b/home/.chezmoiscripts/universal/run_onchange_after_40-firefox.tmpl index d2bd6225..0c823a64 100644 --- a/home/.chezmoiscripts/universal/run_onchange_after_40-firefox.tmpl +++ b/home/.chezmoiscripts/universal/run_onchange_after_40-firefox.tmpl @@ -12,54 +12,84 @@ for FIREFOX_DIR in '/usr/lib/firefox' '/usr/lib/firefox-esr' '/Applications/Fire fi done -### Initiatize Firefox default profiles -if command -v org.mozilla.firefox > /dev/null; then - if [ ! -d "$HOME/.var/app/org.mozilla.firefox" ]; then - logg info 'Running Firefox headlessly to generate default profiles' - firefox --headless & - FIREFOX_PID=$! - sleep 5 - kill "$FIREFOX_PID" - logg info 'Finished running Firefox headlessly' - sleep 5 +### Loop through various Firefox profile locations +for SETTINGS_DIR in "$HOME/snap/firefox/common/.mozilla/firefox" "$HOME/.var/app/org.mozilla.firefox/.mozilla/firefox" "$HOME/.var/app/io.gitlab.librewolf-community/.librewolf" "$HOME/Library/Application Support/Firefox/Profiles" "$HOME/Library/Application Support/LibreWolf/Profiles" "$HOME/.mozilla/firefox"; do + ### Determine executable to use + if [ "$SETTINGS_DIR" == "$HOME/.var/app/org.mozilla.firefox" ]; then + FIREFOX_EXE="$(which org.mozilla.firefox)" + elif [ "$SETTINGS_DIR" == "$HOME/.var/app/io.gitlab.librewolf-community/.librewolf" ]; then + FIREFOX_EXE="$(which io.gitlab.librewolf-community)" + elif [ "$SETTINGS_DIR" == "$HOME/Library/Application Support/Firefox/Profiles" ]; then + FIREFOX_EXE="/Applications/Firefox.app/Contents/MacOS/firefox" + elif [ "$SETTINGS_DIR == "$HOME/Library/Application Support/LibreWolf/Profiles" ]; then + FIREFOX_EXE="/Applications/LibreWolf.app/Contents/MacOS/librewolf" + elif [ "$SETTINGS_DIR" == "$HOME/snap/firefox/common/.mozilla/firefox" ]; then + FIREFOX_EXE="$(which firefox)" + else + if command -v firefox-esr > /dev/null; then + FIREFOX_EXE="$(which firefox-esr)" + elif command -v firefox > /dev/null && [ "$(which firefox)" != *'snap'* ] && [ "$(which firefox)" != *'flatpak'* ] && [ ! -d /Applications ] && [ ! -d /System ]; then + # Conditional check ensures Snap / Flatpak / macOS Firefox versions do not try to install to the wrong folder + FIREFOX_EXE="$(which firefox)" + else + logg warn 'Unable to register Firefox executable' + logg info "Settings directory: $SETTINGS_DIR" + continue + fi fi - logg info 'Renaming default profile folders and assigning them human-readable profile names' - DEFAULT_RELEASE_PROFILE="$(find "$HOME/.var/app/org.mozilla.firefox/.mozilla/firefox" -mindepth 1 -maxdepth 1 -name "*.default-release")" - DEFAULT_PROFILE="$(find "$HOME/.var/app/org.mozilla.firefox/.mozilla/firefox" -mindepth 1 -maxdepth 1 -name "*.default")" - mv "$DEFAULT_RELEASE_PROFILE" "$HOME/.var/app/org.mozilla.firefox/.mozilla/firefox/profile.default" - mv "$DEFAULT_PROFILE" "$HOME/.var/app/org.mozilla.firefox/.mozilla/firefox/profile.primary" - logg info 'Adding a secondary profile' - cp -rf "$HOME/.var/app/org.mozilla.firefox/.mozilla/firefox/profile.primary" "$HOME/.var/app/org.mozilla.firefox/.mozilla/firefox/profile.secondary" - logg info "Copying "${XDG_DATA_HOME:-$HOME/.local/share}/firefox/profiles.ini" to profile directory" - cp -f "${XDG_DATA_HOME:-$HOME/.local/share}/firefox/profiles.ini" "$HOME/.var/app/org.mozilla.firefox/.mozilla/firefox/profiles.ini" -fi - -### Install Firefox addons (using list declared in .chezmoidata.yaml) -if command -v org.mozilla.firefox > /dev/null; then - for FIREFOX_PLUGIN in {{ list (.firefoxAddOns | toString | replace "[" "" | replace "]" "") | uniq | join " " }}; do - logg info 'Ensuring `'"$FIREFOX_PLUGIN"'` is installed' - PLUGIN_HTML="$(mktemp)" - curl --silent "https://addons.mozilla.org/en-US/firefox/addon/$FIREFOX_PLUGIN/" > "$PLUGIN_HTML" - PLUGIN_TMP="$(mktemp)" - cat "$PLUGIN_HTML" | htmlq '#redux-store-state' | sed 's/^//' | sed 's/<\/script>$//' > "$PLUGIN_TMP" - PLUGIN_ID="$(jq '.addons.bySlug["'"$FIREFOX_PLUGIN"'"]' "$PLUGIN_TMP")" - if [ "$PLUGIN_ID" != 'null' ]; then - PLUGIN_FILE_ID="$(jq -r '.addons.byID["'"$PLUGIN_ID"'"].guid' "$PLUGIN_TMP")" - if [ "$PLUGIN_FILE_ID" != 'null' ]; then - PLUGIN_URL="$(cat "$PLUGIN_HTML" | htmlq '.InstallButtonWrapper-download-link' --attribute href)" - PLUGIN_FILENAME="${PLUGIN_FILE_ID}.xpi" - if [ ! -d "$HOME/.var/app/org.mozilla.firefox/.mozilla/extensions/$PLUGIN_FILENAME" ]; then - logg info 'Downloading plugin file for `'"$PLUGIN_FILENAME"'` ('"$FIREFOX_PLUGIN"')' - curl "$PLUGIN_URL" -o "$HOME/.var/app/org.mozilla.firefox/.mozilla/extensions/$PLUGIN_FILENAME" - logg success 'Finished downloading `'"$PLUGIN_FILENAME"'` ('"$FIREFOX_PLUGIN"')' + ### Initiatize Firefox default profiles + if command -v "$FIREFOX_EXE" > /dev/null; then + if [ ! -d "$SETTINGS_DIR" ]; then + logg info 'Running Firefox headlessly to generate default profiles' + "$FIREFOX_EXE" --headless & + FIREFOX_PID=$! + sleep 5 + kill "$FIREFOX_PID" + logg info 'Finished running Firefox headlessly' + sleep 5 + fi + logg info 'Renaming default profile folders and assigning them human-readable profile names' + DEFAULT_RELEASE_PROFILE="$(find "$SETTINGS_DIR" -mindepth 1 -maxdepth 1 -name "*.default-release")" + DEFAULT_PROFILE="$(find "$SETTINGS_DIR" -mindepth 1 -maxdepth 1 -name "*.default")" + mv "$DEFAULT_PROFILE" "$SETTINGS_DIR/profile.default" + mv "$DEFAULT_RELEASE_PROFILE" "$SETTINGS_DIR/profile.primary" + logg info 'Adding a secondary profile' + cp -rf "$SETTINGS_DIR/profile.primary" "$SETTINGS_DIR/profile.secondary" + logg info "Copying "${XDG_DATA_HOME:-$HOME/.local/share}/firefox/profiles.ini" to profile directory" + if [ -d /Applications ] && [ -d /System ]; then + # macOS + cp -f "${XDG_DATA_HOME:-$HOME/.local/share}/firefox/profiles.ini" "$SETTINGS_DIR/../profiles.ini" + else + # Linux + cp -f "${XDG_DATA_HOME:-$HOME/.local/share}/firefox/profiles.ini" "$SETTINGS_DIR/profiles.ini" + fi + + ### Install Firefox addons (using list declared in .chezmoidata.yaml) + for FIREFOX_PLUGIN in {{ list (.firefoxAddOns | toString | replace "[" "" | replace "]" "") | uniq | join " " }}; do + logg info 'Ensuring `'"$FIREFOX_PLUGIN"'` is installed' + PLUGIN_HTML="$(mktemp)" + curl --silent "https://addons.mozilla.org/en-US/firefox/addon/$FIREFOX_PLUGIN/" > "$PLUGIN_HTML" + PLUGIN_TMP="$(mktemp)" + cat "$PLUGIN_HTML" | htmlq '#redux-store-state' | sed 's/^//' | sed 's/<\/script>$//' > "$PLUGIN_TMP" + PLUGIN_ID="$(jq '.addons.bySlug["'"$FIREFOX_PLUGIN"'"]' "$PLUGIN_TMP")" + if [ "$PLUGIN_ID" != 'null' ]; then + PLUGIN_FILE_ID="$(jq -r '.addons.byID["'"$PLUGIN_ID"'"].guid' "$PLUGIN_TMP")" + if [ "$PLUGIN_FILE_ID" != 'null' ]; then + PLUGIN_URL="$(cat "$PLUGIN_HTML" | htmlq '.InstallButtonWrapper-download-link' --attribute href)" + PLUGIN_FILENAME="${PLUGIN_FILE_ID}.xpi" + if [ ! -d "$SETTINGS_DIR/profile.primary/extensions/$PLUGIN_FILENAME" ]; then + logg info 'Downloading plugin file for `'"$PLUGIN_FILENAME"'` ('"$FIREFOX_PLUGIN"')' + curl "$PLUGIN_URL" -o "$SETTINGS_DIR/profile.primary/extensions/$PLUGIN_FILENAME" + logg success 'Finished downloading `'"$PLUGIN_FILENAME"'` ('"$FIREFOX_PLUGIN"')' + fi + else + logg warn 'A null Firefox add-on filename was detected for `'"$FIREFOX_PLUGIN"'`' fi else - logg warn 'A null Firefox add-on filename was detected for `'"$FIREFOX_PLUGIN"'`' + logg warn 'A null Firefox add-on ID was detected for `'"$FIREFOX_PLUGIN"'`' fi - else - logg warn 'A null Firefox add-on ID was detected for `'"$FIREFOX_PLUGIN"'`' - fi - done -fi + done + fi +done {{ end -}} diff --git a/home/dot_local/share/firefox/profiles.ini b/home/dot_local/share/firefox/profiles.ini deleted file mode 100644 index d21323dc..00000000 --- a/home/dot_local/share/firefox/profiles.ini +++ /dev/null @@ -1,19 +0,0 @@ -[Profile2] -Name=Secondary -IsRelative=1 -Path=profile.secondary - -[Profile1] -Name=Primary -IsRelative=1 -Path=profile.primary -Default=1 - -[Profile0] -Name=Default -IsRelative=1 -Path=profile.default-release - -[General] -StartWithLastProfile=1 -Version=2 diff --git a/home/dot_local/share/firefox/profiles.ini.tmpl b/home/dot_local/share/firefox/profiles.ini.tmpl new file mode 100644 index 00000000..0956570d --- /dev/null +++ b/home/dot_local/share/firefox/profiles.ini.tmpl @@ -0,0 +1,19 @@ +[Profile2] +Name=Secondary +IsRelative=1 +Path={{ if eq .host.distro.family "darwin" }}Profiles/{{ end }}profile.secondary + +[Profile1] +Name=Primary +IsRelative=1 +Path={{ if eq .host.distro.family "darwin" }}Profiles/{{ end }}profile.primary +Default=1 + +[Profile0] +Name=Default +IsRelative=1 +Path={{ if eq .host.distro.family "darwin" }}Profiles/{{ end }}profile.default + +[General] +StartWithLastProfile=1 +Version=2