The Meowgorithm Dotfiles, Collectors’ Edition
#!/usr/bin/env bash
set -euo pipefail
if command -v flock >/dev/null 2>&1; then
exec 9>"${XDG_RUNTIME_DIR:-${TMPDIR:-/tmp}}/noctalia-firefox-apply.lock"
flock -w 15 9 || exit 0
fi
cache_dir="${XDG_CACHE_HOME:-$HOME/.cache}"
css_chrome="$cache_dir/noctalia/firefox/userChrome.css"
css_content="$cache_dir/noctalia/firefox/userContent.css"
line_chrome="@import \"$css_chrome\";"
line_content="@import \"$css_content\";"
write_if_changed() {
local target="$1" tmp="$2"
if ! cmp -s "$target" "$tmp"; then
cat "$tmp" >"$target"
fi
rm -f "$tmp"
}
firefox_dirs=()
for d in \
"${XDG_CONFIG_HOME:-$HOME/.config}/mozilla/firefox" \
"$HOME/.mozilla/firefox" \
"$HOME/.var/app/org.mozilla.firefox/.config/mozilla/firefox" \
"$HOME/.var/app/org.mozilla.firefox/.mozilla/firefox"; do
[ -d "$d" ] && firefox_dirs+=("$d")
done
[ "${#firefox_dirs[@]}" -eq 0 ] && exit 0
find "${firefox_dirs[@]}" -mindepth 2 -maxdepth 2 -type f -name "prefs.js" -print0 |
while IFS= read -r -d '' prefs_file; do
profile_dir=$(dirname "$prefs_file")
chrome_dir="$profile_dir/chrome"
user_chrome="$chrome_dir/userChrome.css"
user_content="$chrome_dir/userContent.css"
user_js="$profile_dir/user.js"