diff --git a/helpers/DATA/firefox/patch_changes/002-Remove_moreFromMozilla_Focus_and_Klar.patch b/helpers/DATA/firefox/patch_changes/002-Remove_moreFromMozilla_Focus_and_Klar.patch
index 3f44f063..20fddec8 100644
--- a/helpers/DATA/firefox/patch_changes/002-Remove_moreFromMozilla_Focus_and_Klar.patch
+++ b/helpers/DATA/firefox/patch_changes/002-Remove_moreFromMozilla_Focus_and_Klar.patch
@@ -4,10 +4,10 @@ Based on https://git.parabola.nu/abslibre.git/diff/libre/iceweasel/9004-FSDG-mis
- Remove promos of Firefox Focus and Klar from Private Browsing
diff --git a/browser/app/profile/firefox.js b/browser/app/profile/firefox.js
-index c5f7cf3a..f0124235 100644
+index cc42846d..52d35d49 100644
--- a/browser/app/profile/firefox.js
+++ b/browser/app/profile/firefox.js
-@@ -1368,9 +1368,9 @@ pref("accessibility.typeaheadfind.linksonly", false);
+@@ -1388,11 +1388,11 @@ pref("accessibility.typeaheadfind.linksonly", false);
pref("accessibility.typeaheadfind.flashBar", 1);
// Whether we had to hide the "Firefox Labs" section because it would be empty.
@@ -16,9 +16,12 @@ index c5f7cf3a..f0124235 100644
// Whether we show the "More from Mozilla" section.
-pref("browser.preferences.moreFromMozilla", true);
+pref("browser.preferences.moreFromMozilla", false);
-
- // Used by settings to track whether the user customized advanced
- // performance settings. Not used directly elsewhere.
+ // Whether we show the "AI Controls" pane.
+-pref("browser.preferences.aiControls", true);
++pref("browser.preferences.aiControls", false);
+ // Whether to show unavailable AI controls regardless of region/locale
+ // restrictions. This is intended for localizers to be able to see the strings.
+ pref("browser.preferences.aiControls.showUnavailable", false);
@@ -2281,7 +2281,7 @@ pref("browser.contentblocking.report.vpn_regions", "ca,my,nz,sg,gb,gg,im,io,je,u
pref("browser.promo.focus.disallowed_regions", "cn");
@@ -456,17 +459,19 @@ index b5ff592..22cdf39 100644
{
id: "PB_NEWTAB_VPN_PROMO",
template: "pb_newtab",
-diff -Nru a/browser/components/preferences/jar.mn b/browser/components/preferences/jar.mn
---- a/browser/components/preferences/jar.mn 2022-05-22 09:35:55.400673986 +0000
-+++ b/browser/components/preferences/jar.mn 2022-05-22 21:45:51.512354083 +0000
-@@ -18,7 +18,5 @@
+diff --git a/browser/components/preferences/jar.mn b/browser/components/preferences/jar.mn
+index b2d65603..b44a1525 100644
+--- a/browser/components/preferences/jar.mn
++++ b/browser/components/preferences/jar.mn
+@@ -19,8 +19,6 @@ browser.jar:
content/browser/preferences/fxaPairDevice.xhtml
content/browser/preferences/fxaPairDevice.js
content/browser/preferences/findInPage.js
- content/browser/preferences/more-from-mozilla-qr-code-simple.svg
- content/browser/preferences/more-from-mozilla-qr-code-simple-cn.svg
+ content/browser/preferences/browser-layout-horizontal.svg
+ content/browser/preferences/browser-layout-vertical.svg
content/browser/preferences/web-appearance-dark.svg
- content/browser/preferences/web-appearance-light.svg
diff --git a/browser/components/preferences/more-from-mozilla-qr-code-simple-cn.svg b/browser/components/preferences/more-from-mozilla-qr-code-simple-cn.svg
index edcad0f3..e69de29b 100644
--- a/browser/components/preferences/more-from-mozilla-qr-code-simple-cn.svg
@@ -736,10 +741,10 @@ index 3888af10..1d6c606f 100644
"chrome://browser/content/asrouter/assets/fox-with-devices.svg",
"chrome://browser/content/asrouter/assets/fox-with-locked-box.svg",
diff --git a/browser/components/preferences/moreFromMozilla.js b/browser/components/preferences/moreFromMozilla.js
-index 8807b5d3..82367922 100644
+index 109d334e..ee49d63f 100644
--- a/browser/components/preferences/moreFromMozilla.js
+++ b/browser/components/preferences/moreFromMozilla.js
-@@ -81,51 +81,7 @@ var gMoreFromMozillaPane = {
+@@ -81,50 +81,7 @@ var gMoreFromMozillaPane = {
renderProducts() {
const isRegionUS = Region.home.toLowerCase() === "us";
@@ -777,9 +782,8 @@ index 8807b5d3..82367922 100644
- {
- id: "mozilla-monitor",
- title_string_id: "more-from-moz-mozilla-monitor-title",
-- description_string_id: isRegionUS
-- ? "more-from-moz-mozilla-monitor-us-description"
-- : "more-from-moz-mozilla-monitor-global-description",
+- description_string_id:
+- "more-from-moz-mozilla-monitor-global-description",
- region: isRegionUS ? "us" : "global",
- button: {
- id: "mozillaMonitor",
diff --git a/helpers/DATA/firefox/patch_changes/003-disable_sponsored_topsites_and_keep_weather_widget_static.patch b/helpers/DATA/firefox/patch_changes/003-disable_sponsored_topsites_and_keep_weather_widget_static.patch
index ffa7ea94..d015201f 100644
--- a/helpers/DATA/firefox/patch_changes/003-disable_sponsored_topsites_and_keep_weather_widget_static.patch
+++ b/helpers/DATA/firefox/patch_changes/003-disable_sponsored_topsites_and_keep_weather_widget_static.patch
@@ -24,8 +24,8 @@ index 217ed280..d91cde94 100644
// Do not enable the preonboarding experience on Linux
#ifdef XP_LINUX
-@@ -1856,24 +1856,24 @@ pref("browser.newtabpage.activity-stream.mobileDownloadModal.variant-c", false);
- pref("browser.newtabpage.activity-stream.discoverystream.refinedCardsLayout.enabled", true);
+@@ -1886,24 +1886,24 @@ pref("browser.newtabpage.activity-stream.mobileDownloadModal.variant-b", false);
+ pref("browser.newtabpage.activity-stream.mobileDownloadModal.variant-c", false);
// Mozilla Ad Routing Service (MARS) unified ads service
-pref("browser.newtabpage.activity-stream.unifiedAds.tiles.enabled", true);
@@ -35,13 +35,14 @@ index 217ed280..d91cde94 100644
+pref("browser.newtabpage.activity-stream.unifiedAds.spocs.enabled", false);
+pref("browser.newtabpage.activity-stream.unifiedAds.endpoint", "");
pref("browser.newtabpage.activity-stream.unifiedAds.adsFeed.enabled", false);
- pref("browser.newtabpage.activity-stream.unifiedAds.ohttp.enabled", false);
+-pref("browser.newtabpage.activity-stream.unifiedAds.ohttp.enabled", true);
++pref("browser.newtabpage.activity-stream.unifiedAds.ohttp.enabled", false);
// Weather widget for newtab
-pref("browser.newtabpage.activity-stream.showWeather", true);
+pref("browser.newtabpage.activity-stream.showWeather", false);
pref("browser.newtabpage.activity-stream.weather.query", "");
- pref("browser.newtabpage.activity-stream.weather.display", "simple");
+ pref("browser.newtabpage.activity-stream.weather.display", "detailed");
pref("browser.newtabpage.activity-stream.images.smart", true);
diff --git a/helpers/DATA/firefox/patch_changes/013-remove_finish_setup_third_party_services.patch b/helpers/DATA/firefox/patch_changes/013-remove_finish_setup_third_party_services.patch
index c00136f7..0bc8d3ca 100644
--- a/helpers/DATA/firefox/patch_changes/013-remove_finish_setup_third_party_services.patch
+++ b/helpers/DATA/firefox/patch_changes/013-remove_finish_setup_third_party_services.patch
@@ -11,53 +11,53 @@ index ba47adb6..c4b29ec4 100644
where: "tabshifted",
},
navigate: true,
-@@ -750,49 +750,6 @@ const MR_ABOUT_WELCOME_DEFAULT = {
+@@ -865,6 +865,49 @@ const MR_ABOUT_WELCOME_DEFAULT = {
},
targeting: "isFxASignedIn",
},
-- {
-- id: "AW_ACCOUNT_LOGIN",
-- content: {
-- fullscreen: true,
-- position: "split",
-- split_narrow_bkg_position: "-228px",
-- image_alt_text: {
-- string_id: "mr2022-onboarding-gratitude-image-alt",
-- },
-- background:
-- "url('chrome://activity-stream/content/data/content/assets/fox-doodle-waving-laptop.svg') center center / 80% no-repeat var(--mr-screen-background-color)",
-- progress_bar: true,
-- logo: {},
-- title: {
-- string_id: "onboarding-sign-up-title",
-- },
-- subtitle: {
-- string_id: "onboarding-sign-up-description",
-- },
-- secondary_button: {
-- label: {
-- string_id: "mr2-onboarding-start-browsing-button-label",
-- },
-- style: "secondary",
-- action: {
-- navigate: true,
-- },
-- },
-- primary_button: {
-- label: {
-- string_id: "onboarding-sign-up-button",
-- },
-- action: {
-- data: {
-- entrypoint: "newuser-onboarding-desktop",
-- },
-- type: "FXA_SIGNIN_FLOW",
-- navigate: true,
-- },
-- },
-- },
-- targeting: "!isFxASignedIn",
-- },
++ {
++ id: "AW_ACCOUNT_LOGIN",
++ content: {
++ fullscreen: true,
++ position: "split",
++ split_narrow_bkg_position: "-228px",
++ image_alt_text: {
++ string_id: "mr2022-onboarding-gratitude-image-alt",
++ },
++ background:
++ "url('chrome://activity-stream/content/data/content/assets/br-fxa-fox-mirror.svg') var(--mr-secondary-position) no-repeat light-dark(rgba(252, 245, 240, 1), rgba(33, 3, 64, 1))",
++ progress_bar: true,
++ logo: {},
++ title: {
++ string_id: "onboarding-sign-up-title",
++ },
++ subtitle: {
++ string_id: "onboarding-sign-up-description",
++ },
++ secondary_button: {
++ label: {
++ string_id: "mr2-onboarding-start-browsing-button-label",
++ },
++ style: "secondary",
++ action: {
++ navigate: true,
++ },
++ },
++ primary_button: {
++ label: {
++ string_id: "onboarding-sign-up-button",
++ },
++ action: {
++ data: {
++ entrypoint: "newuser-onboarding-desktop",
++ },
++ type: "FXA_SIGNIN_FLOW",
++ navigate: true,
++ },
++ },
++ },
++ targeting: "!isFxASignedIn",
++ },
],
};
diff --git a/helpers/DATA/firefox/patch_changes/016-set_custom_cargo_1.91.patch b/helpers/DATA/firefox/patch_changes/016-set_custom_cargo_1.91.patch
new file mode 100644
index 00000000..5be58ff7
--- /dev/null
+++ b/helpers/DATA/firefox/patch_changes/016-set_custom_cargo_1.91.patch
@@ -0,0 +1,28 @@
+diff --git a/debian/control.in b/debian/control.in
+index 758352f8..26383a38 100644
+--- a/debian/control.in
++++ b/debian/control.in
+@@ -43,8 +43,8 @@ Build-Depends: cdbs,
+ libclang-22-dev | libclang-21-dev | libclang-20-dev | libclang-19-dev | libclang-18-dev,
+ llvm-22-dev | llvm-21-dev | llvm-20-dev | llvm-19-dev | llvm-18-dev,
+ lld-22 | lld-21 | lld-20 | lld-19 | lld-18,
+- cargo-1.90,
+- rustc-1.90,
++ cargo-1.91 | cargo-1.90,
++ rustc-1.91 | rustc-1.90,
+ nodejs (>= 12.22.12)
+ Standards-Version: 3.9.1
+
+diff --git a/debian/build/rules.mk b/debian/build/rules.mk
+index 896150e7..413e34fc 100644
+--- a/debian/build/rules.mk
++++ b/debian/build/rules.mk
+@@ -109,7 +109,7 @@ LLVM_VERSIONS = 22 21 20 19 18
+ DEB_LLVM_VERSION = $(firstword $(foreach llvm_version, $(LLVM_VERSIONS), \
+ $(if $(shell which clang-$(llvm_version)), $(llvm_version))))
+
+-RUSTC_VERSIONS = 1.90
++RUSTC_VERSIONS = 1.91 1.90
+ DEB_RUSTC_VERSION = $(firstword $(foreach rustc_version, $(RUSTC_VERSIONS), \
+ $(if $(shell which rustc-$(rustc_version)), $(rustc_version))))
+
diff --git a/helpers/DATA/firefox/patch_changes/017-modify_sidebar_pins_promo_icons.patch b/helpers/DATA/firefox/patch_changes/017-modify_sidebar_pins_promo_icons.patch
new file mode 100644
index 00000000..8dfee481
--- /dev/null
+++ b/helpers/DATA/firefox/patch_changes/017-modify_sidebar_pins_promo_icons.patch
@@ -0,0 +1,38 @@
+diff --git a/browser/themes/shared/jar.inc.mn b/browser/themes/shared/jar.inc.mn
+index 3a12a7a3..ac1245a9 100644
+--- a/browser/themes/shared/jar.inc.mn
++++ b/browser/themes/shared/jar.inc.mn
+@@ -266,10 +266,10 @@
+ skin/classic/browser/search-indicator-badge-add.svg (../shared/search/search-indicator-badge-add.svg)
+ skin/classic/browser/searchbar.css (../shared/search/searchbar.css)
+
+- skin/classic/browser/sidebar/firefox.svg (../shared/sidebar/firefox.svg)
+- skin/classic/browser/sidebar/foxy.svg (../shared/sidebar/foxy.svg)
+- skin/classic/browser/sidebar/gmail.svg (../shared/sidebar/gmail.svg)
+- skin/classic/browser/sidebar/slack.svg (../shared/sidebar/slack.svg)
++ skin/classic/browser/sidebar/trisquel.svg (../shared/sidebar/trisquel.svg)
++ skin/classic/browser/sidebar/fsf.svg (../shared/sidebar/fsf.svg)
++ skin/classic/browser/sidebar/wikipedia.svg (../shared/sidebar/wikipedia.svg)
++ skin/classic/browser/sidebar/liberachat.svg (../shared/sidebar/liberachat.svg)
+
+ skin/classic/browser/tabbrowser/content-area.css (../shared/tabbrowser/content-area.css)
+ skin/classic/browser/tabbrowser/crashed.svg (../shared/tabbrowser/crashed.svg)
+diff --git a/browser/components/sidebar/sidebar-pins-promo.mjs b/browser/components/sidebar/sidebar-pins-promo.mjs
+index beac7ea4..538ae9aa 100644
+--- a/browser/components/sidebar/sidebar-pins-promo.mjs
++++ b/browser/components/sidebar/sidebar-pins-promo.mjs
+@@ -56,10 +56,10 @@ export default class SidebarPinsPromo extends MozLitElement {
+ this.launcherObserver = new MutationObserver(() => this.requestUpdate());
+ }
+ #icons = [
+- { name: "firefox", src: "chrome://browser/skin/sidebar/firefox.svg" },
+- { name: "slack", src: "chrome://browser/skin/sidebar/slack.svg" },
+- { name: "foxy", src: "chrome://browser/skin/sidebar/foxy.svg" },
+- { name: "gmail", src: "chrome://browser/skin/sidebar/gmail.svg" },
++ { name: "trisquel", src: "chrome://browser/skin/sidebar/trisquel.svg" },
++ { name: "liberachat", src: "chrome://browser/skin/sidebar/liberachat.svg" },
++ { name: "fsf", src: "chrome://browser/skin/sidebar/fsf.svg" },
++ { name: "wikipedia", src: "chrome://browser/skin/sidebar/wikipedia.svg" },
+ ];
+
+ connectedCallback() {
diff --git a/helpers/DATA/firefox/patch_changes/018-adjust_wallpapers_abrowser.patch b/helpers/DATA/firefox/patch_changes/018-adjust_wallpapers_abrowser.patch
new file mode 100644
index 00000000..d582d489
--- /dev/null
+++ b/helpers/DATA/firefox/patch_changes/018-adjust_wallpapers_abrowser.patch
@@ -0,0 +1,28 @@
+diff --git a/browser/extensions/newtab/lib/Wallpapers/WallpaperFeed.sys.mjs b/browser/extensions/newtab/lib/Wallpapers/WallpaperFeed.sys.mjs
+index 72df22b3..24f2f807 100644
+--- a/browser/extensions/newtab/lib/Wallpapers/WallpaperFeed.sys.mjs
++++ b/browser/extensions/newtab/lib/Wallpapers/WallpaperFeed.sys.mjs
+@@ -156,7 +156,9 @@ export class WallpaperFeed {
+ ...record,
+ ...(record.attachment
+ ? {
+- wallpaperUrl: `${baseAttachmentURL}${record.attachment.location}`,
++ wallpaperUrl: record.attachment.location.includes("trisquel")
++ ? `https://trisquel.cmxsl.org/newtab/${record.attachment.filename.replace(".avif", ".webp")}`
++ : `${baseAttachmentURL}${record.attachment.location}`,
+ }
+ : {}),
+ background_position: record.background_position || "center",
+diff --git a/services/settings/remote-settings.sys.mjs b/services/settings/remote-settings.sys.mjs
+index 2330fb01..2c4062d1 100644
+--- a/services/settings/remote-settings.sys.mjs
++++ b/services/settings/remote-settings.sys.mjs
+@@ -301,7 +301,7 @@ function remoteSettingsFunction() {
+ bucketName: bucket,
+ signerName,
+ });
+- if (client.verifySignature) {
++ if (client.verifySignature && collection!== "newtab-wallpapers-v2") {
+ lazy.console.debug(
+ `${identifier}: Verify signature of bundled changeset`
+ );
diff --git a/helpers/DATA/firefox/ui_branding/build.json b/helpers/DATA/firefox/ui_branding/build.json
new file mode 100644
index 00000000..d51c79df
--- /dev/null
+++ b/helpers/DATA/firefox/ui_branding/build.json
@@ -0,0 +1,72 @@
+{
+ "1d43f5a1-64bd-4ad4-b825-88a89878662f": {
+ "title": "trisquel-abe-01",
+ "theme": "dark",
+ "attachment": {
+ "hash": "962073af456fd63c6fc9b11dadbef724a56b223e04a7136f87e9b670f2b9283d",
+ "size": 62524,
+ "filename": "trisquel-abe-01.avif",
+ "location": "main-workspace/newtab-wallpapers-v2/trisquel-abe-01.avif",
+ "mimetype": "image/avif"
+ },
+ "background_position": "bottom right"
+ },
+ "2bf99683-cde8-438b-9f8e-a1222dc7f59c": {
+ "title": "trisquel-abe-02",
+ "theme": "light",
+ "attachment": {
+ "hash": "e3363cf5554c98e1243434ee047de9c31ddc3060355a55ce7b3cecd977f379ab",
+ "size": 72574,
+ "filename": "trisquel-abe-02.avif",
+ "location": "main-workspace/newtab-wallpapers-v2/trisquel-abe-02.avif",
+ "mimetype": "image/avif"
+ },
+ "background_position": "bottom right"
+ },
+ "2e468f89-ac6a-474f-a789-5de0be601887": {
+ "title": "trisquel-abe-03",
+ "theme": "dark",
+ "attachment": {
+ "hash": "3d6687928a6eeee6bd9f52ef2fae115ddfdcf974a832cce2286b37c642c0ede7",
+ "size": 48020,
+ "filename": "trisquel-abe-03.avif",
+ "location": "main-workspace/newtab-wallpapers-v2/trisquel-abe-03.avif",
+ "mimetype": "image/avif"
+ },
+ "background_position": "bottom right"
+ },
+ "429c288c-8d92-4baa-aefb-a04719882454": {
+ "title": "trisquel-abe-04",
+ "theme": "light",
+ "attachment": {
+ "hash": "f6b225b3f091dd556040028e758d143cbcb4d52d4e43ede3a2a367f44505993f",
+ "size": 25226,
+ "filename": "trisquel-abe-04.avif",
+ "location": "main-workspace/newtab-wallpapers-v2/trisquel-abe-04.avif",
+ "mimetype": "image/avif"
+ },
+ "background_position": "bottom right"
+ },
+ "451090be-cdf1-49fc-b1f3-bd2f3b4ac34d": {
+ "title": "trisquel-aramo",
+ "theme": "dark",
+ "attachment": {
+ "hash": "8c9ae9eb2063b763c737cd795af0f7b8883b43b2519d455b4097462ba6f4ad70",
+ "size": 196288,
+ "filename": "trisquel-aramo.avif",
+ "location": "main-workspace/newtab-wallpapers-v2/trisquel-aramo.avif",
+ "mimetype": "image/avif"
+ }
+ },
+ "62aa72d9-b9f3-4f29-88f5-5120ee004e7c": {
+ "title": "trisquel-ecne",
+ "theme": "dark",
+ "attachment": {
+ "hash": "6a233237277c7cdc3a1078f250f1ae21576ceedec9d0abbe33be9f93add25355",
+ "size": 110186,
+ "filename": "trisquel-ecne.avif",
+ "location": "main-workspace/newtab-wallpapers-v2/trisquel-ecne.avif",
+ "mimetype": "image/avif"
+ }
+ }
+}
\ No newline at end of file
diff --git a/helpers/DATA/firefox/ui_branding/debranding/assets/puzzle-fox.svg b/helpers/DATA/firefox/ui_branding/debranding/assets/puzzle-fox.svg
new file mode 100644
index 00000000..b4ba9bcf
--- /dev/null
+++ b/helpers/DATA/firefox/ui_branding/debranding/assets/puzzle-fox.svg
@@ -0,0 +1,81 @@
+
+
+
+
diff --git a/helpers/DATA/firefox/ui_branding/debranding/assets/trisquel_qr.png b/helpers/DATA/firefox/ui_branding/debranding/assets/trisquel_qr.png
new file mode 100644
index 00000000..d6e08c71
Binary files /dev/null and b/helpers/DATA/firefox/ui_branding/debranding/assets/trisquel_qr.png differ
diff --git a/helpers/DATA/firefox/ui_branding/debranding/content/history-empty.svg b/helpers/DATA/firefox/ui_branding/debranding/content/history-empty.svg
new file mode 100644
index 00000000..1c18635f
--- /dev/null
+++ b/helpers/DATA/firefox/ui_branding/debranding/content/history-empty.svg
@@ -0,0 +1,41 @@
+
+
+
+
diff --git a/helpers/DATA/firefox/ui_branding/debranding/content/synced-tabs-empty.svg b/helpers/DATA/firefox/ui_branding/debranding/content/synced-tabs-empty.svg
new file mode 100644
index 00000000..9ba72654
--- /dev/null
+++ b/helpers/DATA/firefox/ui_branding/debranding/content/synced-tabs-empty.svg
@@ -0,0 +1,200 @@
+
+
+
+
diff --git a/helpers/DATA/firefox/ui_branding/debranding/content/synced-tabs-error.svg b/helpers/DATA/firefox/ui_branding/debranding/content/synced-tabs-error.svg
new file mode 100644
index 00000000..501befcf
--- /dev/null
+++ b/helpers/DATA/firefox/ui_branding/debranding/content/synced-tabs-error.svg
@@ -0,0 +1,178 @@
+
+
+
+
diff --git a/helpers/DATA/firefox/ui_branding/sidebar/fsf.svg b/helpers/DATA/firefox/ui_branding/sidebar/fsf.svg
new file mode 100644
index 00000000..3f3bc136
--- /dev/null
+++ b/helpers/DATA/firefox/ui_branding/sidebar/fsf.svg
@@ -0,0 +1,6 @@
+
+
diff --git a/helpers/DATA/firefox/ui_branding/sidebar/liberachat.svg b/helpers/DATA/firefox/ui_branding/sidebar/liberachat.svg
new file mode 100644
index 00000000..c76567fd
--- /dev/null
+++ b/helpers/DATA/firefox/ui_branding/sidebar/liberachat.svg
@@ -0,0 +1,3 @@
+
diff --git a/helpers/DATA/firefox/ui_branding/sidebar/trisquel.svg b/helpers/DATA/firefox/ui_branding/sidebar/trisquel.svg
new file mode 100644
index 00000000..43b8b1cc
--- /dev/null
+++ b/helpers/DATA/firefox/ui_branding/sidebar/trisquel.svg
@@ -0,0 +1,3 @@
+
diff --git a/helpers/DATA/firefox/ui_branding/sidebar/wikipedia.svg b/helpers/DATA/firefox/ui_branding/sidebar/wikipedia.svg
new file mode 100644
index 00000000..cdfca18f
--- /dev/null
+++ b/helpers/DATA/firefox/ui_branding/sidebar/wikipedia.svg
@@ -0,0 +1,3 @@
+
diff --git a/helpers/DATA/firefox/ui_branding/wallpaper-replace.py b/helpers/DATA/firefox/ui_branding/wallpaper-replace.py
new file mode 100644
index 00000000..95942438
--- /dev/null
+++ b/helpers/DATA/firefox/ui_branding/wallpaper-replace.py
@@ -0,0 +1,163 @@
+# Copyright (C) 2026 Luis Guzman
+#
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+
+import json
+import hashlib
+import os
+import time
+import argparse
+import sys
+
+def calculate_sha256_hash(file_path):
+ """
+ Calculates the SHA-256 hash of a physical file.
+ """
+ sha256_hash = hashlib.sha256()
+ with open(file_path, "rb") as f:
+ for byte_block in iter(lambda: f.read(4096), b""):
+ sha256_hash.update(byte_block)
+ return sha256_hash.hexdigest()
+
+def build_step(config_path, output_path):
+ """
+ Step 1: Reads config.json, processes the data, and creates build.json.
+ """
+ print(f"--- Step 1: Building standalone artifact ---")
+
+ if not os.path.exists(config_path):
+ print(f"ERROR: Configuration file '{config_path}' not found.")
+ sys.exit(1)
+
+ with open(config_path, 'r', encoding='utf-8') as f:
+ config = json.load(f)
+
+ build_data = {}
+
+ for item in config.get('replacements',):
+ item_id = item.get('id_to_replace')
+ image_path = item.get('local_image_path')
+ theme = item.get('theme', '').strip()
+
+ if not image_path or not os.path.exists(image_path):
+ print(f"WARNING: Local image not found at '{image_path}' for ID {item_id}. Skipping.")
+ continue
+
+ file_size_bytes = os.path.getsize(image_path)
+ sha256_hash = calculate_sha256_hash(image_path)
+
+ # Get the real file name (e.g., 'trisquel-aramo.webp')
+ real_file_name = os.path.basename(image_path)
+
+ # Create the "disguised" file name to bypass Mozilla's strict schema validation
+ disguised_file_name = real_file_name.replace('.webp', '.avif')
+
+ # Create a 100% schema-compliant entry masking the webp as an avif
+ build_data[item_id] = {
+ "title": real_file_name.replace('.webp', ''),
+ "theme": theme,
+ "attachment": {
+ "hash": sha256_hash,
+ "size": file_size_bytes,
+ "filename": disguised_file_name,
+ "location": f"main-workspace/newtab-wallpapers-v2/{disguised_file_name}",
+ "mimetype": "image/avif" # Masking the mime type for the validator
+ }
+ }
+
+ # Check if the wallpaper is an "abe" one, to position logo accordingly
+ if "abe" in real_file_name.lower():
+ build_data[item_id]["background_position"] = "bottom right"
+
+ # Make sure dark theme is used on trisquel-ecne & trisquel-aramo images
+ if "trisquel-ecne" in real_file_name.lower() or "trisquel-aramo" in real_file_name.lower():
+ build_data[item_id]["theme"] = "dark"
+
+ print(f"Processed: {real_file_name} -> Masked as: {disguised_file_name} -> ID: {item_id}")
+
+ with open(output_path, 'w', encoding='utf-8') as f:
+ json.dump(build_data, f, indent=2, ensure_ascii=False)
+
+ print(f"\nSUCCESS: Generated standalone artifact at '{output_path}'.")
+
+def replace_step(source_path, target_path):
+ """
+ Step 2: Injects the build.json data into the target Firefox JSON database.
+ """
+ print(f"\n--- Step 2: Injecting into target JSON ---")
+
+ if not os.path.exists(source_path):
+ print(f"ERROR: Build source file '{source_path}' not found.")
+ sys.exit(1)
+
+ if not os.path.exists(target_path):
+ print(f"ERROR: Target JSON file '{target_path}' not found.")
+ sys.exit(1)
+
+ with open(source_path, 'r', encoding='utf-8') as f:
+ build_data = json.load(f)
+
+ with open(target_path, 'r', encoding='utf-8') as f:
+ target_db = json.load(f)
+
+ current_timestamp = int(time.time() * 1000)
+ modified_count = 0
+
+ for item in target_db.get('data',):
+ item_id = item.get('id')
+
+ if item_id in build_data:
+ new_data = build_data[item_id]
+
+ # Wipe old custom keys if they exist from previous tests
+ item.pop('wallpaperUrl', None)
+
+ # Apply schema-compliant data
+ item['attachment'] = new_data['attachment']
+ item['title'] = new_data['title']
+ item['schema'] = current_timestamp
+ item['last_modified'] = current_timestamp
+
+ if new_data.get('theme'):
+ item['theme'] = new_data['theme']
+
+ # Apply background_position if it exists in build_data
+ if new_data.get('background_position'):
+ item['background_position'] = new_data['background_position']
+
+ print(f"Updated ID: {item_id} with file '{new_data['attachment']['filename']}'")
+ modified_count += 1
+
+ if modified_count > 0:
+ target_db['timestamp'] = current_timestamp
+ with open(target_path, 'w', encoding='utf-8') as f:
+ json.dump(target_db, f, indent=2, ensure_ascii=False)
+ print(f"\nSUCCESS: Modified {modified_count} entries in '{target_path}'.")
+ else:
+ print("\nWARNING: No matching IDs found in the target JSON to replace.")
+
+def main():
+ parser = argparse.ArgumentParser(description="Firefox Newtab Wallpaper Injection Tool")
+ parser.add_argument('--config', type=str, nargs='?', const='./config.json', help="Step 1: Path to config.json.")
+ parser.add_argument('--replace', type=str, help="Step 2: Path to target Firefox JSON file to be modified.")
+ parser.add_argument('--source', type=str, default='./build.json', help="Step 2: Path to the standalone build.json.")
+
+ args = parser.parse_args()
+
+ if not args.config and not args.replace:
+ parser.print_help()
+ sys.exit(1)
+
+ if args.config: build_step(args.config, './build.json')
+ if args.replace: replace_step(args.source, args.replace)
+
+if __name__ == "__main__":
+ main()
diff --git a/helpers/DATA/inetutils/patch_changes/000-fix_injection_bug_with_bogus_user_names.patch b/helpers/DATA/inetutils/patch_changes/000-fix_injection_bug_with_bogus_user_names.patch
deleted file mode 100644
index 344d9abd..00000000
--- a/helpers/DATA/inetutils/patch_changes/000-fix_injection_bug_with_bogus_user_names.patch
+++ /dev/null
@@ -1,34 +0,0 @@
-From fd702c02497b2f398e739e3119bed0b23dd7aa7b Mon Sep 17 00:00:00 2001
-From: Paul Eggert
-Date: Tue, 20 Jan 2026 01:10:36 -0800
-Subject: [PATCH] Fix injection bug with bogus user names
-
-Problem reported by Kyu Neushwaistein.
-* telnetd/utility.c (_var_short_name):
-Ignore user names that start with '-' or contain shell metacharacters.
-
-Signed-off-by: Simon Josefsson
----
- telnetd/utility.c | 9 ++++++++-
- 1 file changed, 8 insertions(+), 1 deletion(-)
-
-diff --git a/telnetd/utility.c b/telnetd/utility.c
-index b486226e..c02cd0e6 100644
---- a/telnetd/utility.c
-+++ b/telnetd/utility.c
-@@ -1733,7 +1733,14 @@ _var_short_name (struct line_expander *exp)
- return user_name ? xstrdup (user_name) : NULL;
-
- case 'U':
-- return getenv ("USER") ? xstrdup (getenv ("USER")) : xstrdup ("");
-+ {
-+ /* Ignore user names starting with '-' or containing shell
-+ metachars, as they can cause trouble. */
-+ char const *u = getenv ("USER");
-+ return xstrdup ((u && *u != '-'
-+ && !u[strcspn (u, "\t\n !\"#$&'()*;<=>?[\\^`{|}~")])
-+ ? u : "");
-+ }
-
- default:
- exp->state = EXP_STATE_ERROR;
diff --git a/helpers/DATA/inetutils/patch_changes/001-telnetd_sanitize_all_variable_expansions.patch b/helpers/DATA/inetutils/patch_changes/001-telnetd_sanitize_all_variable_expansions.patch
deleted file mode 100644
index 8b4653cf..00000000
--- a/helpers/DATA/inetutils/patch_changes/001-telnetd_sanitize_all_variable_expansions.patch
+++ /dev/null
@@ -1,78 +0,0 @@
-From ccba9f748aa8d50a38d7748e2e60362edd6a32cc Mon Sep 17 00:00:00 2001
-From: Simon Josefsson
-Date: Tue, 20 Jan 2026 14:02:39 +0100
-Subject: [PATCH] telnetd: Sanitize all variable expansions
-
-* telnetd/utility.c (sanitize): New function.
-(_var_short_name): Use it for all variables.
----
- telnetd/utility.c | 32 ++++++++++++++++++--------------
- 1 file changed, 18 insertions(+), 14 deletions(-)
-
-diff --git a/telnetd/utility.c b/telnetd/utility.c
-index c02cd0e6..b21ad961 100644
---- a/telnetd/utility.c
-+++ b/telnetd/utility.c
-@@ -1684,6 +1684,17 @@ static void _expand_cond (struct line_expander *exp);
- static void _skip_block (struct line_expander *exp);
- static void _expand_block (struct line_expander *exp);
-
-+static char *
-+sanitize (const char *u)
-+{
-+ /* Ignore values starting with '-' or containing shell metachars, as
-+ they can cause trouble. */
-+ if (u && *u != '-' && !u[strcspn (u, "\t\n !\"#$&'()*;<=>?[\\^`{|}~")])
-+ return u;
-+ else
-+ return "";
-+}
-+
- /* Expand a variable referenced by its short one-symbol name.
- Input: exp->cp points to the variable name.
- FIXME: not implemented */
-@@ -1710,13 +1721,13 @@ _var_short_name (struct line_expander *exp)
- return xstrdup (timebuf);
-
- case 'h':
-- return xstrdup (remote_hostname);
-+ return xstrdup (sanitize (remote_hostname));
-
- case 'l':
-- return xstrdup (local_hostname);
-+ return xstrdup (sanitize (local_hostname));
-
- case 'L':
-- return xstrdup (line);
-+ return xstrdup (sanitize (line));
-
- case 't':
- q = strchr (line + 1, '/');
-@@ -1724,23 +1735,16 @@ _var_short_name (struct line_expander *exp)
- q++;
- else
- q = line;
-- return xstrdup (q);
-+ return xstrdup (sanitize (q));
-
- case 'T':
-- return terminaltype ? xstrdup (terminaltype) : NULL;
-+ return terminaltype ? xstrdup (sanitize (terminaltype)) : NULL;
-
- case 'u':
-- return user_name ? xstrdup (user_name) : NULL;
-+ return user_name ? xstrdup (sanitize (user_name)) : NULL;
-
- case 'U':
-- {
-- /* Ignore user names starting with '-' or containing shell
-- metachars, as they can cause trouble. */
-- char const *u = getenv ("USER");
-- return xstrdup ((u && *u != '-'
-- && !u[strcspn (u, "\t\n !\"#$&'()*;<=>?[\\^`{|}~")])
-- ? u : "");
-- }
-+ return xstrdup (sanitize (getenv ("USER")));
-
- default:
- exp->state = EXP_STATE_ERROR;
diff --git a/helpers/DATA/libreoffice/debian-rules_7.3.patch b/helpers/DATA/libreoffice/patch_changes/000-debian-rules_7.3.patch
similarity index 100%
rename from helpers/DATA/libreoffice/debian-rules_7.3.patch
rename to helpers/DATA/libreoffice/patch_changes/000-debian-rules_7.3.patch
diff --git a/helpers/DATA/libreoffice/patch_changes/001-disable_tests_pyuno_trisquel.patch b/helpers/DATA/libreoffice/patch_changes/001-disable_tests_pyuno_trisquel.patch
new file mode 100644
index 00000000..4dbd438c
--- /dev/null
+++ b/helpers/DATA/libreoffice/patch_changes/001-disable_tests_pyuno_trisquel.patch
@@ -0,0 +1,34 @@
+diff --git a/debian/control b/debian/control
+index b0f95119..073ece8e 100644
+--- a/debian/control
++++ b/debian/control
+@@ -196,9 +196,7 @@ Build-Depends-Arch: at-spi2-core [amd64 arm64 armhf] ,
+ poppler-data [amd64 arm64 armhf] ,
+ pstoedit [amd64 arm64 armhf] ,
+ python3-lxml [!ppc64el !riscv64 !s390x] ,
+- python3-pip [!ppc64el !riscv64 !s390x] ,
+ python3-setuptools [!ppc64el !riscv64 !s390x] ,
+- python3-venv [!ppc64el !riscv64 !s390x] ,
+ qt5-qmake,
+ qtbase5-dev,
+ qtbase5-dev-tools,
+diff --git a/pyuno/qa/pytests/testimports.py b/pyuno/qa/pytests/testimports.py
+index 29b14736..85ed1a53 100644
+--- a/pyuno/qa/pytests/testimports.py
++++ b/pyuno/qa/pytests/testimports.py
+@@ -33,6 +33,7 @@ class ImportsTest(unittest.TestCase):
+ print(str(ssl), file=devnull)
+
+ # tdf#162786: make sure importing pip works on all platforms
++ @unittest.skip("Test disabled on Trisquel")
+ def test_pip_import(self):
+ import pip
+
+@@ -40,6 +41,7 @@ class ImportsTest(unittest.TestCase):
+ with open(os.devnull, "w") as devnull:
+ print(str(pip), file=devnull)
+
++ @unittest.skip("Test disabled on Trisquel")
+ def test_venv_import(self):
+ import venv
+
diff --git a/helpers/DATA/linux-hwe-6.8/000-silent-accept-firmware.patch b/helpers/DATA/linux-hwe-6.8/000-silent-accept-firmware.patch
index d0c1e834..8c0ac4a0 100644
--- a/helpers/DATA/linux-hwe-6.8/000-silent-accept-firmware.patch
+++ b/helpers/DATA/linux-hwe-6.8/000-silent-accept-firmware.patch
@@ -158,19 +158,20 @@ diff --color -Nru a/drivers/gpu/drm/amd/amdgpu/amdgpu_kms.c b/drivers/gpu/drm/am
}
/* SMC */
-diff --color -Nru a/drivers/gpu/drm/amd/amdgpu/amdgpu_psp.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_psp.c
---- a/drivers/gpu/drm/amd/amdgpu/amdgpu_psp.c 2023-03-09 11:48:45.000000000 -0600
-+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_psp.c 2023-03-09 19:35:41.949114270 -0600
-@@ -627,8 +627,7 @@
- */
+diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_psp.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_psp.c
+index 6ac35313..932e5d49 100644
+--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_psp.c
++++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_psp.c
+@@ -676,8 +676,7 @@ psp_cmd_submit_buf(struct psp_context *psp,
if (!skip_unsupport && (psp->cmd_buf_mem->resp.status || !timeout) && !ras_intr) {
if (ucode)
-- DRM_WARN("failed to load ucode %s(0x%X) ",
-- amdgpu_ucode_name(ucode->ucode_id), ucode->ucode_id);
-+ DRM_WARN("failed to load ucode");
- DRM_WARN("psp gfx command %s(0x%X) failed and response status is (0x%X)\n",
+ dev_warn(psp->adev->dev,
+- "failed to load ucode %s(0x%X) ",
+- amdgpu_ucode_name(ucode->ucode_id), ucode->ucode_id);
++ "failed to load ucode");
+ dev_warn(psp->adev->dev,
+ "psp gfx command %s(0x%X) failed and response status is (0x%X)\n",
psp_gfx_cmd_name(psp->cmd_buf_mem->cmd_id), psp->cmd_buf_mem->cmd_id,
- psp->cmd_buf_mem->resp.status);
diff --color -Nru a/drivers/gpu/drm/amd/amdgpu/amdgpu_uvd.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_uvd.c
--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_uvd.c 2022-07-31 16:03:01.000000000 -0500
+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_uvd.c 2023-03-09 19:38:05.801817530 -0600
@@ -1503,16 +1504,19 @@ diff --color -Nru a/drivers/net/wireless/realtek/rtlwifi/rtl8821ae/sw.c b/driver
err = request_firmware_nowait(THIS_MODULE, 1,
wowlan_fw_name,
rtlpriv->io.dev, GFP_KERNEL, hw,
-diff -Nru --color a/drivers/gpu/drm/amd/amdgpu/amdgpu_discovery.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_discovery.c
---- a/drivers/gpu/drm/amd/amdgpu/amdgpu_discovery.c 2023-03-13 07:14:05.000000000 +0000
-+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_discovery.c 2023-03-13 07:46:23.778827386 +0000
-@@ -223,8 +223,7 @@
-
- r = request_firmware(&fw, fw_name, adev->dev);
+diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_discovery.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_discovery.c
+index 36d0deef..5f03247f 100644
+--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_discovery.c
++++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_discovery.c
+@@ -289,9 +289,9 @@ static int amdgpu_discovery_read_binary_from_file(struct amdgpu_device *adev,
+ r = firmware_request_nowarn(&fw, fw_name, adev->dev);
if (r) {
-- dev_err(adev->dev, "can't load firmware \"%s\"\n",
-- fw_name);
-+ dev_err(adev->dev, "can't load firmware\n");
+ if (amdgpu_discovery == 2)
+- dev_err(adev->dev, "can't load firmware \"%s\"\n", fw_name);
++ dev_err(adev->dev, "can't load firmware\n");
+ else
+- drm_info(&adev->ddev, "Optional firmware \"%s\" was not found\n", fw_name);
++ drm_info(&adev->ddev, "Optional firmware was not found\n");
return r;
}
diff --git a/helpers/DATA/thunderbird/patches_changes/001-set_export_to_mobile_l10n.patch b/helpers/DATA/thunderbird/patches_changes/001-set_export_to_mobile_l10n.patch
index fd94aa22..0f5fd2b7 100644
--- a/helpers/DATA/thunderbird/patches_changes/001-set_export_to_mobile_l10n.patch
+++ b/helpers/DATA/thunderbird/patches_changes/001-set_export_to_mobile_l10n.patch
@@ -24,7 +24,7 @@ diff --git a/l10n/cs/mail/messenger/preferences/preferences.ftl b/l10n/cs/mail/m
index 67947ec7..ca2c1194 100644
--- a/l10n/cs/mail/messenger/preferences/preferences.ftl
+++ b/l10n/cs/mail/messenger/preferences/preferences.ftl
-@@ -895,12 +895,12 @@ sync-disconnected-turn-on-sync = Zapnout synchronizaci…
+@@ -1054,12 +1054,12 @@ sync-disconnected-turn-on-sync = Zapnout synchronizaci…
## Mobile QR Export Pane
@@ -33,9 +33,9 @@ index 67947ec7..ca2c1194 100644
qr-export-description = Rychle přeneste nastavení účtu z počítače do mobilu vygenerováním QR kódu. Vyberte, které účty chcete zahrnout, rozhodněte, zda chcete přenést heslo, a naskenujte kód pomocí mobilního zařízení. Rychlé, bezpečné a jednoduché.
qr-export-get-app = Ještě nemáte { -brand-product-name } v mobilu? Stáhněte si ji z Google Play
qr-export-create = Vytvoření QR kódu pro export účtů
- qr-export-select-accounts = Vyberte, které účty chcete exportovat:
+ qr-export-select-accounts = Vyberte, které účty se mají exportovat:
-qr-export-no-accounts = Nevidíte všechny své účty? Některé účty mohou být zakázány, protože je { -brand-product-name } pro Android nepodporuje. Podpora
-+qr-export-no-accounts = Nevidíte všechny své účty? Některé účty mohou být zakázány, protože je pro Android nepodporuje. Podpora
++qr-export-no-accounts = Nevidíte všechny své účty? Některé účty mohou být zakázány, protože je pro Android nepodporuje. Podpora
qr-export-accounts-legend = E-mailové účty
qr-export-select-all-accounts = Vybrat vše
qr-export-security-legend = Zabezpečení
diff --git a/helpers/DATA/yt-dlp/patch_changes/002-make_cookies_parsing_more_lentient_on_python3.12.patch b/helpers/DATA/yt-dlp/patch_changes/002-make_cookies_parsing_more_lentient_on_python3.12.patch
deleted file mode 100644
index 895c8f1a..00000000
--- a/helpers/DATA/yt-dlp/patch_changes/002-make_cookies_parsing_more_lentient_on_python3.12.patch
+++ /dev/null
@@ -1,35 +0,0 @@
-diff --git a/yt_dlp/cookies.py b/yt_dlp/cookies.py
-index 8c05a09f..8b6f6613 100644
---- a/yt_dlp/cookies.py
-+++ b/yt_dlp/cookies.py
-@@ -1238,15 +1238,27 @@ def load(self, data):
- else:
- value, _ = self.value_decode(value)
-
-- morsel[key] = value
-+ try:
-+ morsel[key] = value
-+ except http.cookies.CookieError:
-+ # Lenient mode: ignore invalid attributes
-+ pass
-
- elif is_attribute:
- morsel = None
-
- elif value is not None:
-- morsel = self.get(key, http.cookies.Morsel())
-+ morsel = self.get(key) or http.cookies.Morsel()
- real_value, coded_value = self.value_decode(value)
-- morsel.set(key, real_value, coded_value)
-+ try:
-+ morsel.set(key, real_value, coded_value)
-+ except http.cookies.CookieError:
-+ # Python 3.12+ rejects control characters in cookies.
-+ # LenientSimpleCookie should accept them (yt-dlp tests expect this), so
-+ # bypass Morsel.set() validation, assign underlying fields to read-only props.
-+ morsel._key = key
-+ morsel._value = real_value
-+ morsel._coded_value = coded_value
- self[key] = morsel
-
- else:
diff --git a/helpers/make-apt-mirror b/helpers/make-apt-mirror
index 5962b05f..0ed99347 100644
--- a/helpers/make-apt-mirror
+++ b/helpers/make-apt-mirror
@@ -18,12 +18,12 @@
# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
#
-VERSION=5
+VERSION=6
. ./config
# Set version number due to source origin change
-export FULLVERSION="$(sed 's|ubuntu0.22.04.1||' <<< $FULLVERSION)"
+export FULLVERSION="$(sed -E 's/^(.*)ubuntu([^+]+)(\+.*)$/\1\3~ubuntu\2/' <<< $FULLVERSION)"
cp $DATA/Trisquel-mirror.list debian/
@@ -54,7 +54,6 @@ index e9c85e9..b6c1c97 100755
EOF
changelog "Added config and update manpage for Trisquel."
-head -n1 debian/changelog | grep -q ubuntu && echo "error: update upstream version" && exit
package
diff --git a/helpers/make-devscripts b/helpers/make-devscripts
index e907dc8b..acf2310f 100644
--- a/helpers/make-devscripts
+++ b/helpers/make-devscripts
@@ -18,7 +18,7 @@
# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
#
-VERSION=2
+VERSION=3
. ./config
@@ -26,7 +26,6 @@ VERSION=2
sed -i 's|UbuntuDistroInfo|TrisquelDistroInfo|' scripts/debchange.pl
#Prevent debian test failing.
-sed -i '/verifyGuessedDistribution/s|buster-backports|bookworm-backports|g' test/test_debchange
rm scripts/devscripts/test/test_flake8.py
changelog "Make use of TrisquelDistroInfo from distro-info package."
diff --git a/helpers/make-expat b/helpers/make-expat
index 711f5341..4ed5023c 100644
--- a/helpers/make-expat
+++ b/helpers/make-expat
@@ -23,15 +23,14 @@
# such packages from Debian in order to build the required udeb packages.
##
-VERSION=5
+VERSION=6
NETINST=true
. ./config
#FIXME:T12
# Set version number due to source origin change
-export FULLVERSION="$(sed 's|ubuntu0.6||' <<< $FULLVERSION)"
+export FULLVERSION="$(sed -E 's/^(.*)ubuntu([^+]+)(\+.*)$/\1\3~ubuntu\2/' <<< $FULLVERSION)"
changelog "Fetch and build as udeb dependency for debian-installer."
-head -n1 debian/changelog | grep -q ubuntu && echo "> error: update upstream version" && exit
package
diff --git a/helpers/make-extra-cmake-modules b/helpers/make-extra-cmake-modules
deleted file mode 100644
index d770f93b..00000000
--- a/helpers/make-extra-cmake-modules
+++ /dev/null
@@ -1,30 +0,0 @@
-#!/bin/sh
-#
-# Copyright (C) 2024 Luis Guzmán
-#
-# This program is free software; you can redistribute it and/or modify
-# it under the terms of the GNU General Public License as published by
-# the Free Software Foundation; either version 2 of the License, or
-# (at your option) any later version.
-#
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-# GNU General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with this program; if not, write to the Free Software
-# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
-#
-
-VERSION=1
-EXTERNAL='deb-src http://ppa.launchpad.net/nextcloud-devs/client/ubuntu $UPSTREAM main'
-REPOKEY="60EE47FBAD3DD469"
-BACKPORT=true
-
-. ./config
-
-
-changelog "Added as a dependency for nextcloud-desktop backport"
-
-package
diff --git a/helpers/make-firefox b/helpers/make-firefox
index 49c42426..6440b799 100644
--- a/helpers/make-firefox
+++ b/helpers/make-firefox
@@ -2,7 +2,7 @@
#
# Copyright (C) 2008-2023 Ruben Rodriguez
# Copyright (C) 2015 Santiago Rodriguez
-# Copyright (C) 2025 Luis Guzman
+# Copyright (C) 2026 Luis Guzman
#
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
@@ -19,12 +19,13 @@
# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
#
-VERSION=129
+VERSION=132
EXTERNAL='deb-src http://ppa.launchpadcontent.net/mozillateam/ppa/ubuntu $UPSTREAM main'
REPOKEY=AEBDF4819BE21867
. ./config
+MAIN_REBRANDING_ENABLED=1
# SHA256 HASHES UPDATES
GLEAN_CONF_RS_INITIAL=$(sha256sum third_party/rust/glean/src/configuration.rs|awk '{print$1}')
# GNUZILLA ADDON REPLACEMENT
@@ -274,6 +275,26 @@ do
/bin/sed -i 's|= Firefox |= |' $i
done
+# Replace sidebar icons
+rm -rf browser/themes/shared/sidebar
+cp -R $DATA/ui_branding/sidebar browser/themes/shared/
+
+python3 $DATA/ui_branding/wallpaper-replace.py --source $DATA/ui_branding/build.json \
+ --replace services/settings/dumps/main/newtab-wallpapers-v2.json
+
+# Graphic Debranding
+cp $DATA/ui_branding/debranding/assets/puzzle-fox.svg browser/extensions/newtab/data/content/assets/puzzle-fox.svg
+## replace multiple firefox qr codes.
+for qr in download-qr-code-var-a.png download-qr-code-var-b.png download-qr-code-var-c.png
+do
+ cp $DATA/ui_branding/debranding/assets/trisquel_qr.png browser/extensions/newtab/data/content/assets/$qr
+done
+## Remove mascot
+for graph in history-empty.svg synced-tabs-empty.svg synced-tabs-error.svg
+do
+ cp $DATA/ui_branding/debranding/content/$graph browser/components/firefoxview/content/$graph
+done
+
# Disable preprocessor
sed 's/_PP//' -i browser/branding/branding-common.mozbuild
#Prevent duplicated values.
@@ -287,6 +308,7 @@ MOZ_ENABLE_BREAKPAD = 0
MOZ_ENABLE_TELEMETRY = 0
EOF
+main_rebranding() {
SEDSCRIPT="
s|Updates from { -vendor-short-name } and { -brand-product-name }|Updates from { -vendor-short-name }|;
s/Try Firefox/Try Abrowser/g;
@@ -322,8 +344,11 @@ find l10n -type f -not -iregex '.*changelog.*' \
sed 's/Firefox/Abrowser/' -i debian/control.in \
browser/locales/en-US/chrome/overrides/appstrings.properties
+}
+# Useful when trying to catch patch issues faster.
+[ "$MAIN_REBRANDING_ENABLED" = 1 ] && main_rebranding
-sed s/ubuntu/trisquel/g debian/distribution.ini -i
+sed "s/ubuntu/trisquel/g" -i debian/distribution.ini
sed "s/ubuntu_version/trisquel_version/; s/Ubuntu 10.10/Trisquel $REVISION/; s/1010/40/" -i debian/firefox.postinst.in
# Delete stuff we don't use and that may contain trademaked logos
diff --git a/helpers/make-gnome-user-docs b/helpers/make-gnome-user-docs
index 2863796f..acca1535 100644
--- a/helpers/make-gnome-user-docs
+++ b/helpers/make-gnome-user-docs
@@ -1,6 +1,7 @@
#!/bin/sh
#
# Copyright (C) 2020 Rubén Rodríguez
+# Copyright (C) 2026 Denis 'GNUtoo' Carikli
#
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
@@ -17,15 +18,20 @@
# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
#
-VERSION=2
+VERSION=3
COMPONENT=main
. ./config
sed '/ubuntu-docs/d' -i debian/control*
+
+# Ubuntu overrides all the files defined in the DO_NOT_INSTALL
+# variable by deleting them. Since we don't use ubuntu-docs, we do
+# want these files.
+sed '/rm \$(DO_NOT_INSTALL); \\/d' -i debian/rules
+
touch AUTHORS
changelog "Removed ubuntu-docs dependency"
package
-
diff --git a/helpers/make-inetutils b/helpers/make-inetutils
index f21bbe47..a1517bde 100644
--- a/helpers/make-inetutils
+++ b/helpers/make-inetutils
@@ -17,6 +17,7 @@
# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
#
+BUILD_UNTIL=11.0
VERSION=0
. ./config
@@ -25,8 +26,9 @@ VERSION=0
# Applying these patches is a proactive mitigation effort for known issues and does not
# endorse continued use of telnetd. The patch co-author recommends deprecating it.
-apply_patch_changes
+# Remove patch now applied upstream
-changelog "Apply security patches to mitigate known issues proactively; telnetd is not recommended: avoid in production."
+changelog "Restore build to upstream changes
+Apply security patches to mitigate known issues proactively; telnetd is not recommended: avoid in production."
package
diff --git a/helpers/make-kf6-karchive b/helpers/make-kdsingleapplication
similarity index 66%
rename from helpers/make-kf6-karchive
rename to helpers/make-kdsingleapplication
index d770f93b..854890c0 100644
--- a/helpers/make-kf6-karchive
+++ b/helpers/make-kdsingleapplication
@@ -1,6 +1,6 @@
#!/bin/sh
#
-# Copyright (C) 2024 Luis Guzmán
+# Copyright (C) 2026 Luis Guzmán
#
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
@@ -12,10 +12,6 @@
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
-# You should have received a copy of the GNU General Public License
-# along with this program; if not, write to the Free Software
-# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
-#
VERSION=1
EXTERNAL='deb-src http://ppa.launchpad.net/nextcloud-devs/client/ubuntu $UPSTREAM main'
@@ -24,7 +20,11 @@ BACKPORT=true
. ./config
+#sed -i "s|Utility|Network|" mirall.desktop.in
-changelog "Added as a dependency for nextcloud-desktop backport"
+#Prevent ppc64el arch since qtwebengine is not build for ppc64el.
+sed -i 's|Architecture: any|Architecture: amd64 arm64 armhf i386 mips64el mipsel|g' debian/control
+
+changelog "Backported into Trisquel as nextcloud-desktop client dependency"
package
diff --git a/helpers/make-libreoffice b/helpers/make-libreoffice
index dfa401b0..a49c883f 100644
--- a/helpers/make-libreoffice
+++ b/helpers/make-libreoffice
@@ -1,6 +1,6 @@
#!/bin/sh
#
-# Copyright (C) 2023 Luis Guzmán
+# Copyright (C) 2026 Luis Guzmán
#
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
@@ -17,18 +17,19 @@
# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
#
-VERSION=4
+VERSION=6
EXTERNAL='deb-src http://ppa.launchpad.net/libreoffice/ppa/ubuntu $UPSTREAM main'
REPOKEY="83FBA1751378B444"
BACKPORT=true
. ./config
-patch --no-backup-if-mismatch -p1 < $DATA/debian-rules_7.3.patch
+apply_patch_changes
# Increase CPU usage for amd64 build.
sed -i "/NUM_CPUS=/s|3|7|" debian/rules
-changelog "Backport libreoffice fresh into Trisquel"
+changelog "Disabled python-pip/venv tests for Trisquel
+Backport libreoffice fresh into Trisquel"
package
diff --git a/helpers/make-linux-hwe-6.8 b/helpers/make-linux-hwe-6.8
index c6d62a08..96a4dfe1 100644
--- a/helpers/make-linux-hwe-6.8
+++ b/helpers/make-linux-hwe-6.8
@@ -1,6 +1,6 @@
#!/bin/sh
#
-# Copyright (C) 2025 Luis Guzman
+# Copyright (C) 2026 Luis Guzman
# Copyright (C) 2008-2023 Ruben Rodriguez
# Copyright (C) 2019 David Trudgian
#
@@ -19,7 +19,10 @@
# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
#
-VERSION=34
+# Advice: fixes to 000-silent-accept-firmware.patch could speed up by testing changes
+# disabling deblob in order to apply changes.
+
+VERSION=35
HWEKR=6.8
DI_ENABLED=1
HWE_ENABLED=1
diff --git a/helpers/make-mate-user-admin b/helpers/make-mate-user-admin
index b86424fd..2df890c9 100644
--- a/helpers/make-mate-user-admin
+++ b/helpers/make-mate-user-admin
@@ -17,13 +17,13 @@
# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
#
-VERSION=3
+VERSION=4
EXTERNAL='deb-src http://archive.ubuntu.com/ubuntu noble universe'
. ./config
# Set version number due to source origin change
-export FULLVERSION="$(sed 's|build3||' <<< $FULLVERSION)"
+FULLVERSION=$(sed -E 's/^(.*)build([0-9]+)(\+.*)$/\1\3~build\2/' <<< $FULLVERSION)
# Add cracklib-runtime dependency to debian/control
apply_patch_changes
@@ -31,6 +31,4 @@ apply_patch_changes
changelog "Added cracklib-runtime dependency.
Added custom implementation to use adduser regex for user creation"
-head -n1 debian/changelog | grep -q build && echo "error: update upstream version" && exit
-
package
diff --git a/helpers/make-nano b/helpers/make-nano
index 61875840..4776206e 100644
--- a/helpers/make-nano
+++ b/helpers/make-nano
@@ -23,15 +23,14 @@
# or fetch such packages from Debian in order to build the required udeb packages.
##
-VERSION=1
+VERSION=2
NETINST=true
. ./config
# Set version number due to source origin change
-export FULLVERSION="$(sed 's|ubuntu0.1||' <<< $FULLVERSION)"
+export FULLVERSION="$(sed -E 's/^(.*)ubuntu([^+]+)(\+.*)$/\1\3~ubuntu\2/' <<< $FULLVERSION)"
changelog "Fetch and build as udeb dependency for debian-installer."
-head -n1 debian/changelog | grep -q ubuntu && echo "error: update upstream version" && exit
changelog "Rebuild upstream to get udeb dependency for debian-installer."
package
diff --git a/helpers/make-ncurses b/helpers/make-ncurses
index 7f494e08..2a0fe91c 100644
--- a/helpers/make-ncurses
+++ b/helpers/make-ncurses
@@ -23,19 +23,18 @@
# such packages from Debian in order to build the required udeb packages.
##
-VERSION=2
+VERSION=3
NETINST=true
BUILD_UNTIL=11.0
. ./config
#FIXME:T12
# Set version number due to source origin change
-export FULLVERSION="$(sed 's|ubuntu0.1||' <<< $FULLVERSION)"
+FULLVERSION="$(sed -E 's/^(.*)ubuntu([^+]+)(\+.*)$/\1\3~ubuntu\2/' <<< $FULLVERSION)"
# Apply Debian#1035621: ncurses: FTBFS: dh_autoreconf error on various architectures
patch --no-backup-if-mismatch -p1 < $DATA/bbd46b3955647bf401325951d9f31db054e8d889.patch
changelog "Rebuild as udeb dependency for debian-installer and patch dh_autoreconf."
-head -n1 debian/changelog | grep -q ubuntu && echo "error: update upstream version" && exit
package
diff --git a/helpers/make-openssh b/helpers/make-openssh
index e914e1ad..b9baf347 100644
--- a/helpers/make-openssh
+++ b/helpers/make-openssh
@@ -17,20 +17,19 @@
# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
#
-VERSION=9
+VERSION=10
NETINST=true
. ./config
#FIXME:T12
# Set version number due to source origin change
-export FULLVERSION="$(sed 's|ubuntu0.13||' <<< $FULLVERSION)"
+FULLVERSION="$(sed -E 's/^(.*)ubuntu([^+]+)(\+.*)$/\1\3~ubuntu\2/' <<< $FULLVERSION)"
sed 's:Ubuntu:Trisquel\ GNU/Linux:g' -i debian/rules
sed "s|^SSH_EXTRAVERSION.*|SSH_EXTRAVERSION := Trisquel_GNU/Linux_$REVISION-$VERSION|" -i debian/rules
changelog "Rebranded for Trisquel"
-head -n1 debian/changelog | grep -q ubuntu && echo "error: update upstream version" && exit
package
diff --git a/helpers/make-pkg-kde-tools b/helpers/make-pkg-kde-tools
deleted file mode 100644
index 68a08f70..00000000
--- a/helpers/make-pkg-kde-tools
+++ /dev/null
@@ -1,32 +0,0 @@
-#!/bin/sh
-#
-# Copyright (C) 2024 Luis Guzmán
-#
-# This program is free software; you can redistribute it and/or modify
-# it under the terms of the GNU General Public License as published by
-# the Free Software Foundation; either version 2 of the License, or
-# (at your option) any later version.
-#
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-# GNU General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with this program; if not, write to the Free Software
-# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
-#
-
-VERSION=3
-EXTERNAL='deb-src http://ppa.launchpad.net/nextcloud-devs/client/ubuntu $UPSTREAM main'
-REPOKEY="60EE47FBAD3DD469"
-BACKPORT=true
-
-. ./config
-
-# Add trisquel as maintainer to pass checks on custom packages.
-patch_p1 $DATA/000_add_trisquel_maintainer.patch
-
-changelog "Upgrade backport as a dependency for nextcloud-desktop"
-
-package
diff --git a/helpers/make-python-apt b/helpers/make-python-apt
index c53eae27..14f628f9 100644
--- a/helpers/make-python-apt
+++ b/helpers/make-python-apt
@@ -23,14 +23,14 @@
# a new release of the 'debian-installer' also ships the latest mirror
# list available on the resulting netinstall (mini.iso) image.
-VERSION=11
+VERSION=13
COMPONENT=main
#Be aware to not pull/build before publish date on T12.
. ./config
# Fix version number due to early release.
-export FULLVERSION="$(sed 's|ubuntu4||' <<< $FULLVERSION)"
+FULLVERSION="$(sed -E 's/^(.*)ubuntu([^+]+)(\+.*)$/\1\3~ubuntu\2/' <<< $FULLVERSION)"
# Use git Mirrors.masterlist as source.
Mirrors_masterlist=$(mktemp)
@@ -92,7 +92,6 @@ EOF
export DEB_BUILD_OPTIONS=nocheck
changelog "Compiled for Trisquel"
-head -n1 debian/changelog | grep -q ubuntu && echo "error: update FULLVERSION value" && exit
package
diff --git a/helpers/make-screen b/helpers/make-screen
index 49ec864c..0c726cc2 100644
--- a/helpers/make-screen
+++ b/helpers/make-screen
@@ -23,10 +23,12 @@
# or fetch such packages from Debian in order to build the required udeb packages.
##
-VERSION=0
+VERSION=1
NETINST=true
. ./config
+# Fix version number due to early release.
+FULLVERSION="$(sed -E 's/^(.*)ubuntu([^+]+)(\+.*)$/\1\3~ubuntu\2/' <<< $FULLVERSION)"
changelog "Rebuild upstream to get udeb dependency for debian-installer."
package
diff --git a/helpers/make-thunderbird b/helpers/make-thunderbird
index dd439c1e..cd15d0a5 100644
--- a/helpers/make-thunderbird
+++ b/helpers/make-thunderbird
@@ -1,6 +1,6 @@
#!/bin/bash
#
-# Copyright (C) 2025 Luis Guzmán
+# Copyright (C) 2026 Luis Guzmán
# Copyright (C) 2020 Ruben Rodriguez
# Copyright (C) 2019 David Trudgian
#
@@ -19,12 +19,14 @@
# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
#
-VERSION=26
-EXTERNAL='deb-src http://ppa.launchpadcontent.net/mozillateam/ppa/ubuntu $UPSTREAM main'
+VERSION=27
+#EXTERNAL='deb-src http://ppa.launchpadcontent.net/mozillateam/ppa/ubuntu $UPSTREAM main'
+EXTERNAL='deb-src http://ppa.si-n.cc/mozillateam/ubuntu/ppa/ $UPSTREAM main'
REPOKEY=AEBDF4819BE21867
. ./config
+MAIN_REBRANDING_ENABLED=1
# Get initial SHA256 hashes.
SHA256_F9=$(sha256sum comm/third_party/rust/glean/src/configuration.rs|awk '{print$1}')
@@ -188,6 +190,7 @@ MOZ_WANT_UNIT_TESTS = 0
MOZ_ENABLE_BREAKPAD = 0
EOF
+main_rebranding() {
# Replace Thunderbird branding
find -type d -name '*thunderbird*' | xargs rename s/thunderbird/icedove/
find -type f -name '*thunderbird*' | xargs rename s/thunderbird/icedove/
@@ -247,8 +250,8 @@ grep -rl 'https://www.icedove.net/donate/' comm/ | xargs -r \
sed -i 's|https://www.icedove.net/donate/.*"|https://trisquel.info/donate/"|'
grep -rl 'https://www.icedove.net/donate/' comm/ | xargs -r \
sed -i 's|https://www.icedove.net/donate/|https://trisquel.info/donate/|'
-grep -rl 'https://updates.icedove.net/' comm/ | xargs -r \
- sed -i '/"URL":/s|https://updates.icedove.net/.*/appeal/.*"|https://trisquel.info/donate/"|'
+#grep -rl 'https://updates.icedove.net/' comm/ | xargs -r \
+# sed -i '/"URL":/s|https://updates.icedove.net/.*/appeal/.*"|https://trisquel.info/donate/"|'
grep -rl 'https://support.mozilla.org/products/icedove' comm/ | xargs -r \
sed -i 's|https://support.mozilla.org/products/icedove.*"|https://trisquel.info/wiki/icedove"|'
grep -rl 'https://support.mozilla.org/products/icedove' comm/ | xargs -r \
@@ -362,6 +365,10 @@ cat << EOF > comm/mail/branding/nightly/locales/en-US/brand.dtd
EOF
+}
+
+# Useful when trying to catch patch issues faster, careful with mixed branding issues.
+[ "$MAIN_REBRANDING_ENABLED" = 1 ] && main_rebranding
debian/rules debian/control
touch -d "yesterday" debian/control
diff --git a/helpers/make-yt-dlp b/helpers/make-yt-dlp
index 02b9bd6e..4b74cd92 100644
--- a/helpers/make-yt-dlp
+++ b/helpers/make-yt-dlp
@@ -17,7 +17,7 @@
# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
#
-VERSION=3
+VERSION=4
EXTERNAL='deb-src http://deb.debian.org/debian sid main'
REPOKEY=6ED0E7B82643E131
BACKPORTS=true
@@ -32,6 +32,8 @@ sed -i "/Currently supported/s|are:|are at:|" debian/control
[ "$SUPPORTED_SITES" != "$(tail -n2 debian/control|awk NF|sed 's|^ ||')" ] && \
echo -e ">>>Site replacement needs fixing, exiting...<<<\n" && exit
+! grep -q "Priority:" debian/control && sed -i '/Section:/a Priority: optional' debian/control
+
apply_patch_changes
changelog "Track latest release and remove explicit site listing, redirecting to website author."