guix_mirror_bot pushed a commit to branch gnuzilla-updates
in repository guix.

commit 287c9564a4a17e016e6940c1fa23b87014600145
Author: Maxim Cournoyer <[email protected]>
AuthorDate: Tue Aug 26 22:31:26 2025 +0900

    gnu: icecat: Update to 140.2.0 [security fixes].
    
    For Firefox/IceCat, this fixes at least CVE-2025-6427, CVE-2025-6428,
    CVE-2025-6431, CVE-2025-6432, CVE-2025-6433, CVE-2025-6434, CVE-2025-6435 
and
    CVE-2025-6436.
    
    For Thunderbird/IceDove, this fixes too many CVEs to be named here. Consult
    <https://www.mozilla.org/en-US/security/known-vulnerabilities/thunderbird> 
to
    read the details.
    
    * gnu/packages/image.scm (libpng-apng-for-librewolf): Rename to...
    (libpng-apng-next): ... this.
    * gnu/packages/librewolf.scm (librewolf) [inputs]: Adjust accordingly.
    * gnu/packages/gnuzilla.scm (icecat-minimal): Update to 140.2.0.
    [#:configure-flags]: Add --disable-fhs.  Remove --enable-official-branding.
    [#:phases] {apply-guix-specific-patches}: Apply
    icecat-fhs-configure-option.patch.
    {remove-cargo-frozen-flag}: Remove --frozen from rust.mk.
    {install}: Also install a policies.json file to disable the Sync feature.
    {install-desktop-entry}: Adjust and streamline.
    {install-icons}: Use the 'unofficial' branding directory.
    [inputs]: Replace libpng-apng with libpng-apng-next.
    [native-search-paths]: Replace ICECAT_SYSTEM_DIR with MOZILLA_SYSTEM_DIR.
    (icecat-source): Remove obsolete cleanups.  Switch tarball compression to
    zstd.
    (make-l10n-package): No longer set GUIX_PYTHONPATH.
    [#:phases] {build}: Register the "tb_common" mach site.
    [native-inputs]: Replace python-wrapper with python. Add python-aiohttp,
    python-async-timeout and python-dateutil.
    (mozilla-115-compare-locales, mozilla-115-locale, mozilla-115-locales)
    (update-mozilla-115-locales, all-mozilla-115-locales, 
%icecat-115-base-version)
    (%icecat-115-version, %icecat-115-build-id
    (icecat-115-source): Delete variables.
    (mozilla-l10n): Update to correct changeset.
    (format-locales): New procedure.
    (%icecat-locales): Update.
    (%icecat-base-version): Set to the version of mozjs.
    (%icecat-build-id): Bump.
    (%icedove-build-id): Bump.
    (%icedove-version): Set to 140.2.0.
    (thunderbird-comm-source): Update accordingly.
    [patches]: New field.
    (comm-source->locales+changeset): Delete variable.
    (%icedove-locales): Regenerate.
    (thunderbird-comm-l10n): Adjust URI.
    (icedove-source): Compress resulting tarball via zstd. Adjust patching based
    on changed file names and content. Make "comm" files writable. Patch
    MOZ_APP_NAME in "devtools/startup/DevToolsStartup.sys.mjs". Adjust
    services.settings.server value to avoid a warning.
    (icedove-minimal) [#:phases] {configure}: Do not set PYTHON. Add
    'ac_add_options --enable-rust-simd' flag.
    {do-not-verify-vendored-rust-dependencies}: New phase.
    {patch-cargo-checksums}: Sync with IceCat, add "comm" directory.
    {remove-cargo-frozen-flag}: Sync phase with that of IceCat.
    [inputs]: Sort. Add ffmpeg. Remove gtk+-2. Replace nss with nss-rapid.
    [native-inputs]: Replace clang-15 with clang-20, llvm-15 with llvm-20. 
Replace
    rust-cbindgen-0.24 with rust-cbindgen.
    * gnu/packages/patches/icecat-makeicecat-update.patch: New file.
    * gnu/packages/patches/icedove-observer-fix.patch: Likewise.
    * gnu/local.mk (dist_patch_DATA): Register them.
    * gnu/packages/patches/icecat-compare-paths.patch: Update.
    * gnu/packages/patches/icecat-use-system-wide-dir.patch: Rework, with the 
goal
    to of upstreaming it.
    
    Change-Id: Ib420388b9e7c7b59baa74920951afbda99cfe5a2
---
 gnu/local.mk                                       |    2 +
 gnu/packages/gnuzilla.scm                          |  794 +++++++--------
 gnu/packages/image.scm                             |   59 +-
 gnu/packages/librewolf.scm                         |    2 +-
 gnu/packages/patches/icecat-compare-paths.patch    |   17 +-
 .../patches/icecat-fhs-configure-option.patch      |   38 +
 .../patches/icecat-makeicecat-update.patch         | 1070 ++++++++++++++++++++
 .../patches/icecat-use-system-wide-dir.patch       |   58 +-
 gnu/packages/patches/icedove-observer-fix.patch    |   35 +
 9 files changed, 1564 insertions(+), 511 deletions(-)

diff --git a/gnu/local.mk b/gnu/local.mk
index a25d0c015e..bab931cc58 100644
--- a/gnu/local.mk
+++ b/gnu/local.mk
@@ -1600,11 +1600,13 @@ dist_patch_DATA =                                       
        \
   %D%/packages/patches/hwloc-1-test-btrfs.patch                        \
   %D%/packages/patches/i7z-gcc-10.patch                                \
   %D%/packages/patches/icecat-makeicecat.patch                 \
+  %D%/packages/patches/icecat-makeicecat-update.patch          \
   %D%/packages/patches/icecat-avoid-bundled-libraries.patch    \
   %D%/packages/patches/icecat-compare-paths.patch              \
   %D%/packages/patches/icecat-use-system-graphite2+harfbuzz.patch      \
   %D%/packages/patches/icecat-use-system-media-libs.patch      \
   %D%/packages/patches/icecat-use-system-wide-dir.patch                \
+  %D%/packages/patches/icedove-observer-fix.patch               \
   %D%/packages/patches/icedtea-7-hotspot-aarch64-use-c++98.patch       \
   %D%/packages/patches/icedtea-7-hotspot-pointer-comparison.patch      \
   %D%/packages/patches/icu4c-icu-22132-fix-vtimezone.patch     \
diff --git a/gnu/packages/gnuzilla.scm b/gnu/packages/gnuzilla.scm
index 23362e0d87..1546e78ac1 100644
--- a/gnu/packages/gnuzilla.scm
+++ b/gnu/packages/gnuzilla.scm
@@ -41,6 +41,8 @@
   #:use-module ((srfi srfi-1) #:hide (zip))
   #:use-module (ice-9 format)
   #:use-module (ice-9 match)
+  #:autoload (ice-9 pretty-print) (pretty-print)
+  #:autoload (ice-9 textual-ports) (get-string-all)
   #:use-module (gnu packages)
   #:use-module ((guix licenses) #:prefix license:)
   #:use-module (guix packages)
@@ -74,6 +76,7 @@
   #:use-module (gnu packages linux)
   #:use-module (gnu packages perl)
   #:use-module (gnu packages pkg-config)
+  #:use-module (gnu packages python-web)
   #:use-module (gnu packages compression)
   #:use-module (gnu packages fontutils)
   #:use-module (gnu packages fonts)
@@ -100,7 +103,7 @@
   #:use-module (gnu packages xdisorg)
   #:use-module (gnu packages readline)
   #:use-module (gnu packages sqlite)
-  #:autoload (json parser) (json->scm))
+  #:use-module (gnu packages time))
 
 (define-public mozjs
   (package
@@ -372,330 +375,14 @@ fractional-second-digits-append-item.js")
     (inputs
      (list icu4c-73 readline zlib))))
 
-
-;;;
-;;; Localization helper procedures.
-;;;
-(define mozilla-115-compare-locales
-  (origin
-    (method hg-fetch)
-    (uri (hg-reference
-          (url "https://hg.mozilla.org/l10n/compare-locales/";)
-          (changeset "RELEASE_8_1_0")))
-    (file-name "mozilla-compare-locales")
-    (sha256 (base32 "00bpkaqf2ng1nn9ajyb5mli0jq58q5fm2n3yy90jy0hp4q2gbs50"))))
-
-(define (mozilla-115-locale locale changeset hash-string)
-  (origin
-    (method hg-fetch)
-    (uri (hg-reference
-          (url (string-append "https://hg.mozilla.org/l10n-central/";
-                              locale))
-          (changeset changeset)))
-    (file-name (string-append "mozilla-locale-" locale))
-    (sha256 (base32 hash-string))))
-
-(define-syntax-rule (mozilla-115-locales (hash-string changeset locale) ...)
-  (list (mozilla-115-locale locale changeset hash-string)
-        ...))
-
-(define (update-mozilla-115-locales changesets.json)
-  "Output a new list of Mozilla locales, to update the ALL-MOZILLA-115-LOCALES
-variable defined below.  It requires guile-json to be installed."
-  (match (call-with-input-file changesets.json json->scm)
-    (((lang ("revision" . revision) platforms pin) ...)
-     (let ((data (reverse (map (lambda (rev lang)
-                                 `(,(list->string (make-list 40 #\0))
-                                   ,(string-take rev 12) ,lang))
-                               revision lang))))
-       (format #t "~{~s~%~}" data)
-       data))))
-
-(define-public all-mozilla-115-locales
-  (mozilla-115-locales
-   ;;                      sha256                            changeset    
locale
-   
;;---------------------------------------------------------------------------
-   ("152dc3nxbsjhawq8wm040hbnhq96l039j3k8ll4q93qm93msj507" "de9eb6a1e3e0" 
"ach")
-   ("0rfbzyv87x5d4qspjaiwsvqcf57g0d93daibj4rc4xsq3g2gw45v" "45b72420bf17" "af")
-   ("13lfl3nq0nr3zvh1zddpnyk8x054784yz08nkprmqhzyvfv3i5wq" "babed417b5e8" "an")
-   ("07fjh9wvl9jgvyqbvsd7l4pq895y4sv725fd8fr274s6l4x7pzz0" "7df35a519b47" "ar")
-   ("04zmfr15a3zhalj66ydpcrh3nxk1q7wb2gckfqsq55q72i3hvkcy" "fd0068a8989f" 
"ast")
-   ("1x2hnsa1nfmysd7w53ly14bp8hk1vbgfj1016wapcshvf1kap3mr" "4df6d5edc74d" "az")
-   ("1synmbnng6ai8gmz8srxdgf3qgadjvymb66inp3g2lww0c98c4qn" "97829729f043" "be")
-   ("1zank8f4145v4fv28y47ssknn55zrpyll3kxhha2h54za4zkn4p1" "4f568ae49cf3" "bg")
-   ("00wdllmdmzg11x6dcj3f2i047y3bgab1qw2zjaa92i36d5nd2hdr" "a634f8559ffd" "bn")
-   ("0b5f50ar7zj2z1jjvhv8841rabx5a2ylcl0rma3qiz5i6r41lgli" "4ca046b16e37" "br")
-   ("1g1qh8b496psq9yknjzi7drzqzhd5g50xl5qiwd6pr61xyqfvnkx" "690960700526" "bs")
-   ("1wd463lfhdybx0nz0dqvhrsi7f9xl5qd7mvshpgqxlj5x1nhamzy" "58714a456fd6" "ca")
-   ("1s9ls2fh9xfgb8q9vay5lkszfhh0k99lrp28m3fi83b5vv8qj8fq" "12760eef74bc" 
"cak")
-   ("0abwslv88hda2wfsnkyi7si9v16923gf4xfbq3h0a6mpxf1mylhs" "703352c2a9b4" 
"ca-valencia")
-   ("05pfacr2kk0sxrpw3s15c8rvchkzxgvsy1njp5q72b270sw98i7h" "6a7eef3982fb" "cs")
-   ("0cidwylb4s7n1hdw4yjqj89bl2qsscf3b1vnfl7hsxf68lj2lzaj" "9c30e4ec1dde" "cy")
-   ("10d7mn2qq0nvw3073ga4garwnvpk5xqkgn3dgw1az2g5pncclhfk" "668cf42570ef" "da")
-   ("0nfb3nf47gavafb35mm4ghl82kpylyj0r1vqc47nz151mjj2mnli" "c968a5118cda" "de")
-   ("1qjf12aymz1x281chv7sqyarbz6f8w7nxsli3b4srsar12l5f0lb" "27dd7f4a3f3f" 
"dsb")
-   ("040165lwplyj0cv9ccagdjwigy527rli3qda6b633bqrpx6310sw" "920e28aa6758" "el")
-   ("1h5zk58rmrqnbfhxyiwcn0385v6r5ayfkblpwqkji80p135n74sa" "b0e55a5a6413" 
"en-CA")
-   ("1w5q4b1a9ysgc76dg45cr2q55y4djdcrj2qzs0imq61sjrvih2fv" "9aae743f32df" 
"en-GB")
-   ("0mxsp5ipg36jdpphwrdra877z9vz1ifbhas988awhc3i9byx7zbh" "3c825be76f39" "eo")
-   ("1nxscjmk80wh359lv4cxgh1y85f8qw522dppy292pkqnqnsrfnq1" "ffac56bd3aef" 
"es-AR")
-   ("02353n524fy5icp2myjn198n511lzb03hcd4a61bgd7f26cpkhy5" "77e209bb2114" 
"es-CL")
-   ("1863d4zy2745hfw2kgw5z0625znvzkqwlwbvcj8cw6nv3r6dxgdv" "215ced58e499" 
"es-ES")
-   ("0asrcxvig4i75r4kpkmcfsc1kzjl8cbaz11an5kny2slcy63av7i" "d748a2a91643" 
"es-MX")
-   ("1p40zmf29mq81blssjh6gs8fih925mia3l1gya9vzgyp5i4dvln6" "66edf9863a04" "et")
-   ("1hr4q01856j8jmjia39586mxfbv5ijkq7i6cyxz1r422gqivv13v" "752b6aa2225e" "eu")
-   ("0d6vgd6anz237ckgc3a30nzdxa98fw33rc1r2wkr4y3yfvd2bidc" "4a57be1cf783" "fa")
-   ("1kjb8k55vkgn7fpzgvayahzx7cbx7vryyv89kynp2lv052smhh01" "e42c0149059c" "ff")
-   ("0d392s3fh1cl491b72cxlj7la6in84mfxbcn862f0sr63iz0q7wn" "0a2a3e96367c" "fi")
-   ("10rvxinl9as9wdd9yrhsskjwsklzxd35j4b1ygr4jlvslcrmdhpn" "119b009eba98" "fr")
-   ("1x0bfp7gaplnwcmfvv8c87znxp9fxsa99nl88j87qxn45h9kz8q6" "475065215d5c" 
"fur")
-   ("0p20jlm8vxlzixm446wcqjs5sz7m9x7v4zgqczvriwyspad7d8xp" "6909c0c42a2e" 
"fy-NL")
-   ("1rh8mvlamawzdfis0ah8rgnjk30mzpxhgh1yx8rxppps7l5n2hpj" "2f350c9ba505" 
"ga-IE")
-   ("1n2dxvv0q77azg2cz4nasq47pbsh1l6fngphy3lzz1wj4x3s8z7g" "3fe4a6bcac31" "gd")
-   ("15x51q3lsr67lklci13cqlxmgjyk8px12qc3qfrfdv2dk68znwmq" "0482da4a3d5b" "gl")
-   ("1zx7a0l781hyi9k6bi0m9ghgzcb116cqy88q7bf9sm0gar85yxwi" "bb255fc733c3" "gn")
-   ("1p6ycyjp7qsv1fk19yca5bwvyg72y3v87fr3wmhq7xzmdz6994fm" "dd3707daa411" 
"gu-IN")
-   ("02r68v2yhxxdfms9l2yq8pk7rarg1ysv67mbny04gaws6k5fv3an" "c247293030ae" "he")
-   ("116s9qgcwb0j1mzwy5napq5ww9cs5hcj41xiq2k6kz4gjxw4jazl" "e9c1a1fe1b79" 
"hi-IN")
-   ("1kg7xiw75ks490kiay2gndlc2akkg4bxdx4q7ysaxf6kpgisakxg" "068c00ca7cae" "hr")
-   ("1xjqvqn65nyb0dlchy3bikpf0g3qjba7i5g68jcicz0hcyrfagvd" "5fd424d1061b" 
"hsb")
-   ("1j81cv599h3iv26yzzdf8m5vkdw9kdhrlls8c6zd3fslpd91yn5q" "0ef89daff942" "hu")
-   ("0wwjyjpqcxvjsw7md6sz2zxncay3wk066qiv4p2vpqv5sw9z1sdh" "771fd65bc781" 
"hy-AM")
-   ("0pxjvzkkhls3d28c1656y3fc78snhc90f0mj5jx9rhh7l6hg0801" "6cfa8fc01f2a" "ia")
-   ("1xh93qkj7y4ad10sqyldr9hymsbffnq7kya0smvci1nwmnndd8bk" "ae863f3cd230" "id")
-   ("1npyaz5zyk6yr8z8sj2gbd0ahynglxmalw27rcdb57h81n0520y7" "d465499a6600" "is")
-   ("14hhl050vzbrwwppvpyicqfcqazpvyaygnr8hgrz0jgyb30lfvhw" "a8ac50410815" "it")
-   ("1jz9i0x22qig74gwrrrvnwc7s50h1x18sl797lr678xiw4f6p0ar" "13abbdd8abdf" "ja")
-   ("04k53mnskapqv968gphpmzhxbg1m0jxbzf24z9g0lgspnhcgwpx9" "1f388ad7f0e9" 
"ja-JP-mac")
-   ("1n9ayc6l72fy08zdqpwag54rh6j5aagj7y7976gyvjl1ssz745fs" "ed774dd2eff3" "ka")
-   ("09bw4sk8g7bmx9xxxiy8y9p8zhf3h3gvaddlx86zdk12k44iqmnc" "c9cfab9734b4" 
"kab")
-   ("0lmwsq72vk424nlrgnq46apdbgivzrmx303rvng8h03wrp9qjz1m" "4797db4a0fcb" "kk")
-   ("0al453bmiq85kkkfaba11iwnx0dy9f3dl9hlz0j38ysgcipwap5l" "f312da458d8b" "km")
-   ("1rjf875nwcqnlbfgk92vpa8msy3vp2xcgfasj7kksr37rxcbwa8m" "a30ac878de56" "kn")
-   ("0v5a1v0a6xziwhspfqpdccl00h0b4j4k4vwmmijld44cdmj208v9" "6f5e9c8eb029" "ko")
-   ("0kx0hz0dp9bdgf0r0m9qsip2ybrc4dwmry3kp488z2pig0asai7x" "dcdf4bf4482b" 
"lij")
-   ("1iawv3hbl0wab1xzhhihxiqsz2i6icf64ipmjrpm9srlg6kaxgg5" "913770b70ead" "lt")
-   ("15ppml5b0f78ycdswff0yqr27d649fr2rggv5dnxqxxm2bx5hzw6" "6351f7efe4d7" "lv")
-   ("0crbysr0raqh90ayb5rq73d3cddfryfaj4bdbzijk2j2rpdlwv1m" "6acffb2c66ee" "mk")
-   ("0b5dw5a904w5ibd7yz1839a0cv2hmnlv2bz0kpsr6xf52jv20g6a" "942eca4c76b6" "mr")
-   ("0fr83kiq7xmw1kyrjrmm3iirlfcp94dyacdkkj9df6gr5qp6wn7i" "de00ab4bb6fe" "ms")
-   ("011y1yyl97avjawja3gmwwa74kxcvm2g2wn47yv01xqy74wbbss7" "2ce7138cd126" "my")
-   ("0f6ffh76g31df9kfj6azip2qy0b14s287isgm7sxnclch4jwq83s" "5cc51d238790" 
"nb-NO")
-   ("193nw6l0z7vlcd7flb72bc8h7vd9vjj8xlz5lhf7irmfr2bldj0r" "db205a4fd15a" 
"ne-NP")
-   ("14qizkrcs1avd78ci4i4hr7v3bz3m51if1jc5wxydkx9n0yb8cgn" "1abc02acab91" "nl")
-   ("1cjglsaf8ynm4wgzpbcf68gj8jhvnzldrnjlni4c4vvl0bfxnxa2" "b4ff1a7885c2" 
"nn-NO")
-   ("0jpdq7zpqs3gnyzz1xvccvjqbzwga35sj85z52vprm6zcxd8gm0m" "1c7d5471dba9" "oc")
-   ("14apl3vhxkqcy8l5a0ny71f9dkmbb5fakvkpngqv5xgbbl0byfk3" "cf3fd8eb605b" 
"pa-IN")
-   ("1aglsx0w3xgbn1dhdbzwcqn8sdkp4bncl5bj7nlick56rbkicj9j" "3c9c3c67830a" "pl")
-   ("10hqfd0fjbcbgdsj0jxdfvm9abiya05lw2bpy0cz6h61mgjywqiz" "68bf2b7c6f25" 
"pt-BR")
-   ("1vvs0kkvnnnsxn1d5fnma55fizzs1bbx5sv5k2w4164k6h7fhxfv" "fae18b48519f" 
"pt-PT")
-   ("0c8dl12n5fjdd3bjaf8idyaxsf8ppbma132vdw8bk2wqnh4cv69a" "92110fd6e211" "rm")
-   ("0mxxy56kj0k5jhjxjv8v4zz57pha819mz7j803lcilax7w52wgca" "5eeba1f64743" "ro")
-   ("0jrd95n108r4sxdwgy39zjynm5nlzzmiijsfpxxfwj7886wl4faz" "47131134e349" "ru")
-   ("1lwm5jv3hvjp84a70186x2083nhr3mfcl7kpmw5in9amaflfi41b" "a5cd6d3d67ee" 
"sat")
-   ("1q6pn3iixzcas9blf61bhvwgppbsh0am0wdz6a6p9f9978894d73" "880b7986692a" "sc")
-   ("0xndsph4v725q3xcpmxxjb9vxv19sssqnng82m9215cdsv9klgpb" "bf5f6e362f6f" 
"sco")
-   ("0l70n8817mbmbc09fsnn2aqjj9k9dhad2gmzgphmiilf9mqm2dpf" "1f705c926a99" "si")
-   ("19bqjazazww08chd1qc08dsnr2521088jq5jd4j3185yb1ypm3nr" "c1bd10d70325" "sk")
-   ("12q1nv6z4bk8yaw3vhl9xs41i7kpx1415mwg635v76fx8h94ycl3" "00eaf8d9e83b" 
"skr")
-   ("11nmjmy2j249588ahg4mh9lxdqr476jbh28a07qxxibfa76j9vk3" "44be3cbf69b6" "sl")
-   ("1ww35141nixg2s03kfmmq9fk6m3qiz2vg7p5a85shjp7i89pyj1d" "800576ff8ef9" 
"son")
-   ("1q7nfybwc8mxdwi9fpvfhayq18mykzygkpakr5ngfz2316k8lf5r" "4de8638ac27f" "sq")
-   ("06wr7zx6kvaxsly5f3ci7kb2zaqlwjjbg1vrimp0jcqs4l5x6wpl" "ec560d96370c" "sr")
-   ("01n1ly9lihnznrab3kcby2i93k0qwg99c9fh55xpi90vkyq77gmq" "c5754f9325a1" 
"sv-SE")
-   ("09kk9bj2139j34md26zysaaf8cqyh5nmf861vxnc2vdsd37nr4x4" "c3fa195a8edf" 
"szl")
-   ("1vpr88vj9n7pm87dynyqyyiv1v2igd3w0f3a65g8rirknh3wfw44" "755763981e95" "ta")
-   ("19qwvi642fpg7zyhlcj9fgnm0bbkvqby6apr7iijayammg2vnyx3" "3a34078388af" "te")
-   ("1lh3m1d8rblas50g990qwcr2qv2nk5m6isjvi0gr57zhc4l9a4lw" "24c3a61f463c" "tg")
-   ("0sr0wa886a5gwrgn7rmn08sn6qz4p58037wx9gskacclhrzs53aw" "6dad5f8774df" "th")
-   ("19cvf42lmi9996mxlmplpk1b65p1fh4ja36xprs115z2n1iky9y5" "befaa7917b35" "tl")
-   ("04p50pd380hdalizz09qix7camipazkjyyi97f3sl04h6i67vz17" "66c8bc5e9da6" "tr")
-   ("0lqbaxkdvi8hjns8myssmv6bxymh53glf0w2nfpj72zh40rr1n09" "9e86caeded11" 
"trs")
-   ("13qmsji7gyad0d23ac7lx4181zhm3kb9xym82z786f7k271jq7kl" "bd5e0aad5f0b" "uk")
-   ("0m52xl2vy0paj5kcfk8jy70hhck5bgdg8lb6cvjqm2mhl5sli0ka" "040d506ed663" "ur")
-   ("1n0gdgjwwwd5yd69ylr05hskjxasydnkqw33rncpx7491x3nf4kf" "7e4e5290c700" "uz")
-   ("140lnl9dq82azlw1qic386h4z0xbilcf3jvjy93qid67mvnmwqqm" "b8196f646583" "vi")
-   ("07yc91645aiks3fxzx16kw4kzvksyrj36n9iz59wn9wppzlampx6" "ef98e07b4b9e" "xh")
-   ("1c1sfaincridbdp66bzgwgxgp5gqpvzkf10m9yafm9bgkif18vwy" "f614d8a31562" 
"zh-CN")
-   ("0s9chi76476gznrxjcn6slhgsznjnaps0h29kck6ijb0x3yx98xi" "ab22459ceb2f" 
"zh-TW")))
-
 (define computed-origin-method (@@ (guix packages) computed-origin-method))
 
-(define %icecat-115-base-version "115.24.0")
-(define %icecat-115-version (string-append %icecat-115-base-version "-guix1"))
-(define %icecat-115-build-id "20250527000000") ;must be of the form 
YYYYMMDDhhmmss
-
-(define icecat-115-source
-  (let* ((major-version (first  (string-split %icecat-115-base-version #\.)))
-         (minor-version (second (string-split %icecat-115-base-version #\.)))
-         (sub-version   (third  (string-split %icecat-115-base-version #\.)))
-
-         (upstream-firefox-version (string-append %icecat-115-base-version 
"esr"))
-         (upstream-firefox-source
-          (origin
-            (method url-fetch)
-            (uri (string-append
-                  "https://ftp.mozilla.org/pub/firefox/releases/";
-                  upstream-firefox-version "/source/"
-                  "firefox-" upstream-firefox-version ".source.tar.xz"))
-            (sha256
-             (base32
-              "00229s39xidjzf7afpkyai9jz6ffqqcghn2wniraxyqa2rc5mfc1"))))
-
-         ;; The upstream-icecat-base-version may be older than the
-         ;; %icecat-base-version.
-         (upstream-icecat-base-version "115.24.0")
-         (gnuzilla-commit "b1da0f01591182b43e179451ce2484d0fee88dd8")
-         (gnuzilla-source
-          (origin
-            (method git-fetch)
-            (uri (git-reference
-                  (url "git://git.savannah.gnu.org/gnuzilla.git")
-                  (commit gnuzilla-commit)))
-            (file-name (git-file-name "gnuzilla"
-                                      ;;upstream-icecat-base-version
-                                      (string-take gnuzilla-commit 8)))
-            (sha256
-             (base32
-              "1nrswd5g75wq8z997dilh2mxd0ssjrp1kp7v7l6x2gqmfiwa8r7h"))))
-
-         ;; 'search-patch' returns either a valid file name or #f, so wrap it
-         ;; in 'assume-valid-file-name' to avoid 'local-file' warnings.
-         (makeicecat-patch
-          (local-file (assume-valid-file-name
-                       (search-patch "icecat-makeicecat.patch")))))
-
-    (origin
-      (method computed-origin-method)
-      (file-name (string-append "icecat-" %icecat-115-version ".tar.xz"))
-      (sha256 #f)
-      (uri
-       (delay
-        (with-imported-modules '((guix build utils))
-          #~(begin
-              (use-modules (guix build utils))
-              (let ((firefox-dir
-                     (string-append "firefox-" #$%icecat-115-base-version))
-                    (icecat-dir
-                     (string-append "icecat-" #$%icecat-115-version)))
-
-                (set-path-environment-variable
-                 "PATH" '("bin")
-                 (list #+python
-                       #+(canonical-package bash)
-                       #+(canonical-package coreutils)
-                       #+(canonical-package findutils)
-                       #+(canonical-package patch)
-                       #+(canonical-package xz)
-                       #+(canonical-package sed)
-                       #+(canonical-package grep)
-                       #+(canonical-package bzip2)
-                       #+(canonical-package gzip)
-                       #+(canonical-package tar)))
-
-                (set-path-environment-variable
-                 "PYTHONPATH"
-                 (list #+(format #f "lib/python~a/site-packages"
-                                 (version-major+minor
-                                  (package-version python))))
-                 '#+(cons python-jsonschema
-                          (map second
-                               (package-transitive-propagated-inputs
-                                python-jsonschema))))
-
-                ;; We copy the gnuzilla source directory because it is
-                ;; read-only in 'gnuzilla-source', and the makeicecat script
-                ;; uses "cp -a" to copy parts of it and assumes that the
-                ;; copies will be writable.
-                (copy-recursively #+gnuzilla-source "/tmp/gnuzilla"
-                                  #:log (%make-void-port "w"))
-
-                (with-directory-excursion "/tmp/gnuzilla"
-                  (make-file-writable "makeicecat")
-                  (invoke "patch" "--force" "--no-backup-if-mismatch"
-                          "-p1" "--input" #+makeicecat-patch)
-                  (patch-shebang "makeicecat")
-                  (substitute* "makeicecat"
-                    (("^readonly FFMAJOR=(.*)" all ffmajor)
-                     (unless (string=? #$major-version
-                                       (string-trim-both ffmajor))
-                       ;; The makeicecat script cannot be expected to work
-                       ;; properly on a different version of Firefox, even if
-                       ;; no errors occur during execution.
-                       (error "makeicecat major version mismatch"))
-                     (string-append "readonly FFMAJOR=" #$major-version "\n"))
-                    (("^readonly FFMINOR=.*")
-                     (string-append "readonly FFMINOR=" #$minor-version "\n"))
-                    (("^readonly FFSUB=.*")
-                     (string-append "readonly FFSUB=" #$sub-version "\n"))
-                    (("^readonly DATADIR=.*")
-                     "readonly DATADIR=/tmp/gnuzilla/data\n")
-                    (("^readonly SOURCEDIR=.*")
-                     (string-append "readonly SOURCEDIR=" icecat-dir "\n"))
-                    (("/bin/sed")
-                     #+(file-append (canonical-package sed) "/bin/sed"))))
-
-                (format #t "Unpacking upstream firefox tarball...~%")
-                (force-output)
-                (invoke "tar" "xf" #+upstream-firefox-source)
-                (rename-file firefox-dir icecat-dir)
-
-                (with-directory-excursion icecat-dir
-                  (format #t "Populating l10n directory...~%")
-                  (force-output)
-                  (mkdir "l10n")
-                  (with-directory-excursion "l10n"
-                    (for-each
-                     (lambda (locale-dir)
-                       (let ((locale
-                              (string-drop (basename locale-dir)
-                                           (+ 32  ; length of hash
-                                              (string-length 
"-mozilla-locale-")))))
-                         (format #t "  ~a~%" locale)
-                         (force-output)
-                         (copy-recursively locale-dir locale
-                                           #:log (%make-void-port "w"))
-                         (for-each make-file-writable (find-files locale))
-                         (with-directory-excursion locale
-                           (when (file-exists? ".hgtags")
-                             (delete-file ".hgtags"))
-                           (mkdir-p "browser/chrome/browser/preferences")
-                           (call-with-output-file
-                               
"browser/chrome/browser/preferences/advanced-scripts.dtd"
-                             (lambda (port) #f)))))
-                     '#+all-mozilla-115-locales)
-                    (copy-recursively #+mozilla-115-compare-locales
-                                      "compare-locales"
-                                      #:log (%make-void-port "w"))
-                    (delete-file "compare-locales/.gitignore")
-                    (delete-file "compare-locales/.hgignore")
-                    (delete-file "compare-locales/.hgtags")))
-
-                (format #t "Running makeicecat script...~%")
-                (force-output)
-                (invoke "bash" "/tmp/gnuzilla/makeicecat")
-
-                (format #t "Packing IceCat source tarball...~%")
-                (force-output)
-                (setenv "XZ_DEFAULTS" (string-join (%xz-parallel-args)))
-                (invoke "tar" "cfa" #$output
-                        ;; Avoid non-determinism in the archive.  We set the
-                        ;; mtime of files in the archive to early 1980 because
-                        ;; the build process fails if the mtime of source
-                        ;; files is pre-1980, due to the creation of zip
-                        ;; archives.
-                        "--mtime=@315619200" ; 1980-01-02 UTC
-                        "--owner=root:0"
-                        "--group=root:0"
-                        "--sort=name"
-                        icecat-dir)))))))))
-
 (define mozilla-compare-locales
   (origin
     (method git-fetch)
     (uri (git-reference
           (url "https://github.com/mozilla/compare-locales";)
-          (commit "RELEASE_9_0_4")))
+          (commit "RELEASE_9_0_4")))    ;use the latest release
     (file-name "mozilla-compare-locales")
     (sha256 (base32 "13qn983j0pgs2550fgd5gvnl4lq6ywqjvgbyx850jwg79w8b0ifz"))))
 
@@ -703,25 +390,143 @@ variable defined below.  It requires guile-json to be 
installed."
   (origin
     (method git-fetch)
     (uri (git-reference
-          (url "https://github.com/mozilla-l10n/firefox-l10n";)
-          (commit "fcd0300e8478d1ec4d1c097a073ddb8e1e0351e3")))
+           (url "https://github.com/mozilla-l10n/firefox-l10n";)
+           ;; Use the revision specified in the
+           ;; browser/locales/l10n-changesets.json file of the used firefox
+           ;; source (all the languages normally use the same revision).
+          (commit "a0c1ffda4ed19c0399e4175610361179e09829de")))
     (file-name "mozilla-l10n")
-    (sha256 (base32 "1pzw65852ix6a6qb3wwhg5vrkz8337cs6lznk2vj0md5cvf2rrc4"))))
-
+    (sha256 (base32 "1gqphgj4qzhmc2aqj3r1hzwnshcjsrkyws3lbrcqn0yzwvzc8b73"))))
+
+(define (format-locales all-locales-file)
+  "Format a Scheme list of all the locales string found in ALL-LOCALES-FILE.
+In the case of Thunderbird, that file is comm/mail/locales/all-locales, while
+in the case of Firefox, it is browser/locales/all-locales."
+  (pretty-print (string-split
+                 (string-trim-right
+                  (call-with-input-file all-locales-file
+                    get-string-all))
+                 #\newline)))
+
+;;; To regenerate, use the above `format-locales' procedure.
 (define %icecat-locales
-  '("ach" "af" "an" "ar" "ast" "az" "be" "bg" "bn" "br" "bs" "ca" "cak"
-    "ca-valencia" "cs" "cy" "da" "de" "dsb" "el" "en-CA" "en-GB" "eo"
-    "es-AR" "es-CL" "es-ES" "es-MX" "et" "eu" "fa" "ff" "fi" "fr" "fur"
-    "fy-NL" "ga-IE" "gd" "gl" "gn" "gu-IN" "he" "hi-IN" "hr" "hsb" "hu"
-    "hy-AM" "ia" "id" "is" "it" "ja" "ja-JP-mac" "ka" "kab" "kk" "km"
-    "kn" "ko" "lij" "lt" "lv" "mk" "mr" "ms" "my" "nb-NO" "ne-NP" "nl"
-    "nn-NO" "oc" "pa-IN" "pl" "pt-BR" "pt-PT" "rm" "ro" "ru" "sat" "sc"
-    "sco" "si" "sk" "skr" "sl" "son" "sq" "sr" "sv-SE" "szl" "ta" "te"
-    "tg" "th" "tl" "tr" "trs" "uk" "ur" "uz" "vi" "xh" "zh-CN" "zh-TW"))
-
-(define %icecat-base-version "128.14.0")
+  '("ach"
+    "af"
+    "an"
+    "ar"
+    "ast"
+    "az"
+    "be"
+    "bg"
+    "bn"
+    "bo"
+    "br"
+    "brx"
+    "bs"
+    "ca"
+    "ca-valencia"
+    "cak"
+    "ckb"
+    "cs"
+    "cy"
+    "da"
+    "de"
+    "dsb"
+    "el"
+    "en-CA"
+    "en-GB"
+    "eo"
+    "es-AR"
+    "es-CL"
+    "es-ES"
+    "es-MX"
+    "et"
+    "eu"
+    "fa"
+    "ff"
+    "fi"
+    "fr"
+    "fur"
+    "fy-NL"
+    "ga-IE"
+    "gd"
+    "gl"
+    "gn"
+    "gu-IN"
+    "he"
+    "hi-IN"
+    "hr"
+    "hsb"
+    "hu"
+    "hy-AM"
+    "hye"
+    "ia"
+    "id"
+    "is"
+    "it"
+    "ja"
+    "ja-JP-mac"
+    "ka"
+    "kab"
+    "kk"
+    "km"
+    "kn"
+    "ko"
+    "lij"
+    "lo"
+    "lt"
+    "ltg"
+    "lv"
+    "meh"
+    "mk"
+    "ml"
+    "mr"
+    "ms"
+    "my"
+    "nb-NO"
+    "ne-NP"
+    "nl"
+    "nn-NO"
+    "oc"
+    "pa-IN"
+    "pl"
+    "pt-BR"
+    "pt-PT"
+    "rm"
+    "ro"
+    "ru"
+    "sat"
+    "sc"
+    "scn"
+    "sco"
+    "si"
+    "sk"
+    "skr"
+    "sl"
+    "son"
+    "sq"
+    "sr"
+    "sv-SE"
+    "szl"
+    "ta"
+    "te"
+    "tg"
+    "th"
+    "tl"
+    "tr"
+    "trs"
+    "uk"
+    "ur"
+    "uz"
+    "vi"
+    "wo"
+    "xh"
+    "zh-CN"
+    "zh-TW"))
+
+(define %icecat-base-version (package-version mozjs))
 (define %icecat-version (string-append %icecat-base-version "-gnu1"))
-(define %icecat-build-id "20250819000000") ;must be of the form YYYYMMDDhhmmss
+(define %icecat-build-id "20250826000000") ;must be of the form YYYYMMDDhhmmss
 
 ;; 'icecat-source' is a "computed" origin that generates an IceCat tarball
 ;; from the corresponding upstream Firefox ESR tarball, using the 'makeicecat'
@@ -732,16 +537,7 @@ variable defined below.  It requires guile-json to be 
installed."
          (sub-version   (third  (string-split %icecat-base-version #\.)))
 
          (upstream-firefox-version (string-append %icecat-base-version "esr"))
-         (upstream-firefox-source
-          (origin
-            (method url-fetch)
-            (uri (string-append
-                  "https://ftp.mozilla.org/pub/firefox/releases/";
-                  upstream-firefox-version "/source/"
-                  "firefox-" upstream-firefox-version ".source.tar.xz"))
-            (sha256
-             (base32
-              "0lwsn1y988naxs9031sbzsh9b0x7c6zmpf89y4pv477l55ifzfck"))))
+         (upstream-firefox-source (package-source mozjs))
 
          (gnuzilla-commit "ba161be3de71bb556be951ac4dbb81c807f68770")
          (gnuzilla-source
@@ -760,11 +556,14 @@ variable defined below.  It requires guile-json to be 
installed."
          ;; in 'assume-valid-file-name' to avoid 'local-file' warnings.
          (makeicecat-patch
           (local-file (assume-valid-file-name
-                       (search-patch "icecat-makeicecat.patch")))))
+                       (search-patch "icecat-makeicecat.patch"))))
+         (makeicecat-update-patch
+          (local-file (assume-valid-file-name
+                       (search-patch "icecat-makeicecat-update.patch")))))
 
     (origin
       (method computed-origin-method)
-      (file-name (string-append "icecat-" %icecat-version ".tar.xz"))
+      (file-name (string-append "icecat-" %icecat-version ".tar.zst"))
       (sha256 #f)
       (uri
        (delay
@@ -784,6 +583,7 @@ variable defined below.  It requires guile-json to be 
installed."
                        #+(canonical-package findutils)
                        #+(canonical-package patch)
                        #+(canonical-package xz)
+                       #+(canonical-package zstd)
                        #+(canonical-package sed)
                        #+(canonical-package grep)
                        #+(canonical-package bzip2)
@@ -811,6 +611,8 @@ variable defined below.  It requires guile-json to be 
installed."
                   (make-file-writable "makeicecat")
                   (invoke "patch" "--force" "--no-backup-if-mismatch"
                           "-p1" "--input" #+makeicecat-patch)
+                  (invoke "patch" "--force" "--no-backup-if-mismatch"
+                          "-p1" "--input" #+makeicecat-update-patch)
                   (patch-shebang "makeicecat")
                   (substitute* "makeicecat"
                     (("^readonly FFMAJOR=(.*)" all ffmajor)
@@ -844,27 +646,23 @@ variable defined below.  It requires guile-json to be 
installed."
                   (with-directory-excursion "l10n"
                     (for-each
                      (lambda (locale)
-                       (let ((locale-dir
-                              (string-append #+mozilla-l10n "/" locale)))
+                       (let ((locale-dir (string-append #+mozilla-l10n "/"
+                                                        locale)))
                          (format #t "  ~a~%" locale)
                          (force-output)
                          (copy-recursively locale-dir locale
                                            #:log (%make-void-port "w"))
                          (for-each make-file-writable (find-files locale))
                          (with-directory-excursion locale
-                           (when (file-exists? ".hgtags")
-                             (delete-file ".hgtags"))
                            (mkdir-p "browser/chrome/browser/preferences")
-                           (call-with-output-file
-                               
"browser/chrome/browser/preferences/advanced-scripts.dtd"
+                           (call-with-output-file "browser/chrome/browser/\
+preferences/advanced-scripts.dtd"
                              (lambda (port) #f)))))
                      '#+%icecat-locales)
                     (copy-recursively #+mozilla-compare-locales
                                       "compare-locales"
                                       #:log (%make-void-port "w"))
-                    (delete-file "compare-locales/.gitignore")
-                    (delete-file "compare-locales/.hgignore")
-                    (delete-file "compare-locales/.hgtags")))
+                    (delete-file "compare-locales/.gitignore")))
 
                 (format #t "Running makeicecat script...~%")
                 (force-output)
@@ -872,7 +670,7 @@ variable defined below.  It requires guile-json to be 
installed."
 
                 (format #t "Packing IceCat source tarball...~%")
                 (force-output)
-                (setenv "XZ_DEFAULTS" (string-join (%xz-parallel-args)))
+                (setenv "ZSTD_NBTHREADS" (number->string (parallel-job-count)))
                 (invoke "tar" "cfa" #$output
                         ;; Avoid non-determinism in the archive.  We set the
                         ;; mtime of files in the archive to early 1980 because
@@ -909,7 +707,7 @@ variable defined below.  It requires guile-json to be 
installed."
            libcanberra
            libgnome
            libjpeg-turbo
-           libpng-apng
+           libpng-apng-next
            ;; UNBUNDLE-ME! libogg
            ;; UNBUNDLE-ME! libtheora ; wants theora-1.2, not yet released
            ;; UNBUNDLE-ME! libvorbis
@@ -974,6 +772,7 @@ variable defined below.  It requires guile-json to be 
installed."
 
       #:configure-flags
       #~(list
+         "--disable-fhs"
          "--enable-application=browser"
          "--with-distribution-id=org.gnu"
          "--enable-geckodriver"
@@ -1011,8 +810,6 @@ variable defined below.  It requires guile-json to be 
installed."
                         (dirname (search-input-file %build-inputs
                                                     "lib/libclang.so")))
 
-         "--enable-official-branding"
-
          ;; TODO: Add support for wasm sandboxed libraries.
          "--without-wasm-sandboxed-libraries"
 
@@ -1058,7 +855,9 @@ variable defined below.  It requires guile-json to be 
installed."
                '(#$(local-file
                     (search-patch "icecat-compare-paths.patch"))
                  #$(local-file
-                    (search-patch "icecat-use-system-wide-dir.patch"))))))
+                    (search-patch "icecat-use-system-wide-dir.patch"))
+                 #$(local-file
+                    (search-patch "icecat-fhs-configure-option.patch"))))))
           (add-after 'apply-guix-specific-patches 'remove-bundled-libraries
             (lambda _
               ;; Remove bundled libraries that we don't use, since they may
@@ -1176,7 +975,9 @@ variable defined below.  It requires guile-json to be 
installed."
               ;; complain that it's not able to change Cargo.lock.
               ;; https://bugzilla.mozilla.org/show_bug.cgi?id=1726373
               (substitute* "build/RunCbindgen.py"
-                (("args.append\\(\"--frozen\"\\)") "pass"))))
+                (("args.append\\(\"--frozen\"\\)") "pass"))
+              (substitute* "config/makefiles/rust.mk"
+                (("cargo_build_flags \\+= --frozen") ""))))
           (delete 'bootstrap)
           (replace 'configure
             ;; configure does not work followed by both "SHELL=..." and
@@ -1255,7 +1056,28 @@ variable defined below.  It requires guile-json to be 
installed."
               ;; reason.  Use 'find-files' to avoid having to deal with the
               ;; system/architecture-specific file name.
               (install-file (first (find-files "." "geckodriver"))
-                            (string-append #$output "/bin"))))
+                            (string-append #$output "/bin"))
+              ;; Install a policies.json file as an extra step to ensure
+              ;; IceCat does not call home.  The available policies can be
+              ;; found at <https://mozilla.github.io/policy-templates/>.
+
+              ;; TODO: Disable remote settings feature when it becomes
+              ;; possible to do so (see:
+              ;; <https://bugzilla.mozilla.org/show_bug.cgi?id=1988070>).
+              (let ((policies.json (string-append
+                                    #$output
+                                    "/lib/icecat/distribution/policies.json")))
+                (mkdir-p (dirname policies.json))
+                (call-with-output-file policies.json
+                  (lambda (p)
+                    (format p "\
+{
+  \"policies\": {
+    \"DisableFirefoxAccounts\": true,
+    \"DisableTelemetry\": true,
+    \"DisablePocket\": true
+  }
+}~%"))))))
           (add-after 'install 'wrap-program
             (lambda* (#:key inputs #:allow-other-keys)
               (let* ((lib (string-append #$output "/lib"))
@@ -1287,20 +1109,24 @@ variable defined below.  It requires guile-json to be 
installed."
           (add-after 'wrap-program 'install-desktop-entry
             (lambda _
               ;; Install the '.desktop' file.
-              (let* ((desktop-file 
"taskcluster/docker/icecat-snap/icecat.desktop")
+              (let* ((desktop-file (string-append "toolkit/mozapps/installer"
+                                                  
"/linux/rpm/mozilla.desktop"))
                      (applications (string-append #$output 
"/share/applications")))
                 (substitute* desktop-file
-                  (("^Exec=icecat")     (string-append "Exec=" #$output 
"/bin/icecat"))
-                  (("IceCat")           "GNU IceCat")
-                  (("Icon=.*")          "Icon=icecat\n")
-                  (("NewWindow")        "new-window")
-                  (("NewPrivateWindow") "new-private-window")
-                  (("StartupNotify=true")
-                   "StartupNotify=true\nStartupWMClass=Icecat"))
-                (install-file desktop-file applications))))
+                  (("@MOZ_APP_NAME@")
+                   "icecat")
+                  (("^Exec=icecat")
+                   (string-append "Exec=" #$output "/bin/icecat"))
+                  (("@MOZ_APP_DISPLAYNAME@")
+                   "GNU IceCat")
+                  (("@MOZ_APP_REMOTINGNAME@")
+                   "Icecat"))
+                (mkdir-p applications)
+                (copy-file desktop-file
+                           (string-append applications "/icecat.desktop")))))
           (add-after 'install-desktop-entry 'install-icons
             (lambda _
-              (with-directory-excursion "browser/branding/official"
+              (with-directory-excursion "browser/branding/unofficial"
                 (for-each
                  (lambda (file)
                    (let* ((size (string-filter char-numeric? file))
@@ -1309,13 +1135,13 @@ variable defined below.  It requires guile-json to be 
installed."
                      (mkdir-p icons)
                      (copy-file file (string-append icons "/icecat.png"))))
                  '("default16.png" "default22.png" "default24.png"
-                   "default32.png" "default48.png" "content/icon64.png"
-                   "mozicon128.png" "default256.png"))))))))
+                   "default32.png" "default48.png" "default256.png"
+                   "content/icon64.png" "mozicon128.png" ))))))))
     (native-search-paths
      (list (search-path-specification
-            (variable "ICECAT_SYSTEM_DIR")
-            (separator #f)              ;single entry
-            (files '("lib/icecat")))))
+             (variable "MOZILLA_SYSTEM_DIR")
+             (separator #f)             ;single entry
+             (files '("lib/icecat")))))
     (home-page "https://www.gnu.org/software/gnuzilla/";)
     (synopsis "Entirely free browser derived from Mozilla Firefox")
     (description
@@ -1330,57 +1156,110 @@ testing.")
        (cpe-name . "firefox_esr")
        (cpe-version . ,(first (string-split version #\-)))))))
 
-(define %icedove-build-id "20241119000000") ;must be of the form YYYYMMDDhhmmss
-(define %icedove-version "115.16.3")
+(define %icedove-build-id "20250901000000") ;must be of the form YYYYMMDDhhmmss
+(define %icedove-version "140.2.0")
 
 ;; Provides the "comm" folder which is inserted into the icecat source.
-;; Avoids the duplication of Icecat's source tarball.
+;; Avoids the duplication of Icecat's source tarball.  Pick the changeset that
+;; matches the most recent tag of the form 'THUNDERBIRD_140_2_0esr_RELEASE'.
 (define thunderbird-comm-source
   (origin
     (method hg-fetch)
     (uri (hg-reference
-          (url "https://hg.mozilla.org/releases/comm-esr115";)
-          (changeset "8ab43355c97d91f5adaae732fb8c9f5ca210fe8b")))
+          (url "https://hg.mozilla.org/releases/comm-esr140";)
+          (changeset "8414dffeb4d53578bd90c11d4a2dd933bdc08b85")))
     (file-name (string-append "thunderbird-" %icedove-version "-checkout"))
     (sha256
      (base32
-      "1fax5sdc087ly62fh2g4yvi7v80vrhn94hpzdr98a4m3psdgglh0"))))
-
-(define (comm-source->locales+changeset source)
-  "Given SOURCE, a checkout of the Thunderbird 'comm' component, return the
-list of languages supported as well as the currently used changeset."
-  (match (update-mozilla-115-locales
-          (string-append source "/mail/locales/l10n-changesets.json"))
-    (((_ changeset locale) ...)
-     (values locale (first changeset)))))
+      "0w12dc5h9bp8sx8qcgy5krd2y74x35hh1jwg9i1gjm9fidh4x64r"))
+    (patches (search-patches "icedove-observer-fix.patch"))))
 
-;;; Generated with comm-source->locales+changeset.
+;;; To regenerate, see the `format-locales' helper defined above.
 (define %icedove-locales
-  '("af" "ar" "ast" "be" "bg" "br" "ca" "cak" "cs" "cy" "da" "de" "dsb" "el"
-    "en-CA" "en-GB" "es-AR" "es-ES" "es-MX" "et" "eu" "fi" "fr" "fy-NL" "ga-IE"
-    "gd" "gl" "he" "hr" "hsb" "hu" "hy-AM" "id" "is" "it" "ja" "ja-JP-mac" "ka"
-    "kab" "kk" "ko" "lt" "lv" "ms" "nb-NO" "nl" "nn-NO" "pa-IN" "pl" "pt-BR"
-    "pt-PT" "rm" "ro" "ru" "sk" "sl" "sq" "sr" "sv-SE" "th" "tr" "uk" "uz" "vi"
-    "zh-CN" "zh-TW"))
+  '("af"
+    "ar"
+    "ast"
+    "be"
+    "bg"
+    "br"
+    "ca"
+    "cak"
+    "cs"
+    "cy"
+    "da"
+    "de"
+    "dsb"
+    "el"
+    "en-CA"
+    "en-GB"
+    "es-AR"
+    "es-ES"
+    "es-MX"
+    "et"
+    "eu"
+    "fi"
+    "fr"
+    "fy-NL"
+    "ga-IE"
+    "gd"
+    "gl"
+    "he"
+    "hr"
+    "hsb"
+    "hu"
+    "hy-AM"
+    "id"
+    "is"
+    "it"
+    "ja"
+    "ja-JP-mac"
+    "ka"
+    "kab"
+    "kk"
+    "ko"
+    "lt"
+    "lv"
+    "mk"
+    "ms"
+    "nb-NO"
+    "nl"
+    "nn-NO"
+    "pa-IN"
+    "pl"
+    "pt-BR"
+    "pt-PT"
+    "rm"
+    "ro"
+    "ru"
+    "sk"
+    "sl"
+    "sq"
+    "sr"
+    "sv-SE"
+    "th"
+    "tr"
+    "uk"
+    "uz"
+    "vi"
+    "zh-CN"
+    "zh-TW"))
 
 (define thunderbird-comm-l10n
   (origin
     (method url-fetch)
     (uri (string-append
           "https://ftp.mozilla.org/pub/thunderbird/releases/";
-          %icedove-version
-          "/source/thunderbird-"
-          %icedove-version
-          ".strings_all.tar.zst"))
+          %icedove-version "esr/source/thunderbird-"
+          %icedove-version "esr.strings_all.tar.zst"))
     (sha256
      (base32
-      "1nnvnfhbb7174898i62a9sy1zxc5qw3nhmf9agy1p6jvldn5nb8z"))))
+      "0aaxpp165nvw3kqz9d7lgn0vsdxdn6mzz0s86llp72wmb06kp7ip"))))
 
 (define icedove-source
   (let ((name (string-append "icedove-" %icedove-version)))
     (origin
       (method computed-origin-method)
-      (file-name (string-append name ".tar.xz"))
+      (file-name (string-append name ".tar.zst"))
       (sha256 #f)
       (uri
        (delay
@@ -1392,13 +1271,12 @@ list of languages supported as well as the currently 
used changeset."
                (set-path-environment-variable
                 "PATH" '("bin")
                 (list #+(canonical-package tar)
-                      #+(canonical-package xz)
                       #+(canonical-package zstd)))
 
                ;; Extract the base Icecat tarball, renaming its top-level
                ;; directory.
                (invoke "tar" "--transform" (string-append "s,[^/]*," #$name 
",")
-                       "-xf" #$icecat-115-source)
+                       "-xf" #$icecat-source)
                (chdir #$name)
 
                ;; *Replace* the l10n directory with that of Thunderbird.
@@ -1407,17 +1285,16 @@ list of languages supported as well as the currently 
used changeset."
                (invoke "tar" "--extract" "--file" #$thunderbird-comm-l10n
                        "--strip-components=1" "--directory" "l10n/")
 
-               ;; Add the Thunderbird-specific "comm" directory..
+               ;; Add the Thunderbird-specific "comm" directory.
                (mkdir "comm")
                (copy-recursively #$thunderbird-comm-source "comm")
+               (for-each make-file-writable (find-files "comm"))
                (delete-file "sourcestamp.txt")
 
                ;; Adjust the application name.
-               (substitute* "comm/mail/confvars.sh"
-                 (("MOZ_APP_NAME=thunderbird")
-                  "MOZ_APP_NAME=icedove")
-                 (("MOZ_UPDATER=1")
-                  "MOZ_UPDATER=0"))
+               (substitute* "comm/mail/moz.configure"
+                 (("\"MOZ_APP_NAME\", \"thunderbird\"")
+                  "\"MOZ_APP_NAME\", \"icedove\""))
 
                ;; Remove branding to comply with Mozilla's trademark policy
                (with-directory-excursion "comm/mail/branding/nightly"
@@ -1445,7 +1322,7 @@ list of languages supported as well as the currently used 
changeset."
                  (substitute* '("overrides/app-license-name.html")
                    (("Thunderbird") "Icedove")))
                (with-directory-excursion "comm/mail/components/"
-                 (substitute* '("MailGlue.jsm"
+                 (substitute* '("MailGlue.sys.mjs"
                                 "extensions/schemas/addressBook.json"
                                 "extensions/schemas/tabs.json"
                                 "extensions/schemas/cloudFile.json"
@@ -1457,7 +1334,8 @@ list of languages supported as well as the currently used 
changeset."
                                 "enterprisepolicies/helpers/moz.build"
                                 "enterprisepolicies/schemas/moz.build")
                    (("Thunderbird") "Icedove")))
-               (substitute* 
'("comm/mailnews/base/prefs/content/accountUtils.js"
+               (substitute* '("devtools/startup/DevToolsStartup.sys.mjs"
+                              
"comm/mailnews/base/prefs/content/accountUtils.js"
                               "comm/mail/base/content/customizeToolbar.js"
                               "comm/suite/components/customizeToolbar.js")
                  (("AppConstants.MOZ_APP_NAME (.)= \"thunderbird" _ e)
@@ -1475,6 +1353,8 @@ list of languages supported as well as the currently used 
changeset."
                   (string-append m ", false);"))
                  (("(pref\\(\"lightweightThemes.update.enabled\").*" _ m)
                   (string-append m ", false);"))
+                 (("(pref\\(\"services.settings.server\").*" _ m)
+                  (string-append m ", \"\");"))
 
                  ;; XXX: The autoDisableScopes is tweaked by the makeicecat
                  ;; script, but it doesn't know about Thunderbird.  This is
@@ -1489,11 +1369,21 @@ list of languages supported as well as the currently 
used changeset."
                   (string-append anchor
                                  "pref(\"intl.locale.requested\", \"\");\n")))
 
+               ;; Fix more discrepancies caused by the fact that the
+               ;; makeicecat script didn't run on the Thunderbird sources.
+               (substitute* '("Cargo.lock"
+                              "comm/rust/Cargo.lock"
+                              "comm/rust/Cargo.toml"
+                              "gfx/qcms/Cargo.toml"
+                              "toolkit/library/rust/shared/Cargo.toml")
+                 (("IceCatGraphics") "FirefoxGraphics")
+                 (("firefox-on-glean") "icecat-on-glean"))
+
                ;; Step out of the directory and create the tarball.
                (chdir "..")
                (format #t "Packing Icedove source tarball...~%")
                (force-output)
-               (setenv "XZ_DEFAULTS" (string-join (%xz-parallel-args)))
+               (setenv "ZSTD_NBTHREADS" (number->string (parallel-job-count)))
                (invoke "tar" "cfa" #$output
                        "--mtime=@315619200" ;1980-01-02 UTC
                        "--owner=root:0"
@@ -1519,6 +1409,11 @@ list of languages supported as well as the currently 
used changeset."
                   ,@%default-gnu-modules)
       #:phases
       #~(modify-phases %standard-phases
+          (add-after 'unpack 'do-not-verify-vendored-rust-dependencies
+            (lambda _
+              (substitute* "comm/python/rocbuild/rocbuild/rust.py"
+                (("result = check_vendored_dependencies\\(topsrcdir)")
+                 "sys.exit(0)"))))
           (add-after 'patch-source-shebangs 'patch-cargo-checksums
             (lambda _
               (use-modules (guix build cargo-utils))
@@ -1531,15 +1426,35 @@ ca495991b7852b855"))
                                (string-append "checksum = \"" null-hash 
"\""))))
                           (find-files "." "Cargo.lock$"))
                 (for-each generate-all-checksums
-                          '("third_party/rust"
-                            "toolkit/library/rust")))))
+                          '("services"
+                            "js"
+                            "third_party/rust"
+                            "dom/media"
+                            "dom/webauthn"
+                            "toolkit"
+                            "gfx"
+                            "storage"
+                            "modules"
+                            "xpcom/rust"
+                            "media"
+                            "mozglue/static/rust"
+                            "netwerk"
+                            "remote"
+                            "intl"
+                            "servo"
+                            "security/manager/ssl"
+                            "build"
+                            ;; Thunderbird-specific.
+                            "comm")))))
           (add-after 'patch-cargo-checksums 'remove-cargo-frozen-flag
             (lambda _
               ;; Remove --frozen flag from cargo invocation, otherwise it'll
               ;; complain that it's not able to change Cargo.lock.
               ;; https://bugzilla.mozilla.org/show_bug.cgi?id=1726373
               (substitute* "build/RunCbindgen.py"
-                (("\"--frozen\",") ""))))
+                (("args.append\\(\"--frozen\"\\)") "pass"))
+              (substitute* "config/makefiles/rust.mk"
+                (("cargo_build_flags \\+= --frozen") ""))))
           ;; Fixes issue where each installation directory generates its own
           ;; profile (see:
           ;; https://trac.torproject.org/projects/tor/ticket/31457).
@@ -1589,8 +1504,6 @@ ca495991b7852b855"))
 
                 (setenv "MOZ_NOSPAM" "1")
                 (setenv "MACH_BUILD_PYTHON_NATIVE_PACKAGE_SOURCE" "system")
-                (setenv "PYTHON"
-                        (search-input-file inputs "/bin/python"))
                 (setenv "GUIX_PYTHONPATH"
                         (string-append (getcwd)
                                        
"/obj-x86_64-pc-linux-gnu/_virtualenvs/build"))
@@ -1624,6 +1537,7 @@ ca495991b7852b855"))
                       "ac_add_options --enable-optimize\n"
                       "ac_add_options --enable-pulseaudio\n"
                       "ac_add_options --enable-release\n"
+                      "ac_add_options --enable-rust-simd\n"
                       "ac_add_options --enable-strip\n"
                       "ac_add_options --enable-system-ffi\n"
                       "ac_add_options --enable-system-pixman\n"
@@ -1723,14 +1637,13 @@ ca495991b7852b855"))
            cairo
            cups
            dbus-glib
-           ;; Support for FFmpeg 6 was only added in version 112 (see:
-           ;; https://bugzilla.mozilla.org/show_bug.cgi?id=1819374).
+           eudev
+           ffmpeg
            freetype
            gdk-pixbuf
            glib
            gpgme
            gtk+
-           gtk+-2
            hunspell
            icu4c
            libcanberra
@@ -1740,31 +1653,29 @@ ca495991b7852b855"))
            libjpeg-turbo
            libnotify
            libpng-apng
+           libva
            libvpx
            libxcomposite
            libxft
            libxinerama
            libxscrnsaver
            libxt
-           libva
            mesa
            mit-krb5
            nspr
-           nss
+           nss-rapid
            pango
            pciutils
            pixman
            pulseaudio
            sqlite
            startup-notification
-           eudev
            unzip
            zip
            zlib))
     (native-inputs
-     (list `(,rust "cargo")
-           clang-15
-           llvm-15
+     (list clang-20
+           llvm-20
            m4
            nasm
            node-lts
@@ -1772,7 +1683,8 @@ ca495991b7852b855"))
            pkg-config
            python-wrapper
            rust
-           rust-cbindgen-0.24
+           `(,rust "cargo")
+           rust-cbindgen
            which
            yasm))
     (home-page "https://www.thunderbird.net";)
@@ -1833,9 +1745,6 @@ their corresponding VERSION, SOURCE and LOCALES 
variables."
                         (string-append (getcwd) "/mach_state"))
                 (setenv "MOZCONFIG" (string-append (getcwd) "/.mozconfig"))
                 (setenv "MACH_BUILD_PYTHON_NATIVE_PACKAGE_SOURCE" "system")
-                (setenv "GUIX_PYTHONPATH"
-                        (string-append (getcwd)
-                                       
"/obj/_virtualenvs/build/lib/python3.11/site-packages"))
                 (setenv "BUILD_BACKENDS" "FasterMake,RecursiveMake")))
             (replace 'build             ;build and install data files
               (lambda* (#:key outputs #:allow-other-keys)
@@ -1845,6 +1754,13 @@ their corresponding VERSION, SOURCE and LOCALES 
variables."
                       (error "could not find file in dir" name dir))
                     (car files)))
 
+                ;; Register "tb_common" as a valid site, to please the mach
+                ;; virtualenv machinery (see:
+                ;; <https://bugzilla.mozilla.org/show_bug.cgi?id=1986420>).
+                (substitute* "python/mach/mach/site.py"
+                  (("\"mach\", \"build\", \"common\"" all)
+                   (string-append all ", \"tb_common\"")))
+
                 (for-each
                  (lambda (l)
                    (let* ((out (assoc-ref outputs l))
@@ -1868,10 +1784,9 @@ their corresponding VERSION, SOURCE and LOCALES 
variables."
                                               'thunderbird
                                               '#$project))))
                      (format #t "processing locale `~a'...~%" l)
-                     ;; XXX: For some reasons, on version 115, there are some
-                     ;; parsing errors that cause the build system to
-                     ;; return an unclean exit code; use system* to ignore
-                     ;; errors.
+                     ;; TODO: Revert to use 'invoke' here, after
+                     ;; <https://bugzilla.mozilla.org/show_bug.cgi?id=1988069>
+                     ;; is fixed.
                      (system* "./mach" "build" (string-append "langpack-" l))
                      (mkdir-p ext-dir)
                      (let ((xpi (find-file "obj" (string-append
@@ -1886,7 +1801,10 @@ their corresponding VERSION, SOURCE and LOCALES 
variables."
       (native-inputs
        (list m4
              perl
-             python-wrapper
+             python
+             python-aiohttp
+             python-async-timeout
+             python-dateutil
              node-lts
              unzip))
       (home-page "https://www.mozilla.org/";)
diff --git a/gnu/packages/image.scm b/gnu/packages/image.scm
index 1b3327d74b..fac99ed9da 100644
--- a/gnu/packages/image.scm
+++ b/gnu/packages/image.scm
@@ -332,36 +332,35 @@ APNG patch provides APNG support to libpng.")
 
 ;; Temporary, until 76798 merges into core-packages-team, and that merges into
 ;; master.
-(define-public libpng-apng-for-librewolf
-  (hidden-package
-   (package
-     (inherit libpng-apng)
-     (version "1.6.46")
-     (source
-      (origin
-        (method url-fetch)
-        (uri (list (string-append "mirror://sourceforge/libpng/libpng16/"
-                                  version "/libpng-" version ".tar.xz")
-                   (string-append
-                    "ftp://ftp.simplesystems.org/pub/libpng/png/src";
-                    "/libpng16/libpng-" version ".tar.xz")
-                   (string-append
-                    "ftp://ftp.simplesystems.org/pub/libpng/png/src/history";
-                    "/libpng16/libpng-" version ".tar.xz")))
-        (sha256
-         (base32
-          "1cbwf20zlm4gcv8rpjivkngrjgl5366w21lr9qmbk2lr0dq8papk"))))
-     (inputs
-      (modify-inputs (package-inputs libpng-apng)
-        (replace "apng"
-          (origin
-            (method url-fetch)
-            (uri
-             (string-append "mirror://sourceforge/libpng-apng/libpng16/"
-                            version "/libpng-" version "-apng.patch.gz"))
-            (sha256
-             (base32
-              "00ykl1bzb79xsjwrq7dl0yz9dz5g3zwj0lry5zam3vs6s3gw5gi9")))))))))
+(define-public libpng-apng-next
+  (package
+    (inherit libpng-apng)
+    (version "1.6.46")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (list (string-append "mirror://sourceforge/libpng/libpng16/"
+                                 version "/libpng-" version ".tar.xz")
+                  (string-append
+                   "ftp://ftp.simplesystems.org/pub/libpng/png/src";
+                   "/libpng16/libpng-" version ".tar.xz")
+                  (string-append
+                   "ftp://ftp.simplesystems.org/pub/libpng/png/src/history";
+                   "/libpng16/libpng-" version ".tar.xz")))
+       (sha256
+        (base32
+         "1cbwf20zlm4gcv8rpjivkngrjgl5366w21lr9qmbk2lr0dq8papk"))))
+    (inputs
+     (modify-inputs (package-inputs libpng-apng)
+       (replace "apng"
+         (origin
+           (method url-fetch)
+           (uri
+            (string-append "mirror://sourceforge/libpng-apng/libpng16/"
+                           version "/libpng-" version "-apng.patch.gz"))
+           (sha256
+            (base32
+             "00ykl1bzb79xsjwrq7dl0yz9dz5g3zwj0lry5zam3vs6s3gw5gi9"))))))))
 
 (define-public pngcrush
   (package
diff --git a/gnu/packages/librewolf.scm b/gnu/packages/librewolf.scm
index 346249f504..4531b0b9ad 100644
--- a/gnu/packages/librewolf.scm
+++ b/gnu/packages/librewolf.scm
@@ -641,7 +641,7 @@
                   libjpeg-turbo
                   libnotify
                   libpciaccess
-                  libpng-apng-for-librewolf
+                  libpng-apng-next
                   libva
                   libvpx
                   libwebp
diff --git a/gnu/packages/patches/icecat-compare-paths.patch 
b/gnu/packages/patches/icecat-compare-paths.patch
index 87a49d58fa..6c3f503f35 100644
--- a/gnu/packages/patches/icecat-compare-paths.patch
+++ b/gnu/packages/patches/icecat-compare-paths.patch
@@ -2,20 +2,11 @@ See comment in gnu/build/icecat-extension.scm.
 
 --- a/toolkit/mozapps/extensions/internal/XPIDatabase.sys.mjs
 +++ b/toolkit/mozapps/extensions/internal/XPIDatabase.sys.mjs
-@@ -3613,6 +3613,7 @@ const XPIDatabaseReconcile = {
+@@ -3753,6 +3753,7 @@
      if (
        newAddon ||
        oldAddon.updateDate != xpiState.mtime ||
 +      oldAddon.path != xpiState.path ||
-       (aUpdateCompatibility && this.isAppBundledLocation(installLocation))
-     ) {
-       newAddon = this.updateMetadata(
-@@ -3621,8 +3622,6 @@ const XPIDatabaseReconcile = {
-         xpiState,
-         newAddon
-       );
--    } else if (oldAddon.path != xpiState.path) {
--      newAddon = this.updatePath(installLocation, oldAddon, xpiState);
-     } else if (aUpdateCompatibility || aSchemaChange) {
-       newAddon = this.updateCompatibility(
-         installLocation,
+       (aUpdateCompatibility && this.isAppBundledLocation(installLocation)) ||
+       // update addon metadata if the addon in bundled into
+       // the omni jar and version or the resource URI pointing
diff --git a/gnu/packages/patches/icecat-fhs-configure-option.patch 
b/gnu/packages/patches/icecat-fhs-configure-option.patch
new file mode 100644
index 0000000000..6c1e4b8b83
--- /dev/null
+++ b/gnu/packages/patches/icecat-fhs-configure-option.patch
@@ -0,0 +1,38 @@
+Upstream-status: https://phabricator.services.mozilla.com/D263231
+
+diff --git a/build/moz.configure/init.configure 
b/build/moz.configure/init.configure
+index 6162d68699dd..193272588caa 100644
+--- a/build/moz.configure/init.configure
++++ b/build/moz.configure/init.configure
+@@ -1351,3 +1351,17 @@ option(
+     help="Object code libraries in DIR",
+ )
+ set_config("libdir", depends("--libdir")(lambda ldir: ldir[0]))
++
++# Support for using platform-specific standard (FHS-like) locations.
++option(
++    "--enable-fhs",
++    default=True,
++    help="Enable the search of standard platform-specific (FHS-like) 
locations",
++)
++
++@depends("--enable-fhs")
++def use_fhs(value):
++    return bool(value)
++
++set_config("USE_FHS", use_fhs)
++set_define("USE_FHS", use_fhs)
+diff --git a/toolkit/xre/nsXREDirProvider.cpp 
b/toolkit/xre/nsXREDirProvider.cpp
+index 547cc4c255c4..79133c879be4 100644
+--- a/toolkit/xre/nsXREDirProvider.cpp
++++ b/toolkit/xre/nsXREDirProvider.cpp
+@@ -295,6 +295,9 @@ static nsresult GetSystemParentDirectory(nsIFile** aFile) {
+     localDir.forget(aFile);
+     return rv;
+   }
++#  ifndef USE_FHS
++  return rv;
++#  endif
+ 
+   // ... falling back to the conventional fixed location otherwise.
+ #  if defined(XP_MACOSX)
diff --git a/gnu/packages/patches/icecat-makeicecat-update.patch 
b/gnu/packages/patches/icecat-makeicecat-update.patch
new file mode 100644
index 0000000000..2ce3f217dd
--- /dev/null
+++ b/gnu/packages/patches/icecat-makeicecat-update.patch
@@ -0,0 +1,1070 @@
+Upstream-status: https://debbugs.gnu.org/cgi/bugreport.cgi?bug=79355
+
+diff --git a/data/branding/icecat/configure.sh 
b/data/branding/icecat/configure.sh
+index 7481c2c..edcf9a8 100644
+--- a/data/branding/icecat/configure.sh
++++ b/data/branding/icecat/configure.sh
+@@ -2,4 +2,4 @@
+ # License, v. 2.0. If a copy of the MPL was not distributed with this
+ # file, You can obtain one at http://mozilla.org/MPL/2.0/.
+ 
+-MOZ_APP_DISPLAYNAME=IceCat
++MOZ_APP_DISPLAYNAME=GNU IceCat
+diff --git a/data/extensions/jsr@javascriptrestrictor/update.js 
b/data/extensions/jsr@javascriptrestrictor/update.js
+index 83ccbb8..df19c28 100644
+--- a/data/extensions/jsr@javascriptrestrictor/update.js
++++ b/data/extensions/jsr@javascriptrestrictor/update.js
+@@ -21,10 +21,6 @@
+ //  along with this program.  If not, see <https://www.gnu.org/licenses/>.
+ //
+ 
+-let defaultNbsWhitelistDomain = "duckduckgo.com";
+-let defaultNbsWhitelist = {};
+-defaultNbsWhitelist[defaultNbsWhitelistDomain] = true;
+-
+ async function installUpdate() {
+       /**
+        * 0.3+ storage
+@@ -367,7 +363,7 @@ async function installUpdate() {
+                               };
+                       }
+                       item.fpDetectionOn = true;
+-                      item.nbsWhitelist = item.whitelistedHosts ? 
item.whitelistedHosts : defaultNbsWhitelist;
++                      item.nbsWhitelist = item.whitelistedHosts ? 
item.whitelistedHosts : {};
+                       delete item.whitelistedHosts;
+                       item.nbsSettings = {
+                               notifications: 1
+@@ -482,7 +478,6 @@ async function installUpdate() {
+                                       l.wasm = 1;
+                               }
+                       }
+-                      item.nbsWhitelist[defaultNbsWhitelistDomain] = true;
+                       item.version = 7;
+               }
+ 
+@@ -529,7 +524,7 @@ async function checkAndSaveConfig(conf, check_default = 
true) {
+               conf.__default__ = "2";
+       }
+       checkExistAndType("domains", "object", {});
+-      checkExistAndType("nbsWhitelist", "object", defaultNbsWhitelist);
++      checkExistAndType("nbsWhitelist", "object", {});
+       checkExistAndType("nbsSettings", "object", {});
+       checkSettingRange("nbsSettings", "blocking", [0,1], 1);
+       checkSettingRange("nbsSettings", "notifications", [0,1], 1);
+diff --git 
a/data/extensions/{b7f9d2cd-d772-4302-8c3f-eb941af36f76}/assets/javascripts/helpers/reddit.js
 
b/data/extensions/{b7f9d2cd-d772-4302-8c3f-eb941af36f76}/assets/javascripts/helpers/reddit.js
+index e37972b..9e7846c 100644
+--- 
a/data/extensions/{b7f9d2cd-d772-4302-8c3f-eb941af36f76}/assets/javascripts/helpers/reddit.js
++++ 
b/data/extensions/{b7f9d2cd-d772-4302-8c3f-eb941af36f76}/assets/javascripts/helpers/reddit.js
+@@ -8,20 +8,22 @@ const targets = [
+ ];
+ const redirects = [
+   // libreddit: privacy w/ modern UI
+-  "https://safereddit.com";,
+-  "https://reddit.rtrace.io";,
+-  "https://libreddit.privacydev.net";,
+-  "https://l.opnxng.com";,
+-  "https://libreddit.projectsegfau.lt";,
+-  "https://discuss.whatever.social";,
+-  "https://snoo.habedieeh.re";,
+-  "https://redlib.pussthecat.org";,
+-  "https://redlib.northboot.xyz";,
+-  "https://redlib.kylrth.com";,
+-  "https://red.artemislena.eu";,
++  "https://libredd.it";,
++  "https://libreddit.spike.codes";,
++  "https://libreddit.kavin.rocks";,
++  "https://libreddit.insanity.wtf";,
++  "https://libreddit.dothq.co";,
++  "https://libreddit.silkky.cloud";,
++  "https://libreddit.himiko.cloud";,
++  "https://reddit.artemislena.eu";,
++  "https://reddit.git-bruh.duckdns.org";,
++  // teddit: privacy w/ old UI
++  "https://teddit.net";,
++  "https://teddit.ggc-project.de";,
++  "https://teddit.kavin.rocks";,
+   "https://old.reddit.com";, // desktop
+-  "http://red.lpoaj7z2zkajuhgnlltpeqh3zyq7wk2iyeggqaduhgxhyajtdt2j7wad.onion";,
+-  
"http://snoo.habeehrhadazsw3izbrbilqajalfyqqln54mrja3iwpqxgcuxnus7eid.onion";,
++  "https://i.reddit.com";, // mobile
++  "https://snew.notabug.io";, // anti-censorship
+ ];
+ const bypassPaths = /\/(gallery\/poll\/rpan\/settings\/topics)/;
+ 
+diff --git 
a/data/extensions/{b7f9d2cd-d772-4302-8c3f-eb941af36f76}/assets/javascripts/helpers/twitter.js
 
b/data/extensions/{b7f9d2cd-d772-4302-8c3f-eb941af36f76}/assets/javascripts/helpers/twitter.js
+index f57fb68..f520d76 100644
+--- 
a/data/extensions/{b7f9d2cd-d772-4302-8c3f-eb941af36f76}/assets/javascripts/helpers/twitter.js
++++ 
b/data/extensions/{b7f9d2cd-d772-4302-8c3f-eb941af36f76}/assets/javascripts/helpers/twitter.js
+@@ -4,8 +4,6 @@
+     when updating this list:
+   */
+ const targets = [
+-  "x.com",
+-  "mobile.x.com",
+   "twitter.com",
+   "www.twitter.com",
+   "mobile.twitter.com",
+@@ -18,10 +16,26 @@ const targets = [
+     (const nitterInstances) when updating this list:
+   */
+ const redirects = [
+-  "https://nitter.privacydev.net";,
+-  "https://xcancel.com";,
+-  
"http://nitter.pjsfkvpxlinjamtawaksbnnaqs2fc2mtvmozrzckxh7f3kis6yea25ad.onion";,
+-  
"http://nitter.g4c3eya4clenolymqbpgwz3q3tawoxw56yhzk4vugqrl6dtu3ejvhjid.onion";,
++  "https://nitter.net";,
++  "https://nitter.snopyta.org";,
++  "https://nitter.42l.fr";,
++  "https://nitter.nixnet.services";,
++  "https://nitter.pussthecat.org";,
++  "https://nitter.dark.fail";,
++  "https://nitter.tedomum.net";,
++  "https://nitter.cattube.org";,
++  "https://nitter.fdn.fr";,
++  "https://nitter.1d4.us";,
++  "https://nitter.kavin.rocks";,
++  "https://tweet.lambda.dance";,
++  "https://nitter.cc";,
++  "https://nitter.vxempire.xyz";,
++  "https://nitter.unixfox.eu";,
++  "https://bird.trom.tf";,
++  "http://3nzoldnxplag42gqjs23xvghtzf6t6yzssrtytnntc6ppc7xxuoneoad.onion";,
++  
"http://nitter.l4qlywnpwqsluw65ts7md3khrivpirse744un3x7mlskqauz5pyuzgqd.onion";,
++  "http://nitterlgj3n5fgwesu3vxc5h67ruku33nqaoeoocae2mvlzhsu6k7fqd.onion";,
++  "http://npf37k3mtzwxreiw52ccs5ay4e6qt2fkcs2ndieurdyn2cuzzsfyfvid.onion";,
+ ];
+ 
+ export default {
+diff --git 
a/data/extensions/{b7f9d2cd-d772-4302-8c3f-eb941af36f76}/assets/javascripts/helpers/youtube.js
 
b/data/extensions/{b7f9d2cd-d772-4302-8c3f-eb941af36f76}/assets/javascripts/helpers/youtube.js
+index 53aa099..df6dda4 100644
+--- 
a/data/extensions/{b7f9d2cd-d772-4302-8c3f-eb941af36f76}/assets/javascripts/helpers/youtube.js
++++ 
b/data/extensions/{b7f9d2cd-d772-4302-8c3f-eb941af36f76}/assets/javascripts/helpers/youtube.js
+@@ -8,7 +8,6 @@ const targets = [
+   "youtu.be",
+   "s.ytimg.com",
+   "music.youtube.com",
+-  "piped.video",
+ ];
+ /*
+     Please remember to also update the manifest.json file
+@@ -16,8 +15,29 @@ const targets = [
+     when updating this list:
+   */
+ const redirects = [
+-  "https://inv.nadeko.net";,
+-  "http://inv.nadekonw7plitnjuawu6ytjsl7jlglk2t6pyq6eftptmiv3dvqndwvyd.onion";,
++  "https://invidious.snopyta.org";,
++  "https://invidious.xyz";,
++  "https://invidious.kavin.rocks";,
++  "https://tube.connect.cafe";,
++  "https://invidious.zapashcanon.fr";,
++  "https://invidiou.site";,
++  "https://vid.mint.lgbt";,
++  "https://invidious.site";,
++  "https://yewtu.be";,
++  "https://invidious.tube";,
++  "https://invidious.silkky.cloud";,
++  "https://invidious.himiko.cloud";,
++  "https://inv.skyn3t.in";,
++  "https://tube.incognet.io";,
++  "https://invidious.tinfoil-hat.net";,
++  "https://invidious.namazso.eu";,
++  "https://vid.puffyan.us";,
++  "https://dev.viewtube.io";,
++  "https://invidious.048596.xyz";,
++  "http://fz253lmuao3strwbfbmx46yu7acac2jz27iwtorgmbqlkurlclmancad.onion";,
++  "http://qklhadlycap4cnod.onion";,
++  "http://c7hqkpkpemu6e7emz5b4vyz7idjgdvgaaa3dyimmeojqbgpea3xqjoid.onion";,
++  "http://w6ijuptxiku4xpnnaetxvnkc5vqcdu7mgns2u77qefoixi63vbvnpnqd.onion";,
+ ];
+ 
+ export default {
+diff --git 
a/data/extensions/{b7f9d2cd-d772-4302-8c3f-eb941af36f76}/assets/javascripts/remove-twitter-sw.js
 
b/data/extensions/{b7f9d2cd-d772-4302-8c3f-eb941af36f76}/assets/javascripts/remove-twitter-sw.js
+index f8d9e76..d431f1a 100644
+--- 
a/data/extensions/{b7f9d2cd-d772-4302-8c3f-eb941af36f76}/assets/javascripts/remove-twitter-sw.js
++++ 
b/data/extensions/{b7f9d2cd-d772-4302-8c3f-eb941af36f76}/assets/javascripts/remove-twitter-sw.js
+@@ -1,8 +1,22 @@
+ "use strict";
+ 
+ const nitterInstances = [
+-  "https://nitter.privacydev.net";,
+-  "https://nitter.lucabased.xyz";
++  "https://nitter.net";,
++  "https://nitter.snopyta.org";,
++  "https://nitter.42l.fr";,
++  "https://nitter.nixnet.services";,
++  "https://nitter.pussthecat.org";,
++  "https://nitter.dark.fail";,
++  "https://nitter.tedomum.net";,
++  "https://nitter.cattube.org";,
++  "https://nitter.fdn.fr";,
++  "https://nitter.1d4.us";,
++  "https://nitter.kavin.rocks";,
++  "https://tweet.lambda.dance";,
++  "https://nitter.cc";,
++  "https://nitter.vxempire.xyz";,
++  "https://nitter.unixfox.eu";,
++  "https://bird.trom.tf";
+ ];
+ 
+ let disableNitter;
+diff --git 
a/data/extensions/{b7f9d2cd-d772-4302-8c3f-eb941af36f76}/manifest.json 
b/data/extensions/{b7f9d2cd-d772-4302-8c3f-eb941af36f76}/manifest.json
+index d3bcec2..856e0dc 100644
+--- a/data/extensions/{b7f9d2cd-d772-4302-8c3f-eb941af36f76}/manifest.json
++++ b/data/extensions/{b7f9d2cd-d772-4302-8c3f-eb941af36f76}/manifest.json
+@@ -33,8 +33,6 @@
+   "content_scripts": [
+     {
+       "matches": [
+-        "*://x.com/*",
+-        "*://mobile.x.com/*",
+         "*://twitter.com/*",
+         "*://www.twitter.com/*",
+         "*://mobile.twitter.com/*",
+@@ -48,8 +46,29 @@
+     },
+     {
+       "matches": [
+-        "*://inv.nadeko.net/*",
+-        
"*://inv.nadekonw7plitnjuawu6ytjsl7jlglk2t6pyq6eftptmiv3dvqndwvyd.onion/*"
++        "*://invidious.snopyta.org/*",
++        "*://invidious.xyz/*",
++        "*://invidious.kavin.rocks/*",
++        "*://tube.connect.cafe/*",
++        "*://invidious.zapashcanon.fr/*",
++        "*://invidiou.site/*",
++        "*://vid.mint.lgbt/*",
++        "*://invidious.site/*",
++        "*://yewtu.be/*",
++        "*://invidious.tube/*",
++        "*://invidious.silkky.cloud/*",
++        "*://invidious.himiko.cloud/*",
++        "*://inv.skyn3t.in/*",
++        "*://tube.incognet.io/*",
++        "*://invidious.tinfoil-hat.net/*",
++        "*://invidious.namazso.eu/*",
++        "*://vid.puffyan.us/*",
++        "*://dev.viewtube.io/*",
++        "*://invidious.048596.xyz/*",
++        
"*://fz253lmuao3strwbfbmx46yu7acac2jz27iwtorgmbqlkurlclmancad.onion/*",
++        "*://qklhadlycap4cnod.onion/*",
++        
"*://c7hqkpkpemu6e7emz5b4vyz7idjgdvgaaa3dyimmeojqbgpea3xqjoid.onion/*",
++        "*://w6ijuptxiku4xpnnaetxvnkc5vqcdu7mgns2u77qefoixi63vbvnpnqd.onion/*"
+       ],
+       "js": [
+         "assets/javascripts/persist-invidious-prefs.js"
+@@ -70,4 +89,4 @@
+       "strict_min_version": "67.0"
+     }
+   }
+-}
++}
+\ No newline at end of file
+diff --git 
a/data/extensions/{b7f9d2cd-d772-4302-8c3f-eb941af36f76}/pages/background/background.js
 
b/data/extensions/{b7f9d2cd-d772-4302-8c3f-eb941af36f76}/pages/background/background.js
+index c08d7b4..9b8c3a1 100644
+--- 
a/data/extensions/{b7f9d2cd-d772-4302-8c3f-eb941af36f76}/pages/background/background.js
++++ 
b/data/extensions/{b7f9d2cd-d772-4302-8c3f-eb941af36f76}/pages/background/background.js
+@@ -595,17 +595,10 @@ browser.webRequest.onBeforeRequest.addListener(
+       redirect = {
+         redirectUrl: redirectTwitter(url, initiator),
+       };
+-//
+-// Bibliogram has been discontinued.
+-// See <https://cadence.moe/blog/2022-09-01-discontinuing-bibliogram>
+-// We'll keep this code in case the project is resurrected, but for
+-// now we disable Bibliogram redirects and hide the associated UI.
+-//
+-//  } else if (instagramDomains.includes(url.host)) {
+-//    redirect = {
+-//      redirectUrl: redirectInstagram(url, initiator, details.type),
+-//    };
+-//
++    } else if (instagramDomains.includes(url.host)) {
++      redirect = {
++        redirectUrl: redirectInstagram(url, initiator, details.type),
++      };
+     } else if (url.href.match(googleMapsRegex)) {
+       redirect = {
+         redirectUrl: redirectGoogleMaps(url, initiator),
+diff --git 
a/data/extensions/{b7f9d2cd-d772-4302-8c3f-eb941af36f76}/pages/options/options.html
 
b/data/extensions/{b7f9d2cd-d772-4302-8c3f-eb941af36f76}/pages/options/options.html
+index c5d0096..65f1e9a 100644
+--- 
a/data/extensions/{b7f9d2cd-d772-4302-8c3f-eb941af36f76}/pages/options/options.html
++++ 
b/data/extensions/{b7f9d2cd-d772-4302-8c3f-eb941af36f76}/pages/options/options.html
+@@ -76,7 +76,7 @@
+           </tbody>
+         </table>
+       </section>
+-<!--  <section class="settings-block">
++      <section class="settings-block">
+         <table class="option" aria-label="Toggle Bibliogram redirects">
+           <tbody>
+             <tr>
+@@ -97,7 +97,7 @@
+             </tr>
+           </tbody>
+         </table>
+-      </section>  -->
++      </section>
+       <section class="settings-block">
+         <table class="option" aria-label="Toggle OpenStreetMap redirects">
+           <tbody>
+@@ -225,7 +225,7 @@
+           />
+         </div>
+       </section>
+-<!--  <section class="settings-block">
++      <section class="settings-block">
+         <h1 data-localise="__MSG_bibliogramInstance__">Bibliogram 
Instance</h1>
+         <div class="autocomplete">
+           <input
+@@ -235,7 +235,7 @@
+             placeholder="Random instance (none selected)"
+           />
+         </div>
+-      </section>  -->
++      </section>
+       <section class="settings-block">
+         <h1 data-localise="__MSG_osmInstance__">OpenStreetMap Instance</h1>
+         <div class="autocomplete">
+@@ -252,7 +252,7 @@
+           <input
+             id="reddit-instance"
+             type="url"
+-            placeholder="https://libreddit.de";
++            placeholder="https://libredd.it";
+           />
+         </div>
+       </section>
+@@ -543,7 +543,7 @@
+         </section>
+         <hr>
+       </div>
+-<!--  <button type="button" class="collapsible">
++      <button type="button" class="collapsible">
+         Bibliogram
+       </button>
+       <div class="collapsible-content">
+@@ -558,7 +558,7 @@
+           />
+         </section>
+         <hr>
+-      </div>  -->
++      </div>
+     </div>
+ 
+     <div id="exceptions" class="tabcontent">
+diff --git 
a/data/extensions/{b7f9d2cd-d772-4302-8c3f-eb941af36f76}/pages/options/options.js
 
b/data/extensions/{b7f9d2cd-d772-4302-8c3f-eb941af36f76}/pages/options/options.js
+index 8309aab..91e7ac0 100644
+--- 
a/data/extensions/{b7f9d2cd-d772-4302-8c3f-eb941af36f76}/pages/options/options.js
++++ 
b/data/extensions/{b7f9d2cd-d772-4302-8c3f-eb941af36f76}/pages/options/options.js
+@@ -21,7 +21,7 @@ const wikipediaInstances = wikipediaHelper.redirects;
+ const autocompletes = [
+   { id: "nitter-instance", instances: nitterInstances },
+   { id: "invidious-instance", instances: invidiousInstances },
+-//  { id: "bibliogram-instance", instances: bibliogramInstances },
++  { id: "bibliogram-instance", instances: bibliogramInstances },
+   { id: "osm-instance", instances: osmInstances },
+   { id: "reddit-instance", instances: redditInstances },
+   {
+@@ -35,7 +35,7 @@ const domparser = new DOMParser();
+ 
+ let nitterInstance = document.getElementById("nitter-instance");
+ let invidiousInstance = document.getElementById("invidious-instance");
+-// let bibliogramInstance = document.getElementById("bibliogram-instance");
++let bibliogramInstance = document.getElementById("bibliogram-instance");
+ let osmInstance = document.getElementById("osm-instance");
+ let redditInstance = document.getElementById("reddit-instance");
+ let searchEngineInstance = document.getElementById("search-engine-instance");
+@@ -45,7 +45,7 @@ let simplyTranslateInstance = document.getElementById(
+ let wikipediaInstance = document.getElementById("wikipedia-instance");
+ let disableNitter = document.getElementById("disable-nitter");
+ let disableInvidious = document.getElementById("disable-invidious");
+-// let disableBibliogram = document.getElementById("disable-bibliogram");
++let disableBibliogram = document.getElementById("disable-bibliogram");
+ let disableOsm = document.getElementById("disable-osm");
+ let disableReddit = document.getElementById("disable-reddit");
+ let disableSearchEngine = document.getElementById("disable-search-engine");
+@@ -67,7 +67,7 @@ let theme = document.getElementById("theme");
+ let useFreeTube = document.getElementById("use-freetube");
+ let nitterRandomPool = document.getElementById("nitter-random-pool");
+ let invidiousRandomPool = document.getElementById("invidious-random-pool");
+-// let bibliogramRandomPool = 
document.getElementById("bibliogram-random-pool");
++let bibliogramRandomPool = document.getElementById("bibliogram-random-pool");
+ let exceptions;
+ 
+ window.browser = window.browser || window.chrome;
+@@ -136,7 +136,7 @@ browser.storage.sync.get(
+     if (result.theme) document.body.classList.add(result.theme);
+     nitterInstance.value = result.nitterInstance || "";
+     invidiousInstance.value = result.invidiousInstance || "";
+-//    bibliogramInstance.value = result.bibliogramInstance || "";
++    bibliogramInstance.value = result.bibliogramInstance || "";
+     osmInstance.value = result.osmInstance || "";
+     redditInstance.value = result.redditInstance || "";
+     searchEngineInstance.value =
+@@ -145,7 +145,7 @@ browser.storage.sync.get(
+     wikipediaInstance.value = result.wikipediaInstance || "";
+     disableNitter.checked = !result.disableNitter;
+     disableInvidious.checked = !result.disableInvidious;
+-//    disableBibliogram.checked = !result.disableBibliogram;
++    disableBibliogram.checked = !result.disableBibliogram;
+     disableOsm.checked = !result.disableOsm;
+     disableReddit.checked = !result.disableReddit;
+     disableSearchEngine.checked = !result.disableSearchEngine;
+@@ -172,9 +172,9 @@ browser.storage.sync.get(
+     invidiousRandomPool.value =
+       result.invidiousRandomPool ||
+       commonHelper.filterInstances(invidiousInstances);
+-//    bibliogramRandomPool.value =
+-//      result.bibliogramRandomPool ||
+-//      commonHelper.filterInstances(bibliogramInstances);
++    bibliogramRandomPool.value =
++      result.bibliogramRandomPool ||
++      commonHelper.filterInstances(bibliogramInstances);
+   }
+ );
+ 
+@@ -284,14 +284,14 @@ const invidiousInstanceChange = debounce(() => {
+ }, 500);
+ invidiousInstance.addEventListener("input", invidiousInstanceChange);
+ 
+-// const bibliogramInstanceChange = debounce(() => {
+-//   if (bibliogramInstance.checkValidity()) {
+-//     browser.storage.sync.set({
+-//       bibliogramInstance: parseURL(bibliogramInstance.value),
+-//     });
+-//   }
+-// }, 500);
+-// bibliogramInstance.addEventListener("input", bibliogramInstanceChange);
++const bibliogramInstanceChange = debounce(() => {
++  if (bibliogramInstance.checkValidity()) {
++    browser.storage.sync.set({
++      bibliogramInstance: parseURL(bibliogramInstance.value),
++    });
++  }
++}, 500);
++bibliogramInstance.addEventListener("input", bibliogramInstanceChange);
+ 
+ const osmInstanceChange = debounce(() => {
+   if (osmInstance.checkValidity()) {
+@@ -357,9 +357,9 @@ disableInvidious.addEventListener("change", (event) => {
+   browser.storage.sync.set({ disableInvidious: !event.target.checked });
+ });
+ 
+-// disableBibliogram.addEventListener("change", (event) => {
+-//   browser.storage.sync.set({ disableBibliogram: !event.target.checked });
+-// });
++disableBibliogram.addEventListener("change", (event) => {
++  browser.storage.sync.set({ disableBibliogram: !event.target.checked });
++});
+ 
+ disableOsm.addEventListener("change", (event) => {
+   browser.storage.sync.set({ disableOsm: !event.target.checked });
+@@ -447,12 +447,12 @@ const invidiousRandomPoolChange = debounce(() => {
+ }, 500);
+ invidiousRandomPool.addEventListener("input", invidiousRandomPoolChange);
+ 
+-// const bibliogramRandomPoolChange = debounce(() => {
+-//   browser.storage.sync.set({
+-//     bibliogramRandomPool: bibliogramRandomPool.value,
+-//   });
+-// }, 500);
+-// bibliogramRandomPool.addEventListener("input", bibliogramRandomPoolChange);
++const bibliogramRandomPoolChange = debounce(() => {
++  browser.storage.sync.set({
++    bibliogramRandomPool: bibliogramRandomPool.value,
++  });
++}, 500);
++bibliogramRandomPool.addEventListener("input", bibliogramRandomPoolChange);
+ 
+ theme.addEventListener("change", (event) => {
+   const value = event.target.options[theme.selectedIndex].value;
+diff --git 
a/data/extensions/{b7f9d2cd-d772-4302-8c3f-eb941af36f76}/pages/popup/popup.html 
b/data/extensions/{b7f9d2cd-d772-4302-8c3f-eb941af36f76}/pages/popup/popup.html
+index 0f3792b..ada7e75 100644
+--- 
a/data/extensions/{b7f9d2cd-d772-4302-8c3f-eb941af36f76}/pages/popup/popup.html
++++ 
b/data/extensions/{b7f9d2cd-d772-4302-8c3f-eb941af36f76}/pages/popup/popup.html
+@@ -69,7 +69,7 @@
+         </tbody>
+       </table>
+     </section>
+-<!--
++
+     <section class="settings-block">
+       <table class="option" aria-label="Toggle Bibliogram redirects">
+         <tbody>
+@@ -91,7 +91,7 @@
+           </tr>
+         </tbody>
+       </table>
+-    </section>  -->
++    </section>
+ 
+     <section class="settings-block">
+       <table class="option" aria-label="Toggle OpenStreetMap redirects">
+diff --git 
a/data/extensions/{b7f9d2cd-d772-4302-8c3f-eb941af36f76}/pages/popup/popup.js 
b/data/extensions/{b7f9d2cd-d772-4302-8c3f-eb941af36f76}/pages/popup/popup.js
+index b4699ca..4309c60 100644
+--- 
a/data/extensions/{b7f9d2cd-d772-4302-8c3f-eb941af36f76}/pages/popup/popup.js
++++ 
b/data/extensions/{b7f9d2cd-d772-4302-8c3f-eb941af36f76}/pages/popup/popup.js
+@@ -2,7 +2,7 @@
+ 
+ let disableNitter = document.querySelector("#disable-nitter");
+ let disableInvidious = document.querySelector("#disable-invidious");
+-// let disableBibliogram = document.querySelector("#disable-bibliogram");
++let disableBibliogram = document.querySelector("#disable-bibliogram");
+ let disableOsm = document.querySelector("#disable-osm");
+ let disableReddit = document.querySelector("#disable-reddit");
+ let disableSearchEngine = document.querySelector("#disable-searchEngine");
+@@ -28,7 +28,7 @@ browser.storage.sync.get(
+     if (result.theme) document.body.classList.add(result.theme);
+     disableNitter.checked = !result.disableNitter;
+     disableInvidious.checked = !result.disableInvidious;
+-//    disableBibliogram.checked = !result.disableBibliogram;
++    disableBibliogram.checked = !result.disableBibliogram;
+     disableOsm.checked = !result.disableOsm;
+     disableReddit.checked = !result.disableReddit;
+     disableSearchEngine.checked = !result.disableSearchEngine;
+@@ -47,9 +47,9 @@ disableInvidious.addEventListener("change", (event) => {
+   browser.storage.sync.set({ disableInvidious: !event.target.checked });
+ });
+ 
+-// disableBibliogram.addEventListener("change", (event) => {
+-//   browser.storage.sync.set({ disableBibliogram: !event.target.checked });
+-// });
++disableBibliogram.addEventListener("change", (event) => {
++  browser.storage.sync.set({ disableBibliogram: !event.target.checked });
++});
+ 
+ disableOsm.addEventListener("change", (event) => {
+   browser.storage.sync.set({ disableOsm: !event.target.checked });
+diff --git a/data/patches/hide-firefox-view-button.patch 
b/data/patches/hide-firefox-view-button.patch
+index ef24a34..52bad1c 100644
+--- a/data/patches/hide-firefox-view-button.patch
++++ b/data/patches/hide-firefox-view-button.patch
+@@ -1,10 +1,10 @@
+---- a/browser/base/content/navigator-toolbox.inc.xhtml
+-+++ b/browser/base/content/navigator-toolbox.inc.xhtml
+-@@ -43,6 +43,7 @@
+-                          oncommand="FirefoxViewHandler.openTab();"
+-                          
onmousedown="FirefoxViewHandler.openToolbarMouseEvent(event);"
+-                          cui-areatype="toolbar"
+-+                         hidden="true"
+-                          removable="true"/>
++--- a/browser/base/content/navigator-toolbox.inc.xhtml        2025-08-12 
02:31:44.000000000 +0900
+++++ b/browser/base/content/navigator-toolbox.inc.xhtml        2025-08-26 
21:10:15.709368257 +0900
++@@ -41,6 +41,7 @@
++                        role="button"
++                        aria-pressed="false"
++                        cui-areatype="toolbar"
+++                       hidden="true"
++                        removable="true"/>
+  
+-           <tabs id="tabbrowser-tabs"
++         <tabs id="tabbrowser-tabs"
+diff --git a/data/patches/hide-submit-feedback-menu-item.patch 
b/data/patches/hide-submit-feedback-menu-item.patch
+index 402ba31..5278da7 100644
+--- a/data/patches/hide-submit-feedback-menu-item.patch
++++ b/data/patches/hide-submit-feedback-menu-item.patch
+@@ -1,10 +1,10 @@
+---- a/browser/base/content/browser-menubar.inc
+-+++ b/browser/base/content/browser-menubar.inc
+-@@ -465,6 +465,7 @@
+-                           hidden="true"
+-                           appmenu-data-l10n-id="menu-report-broken-site"/>
++--- a/browser/base/content/browser-menubar.inc        2025-08-26 
21:16:57.929903122 +0900
+++++ b/browser/base/content/browser-menubar.inc        2025-08-26 
21:17:09.257918204 +0900
++@@ -431,6 +431,7 @@
++                           disabled="true"
++                           
appmenu-data-l10n-id="appmenuitem-report-broken-site"/>
+                  <menuitem id="feedbackPage"
+ +                          hidden="true"
+-                           oncommand="openFeedbackPage()"
+                            data-l10n-id="menu-help-share-ideas"
+                            appmenu-data-l10n-id="appmenu-help-share-ideas"/>
++                 <menuitem id="helpSafeMode"
+diff --git a/data/patches/icecat-about-dialog.patch 
b/data/patches/icecat-about-dialog.patch
+index c7e77b0..87dc835 100644
+--- a/data/patches/icecat-about-dialog.patch
++++ b/data/patches/icecat-about-dialog.patch
+@@ -1,16 +1,16 @@
+---- a/browser/base/content/aboutDialog.xhtml
+-+++ b/browser/base/content/aboutDialog.xhtml
+-@@ -148,7 +148,6 @@
++--- a/browser/base/content/aboutDialog.xhtml  2025-08-26 21:23:08.866394736 
+0900
+++++ b/browser/base/content/aboutDialog.xhtml  2025-08-26 21:23:19.986408921 
+0900
++@@ -139,7 +139,6 @@
+        <hbox pack="center">
+          <label is="text-link" class="bottom-link" useoriginprincipal="true" 
href="about:license" data-l10n-id="bottomLinks-license"/>
+-         <label is="text-link" class="bottom-link" useoriginprincipal="true" 
href="about:rights" data-l10n-id="bottomLinks-rights"/>
+--        <label is="text-link" class="bottom-link" 
href="https://www.mozilla.org/privacy/?utm_source=firefox-browser&#38;utm_medium=firefox-desktop&#38;utm_campaign=about-dialog";
 data-l10n-id="bottomLinks-privacy"/>
++         <label is="text-link" class="bottom-link" 
href="https://www.mozilla.org/about/legal/terms/firefox/"; 
data-l10n-id="bottom-links-terms"/>
++-        <label is="text-link" class="bottom-link" 
href="https://www.mozilla.org/privacy/firefox/?utm_source=firefox-browser&#38;utm_medium=firefox-desktop&#38;utm_campaign=about-dialog";
 data-l10n-id="bottom-links-privacy"/>
+        </hbox>
+        <description id="trademark" data-l10n-id="trademarkInfo"></description>
+      </vbox>
+---- a/browser/base/content/aboutDialog.css
+-+++ b/browser/base/content/aboutDialog.css
+-@@ -38,10 +38,9 @@
++--- a/browser/base/content/aboutDialog.css    2025-08-26 21:26:43.618669160 
+0900
+++++ b/browser/base/content/aboutDialog.css    2025-08-26 21:31:54.207067616 
+0900
++@@ -32,10 +32,9 @@
+  #rightBox {
+    background-image: url("chrome://branding/content/about-wordmark.svg");
+    background-repeat: no-repeat;
+@@ -19,6 +19,9 @@
+    padding-top: 38px;
+ -  margin-top: 20px;
+ +  margin-top: 60px;
+- }
+- 
++   /* We don't want this box to contribute arbitrarily to the intrinsic size 
of
++    * the dialog, so set the width to a reasonable size, but let it flex to 
take
++    * all available space. */
++--- a/browser/base/content/aboutDialog.css
+++++ b/browser/base/content/aboutDialog.css
+  #rightBox:-moz-locale-dir(rtl) {
+diff --git a/data/patches/icecat-preferences.patch 
b/data/patches/icecat-preferences.patch
+index f8f00cd..5b3b24f 100644
+--- a/data/patches/icecat-preferences.patch
++++ b/data/patches/icecat-preferences.patch
+@@ -1,6 +1,63 @@
++diff --git a/browser/base/content/appmenu-viewcache.inc.xhtml 
b/browser/base/content/appmenu-viewcache.inc.xhtml
++index ec44a3b1a354..e469b754d93d 100644
++--- a/browser/base/content/appmenu-viewcache.inc.xhtml
+++++ b/browser/base/content/appmenu-viewcache.inc.xhtml
++@@ -139,6 +139,9 @@
++                      key="key_preferencesCmdMac"
++ #endif
++                      />
+++      <toolbarbutton id="appMenu-icecatsettings-button"
+++                     class="subviewbutton"
+++                     data-l10n-id="appmenuitem-icecat-settings"/>
++       <toolbarbutton id="appMenu-more-button2"
++                      class="subviewbutton subviewbutton-nav"
++                      data-l10n-id="appmenuitem-more-tools"
++diff --git a/browser/base/content/browser-menubar.inc 
b/browser/base/content/browser-menubar.inc
++index 01bca4ecb0de..7c755439d1d5 100644
++--- a/browser/base/content/browser-menubar.inc
+++++ b/browser/base/content/browser-menubar.inc
++@@ -116,6 +116,8 @@
++                           />
++ #endif
++ #endif
+++              <menuitem id="menu_icecat_preferences"
+++               data-l10n-id="appmenuitem-icecat-settings"/>
++               </menupopup>
++             </menu>
++ 
++diff --git a/browser/base/content/browser-menubar.js 
b/browser/base/content/browser-menubar.js
++index 61ae54a0884c..6d4c315427bc 100644
++--- a/browser/base/content/browser-menubar.js
+++++ b/browser/base/content/browser-menubar.js
++@@ -16,6 +16,9 @@ document.addEventListener(
++         case "menu_preferences":
++           openPreferences(undefined);
++           break;
+++        case "menu_icecat_preferences":
+++          openPreferences("privacy-icecatPreferences");
+++          break;
++ 
++         // == view-menu ==
++         case "menu_pageStyleNoStyle":
++diff --git a/browser/components/customizableui/content/panelUI.js 
b/browser/components/customizableui/content/panelUI.js
++index 689205034d9d..a80bbcfe2926 100644
++--- a/browser/components/customizableui/content/panelUI.js
+++++ b/browser/components/customizableui/content/panelUI.js
++@@ -379,6 +379,9 @@ const PanelUI = {
++       case "appMenu-settings-button":
++         openPreferences();
++         break;
+++      case "appMenu-icecatsettings-button":
+++        openPreferences("privacy-icecatPreferences");
+++        break;
++       case "appMenu-more-button2":
++         this.showMoreToolsPanel(target);
++         break;
++diff --git a/browser/components/preferences/privacy.inc.xhtml 
b/browser/components/preferences/privacy.inc.xhtml
++index 28e325c938de..fb7e669e07f6 100644
+ --- a/browser/components/preferences/privacy.inc.xhtml
+ +++ b/browser/components/preferences/privacy.inc.xhtml
+-@@ -705,6 +705,83 @@
++@@ -691,6 +691,83 @@
+    </hbox>
+  </groupbox>
+  
+@@ -84,11 +141,13 @@
+  <hbox id="permissionsCategory"
+        class="subcategory"
+        hidden="true"
++diff --git a/browser/components/preferences/privacy.js 
b/browser/components/preferences/privacy.js
++index 5722057a0665..3d825f40fa3b 100644
+ --- a/browser/components/preferences/privacy.js
+ +++ b/browser/components/preferences/privacy.js
+-@@ -155,6 +155,16 @@
+-   { id: PREF_URLBAR_QUICKSUGGEST_BLOCKLIST, type: "string" },
+-   { id: PREF_URLBAR_WEATHER_USER_ENABLED, type: "bool" },
++@@ -156,6 +156,16 @@ Preferences.addAll([
++   { id: "browser.urlbar.suggest.quicksuggest.sponsored", type: "bool" },
++   { id: "browser.urlbar.quicksuggest.dataCollection.enabled", type: "bool" },
+  
+ +  // IceCat-specific
+ +  { id: "javascript.enabled", type: "bool" },
+@@ -103,7 +162,7 @@
+    // History
+    { id: "places.history.enabled", type: "bool" },
+    { id: "browser.formfill.enable", type: "bool" },
+-@@ -1177,6 +1187,24 @@
++@@ -1150,6 +1160,24 @@ var gPrivacyPane = {
+      setSyncFromPrefListener("enableOCSP", () => this.readEnableOCSP());
+      setSyncToPrefListener("enableOCSP", () => this.writeEnableOCSP());
+  
+@@ -128,7 +187,7 @@
+      if (AlertsServiceDND) {
+        let notificationsDoNotDisturbBox = document.getElementById(
+          "notificationsDoNotDisturbBox"
+-@@ -1290,6 +1318,62 @@
++@@ -1259,6 +1287,62 @@ var gPrivacyPane = {
+      SiteDataManager.updateSites();
+    },
+  
+@@ -191,28 +250,3 @@
+    // CONTENT BLOCKING
+  
+    /**
+---- a/browser/base/content/appmenu-viewcache.inc.xhtml
+-+++ b/browser/base/content/appmenu-viewcache.inc.xhtml
+-@@ -126,6 +126,10 @@
+-                      key="key_preferencesCmdMac"
+- #endif
+-                      />
+-+      <toolbarbutton id="appMenu-icecatsettings-button"
+-+                     class="subviewbutton"
+-+                     data-l10n-id="appmenuitem-icecat-settings"
+-+                     
oncommand="switchToTabHavingURI('about:preferences#privacy-icecatPreferences', 
true)"/>
+-       <toolbarbutton id="appMenu-more-button2"
+-                      class="subviewbutton subviewbutton-nav"
+-                      data-l10n-id="appmenuitem-more-tools"
+---- a/browser/base/content/browser-menubar.inc
+-+++ b/browser/base/content/browser-menubar.inc
+-@@ -127,6 +127,9 @@
+-                           />
+- #endif
+- #endif
+-+              <menuitem id="menu_icecat_preferences"
+-+               
oncommand="switchToTabHavingURI('about:preferences#privacy-icecatPreferences', 
true)"
+-+               data-l10n-id="appmenuitem-icecat-settings"/>
+-               </menupopup>
+-             </menu>
+- 
+diff --git a/data/patches/moz-configure-changes.patch 
b/data/patches/moz-configure-changes.patch
+index 6f0525e..9711a2f 100644
+--- a/data/patches/moz-configure-changes.patch
++++ b/data/patches/moz-configure-changes.patch
+@@ -1,18 +1,43 @@
++diff --git a/browser/moz.configure b/browser/moz.configure
++index e8b401a7dfb2..d5b3117ce3d8 100644
+ --- a/browser/moz.configure
+ +++ b/browser/moz.configure
+-@@ -5,11 +5,11 @@
++@@ -5,16 +5,19 @@
+  # file, You can obtain one at http://mozilla.org/MPL/2.0/.
+  
+  imply_option("MOZ_PLACES", True)
+ -imply_option("MOZ_SERVICES_HEALTHREPORT", True)
+-+imply_option("MOZ_SERVICES_HEALTHREPORT", False)
+- imply_option("MOZ_SERVICES_SYNC", True)
++-imply_option("MOZ_SERVICES_SYNC", True)
+ -imply_option("MOZ_DEDICATED_PROFILES", True)
+ -imply_option("MOZ_BLOCK_PROFILE_DOWNGRADE", True)
+ -imply_option("MOZ_NORMANDY", True)
+++imply_option("MOZ_SERVICES_HEALTHREPORT", False)
+++ # Disabling MOZ_SERVICES_SYNC would break runtime javascript,
+++ # see <https://bugzilla.mozilla.org/show_bug.cgi?id=1816969>.
+++imply_option("MOZ_SERVICES_SYNC", True)
+ +imply_option("MOZ_DEDICATED_PROFILES", False)
+ +imply_option("MOZ_BLOCK_PROFILE_DOWNGRADE", False)
+ +imply_option("MOZ_NORMANDY", False)
++ imply_option("MOZ_PROFILE_MIGRATOR", True)
++ 
++ 
++-imply_option("MOZ_APP_VENDOR", "Mozilla")
+++imply_option("MOZ_APP_VENDOR", "GNU")
++ imply_option("MOZ_APP_ID", "{ec8030f7-c20a-464f-9b0e-13a3a9e97384}")
+++imply_option("MOZ_APP_PROFILE", "mozilla/icecat")
++ # Include the DevTools client, not just the server (which is the default)
++ imply_option("MOZ_DEVTOOLS", "all")
++ imply_option("BROWSER_CHROME_URL", "chrome://browser/content/browser.xhtml")
++diff --git a/build/moz.configure/init.configure 
b/build/moz.configure/init.configure
++index 193272588caa..da8a729548c8 100644
++--- a/build/moz.configure/init.configure
+++++ b/build/moz.configure/init.configure
++@@ -991,7 +991,7 @@ set_config("MOZ_BUILD_APP", build_project)
++ set_define("MOZ_BUILD_APP", build_project)
++ 
++ 
++-option(env="MOZILLA_OFFICIAL", help="Build an official release")
+++option(env="MOZILLA_OFFICIAL", help="Build an official release", 
default=False)
++ 
+  
+- with only_when(target_has_linux_kernel & compile_environment):
+-     option(env="MOZ_NO_PIE_COMPAT", help="Enable non-PIE wrapper")
++ @depends("MOZILLA_OFFICIAL")
+diff --git a/data/update-extensions.sh b/data/update-extensions.sh
+old mode 100644
+new mode 100755
+index 66ea9ad..2c4db94
+--- a/data/update-extensions.sh
++++ b/data/update-extensions.sh
+@@ -1,4 +1,4 @@
+-#!/bin/bash
++#!/usr/bin/env bash
+ 
+ set -e
+ 
+diff --git a/makeicecat b/makeicecat
+index fc0bb76..d7b75b2 100755
+--- a/makeicecat
++++ b/makeicecat
+@@ -21,12 +21,13 @@
+ 
+ 
+ # metadata
+-readonly FFMAJOR=128
+-readonly FFMINOR=14
++readonly FFMAJOR=140
++readonly FFMINOR=2
+ readonly FFSUB=0
+ readonly FFBUILD=1
+ readonly GNUVERSION=1
+-readonly 
SOURCEBALL_CHECKSUM='93b9ef6229f41cb22ff109b95bbf61a78395a0fe4b870192eeca22947cb09a53'
++# SHA-256
++readonly 
SOURCEBALL_CHECKSUM='956dce675c3b706d563caf07ed3ca9af632ab830be710dfd4351da78a0a2ef55'
+ readonly SOURCEBALL_SIGNINGKEY='14F26682D0916CDD81E37B6D61B7B526D98F0353'
+ readonly FFVERSION=${FFMAJOR}.${FFMINOR}.${FFSUB}
+ readonly SOURCEBALL=firefox-${FFVERSION}esr.source.tar.xz
+@@ -41,7 +42,7 @@ readonly LIST_URL=lists.gnu.org/mailman/listinfo/bug-gnuzilla
+ 
+ # l10n
+ readonly L10N_URL=https://github.com/mozilla-l10n/firefox-l10n
+-readonly L10N_REV=fcd0300e8478d1ec4d1c097a073ddb8e1e0351e3
++readonly L10N_REV=a0c1ffda4ed19c0399e4175610361179e09829de
+ readonly L10N_CMP_URL=https://github.com/mozilla/compare-locales
+ readonly L10N_CMP_REV=RELEASE_9_0_4
+ readonly L10N_PREFS_DIR=browser/chrome/browser/preferences
+@@ -377,7 +378,7 @@ configure()
+     sed '/"datareporting\.healthreport\.uploadEnabled"/s/true/false/' -i 
modules/libpref/init/all.js
+ 
+     # Custom privacy statement link
+-    sed 
"s|https://www\\.mozilla\\.org/legal/privacy/|https://${LEGALINFO_URL}|" -i 
./browser/app/profile/firefox.js ./toolkit/content/aboutRights.xhtml
++    sed 
"s|https://www\\.mozilla\\.org/legal/privacy/|https://${LEGALINFO_URL}|" -i 
./browser/app/profile/firefox.js
+ 
+     # Sanitize lists
+     local plugin_file
+@@ -393,8 +394,8 @@ configure()
+     # Disable activity-stream anti-features.
+     # These are not condensed into a single sed script so that it
+     # fails on individual commands that didn't change the source
+-    local activity_stream=browser/components/newtab/lib/ActivityStream.sys.mjs
+-    sed '/^const DEFAULT_SITES/,/^])\;/c const DEFAULT_SITES = new 
Map\([[""]]\);' -i browser/components/newtab/lib/DefaultSites.sys.mjs
++    local activity_stream=browser/extensions/newtab/lib/ActivityStream.sys.mjs
++    sed '/^const DEFAULT_SITES/,/^])\;/c const DEFAULT_SITES = new 
Map\([[""]]\);' -i browser/extensions/newtab/lib/DefaultSites.sys.mjs
+     sed '/"showSponsored"/,/value/s/value: true/value: false/' -i 
$activity_stream
+     sed '/  "telemetry"/,/value/s/value: true/value: false/' -i 
$activity_stream
+     sed '/"section\.highlights\.includePocket"/,/value/s/value: true/value: 
false/' -i $activity_stream
+@@ -405,11 +406,10 @@ configure()
+     sed '/"telemetry\.structuredIngestion\.endpoint"/,/value/s/value: 
.*/value: "",/' -i $activity_stream
+     sed '/name: "telemetry"/,/value/s/value: true/value: false/' -i 
$activity_stream
+     sed '/name: "system\.topstories"/,/},/s/.*!!locales.*/false/' -i 
$activity_stream
+-    sed 's/Ubuntu, //' -i browser/components/newtab/css/activity-stream*.css
+ 
+-    sed '/^]$/d' -i 
browser/components/newtab/data/content/tippytop/top_sites.json
+-    sed 's/}$/},/' -i 
browser/components/newtab/data/content/tippytop/top_sites.json
+-    cat << EOF >> 
browser/components/newtab/data/content/tippytop/top_sites.json
++    sed '/^]$/d' -i 
browser/components/topsites/content/tippytop/top_sites.json
++    sed 's/}$/},/' -i 
browser/components/topsites/content/tippytop/top_sites.json
++    cat << EOF >> browser/components/topsites/content/tippytop/top_sites.json
+ {
+   "domains": ["gnu.org"],
+   "image_url": "images/gnu.png",
+@@ -505,8 +505,8 @@ EOF
+ }
+ EOF
+ 
+-    cp "${DATADIR}"/newtab/*.ico 
browser/components/newtab/data/content/tippytop/favicons/
+-    cp "${DATADIR}"/newtab/*.png 
browser/components/newtab/data/content/tippytop/images/
++    cp "${DATADIR}"/newtab/*.ico 
browser/components/topsites/content/tippytop/favicons/
++    cp "${DATADIR}"/newtab/*.png 
browser/components/topsites/content/tippytop/images/
+ 
+     # IceCat menu l10n
+     /bin/sed '/appmenuitem-settings/,+1s/\(.*.label = 
\)\(.*\)/\1\2\nappmenuitem-icecat-settings =\n\1IceCat \2/' -i 
./l10n/*/browser/browser/appmenu.ftl ./browser/locales/en-US/browser/appmenu.ftl
+@@ -541,7 +541,6 @@ configure_mobile()
+ 
+     cat << EOF >> mobile/android/confvars.sh
+ # IceCat settings
+-MOZ_APP_VENDOR=GNU
+ MOZ_APP_VERSION=${FFVERSION}
+ MOZ_PAY=0
+ MOZ_SERVICES_HEALTHREPORT=0
+@@ -550,7 +549,6 @@ MOZ_SERVICES_FXACCOUNTS=0
+ MOZ_SERVICES_METRICS=0
+ MOZ_DATA_REPORTING=0
+ MOZ_NORMANDY=0
+-MOZ_SERVICES_SYNC=0
+ MOZ_DEVICES=0
+ MOZ_ANDROID_GOOGLE_PLAY_SERVICES=0
+ MOZ_ADDON_SIGNING=0
+@@ -606,15 +604,6 @@ apply_branding()
+ 
+     # Custom legal about pages
+     find l10n -wholename '*/brand.ftl' | xargs /bin/sed 's/^trademarkInfo = 
.*/trademarkInfo = The IceCat logo is Copyright 2008-2015 Free Software 
Foundation, released under the terms of the GNU Lesser General Public License, 
version 3 or any later version./' -i
+-    local string
+-    for string in rights-intro-point-2 rights-intro-point-3 
rights-intro-point-4 rights-intro-point-5 rights-intro-point-6 
rights-webservices rights-safebrowsing
+-    do
+-        find -name aboutRights.ftl | xargs sed -i "s/^${string}.*/${string} = 
/"
+-    done
+-    for string in helpus community-2 community-exp
+-    do
+-        find -wholename '*/browser/aboutDialog.ftl' | xargs sed -i 
"s/^${string}.*/${string} = /"
+-    done
+     cp "${DATADIR}"/aboutRights.xhtml toolkit/content/aboutRights.xhtml
+     cp "${DATADIR}"/aboutRights.xhtml 
toolkit/content/aboutRights-unbranded.xhtml
+     sed -i 's|<a href="http://www\.mozilla\.org/";>Mozilla Project</a>|<a 
href="http://www.gnu.org/";>GNU Project</a>|g' 
browser/base/content/overrides/app-license.html
+@@ -632,8 +621,10 @@ apply_branding()
+ 
+ apply_batch_branding()
+ {
+-    find . -depth | grep -i fennec  | rename_files -e s/fennec/icecatmobile/g 
-e s/Fennec/IceCatMobile/g
+-    find . -depth | grep -i firefox | rename_files -e s/firefox/icecat/g -e 
s/Firefox/IceCat/g
++    find . -depth | grep -i fennec |
++        rename_files -e s/fennec/icecatmobile/g -e s/Fennec/IceCatMobile/g
++    find . -depth | grep -i firefox |
++        rename_files -e s/firefox/icecat/g -e s/Firefox/IceCat/g
+ 
+     echo "Running batch rebranding (this will take a while)"
+     local sed_script="
+@@ -672,7 +663,9 @@ 
s|https://www\\.mozilla\\.org/icecat/?utm_source=synceol|https://www.mozilla.org
+ 
+ 
s|www\\.gnu\\.org/software/gnuzilla/icecat-help|libreplanet.org/wiki/Group:IceCat/Help|g;
+ "
+-    find . -type f -not -iregex '.*changelog.*' -not -iregex '.*copyright.*' 
-not -iregex '.*third_party/rust.*' -execdir /bin/sed --follow-symlinks -i 
"${sed_script}" '{}' ';'
++    find . -type f -not -iregex '.*changelog.*' -not -iregex '.*copyright.*' \
++         -not -iregex '.*third_party/rust.*' \
++         -execdir /bin/sed --follow-symlinks -i "${sed_script}" '{}' ';'
+ 
+     find l10n -type f -execdir /bin/sed --follow-symlinks -i "s/from GNU/from 
Mozilla/g" '{}' ';'
+ 
+@@ -713,27 +706,18 @@ s/OpenSource/Free Software/g;
+     # Ditto for browser/modules/moz.build
+     sort_inner_list_in_file "EXTRA_JS_MODULES += [" "]" 
browser/modules/moz.build
+ 
++    # Adjust the capitalization of IceCat to match the expected symbol
++    # names in build-time generated source files like TelemetryEventEnums.h.
++    sed 's/IceCatview/Icecatview/g' -i 
browser/components/icecatview/metrics.yaml
++
+     # Copy js settings
+     cat "${DATADIR}"/settings.js >> browser/app/profile/icecat.js
+ 
+     cat << EOF >> browser/confvars.sh
+ # IceCat settings
+ MOZ_APP_BASENAME=IceCat
+-MOZ_APP_UA_NAME=Firefox
+-MOZ_APP_VENDOR=GNU
+ MOZ_APP_VERSION=${FFVERSION}
+-MOZ_APP_PROFILE=mozilla/icecat
+-MOZ_PAY=0
+-MOZ_SERVICES_HEALTHREPORT=0
+-MOZ_SERVICES_HEALTHREPORTER=0
+-MOZ_SERVICES_FXACCOUNTS=0
+-MOZ_SERVICES_METRICS=0
+ MOZ_DATA_REPORTING=0
+-MOZ_NORMANDY=0
+-MOZ_SERVICES_SYNC=0
+-MOZ_DEVICES=0
+-MOZ_ANDROID_GOOGLE_PLAY_SERVICES=0
+-MOZ_ADDON_SIGNING=0
+ EOF
+ }
+ 
+diff --git a/tools/process-json-files.py b/tools/process-json-files.py
+index d449057..2407fa9 100644
+--- a/tools/process-json-files.py
++++ b/tools/process-json-files.py
+@@ -148,48 +148,6 @@ class Changes(RemoteSettings):
+         return File(cls.OUTPUT_PATH, changes)
+ 
+ 
+-class SearchConfig(RemoteSettings):
+-    JSON_PATHS = (
+-        RemoteSettings.DUMPS_PATH_ABSOLUTE /
+-        'main/search-config.json',
+-    )
+-    SCHEMA_PATH = arguments.MAIN_PATH / \
+-        'toolkit/components/search/schema/search-config-schema.json'
+-    OUTPUT_PATH = JSON_PATHS[0]
+-
+-    _DUCKDUCKGO_SEARCH_ENGINE_ID = '[email protected]'
+-
+-    @classmethod
+-    def should_drop_record(cls, search_engine):
+-        return search_engine['webExtension']['id'] not in (
+-            cls._DUCKDUCKGO_SEARCH_ENGINE_ID, '[email protected]')
+-
+-    @classmethod
+-    def process_record(cls, search_engine):
+-        [search_engine.pop(key, None)
+-         for key in ['extraParams', 'telemetryId']]
+-
+-        general_specifier = {}
+-        for specifier in search_engine['appliesTo'].copy():
+-            if 'application' in specifier:
+-                if 'distributions' in specifier['application']:
+-                    search_engine['appliesTo'].remove(specifier)
+-                    continue
+-                specifier['application'].pop('extraParams', None)
+-
+-            if 'included' in specifier and 'everywhere' in specifier[
+-                    'included'] and specifier['included']['everywhere']:
+-                general_specifier = specifier
+-
+-        if not general_specifier:
+-            general_specifier = {'included': {'everywhere': True}}
+-            search_engine['appliesTo'].insert(0, general_specifier)
+-        if search_engine['webExtension']['id'] == 
cls._DUCKDUCKGO_SEARCH_ENGINE_ID:
+-            general_specifier['default'] = 'yes'
+-
+-        return search_engine
+-
+-
+ class SearchConfigV2(RemoteSettings):
+     JSON_PATHS = (
+         RemoteSettings.DUMPS_PATH_ABSOLUTE /
+@@ -224,20 +182,6 @@ class SearchConfigV2(RemoteSettings):
+         return record
+ 
+ 
+-class SearchConfigOverrides(RemoteSettings):
+-    JSON_PATHS = (
+-        RemoteSettings.DUMPS_PATH_ABSOLUTE /
+-        'main/search-config-overrides.json',
+-    )
+-    SCHEMA_PATH = arguments.MAIN_PATH / \
+-        'toolkit/components/search/schema/search-config-overrides-schema.json'
+-    OUTPUT_PATH = JSON_PATHS[0]
+-
+-    @classmethod
+-    def should_drop_record(cls, record):
+-        return True
+-
+-
+ class SearchConfigOverridesV2(RemoteSettings):
+     JSON_PATHS = (
+         RemoteSettings.DUMPS_PATH_ABSOLUTE /
+@@ -295,8 +239,7 @@ class TopSites(RemoteSettings):
+ 
+ # To reflect the latest timestamps, Changes class should always come after
+ # all other RemoteSettings subclasses
+-processors = (SearchConfig,   SearchConfigOverrides,
+-              SearchConfigV2, SearchConfigOverridesV2,
++processors = (SearchConfigV2, SearchConfigOverridesV2,
+               Changes)
+ 
+ for processor in processors:
diff --git a/gnu/packages/patches/icecat-use-system-wide-dir.patch 
b/gnu/packages/patches/icecat-use-system-wide-dir.patch
index 223467a9c1..c7454a72b9 100644
--- a/gnu/packages/patches/icecat-use-system-wide-dir.patch
+++ b/gnu/packages/patches/icecat-use-system-wide-dir.patch
@@ -1,36 +1,36 @@
-Replace "/usr/lib/mozilla" (the system-wide directory for extensions and
-native manifests) with "$ICECAT_SYSTEM_DIR".
+Upstream-status: https://bugzilla.mozilla.org/show_bug.cgi?id=1986219
 
+diff --git a/toolkit/xre/nsXREDirProvider.cpp 
b/toolkit/xre/nsXREDirProvider.cpp
+index 9c94cb8808aa..dfee051b302f 100644
 --- a/toolkit/xre/nsXREDirProvider.cpp
 +++ b/toolkit/xre/nsXREDirProvider.cpp
-@@ -296,24 +296,12 @@ nsresult 
nsXREDirProvider::GetBackgroundTasksProfilesRootDir(
+@@ -276,11 +276,27 @@ nsresult 
nsXREDirProvider::GetBackgroundTasksProfilesRootDir(
+  *
+  * On OSX this is /Library/Application Support/Mozilla
+  * On Linux this is /usr/{lib,lib64}/mozilla
+- *   (for 32- and 64-bit systems respsectively)
++ *   (for 32- and 64-bit systems respectively)
++ *
++ * The MOZILLA_SYSTEM_DIR environment variable can be used to override
++ * the system directory used.
+  */
  static nsresult GetSystemParentDirectory(nsIFile** aFile) {
-   nsresult rv;
+-  nsresult rv;
++  nsresult rv = NS_ERROR_FAILURE;
    nsCOMPtr<nsIFile> localDir;
--#  if defined(XP_MACOSX)
--  rv = GetOSXFolderType(kOnSystemDisk, kApplicationSupportFolderType,
--                        getter_AddRefs(localDir));
--  if (NS_SUCCEEDED(rv)) {
--    rv = localDir->AppendNative("Mozilla"_ns);
--  }
--#  else
--  constexpr auto dirname =
--#    ifdef HAVE_USR_LIB64_DIR
--      "/usr/lib64/mozilla"_ns
--#    elif defined(__OpenBSD__) || defined(__FreeBSD__)
--      "/usr/local/lib/mozilla"_ns
--#    else
--      "/usr/lib/mozilla"_ns
--#    endif
--      ;
--  rv = NS_NewNativeLocalFile(dirname, false, getter_AddRefs(localDir));
--#  endif
 +
-+  const char* systemParentDir = getenv("ICECAT_SYSTEM_DIR");
-+  if (!systemParentDir || !*systemParentDir) return NS_ERROR_FAILURE;
++  // Honor a the MOZILLA_SYSTEM_DIR environment variable first...
++  const char* systemParentDir = getenv("MOZILLA_SYSTEM_DIR");
++  if (systemParentDir) {
++    rv = NS_NewNativeLocalFile(nsDependentCString(systemParentDir),
++                               getter_AddRefs(localDir));
++  }
++  if (NS_SUCCEEDED(rv)) {
++    localDir.forget(aFile);
++    return rv;
++  }
 +
-+  rv = NS_NewNativeLocalFile(nsDependentCString(systemParentDir), false,
-+                             getter_AddRefs(localDir));
- 
-   if (NS_SUCCEEDED(rv)) {
-     localDir.forget(aFile);
++  // ... falling back to the conventional fixed location otherwise.
+ #  if defined(XP_MACOSX)
+   rv = GetOSXFolderType(kOnSystemDisk, kApplicationSupportFolderType,
+                         getter_AddRefs(localDir));
diff --git a/gnu/packages/patches/icedove-observer-fix.patch 
b/gnu/packages/patches/icedove-observer-fix.patch
new file mode 100644
index 0000000000..99645bf10d
--- /dev/null
+++ b/gnu/packages/patches/icedove-observer-fix.patch
@@ -0,0 +1,35 @@
+
+# HG changeset patch
+# User Magnus Melin <[email protected]>
+# Date 1757493192 0
+# Node ID 1cc168c9d0a5c55744d2886aa380f5a7bf712ef4
+# Parent  20980bc07105ebb761347e9c99937e572eedf03a
+Bug 1987834 - Don't remove not added observer of AUTO_UPDATE_CHANGED_TOPIC 
when MOZ_UPDATER is off. r=john.bieling
+
+Differential Revision: https://phabricator.services.mozilla.com/D264376
+
+diff --git a/mail/components/preferences/general.js 
b/mail/components/preferences/general.js
+--- a/mail/components/preferences/general.js
++++ b/mail/components/preferences/general.js
+@@ -2175,17 +2175,19 @@ var gGeneralPane = {
+     }
+ 
+     return /^https?/.test(uri.scheme) ? uri.resolve("/favicon.ico") : "";
+   },
+ 
+   destroy() {
+     window.removeEventListener("unload", this);
+ 
+-    Services.obs.removeObserver(this, AUTO_UPDATE_CHANGED_TOPIC);
++    if (AppConstants.MOZ_UPDATER) {
++      Services.obs.removeObserver(this, AUTO_UPDATE_CHANGED_TOPIC);
++    }
+     Services.prefs.removeObserver("mailnews.tags.", this);
+   },
+ 
+   // nsISupports
+ 
+   QueryInterface: ChromeUtils.generateQI(["nsIObserver"]),
+ 
+   // nsIObserver
+

Reply via email to