aboutsummaryrefslogtreecommitdiff
path: root/www-client/icecat/files
diff options
context:
space:
mode:
Diffstat (limited to 'www-client/icecat/files')
-rw-r--r--www-client/icecat/files/0013-gcc-lto-pgo-gentoo.patch150
-rw-r--r--www-client/icecat/files/0016-bgo-929967-fix-pgo-on-musl.patch14
-rw-r--r--www-client/icecat/files/0018-gcc-lto-gentoo.patch160
-rw-r--r--www-client/icecat/files/README.gentoo17
-rw-r--r--www-client/icecat/files/disable-auto-update.policy.json5
-rw-r--r--www-client/icecat/files/distribution.ini9
-rw-r--r--www-client/icecat/files/firefox-146.0.1-icu78.patch18
-rw-r--r--www-client/icecat/files/gentoo-default-prefs.js12
-rw-r--r--www-client/icecat/files/gentoo-hwaccel-prefs.js-r25
-rw-r--r--www-client/icecat/files/icecat-128.12.0-clang21.patch123
-rw-r--r--www-client/icecat/files/icecat-r1.sh116
-rw-r--r--www-client/icecat/files/icon/icecat-r3.desktop236
-rw-r--r--www-client/icecat/files/icon/icecat-symbolic.svg1
13 files changed, 866 insertions, 0 deletions
diff --git a/www-client/icecat/files/0013-gcc-lto-pgo-gentoo.patch b/www-client/icecat/files/0013-gcc-lto-pgo-gentoo.patch
new file mode 100644
index 0000000..4b873f9
--- /dev/null
+++ b/www-client/icecat/files/0013-gcc-lto-pgo-gentoo.patch
@@ -0,0 +1,150 @@
+--- a/build/moz.configure/lto-pgo.configure.pgo
++++ b/build/moz.configure/lto-pgo.configure
+@@ -90,12 +90,16 @@ set_config("PGO_PROFILE_PATH", pgo_profi
+
+ @depends(
+ "--enable-profile-use",
++ c_compiler,
+ pgo_profile_path,
+ llvm_profdata,
+ llvm_profdata_order,
+ build_environment,
+ )
+-def orderfile_path(profile_use, path, profdata, profdata_order, build_env):
++def orderfile_path(profile_use, compiler, path, profdata, profdata_order, build_env):
++ if compiler.type == "gcc":
++ return None
++
+ if not profile_use:
+ return None
+
+@@ -133,7 +137,7 @@ def pgo_flags(
+ return namespace(
+ gen_cflags=["-fprofile-generate"],
+ gen_ldflags=["-fprofile-generate"],
+- use_cflags=["-fprofile-use", "-fprofile-correction", "-Wcoverage-mismatch"],
++ use_cflags=["-fprofile-use", "-fprofile-correction", "-Wno-coverage-mismatch"],
+ use_ldflags=["-fprofile-use"],
+ )
+
+--- a/build/pgo/profileserver.py 2025-05-26 17:14:58.234802697 +0300
++++ b/build/pgo/profileserver.py 2025-05-26 17:18:38.000686313 +0300
+@@ -97,9 +97,22 @@ if __name__ == "__main__":
+ locations = ServerLocations()
+ locations.add_host(host="127.0.0.1", port=PORT, options="primary,privileged")
+
+- old_profraw_files = glob.glob("*.profraw")
+- for f in old_profraw_files:
+- os.remove(f)
++ using_gcc = False
++ try:
++ if build.config_environment.substs.get('CC_TYPE') == 'gcc':
++ using_gcc = True
++ except BuildEnvironmentNotFoundException:
++ pass
++
++ if using_gcc:
++ for dirpath, _, filenames in os.walk('.'):
++ for f in filenames:
++ if f.endswith('.gcda'):
++ os.remove(os.path.join(dirpath, f))
++ else:
++ old_profraw_files = glob.glob('*.profraw')
++ for f in old_profraw_files:
++ os.remove(f)
+
+ with TemporaryDirectory() as profilePath:
+ # TODO: refactor this into mozprofile
+@@ -222,16 +235,21 @@
+
+ # Try to move the crash reports to the artifacts even if IceCat appears
+ # to exit successfully, in case there's a crash that doesn't set the
+ # return code to non-zero for some reason.
+ if get_crashreports(profilePath, name="IceCat exited successfully?") != 0:
+ print("IceCat exited successfully, but produced a crashreport")
+ sys.exit(1)
+
++ if using_gcc:
++ print('Copying profile data....')
++ os.system('pwd');
++ os.system('tar cf profdata.tar.gz `find . -name "*.gcda"`; cd ..; tar xf instrumented/profdata.tar.gz;');
++
+ llvm_profdata = env.get("LLVM_PROFDATA")
+ if llvm_profdata:
+ profraw_files = glob.glob("*.profraw")
+ if not profraw_files:
+ print(
+ "Could not find profraw files in the current directory: %s"
+ % os.getcwd()
+ )
+--- a/gfx/2d/moz.build.pgo
++++ b/gfx/2d/moz.build
+@@ -135,11 +135,11 @@ if CONFIG["INTEL_ARCHITECTURE"]:
+ # The file uses SSE2 intrinsics, so it needs special compile flags on some
+ # compilers.
+ SOURCES["BlurSSE2.cpp"].flags += CONFIG["SSE2_FLAGS"]
+- SOURCES["ConvolutionFilterAVX2.cpp"].flags += ["-mavx2"]
++ SOURCES["ConvolutionFilterAVX2.cpp"].flags += ["-mavx2", "-fno-lto"]
+ SOURCES["ConvolutionFilterSSE2.cpp"].flags += CONFIG["SSE2_FLAGS"]
+ SOURCES["FilterProcessingSSE2.cpp"].flags += CONFIG["SSE2_FLAGS"]
+ SOURCES["ImageScalingSSE2.cpp"].flags += CONFIG["SSE2_FLAGS"]
+- SOURCES["SwizzleAVX2.cpp"].flags += ["-mavx2"]
++ SOURCES["SwizzleAVX2.cpp"].flags += ["-mavx2", "-fno-lto"]
+ SOURCES["SwizzleSSE2.cpp"].flags += CONFIG["SSE2_FLAGS"]
+ SOURCES["SwizzleSSSE3.cpp"].flags += CONFIG["SSSE3_FLAGS"]
+ elif CONFIG["TARGET_CPU"].startswith("mips"):
+--- a/gfx/skia/generate_mozbuild.py.pgo
++++ b/gfx/skia/generate_mozbuild.py
+@@ -54,8 +54,8 @@ if CONFIG['MOZ_WIDGET_TOOLKIT'] == 'wind
+ if CONFIG['INTEL_ARCHITECTURE']:
+ SOURCES['skia/modules/skcms/skcms.cc'].flags += ['-DSKCMS_DISABLE_SKX']
+ skia_ssse3_flags = ['-Dskvx=skvx_ssse3', '-mssse3']
+- skia_avx_flags = ['-Dskvx=skvx_avx', '-mavx']
+- skia_hsw_flags = ['-Dskvx=skvx_hsw', '-mavx2', '-mf16c', '-mfma']
++ skia_avx_flags = ['-Dskvx=skvx_avx', '-mavx', '-fno-lto']
++ skia_hsw_flags = ['-Dskvx=skvx_hsw', '-mavx2', '-mf16c', '-mfma', '-fno-lto']
+ SOURCES['skia/src/core/SkBitmapProcState_opts_ssse3.cpp'].flags += skia_ssse3_flags
+ SOURCES['skia/src/core/SkBlitMask_opts_ssse3.cpp'].flags += skia_ssse3_flags
+ SOURCES['skia/src/core/SkSwizzler_opts_ssse3.cpp'].flags += ['-Dskvx=skvx_ssse3']
+--- a/gfx/skia/moz.build.pgo
++++ b/gfx/skia/moz.build
+@@ -582,8 +582,8 @@ if CONFIG['MOZ_WIDGET_TOOLKIT'] == 'wind
+ if CONFIG['INTEL_ARCHITECTURE']:
+ SOURCES['skia/modules/skcms/skcms.cc'].flags += ['-DSKCMS_DISABLE_SKX']
+ skia_ssse3_flags = ['-Dskvx=skvx_ssse3', '-mssse3']
+- skia_avx_flags = ['-Dskvx=skvx_avx', '-mavx']
+- skia_hsw_flags = ['-Dskvx=skvx_hsw', '-mavx2', '-mf16c', '-mfma']
++ skia_avx_flags = ['-Dskvx=skvx_avx', '-mavx', '-fno-lto']
++ skia_hsw_flags = ['-Dskvx=skvx_hsw', '-mavx2', '-mf16c', '-mfma', '-fno-lto']
+ SOURCES['skia/src/core/SkBitmapProcState_opts_ssse3.cpp'].flags += skia_ssse3_flags
+ SOURCES['skia/src/core/SkBlitMask_opts_ssse3.cpp'].flags += skia_ssse3_flags
+ SOURCES['skia/src/core/SkSwizzler_opts_ssse3.cpp'].flags += ['-Dskvx=skvx_ssse3']
+--- a/toolkit/components/terminator/nsTerminator.cpp.pgo
++++ b/toolkit/components/terminator/nsTerminator.cpp
+@@ -332,6 +332,11 @@ void nsTerminator::StartWatchdog() {
+ }
+ #endif
+
++ // Disable watchdog for PGO train builds - writting profile information at
++ // exit may take time and it is better to make build hang rather than
++ // silently produce poorly performing binary.
++ crashAfterMS = INT32_MAX;
++
+ UniquePtr<Options> options(new Options());
+ // crashAfterTicks is guaranteed to be > 0 as
+ // crashAfterMS >= ADDITIONAL_WAIT_BEFORE_CRASH_MS >> HEARTBEAT_INTERVAL_MS
+--- a/security/sandbox/linux/moz.build.1516803 2020-12-10 16:17:55.425139545 +0100
++++ b/security/sandbox/linux/moz.build 2020-12-10 16:29:21.945860841 +0100
+@@ -114,9 +114,8 @@ if CONFIG["CC_TYPE"] in ("clang", "gcc")
+ # gcc lto likes to put the top level asm in syscall.cc in a different partition
+ # from the function using it which breaks the build. Work around that by
+ # forcing there to be only one partition.
+-for f in CONFIG["OS_CXXFLAGS"]:
+- if f.startswith("-flto") and CONFIG["CC_TYPE"] != "clang":
+- LDFLAGS += ["--param lto-partitions=1"]
++if CONFIG['CC_TYPE'] != 'clang':
++ LDFLAGS += ['--param', 'lto-partitions=1']
+
+ DEFINES["NS_NO_XPCOM"] = True
+ DisableStlWrapping()
+
diff --git a/www-client/icecat/files/0016-bgo-929967-fix-pgo-on-musl.patch b/www-client/icecat/files/0016-bgo-929967-fix-pgo-on-musl.patch
new file mode 100644
index 0000000..afe5d2a
--- /dev/null
+++ b/www-client/icecat/files/0016-bgo-929967-fix-pgo-on-musl.patch
@@ -0,0 +1,14 @@
+diff --git a/build/pgo/profileserver.py b/build/pgo/profileserver.py
+index 7354714..0385792 100755
+--- a/build/pgo/profileserver.py
++++ b/build/pgo/profileserver.py
+@@ -171,6 +171,9 @@ if __name__ == "__main__":
+ env["UPLOAD_PATH"], "profile-run-1.log"
+ )
+
++ # Workaround for https://bugs.gentoo.org/929967
++ env["LD_LIBRARY_PATH"] = os.path.join(os.getcwd(), "dist", "bin")
++
+ # Run IceCat a first time to initialize its profile
+ runner = IceCatRunner(
+ profile=profile,
diff --git a/www-client/icecat/files/0018-gcc-lto-gentoo.patch b/www-client/icecat/files/0018-gcc-lto-gentoo.patch
new file mode 100644
index 0000000..34e03a2
--- /dev/null
+++ b/www-client/icecat/files/0018-gcc-lto-gentoo.patch
@@ -0,0 +1,160 @@
+--- a/build/moz.configure/lto-pgo.configure.pgo
++++ b/build/moz.configure/lto-pgo.configure
+@@ -90,12 +90,16 @@ set_config("PGO_PROFILE_PATH", pgo_profi
+
+ @depends(
+ "--enable-profile-use",
++ c_compiler,
+ pgo_profile_path,
+ llvm_profdata,
+ llvm_profdata_order,
+ build_environment,
+ )
+-def orderfile_path(profile_use, path, profdata, profdata_order, build_env):
++def orderfile_path(profile_use, compiler, path, profdata, profdata_order, build_env):
++ if compiler.type == "gcc":
++ return None
++
+ if not profile_use:
+ return None
+
+@@ -133,7 +137,7 @@ def pgo_flags(
+ return namespace(
+ gen_cflags=["-fprofile-generate"],
+ gen_ldflags=["-fprofile-generate"],
+- use_cflags=["-fprofile-use", "-fprofile-correction", "-Wcoverage-mismatch"],
++ use_cflags=["-fprofile-use", "-fprofile-correction", "-Wno-coverage-mismatch"],
+ use_ldflags=["-fprofile-use"],
+ )
+
+--- a/build/pgo/profileserver.py
++++ b/build/pgo/profileserver.py
+@@ -93,19 +93,32 @@
+ ),
+ path_mappings=path_mappings,
+ )
+ sp3_httpd.start(block=False)
+ print("started SP3 server on port 8000")
+ locations = ServerLocations()
+ locations.add_host(host="127.0.0.1", port=PORT, options="primary,privileged")
+
+- old_profraw_files = glob.glob("*.profraw")
+- for f in old_profraw_files:
+- os.remove(f)
++ using_gcc = False
++ try:
++ if build.config_environment.substs.get('CC_TYPE') == 'gcc':
++ using_gcc = True
++ except BuildEnvironmentNotFoundException:
++ pass
++
++ if using_gcc:
++ for dirpath, _, filenames in os.walk('.'):
++ for f in filenames:
++ if f.endswith('.gcda'):
++ os.remove(os.path.join(dirpath, f))
++ else:
++ old_profraw_files = glob.glob('*.profraw')
++ for f in old_profraw_files:
++ os.remove(f)
+
+ with TemporaryDirectory() as profilePath:
+ # TODO: refactor this into mozprofile
+ profile_data_dir = os.path.join(build.topsrcdir, "testing", "profiles")
+ with open(os.path.join(profile_data_dir, "profiles.json"), "r") as fh:
+ base_profiles = json.load(fh)["profileserver"]
+
+ prefpaths = [
+@@ -222,16 +235,21 @@
+
+ # Try to move the crash reports to the artifacts even if IceCat appears
+ # to exit successfully, in case there's a crash that doesn't set the
+ # return code to non-zero for some reason.
+ if get_crashreports(profilePath, name="IceCat exited successfully?") != 0:
+ print("IceCat exited successfully, but produced a crashreport")
+ sys.exit(1)
+
++ if using_gcc:
++ print('Copying profile data....')
++ os.system('pwd');
++ os.system('tar cf profdata.tar.gz `find . -name "*.gcda"`; cd ..; tar xf instrumented/profdata.tar.gz;');
++
+ llvm_profdata = env.get("LLVM_PROFDATA")
+ if llvm_profdata:
+ profraw_files = glob.glob("*.profraw")
+ if not profraw_files:
+ print(
+ "Could not find profraw files in the current directory: %s"
+ % os.getcwd()
+ )
+--- a/gfx/2d/moz.build.pgo
++++ b/gfx/2d/moz.build
+@@ -135,11 +135,11 @@ if CONFIG["INTEL_ARCHITECTURE"]:
+ # The file uses SSE2 intrinsics, so it needs special compile flags on some
+ # compilers.
+ SOURCES["BlurSSE2.cpp"].flags += CONFIG["SSE2_FLAGS"]
+- SOURCES["ConvolutionFilterAVX2.cpp"].flags += ["-mavx2"]
++ SOURCES["ConvolutionFilterAVX2.cpp"].flags += ["-mavx2", "-fno-lto"]
+ SOURCES["ConvolutionFilterSSE2.cpp"].flags += CONFIG["SSE2_FLAGS"]
+ SOURCES["FilterProcessingSSE2.cpp"].flags += CONFIG["SSE2_FLAGS"]
+ SOURCES["ImageScalingSSE2.cpp"].flags += CONFIG["SSE2_FLAGS"]
+- SOURCES["SwizzleAVX2.cpp"].flags += ["-mavx2"]
++ SOURCES["SwizzleAVX2.cpp"].flags += ["-mavx2", "-fno-lto"]
+ SOURCES["SwizzleSSE2.cpp"].flags += CONFIG["SSE2_FLAGS"]
+ SOURCES["SwizzleSSSE3.cpp"].flags += CONFIG["SSSE3_FLAGS"]
+ elif CONFIG["TARGET_CPU"].startswith("mips"):
+--- a/gfx/skia/generate_mozbuild.py.pgo
++++ b/gfx/skia/generate_mozbuild.py
+@@ -54,8 +54,8 @@ if CONFIG['MOZ_WIDGET_TOOLKIT'] == 'wind
+ if CONFIG['INTEL_ARCHITECTURE']:
+ SOURCES['skia/modules/skcms/skcms.cc'].flags += ['-DSKCMS_DISABLE_SKX']
+ skia_ssse3_flags = ['-Dskvx=skvx_ssse3', '-mssse3']
+- skia_avx_flags = ['-Dskvx=skvx_avx', '-mavx']
+- skia_hsw_flags = ['-Dskvx=skvx_hsw', '-mavx2', '-mf16c', '-mfma']
++ skia_avx_flags = ['-Dskvx=skvx_avx', '-mavx', '-fno-lto']
++ skia_hsw_flags = ['-Dskvx=skvx_hsw', '-mavx2', '-mf16c', '-mfma', '-fno-lto']
+ SOURCES['skia/src/core/SkBitmapProcState_opts_ssse3.cpp'].flags += skia_ssse3_flags
+ SOURCES['skia/src/core/SkBlitMask_opts_ssse3.cpp'].flags += skia_ssse3_flags
+ SOURCES['skia/src/core/SkSwizzler_opts_ssse3.cpp'].flags += ['-Dskvx=skvx_ssse3']
+--- a/gfx/skia/moz.build.pgo
++++ b/gfx/skia/moz.build
+@@ -582,8 +582,8 @@ if CONFIG['MOZ_WIDGET_TOOLKIT'] == 'wind
+ if CONFIG['INTEL_ARCHITECTURE']:
+ SOURCES['skia/modules/skcms/skcms.cc'].flags += ['-DSKCMS_DISABLE_SKX']
+ skia_ssse3_flags = ['-Dskvx=skvx_ssse3', '-mssse3']
+- skia_avx_flags = ['-Dskvx=skvx_avx', '-mavx']
+- skia_hsw_flags = ['-Dskvx=skvx_hsw', '-mavx2', '-mf16c', '-mfma']
++ skia_avx_flags = ['-Dskvx=skvx_avx', '-mavx', '-fno-lto']
++ skia_hsw_flags = ['-Dskvx=skvx_hsw', '-mavx2', '-mf16c', '-mfma', '-fno-lto']
+ SOURCES['skia/src/core/SkBitmapProcState_opts_ssse3.cpp'].flags += skia_ssse3_flags
+ SOURCES['skia/src/core/SkBlitMask_opts_ssse3.cpp'].flags += skia_ssse3_flags
+ SOURCES['skia/src/core/SkSwizzler_opts_ssse3.cpp'].flags += ['-Dskvx=skvx_ssse3']
+--- a/toolkit/components/terminator/nsTerminator.cpp.pgo
++++ b/toolkit/components/terminator/nsTerminator.cpp
+@@ -332,6 +332,11 @@ void nsTerminator::StartWatchdog() {
+ }
+ #endif
+
++ // Disable watchdog for PGO train builds - writting profile information at
++ // exit may take time and it is better to make build hang rather than
++ // silently produce poorly performing binary.
++ crashAfterMS = INT32_MAX;
++
+ UniquePtr<Options> options(new Options());
+ // crashAfterTicks is guaranteed to be > 0 as
+ // crashAfterMS >= ADDITIONAL_WAIT_BEFORE_CRASH_MS >> HEARTBEAT_INTERVAL_MS
+--- a/security/sandbox/linux/moz.build.1516803 2020-12-10 16:17:55.425139545 +0100
++++ b/security/sandbox/linux/moz.build 2020-12-10 16:29:21.945860841 +0100
+@@ -114,9 +114,8 @@ if CONFIG["CC_TYPE"] in ("clang", "gcc")
+ # gcc lto likes to put the top level asm in syscall.cc in a different partition
+ # from the function using it which breaks the build. Work around that by
+ # forcing there to be only one partition.
+-for f in CONFIG["OS_CXXFLAGS"]:
+- if f.startswith("-flto") and CONFIG["CC_TYPE"] != "clang":
+- LDFLAGS += ["--param lto-partitions=1"]
++if CONFIG['CC_TYPE'] != 'clang':
++ LDFLAGS += ['--param', 'lto-partitions=1']
+
+ DEFINES["NS_NO_XPCOM"] = True
+ DisableStlWrapping()
+
diff --git a/www-client/icecat/files/README.gentoo b/www-client/icecat/files/README.gentoo
new file mode 100644
index 0000000..3f6ca98
--- /dev/null
+++ b/www-client/icecat/files/README.gentoo
@@ -0,0 +1,17 @@
+
+## DoH
+Note regarding Trusted Recursive Resolver aka DNS-over-HTTPS (DoH):
+Due to privacy concerns (encrypting DNS might be a good thing, sending all DNS
+traffic to Cloudflare by default is not a good idea and applications should
+respect OS configured settings), "network.trr.mode" was set to 5 ("Off by
+choice") by default.
+You can enable DNS-over-HTTPS in Firefox's preferences.
+
+
+## Firefox >100 compatibility
+Unfortunately Firefox-100.0 breaks compatibility with some sites using
+useragent checks. To temporarily fix this, enter about:config and modify
+network.http.useragent.forceVersion preference to "99" Or install an addon to
+change your useragent.
+See: https://support.mozilla.org/en-US/kb/difficulties-opening-or-using-website-firefox-100
+
diff --git a/www-client/icecat/files/disable-auto-update.policy.json b/www-client/icecat/files/disable-auto-update.policy.json
new file mode 100644
index 0000000..f366220
--- /dev/null
+++ b/www-client/icecat/files/disable-auto-update.policy.json
@@ -0,0 +1,5 @@
+{
+ "policies": {
+ "DisableAppUpdate": true
+ }
+}
diff --git a/www-client/icecat/files/distribution.ini b/www-client/icecat/files/distribution.ini
new file mode 100644
index 0000000..0f8aa15
--- /dev/null
+++ b/www-client/icecat/files/distribution.ini
@@ -0,0 +1,9 @@
+[Global]
+id=gentoo
+version=1.0
+about=GNU IceCat for Gentoo
+
+[Preferences]
+app.distributor="src_prepare-overlay"
+app.distributor.channel="src_prepare-overlay"
+startup.homepage_welcome_url="https://gitlab.com/src_prepare/src_prepare-overlay"
diff --git a/www-client/icecat/files/firefox-146.0.1-icu78.patch b/www-client/icecat/files/firefox-146.0.1-icu78.patch
new file mode 100644
index 0000000..4d8785f
--- /dev/null
+++ b/www-client/icecat/files/firefox-146.0.1-icu78.patch
@@ -0,0 +1,18 @@
+https://gitweb.gentoo.org/repo/gentoo.git/commit/?id=1291790c3dc24d3b9921bb10330201b8c1fa5983
+
+diff --git a/intl/lwbrk/LineBreaker.cpp b/intl/lwbrk/LineBreaker.cpp
+--- a/intl/lwbrk/LineBreaker.cpp
++++ b/intl/lwbrk/LineBreaker.cpp
+@@ -451,10 +451,11 @@
+ /* AKSARA = 43, [AK] */ CLASS_CHARACTER,
+ /* AKSARA_PREBASE = 44, [AP] */ CLASS_CHARACTER,
+ /* AKSARA_START = 45, [AS] */ CLASS_CHARACTER,
+ /* VIRAMA_FINAL = 46, [VF] */ CLASS_CHARACTER,
+ /* VIRAMA = 47, [VI] */ CLASS_CHARACTER,
++ /* UNAMBIGUOUS_HYPHEN = 48 [HH] */ CLASS_BREAKABLE,
+ };
+
+ static_assert(U_LB_COUNT == std::size(sUnicodeLineBreakToClass),
+ "Gecko vs ICU LineBreak class mismatch");
+
+
diff --git a/www-client/icecat/files/gentoo-default-prefs.js b/www-client/icecat/files/gentoo-default-prefs.js
new file mode 100644
index 0000000..4b60828
--- /dev/null
+++ b/www-client/icecat/files/gentoo-default-prefs.js
@@ -0,0 +1,12 @@
+pref("app.update.autoInstallEnabled", false);
+pref("browser.display.use_system_colors", true);
+pref("browser.link.open_external", 3);
+pref("general.smoothScroll", true);
+pref("general.autoScroll", false);
+pref("browser.tabs.tabMinWidth", 15);
+pref("browser.backspace_action", 0);
+pref("browser.urlbar.hideGoButton", true);
+pref("accessibility.typeaheadfind", true);
+pref("intl.locale.requested", "");
+pref("layout.css.dpi", 0);
+pref("network.trr.mode", 5);
diff --git a/www-client/icecat/files/gentoo-hwaccel-prefs.js-r2 b/www-client/icecat/files/gentoo-hwaccel-prefs.js-r2
new file mode 100644
index 0000000..48025ca
--- /dev/null
+++ b/www-client/icecat/files/gentoo-hwaccel-prefs.js-r2
@@ -0,0 +1,5 @@
+/* Force hardware accelerated rendering due to USE=hwaccel */
+pref("gfx.webrender.all", true);
+pref("layers.acceleration.force-enabled", true);
+pref("media.hardware-video-decoding.enabled", true);
+pref("webgl.force-enabled", true);
diff --git a/www-client/icecat/files/icecat-128.12.0-clang21.patch b/www-client/icecat/files/icecat-128.12.0-clang21.patch
new file mode 100644
index 0000000..961e25d
--- /dev/null
+++ b/www-client/icecat/files/icecat-128.12.0-clang21.patch
@@ -0,0 +1,123 @@
+https://bugzilla.mozilla.org/show_bug.cgi?id=1954003
+https://phabricator.services.mozilla.com/D241583
+https://github.com/mozilla-firefox/firefox/commit/6d368d85ef52ce67141f44f3fdbfd51ef23f14e6
+From 02f94f3cdc97fc3b2bc4654658230c2d896417ae Mon Sep 17 00:00:00 2001
+From: Mike Hommey <mh+mozilla@glandium.org>
+Date: Mon, 17 Mar 2025 23:31:43 +0000
+Subject: [PATCH] Bug 1954003 - Fix new implicit-int-conversion warnings from
+ clang 21. r=spidermonkey-reviewers,arai
+
+/builds/worker/workspace/obj-build/dist/include/js/Conversions.h:364:70: error: implicit conversion loses integer precision: 'int' to 'unsigned char' [-Werror,-Wimplicit-int-conversion]
+ 364 | return (bits & mozilla::FloatingPoint<double>::kSignBit) ? ~result + 1
+ | ~~~~~~ ~~~~~~~~^~~
+/builds/worker/workspace/obj-build/dist/include/js/Conversions.h:544:42: note: in instantiation of function template specialization 'JS::ToUnsignedInteger<unsigned char>' requested here
+ 544 | inline int8_t ToUint8(double d) { return ToUnsignedInteger<uint8_t>(d); }
+ | ^
+/builds/worker/workspace/obj-build/dist/include/js/Conversions.h:364:70: error: implicit conversion loses integer precision: 'int' to 'unsigned short' [-Werror,-Wimplicit-int-conversion]
+ 364 | return (bits & mozilla::FloatingPoint<double>::kSignBit) ? ~result + 1
+ | ~~~~~~ ~~~~~~~~^~~
+/builds/worker/workspace/obj-build/dist/include/js/Conversions.h:549:45: note: in instantiation of function template specialization 'JS::ToUnsignedInteger<unsigned short>' requested here
+ 549 | inline uint16_t ToUint16(double d) { return ToUnsignedInteger<uint16_t>(d); }
+ | ^
+
+Differential Revision: https://phabricator.services.mozilla.com/D241584
+--- a/js/public/Conversions.h
++++ b/js/public/Conversions.h
+@@ -361,8 +361,9 @@ inline UnsignedInteger ToUnsignedInteger(double d) {
+ }
+
+ // Compute the congruent value in the signed range.
+- return (bits & mozilla::FloatingPoint<double>::kSignBit) ? ~result + 1
+- : result;
++ return (bits & mozilla::FloatingPoint<double>::kSignBit)
++ ? UnsignedInteger(~result) + 1
++ : result;
+ }
+
+ template <typename SignedInteger>
+
+https://phabricator.services.mozilla.com/D241582
+https://github.com/mozilla-firefox/firefox/commit/3053f782bbb35895d632855bb5007282d7ec45e2
+
+From 3053f782bbb35895d632855bb5007282d7ec45e2 Mon Sep 17 00:00:00 2001
+From: Mike Hommey <mh+mozilla@glandium.org>
+Date: Mon, 17 Mar 2025 23:31:42 +0000
+Subject: [PATCH] Bug 1954003 - Fix new implicit-int-conversion warnings from
+ clang 21. r=dom-core,mccr8
+
+/builds/worker/checkouts/gecko/dom/base/nsINode.h:2055:32: error: implicit conversion loses integer precision: 'int' to 'uint32_t' (aka 'unsigned int') [-Werror,-Wimplicit-int-conversion]
+ 2055 | mBoolFlags = (mBoolFlags & ~(1 << name)) | (value << name);
+ | ~ ^~~~~~~~~~~~
+/builds/worker/checkouts/gecko/dom/base/nsINode.h:2067:19: error: implicit conversion loses integer precision: 'int' to 'uint32_t' (aka 'unsigned int') [-Werror,-Wimplicit-int-conversion]
+ 2067 | mBoolFlags &= ~(1 << name);
+ | ~~ ^~~~~~~~~~~~
+
+Differential Revision: https://phabricator.services.mozilla.com/D241582
+--- a/dom/base/nsINode.h
++++ b/dom/base/nsINode.h
+@@ -2065,25 +2065,25 @@ class nsINode : public mozilla::dom::EventTarget {
+ void SetBoolFlag(BooleanFlag name, bool value) {
+ static_assert(BooleanFlagCount <= 8 * sizeof(mBoolFlags),
+ "Too many boolean flags");
+- mBoolFlags = (mBoolFlags & ~(1 << name)) | (value << name);
++ mBoolFlags = (mBoolFlags & ~(1U << name)) | (value << name);
+ }
+
+ void SetBoolFlag(BooleanFlag name) {
+ static_assert(BooleanFlagCount <= 8 * sizeof(mBoolFlags),
+ "Too many boolean flags");
+- mBoolFlags |= (1 << name);
++ mBoolFlags |= (1U << name);
+ }
+
+ void ClearBoolFlag(BooleanFlag name) {
+ static_assert(BooleanFlagCount <= 8 * sizeof(mBoolFlags),
+ "Too many boolean flags");
+- mBoolFlags &= ~(1 << name);
++ mBoolFlags &= ~(1U << name);
+ }
+
+ bool GetBoolFlag(BooleanFlag name) const {
+ static_assert(BooleanFlagCount <= 8 * sizeof(mBoolFlags),
+ "Too many boolean flags");
+- return mBoolFlags & (1 << name);
++ return mBoolFlags & (1U << name);
+ }
+
+ public:
+
+https://phabricator.services.mozilla.com/D241584
+https://github.com/mozilla-firefox/firefox/commit/02f94f3cdc97fc3b2bc4654658230c2d896417ae
+
+From 6d368d85ef52ce67141f44f3fdbfd51ef23f14e6 Mon Sep 17 00:00:00 2001
+From: Mike Hommey <mh+mozilla@glandium.org>
+Date: Mon, 17 Mar 2025 23:31:43 +0000
+Subject: [PATCH] Bug 1954003 - Fix new implicit-int-conversion warnings from
+ clang 21. r=gfx-reviewers,lsalzman
+
+/builds/worker/checkouts/gecko/dom/canvas/CanvasRenderingContext2D.cpp:6284:9: error: implicit conversion loses integer precision: 'int32_t' (aka 'int') to 'uint32_t' (aka 'unsigned int') [-Werror,-Wimplicit-int-conversion]
+ 6284 | w = -aSw;
+ | ~ ^~~~
+/builds/worker/checkouts/gecko/dom/canvas/CanvasRenderingContext2D.cpp:6290:9: error: implicit conversion loses integer precision: 'int32_t' (aka 'int') to 'uint32_t' (aka 'unsigned int') [-Werror,-Wimplicit-int-conversion]
+ 6290 | h = -aSh;
+ | ~ ^~~~
+
+Differential Revision: https://phabricator.services.mozilla.com/D241583
+--- a/dom/canvas/CanvasRenderingContext2D.cpp
++++ b/dom/canvas/CanvasRenderingContext2D.cpp
+@@ -6281,13 +6281,13 @@ already_AddRefed<ImageData> CanvasRenderingContext2D::GetImageData(
+ // relevant direction.
+ uint32_t w, h;
+ if (aSw < 0) {
+- w = -aSw;
++ w = uint32_t(-aSw);
+ aSx -= w;
+ } else {
+ w = aSw;
+ }
+ if (aSh < 0) {
+- h = -aSh;
++ h = uint32_t(-aSh);
+ aSy -= h;
+ } else {
+ h = aSh;
diff --git a/www-client/icecat/files/icecat-r1.sh b/www-client/icecat/files/icecat-r1.sh
new file mode 100644
index 0000000..a24ba28
--- /dev/null
+++ b/www-client/icecat/files/icecat-r1.sh
@@ -0,0 +1,116 @@
+#!/bin/bash
+
+##
+## Usage:
+##
+## $ icecat
+##
+## This script is meant to run GNU IceCat in Gentoo.
+
+cmdname=$(basename "$0")
+
+##
+## Variables
+##
+MOZ_ARCH=$(uname -m)
+case ${MOZ_ARCH} in
+ x86_64|s390x|sparc64)
+ MOZ_LIB_DIR="@PREFIX@/lib64"
+ SECONDARY_LIB_DIR="@PREFIX@/lib"
+ ;;
+ *)
+ MOZ_LIB_DIR="@PREFIX@/lib"
+ SECONDARY_LIB_DIR="@PREFIX@/lib64"
+ ;;
+esac
+
+MOZ_FIREFOX_FILE="icecat"
+
+if [[ ! -r ${MOZ_LIB_DIR}/icecat/${MOZ_FIREFOX_FILE} ]]; then
+ if [[ ! -r ${SECONDARY_LIB_DIR}/icecat/${MOZ_FIREFOX_FILE} ]]; then
+ echo "Error: ${MOZ_LIB_DIR}/icecat/${MOZ_FIREFOX_FILE} not found" >&2
+ if [[ -d ${SECONDARY_LIB_DIR} ]]; then
+ echo " ${SECONDARY_LIB_DIR}/icecat/${MOZ_FIREFOX_FILE} not found" >&2
+ fi
+ exit 1
+ fi
+ MOZ_LIB_DIR="${SECONDARY_LIB_DIR}"
+fi
+MOZILLA_FIVE_HOME="${MOZ_LIB_DIR}/icecat"
+MOZ_EXTENSIONS_PROFILE_DIR="${HOME}/.mozilla/extensions/{ec8030f7-c20a-464f-9b0e-13a3a9e97384}"
+MOZ_PROGRAM="${MOZILLA_FIVE_HOME}/${MOZ_FIREFOX_FILE}"
+
+##
+## Enable Wayland backend?
+##
+if @DEFAULT_WAYLAND@ && [[ -z ${MOZ_DISABLE_WAYLAND} ]]; then
+ if [[ -n "${WAYLAND_DISPLAY}" ]]; then
+ export MOZ_ENABLE_WAYLAND=1
+ fi
+fi
+
+##
+## Use D-Bus remote exclusively when there's Wayland display.
+##
+if [[ -n "${WAYLAND_DISPLAY}" ]]; then
+ export MOZ_DBUS_REMOTE=1
+fi
+
+##
+## Make sure that we set the plugin path
+##
+MOZ_PLUGIN_DIR="plugins"
+
+if [[ -n "${MOZ_PLUGIN_PATH}" ]]; then
+ MOZ_PLUGIN_PATH=${MOZ_PLUGIN_PATH}:${MOZ_LIB_DIR}/mozilla/${MOZ_PLUGIN_DIR}
+else
+ MOZ_PLUGIN_PATH=${MOZ_LIB_DIR}/mozilla/${MOZ_PLUGIN_DIR}
+fi
+
+if [[ -d "${SECONDARY_LIB_DIR}/mozilla/${MOZ_PLUGIN_DIR}" ]]; then
+ MOZ_PLUGIN_PATH=${MOZ_PLUGIN_PATH}:${SECONDARY_LIB_DIR}/mozilla/${MOZ_PLUGIN_DIR}
+fi
+
+export MOZ_PLUGIN_PATH
+
+##
+## Set MOZ_APP_LAUNCHER for gnome-session
+##
+export MOZ_APP_LAUNCHER="@PREFIX@/bin/${cmdname}"
+
+##
+## Disable the GNOME crash dialog, Mozilla has its own
+##
+if [[ "${XDG_CURRENT_DESKTOP}" == "GNOME" ]]; then
+ GNOME_DISABLE_CRASH_DIALOG=1
+ export GNOME_DISABLE_CRASH_DIALOG
+fi
+
+##
+## Enable Xinput2 (#617344)
+##
+
+# respect user settings
+MOZ_USE_XINPUT2=${MOZ_USE_XINPUT2:-auto}
+
+if [[ ${MOZ_USE_XINPUT2} == auto && -n ${WAYLAND_DISPLAY} ]]; then
+ # enabling XINPUT2 should be safe for all wayland users
+ MOZ_USE_XINPUT2=1
+elif [[ ${MOZ_USE_XINPUT2} == auto && ${XDG_CURRENT_DESKTOP^^} == KDE ]]; then
+ # XINPUT2 is known to cause problems for KWin users
+ MOZ_USE_XINPUT2=0
+elif [[ ${MOZ_USE_XINPUT2} == auto && ${XDG_CURRENT_DESKTOP^^} == LXQT ]]; then
+ # LXQt uses KWin
+ MOZ_USE_XINPUT2=0
+elif [[ ${MOZ_USE_XINPUT2} == auto ]]; then
+ # should work on Mate, Xfce, FluxBox, OpenBox and all the others ...
+ MOZ_USE_XINPUT2=1
+fi
+
+[[ ${MOZ_USE_XINPUT2} != 0 ]] && export MOZ_USE_XINPUT2=${MOZ_USE_XINPUT2}
+
+# Don't throw "old profile" dialog box.
+export MOZ_ALLOW_DOWNGRADE=1
+
+# Run the browser
+exec ${MOZ_PROGRAM} "${@}"
diff --git a/www-client/icecat/files/icon/icecat-r3.desktop b/www-client/icecat/files/icon/icecat-r3.desktop
new file mode 100644
index 0000000..8219e93
--- /dev/null
+++ b/www-client/icecat/files/icon/icecat-r3.desktop
@@ -0,0 +1,236 @@
+[Desktop Entry]
+Version=1.0
+Name=@NAME@
+GenericName=Web Browser
+Comment=Browse the Web
+Exec=@EXEC@ %u
+Icon=@ICON@
+Terminal=false
+Type=Application
+MimeType=application/pdf;application/vnd.mozilla.xul+xml;application/xhtml+xml;text/html;text/mml;text/xml;x-scheme-handler/http;x-scheme-handler/https;
+StartupNotify=true
+Categories=Network;WebBrowser;
+Keywords=web;browser;internet;
+Actions=new-window;new-private-window;profile-manager-window;
+
+[Desktop Action new-window]
+Name=Open a New Window
+Name[ach]=Dirica manyen
+Name[af]=Nuwe venster
+Name[an]=Nueva finestra
+Name[ar]=نافذة جديدة
+Name[as]=নতুন উইন্ডো
+Name[ast]=Ventana nueva
+Name[az]=Yeni Pəncərə
+Name[be]=Новае акно
+Name[bg]=Нов прозорец
+Name[bn_BD]=নতুন উইন্ডো (N)
+Name[bn_IN]=নতুন উইন্ডো
+Name[br]=Prenestr nevez
+Name[brx]=गोदान उइन्ड'(N)
+Name[bs]=Novi prozor
+Name[ca]=Finestra nova
+Name[cak]=K'ak'a' tzuwäch
+Name[cs]=Nové okno
+Name[cy]=Ffenestr Newydd
+Name[da]=Nyt vindue
+Name[de]=Neues Fenster
+Name[dsb]=Nowe wokno
+Name[el]=Νέο παράθυρο
+Name[en_GB]=New Window
+Name[en_US]=New Window
+Name[en_ZA]=New Window
+Name[eo]=Nova fenestro
+Name[es_AR]=Nueva ventana
+Name[es_CL]=Nueva ventana
+Name[es_ES]=Nueva ventana
+Name[es_MX]=Nueva ventana
+Name[et]=Uus aken
+Name[eu]=Leiho berria
+Name[fa]=پنجره جدید‌
+Name[ff]=Henorde Hesere
+Name[fi]=Uusi ikkuna
+Name[fr]=Nouvelle fenêtre
+Name[fy_NL]=Nij finster
+Name[ga_IE]=Fuinneog Nua
+Name[gd]=Uinneag ùr
+Name[gl]=Nova xanela
+Name[gn]=Ovetã pyahu
+Name[gu_IN]=નવી વિન્ડો
+Name[he]=חלון חדש
+Name[hi_IN]=नया विंडो
+Name[hr]=Novi prozor
+Name[hsb]=Nowe wokno
+Name[hu]=Új ablak
+Name[hy_AM]=Նոր Պատուհան
+Name[id]=Jendela Baru
+Name[is]=Nýr gluggi
+Name[it]=Nuova finestra
+Name[ja]=新しいウィンドウ
+Name[ja_JP-mac]=新規ウインドウ
+Name[ka]=ახალი ფანჯარა
+Name[kk]=Жаңа терезе
+Name[km]=បង្អួច​​​ថ្មី
+Name[kn]=ಹೊಸ ಕಿಟಕಿ
+Name[ko]=새 창
+Name[kok]=नवें जनेल
+Name[ks]=نئئ وِنڈو
+Name[lij]=Neuvo barcon
+Name[lo]=ຫນ້າຕ່າງໃຫມ່
+Name[lt]=Naujas langas
+Name[ltg]=Jauns lūgs
+Name[lv]=Jauns logs
+Name[mai]=नव विंडो
+Name[mk]=Нов прозорец
+Name[ml]=പുതിയ ജാലകം
+Name[mr]=नवीन पटल
+Name[ms]=Tetingkap Baru
+Name[my]=ဝင်းဒိုးအသစ်
+Name[nb_NO]=Nytt vindu
+Name[ne_NP]=नयाँ सञ्झ्याल
+Name[nl]=Nieuw venster
+Name[nn_NO]=Nytt vindauge
+Name[or]=ନୂତନ ୱିଣ୍ଡୋ
+Name[pa_IN]=ਨਵੀਂ ਵਿੰਡੋ
+Name[pl]=Nowe okno
+Name[pt_BR]=Nova janela
+Name[pt_PT]=Nova janela
+Name[rm]=Nova fanestra
+Name[ro]=Fereastră nouă
+Name[ru]=Новое окно
+Name[sat]=नावा विंडो (N)
+Name[si]=නව කවුළුවක්
+Name[sk]=Nové okno
+Name[sl]=Novo okno
+Name[son]=Zanfun taaga
+Name[sq]=Dritare e Re
+Name[sr]=Нови прозор
+Name[sv_SE]=Nytt fönster
+Name[ta]=புதிய சாளரம்
+Name[te]=కొత్త విండో
+Name[th]=หน้าต่างใหม่
+Name[tr]=Yeni pencere
+Name[tsz]=Eraatarakua jimpani
+Name[uk]=Нове вікно
+Name[ur]=نیا دریچہ
+Name[uz]=Yangi oyna
+Name[vi]=Cửa sổ mới
+Name[wo]=Palanteer bu bees
+Name[xh]=Ifestile entsha
+Name[zh_CN]=新建窗口
+Name[zh_TW]=開新視窗
+Exec=@EXEC@ --new-window %u
+
+[Desktop Action new-private-window]
+Name=Open a New Private Window
+Name[ach]=Dirica manyen me mung
+Name[af]=Nuwe privaatvenster
+Name[an]=Nueva finestra privada
+Name[ar]=نافذة خاصة جديدة
+Name[as]=নতুন ব্যক্তিগত উইন্ডো
+Name[ast]=Ventana privada nueva
+Name[az]=Yeni Məxfi Pəncərə
+Name[be]=Новае акно адасаблення
+Name[bg]=Нов прозорец за поверително сърфиране
+Name[bn_BD]=নতুন ব্যক্তিগত উইন্ডো
+Name[bn_IN]=নতুন ব্যক্তিগত উইন্ডো
+Name[br]=Prenestr merdeiñ prevez nevez
+Name[brx]=गोदान प्राइभेट उइन्ड'
+Name[bs]=Novi privatni prozor
+Name[ca]=Finestra privada nova
+Name[cak]=K'ak'a' ichinan tzuwäch
+Name[cs]=Nové anonymní okno
+Name[cy]=Ffenestr Breifat Newydd
+Name[da]=Nyt privat vindue
+Name[de]=Neues privates Fenster
+Name[dsb]=Nowe priwatne wokno
+Name[el]=Νέο παράθυρο ιδιωτικής περιήγησης
+Name[en_GB]=New Private Window
+Name[en_US]=New Private Window
+Name[en_ZA]=New Private Window
+Name[eo]=Nova privata fenestro
+Name[es_AR]=Nueva ventana privada
+Name[es_CL]=Nueva ventana privada
+Name[es_ES]=Nueva ventana privada
+Name[es_MX]=Nueva ventana privada
+Name[et]=Uus privaatne aken
+Name[eu]=Leiho pribatu berria
+Name[fa]=پنجره ناشناس جدید
+Name[ff]=Henorde Suturo Hesere
+Name[fi]=Uusi yksityinen ikkuna
+Name[fr]=Nouvelle fenêtre de navigation privée
+Name[fy_NL]=Nij priveefinster
+Name[ga_IE]=Fuinneog Nua Phríobháideach
+Name[gd]=Uinneag phrìobhaideach ùr
+Name[gl]=Nova xanela privada
+Name[gn]=Ovetã ñemi pyahu
+Name[gu_IN]=નવી ખાનગી વિન્ડો
+Name[he]=חלון פרטי חדש
+Name[hi_IN]=नयी निजी विंडो
+Name[hr]=Novi privatni prozor
+Name[hsb]=Nowe priwatne wokno
+Name[hu]=Új privát ablak
+Name[hy_AM]=Սկսել Գաղտնի դիտարկում
+Name[id]=Jendela Mode Pribadi Baru
+Name[is]=Nýr huliðsgluggi
+Name[it]=Nuova finestra anonima
+Name[ja]=新しいプライベートウィンドウ
+Name[ja_JP-mac]=新規プライベートウインドウ
+Name[ka]=ახალი პირადი ფანჯარა
+Name[kk]=Жаңа жекелік терезе
+Name[km]=បង្អួច​ឯកជន​ថ្មី
+Name[kn]=ಹೊಸ ಖಾಸಗಿ ಕಿಟಕಿ
+Name[ko]=새 사생활 보호 모드
+Name[kok]=नवो खाजगी विंडो
+Name[ks]=نْو پرایوٹ وینڈو&amp;
+Name[lij]=Neuvo barcon privou
+Name[lo]=ເປີດຫນ້າຕ່າງສວນຕົວຂື້ນມາໃຫມ່
+Name[lt]=Naujas privataus naršymo langas
+Name[ltg]=Jauns privatais lūgs
+Name[lv]=Jauns privātais logs
+Name[mai]=नया निज विंडो (W)
+Name[mk]=Нов приватен прозорец
+Name[ml]=പുതിയ സ്വകാര്യ ജാലകം
+Name[mr]=नवीन वैयक्तिक पटल
+Name[ms]=Tetingkap Persendirian Baharu
+Name[my]=New Private Window
+Name[nb_NO]=Nytt privat vindu
+Name[ne_NP]=नयाँ निजी सञ्झ्याल
+Name[nl]=Nieuw privévenster
+Name[nn_NO]=Nytt privat vindauge
+Name[or]=ନୂତନ ବ୍ୟକ୍ତିଗତ ୱିଣ୍ଡୋ
+Name[pa_IN]=ਨਵੀਂ ਪ੍ਰਾਈਵੇਟ ਵਿੰਡੋ
+Name[pl]=Nowe okno prywatne
+Name[pt_BR]=Nova janela privativa
+Name[pt_PT]=Nova janela privada
+Name[rm]=Nova fanestra privata
+Name[ro]=Fereastră privată nouă
+Name[ru]=Новое приватное окно
+Name[sat]=नावा निजेराक् विंडो (W )
+Name[si]=නව පුද්ගලික කවුළුව (W)
+Name[sk]=Nové okno v režime Súkromné prehliadanie
+Name[sl]=Novo zasebno okno
+Name[son]=Sutura zanfun taaga
+Name[sq]=Dritare e Re Private
+Name[sr]=Нови приватан прозор
+Name[sv_SE]=Nytt privat fönster
+Name[ta]=புதிய தனிப்பட்ட சாளரம்
+Name[te]=కొత్త ఆంతరంగిక విండో
+Name[th]=หน้าต่างส่วนตัวใหม่
+Name[tr]=Yeni gizli pencere
+Name[tsz]=Juchiiti eraatarakua jimpani
+Name[uk]=Приватне вікно
+Name[ur]=نیا نجی دریچہ
+Name[uz]=Yangi maxfiy oyna
+Name[vi]=Cửa sổ riêng tư mới
+Name[wo]=Panlanteeru biir bu bees
+Name[xh]=Ifestile yangasese entsha
+Name[zh_CN]=新建隐私浏览窗口
+Name[zh_TW]=新增隱私視窗
+Exec=@EXEC@ --private-window %u
+
+[Desktop Action profile-manager-window]
+Name=Open the Profile Manager
+Name[de]=Profilverwaltung öffnen
+Name[cs]=Správa profilů
+Exec=@EXEC@ --ProfileManager
diff --git a/www-client/icecat/files/icon/icecat-symbolic.svg b/www-client/icecat/files/icon/icecat-symbolic.svg
new file mode 100644
index 0000000..723eb69
--- /dev/null
+++ b/www-client/icecat/files/icon/icecat-symbolic.svg
@@ -0,0 +1 @@
+<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"><defs><linearGradient id="a"><stop offset="0" stop-color="#d4e3eb" stop-opacity=".5"/><stop offset="1" stop-color="#d4e3eb" stop-opacity="0"/></linearGradient><linearGradient xlink:href="#a" id="b" x1="64.8" y1="175.6" x2="114.7" y2="175.6" gradientUnits="userSpaceOnUse"/></defs><path d="M255 179a107 100 0 11-213 0 107 100 0 11213 0z" transform="matrix(1.08865 0 0 1.12618 -15 -32)" fill="#002452" stroke="#000"/><path d="M35 141l7-9c6 1 10 4 13 8l3 3h2l5 3-1-2 2 3 3 1h1l7 3 4-5-1-1h4l1-6-3 3-5-1v-2h-1l-2-4h-2v3h-2l1-6-4-1-2-2 3-1v-1l-3-1 3-4v-5h-3l2-5 1-6h-2v-2l2-1v-7c2-6 4-6 6-8v-6a95 95 0 00-39 59z" fill="#8ac2ff"/><path d="M102 139l3 5 1 5 7-1c12 9 7 11 6 14l11 1v-2h5l-1-3 1-2v-3l2-2v-1h-4l-1-5 4-4 2-6v-3l45 6 3 3-1 6 3 2v5h-7l-3 1 9 2c3 5 5 6 7 7v17l-18 24-7 1-5 2-8-1c-5-2-4-4-1-7 3-2 0-5-3-8 2-2 2-4 1-6l-11-9-2 8h-3v3l1 1v5l-4-3-2-1v3l-2 1-9-6-1-4h-1l-2-3 2-3-3-4-2 3h-3l-1-3 1-2h2l1-3-2-4 3-1v-8l-5-3-4-1 7 5-1 3h-1c-2-2-1-4-7-6v-4l-3-2 1-9z" fill="#5ea9fe"/><path d="M39 122c-1-60 35-98 94-108 44-2 66 18 89 28l6-13 3 1 6 7 7 1 13 9 39-3-1 11c-5 4-11 9-12 12s-2 4-4 5c0 6 1 9-2 13l-3 21c-5 4-10 8-14 14l-1 5c1 1-2 1-4 4-3 3-5 3-9 2l-8-1-2-3-10-1h-2l-7-7c-10-1-8-11-12-18l-9-10c-6 2-10 7-17 18-1 11-4 13-2 32l2 9 4 16c3 5 7 10 7 16 4 6 4 11 4 16 4 4 5 8 5 11-1 3-1 8-5 9l-8-1-1-2-6-1-4-6c1-6-4-12-11-18-1-2-6-6-4-7 2-2 1-8-3-11-3-2-4-6-7-9 1 2-6-14-5-16 1-5-4-18-6-18v-26c-4-19-10-44-47-30-8 2-27 10-53 49z" fill="#f1f6f8" stroke="#000"/><path d="M146 152c18-21 33-48 50-63 4 7 7 7 10 13s1 14 6 15c5 2 7 6 12 9l13 1c1-1 0 2 1 2 3 2 12 3 13 2l15-28-20-50-40-18L71 59 43 86l-5 39c8-13 20-32 32-39 57-42 68 5 67 9l7 41 2 16z" fill="#d0e0e9"/><path d="M191 258l3-4v-5s9-9 10-8h10v-3l5-1 5-5h2v-3l2-2v-4l3-5 1-5 3-3 3 2 7-1 1 9-3 6-1 7-2 1v4l-6 4 1 1c-8 12-23 16-44 15z" fill="#056eff"/><path d="M210 257c22-23 18-29 18-29h-2v4l-2 1-6 4-4 1-1 3-10 1-9 7v6l-3 3c8 2 13 0 19-1z" fill="#00c5ff"/><path d="M91 157c25 55 40 83 103 101 33 2 51-25 62-47 2 12 1 24 0 36-12 19-24 34-49 35-29 4-61 1-102-29-48-47-38-72-40-94 7-19 16-16 26-2z" fill="#aad4ff" stroke="#000"/><path d="M69 195c16-1 34 6 46 10-7-10-15-26-23-43-3-7-8-16-18-16-7 5-11 16-9 30 1 6 1 14 4 19z" fill="#f2f2f2" stroke="url(#b)"/><path d="M65 175c9 2 14-6 20-14v12l-19 11-1-9z" fill="#002655"/><path d="M72 208l24-14-3-7c-7 5-11 13-25 13l4 8z" fill="#00244f"/><path d="M77 217c9-3 18-7 25-13l3 5c-9 5-17 11-23 18l-5-10z" fill="#002045"/><path d="M89 236c9-5 19-10 25-17l5 5c-4 10-13 16-21 22l-9-10z" fill="#002655"/><path d="M106 253c31-16 25-19 25-19v1c2 4-1 13-13 26-5-2-10-4-12-8z" fill="#002a5d"/><path d="M130 267l14-22c0 4-1 9 2 12l2 1c-1 6-4 11-3 17-10-3-12-5-15-8z" fill="#00346f"/><path d="M156 278c8-3 4-24 4-24l13 14c-2 7-2 13 3 15-7-1-13 1-20-5z" fill="#003e84"/><path d="M188 263c20 6 13 12 20 19-6 1-11 2-20 1 7-4 4-12-1-20z" fill="#004fa5"/><path d="M225 262c4 5 8 8 11 9-5 4-10 7-16 9 2-4 1-10-1-16-1-2 5-2 6-2z" fill="#005cc1"/><path d="M213 79c-2-7-1-16 7-33 1-2 2-2 2-5l6-12 4 1c2 3 3 6 5 7l6 1 14 9 38-2 1 11-11 8-4 7-2 1v8l-1 3-1 1-4 22c-5 5-13 8-14 19l-3 3-3 3h-4c-1-8-4-7-3-11l7-10 5-1 3-2-12-2-3 5-14-16 1 16-8-1c-3-5-12-8-14-14-2-3-1-8 3-13l7 5 7 1 8-4v-8l-5-19-4-9c-5 11-3 24-14 31z" fill="#6db5ff"/><path d="M40 103l13-26 16-10 54-1c9 1 11 7 13 13 8 1 9 5 8 9l-6 9 2 32 5 8 1-21c0-13 3-16 6-19 33 0 33-25 35-50 1-1 2-3 5-4l23-4C113-3 54 32 40 103z" fill="#5babfe"/><path d="M62 50l7 2 3-3 4 8 3 1v-3l-7-13c6 2 11 8 14 9V40l2-2 3 9c5 6 6 10 8 14 3 1 5 0 6-1-2 0-4-1-5-6v-7l-3-1-1-11h3l7 21 14 8 4 1v-2c-6-2-11-9-16-13-4-9-1-10-2-15l4 7 10 11v-4c-9-12-4-13-6-19l3 1 1 9c5 5 14 8 14 17 2-2 7 4 9 14V60c-6-5-12-14-17-23-3-5-2-9-1-13 2 2 6 2 7 5l11 23c8 6 9 12 8 19 6 4 6 11 7 17l-1-13-12-43h5l2 6 5 3 4 13 1 23 1 1v14l3-14-2-3V51c-3-3-2-7-3-10l2-7h3v12l2 6V41l8-5-2 20 4-19 6 1c0 16-3 28-4 41 5-6 4-22 6-34l10-11 2 2-7 18-4 18 1 1 8-21v-4l4-9 7 5 11-5c-32-21-96-50-154 11z" fill="#004ca0"/><path d="M226 68l1-14 6-13v-3l6 2 18 10h25l-22 8h-7l-17-13c-6 7-8 15-10 23z" fill="#003a7b"/><path d="M237 98c10 9 9 11 9 11v-7c-3-3-6-3-9-4zM248 127l3-3 5 1-4 4-4-2z" fill="#001c41"/><g><path d="M240 120h-8c-1-1-4 0-7 2l-7 6 7-7 6-3h9v2zM234 117l-10 1-11 4 9-5c5-2 9-1 13-1l-1 1z" fill="#9fceff"/><path d="M241 122l-12 3c-5 1-8 6-12 9l6-7c4-4 7-4 10-5h9-1z" fill="#9fceff"/><path d="M221 131h0z" fill="none" stroke="#000"/></g></svg> \ No newline at end of file