├── .github
├── FUNDING.yml
└── ISSUE_TEMPLATE
│ └── bug_report.yml
├── LICENSE
├── Smoothfox.js
├── zen
└── user.js
├── user.js
├── README.md
├── personal
└── user-overrides.js
├── install.py
├── policies.json
├── Peskyfox.js
└── Fastfox.js
/.github/FUNDING.yml:
--------------------------------------------------------------------------------
1 | # These are supported funding model platforms
2 |
3 | github: yokoffing
4 | patreon: # Replace with a single Patreon username
5 | open_collective: # Replace with a single Open Collective username
6 | ko_fi: yokoffing
7 | tidelift: # Replace with a single Tidelift platform-name/package-name e.g., npm/babel
8 | community_bridge: # Replace with a single Community Bridge project-name e.g., cloud-foundry
9 | liberapay: yokoffing
10 | issuehunt: # Replace with a single IssueHunt username
11 | otechie: # Replace with a single Otechie username
12 | lfx_crowdfunding: # Replace with a single LFX Crowdfunding project-name e.g., cloud-foundry
13 | custom: # Replace with up to 4 custom sponsorship URLs e.g., ['link1', 'link2']
14 |
--------------------------------------------------------------------------------
/LICENSE:
--------------------------------------------------------------------------------
1 | MIT License
2 |
3 | Copyright (c) 2020 yokoffing
4 |
5 | Permission is hereby granted, free of charge, to any person obtaining a copy
6 | of this software and associated documentation files (the "Software"), to deal
7 | in the Software without restriction, including without limitation the rights
8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9 | copies of the Software, and to permit persons to whom the Software is
10 | furnished to do so, subject to the following conditions:
11 |
12 | The above copyright notice and this permission notice shall be included in all
13 | copies or substantial portions of the Software.
14 |
15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21 | SOFTWARE.
22 |
--------------------------------------------------------------------------------
/.github/ISSUE_TEMPLATE/bug_report.yml:
--------------------------------------------------------------------------------
1 | name: Bug Report
2 | description: File a bug report
3 | assignees: yokoffing
4 |
5 | body:
6 | - type: markdown
7 | attributes:
8 | value: |
9 | Please confirm the issue relates to Betterfox user.js before submitting a report.
10 |
11 | To troubleshoot your installation, try solutions below and test the issue after each step:
12 | * Launch Firefox in [Troubleshoot Mode](https://support.mozilla.org/en-US/kb/diagnose-firefox-issues-using-troubleshoot-mode).
13 | * Disable DNS-level content blocking (such ad AdGuard Home, NextDNS, Control D, PiHole, etc) and [clear the DNS cache](https://www.pcmag.com/how-to/how-to-flush-your-dns-cache) and use ISP's DNS resolver (if applicable).
14 | * [Clear website data](https://support.mozilla.org/en-US/kb/clear-cookies-and-site-data-firefox) and restart Firefox.
15 | * Create a [new clean profile](https://support.mozilla.org/en-US/kb/profile-manager-create-remove-switch-firefox-profiles).
16 |
17 | - type: checkboxes
18 | attributes:
19 | label: Prerequisites
20 | options:
21 | - label: The issue persists when using Firefox in Troubleshoot Mode.
22 | required: true
23 | - label: "The issue persists after I disabled DNS-level content blocking (PiHole, NextDNS, etc.), cleared DNS cache, and tried to use ISP's DNS resolver (if applicable)."
24 | required: true
25 | - label: The issue persists after I cleared website data and restarted Firefox.
26 | required: true
27 | - label: I have created a new, clean profile. The issue persists after adding the user.js, but it is not reproducible in a new, unedited Firefox profile.
28 | required: true
29 |
30 | - type: textarea
31 | attributes:
32 | label: Bug description
33 | description: Describe the issue.
34 | placeholder: A bug causes this and that...
35 | validations:
36 | required: true
37 |
38 | - type: textarea
39 | attributes:
40 | label: Steps to reproduce
41 | description: Explain the steps required to reproduce the issue.
42 | placeholder: |
43 | 1. Go to `...`
44 | 2. Click on `...`
45 | 3. Scroll down to `...`
46 | validations:
47 | required: true
48 |
49 | - type: textarea
50 | attributes:
51 | label: Expected behavior
52 | description: What did you expect to happen instead?
53 | placeholder: Firefox should do [this]. Instead, it did [that].
54 | validations:
55 | required: false
56 |
57 | - type: textarea
58 | attributes:
59 | label: Screenshots
60 | description: Add screenshots to help explain your problem (optional).
61 | validations:
62 | required: false
63 |
64 | - type: dropdown
65 | attributes:
66 | label: Operating System (OS)
67 | options:
68 | - Windows (10 or later)
69 | - macOS (ARM-based device)
70 | - macOS (Intel-based device)
71 | - Linux
72 | - Other
73 | validations:
74 | required: true
75 |
76 | - type: dropdown
77 | attributes:
78 | label: Browser
79 | options:
80 | - Firefox
81 | - Firefox Beta
82 | - Firefox Developer Edition
83 | - Firefox Nightly
84 | - Firefox ESR
85 | - Floorp
86 | - LibreWolf
87 | - Zen Browser
88 | - Waterfox
89 | - Other
90 | validations:
91 | required: true
92 |
93 | - type: input
94 | attributes:
95 | label: Version
96 | placeholder: 136 stable
97 | validations:
98 | required: false
99 |
100 | - type: textarea
101 | attributes:
102 | label: Additional information
103 | description: Include any other information that may be helpful.
104 | validations:
105 | required: false
106 |
--------------------------------------------------------------------------------
/Smoothfox.js:
--------------------------------------------------------------------------------
1 |
2 | /****************************************************************************************
3 | * Smoothfox *
4 | * "Faber est suae quisque fortunae" *
5 | * priority: better scrolling *
6 | * version: 137 *
7 | * url: https://github.com/yokoffing/Betterfox *
8 | ***************************************************************************************/
9 |
10 | // Use only one option at a time!
11 | // Reset prefs if you decide to use different option.
12 |
13 | /****************************************************************************************
14 | * OPTION: SHARPEN SCROLLING *
15 | ****************************************************************************************/
16 | // credit: https://github.com/black7375/Firefox-UI-Fix
17 | // only sharpen scrolling
18 | user_pref("apz.overscroll.enabled", true); // DEFAULT NON-LINUX
19 | user_pref("general.smoothScroll", true); // DEFAULT
20 | user_pref("mousewheel.min_line_scroll_amount", 10); // adjust this number to your liking; default=5
21 | user_pref("general.smoothScroll.mouseWheel.durationMinMS", 80); // default=50
22 | user_pref("general.smoothScroll.currentVelocityWeighting", "0.15"); // default=.25
23 | user_pref("general.smoothScroll.stopDecelerationWeighting", "0.6"); // default=.4
24 | // Firefox Nightly only:
25 | // [1] https://bugzilla.mozilla.org/show_bug.cgi?id=1846935
26 | user_pref("general.smoothScroll.msdPhysics.enabled", false); // [FF122+ Nightly]
27 |
28 | /****************************************************************************************
29 | * OPTION: INSTANT SCROLLING (SIMPLE ADJUSTMENT) *
30 | ****************************************************************************************/
31 | // recommended for 60hz+ displays
32 | user_pref("apz.overscroll.enabled", true); // DEFAULT NON-LINUX
33 | user_pref("general.smoothScroll", true); // DEFAULT
34 | user_pref("mousewheel.default.delta_multiplier_y", 275); // 250-400; adjust this number to your liking
35 | // Firefox Nightly only:
36 | // [1] https://bugzilla.mozilla.org/show_bug.cgi?id=1846935
37 | user_pref("general.smoothScroll.msdPhysics.enabled", false); // [FF122+ Nightly]
38 |
39 | /****************************************************************************************
40 | * OPTION: SMOOTH SCROLLING *
41 | ****************************************************************************************/
42 | // recommended for 90hz+ displays
43 | user_pref("apz.overscroll.enabled", true); // DEFAULT NON-LINUX
44 | user_pref("general.smoothScroll", true); // DEFAULT
45 | user_pref("general.smoothScroll.msdPhysics.enabled", true);
46 | user_pref("mousewheel.default.delta_multiplier_y", 300); // 250-400; adjust this number to your liking
47 |
48 | /****************************************************************************************
49 | * OPTION: NATURAL SMOOTH SCROLLING V3 [MODIFIED] *
50 | ****************************************************************************************/
51 | // credit: https://github.com/AveYo/fox/blob/cf56d1194f4e5958169f9cf335cd175daa48d349/Natural%20Smooth%20Scrolling%20for%20user.js
52 | // recommended for 120hz+ displays
53 | // largely matches Chrome flags: Windows Scrolling Personality and Smooth Scrolling
54 | user_pref("apz.overscroll.enabled", true); // DEFAULT NON-LINUX
55 | user_pref("general.smoothScroll", true); // DEFAULT
56 | user_pref("general.smoothScroll.msdPhysics.continuousMotionMaxDeltaMS", 12);
57 | user_pref("general.smoothScroll.msdPhysics.enabled", true);
58 | user_pref("general.smoothScroll.msdPhysics.motionBeginSpringConstant", 600);
59 | user_pref("general.smoothScroll.msdPhysics.regularSpringConstant", 650);
60 | user_pref("general.smoothScroll.msdPhysics.slowdownMinDeltaMS", 25);
61 | user_pref("general.smoothScroll.msdPhysics.slowdownMinDeltaRatio", "2");
62 | user_pref("general.smoothScroll.msdPhysics.slowdownSpringConstant", 250);
63 | user_pref("general.smoothScroll.currentVelocityWeighting", "1");
64 | user_pref("general.smoothScroll.stopDecelerationWeighting", "1");
65 | user_pref("mousewheel.default.delta_multiplier_y", 300); // 250-400; adjust this number to your liking
66 |
--------------------------------------------------------------------------------
/zen/user.js:
--------------------------------------------------------------------------------
1 | //
2 | /* You may copy+paste this file and use it as it is.
3 | *
4 | * If you make changes to your about:config while the program is running, the
5 | * changes will be overwritten by the user.js when the application restarts.
6 | *
7 | * To make lasting changes to preferences, you will have to edit the user.js.
8 | */
9 |
10 | /****************************************************************************
11 | * BetterZen *
12 | * "Ex nihilo nihil fit" *
13 | * version: 142 *
14 | * url: https://github.com/yokoffing/Betterfox *
15 | ****************************************************************************/
16 |
17 | /****************************************************************************
18 | * SECTION: FASTFOX *
19 | ****************************************************************************/
20 | /** GFX ***/
21 | user_pref("gfx.canvas.accelerated.cache-size", 512);
22 |
23 | /** DISK CACHE ***/
24 | user_pref("browser.cache.disk.enable", false);
25 |
26 | /** NETWORK ***/
27 | user_pref("network.http.pacing.requests.enabled", false);
28 |
29 | /** SPECULATIVE LOADING ***/
30 | user_pref("network.dns.disablePrefetch", true);
31 | user_pref("network.dns.disablePrefetchFromHTTPS", true);
32 | user_pref("network.prefetch-next", false);
33 | user_pref("network.predictor.enabled", false);
34 | user_pref("network.predictor.enable-prefetch", false);
35 |
36 | /****************************************************************************
37 | * SECTION: SECUREFOX *
38 | ****************************************************************************/
39 | /** TRACKING PROTECTION ***/
40 | user_pref("browser.contentblocking.category", "strict");
41 | user_pref("privacy.trackingprotection.allow_list.baseline.enabled", true);
42 | user_pref("privacy.trackingprotection.allow_list.convenience.enabled", true);
43 | user_pref("browser.download.start_downloads_in_tmp_dir", true);
44 |
45 | /** OCSP & CERTS / HPKP ***/
46 | user_pref("security.OCSP.enabled", 0);
47 | user_pref("security.pki.crlite_mode", 2);
48 |
49 | /** DISK AVOIDANCE ***/
50 | user_pref("browser.sessionstore.interval", 60000);
51 |
52 | /** SHUTDOWN & SANITIZING ***/
53 | user_pref("browser.privatebrowsing.resetPBM.enabled", true);
54 | user_pref("privacy.history.custom", true);
55 |
56 | /** SEARCH / URL BAR ***/
57 | user_pref("browser.urlbar.quicksuggest.enabled", false);
58 |
59 | /** PASSWORDS ***/
60 | user_pref("signon.formlessCapture.enabled", false);
61 | user_pref("signon.privateBrowsingCapture.enabled", false);
62 | user_pref("network.auth.subresource-http-auth-allow", 1);
63 | user_pref("editor.truncate_user_pastes", false);
64 |
65 | /** HEADERS / REFERERS ***/
66 | user_pref("network.http.referer.XOriginTrimmingPolicy", 2);
67 |
68 | /** SAFE BROWSING ***/
69 | user_pref("browser.safebrowsing.downloads.remote.enabled", false);
70 |
71 | /** MOZILLA ***/
72 | user_pref("permissions.default.desktop-notification", 2);
73 | user_pref("permissions.default.geo", 2);
74 | user_pref("geo.provider.network.url", "https://beacondb.net/v1/geolocate");
75 | user_pref("browser.search.update", false);
76 | user_pref("permissions.manager.defaultsUrl", "");
77 |
78 | /****************************************************************************
79 | * SECTION: PESKYFOX *
80 | ****************************************************************************/
81 | /** MOZILLA UI ***/
82 | user_pref("browser.shell.checkDefaultBrowser", false);
83 |
84 | /** NEW TAB PAGE ***/
85 | user_pref("browser.newtabpage.activity-stream.default.sites", "");
86 |
87 | /** URL BAR ***/
88 | user_pref("dom.text_fragments.create_text_fragment.enabled", true);
89 |
90 | /****************************************************************************
91 | * START: ZEN-SPECIFIC OVERRIDES *
92 | ****************************************************************************/
93 | // Remove the slashes to enable the prefs
94 |
95 | // PREF: re-enable Windows efficiency mode
96 | //user_pref("dom.ipc.processPriorityManager.backgroundUsesEcoQoS", true);
97 |
98 | // PREF: disable new tab preload since they are off by default
99 | //user_pref("browser.newtab.preload", false);
100 |
101 | // PREF: show Enhance Tracking Protection shield in URL bar
102 | // Currently bugged if you click to view what's blocked
103 | //user_pref("zen.urlbar.show-protections-icon", true);
104 |
105 | // PREF: Disable the Picture in picture pop-out when changing tabs
106 | //user_pref("media.videocontrols.picture-in-picture.enable-when-switching-tabs.enabled", false);
107 |
108 | /****************************************************************************
109 | * START: MY OVERRIDES *
110 | ****************************************************************************/
111 | // visit https://github.com/yokoffing/Betterfox/wiki/Common-Overrides
112 | // visit https://github.com/yokoffing/Betterfox/wiki/Optional-Hardening
113 | // Enter your personal overrides below this line:
114 |
115 |
116 | /****************************************************************************
117 | * SECTION: SMOOTHFOX *
118 | ****************************************************************************/
119 | // Reset Zen's custom scrolling prefs to their Firefox defaults before making changes!
120 | // [1] Zen changes: https://github.com/zen-browser/desktop/blob/3932ec21f5661440c4b20796f90341a6ac725818/src/browser/app/profile/zen-browser.js#L297-L312
121 | // [2] Firefox defaults: https://searchfox.org/mozilla-release/source/modules/libpref/init/StaticPrefList.yaml
122 | // Then apply an example from Smoothfox
123 | // [3] https://github.com/yokoffing/Betterfox/blob/main/Smoothfox.js
124 | // Enter your scrolling overrides below this line:
125 |
126 |
127 | /****************************************************************************
128 | * END: BETTERFOX *
129 | ****************************************************************************/
130 |
--------------------------------------------------------------------------------
/user.js:
--------------------------------------------------------------------------------
1 | //
2 | /* You may copy+paste this file and use it as it is.
3 | *
4 | * If you make changes to your about:config while the program is running, the
5 | * changes will be overwritten by the user.js when the application restarts.
6 | *
7 | * To make lasting changes to preferences, you will have to edit the user.js.
8 | */
9 |
10 | /****************************************************************************
11 | * Betterfox *
12 | * "Ad meliora" *
13 | * version: 146 *
14 | * url: https://github.com/yokoffing/Betterfox *
15 | ****************************************************************************/
16 |
17 | /****************************************************************************
18 | * SECTION: FASTFOX *
19 | ****************************************************************************/
20 | /** GENERAL ***/
21 | user_pref("gfx.content.skia-font-cache-size", 32);
22 |
23 | /** GFX ***/
24 | user_pref("gfx.webrender.layer-compositor", true);
25 | user_pref("gfx.canvas.accelerated.cache-items", 32768);
26 | user_pref("gfx.canvas.accelerated.cache-size", 4096);
27 | user_pref("webgl.max-size", 16384);
28 |
29 | /** DISK CACHE ***/
30 | user_pref("browser.cache.disk.enable", false);
31 |
32 | /** MEMORY CACHE ***/
33 | user_pref("browser.cache.memory.capacity", 131072);
34 | user_pref("browser.cache.memory.max_entry_size", 20480);
35 | user_pref("browser.sessionhistory.max_total_viewers", 4);
36 | user_pref("browser.sessionstore.max_tabs_undo", 10);
37 |
38 | /** MEDIA CACHE ***/
39 | user_pref("media.memory_cache_max_size", 262144);
40 | user_pref("media.memory_caches_combined_limit_kb", 1048576);
41 | user_pref("media.cache_readahead_limit", 600);
42 | user_pref("media.cache_resume_threshold", 300);
43 |
44 | /** IMAGE CACHE ***/
45 | user_pref("image.cache.size", 10485760);
46 | user_pref("image.mem.decode_bytes_at_a_time", 65536);
47 |
48 | /** NETWORK ***/
49 | user_pref("network.http.max-connections", 1800);
50 | user_pref("network.http.max-persistent-connections-per-server", 10);
51 | user_pref("network.http.max-urgent-start-excessive-connections-per-host", 5);
52 | user_pref("network.http.request.max-start-delay", 5);
53 | user_pref("network.http.pacing.requests.enabled", false);
54 | user_pref("network.dnsCacheEntries", 10000);
55 | user_pref("network.dnsCacheExpiration", 3600);
56 | user_pref("network.ssl_tokens_cache_capacity", 10240);
57 |
58 | /** SPECULATIVE LOADING ***/
59 | user_pref("network.http.speculative-parallel-limit", 0);
60 | user_pref("network.dns.disablePrefetch", true);
61 | user_pref("network.dns.disablePrefetchFromHTTPS", true);
62 | user_pref("browser.urlbar.speculativeConnect.enabled", false);
63 | user_pref("browser.places.speculativeConnect.enabled", false);
64 | user_pref("network.prefetch-next", false);
65 |
66 | /****************************************************************************
67 | * SECTION: SECUREFOX *
68 | ****************************************************************************/
69 | /** TRACKING PROTECTION ***/
70 | user_pref("browser.contentblocking.category", "strict");
71 | user_pref("browser.download.start_downloads_in_tmp_dir", true);
72 | user_pref("browser.uitour.enabled", false);
73 | user_pref("privacy.globalprivacycontrol.enabled", true);
74 |
75 | /** OCSP & CERTS / HPKP ***/
76 | user_pref("security.OCSP.enabled", 0);
77 | user_pref("privacy.antitracking.isolateContentScriptResources", true);
78 | user_pref("security.csp.reporting.enabled", false);
79 |
80 | /** SSL / TLS ***/
81 | user_pref("security.ssl.treat_unsafe_negotiation_as_broken", true);
82 | user_pref("browser.xul.error_pages.expert_bad_cert", true);
83 | user_pref("security.tls.enable_0rtt_data", false);
84 |
85 | /** DISK AVOIDANCE ***/
86 | user_pref("browser.privatebrowsing.forceMediaMemoryCache", true);
87 | user_pref("browser.sessionstore.interval", 60000);
88 |
89 | /** SHUTDOWN & SANITIZING ***/
90 | user_pref("privacy.history.custom", true);
91 | user_pref("browser.privatebrowsing.resetPBM.enabled", true);
92 |
93 | /** SEARCH / URL BAR ***/
94 | user_pref("browser.urlbar.trimHttps", true);
95 | user_pref("browser.urlbar.untrimOnUserInteraction.featureGate", true);
96 | user_pref("browser.search.separatePrivateDefault.ui.enabled", true);
97 | user_pref("browser.search.suggest.enabled", false);
98 | user_pref("browser.urlbar.quicksuggest.enabled", false);
99 | user_pref("browser.urlbar.groupLabels.enabled", false);
100 | user_pref("browser.formfill.enable", false);
101 | user_pref("network.IDN_show_punycode", true);
102 |
103 | /** HTTPS-ONLY MODE ***/
104 | user_pref("dom.security.https_only_mode", true);
105 | user_pref("dom.security.https_only_mode_error_page_user_suggestions", true);
106 |
107 | /** PASSWORDS ***/
108 | user_pref("signon.formlessCapture.enabled", false);
109 | user_pref("signon.privateBrowsingCapture.enabled", false);
110 | user_pref("network.auth.subresource-http-auth-allow", 1);
111 | user_pref("editor.truncate_user_pastes", false);
112 |
113 | /** EXTENSIONS ***/
114 | user_pref("extensions.enabledScopes", 5);
115 |
116 | /** HEADERS / REFERERS ***/
117 | user_pref("network.http.referer.XOriginTrimmingPolicy", 2);
118 |
119 | /** CONTAINERS ***/
120 | user_pref("privacy.userContext.ui.enabled", true);
121 |
122 | /** VARIOUS ***/
123 | user_pref("pdfjs.enableScripting", false);
124 |
125 | /** SAFE BROWSING ***/
126 | user_pref("browser.safebrowsing.downloads.remote.enabled", false);
127 |
128 | /** MOZILLA ***/
129 | user_pref("permissions.default.desktop-notification", 2);
130 | user_pref("permissions.default.geo", 2);
131 | user_pref("geo.provider.network.url", "https://beacondb.net/v1/geolocate");
132 | user_pref("browser.search.update", false);
133 | user_pref("permissions.manager.defaultsUrl", "");
134 | user_pref("extensions.getAddons.cache.enabled", false);
135 |
136 | /** TELEMETRY ***/
137 | user_pref("datareporting.policy.dataSubmissionEnabled", false);
138 | user_pref("datareporting.healthreport.uploadEnabled", false);
139 | user_pref("toolkit.telemetry.unified", false);
140 | user_pref("toolkit.telemetry.enabled", false);
141 | user_pref("toolkit.telemetry.server", "data:,");
142 | user_pref("toolkit.telemetry.archive.enabled", false);
143 | user_pref("toolkit.telemetry.newProfilePing.enabled", false);
144 | user_pref("toolkit.telemetry.shutdownPingSender.enabled", false);
145 | user_pref("toolkit.telemetry.updatePing.enabled", false);
146 | user_pref("toolkit.telemetry.bhrPing.enabled", false);
147 | user_pref("toolkit.telemetry.firstShutdownPing.enabled", false);
148 | user_pref("toolkit.telemetry.coverage.opt-out", true);
149 | user_pref("toolkit.coverage.opt-out", true);
150 | user_pref("toolkit.coverage.endpoint.base", "");
151 | user_pref("browser.newtabpage.activity-stream.feeds.telemetry", false);
152 | user_pref("browser.newtabpage.activity-stream.telemetry", false);
153 | user_pref("datareporting.usage.uploadEnabled", false);
154 |
155 | /** EXPERIMENTS ***/
156 | user_pref("app.shield.optoutstudies.enabled", false);
157 | user_pref("app.normandy.enabled", false);
158 | user_pref("app.normandy.api_url", "");
159 |
160 | /** CRASH REPORTS ***/
161 | user_pref("breakpad.reportURL", "");
162 | user_pref("browser.tabs.crashReporting.sendReport", false);
163 |
164 | /****************************************************************************
165 | * SECTION: PESKYFOX *
166 | ****************************************************************************/
167 | /** MOZILLA UI ***/
168 | user_pref("extensions.getAddons.showPane", false);
169 | user_pref("extensions.htmlaboutaddons.recommendations.enabled", false);
170 | user_pref("browser.discovery.enabled", false);
171 | user_pref("browser.shell.checkDefaultBrowser", false);
172 | user_pref("browser.newtabpage.activity-stream.asrouter.userprefs.cfr.addons", false);
173 | user_pref("browser.newtabpage.activity-stream.asrouter.userprefs.cfr.features", false);
174 | user_pref("browser.preferences.moreFromMozilla", false);
175 | user_pref("browser.aboutConfig.showWarning", false);
176 | user_pref("browser.startup.homepage_override.mstone", "ignore");
177 | user_pref("browser.aboutwelcome.enabled", false);
178 | user_pref("browser.profiles.enabled", true);
179 |
180 | /** THEME ADJUSTMENTS ***/
181 | user_pref("toolkit.legacyUserProfileCustomizations.stylesheets", true);
182 | user_pref("browser.compactmode.show", true);
183 | user_pref("browser.privateWindowSeparation.enabled", false); // WINDOWS
184 |
185 | /** AI ***/
186 | user_pref("browser.ml.enable", false);
187 | user_pref("browser.ml.chat.enabled", false);
188 | user_pref("browser.ml.chat.menu", false);
189 | user_pref("browser.tabs.groups.smart.enabled", false);
190 | user_pref("browser.ml.linkPreview.enabled", false);
191 |
192 | /** FULLSCREEN NOTICE ***/
193 | user_pref("full-screen-api.transition-duration.enter", "0 0");
194 | user_pref("full-screen-api.transition-duration.leave", "0 0");
195 | user_pref("full-screen-api.warning.timeout", 0);
196 |
197 | /** URL BAR ***/
198 | user_pref("browser.urlbar.trending.featureGate", false);
199 |
200 | /** NEW TAB PAGE ***/
201 | user_pref("browser.newtabpage.activity-stream.default.sites", "");
202 | user_pref("browser.newtabpage.activity-stream.showSponsoredTopSites", false);
203 | user_pref("browser.newtabpage.activity-stream.feeds.section.topstories", false);
204 | user_pref("browser.newtabpage.activity-stream.showSponsored", false);
205 | user_pref("browser.newtabpage.activity-stream.showSponsoredCheckboxes", false);
206 |
207 | /** DOWNLOADS ***/
208 | user_pref("browser.download.manager.addToRecentDocs", false);
209 |
210 | /** PDF ***/
211 | user_pref("browser.download.open_pdf_attachments_inline", true);
212 |
213 | /** TAB BEHAVIOR ***/
214 | user_pref("browser.bookmarks.openInTabClosesMenu", false);
215 | user_pref("browser.menu.showViewImageInfo", true);
216 | user_pref("findbar.highlightAll", true);
217 | user_pref("layout.word_select.eat_space_to_next_word", false);
218 |
219 | /****************************************************************************
220 | * START: MY OVERRIDES *
221 | ****************************************************************************/
222 | // visit https://github.com/yokoffing/Betterfox/wiki/Common-Overrides
223 | // visit https://github.com/yokoffing/Betterfox/wiki/Optional-Hardening
224 | // Enter your personal overrides below this line:
225 |
226 |
227 |
228 | /****************************************************************************
229 | * SECTION: SMOOTHFOX *
230 | ****************************************************************************/
231 | // visit https://github.com/yokoffing/Betterfox/blob/main/Smoothfox.js
232 | // Enter your scrolling overrides below this line:
233 |
234 |
235 |
236 | /****************************************************************************
237 | * END: BETTERFOX *
238 | ****************************************************************************/
239 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | [](https://github.com/yokoffing/betterfox/stargazers)
2 |
3 | # Betterfox
4 | [about:config](https://support.mozilla.org/en-US/kb/about-config-editor-firefox) tweaks to enhance [Mozilla Firefox](https://www.mozilla.org/en-US/firefox/new/).
5 |
6 | ## Made for everyday browsing
7 | [Faster](https://medium.com/@mihirgrand/comparing-popular-firefox-forks-6fa83fdfdaad#:~:text=31%25%20more%20than%20vanilla%20Firefox), more private and secure — without using third-party code.
8 |
9 | Betterfox is an opinionated preference list inspired by the [law of diminishing returns](https://miro.medium.com/v2/resize:fit:1206/1*lcOcxriV_II_lZuXQYLoXg.jpeg) and the [minimum effective dose](https://medium.com/the-mission/less-is-more-the-minimum-effective-dose-e6d56625931e).
10 |
11 | ## Required reading
12 | 0) Create a [backup profile](https://github.com/yokoffing/Betterfox/wiki/Backup).
13 | 1) Download the user.js file [here](https://raw.githubusercontent.com/yokoffing/Betterfox/main/user.js) (Right click > `Save Link As…`).
14 | 2) Review both [Common Overrides](https://github.com/yokoffing/Betterfox/wiki/Common-Overrides) and [Optional Hardening](https://github.com/yokoffing/Betterfox/wiki/Optional-Hardening) to make any necessary changes.
15 | 3) Open Firefox. In the URL bar, type `about:profiles` and press **Enter**.
16 | 4) For the profile you want to use, click **Open Folder** in the **Root Directory** section.
17 | 5) Move the `user.js` file into the folder.
18 |
19 | *After restarting Firefox:*
20 | 1) Get an **ad blocker** like [uBlock Origin](https://addons.mozilla.org/blog/ublock-origin-everything-you-need-to-know-about-the-ad-blocker/) with our [recommended filters](https://github.com/yokoffing/filterlists#guidelines).
21 | 2) Enable **DNS-level protection** with your chosen [provider](https://github.com/yokoffing/Betterfox/wiki/Optional-Hardening#secure-dns) to further protect against security threats, ads, and trackers.
22 |
23 | ## Simple goals
24 | 1) **Minimalism:** get what isn't needed out of the way
25 | 2) **Efficiency:** unleash Firefox's ability to be fast and performant
26 | 3) **Privacy:** protect your data without causing site breakage
27 |
28 | ## Simple configs
29 |
30 | `Fastfox`, `Securefox`, `Peskyfox`, and `Smoothfox` are guides to settings within Firefox.
31 |
32 | The `user.js` — a configuration file that controls Firefox settings — is curated from these guides.
33 |
34 | | List | Description |
35 | |:---------:|-------------|
36 | | [Fastfox](https://github.com/yokoffing/Betterfox/blob/main/Fastfox.js) | Increase Firefox's browsing speed. Give Chrome a run for its money!|
37 | | [Securefox](https://github.com/yokoffing/Betterfox/blob/main/Securefox.js) | Protect user data without causing site breakage. |
38 | | [Peskyfox](https://github.com/yokoffing/Betterfox/blob/main/Peskyfox.js) | Provide a clean, distraction-free browsing experience. |
39 | | [Smoothfox](https://github.com/yokoffing/Betterfox/blob/main/Smoothfox.js) | Get Edge-like smooth scrolling on your favorite browser — or choose something more your style. |
40 | | [user.js](https://github.com/yokoffing/Betterfox/blob/main/user.js) | All the essentials. None of the breakage. This is your `user.js`. |
41 |
42 | ## Recognition
43 |
44 | ### Browser Integration
45 | > [!IMPORTANT]
46 | > While the browsers listed below incorporate Betterfox to some extent, they often modify it in ways that reduce its effectiveness. For optimal results, apply the `user.js` file even when using Firefox forks.
47 |
48 | * [Zen](https://github.com/zen-browser/desktop?tab=readme-ov-file) | [files](https://github.com/zen-browser/desktop/blob/stable/src/browser/app/profile/zen-browser.js) (July 2024)
49 | * [FireDragon](https://github.com/dr460nf1r3/firedragon-browser/blob/master/README.md) | [files](https://github.com/dr460nf1r3/firedragon-browser/blob/55fc6e5029542cd90fabe23cb44c89568d74d006/firedragon.cfg#L822-L824) (Jan 2024?)
50 | * [Midori](https://github.com/goastian/midori-desktop/blob/ESR115/README.md) | [files](https://github.com/goastian/midori-desktop/blob/f3d8d96eb8e08f35a64e3c957bea4e839d7c7730/floorp/browser/components/userjsUtils.sys.mjs#L28-L33) (Dec 2023?)
51 | * [Mercury](https://github.com/Alex313031/Mercury/releases/tag/v.115.3.0) | [files](https://github.com/Alex313031/Mercury/commit/eb9600f9fb8f48c8f5b5c6f3264fbcdb5caff7f5) (Sep 2023)
52 | * [Waterfox](https://www.waterfox.net/docs/releases/G6.0/) | [files](https://github.com/WaterfoxCo/Waterfox/tree/current/waterfox/browser/app/profile) (Sep 2023)
53 | * [Floorp](https://github.com/Floorp-Projects/Floorp#-betterfox) [1](https://github.com/Floorp-Projects/Floorp/issues/233#issuecomment-1543557167) [2](https://blog.ablaze.one/3135/2023-04-01/) | [files](https://github.com/Floorp-Projects/Floorp/blob/ESR115/floorp/browser/components/preferences/userjs.inc.xhtml) (Apr 2023)
54 | * [Pulse](https://github.com/pulse-browser/browser#%EF%B8%8F-credits) | [files](https://github.com/pulse-browser/browser/tree/alpha/src/browser/app/profile) (Dec 2021)
55 | * [Ghostery Private Browser](https://github.com/ghostery/user-agent-desktop#community) [1](https://web.archive.org/web/20210509171835/https://www.ghostery.com/ghostery-dawn-update-more/) [2](https://web.archive.org/web/20210921114333/https://www.ghostery.com/ghostery-dawn-product-update/) | [files](https://github.com/ghostery/user-agent-desktop/tree/main/brands/ghostery/branding/pref) (Feb 2021)
56 |
57 | ### YouTube
58 | * [A Better Firefox](https://youtu.be/JuHIwCFx34Q?si=1dx39t3HX5kzNVj-&t=133) (Mar 2025)
59 | * [Ditch Chrome for One Of These BETTER BROWSERS!](https://youtu.be/ygkxFc8SZlc?si=m5NQe-b_oFXs5crb&t=230) (Aug 2024)
60 | * [The ULTIMATE Browser Tier List](https://youtu.be/j5r6jFE8gic?t=560) (Mar 2023)
61 | * [I Hate Firefox. But I'm Still Switching Back to It.](https://youtu.be/w0SJFED5xK0?t=220) (Nov 2022)
62 | * [Español] [Optimize and Accelerate Firefox](https://www.youtube.com/watch?v=3XtoONmq5_Q) (Nov 2022)
63 | * [How To Improve Firefox Performance](https://www.youtube.com/watch?v=N8IOJiOFVEk) (Dec 2021)
64 |
65 | ### Podcasts
66 | * [Italian] [Digitalia.fm](https://digitalia.fm/684/) | 1:41:35–1:42:41 (July 2023)
67 | * [GhoSTORIES with Franz & Pete](https://anchor.fm/ghostories/episodes/S2E6-We-Talking-Ghostery-Dawn----Again-er0q02/a-a4o5vmh) | 17:05–18:40 (Feb 2021)
68 |
69 | ### Articles
70 | * [Español] [Firefox is an excellent browser, but this small modification makes it much faster and more private](https://www.genbeta.com/a-fondo/firefox-excelente-navegador-esta-pequena-modificacion-hace-mucho-rapido-privado-asi-funciona-betterfox) (Jan 2025)
71 | * [Browsers for Daily Use](https://anhkhoakz.neocities.org/blog/browsers-for-daily-using/#firefox-but-hardened) (Jan 2024)
72 | * [Avoiding Manifest V3 – Escaping the Ad-Pocalypse](https://www.xbitlabs.com/avoiding-manifest-v3/) (Dec 2023)
73 | * [German] [Pulse Browser Review: Firefox fork with Turbo tweaks and Opera sidebar](https://www.computerbild.de/artikel/cb-Tipps-Software-Pulse-Browser-Review-ein-Firefox-Fork-mit-Seitenleiste-wie-bei-Opera-35644139.html#:~:text=Noch%20mehr%20Speed%2DFeatures) (Apr 2023)
74 | * [2023 Browser Showdown: Comparing Chrome, Brave, Firefox, Vivaldi, and Opera](https://www.appdate.lk/technology/2023-browser-showdown/) (Jan 2023)
75 |
76 | ### Guides
77 | * [FMHY Browser Tools: Privacy Tweaks](https://www.reddit.com/r/FREEMEDIAHECKYEAH/wiki/storage/#wiki_privacy_based_browsers)
78 | * [Firefox-UI-Fix](https://github.com/black7375/Firefox-UI-Fix/wiki/Tips#privacy)
79 | * [Narsil/desktop_user.js](https://git.nixnet.services/Narsil/desktop_user.js#thanks)
80 | * [pyllyukko/user.js](https://github.com/pyllyukko/user.js) [comparator](https://jm42.github.io/compare-user.js/)
81 |
82 | ### Reviews
83 | * “I use this one ... The performance is absolutely amazing. There’s definitely a huge difference when it comes to loading sites.” - [DIRIKtv](https://youtu.be/N8IOJiOFVEk?t=16)
84 | * "BetterFox ... will provide good-enough privacy and help with performance." - [Qdoit12Super](https://old.reddit.com/r/browsers/comments/139h4my/suggestion_for_finding_3_good_privacy_focus/jj3n3qn/?context=2)
85 | * "...drastically changed the experience with Firefox for me. Improved speed, security, smoothness, and removed clutter." - [AppDate](https://www.appdate.lk/technology/2023-browser-showdown/#:~:text=Used%20the%20BetterFox%20user%20config%20settings%20with%20some%20overrides%20which%20drastically%20changed%20the%20experience)
86 | * "Firefox with uBlock Origin extension and tuned with Betterfox is faster than Safari." - [cugeloid](https://elephas.app/blog/best-browsers-mac#what-is-the-best-browser-for-mac-according-to-redditandnbsp)
87 | * "I don't think I could use Firefox without Betterfox." - [Professional_Fun4616](https://old.reddit.com/r/nextdns/comments/15y815f/the_people_behind_betterfox_have_this_awesome/jxb7cir/?context=3)
88 | * "The best collection of tweaks available." - [AuRiMaS](https://old.reddit.com/r/MozillaFirefox/comments/15cc1vk/about_changes_in_aboutconfig/jtyx910/?context=3)
89 | * "FF is now much snappier!" - [whotheff](https://old.reddit.com/r/firefox/comments/z5auzi/firefox_not_properly_usingrecognizing_gpu_poor/iy36hyz/)
90 | * "...the experience is so good now I don’t think I’ll go back to any of the chromium based browsers." - [Mr_Compromise](https://old.reddit.com/r/pcmasterrace/comments/zwioe1/what_browser_will_you_be_using_in_2023_please/j1wmbxo/)
91 |
92 | ## Support
93 |
94 | If you like the project, leave a :star: (top right) and become a [stargazer](https://github.com/yokoffing/Betterfox/stargazers)!
95 |
96 | [](https://github.com/yokoffing/Betterfox/stargazers)
97 |
98 |
99 |
100 |
101 | ## Credit
102 | * Betterfox mirrors the ongoing work provided by [arkenfox](https://github.com/arkenfox/user.js). Additionally, this repository includes content reproduced or adapted from other sources. Credit for overlapping material goes to the original authors.
103 | * Appreciation goes to the [Firefox](https://www.mozilla.org/en-US/firefox/new/) team and developers working on [Bugzilla](https://bugzilla.mozilla.org/home), fighting for the open web.
104 | * Thanks to [Denperidge](https://github.com/Denperidge) for adding [`install.py`](https://github.com/yokoffing/Betterfox/blob/main/install.py) for advanced users in v.131.
105 | * A special thanks to [Alex Kontos](https://github.com/MrAlex94) of [Waterfox](https://github.com/WaterfoxCo/Waterfox) for his collaboration in v.116.
106 | * Many thanks to the 2021 [Ghostery](https://github.com/ghostery) team for testing Betterfox at scale in its early days.
107 |
--------------------------------------------------------------------------------
/personal/user-overrides.js:
--------------------------------------------------------------------------------
1 |
2 | /****************************************************************************
3 | * *
4 | * DISCLAIMER *
5 | * *
6 | * This file is NOT INTENDED FOR OFFICIAL USE *
7 | * It is a mix of PERSONAL and TESTING prefs and *
8 | * may cause breakage or contain changes you do not want! *
9 | * DO NOT USE unless you know what you are doing! *
10 | * *
11 | ****************************************************************************/
12 |
13 | /****************************************************************************
14 | * START: MY OVERRIDES *
15 | ****************************************************************************/
16 |
17 | /** SETUP ON FIRST INSTALLATION ***/
18 | //user_pref("network.trr.uri", "https://dns.nextdns.io/******/Firefox"); // TRR/DoH
19 |
20 | /** FASTFOX ***/
21 | user_pref("browser.sessionstore.restore_pinned_tabs_on_demand", true);
22 |
23 | // SPECULATIVE LOADING WITHOUT PREDICTOR
24 | user_pref("network.http.speculative-parallel-limit", 20);
25 | //user_pref("network.dns.disablePrefetch", false);
26 | //user_pref("network.dns.disablePrefetchFromHTTPS", false);
27 | //user_pref("dom.prefetch_dns_for_anchor_https_document", true);
28 | user_pref("browser.urlbar.speculativeConnect.enabled", true);
29 | user_pref("browser.places.speculativeConnect.enabled", true);
30 | user_pref("network.prefetch-next", true);
31 | user_pref("network.http.max-persistent-connections-per-server", 20); // increase download connections
32 |
33 | /** SECUREFOX ***/
34 | user_pref("privacy.trackingprotection.allow_list.convenience.enabled", false); // disable Strict allowlist of convenience features
35 | user_pref("signon.rememberSignons", false); // disable password manager
36 | user_pref("extensions.formautofill.addresses.enabled", false); // disable address manager
37 | user_pref("extensions.formautofill.creditCards.enabled", false); // disable credit card manager
38 | user_pref("browser.urlbar.suggest.recentsearches", false); // unselect "Show recent searches" for clean UI
39 | user_pref("browser.urlbar.showSearchSuggestionsFirst", false); // unselect "Show search suggestions ahead of browsing history in address bar results" for clean UI
40 | //user_pref("browser.urlbar.groupLabels.enabled", false); // hide Firefox Suggest label in URL dropdown box
41 | user_pref("signon.management.page.breach-alerts.enabled", false); // extra hardening
42 | user_pref("signon.autofillForms", false); // unselect "Autofill logins and passwords" for clean UI
43 | user_pref("signon.generation.enabled", false); // unselect "Suggest and generate strong passwords" for clean UI
44 | user_pref("signon.firefoxRelay.feature", ""); // unselect suggestions from Firefox Relay for clean UI
45 | user_pref("browser.safebrowsing.downloads.enabled", false); // deny SB to scan downloads to identify suspicious files; local checks only
46 | user_pref("browser.safebrowsing.downloads.remote.url", ""); // enforce no remote checks for downloads by SB
47 | user_pref("browser.safebrowsing.downloads.remote.block_potentially_unwanted", false); // clean up UI; not needed in user.js if remote downloads are disabled
48 | user_pref("browser.safebrowsing.downloads.remote.block_uncommon", false); // clean up UI; not needed in user.js if remote downloads are disabled
49 | user_pref("browser.safebrowsing.allowOverride", false); // do not allow user to override SB
50 | user_pref("browser.search.update", false); // do not update opensearch engines
51 | user_pref("network.trr.confirmationNS", "skip"); // skip TRR confirmation request
52 | user_pref("extensions.webextensions.restrictedDomains", ""); // remove Mozilla domains so adblocker works on pages
53 | user_pref("identity.fxaccounts.enabled", false); // disable Firefox Sync
54 | user_pref("browser.firefox-view.feature-tour", "{\"screen\":\"\",\"complete\":true}"); // disable the Firefox View tour from popping up for new profiles
55 | user_pref("accessibility.force_disabled", 1); // disable Accessibility features
56 | user_pref("security.cert_pinning.enforcement_level", 2); // strict public key pinning
57 | user_pref("captivedetect.canonicalURL", ""); // disable captive portal detection
58 | user_pref("network.captive-portal-service.enabled", false); // disable captive portal detection
59 | user_pref("network.connectivity-service.enabled", false); // disable captive portal detection
60 | user_pref("browser.download.enableDeletePrivate", true); // Delete files downloaded in private browsing when all private windows are closed
61 | user_pref("browser.download.deletePrivateChosen", true); // Delete files downloaded in private browsing when all private windows are closed
62 | user_pref("browser.download.deletePrivate", true); // Delete files downloaded in private browsing when all private windows are closed
63 |
64 | /** PESKYFOX ***/
65 | user_pref("devtools.accessibility.enabled", false); // removes un-needed "Inspect Accessibility Properties" on right-click
66 | user_pref("browser.newtabpage.activity-stream.showSponsoredTopSites", false); // Settings>Home>Firefox Home Content>Recent Activity>Shortcuts>Sponsored shortcuts
67 | user_pref("browser.newtabpage.activity-stream.showSponsored", false); // Settings>Home>Firefox Home Content>Recent Activity>Recommended by Pocket>Sponsored Stories
68 | user_pref("browser.newtabpage.activity-stream.section.highlights.includeBookmarks", false); // Settings>Home>Firefox Home Content>Recent Activity>Bookmarks
69 | user_pref("browser.newtabpage.activity-stream.section.highlights.includeDownloads", false); // Settings>Home>Firefox Home Content>Recent Activity>Most Recent Download
70 | user_pref("browser.newtabpage.activity-stream.section.highlights.includeVisited", false); // Settings>Home>Firefox Home Content>Recent Activity>Visited Pages
71 | user_pref("browser.newtabpage.activity-stream.section.highlights.includePocket", false); // Settings>Home>Firefox Home Content>Recent Activity>Pages Saved to Pocket
72 | //user_pref("browser.download.useDownloadDir", true); // use direct downloads
73 | //user_pref("browser.download.folderList", 0); // 0=desktop, 1=downloads, 2=last used
74 | user_pref("browser.toolbars.bookmarks.visibility", "never"); // always hide bookmark bar
75 | user_pref("browser.startup.homepage_override.mstone", "ignore"); // What's New page after updates; master switch
76 | user_pref("browser.urlbar.suggest.history", false); // Browsing history; hide URL bar dropdown suggestions
77 | user_pref("browser.urlbar.suggest.bookmark", false); // Bookmarks; hide URL bar dropdown suggestions
78 | user_pref("browser.urlbar.suggest.openpage", false); // Open tabs; hide URL bar dropdown suggestions
79 | user_pref("browser.urlbar.suggest.topsites", false); // Shortcuts; disable dropdown suggestions with empty query
80 | user_pref("browser.urlbar.suggest.engines", false); // Search engines; tab-to-search
81 | user_pref("browser.urlbar.quicksuggest.enabled", false); // hide Firefox Suggest UI in the settings
82 | //user_pref("browser.urlbar.maxRichResults", 1); // minimum suggestion needed for URL bar autofill
83 | user_pref("browser.bookmarks.max_backups", 0); // minimize disk use; manually back-up
84 | user_pref("view_source.wrap_long_lines", true); // wrap source lines
85 | user_pref("devtools.debugger.ui.editor-wrapping", true); // wrap lines in devtools
86 | user_pref("browser.zoom.full", false); // text-only zoom, not all elements on page
87 | //user_pref("pdfjs.sidebarViewOnLoad", 2); // force showing of Table of Contents in sidebar for PDFs (if available)
88 | user_pref("layout.word_select.eat_space_to_next_word", false); // do not select the space next to a word when selecting a word
89 | //user_pref("browser.tabs.loadInBackground", false); // CTRL+SHIFT+CLICK for background tabs; Settings>General>Tabs>When you open a link, image or media in a new tab, switch to it immediately
90 | user_pref("browser.tabs.loadBookmarksInTabs", true); // force bookmarks to open in a new tab, not the current tab
91 | user_pref("ui.key.menuAccessKey", 0); // remove underlined characters from various settings
92 | user_pref("general.autoScroll", false); // disable unintentional behavior for middle click
93 | user_pref("ui.SpellCheckerUnderlineStyle", 1); // [HIDDEN] dots for spell check errors
94 | user_pref("media.videocontrols.picture-in-picture.display-text-tracks.size", "small"); // PiP
95 | user_pref("media.videocontrols.picture-in-picture.urlbar-button.enabled", false); // PiP in address bar
96 | user_pref("reader.parse-on-load.enabled", false); // disable reader mode
97 | //user_pref("reader.color_scheme", "auto"); // match system theme for when reader is enabled
98 | //user_pref("browser.urlbar.openintab", true); // stay on current site and open new tab when typing in URL bar
99 |
100 | /** DELETE IF NOT NIGHTLY ***/
101 | user_pref("privacy.userContext.enabled", false); // disable Containers functionality
102 | user_pref("browser.crashReports.unsubmittedCheck.enabled", false); // true by default on NIGHTLY
103 | //user_pref("xpinstall.signatures.required", false); // [ESR/DEV/NIGHTLY]
104 | //user_pref("browser.urlbar.suggest.trending", false); // FF119+ disable showing trending searches; unselect for clean UI
105 | //user_pref("browser.urlbar.suggest.quickactions", false); // Quick actions; hide URL bar dropdown suggestions
106 | //user_pref("browser.urlbar.suggest.clipboard", false); // Clipboard; hide URL bar dropdown suggestions
107 |
108 | /** DELETE IF NOT WINDOWS DESKTOP ***/
109 | user_pref("network.trr.mode", 3); // enable TRR (without System fallback)
110 | //user_pref("browser.startup.preXulSkeletonUI", false); // WINDOWS
111 | user_pref("default-browser-agent.enabled", false); // deny Mozilla monitoring default browser (breaks "Make Default" button)
112 | user_pref("geo.provider.ms-windows-location", false); // [WINDOWS]
113 | user_pref("pdfjs.defaultZoomValue", "125"); // alt=page-width; PDF zoom level
114 | user_pref("gfx.font_rendering.cleartype_params.rendering_mode", 5);
115 | user_pref("gfx.font_rendering.cleartype_params.cleartype_level", 100);
116 | user_pref("gfx.font_rendering.cleartype_params.force_gdi_classic_for_families", "");
117 | user_pref("gfx.font_rendering.directwrite.use_gdi_table_loading", false);
118 | //user_pref("gfx.font_rendering.cleartype_params.enhanced_contrast", 100);
119 | //user_pref("font.name.serif.x-western", "Roboto Slab"); // serif font
120 | //user_pref("font.name.sans-serif.x-western", "Roboto"); // sans-serif font
121 | //user_pref("font.name.monospace.x-western", "Fira Code"); // monospace font
122 |
123 | /** DELETE IF NOT ENTERPRISE WINDOWS LAPTOP ***/
124 | user_pref("urlclassifier.trackingSkipURLs", ""); // do not allow embedded tweets, Instagram, Reddit, and Tiktok posts
125 | user_pref("urlclassifier.features.socialtracking.skipURLs", ""); // do not allow embedded tweets, Instagram, Reddit, and Tiktok posts
126 | user_pref("browser.search.suggest.enabled", true); // search suggestions
127 | user_pref("browser.urlbar.showSearchSuggestionsFirst", true); // Show search suggestions ahead of browsing history in address bar results
128 | //user_pref("network.connectivity-service.enabled", true); // public wifi
129 | //user_pref("network.trr.confirmationNS", "example.com"); // TRR confirmation request
130 | //user_pref("network.trr.mode", 2); // enable TRR (without System fallback)
131 | //user_pref("browser.startup.preXulSkeletonUI", false); // WINDOWS
132 | user_pref("gfx.font_rendering.cleartype_params.rendering_mode", 5);
133 | user_pref("gfx.font_rendering.cleartype_params.cleartype_level", 100);
134 | user_pref("gfx.font_rendering.cleartype_params.force_gdi_classic_for_families", "");
135 | user_pref("gfx.font_rendering.directwrite.use_gdi_table_loading", false);
136 | user_pref("gfx.font_rendering.cleartype_params.enhanced_contrast", 100);
137 | user_pref("toolkit.legacyUserProfileCustomizations.stylesheets", false); // no need for userChrome
138 | //user_pref("browser.urlbar.suggest.history", true); // Browsing history
139 | //user_pref("browser.urlbar.suggest.bookmark", true); // Bookmarks
140 | //user_pref("browser.urlbar.suggest.openpage", true); // Open tabs
141 | //user_pref("browser.urlbar.suggest.topsites", true); // Shortcuts
142 |
143 | /** DELETE IF NOT macOS LAPTOP ***/
144 | user_pref("network.trr.mode", 2); // enable TRR (with System fallback)
145 | user_pref("network.trr.max-fails", 5); // lower max attempts to use DoH
146 | user_pref("geo.provider.use_corelocation", false); // geolocation [MAC]
147 | user_pref("pdfjs.defaultZoomValue", "page-width"); // PDF zoom level
148 | user_pref("app.update.auto", false); // disable auto-installing Firefox updates [NON-WINDOWS]
149 | //user_pref("font.name.monospace.x-western", "SF Mono"); // monospace font
150 |
151 | /** DELETE IF NOT LINUX LAPTOP ***/
152 | user_pref("network.trr.mode", 2); // enable TRR (with System fallback)
153 | user_pref("network.trr.max-fails", 5); // lower max attempts to use DoH
154 | user_pref("geo.provider.use_geoclue", false); // [LINUX]
155 | user_pref("pdfjs.defaultZoomValue", "page-width"); // PDF zoom level
156 |
157 |
158 |
--------------------------------------------------------------------------------
/install.py:
--------------------------------------------------------------------------------
1 | #!/usr/bin/env python3
2 |
3 | from datetime import datetime
4 | from os import name, getenv
5 | from json import loads
6 | from re import compile, IGNORECASE, sub
7 | from pathlib import Path
8 | from configparser import ConfigParser
9 | from argparse import ArgumentParser
10 | from shutil import copytree, ignore_patterns
11 | from urllib.request import urlopen
12 | from subprocess import check_output
13 | from io import BytesIO
14 | from zipfile import ZipFile
15 |
16 | """
17 | install(-betterfox).py
18 |
19 | Usage:
20 | python install.py
21 |
22 |
23 | When called without arguments, it will:
24 | - Backup your current firefox profile
25 | - Automatically download user.js from the latest Betterfox release compatible with your Firefox version into the profile
26 | - Apply user-overrides in the same directory
27 |
28 | However, you can check out install.py/betterfox-install.exe --help to customise most behaviours!
29 |
30 | Limitations:
31 | - When using a different repositoy as a source, that repository needs to use the same releases workflow
32 | - Over time, the get_releases might not list older releases due to limited page size. This can be expanded down the road, though
33 |
34 | Building into an exe (on Windows):
35 | - pipx install pyinstaller (note: you can try without pipx, but this didn't work for me)
36 | - Run:
37 | - CMD: `pyinstaller --onefile --name install-betterfox install.py && move %cd%\\dist\\install-betterfox.exe %cd% && del install-betterfox.spec && rmdir /S /Q build && rmdir dist`
38 | - BASH: `pyinstaller --onefile --name install-betterfox install.py && && mv dist/install-betterfox.exe . && rm install-betterfox.spec && rm -rf ./build/ && rmdir dist`
39 | (Sorry, didn't want to add a .gitignore solely for the install script)
40 | - Done!
41 |
42 | If there's any problems with the script, feel free to mention @Denperidge on GitHub!
43 | """
44 |
45 | re_find_version = compile(r"mozilla.org/.*?/firefox/(?P[\d.]*?)/", IGNORECASE)
46 | re_find_overrides = r"(overrides|prefs).*\n(?P\n)"
47 |
48 | INSTALLATIONS_TO_CHECK = [
49 | # windows
50 | {
51 | "command": [str(Path("C:/Program Files/Mozilla Firefox/firefox"))],
52 | "root": Path(getenv("APPDATA") or "").joinpath("Mozilla/Firefox").resolve(),
53 | },
54 | {
55 | "command": [str(Path(getenv("LOCALAPPDATA") or "").joinpath("Mozilla Firefox/firefox").resolve())],
56 | "root": Path(getenv("APPDATA") or "").joinpath("Mozilla/Firefox").resolve(),
57 | },
58 | # linux
59 | {
60 | "command": ["firefox"],
61 | "root": Path.home().joinpath(".mozilla/firefox").absolute(),
62 | },
63 | # flatpak
64 | {
65 | "command": ["flatpak", "run", "org.mozilla.firefox"],
66 | "root": Path.home().joinpath(".var/app/org.mozilla.firefox/.mozilla/firefox").absolute(),
67 | },
68 | # macOS
69 | {
70 | "command": ["/Applications/Firefox.app/Contents/MacOS/firefox"],
71 | "root": Path.home().joinpath("Library/Application Support/Firefox").absolute(),
72 | },
73 | ]
74 |
75 |
76 | # command is a list, eg. ["firefox"] or ["flatpak", "run", "org.mozilla.firefox"]
77 | def _get_firefox_version(command):
78 | ver_string = check_output(command + ["--version"], encoding="UTF-8")
79 | return ver_string[ver_string.rindex(" ")+1:].strip()
80 |
81 | def _get_default_firefox_version_and_root():
82 | print("Searching for Firefox installation...")
83 | for installation in INSTALLATIONS_TO_CHECK:
84 | try:
85 | print(f" '{' '.join(installation['command'])}': ", end="")
86 | version = _get_firefox_version(installation["command"])
87 | print("YES")
88 | print(f"Root: {installation['root']}")
89 | return version, installation["root"]
90 | except Exception:
91 | print("no")
92 | continue
93 |
94 | raise Exception("Firefox binary not found. Please ensure Firefox is installed and the path is correct.")
95 |
96 | def _get_default_profile_folder(firefox_root):
97 | config_path = firefox_root.joinpath("profiles.ini")
98 |
99 | print(f"Reading {config_path}...")
100 |
101 | config_parser = ConfigParser(strict=False)
102 | config_parser.read(config_path)
103 |
104 | path = None
105 | for section in config_parser.sections():
106 | if "Default" in config_parser[section]:
107 | section_default_value = config_parser[section]["Default"]
108 | if section_default_value:
109 | print("Default detected from section: " + section)
110 | # Confirm whether a 0 value is possible, keep fallback until then
111 | if section_default_value == "0":
112 | continue
113 | if section_default_value == "1":
114 | path = config_parser[section]["Path"]
115 | else:
116 | path = section_default_value
117 | break
118 |
119 | if path is not None:
120 | return firefox_root.joinpath(path)
121 | else:
122 | raise Exception("Could not determine default Firefox profile! Exiting...")
123 |
124 | def _get_releases(repository_owner, repository_name):
125 | releases = []
126 | raw_releases = loads(urlopen(f"https://api.github.com/repos/{repository_owner}/{repository_name}/releases").read())
127 | for raw_release in raw_releases:
128 | name = raw_release["name"] or raw_release["tag_name"] # or fixes 126.0 not being lodaded
129 | body = raw_release["body"]
130 |
131 |
132 | # Find which firefox releases are supported. Manual overrides for ones that don't have it written in their thing!
133 | if name == "user.js v.122.1":
134 | supported = ["107.0", "107.1", "108.0", "108.0.1", "108.0.2", "109.0", "109.0", "110.1", "110.0.1", "111.0", "111.0.1", "112.0", "112.0.1", "112.0.2", "113.0", "113.0.1", "113.0.2", "114.0", "114.0.1", "114.0.2", "115.0", "115.0.1", "115.0.2", "115.0.3", "115.1.0", "115.10.0", "115.11.0", "115.12.0", "115.13.0", "115.14.0", "115.15.0", "115.16.0", "115.16.1", "115.17.0", "115.2.0", "115.2.1", "115.3.0", "115.3.1", "115.4.0", "115.5.0", "115.6.0", "115.7.0", "115.8.0", "115.9.0", "115.9.1", "116.0", "116.0.1", "116.0.2", "116.0.3", "117.0", "117.0.1", "118.0", "118.0.1", "118.0.2", "119.0", "119.0.1", "120.0", "120.0.1", "121.0", "121.0.1", "122.0", "122.0.1"]
135 | elif name == "user.js 116.1":
136 | supported = ["116.0", "116.0.1", "116.0.2", "116.0.3"]
137 | elif name == "Betterfox v.107":
138 | supported = ["107.0"]
139 | elif "firefox release" in body.lower():
140 | trim_body = body.lower()[body.lower().index("firefox release"):]
141 | supported = re_find_version.findall(trim_body)
142 | if len(supported) == 0:
143 | print(f"Could not parse release in '{name}'. Please post this error message on https://github.com/{repository_owner}/{repository_name}/issues")
144 | continue
145 | else:
146 | print(f"Could not find firefox release header '{name}'. Please post this error message on https://github.com/{repository_owner}/{repository_name}/issues")
147 | continue
148 |
149 | releases.append({
150 | "name": name,
151 | "url": raw_release["zipball_url"],
152 | "supported": supported,
153 | })
154 | return releases
155 |
156 | def _get_latest_compatible_release(releases):
157 | for release in releases:
158 | if firefox_version in release["supported"]:
159 | return release
160 | return None
161 |
162 | def backup_profile(src):
163 | dest = f"{src}-backup-{datetime.today().strftime('%Y-%m-%d-%H-%M-%S')}"
164 |
165 | copytree(src, dest, ignore=ignore_patterns("*lock"))
166 | print("Backed up profile to " + dest)
167 |
168 |
169 | def download_betterfox(url):
170 | data = BytesIO()
171 | data.write(urlopen(url).read())
172 | return data
173 |
174 | def extract_betterfox(data, profile_folder):
175 | zipfile = ZipFile(data)
176 | userjs_zipinfo = None
177 | for file in zipfile.filelist:
178 | if "/zen/" in file.filename and not args.zen:
179 | continue
180 | if file.filename.endswith("user.js"):
181 | userjs_zipinfo = file
182 | userjs_zipinfo.filename = Path(userjs_zipinfo.filename).name
183 |
184 | if not userjs_zipinfo:
185 | raise BaseException("Could not find user.js!")
186 |
187 | return zipfile.extract(userjs_zipinfo, profile_folder)
188 |
189 |
190 | def list_releases(releases, only_supported=False, add_index=False):
191 | print()
192 | print(f"Listing {'compatible' if only_supported else 'all'} Betterfox releases:")
193 | if only_supported:
194 | print("Use --list-all to view all available releases")
195 | else:
196 | print(f"Releases marked with '> ' are documented to be compatible with your Firefox version ({firefox_version})")
197 | print()
198 |
199 | i = 0
200 | for release in releases:
201 | supported = firefox_version in release["supported"]
202 | if not only_supported or (only_supported and supported):
203 | print(f"{f'[{i}]' if add_index else ''}{'> ' if supported else ' '}{release['name'].ljust(20)}\t\t\tSupported: {','.join(release['supported'])}")
204 | i+=1
205 |
206 | def _press_enter_to_exit(args):
207 | if not args.no_wait_for_exit:
208 | input("Press ENTER to exit...")
209 |
210 | if __name__ == "__main__":
211 | firefox_version, firefox_root = _get_default_firefox_version_and_root()
212 |
213 | default_profile_folder = _get_default_profile_folder(firefox_root)
214 |
215 | argparser = ArgumentParser(
216 |
217 | )
218 | argparser.add_argument("--overrides", "-o", default=default_profile_folder.joinpath("user-overrides.js"), help="if the provided file exists, add overrides to user.js. Defaults to " + str(default_profile_folder.joinpath("user-overrides.js"))),
219 | argparser.add_argument("--zen", "-z", action="store_true", default=False, help="Install user.js for the Zen browser instead. Defaults to False"),
220 |
221 |
222 | advanced = argparser.add_argument_group("Advanced")
223 | advanced.add_argument("--betterfox-version", "-bv", default=None, help=f"Which version of Betterfox to install. Defaults to the latest compatible release for your installed Firefox version")
224 | advanced.add_argument("--profile-dir", "-p", "-pd", default=default_profile_folder, help=f"Which profile dir to install user.js in. Defaults to {default_profile_folder}")
225 | advanced.add_argument("--repository-owner", "-ro", default="yokoffing", help="owner of the Betterfox repository. Defaults to yokoffing")
226 | advanced.add_argument("--repository-name", "-rn", default="Betterfox", help="name of the Betterfox repository. Defaults to Betterfox")
227 |
228 | disable = argparser.add_argument_group("Disable functionality")
229 | disable.add_argument("--no-backup", "-nb", action="store_true", default=False, help="disable backup of current profile (not recommended)"),
230 | disable.add_argument("--no-install", "-ni", action="store_true", default=False, help="don't install Betterfox"),
231 |
232 | modes = argparser.add_mutually_exclusive_group()
233 | modes.add_argument("--list", action="store_true", default=False, help=f"List all Betterfox releases compatible with your version of Firefox ({firefox_version})")
234 | modes.add_argument("--list-all", action="store_true", default=False, help=f"List all Betterfox releases")
235 | modes.add_argument("--interactive", "-i", action="store_true", default=False, help=f"Interactively select Betterfox version")
236 |
237 | behaviour = argparser.add_argument_group("Script behaviour")
238 | behaviour.add_argument("--no-wait-for-exit", "-nwfe", action="store_true", default=False, help="Disable 'Press ENTER to exit...' and exit immediately"),
239 |
240 | args = argparser.parse_args()
241 |
242 | releases = _get_releases(args.repository_owner, args.repository_name)
243 | selected_release = None
244 |
245 | if args.list or args.list_all:
246 | list_releases(releases, args.list)
247 | _press_enter_to_exit(args)
248 | exit()
249 |
250 | if not args.no_backup:
251 | backup_profile(args.profile_dir)
252 |
253 | if args.betterfox_version:
254 | # If not None AND not string, default value has been used
255 | if not isinstance(args.betterfox_version, str):
256 | selected_release = args.betterfox_version
257 | print(f"Using latest compatible Betterfox version ({selected_release['name']})...")
258 | # If string has been passed
259 | else:
260 | selected_release = next(rel for rel in releases if rel['name'] == args.betterfox_version)
261 | print(f"Using manually selected Betterfox version ({selected_release['name']})")
262 |
263 | if not args.betterfox_version:
264 | selected_release = _get_latest_compatible_release(releases)
265 |
266 | if args.interactive or not selected_release:
267 | if not selected_release:
268 | print("Could not find a compatible Betterfox version for your Firefox installation.")
269 |
270 | list_releases(releases, False, True)
271 | selection = int(input(f"Select Betterfox version, or press enter without typing a number to cancel [0-{len(releases) - 1}]: "))
272 |
273 | selected_release = releases[selection]
274 |
275 |
276 |
277 | if not args.no_install:
278 | userjs_path = extract_betterfox(
279 | download_betterfox(selected_release["url"]),
280 | args.profile_dir
281 | )
282 | print(f"Installed user.js to {userjs_path} !")
283 |
284 |
285 | if Path(args.overrides).exists():
286 | print("Found overrides at " + str(args.overrides))
287 |
288 | with open(str(args.overrides), "r", encoding="utf-8") as overrides_file:
289 | overrides = overrides_file.read()
290 | with open(userjs_path, "r", encoding="utf-8") as userjs_file:
291 | old_content = userjs_file.read()
292 | new_content = sub(re_find_overrides, "\n" + overrides + "\n", old_content, count=1, flags=IGNORECASE)
293 | with open(userjs_path, "w", encoding="utf-8") as userjs_file:
294 | userjs_file.write(new_content)
295 | else:
296 | print(f"Found no overrides in {args.overrides}")
297 |
298 | _press_enter_to_exit(args)
299 |
300 |
--------------------------------------------------------------------------------
/policies.json:
--------------------------------------------------------------------------------
1 | {
2 | "__COMMENT__ More Information": "https://github.com/mozilla/policy-templates/tree/master#readme",
3 | "policies": {
4 | "AppAutoUpdate": true,
5 | "AppAutoUpdate_comment": "Change to false to disable auto-updates.",
6 | "DisableFirefoxStudies": true,
7 | "DisableTelemetry": true,
8 | "DisableFeedbackCommands": true,
9 | "DisablePocket": true,
10 | "DisableSetDesktopBackground": true,
11 | "DisableDeveloperTools": false,
12 | "DontCheckDefaultBrowser": true,
13 | "DNSOverHTTPS": {
14 | "Enabled": false,
15 | "ProviderURL": "",
16 | "Locked": false
17 | },
18 | "ManualAppUpdateOnly": false,
19 | "ManualAppUpdateOnly_comment": "Change to true to disable auto-updates.",
20 | "NoDefaultBookmarks": true,
21 | "WebsiteFilter": {
22 | "Block": [
23 | "https://localhost/*"
24 | ]
25 | },
26 | "Extensions": {
27 | "Install": [
28 | "https://addons.mozilla.org/firefox/downloads/latest/ublock-origin/latest.xpi"
29 | ],
30 | "Uninstall": [
31 | "amazondotcom@search.mozilla.org",
32 | "ebay@search.mozilla.org"
33 | ]
34 | },
35 | "SearchEngines": {
36 | "PreventInstalls": false,
37 | "Remove": [
38 | "Amazon.com",
39 | "eBay"
40 | ],
41 | "Default": "DuckDuckGo",
42 | "Add": [
43 | {
44 | "Name": "DuckDuckGo Lite",
45 | "Description": "Minimal, ad-free version of DuckDuckGo",
46 | "Alias": "",
47 | "Method": "POST",
48 | "URLTemplate": "https://duckduckgo.com/lite/?q={searchTerms}",
49 | "PostData": "q={searchTerms}",
50 | "IconURL": "data:image/x-icon;base64,AAABAAIAEBAAAAEAIABoBAAAJgAAACAgAAABACAAqBAAAI4EAAAoAAAAEAAAACAAAAABACAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADVZ4Ss0Wd+PM1nf1Tpd4PM6XeDzM1nf1TRZ3481WeErAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAVYD/BjRa3pRQcOP9tMLy/83q2f/m9uv//f7+//L0/P+qu+7/UHDj/TRa3pRVgP8GAAAAAAAAAAAAAAAAVYD/BjNZ372Jnuv/9/j9/8nT9v+D0pj/R71m/02+a/9Kr3z/XreM//f4/f+Jnuv/M1nfvVWA/wYAAAAAAAAAADRa3pSJnuv/4Ob6/1h25P+8yPT/ntyv/6zhuv+Fvrj/PpKY/0Cbjf9YduT/4Ob6/4me6/80Wt6UAAAAADVZ4StQcOP99/j9/1h25P8zWN7/5+z7////////////Z4Lm/zNY3v8zWd3/M1je/1h25P/3+P3/UHDj/TVZ4Ss0Wd+PrLvx/5ut7v8zWN7/Rmfh/////////////////0Jo4P8neuf/IY/s/yZ85/8yXN//m63u/6y78f80Wd+PM1nf1ert+/9ObuL/M1je/3CK5////////////9j4//8RyPv/J3vn/ytx5P8lg+n/KHjm/05u4v/p7fv/M1nf1Tpd4PP4+f3/M1je/zNY3v+bre7////////////X+P//JNL8/yDJ+v8Utvb/II/t/y9j4P8zWN7/+Pn9/zpd4PM6XeDz+Pn9/zNY3v8zWN7/w871///////////////////////k+v//T5zt/xyc7/8UtPX/L2Ph//j5/f86XeDzM1nf1ert+/9ObuL/M1je/9vi+f//////oXZf////////////oXZf/2N/5f8zWN7/M1je/05u4v/q7fv/M1nf1TRZ34+su/H/m63u/zNY3v/H0fX//////////////////////+js+/83W97/M1je/zNY3v+bre7/rLvx/zRZ3481WeErUHDj/ff4/f9YduT/X3zl//Hz/P////////////j5/f9yi+j/M1je/zNY3v9YduT/9/j9/1Bw4/01WeErAAAAADRa3pSJnuv/4Ob6/1h25P9MbOL/2N/4/73J9P9DZeD/M1je/zNY3v9YduT/4Ob6/4me6/80Wt6UAAAAAAAAAABVgP8GM1nfvYme6//3+P3/m63u/05u4v8zWN7/M1je/05u4v+bre7/9/j9/4me6/8zWd+9VYD/BgAAAAAAAAAAAAAAAFWA/wY0Wt6UUHDj/ay78f/p7fv/+Pn9//j5/f/p7fv/rLvx/1Bw4/00Wt6UVYD/BgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADVZ4Ss0Wd+PM1nf1Tpd4PM6XeDzM1nf1TRZ3481WeErAAAAAAAAAAAAAAAAAAAAAPAPAADAAwAAgAEAAIABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIABAACAAQAAwAMAAPAPAAAoAAAAIAAAAEAAAAABACAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFWA/wY2Wt9HM1nelTRY3780WN7ZM1je8zNY3vM0WN7ZNFjfvzNZ3pU2Wt9HVYD/BgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADVg3xgzWN+WNFne8TNY3v9ceuT/iJ7r/52v7/+ywPL/ssDy/52v7/+Inuv/XHrk/zNY3v80Wd7xM1jfljVg3xgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAElt/wczWOCCM1nf9Ets4v+ouPH/6e37/+vv+//a4Pj/2eD4/9zi+f/c4vn/2eD4/9rg+P/m6vv/6e37/6i48f9LbOL/M1nf9DNY4IJJbf8HAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA1YN8YM1jfxz9i4P+js/D/8fP8/6Cx7/+7x/P/5fbp/1zEd/+o4Lb/9vz4////////////3+T5/zVZ3v9Xed3/obPu//Hz/P+js/D/P2Hf/zNY38c1YN8YAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAN1njLjRZ3uNTcuP/4eb6/7PB8v9IaeH/M1je/9rg+f/H69D/Rrxl/0a8Zf9NtV//RrRa/063Yv9fpqf/QqWA/0a8Zf87gqv/SGnh/7TC8v/h5vr/U3Lj/zRZ3uMzW+MtAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADVg3xg0Wd7jZ4Pm/+/x/P+Emuv/M1je/zNY3v87Xt///P3+/7rmxv9GvGX/Rrxl/0azWv9GvGX/Rrxl/0a8ZP9GvGX/Rrxl/zyIo/8zWN7/M1je/4Sa6//v8fz/Z4Lm/zRZ3uM1YN8YAAAAAAAAAAAAAAAAAAAAAAAAAABJbf8HM1jfx1Ny4//v8fz/aoXm/zNY3v8zWN7/M1je/2N/5f//////tOTB/0a8Zf9HvWb/c8mH/1W+bv9IuWj/Qqp7/0a8Zf9GvGX/PIWo/zNY3v8zWN7/M1je/2qF5v/v8fz/U3Lj/zNY38dJbf8HAAAAAAAAAAAAAAAAAAAAADNY4II/YuD/4eb6/4Sa6/8zWN7/M1je/zNY3v8zWN7/j6Ps///////W8d3/pt+1/+X26v//////8/X9/zhc3v80Wdz/PIek/0a4av85d7j/M1je/zNY3v8zWN7/M1je/4Sa6//h5vr/P2Hf/zNY4IIAAAAAAAAAAAAAAAA1YN8YM1nf9KOz8P+0wvL/M1je/zNY3v8zWN7/M1je/zNY3v+6xvP///////////////////////////+zwfL/M1je/zNY3v8zWN7/NFzY/zNZ3f8zWN7/M1je/zNY3v8zWN7/M1je/7TC8v+js/D/M1nf9DVg3xgAAAAAAAAAADNY35ZLbOL/8fP8/0hp4f8zWN7/M1je/zNY3v8zWN7/M1je/+Xq+v///////////////////////////32U6v8zWN7/M1je/zNY3v8zWN7/M1je/zNY3v8zWN7/M1je/zNY3v8zWN7/SGnh//Hz/P9LbOL/M1jflgAAAABVgP8GNFne8ai48f+hsu//M1je/zNY3v8zWN7/M1je/zNY3v9DZeD/////////////////////////////////V3bj/zNY3v8zWN7/M1je/zNY3v8zWN7/M1je/zNY3v8zWN7/M1je/zNY3v8zWN7/obLv/6i48f80Wd7xVYD/BjZa30czWN7/6e37/1Z04/8zWN7/M1je/zNY3v8zWN7/M1je/2+J5/////////////////////////////////9RcOL/Lmfi/yKN7P8XrPP/EML5/w3K+/8Suvf/HZnu/y5n4v8zWN7/M1je/zNY3v9WdOP/6e37/zNY3v82Wt9HM1nelVx65P/j6Pr/M1je/zNY3v8zWN7/M1je/zNY3v8zWN7/mavu////////////////////////////7/z//yK79v8K0v3/Fq/0/yKN7P8iiev/IY7s/xqh8P8Suff/Dcr7/y5o4v8zWN7/M1je/zNY3v/j6Pr/XHrk/zNZ3pU0WN+/iJ7r/6++8v8zWN7/M1je/zNY3v8zWN7/M1je/zNY3v/DzvX///////////////////////////9k4/7/CtL9/xK59/8zWN7/M1je/zNY3v8zWN7/M1je/zNY3v8zWN7/M1je/zNY3v8zWN7/M1je/6++8v+Inuv/NFjfvzRY3tmdr+//mqzu/zNY3v8zWN7/M1je/zNY3v8zWN7/M1je/+7x/P///////////////////////////2Xj/v8K0v3/C9D9/xmm8f8YqfP/Gafy/yKN7P8vZuH/M1je/zNY3v8zWN7/M1je/zNY3v8zWN7/mqzu/52v7/80WN7ZM1je87LA8v+Fm+v/M1je/zNY3v8zWN7/M1je/zNY3v9La+H/////////////////////////////////+P7//3Pm/v8P0/3/CtL9/wrS/f8K0v3/CtL9/wrR/f8VsvX/JYPp/zNb3v8zWN7/M1je/zNY3v+Fm+v/ssDy/zRZ3vIzWN7zssDy/4Wb6/8zWN7/M1je/zNY3v8zWN7/M1je/3SN6P////////////////////////////////////////////b+///T9///vPP//1q/9v8WrfT/DMv8/wrS/f8K0v3/DsX6/yl25v8zWN7/M1je/4Wb6/+ywPL/M1je8zRY3tmdr+//mqzu/zNY3v8zWN7/M1je/zNY3v8zWN7/m63u////////////0LWn/7qTfv/////////////////////////////+/v//////s8Dy/zNY3v8zWt7/KXbm/x2b7v8bn/D/KnPl/zNY3v8zWN7/mqzu/52v7/80WN7ZNFjfv4me6/+vvvL/M1je/zNY3v8zWN7/M1je/zNY3v+zwPL///////////+sfWT/om5R//v59///////////////////////pHFV/8Cdiv+ruvH/M1je/zNY3v8zWN7/M1je/zNY3v8zWN7/M1je/zNY3v+vvvL/iJ7r/zRY378zWd6VXHrk/+Po+v8zWN7/M1je/zNY3v8zWN7/M1je/7/K9P////////////z6+f/38u/////////////////////////////NsKH/4dDH/3uT6f8zWN7/M1je/zNY3v8zWN7/M1je/zNY3v8zWN7/M1je/+Po+v9ceuT/M1nelTZa30czWN7/6e37/1Z04/8zWN7/M1je/zNY3v8zWN7/p7fw///////k1c3////////////////////////////////////////////3+f3/Q2Xg/zNY3v8zWN7/M1je/zNY3v8zWN7/M1je/zNY3v9WdOP/6e37/zNY3v82Wt9HVYD/BjRZ3vGouPH/oLHv/zNY3v8zWN7/M1je/zNY3v92j+j//////+7l3//gz8b/+/j2///////////////////////p3db/2MK2/6mz5P8zWN7/M1je/zNY3v8zWN7/M1je/zNY3v8zWN7/M1je/6Gy7/+ouPH/NFne8VWA/wYAAAAAM1jflkts4v/x8/z/SGnh/zNY3v8zWN7/M1je/zNY3v/U3Pj////////////////////////////////////////////s7/z/RWfg/zNY3v8zWN7/M1je/zNY3v8zWN7/M1je/zNY3v9IaeH/8fP8/0ts4v8zWN+WAAAAAAAAAAA1YN8YM1nf9KOz8P+zwfL/M1je/zNY3v8zWN7/M1je/0Fj4P/DzvX/////////////////////////////////8PP8/2WB5v8zWN7/M1je/zNY3v8zWN7/M1je/zNY3v8zWN7/M1je/7TC8v+js/D/M1nf9DVg3xgAAAAAAAAAAAAAAAAzWOCCP2Lg/+Hm+v+Emuv/M1je/zNY3v8zWN7/R2jh/0do4f97k+n/1dz4////////////7/L8/4Oa6/9CZOD/M1je/zNY3v8zWN7/M1je/zNY3v8zWN7/M1je/zNY3v+Fm+v/4eb6/z9i4P8zWOCCAAAAAAAAAAAAAAAAAAAAAElt/wczWN/HU3Lj/+/x/P9qheb/M1je/zNY3v+Xqe7/7vH8/////////////////87X9/9TcuP/M1je/zNY3v8zWN7/M1je/zNY3v8zWN7/M1je/zNY3v8zWN7/aoXm/+/x/P9TcuP/M1jfx0lt/wcAAAAAAAAAAAAAAAAAAAAAAAAAADVg3xg0Wd7jZ4Lm/+/x/P+Emuv/M1je/2J+5f+puPH/rrzx/5Kl7f9PbuL/M1je/zNY3v8zWN7/M1je/zNY3v8zWN7/M1je/zNY3v8zWN7/M1je/4Sa6//v8fz/Z4Lm/zRZ3uM1YN8YAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADdZ4y40Wd7jU3Lj/+Hm+v+0wvL/SGnh/zNY3v8zWN7/M1je/zNY3v8zWN7/M1je/zNY3v8zWN7/M1je/zNY3v8zWN7/M1je/0hp4f+0wvL/4eb6/1Ny4/80Wd7jM1vjLQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADVg3xgzWN/HP2Lg/6Oz8P/x8/z/obLv/1Z04/8zWN7/M1je/zNY3v8zWN7/M1je/zNY3v8zWN7/M1je/1Z04/+hsu//8fP8/6Oz8P8/Yd//M1jfxzVg3xgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAElt/wczWOCCM1nf9Ets4v+ouPH/6e37/+Po+v+vvvL/mqzu/4Wb6/+Fm+v/mqzu/6++8v/j6Pr/6e37/6i48f9LbOL/M1nf9DNY4IJJbf8HAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA1YN8YM1jfljRZ3vEzWN7/XHrk/4ie6/+dr+//ssDy/7LA8v+dr+//iJ7r/1x65P8zWN7/NFne8TNY35Y1YN8YAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAVYD/BjZa30czWd6VNFjfvzRY3tkzWN7zM1je8zRY3tk0WN+/M1nelTZa30dVgP8GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP/AA///AAD//AAAP/gAAB/wAAAP4AAAB8AAAAPAAAADgAAAAYAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAABgAAAAcAAAAPAAAAD4AAAB/AAAA/4AAAf/AAAP/8AAP//wAP/"
51 | },
52 | {
53 | "Name": "SearXNG",
54 | "Description": "A privacy-respecting, hackable metasearch engine",
55 | "Alias": "",
56 | "Method": "POST",
57 | "URLTemplate": "https://searx.be/?q={searchTerms}",
58 | "PostData": "q={searchTerms}&time_range=&language=en-US&category_general=on",
59 | "IconURL": "data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9Im5vIj8+CjxzdmcgeG1sbnM6ZGM9Imh0dHA6Ly9wdXJsLm9yZy9kYy9lbGVtZW50cy8xLjEvIiB4bWxuczpjYz0iaHR0cDovL2NyZWF0aXZlY29tbW9ucy5vcmcvbnMjIiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiIHhtbG5zOnN2Zz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgaWQ9InN2ZzgiIHZlcnNpb249IjEuMSIgdmlld0JveD0iMCAwIDkyIDkyIiBoZWlnaHQ9IjkybW0iIHdpZHRoPSI5Mm1tIj4KICA8ZGVmcyBpZD0iZGVmczIiLz4KICA8bWV0YWRhdGEgaWQ9Im1ldGFkYXRhNSI+CiAgICA8cmRmOlJERj4KICAgICAgPGNjOldvcmsgcmRmOmFib3V0PSIiPgogICAgICAgIDxkYzpmb3JtYXQ+aW1hZ2Uvc3ZnK3htbDwvZGM6Zm9ybWF0PgogICAgICAgIDxkYzp0eXBlIHJkZjpyZXNvdXJjZT0iaHR0cDovL3B1cmwub3JnL2RjL2RjbWl0eXBlL1N0aWxsSW1hZ2UiLz4KICAgICAgICA8ZGM6dGl0bGUvPgogICAgICA8L2NjOldvcms+CiAgICA8L3JkZjpSREY+CiAgPC9tZXRhZGF0YT4KICA8ZyB0cmFuc2Zvcm09InRyYW5zbGF0ZSgtNDAuOTIxMzAzLC0xNy40MTY1MjYpIiBpZD0ibGF5ZXIxIj4KICAgIDxjaXJjbGUgcj0iMCIgc3R5bGU9ImZpbGw6bm9uZTtzdHJva2U6IzAwMDAwMDtzdHJva2Utd2lkdGg6MTI7c3Ryb2tlLW1pdGVybGltaXQ6NDtzdHJva2UtZGFzaGFycmF5Om5vbmU7c3Ryb2tlLW9wYWNpdHk6MSIgY3k9IjkyIiBjeD0iNzUiIGlkPSJwYXRoMzcxMyIvPgogICAgPGNpcmNsZSByPSIzMCIgY3k9IjUzLjkwMjU1NyIgY3g9Ijc1LjkyMTMwMyIgaWQ9InBhdGg4MzQiIHN0eWxlPSJmaWxsOm5vbmU7ZmlsbC1vcGFjaXR5OjE7c3Ryb2tlOiMzMDUwZmY7c3Ryb2tlLXdpZHRoOjEwO3N0cm9rZS1taXRlcmxpbWl0OjQ7c3Ryb2tlLWRhc2hhcnJheTpub25lO3N0cm9rZS1vcGFjaXR5OjEiLz4KICAgIDxwYXRoIGQ9Im0gNjcuNTE0ODQ5LDM3LjkxNTI0IGEgMTgsMTggMCAwIDEgMjEuMDUxNDc1LDMuMzEyNDA3IDE4LDE4IDAgMCAxIDMuMTM3MzEyLDIxLjA3ODI4MiIgaWQ9InBhdGg4NTIiIHN0eWxlPSJmaWxsOm5vbmU7ZmlsbC1vcGFjaXR5OjE7c3Ryb2tlOiMzMDUwZmY7c3Ryb2tlLXdpZHRoOjU7c3Ryb2tlLW1pdGVybGltaXQ6NDtzdHJva2UtZGFzaGFycmF5Om5vbmU7c3Ryb2tlLW9wYWNpdHk6MSIvPgogICAgPHJlY3QgdHJhbnNmb3JtPSJyb3RhdGUoLTQ2LjIzNDcwOSkiIHJ5PSIxLjg2NjkxMDVlLTEzIiB5PSIxMjIuMDg5OTUiIHg9IjMuNzA2MzUyOSIgaGVpZ2h0PSIzOS45NjMzMDMiIHdpZHRoPSIxOC44NDYzMzEiIGlkPSJyZWN0OTEyIiBzdHlsZT0ib3BhY2l0eToxO2ZpbGw6IzMwNTBmZjtmaWxsLW9wYWNpdHk6MTtzdHJva2U6bm9uZTtzdHJva2Utd2lkdGg6ODtzdHJva2UtbWl0ZXJsaW1pdDo0O3N0cm9rZS1kYXNoYXJyYXk6bm9uZTtzdHJva2Utb3BhY2l0eToxIi8+CiAgPC9nPgo8L3N2Zz4="
60 | },
61 | {
62 | "Name": "MetaGer",
63 | "Description": "MetaGer: Privacy Protected Search & Find",
64 | "Alias": "",
65 | "Method": "GET",
66 | "URLTemplate": "https://metager.org/meta/meta.ger3?eingabe={searchTerms}",
67 | "IconURL": "data:image/x-icon;base64,AAABAAEAQEAAAAEACAAoFgAAFgAAACgAAABAAAAAgAAAAAEACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgP4AAYD+AACA/wADgf4ABIH+AAWC/gAGgv4ACYT+AAuF/gAMhf4ADYb+AA6G/gAPh/4AEIf+ABGI/gATif4AFIn+ABWK/gAWiv4AF4v+ABmM/gAajP4AG43+AByN/gAejv4AIZD+ACSR/gAmkv4AJ5L+ACmU/gAqlP4ALJX+AC2W/gAulv4AMpj+ADSZ/gA5m/4AO5z+AD6e/gA/n/4AQJ/+AEKg/gBDof4ARKH+AEWi/gBGov4ASKP+AEyl/gBPpv4AU6j+AFWq/gBXq/4AWKv+AFut/gBcrf4AX6/+AGGw/gBksf4AZ7L+AGq0/gBvtv4Acbf+AHO4/gB0uf4Adrr+AHe6/gB4u/4Afr7+AIC//gCBwP4Ah8P+AIjD/gCJxP4AisT+AIvF/gCNxv4AkMf+AJHI/gCSyP4Ak8n+AJTJ/gCVyv4Alsr+AJjL/gCazP4AnM3+AJ7O/gCgz/4AodD+AKLQ/gCk0f4AptL+AKjT/gCq1P4ArdX+AK7W/gCv1v4AsNf+ALXZ/gC22v4At9r+ALjb/gC52/4AvN3+AMPg/gDE4f4AxuL+AMrk/gDM5f4Azub+AM/m/gDQ5/4A0ef+ANLo/gDU6f4A1ur+ANnr/gDb7P4A3+7+AOHv/gDk8f4A5fH+AOby/gDn8v4A6PP+AOnz/gDq9P4A6/T+AO31/gDv9v4A8/j+APX5/gD2+v4A9/r+APj7/gD5+/4A+vz+APv8/gD8/f4A/f3+AP///wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnyMjIyMHgICAgICAgICAgICAgIDhYyMjIwSAgICAgICAgIEMlVxfoiEfXJeRSYDAgICAgICAgICAgICAgICAgJmjIyMjDQCAgICAgICAgICAgICAm2MjIyMKwICAgICAgIzeIyMjIyMjIyMjIyMgU8dAgICAgICAgICAgICAgICSoyMjIxGAgICAgICAgICAgICAgJXjIyMjD4CAgICAgJMjIyMjIyMjIyMjIyMjIyMhQUCAgICAgICAgICAgICAjaMjIyMYwICAgICAgICAgICAgICPYyMjIxYAgICAgJAjIyMjIyMjIyMjIyMjIyMjIwjAgICAgICAgICAgICAgIhjIyMjHkCAgICAjtoaGIIAgICAiqMjIyMbwICAgIWg4yMjIyMXCoOAQMPJWmMjIyMOwICAgICAgICAgICAgICBYeMjIyMEAICAgJtjIyMUgICAgIQjIyMjIYEAgICQ4yMjIyMOAICAgICAgJCjIyMjFcCAgICAgICAgICAgICAgJwjIyMjCkCAgIVjIyMjIwrAgICAnqMjIyMIAICAmqMjIyMWgICAgICAgICKoyMjIxzAgICAgICAgICAgICAgICWYyMjIw9AgICOYyMjIyMdwsCAgJljIyMjDUCAgJ9jIyMjCcCAgICAgICAgyLjIyMiwoCAgICAgICAgICAgICAj+MjIyMVwICAmCMjIyMjIxWAgICSYyMjIxJAgICh4yMjIwMAgICAgJkjIyMjIyMjIwpAgICAgICAgICAgICAgIsjIyMjG4CAgaCjIyMjIyMjC8CAjWMjIyMZQICAn+MjIyMBAICAgICRoyMjIyMjIyMQgICAgICAgICAgICAgICEoyMjIyGBAIsjIyMjGiMjIx6DgIgjIyMjHsCAgJzjIyMjBMCAgICAjOMjIyMjIyMjF8CAgICAgICAgICAgICAgJ8jIyMjB8CTIyMjHYNeIyMjFsCBIeMjIyMEgICXYyMjIwnAgICAgIcjIyMjIyMjIx4AgICAgICAgICAgICAgICZoyMjIw1AnWMjIxQAi6MjIyMMQJvjIyMjCsCAjqMjIyMRwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkqMjIyMSRuMjIyMLgICVIyMjH4RWYyMjIw+AgIXiIyMjH8KAgICAgICAgICAgICAgICAgICAgICAgICAgICAgI2jIyMjGY9jIyMggYCAgl2jIyMXj+MjIyMWAICAlmMjIyMUQICAgICAgICAgICAgICAgICAgICAgICAgICAgICIYyMjIx8Z4yMjGECAgICKIuMjIxZjIyMjG8CAgIchYyMjIw8AgICAgICAgICAgICAgICAgICAgICAgICAgICAgWHjIyMjImMjIw5AgICAgJOjIyMiYyMjIyGBAICAjyMjIyMjFMMAgICAgICAgIBMGwYAgICAgICAgICAgICAgICcIyMjIyMjIyLFAICAgICB3SMjIyMjIyMjCACAgICXYyMjIyMgUstFgYJGTFNeYyMMwICAgICAgICAgICAgICAlmMjIyMjIyMbAICAgICAgIkioyMjIyMjIw1AgICAgRdjIyMjIyMjIyMjIyMjIyMjE0CAgICAgICAgICAgICAgI/jIyMjIyMjEQCAgICAgICAkiMjIyMjIyMSQICAgICAEGFjIyMjIyMjIyMjIyMjIxrAgICAgICAgICAgICAgICLIyMjIyMjIwjAgICAgICAgIGcoyMjIyMjGUCAgICAgICGliHjIyMjIyMjIyMjIx/TAICAgICAgICAgICAgICAhKMjIyMjIx6AAICAgICAgICAiKIjIyMjIx7AgICAgICAgICDjdWa32FiIBzYEMmBAICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"
68 | },
69 | {
70 | "Name": "StartPage",
71 | "Description": "The world's most private search engine",
72 | "Alias": "",
73 | "Method": "GET",
74 | "URLTemplate": "https://www.startpage.com/sp/search?query={searchTerms}",
75 | "IconURL": "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAADb0lEQVRYhb2VXWgUVxiGv2gtWHrXBqExO2d2z5leWC80ilRKDTHunAPWhEi0gYY2mZkorYm7Z260oCiiFaQ3/RNqG/CvqAheKLSUUgpWqBdCKdbc+XMji4mhmk2MXTdvL9r4U+dsZtasH3x3877v852/IapUuzDHz6HF0/jU1/g10CgEIUq+xoMgxLAf4qIX4ksvj3c6O/FiRa8k1dyMF4IQm/0QV4MQiNkFP4+P+/rw0jOFewN4I9D4PUHwk61xrSePVVWF9+agAo2xqsMfdcnLwU8U7ufQHGhMzkL4dJe9EN3xwrdiga9xq4LZXV/jkK+xsTePZT05LPXzaPvvcBZMOj/EvQ/yWDwzgMZRo4nG0a4+vGrSduYxP9DYF4QoG/QXKoa/349M8O+1ippgb6wlJCIvh25fY8rgs6bS9LuiRJ7GT0SoiwtARORpfG5YhWNGURDifJSoR2NlknAiop5+1Psh7kdczYJR5IcYiRAMJw1/OJDGL1EDdYWGc7R9LyY/+QzlLwYxdfgkcPoscO5H/FYtwMQ9HBmfAMaKwOhfwPBt4GYBuH4ddqQAQBFP1+VqAQCcifADgAaT4HLExyXAfPXM1TSvvTNX6NiQH29bPzC2tr2/uLZ9y/i6joERAHMjJVeGrn79/Q/ncejb09i95yA2fbQHbeu3YsmKjTuTxltc9dqOwv+bOfJno6iRq2ykSKiJVCbbFDc8lWpNM0eORHlZXH5YSVtnO+oPA/mIlVEtMSZfYgt1I8rDFvJWfX3zy5UNMqqFCVU2rESZCXU8lZZvEdHj+1hncXcpE+qg7ci/I8MdBYu78f6KjLv7TSaPYOQ4E3KICfWnLdSdGb935KlY4dMTMaEGZzJN0kzI74hoTiIIW7g7bEeVZg/C/SoJABERNablcsbdC7MFYXEV+6/6JIjIvs2EGmRCFcz7rEYZd0+kuHyPOfKmESLjhlVBTJdlZe1GvibLHPkuE7LLymTVa7Z8nR7b44Xp1sXMUaOG8zBl8WzvM0HEAuXyTebIomElSpaQHTWHaOTStR113wAxmUq7rTWHSHF3AxPqQTSEHGMiu6LmECwjNzEhpwyP1O0UdxfVHoLLbRUeqks1ByAisoQ8YNiK0nMBICKyufzmqbdByHPPDYCI5jIu99lCDTNHFhl3TzQ0rH7lHy2g5RVQKFbLAAAAAElFTkSuQmCC"
76 | }
77 | ]
78 | }
79 | }
80 | }
81 |
--------------------------------------------------------------------------------
/Peskyfox.js:
--------------------------------------------------------------------------------
1 |
2 | /****************************************************************************
3 | * Peskyfox *
4 | * "Aquila non capit muscas" *
5 | * priority: remove annoyances *
6 | * version: 146 *
7 | * url: https://github.com/yokoffing/Betterfox *
8 | * credit: Some prefs are reproduced and adapted from the arkenfox project *
9 | * credit urL: https://github.com/arkenfox/user.js *
10 | ***************************************************************************/
11 |
12 | /****************************************************************************
13 | * SECTION: MOZILLA UI *
14 | ****************************************************************************/
15 |
16 | // PREF: disable about:addons' Recommendations pane (uses Google Analytics)
17 | user_pref("extensions.getAddons.showPane", false); // HIDDEN
18 |
19 | // PREF: disable recommendations in about:addons' Extensions and Themes panes
20 | user_pref("extensions.htmlaboutaddons.recommendations.enabled", false);
21 |
22 | // PREF: Personalized Extension Recommendations in about:addons and AMO
23 | // [NOTE] This pref has no effect when Health Reports are disabled.
24 | // [SETTING] Privacy & Security>Firefox Data Collection & Use>Allow Firefox to make personalized extension recommendations
25 | user_pref("browser.discovery.enabled", false);
26 |
27 | // PREF: disable Firefox from asking to set as the default browser
28 | // [1] https://github.com/yokoffing/Betterfox/issues/166
29 | user_pref("browser.shell.checkDefaultBrowser", false);
30 |
31 | // PREF: disable Extension Recommendations (CFR: "Contextual Feature Recommender")
32 | // [1] https://support.mozilla.org/en-US/kb/extension-recommendations
33 | user_pref("browser.newtabpage.activity-stream.asrouter.userprefs.cfr.addons", false);
34 | user_pref("browser.newtabpage.activity-stream.asrouter.userprefs.cfr.features", false);
35 |
36 | // PREF: hide "More from Mozilla" in Settings
37 | user_pref("browser.preferences.moreFromMozilla", false);
38 |
39 | // PREF: tab and about:config warnings
40 | //user_pref("browser.tabs.warnOnClose", false); // DEFAULT [FF94+]
41 | //user_pref("browser.tabs.warnOnCloseOtherTabs", true); // DEFAULT
42 | //user_pref("browser.tabs.warnOnOpen", true); // DEFAULT
43 | user_pref("browser.aboutConfig.showWarning", false);
44 |
45 | // PREF: disable welcome notices
46 | user_pref("browser.startup.homepage_override.mstone", "ignore");
47 | user_pref("browser.aboutwelcome.enabled", false); // disable Intro screens
48 | //user_pref("startup.homepage_welcome_url", "");
49 | //user_pref("startup.homepage_welcome_url.additional", "");
50 | //user_pref("startup.homepage_override_url", ""); // What's New page after updates
51 |
52 | // PREF: disable "What's New" toolbar icon [FF69+]
53 | //user_pref("browser.messaging-system.whatsNewPanel.enabled", false);
54 |
55 | // PREF: new profile switcher
56 | user_pref("browser.profiles.enabled", true);
57 |
58 | // PREF: use native title bar buttons [LINUX]
59 | // [1] https://github.com/yokoffing/Betterfox/issues/320
60 | //user_pref("widget.gtk.non-native-titlebar-buttons.enabled", true);
61 |
62 | // PREF: disable search engine switcher in the URL bar [FF136+]
63 | //user_pref("browser.urlbar.scotchBonnet.enableOverride", false);
64 |
65 | /****************************************************************************
66 | * SECTION: THEME ADJUSTMENTS *
67 | ****************************************************************************/
68 |
69 | // PREF: enable Firefox to use userChome, userContent, etc.
70 | user_pref("toolkit.legacyUserProfileCustomizations.stylesheets", true);
71 |
72 | // PREF: add compact mode back to options
73 | user_pref("browser.compactmode.show", true);
74 |
75 | // PREF: preferred color scheme for websites
76 | // [SETTING] General>Language and Appearance>Website appearance
77 | // By default, color scheme matches the theme of your browser toolbar (3).
78 | // Set this pref to choose Dark on sites that support it (0) or Light (1).
79 | // Before FF95, the pref was 2, which determined site color based on OS theme.
80 | // Dark (0), Light (1), System (2), Browser (3) [DEFAULT FF95+]
81 | // [1] https://www.reddit.com/r/firefox/comments/rfj6yc/how_to_stop_firefoxs_dark_theme_from_overriding/hoe82i5/?context=3
82 | user_pref("layout.css.prefers-color-scheme.content-override", 2);
83 |
84 | // PREF: disable always using dark theme for private browsing windows [FF106+]
85 | //user_pref("browser.theme.dark-private-windows", false);
86 |
87 | // PREF: prevent private windows being separate from normal windows in taskbar [WINDOWS] [FF106+]
88 | user_pref("browser.privateWindowSeparation.enabled", false);
89 |
90 | // PREF: show search bar [FF122+]
91 | // Mozilla has removed the search bar option from the settings window.
92 | //user_pref("browser.search.widget.inNavBar", true);
93 |
94 | // PREF: new tab page wallpapers
95 | //user_pref("browser.newtabpage.activity-stream.newtabWallpapers.v2.enabled", true); // [DEFAULT FF132+]
96 |
97 | /****************************************************************************
98 | * SECTION: AI *
99 | ****************************************************************************/
100 | // PREF: AI master switch
101 | // [1] https://github.com/yokoffing/Betterfox/issues/416
102 | user_pref("browser.ml.enable", false);
103 |
104 | // PREF: AI chat
105 | user_pref("browser.ml.chat.enabled", false);
106 |
107 | // PREF: AI chatbot option in right click menu
108 | user_pref("browser.ml.chat.menu", false);
109 |
110 | // PREF: AI-enhanced tab groups
111 | // [1] https://support.mozilla.org/kb/how-use-ai-enhanced-tab-groups
112 | user_pref("browser.tabs.groups.smart.enabled", false);
113 |
114 | // PREF: link previews
115 | user_pref("browser.ml.linkPreview.enabled", false);
116 |
117 | /****************************************************************************
118 | * SECTION: COOKIE BANNER HANDLING *
119 | ****************************************************************************/
120 |
121 | // PREF: Cookie Banner handling
122 | // [DEPRECIATED] Future of the project is unclear. See [5] and [6].
123 | // [NOTE] Feature still enforces Total Cookie Protection to limit 3rd-party cookie tracking [1]
124 | // [1] https://github.com/mozilla/cookie-banner-rules-list/issues/33#issuecomment-1318460084
125 | // [2] https://phabricator.services.mozilla.com/D153642
126 | // [3] https://winaero.com/make-firefox-automatically-click-on-reject-all-in-cookie-banner-consent/
127 | // [4] https://docs.google.com/spreadsheets/d/1Nb4gVlGadyxix4i4FBDnOeT_eJp2Zcv69o-KfHtK-aA/edit#gid=0
128 | // [5] https://bugzilla.mozilla.org/show_bug.cgi?id=1940418
129 | // [6] https://github.com/mozilla/cookie-banner-rules-list/issues/544
130 | // 2: reject banners if it is a one-click option; otherwise, fall back to the accept button to remove banner
131 | // 1: reject banners if it is a one-click option; otherwise, keep banners on screen
132 | // 0: disable all cookie banner handling
133 | //user_pref("cookiebanners.service.mode", 1);
134 | //user_pref("cookiebanners.service.mode.privateBrowsing", 1);
135 |
136 | // PREF: Cookie Banner global rules
137 | // Global rules that can handle a list of cookie banner libraries and providers on any site.
138 | // This is used for click rules that can handle common Consent Management Providers (CMP).
139 | //user_pref("cookiebanners.service.enableGlobalRules", true); // DEFAULT [FF121+]
140 | //user_pref("cookiebanners.service.enableGlobalRules.subFrames", true); // DEFAULT [FF121+]
141 |
142 | /****************************************************************************
143 | * SECTION: TRANSLATIONS *
144 | ****************************************************************************/
145 |
146 | // PREF: Firefox Translations [FF118+]
147 | // Automated translation of web content is done locally in Firefox, so that
148 | // the text being translated does not leave your machine.
149 | // [ABOUT] Visit about:translations to translate your own text as well.
150 | // [1] https://blog.mozilla.org/en/mozilla/local-translation-add-on-project-bergamot/
151 | // [2] https://blog.nightly.mozilla.org/2023/06/01/firefox-translations-and-other-innovations-these-weeks-in-firefox-issue-139/
152 | // [3] https://www.ghacks.net/2023/08/02/mozilla-firefox-117-beta-brings-an-automatic-language-translator-for-websites-and-it-works-offline/
153 | //user_pref("browser.translations.enable", true); // DEFAULT
154 | //user_pref("browser.translations.autoTranslate", true);
155 |
156 | /****************************************************************************
157 | * SECTION: FULLSCREEN NOTICE *
158 | ****************************************************************************/
159 |
160 | // PREF: remove fullscreen delay
161 | user_pref("full-screen-api.transition-duration.enter", "0 0"); // default=200 200
162 | user_pref("full-screen-api.transition-duration.leave", "0 0"); // default=200 200
163 |
164 | // PREF: disable fullscreen notice
165 | // [NOTE] Adjust to a sensible value, like 1250, if you have security concerns.
166 | //user_pref("full-screen-api.warning.timeout", 0); // default=3000; alt=1250
167 | //user_pref("full-screen-api.warning.delay", -1); // default=500
168 |
169 | /****************************************************************************
170 | * SECTION: FONT APPEARANCE *
171 | ****************************************************************************/
172 |
173 | // PREF: smoother font
174 | // [1] https://reddit.com/r/firefox/comments/wvs04y/windows_11_firefox_v104_font_rendering_different/?context=3
175 | //user_pref("gfx.webrender.quality.force-subpixel-aa-where-possible", true);
176 |
177 | // PREF: use DirectWrite everywhere like Chrome [WINDOWS]
178 | // [1] https://kb.mozillazine.org/Thunderbird_6.0,_etc.#Font_rendering_and_performance_issues
179 | // [2] https://reddit.com/r/firefox/comments/wvs04y/comment/ilklzy1/?context=3
180 | //user_pref("gfx.font_rendering.cleartype_params.rendering_mode", 5);
181 | //user_pref("gfx.font_rendering.cleartype_params.cleartype_level", 100);
182 | //user_pref("gfx.font_rendering.cleartype_params.force_gdi_classic_for_families", ""); // DEFAULT FF135+
183 | //user_pref("gfx.font_rendering.directwrite.use_gdi_table_loading", false);
184 | // Some users find these helpful:
185 | //user_pref("gfx.font_rendering.cleartype_params.gamma", 1750);
186 | //user_pref("gfx.font_rendering.cleartype_params.enhanced_contrast", 100);
187 | //user_pref("gfx.font_rendering.cleartype_params.pixel_structure", 1);
188 |
189 | // PREF: use macOS Appearance Panel text smoothing setting when rendering text [macOS]
190 | //user_pref("gfx.use_text_smoothing_setting", true);
191 |
192 | /****************************************************************************
193 | * SECTION: URL BAR *
194 | ****************************************************************************/
195 |
196 | // PREF: minimize URL bar suggestions (bookmarks, history, open tabs)
197 | // Dropdown options in the URL bar:
198 | //user_pref("browser.urlbar.suggest.history", false);
199 | //user_pref("browser.urlbar.suggest.bookmark", true); // DEFAULT
200 | //user_pref("browser.urlbar.suggest.clipboard", false);
201 | //user_pref("browser.urlbar.suggest.openpage", false);
202 | user_pref("browser.urlbar.suggest.engines", false);
203 | //user_pref("browser.urlbar.suggest.searches", false);
204 | //user_pref("browser.urlbar.quickactions.enabled", false);
205 | //user_pref("browser.urlbar.suggest.weather", true); // DEFAULT [FF108]
206 | //user_pref("browser.urlbar.weather.ignoreVPN", false); // DEFAULT
207 | //user_pref("browser.urlbar.suggest.calculator", true); // [DEFAULT FF137+]
208 | //user_pref("browser.urlbar.unitConversion.enabled", true); // [DEFAULT FF141+]
209 |
210 | // PREF: disable dropdown suggestions with empty query
211 | //user_pref("browser.urlbar.suggest.topsites", false);
212 |
213 | // PREF: disable urlbar trending search suggestions [FF118+]
214 | // [SETTING] Search>Search Suggestions>Show trending search suggestions (FF119)
215 | user_pref("browser.urlbar.trending.featureGate", false);
216 | //user_pref("browser.urlbar.suggest.trending", false);
217 |
218 | // PREF: disable urlbar suggestions
219 | //user_pref("browser.urlbar.addons.featureGate", false); // [FF115+]
220 | //user_pref("browser.urlbar.amp.featureGate", false); // [FF141+] adMarketplace
221 | //user_pref("browser.urlbar.fakespot.featureGate", false); // [FF130+] [DEFAULT: false]
222 | //user_pref("browser.urlbar.mdn.featureGate", false); // [FF117+] [HIDDEN PREF]
223 | //user_pref("browser.urlbar.weather.featureGate", false); // [FF108+] [DEFAULT: false]
224 | //user_pref("browser.urlbar.wikipedia.featureGate", false); // [FF141+]
225 | //user_pref("browser.urlbar.clipboard.featureGate", false); // [FF118+] [DEFAULT: true FF125+]
226 | //user_pref("browser.urlbar.yelp.featureGate", false); // [FF124+] [DEFAULT: false]
227 |
228 | // PREF: disable recent searches [FF120+]
229 | // [NOTE] Recent searches are cleared with history.
230 | // [1] https://support.mozilla.org/kb/search-suggestions-firefox
231 | //user_pref("browser.urlbar.recentsearches.featureGate", false);
232 |
233 | // PREF: disable tab-to-search [FF85+]
234 | // Alternatively, you can exclude on a per-engine basis by unchecking them in Options>Search
235 | // [SETTING] Privacy & Security>Address Bar>When using the address bar, suggest>Search engines
236 | //user_pref("browser.urlbar.suggest.engines", false);
237 |
238 | // PREF: Adaptive History Autofill
239 | // [1] https://docs.google.com/document/u/1/d/e/2PACX-1vRBLr_2dxus-aYhZRUkW9Q3B1K0uC-a0qQyE3kQDTU3pcNpDHb36-Pfo9fbETk89e7Jz4nkrqwRhi4j/pub
240 | //user_pref("browser.urlbar.autoFill", true); // [DEFAULT]
241 | //user_pref("browser.urlbar.autoFill.adaptiveHistory.enabled", false);
242 |
243 | // PREF: adjust the amount of Address bar / URL bar dropdown results
244 | // This value controls the total number of entries to appear in the location bar dropdown.
245 | // [NOTE] Items (bookmarks/history/openpages) with a high "frequency"/"bonus" will always
246 | // be displayed (no we do not know how these are calculated or what the threshold is),
247 | // and this does not affect the search by search engine suggestion.
248 | // disable=0
249 | //user_pref("browser.urlbar.maxRichResults", 5); // default=10
250 |
251 | // PREF: text fragments
252 | // [WARNING] Enabling can cause tab crashes [4]
253 | // [1] https://bugzilla.mozilla.org/show_bug.cgi?id=1753933#c6
254 | // [2] https://developer.mozilla.org/en-US/docs/Web/Text_fragments
255 | // [3] https://web.dev/articles/text-fragments
256 | // [4] https://github.com/yokoffing/Betterfox/issues/397
257 | //user_pref("dom.text_fragments.enabled", true); // [DEFAULT]
258 | //user_pref("dom.text_fragments.create_text_fragment.enabled", true);
259 |
260 | /****************************************************************************
261 | * SECTION: AUTOPLAY *
262 | ****************************************************************************/
263 |
264 | // PREF: do not autoplay media audio
265 | // [NOTE] You can set exceptions under site permissions
266 | // [SETTING] Privacy & Security>Permissions>Autoplay>Settings>Default for all websites
267 | // 0=Allow all, 1=Block non-muted media (default), 5=Block all
268 | //user_pref("media.autoplay.default", 1); // DEFAULT
269 | //user_pref("media.block-autoplay-until-in-foreground", true); // DEFAULT
270 |
271 | // PREF: disable autoplay of HTML5 media if you interacted with the site [FF78+]
272 | // 0=sticky (default), 1=transient, 2=user
273 | // Firefox's Autoplay Policy Documentation (PDF) is linked below via SUMO
274 | // [NOTE] If you have trouble with some video sites (e.g. YouTube), then add an exception (see previous PREF)
275 | // [1] https://support.mozilla.org/questions/1293231
276 | //user_pref("media.autoplay.blocking_policy", 2);
277 |
278 | /****************************************************************************
279 | * SECTION: NEW TAB PAGE *
280 | ****************************************************************************/
281 |
282 | // PREF: startup / new tab page
283 | // 0=blank, 1=home, 2=last visited page, 3=resume previous session
284 | // [NOTE] Session Restore is cleared with history and not used in Private Browsing mode
285 | // [SETTING] General>Startup>Open previous windows and tabs
286 | //user_pref("browser.startup.page", 3);
287 |
288 | // PREF: set HOME+NEW WINDOW page to blank tab
289 | // about:home=Activity Stream, custom URL, about:blank
290 | // [SETTING] Home>New Windows and Tabs>Homepage and new windows
291 | // [Custom URLs] Set two or more websites in Home Page Field – delimited by |
292 | // [1] https://support.mozilla.org/en-US/questions/1271888#answer-1262899
293 | //user_pref("browser.startup.homepage", "about:blank");
294 |
295 | // PREF: set NEWTAB page to blank tab
296 | // true=Firefox Home, false=blank page
297 | // [SETTING] Home>New Windows and Tabs>New tabs
298 | //user_pref("browser.newtabpage.enabled", false);
299 |
300 | // PREF: Pinned Shortcuts on New Tab
301 | // [SETTINGS] Home>Firefox Home Content
302 | // [1] https://github.com/arkenfox/user.js/issues/1556
303 | //user_pref("browser.newtabpage.activity-stream.discoverystream.enabled", false);
304 | //user_pref("browser.newtabpage.activity-stream.showSearch", true); // NTP Web Search [DEFAULT]
305 | //user_pref("browser.newtabpage.activity-stream.feeds.topsites", false); // Shortcuts
306 | user_pref("browser.newtabpage.activity-stream.showSponsoredTopSites", false); // Sponsored shortcuts [FF83+]
307 | //user_pref("browser.newtabpage.activity-stream.showWeather", false); // Weather [FF130+]
308 | //user_pref("browser.newtabpage.activity-stream.system.showWeather", false); // hides Weather as an UI option
309 | user_pref("browser.newtabpage.activity-stream.feeds.section.topstories", false); // Recommended by Pocket
310 | user_pref("browser.newtabpage.activity-stream.showSponsored", false); // Sponsored stories [FF58+]
311 | user_pref("browser.newtabpage.activity-stream.showSponsoredCheckboxes", false); // [FF140+] Support Firefox
312 | //user_pref("browser.newtabpage.activity-stream.feeds.section.highlights", false); // Recent Activity [DEFAULT]
313 | //user_pref("browser.newtabpage.activity-stream.section.highlights.includeBookmarks", false);
314 | //user_pref("browser.newtabpage.activity-stream.section.highlights.includeDownloads", false);
315 | //user_pref("browser.newtabpage.activity-stream.section.highlights.includeVisited", false);
316 | //user_pref("browser.newtabpage.activity-stream.feeds.snippets", false); // [DEFAULT]
317 |
318 | // PREF: wallpapers on New Tab [FF128+ NIGHTLY]
319 | //user_pref("browser.newtabpage.activity-stream.newtabWallpapers.enabled", false); // Wallpapers
320 |
321 | // PREF: clear default topsites
322 | // [NOTE] This does not block you from adding your own.
323 | user_pref("browser.newtabpage.activity-stream.default.sites", "");
324 |
325 | // PREF: keep search in the search box; prevent from jumping to address bar
326 | // [1] https://www.reddit.com/r/firefox/comments/oxwvbo/firefox_start_page_search_options/
327 | //user_pref("browser.newtabpage.activity-stream.improvesearch.handoffToAwesomebar", false);
328 |
329 | // PREF: Firefox logo to always show
330 | //user_pref("browser.newtabpage.activity-stream.logowordmark.alwaysVisible", true); // DEFAULT
331 |
332 | // PREF: Bookmarks Toolbar visibility
333 | // always, never, or newtab
334 | //user_pref("browser.toolbars.bookmarks.visibility", "newtab"); // DEFAULT
335 |
336 | /******************************************************************************
337 | * SECTION: POCKET *
338 | ******************************************************************************/
339 |
340 | // PREF: disable built-in Pocket extension
341 | // [1] https://support.mozilla.org/kb/future-of-pocket
342 | //user_pref("extensions.pocket.enabled", false); // DEFAULT
343 | //user_pref("extensions.pocket.api"," ");
344 | //user_pref("extensions.pocket.oAuthConsumerKey", " ");
345 | //user_pref("extensions.pocket.site", " ");
346 | //user_pref("extensions.pocket.showHome", false);
347 |
348 | /******************************************************************************
349 | * SECTION: DOWNLOADS *
350 | ******************************************************************************/
351 |
352 | // PREF: choose download location
353 | // [SETTING] To set your default "downloads": General>Downloads>Save files to...
354 | // 0=desktop, 1=downloads (default), 2=last used
355 | //user_pref("browser.download.folderList", 1); // DEFAULT
356 |
357 | // PREF: always ask how to handle new mimetypes [FF101+]
358 | // Enforce user interaction for greater security.
359 | // [SETTING] General>Files and Applications>Applications>What should Firefox do with other files?
360 | // false=Save files
361 | // true=Ask whether to open or save files
362 | //user_pref("browser.download.always_ask_before_handling_new_types", true);
363 |
364 | // PREF: always ask where to download
365 | // [OPTIONAL HARDENING] Enforce user interaction for greater security.
366 | // [SETTING] General>Files and Applications>Downloads>Always ask you where to save files
367 | // [DIALOGUE] "Ask whether to open or save files"
368 | // true=direct download (default)
369 | // false=the user is asked what to do
370 | // [1] https://github.com/yokoffing/Betterfox/issues/267
371 | //user_pref("browser.download.useDownloadDir", false);
372 | //user_pref("browser.download.dir", "C:\Users\\AppData\Local\Temp"); // [WINDOWS]
373 |
374 | // PREF: autohide the downloads button
375 | //user_pref("browser.download.autohideButton", true); // DEFAULT
376 |
377 | // PREF: disable download panel opening on every download [non-functional?]
378 | // Controls whether to open the download panel every time a download begins.
379 | // [NOTE] The first download ever ran in a new profile will still open the panel.
380 | //user_pref("browser.download.alwaysOpenPanel", false);
381 |
382 | // PREF: disable adding downloads to the system's "recent documents" list
383 | user_pref("browser.download.manager.addToRecentDocs", false);
384 |
385 | /****************************************************************************
386 | * SECTION: PDF *
387 | ****************************************************************************/
388 |
389 | // PREF: enforce Firefox's built-in PDF reader
390 | // This setting controls if the option "Display in Firefox" is available in the setting below
391 | // and by effect controls whether PDFs are handled in-browser or externally ("Ask" or "Open With").
392 | // [1] https://mozilla.github.io/pdf.js/
393 | //user_pref("pdfjs.disabled", false); // DEFAULT
394 |
395 | // PREF: allow viewing of PDFs even if the response HTTP headers
396 | // include Content-Disposition:attachment.
397 | //user_pref("browser.helperApps.showOpenOptionForPdfJS", true); // DEFAULT
398 |
399 | // PREF: open PDFs inline (FF103+)
400 | user_pref("browser.download.open_pdf_attachments_inline", true);
401 |
402 | // PREF: PDF sidebar on load
403 | // 2=table of contents (if not available, will default to 1)
404 | // 1=view pages
405 | // 0=disabled
406 | // -1=remember previous state (default)
407 | //user_pref("pdfjs.sidebarViewOnLoad", 2);
408 |
409 | // PREF: default zoom for PDFs [HIDDEN]
410 | // [NOTE] "page-width" not needed if using sidebar on load
411 | //user_pref("pdfjs.defaultZoomValue", page-width);
412 |
413 | /****************************************************************************
414 | * SECTION: TAB BEHAVIOR *
415 | ****************************************************************************/
416 |
417 | // PREF: search query opens in a new tab (instead of the current tab)
418 | //user_pref("browser.search.openintab", true); // SEARCH BOX
419 | //user_pref("browser.urlbar.openintab", true); // URL BAR
420 |
421 | // PREF: control behavior of links that would normally open in a new window
422 | // [NOTE] You can still right-click a link and open in a new window
423 | // 3 (default) = in a new tab; pop-up windows are treated like regular tabs
424 | // 2 = in a new window
425 | // 1 = in the current tab
426 | //user_pref("browser.link.open_newwindow", 3); // DEFAULT
427 |
428 | // PREF: determine the behavior of pages opened by JavaScript (like popups)
429 | // 2 (default) = catch new windows opened by JavaScript that do not have
430 | // specific values set (how large the window should be, whether it
431 | // should have a status bar, etc.)
432 | // 1 = let all windows opened by JavaScript open in new windows
433 | // 0 = force all new windows opened by JavaScript into tabs
434 | // [NOTE] Most advertising popups also open in new windows with values set
435 | // [1] https://kb.mozillazine.org/About:config_entries
436 | //user_pref("browser.link.open_newwindow.restriction", 0);
437 |
438 | // PREF: override for external links
439 | // Set if a different destination for external links is needed
440 | // 3=Open in a new tab in the current window
441 | // 2=Open in a new window
442 | // 1=Open in the current tab/window
443 | // -1=no overrides (default)
444 | //user_pref("browser.link.open_newwindow.override.external", -1); // DEFAULT
445 |
446 | // PREF: focus behavior for new tabs from links
447 | // Determine whether a link opens in the foreground or background on left-click
448 | // [SETTINGS] Settings>General>Tabs>"When you open a link, image or media in a new tab, switch to it immediately"
449 | // true(default) = opens new tabs by left-click in the background, leaving focus on the current tab
450 | // false = opens new tabs by left-click in the foreground, putting focus on the new tab
451 | // [NOTE] CTRL+SHIFT+CLICK will open new tabs in foreground (default); switching PREF to false will reverse this behavior
452 | // [1] https://kb.mozillazine.org/About:config_entries
453 | //user_pref("browser.tabs.loadInBackground", true); // DEFAULT
454 |
455 | // PREF: determines whether pages normally meant to open in a new window (such as
456 | // target="_blank" or from an external program), but that have instead been loaded in a new tab
457 | // This pref takes effect when Firefox has diverted a new window to a new tab instead, then:
458 | // true = loads the new tab in the background, leaving focus on the current tab
459 | // false(default) = loads the new tab in the foreground, taking the focus from the current tab
460 | // [NOTE] Setting this preference to true will still bring the browser to the front when opening links from outside the browser
461 | // [1] https://kb.mozillazine.org/About:config_entries
462 | //user_pref("browser.tabs.loadDivertedInBackground", false); // DEFAULT
463 |
464 | // PREF: force bookmarks to open in a new tab, not the current tab
465 | //user_pref("browser.tabs.loadBookmarksInTabs", true);
466 | //user_pref("browser.tabs.loadBookmarksInBackground", true); // load bookmarks in background
467 |
468 | // PREF: leave Bookmarks Menu open when selecting a site
469 | user_pref("browser.bookmarks.openInTabClosesMenu", false);
470 |
471 | // PREF: restore "View image info" on right-click
472 | user_pref("browser.menu.showViewImageInfo", true);
473 |
474 | // PREF: show all matches in Findbar
475 | user_pref("findbar.highlightAll", true);
476 |
477 | // PREF: force disable finding text on page without prompting
478 | // [NOTE] Not as powerful as using Ctrl+F.
479 | // [SETTINGS] General>Browsing>"Search for text when you start typing"
480 | // [1] https://github.com/yokoffing/Betterfox/issues/212
481 | //user_pref("accessibility.typeaheadfind", false); // enforce DEFAULT
482 |
483 | // PREF: disable middle mouse click opening links from clipboard
484 | // It's been default in Linux since at least FF102.
485 | // [1] https://gitlab.torproject.org/tpo/applications/tor-browser/-/issues/10089
486 | //user_pref("middlemouse.contentLoadURL", false);
487 |
488 | // PREF: Prevent scripts from moving and resizing open windows
489 | //user_pref("dom.disable_window_move_resize", true);
490 |
491 | // PREF: insert new tabs after groups like it
492 | // true(default) = open new tabs to the right of the parent tab
493 | // false = new tabs are opened at the far right of the tab bar
494 | //user_pref("browser.tabs.insertRelatedAfterCurrent", true); // DEFAULT
495 |
496 | // PREF: insert new tabs immediately after the current tab
497 | //user_pref("browser.tabs.insertAfterCurrent", true);
498 |
499 | // PREF: leave the browser window open even after you close the last tab
500 | //user_pref("browser.tabs.closeWindowWithLastTab", false);
501 |
502 | // PREF: stop websites from reloading pages automatically
503 | // [WARNING] Breaks some sites.
504 | // [1] https://www.ghacks.net/2018/08/19/stop-websites-from-reloading-pages-automatically/
505 | //user_pref("accessibility.blockautorefresh", true);
506 | //user_pref("browser.meta_refresh_when_inactive.disabled", true);
507 |
508 | // PREF: do not select the space next to a word when selecting a word
509 | user_pref("layout.word_select.eat_space_to_next_word", false);
510 |
511 | // PREF: controls if a double-click word selection also deletes one adjacent whitespace
512 | // This mimics native behavior on macOS.
513 | //user_pref("editor.word_select.delete_space_after_doubleclick_selection", true);
514 |
515 | // PREF: do not hide the pointer while typing [LINUX]
516 | //user_pref("widget.gtk.hide-pointer-while-typing.enabled", false);
517 |
518 | // PREF: limit events that can cause a pop-up
519 | // Firefox provides an option to provide exceptions for sites, remembered in your Site Settings.
520 | // (default) "change click dblclick auxclick mouseup pointerup notificationclick reset submit touchend contextmenu"
521 | // (alternate) user_pref("dom.popup_allowed_events", "click dblclick mousedown pointerdown");
522 | //user_pref("dom.popup_allowed_events", "click dblclick");
523 | //user_pref("dom.disable_open_during_load", true); // DEFAULT
524 | //user_pref("privacy.popups.showBrowserMessage", true); // DEFAULT
525 |
526 | // PREF: enable Tab Previews [FF122+, FF128+]
527 | // [1] https://github.com/yokoffing/Betterfox/issues/309
528 | //user_pref("browser.tabs.hoverPreview.enabled", true);
529 | //user_pref("browser.tabs.hoverPreview.showThumbnails", true); // DEFAULT
530 |
531 | /****************************************************************************
532 | * SECTION: KEYBOARD AND SHORTCUTS *
533 | ****************************************************************************/
534 |
535 | // PREF: disable backspace action
536 | // 0=previous page, 1=scroll up, 2=do nothing
537 | //user_pref("browser.backspace_action", 2); // DEFAULT
538 |
539 | // PREF: disable ALT key toggling the menu bar
540 | //user_pref("ui.key.menuAccessKeyFocuses", false);
541 | //user_pref("ui.key.menuAccessKey", 18); // DEFAULT
542 |
543 | // PREF: cycle through tabs in recently used order
544 | // [SETTING] Ctrl+Tab cycles through tabs in recently used order
545 | //user_pref("browser.ctrlTab.sortByRecentlyUsed", true);
546 |
547 | // PREF: disable websites overriding Firefox's keyboard shortcuts [FF58+]
548 | // 0=ask (default), 1=allow, 2=block
549 | // [SETTING] to add site exceptions: Ctrl+I>Permissions>Override Keyboard Shortcuts ***/
550 | //user_pref("permissions.default.shortcuts", 2);
551 |
552 | // PREF: hide frequent sites on right-click of taskbar icon [WINDOWS?]
553 | //user_pref("browser.taskbar.lists.frequent.enabled", false);
554 |
555 | /****************************************************************************
556 | * SECTION: ACCESSIBILITY AND USABILITY *
557 | ****************************************************************************/
558 |
559 | // PREF: disable Reader mode parse on load
560 | // Reader supposedly costs extra CPU after page load.
561 | // [TIP] Use about:reader?url=%s as a keyword to open links automatically in reader mode [1].
562 | // Firefox will not have to parse webpage for Reader when navigating.
563 | // Extremely minimal performance impact, if you disable.
564 | // [1] https://www.reddit.com/r/firefox/comments/621sr2/i_found_out_how_to_automatically_open_a_url_in/
565 | //user_pref("reader.parse-on-load.enabled", false);
566 |
567 | // PREF: Spell-check
568 | // 0=none, 1-multi-line, 2=multi-line & single-line
569 | //user_pref("layout.spellcheckDefault", 1); // DEFAULT
570 |
571 | // PREF: Spell Checker underline styles [HIDDEN]
572 | // [1] https://kb.mozillazine.org/Ui.SpellCheckerUnderlineStyle#Possible_values_and_their_effects
573 | //user_pref("ui.SpellCheckerUnderlineStyle", 1);
574 |
575 | // PREF: remove underlined characters from various settings
576 | //user_pref("ui.key.menuAccessKey", 0);
577 |
578 | // PREF: enable CSS moz document rules
579 | // Still needed for Stylus?
580 | // [1] https://reddit.com/r/FirefoxCSS/comments/8x2q97/reenabling_mozdocument_rules_in_firefox_61/
581 | //user_pref("layout.css.moz-document.content.enabled", true);
582 |
583 | /****************************************************************************
584 | * SECTION: BOOKMARK MANAGEMENT *
585 | ****************************************************************************/
586 |
587 | // PREF: limit the number of bookmark backups Firefox keeps
588 | //user_pref("browser.bookmarks.max_backups", 1); // default=15
589 |
590 | /****************************************************************************
591 | * SECTION: ZOOM AND DISPLAY SETTINGS *
592 | ****************************************************************************/
593 |
594 | // PREF: zoom only text on webpage, not other elements
595 | //user_pref("browser.zoom.full", false);
596 |
597 | // PREF: allow for more granular control of zoom levels
598 | // Especially useful if you want to set your default zoom to a custom level.
599 | //user_pref("toolkit.zoomManager.zoomValues", ".3,.5,.67,.8,.9,.95,1,1.1,1.2,1.3,1.4,1.5,1.6,1.7,2,2.4,3");
600 |
601 | // PREF: restore zooming behavior [macOS] [FF109+]
602 | // On macOS, Ctrl or Cmd + trackpad or mouse wheel now scrolls the page instead of zooming.
603 | // This avoids accidental zooming and matches Safari's and Chrome's behavior.
604 | // The prefs below restores the previous zooming behavior
605 | //user_pref("mousewheel.with_control.action", 3);
606 | //user_pref("mousewheel.with_meta.action", 3);
607 |
608 | // PREF: adjust the minimum tab width
609 | // Can be overridden by userChrome.css
610 | //user_pref("browser.tabs.tabMinWidth", 120); // default=76
611 |
612 | // PREF: always underline links [FF120+]
613 | //user_pref("layout.css.always_underline_links", false); // DEFAULT
614 |
615 | /****************************************************************************
616 | * SECTION: DEVELOPER TOOLS *
617 | ****************************************************************************/
618 |
619 | // PREF: wrap long lines of text when using source / debugger
620 | //user_pref("view_source.wrap_long_lines", true);
621 | //user_pref("devtools.debugger.ui.editor-wrapping", true);
622 |
623 | // PREF: enable ASRouter Devtools at about:newtab#devtools
624 | // This is useful if you're making your own CSS theme.
625 | // [1] https://firefox-source-docs.mozilla.org/browser/components/newtab/content-src/asrouter/docs/debugging-docs.html
626 | //user_pref("browser.newtabpage.activity-stream.asrouter.devtoolsEnabled", true);
627 |
628 | // show user agent styles in the inspector
629 | //user_pref("devtools.inspector.showUserAgentStyles", true);
630 |
631 | // show native anonymous content (like scrollbars or tooltips) and user
632 | // agent shadow roots (like the components of an element) in the inspector
633 | //user_pref("devtools.inspector.showAllAnonymousContent", true);
634 |
635 | /****************************************************************************
636 | * SECTION: IMAGE AND MEDIA HANDLING *
637 | ****************************************************************************/
638 |
639 | // PREF: JPEG XL image format [NIGHTLY]
640 | // May not affect anything on ESR/Stable channel [2].
641 | // [TEST] https://www.jpegxl.io/firefox#firefox-jpegxl-tutorial
642 | // [1] https://cloudinary.com/blog/the-case-for-jpeg-xl
643 | // [2] https://bugzilla.mozilla.org/show_bug.cgi?id=1539075#c51
644 | //user_pref("image.jxl.enabled", true);
645 |
--------------------------------------------------------------------------------
/Fastfox.js:
--------------------------------------------------------------------------------
1 |
2 | /****************************************************************************************
3 | * Fastfox *
4 | * "Non ducor duco" *
5 | * priority: speedy browsing *
6 | * version: 146 *
7 | * url: https://github.com/yokoffing/Betterfox *
8 | ***************************************************************************************/
9 |
10 | /****************************************************************************
11 | * SECTION: GENERAL *
12 | ****************************************************************************/
13 |
14 | // PREF: initial paint delay
15 | // How long FF will wait before rendering the page (in ms)
16 | // [NOTE] You may prefer using 250.
17 | // [NOTE] Dark Reader users may want to use 1000 [3].
18 | // [1] https://bugzilla.mozilla.org/show_bug.cgi?id=1283302
19 | // [2] https://docs.google.com/document/d/1BvCoZzk2_rNZx3u9ESPoFjSADRI0zIPeJRXFLwWXx_4/edit#heading=h.28ki6m8dg30z
20 | // [3] https://old.reddit.com/r/firefox/comments/o0xl1q/reducing_cpu_usage_of_dark_reader_extension/
21 | // [4] https://reddit.com/r/browsers/s/wvNB7UVCpx
22 | //user_pref("nglayout.initialpaint.delay", 5); // DEFAULT; formerly 250
23 | //user_pref("nglayout.initialpaint.delay_in_oopif", 5); // DEFAULT
24 |
25 | // PREF: Font rendering cache in Skia (32MB)
26 | // Increases font cache size to improve performance on text-heavy websites.
27 | // Especially beneficial for sites with many font faces or complex typography.
28 | // [1] https://bugzilla.mozilla.org/show_bug.cgi?id=1239151#c2
29 | user_pref("gfx.content.skia-font-cache-size", 32); // 32 MB; default=5; Chrome=20
30 |
31 | // PREF: page reflow timer
32 | // Rather than wait until a page has completely downloaded to display it to the user,
33 | // web browsers will periodically render what has been received to that point.
34 | // Because reflowing the page every time additional data is received slows down
35 | // total page load time, a timer was added so that the page would not reflow too often.
36 | // This preference specfies whether that timer is active.
37 | // [1] https://kb.mozillazine.org/Content.notify.ontimer
38 | // true = do not reflow pages at an interval any higher than that specified by content.notify.interval (default)
39 | // false = reflow pages whenever new data is received
40 | //user_pref("content.notify.ontimer", true); // DEFAULT
41 |
42 | // PREF: content notification delay - notification interval (in microseconds) to avoid layout thrashing
43 | // When Firefox is loading a page, it periodically reformats
44 | // or "reflows" the page as it loads. The page displays new elements
45 | // every 0.12 seconds by default. These redraws increase the total page load time.
46 | // The default value provides good incremental display of content
47 | // without causing an increase in page load time.
48 | // [NOTE] Lowering the interval will increase responsiveness
49 | // but also increase the total load time.
50 | // [WARNING] If this value is set below 1/10 of a second, it starts
51 | // to impact page load performance.
52 | // [EXAMPLE] 100000 = .10s = 100 reflows/second
53 | // [1] https://searchfox.org/mozilla-central/rev/c1180ea13e73eb985a49b15c0d90e977a1aa919c/modules/libpref/init/StaticPrefList.yaml#1824-1834
54 | // [2] https://web.archive.org/web/20240115073722/https://dev.opera.com/articles/efficient-javascript/?page=3#reflow
55 | // [3] https://web.archive.org/web/20240115073722/https://dev.opera.com/articles/efficient-javascript/?page=3#smoothspeed
56 | //user_pref("content.notify.interval", 100000); // (.10s); default=120000 (.12s)
57 | //user_pref("content.max.tokenizing.time", 1000000); // (1.00s); alt=2000000; HIDDEN
58 | //user_pref("content.interrupt.parsing", true); // HIDDEN
59 |
60 | // PREF: UI responsiveness threshold
61 | //user_pref("content.switch.threshold", 300000); // HIDDEN; default= 750000; alt=500000
62 |
63 | // PREF: split text nodes to a length
64 | // The number of bytes in a text node.
65 | //user_pref("content.maxtextrun", 8191); // DEFAULT; HIDDEN
66 |
67 | // PREF: new tab preload
68 | // [WARNING] Disabling this may cause a delay when opening a new tab in Firefox.
69 | // [1] https://wiki.mozilla.org/Tiles/Technical_Documentation#Ping
70 | // [2] https://github.com/arkenfox/user.js/issues/1556
71 | //user_pref("browser.newtab.preload", true); // DEFAULT
72 |
73 | // PREF: disable EcoQoS [WINDOWS]
74 | // Background tab processes use efficiency mode on Windows 11 to limit resource use.
75 | // [WARNING] Leave this alone, unless you're on Desktop and you rely on
76 | // background tabs to have maximum performance.
77 | // [1] https://devblogs.microsoft.com/performance-diagnostics/introducing-ecoqos/
78 | // [2] https://bugzilla.mozilla.org/show_bug.cgi?id=1796525
79 | // [3] https://bugzilla.mozilla.org/show_bug.cgi?id=1800412
80 | // [4] https://reddit.com/r/firefox/comments/107fj69/how_can_i_disable_the_efficiency_mode_on_firefox/
81 | //user_pref("dom.ipc.processPriorityManager.backgroundUsesEcoQoS", false);
82 |
83 | // PREF: control how tabs are loaded when a session is restored
84 | // true=Tabs are not loaded until they are selected (default)
85 | // false=Tabs begin to load immediately.
86 | //user_pref("browser.sessionstore.restore_on_demand", true); // DEFAULT
87 | //user_pref("browser.sessionstore.restore_pinned_tabs_on_demand", true);
88 | //user_pref("browser.sessionstore.restore_tabs_lazily", true); // DEFAULT
89 |
90 | // PREF: disable preSkeletonUI on startup [WINDOWS]
91 | //user_pref("browser.startup.preXulSkeletonUI", false);
92 |
93 | // PREF: lazy load iframes
94 | //user_pref("dom.iframe_lazy_loading.enabled", true); // DEFAULT [FF121+]
95 |
96 | // PREF: Prioritized Task Scheduling API
97 | // [1] https://github.com/yokoffing/Betterfox/issues/355
98 | // [2] https://blog.mozilla.org/performance/2022/06/02/prioritized-task-scheduling-api-is-prototyped-in-nightly/
99 | // [3] https://medium.com/airbnb-engineering/building-a-faster-web-experience-with-the-posttask-scheduler-276b83454e91
100 | // [4] https://github.com/WICG/scheduling-apis/blob/main/explainers/prioritized-post-task.md
101 | // [5] https://wicg.github.io/scheduling-apis/
102 | // [6] https://caniuse.com/mdn-api_taskcontroller
103 | //user_pref("dom.enable_web_task_scheduling", true); // DEFAULT [FF142+]
104 |
105 | /****************************************************************************
106 | * SECTION: GFX RENDERING TWEAKS *
107 | ****************************************************************************/
108 |
109 | // PREF: Webrender tweaks
110 | // [1] https://searchfox.org/mozilla-central/rev/6e6332bbd3dd6926acce3ce6d32664eab4f837e5/modules/libpref/init/StaticPrefList.yaml#6202-6219
111 | // [2] https://hacks.mozilla.org/2017/10/the-whole-web-at-maximum-fps-how-webrender-gets-rid-of-jank/
112 | // [3] https://www.reddit.com/r/firefox/comments/tbphok/is_setting_gfxwebrenderprecacheshaders_to_true/i0bxs2r/
113 | // [4] https://www.reddit.com/r/firefox/comments/z5auzi/comment/ixw65gb?context=3
114 | // [5] https://gist.github.com/RubenKelevra/fd66c2f856d703260ecdf0379c4f59db?permalink_comment_id=4532937#gistcomment-4532937
115 | //user_pref("gfx.webrender.all", true); // enables WR + additional features
116 | //user_pref("gfx.webrender.precache-shaders", true); // longer initial startup time
117 | //user_pref("gfx.webrender.compositor", true); // DEFAULT WINDOWS macOS
118 | //user_pref("gfx.webrender.compositor.force-enabled", true); // enforce
119 |
120 | // PREF: Webrender layer compositor
121 | // [1] https://bugzilla.mozilla.org/show_bug.cgi?id=1945683
122 | // [2] https://www.reddit.com/r/firefox/comments/1p58qre/firefox_is_getting_ready_to_make_youtube_fast/
123 | // [3] https://www.ghacks.net/2025/11/24/these-two-tweaks-should-improve-firefoxs-performance-on-youtube-significantly/
124 | user_pref("gfx.webrender.layer-compositor", true);
125 | // If your PC uses an AMD GPU, you might want to make a second change.
126 | // This one improves CPU usage on AMD systems.
127 | //user_pref("media.wmf.zero-copy-nv12-textures-force-enabled", true);
128 |
129 | // PREF: if your hardware doesn't support Webrender, you can fallback to Webrender's software renderer
130 | // [1] https://www.ghacks.net/2020/12/14/how-to-find-out-if-webrender-is-enabled-in-firefox-and-how-to-enable-it-if-it-is-not/
131 | //user_pref("gfx.webrender.software", true); // Software Webrender uses CPU instead of GPU
132 | //user_pref("gfx.webrender.software.opengl", true); // LINUX
133 |
134 | // PREF: GPU-accelerated Canvas2D
135 | // Uses Accelerated Canvas2D for hardware acceleration of Canvas2D.
136 | // This provides a consistent acceleration architecture across all platforms
137 | // by utilizing WebGL instead of relying upon Direct2D.
138 | // [WARNING] May cause issues on some Windows machines using integrated GPUs [2] [3]
139 | // Add to your overrides if you have a dedicated GPU.
140 | // [NOTE] Higher values will use more memory.
141 | // [1] https://bugzilla.mozilla.org/show_bug.cgi?id=1741501
142 | // [2] https://github.com/yokoffing/Betterfox/issues/153
143 | // [3] https://github.com/yokoffing/Betterfox/issues/198
144 | //user_pref("gfx.canvas.accelerated", true); // [DEFAULT FF133+]
145 | user_pref("gfx.canvas.accelerated.cache-items", 32768); // [default=8192 FF135+]; Chrome=4096
146 | user_pref("gfx.canvas.accelerated.cache-size", 4096); // default=256; Chrome=512
147 | //user_pref("gfx.canvas.max-size", 32767); // DEFAULT=32767
148 |
149 | // PREF: WebGL
150 | user_pref("webgl.max-size", 16384); // default=1024
151 | //user_pref("webgl.force-enabled", true);
152 |
153 | // PREF: prefer GPU over CPU
154 | // At best, the prefs do nothing on Linux/macOS.
155 | // At worst, it'll result in crashes if the sandboxing is a WIP.
156 | // [1] https://firefox-source-docs.mozilla.org/dom/ipc/process_model.html#gpu-process
157 | //user_pref("layers.gpu-process.enabled", true); // DEFAULT WINDOWS
158 | //user_pref("layers.gpu-process.force-enabled", true); // enforce
159 | //user_pref("layers.mlgpu.enabled", true); // LINUX
160 | //user_pref("media.hardware-video-decoding.enabled", true); // DEFAULT WINDOWS macOS
161 | //user_pref("media.hardware-video-decoding.force-enabled", true); // enforce
162 | //user_pref("media.gpu-process-decoder", true); // DEFAULT WINDOWS
163 | //user_pref("media.ffmpeg.vaapi.enabled", true); // LINUX
164 |
165 | // PREF: hardware and software decoded video overlay [FF116+]
166 | // [1] https://bugzilla.mozilla.org/show_bug.cgi?id=1829063
167 | // [2] https://phabricator.services.mozilla.com/D175993
168 | //user_pref("gfx.webrender.dcomp-video-hw-overlay-win", true); // DEFAULT
169 | //user_pref("gfx.webrender.dcomp-video-hw-overlay-win-force-enabled", true); // enforce
170 | //user_pref("gfx.webrender.dcomp-video-sw-overlay-win", true); // DEFAULT
171 | //user_pref("gfx.webrender.dcomp-video-sw-overlay-win-force-enabled", true); // enforce
172 |
173 | /****************************************************************************
174 | * SECTION: DISK CACHE *
175 | ****************************************************************************/
176 |
177 | // PREF: disk cache
178 | // [NOTE] If you think it helps performance, then feel free to override this.
179 | // [SETTINGS] See about:cache
180 | // More efficient to keep the browser cache instead of having to
181 | // re-download objects for the websites you visit frequently.
182 | // [1] https://www.janbambas.cz/new-firefox-http-cache-enabled/
183 | user_pref("browser.cache.disk.enable", false);
184 |
185 | // PREF: disk cache size
186 | // [1] https://bugzilla.mozilla.org/buglist.cgi?bug_id=913808,968106,968101
187 | // [2] https://rockridge.hatenablog.com/entry/2014/09/15/165501
188 | // [3] https://www.reddit.com/r/firefox/comments/17oqhw3/firefox_and_ssd_disk_consumption/
189 | //user_pref("browser.cache.disk.smart_size.enabled", false); // force a fixed max cache size on disk
190 | //user_pref("browser.cache.disk.capacity", 512000); // default=256000; size of disk cache; 1024000=1GB, 2048000=2GB
191 | //user_pref("browser.cache.disk.max_entry_size", 51200); // DEFAULT (50 MB); maximum size of an object in disk cache
192 |
193 | // PREF: Race Cache With Network (RCWN) [FF59+]
194 | // [ABOUT] about:networking#rcwn
195 | // Firefox concurrently sends requests for cached resources to both the
196 | // local disk cache and the network server. The browser uses whichever
197 | // result arrives first and cancels the other request. This approach sometimes
198 | // loads pages faster because the network can be quicker than accessing the cache
199 | // on a hard drive. When RCWN is enabled, the request might be served from
200 | // the server even if you have valid entry in the cache. Set to false if your
201 | // intention is to increase cache usage and reduce network usage.
202 | // [1] https://slides.com/valentingosu/race-cache-with-network-2017
203 | // [2] https://simonhearne.com/2020/network-faster-than-cache/
204 | // [3] https://support.mozilla.org/en-US/questions/1267945
205 | // [4] https://askubuntu.com/questions/1214862/36-syns-in-a-row-how-to-limit-firefox-connections-to-one-website
206 | // [5] https://bugzilla.mozilla.org/show_bug.cgi?id=1622859
207 | // [6] https://soylentnews.org/comments.pl?noupdate=1&sid=40195&page=1&cid=1067867#commentwrap
208 | //user_pref("network.http.rcwn.enabled", false);
209 |
210 | // PREF: attempt to RCWN only if a resource is smaller than this size
211 | //user_pref("network.http.rcwn.small_resource_size_kb", 256); // DEFAULT
212 |
213 | // PREF: cache memory pool
214 | // Cache v2 provides a memory pool that stores metadata (such as response headers)
215 | // for recently read cache entries [1]. It is managed by a cache thread, and caches with
216 | // metadata in the pool appear to be reused immediately.
217 | // [1] https://bugzilla.mozilla.org/buglist.cgi?bug_id=986179
218 | //user_pref("browser.cache.disk.metadata_memory_limit", 16384); // default=250 (0.25 MB); limit of recent metadata we keep in memory for faster access
219 |
220 | // PREF: number of chunks we preload ahead of read
221 | // Large content such as images will load faster.
222 | // [1] https://bugzilla.mozilla.org/buglist.cgi?bug_id=913819,988318
223 | // [2] http://www.janbambas.cz/new-firefox-http-cache-enabled/
224 | //user_pref("browser.cache.disk.preload_chunk_count", 4); // DEFAULT
225 |
226 | // PREF: the time period used to re-compute the frecency value of cache entries
227 | // The frequency algorithm is used to select entries, and entries that are recently
228 | // saved or frequently reused are retained. The frecency value determines how
229 | // frequently a page has been accessed and is used by Firefox's cache algorithm.
230 | // The frequency algorithm is used to select entries, and entries that are recently
231 | // saved or frequently reused are retained. The frecency value determines how
232 | // often a page has been accessed and is used by Firefox's cache algorithm.
233 | // When the memory pool becomes full, the oldest data is purged. By default,
234 | // data older than 6 hours is treated as old.
235 | // [1] https://bugzilla.mozilla.org/buglist.cgi?bug_id=942835,1012327
236 | // [2] https://bugzilla.mozilla.org/buglist.cgi?bug_id=913808,968101
237 | //user_pref("browser.cache.frecency_half_life_hours", 6); // DEFAULT
238 |
239 | // PREF: memory limit (in kB) for new cache data not yet written to disk
240 | // Writes to the cache are buffered and written to disk on background with low priority.
241 | // With a slow persistent storage, these buffers may grow when data is coming
242 | // fast from the network. When the amount of unwritten data is exceeded, new
243 | // writes will simply fail. We have two buckets, one for important data
244 | // (priority) like html, css, fonts and js, and one for other data like images, video, etc.
245 | //user_pref("browser.cache.disk.max_chunks_memory_usage", 40960); // DEFAULT (40 MB)
246 | //user_pref("browser.cache.disk.max_priority_chunks_memory_usage", 40960); // DEFAULT (40 MB)
247 |
248 | // PREF: how often to validate document in cache
249 | // 0 = once-per-session
250 | // 1 = each-time
251 | // 2 = never
252 | // 3 = when-appropriate/automatically (default)
253 | //user_pref("browser.cache.check_doc_frequency", 3); // DEFAULT
254 |
255 | // PREF: enforce free space checks
256 | // When smartsizing is disabled, we could potentially fill all disk space by
257 | // cache data when the disk capacity is not set correctly. To avoid that, we
258 | // check the free space every time we write some data to the cache. The free
259 | // space is checked against two limits. Once the soft limit is reached we start
260 | // evicting the least useful entries, when we reach the hard limit writing to
261 | // the entry fails.
262 | //user_pref("browser.cache.disk.free_space_soft_limit", 10240); // default=5120 (5 MB)
263 | //user_pref("browser.cache.disk.free_space_hard_limit", 2048); // default=1024 (1 MB)
264 |
265 | // PREF: compression level for cached JavaScript bytecode [FF102+]
266 | // [1] https://github.com/yokoffing/Betterfox/issues/247
267 | // 0 = do not compress (default)
268 | // 1 = minimal compression
269 | // 9 = maximal compression
270 | //user_pref("browser.cache.jsbc_compression_level", 3);
271 |
272 | // PREF: strategy to use for when the bytecode should be encoded and saved [TESTING ONLY]
273 | // -1 makes page load times marginally longer when a page is being loaded for the first time, while
274 | // subsequent reload of websites will be much much faster.
275 | // 0 means that the bytecode is created every 4 page loads [3].
276 | // [1] https://searchfox.org/mozilla-release/source/modules/libpref/init/StaticPrefList.yaml#3461-3488
277 | // [2] https://www.reddit.com/r/firefox/comments/12786yv/improving_performance_in_firefox_android_part_ii/
278 | // [3] https://github.com/zen-browser/desktop/issues/217
279 | // -1 = saved as soon as the script is seen for the first time, independently of the size or last access time
280 | // 0 = saved in order to minimize the page-load time (default)
281 | //user_pref("dom.script_loader.bytecode_cache.enabled", true); // DEFAULT
282 | //user_pref("dom.script_loader.bytecode_cache.strategy", 0); // DEFAULT
283 |
284 | /****************************************************************************
285 | * SECTION: MEMORY CACHE *
286 | ****************************************************************************/
287 |
288 | // PREF: memory cache
289 | // The "automatic" size selection (default) is based on a decade-old table
290 | // that only contains settings for systems at or below 8GB of system memory [1].
291 | // Waterfox G6 allows it to go above 8GB machines [3].
292 | // Value can be up to the max size of an unsigned 64-bit integer.
293 | // -1 = Automatically decide the maximum memory to use to cache decoded images,
294 | // messages, and chrome based on the total amount of RAM
295 | // For machines with 8GB+ RAM, that equals 32768 kb = 32 MB
296 | // [1] https://kb.mozillazine.org/Browser.cache.memory.capacity#-1
297 | // [2] https://searchfox.org/mozilla-central/source/netwerk/cache2/CacheObserver.cpp#94-125
298 | // [3] https://github.com/WaterfoxCo/Waterfox/commit/3fed16932c80a2f6b37d126fe10aed66c7f1c214
299 | user_pref("browser.cache.memory.capacity", 131072); // 128 MB RAM cache; alt=65536 (65 MB RAM cache); default=32768
300 | user_pref("browser.cache.memory.max_entry_size", 20480); // 20 MB max entry; default=5120 (5 MB)
301 |
302 | // PREF: amount of Back/Forward cached pages stored in memory for each tab
303 | // Pages that were recently visited are stored in memory in such a way
304 | // that they don't have to be re-parsed. This improves performance
305 | // when pressing Back and Forward. This pref limits the maximum
306 | // number of pages stored in memory. If you are not using the Back
307 | // and Forward buttons that much, but rather using tabs, then there
308 | // is no reason for Firefox to keep memory for this.
309 | // -1=determine automatically (8 pages)
310 | // [1] https://kb.mozillazine.org/Browser.sessionhistory.max_total_viewers#Possible_values_and_their_effects
311 | user_pref("browser.sessionhistory.max_total_viewers", 4); // default=8
312 | user_pref("browser.sessionstore.max_tabs_undo", 10); // default=25
313 | //user_pref("browser.sessionstore.max_entries", 10); // [HIDDEN OR REMOVED]
314 | //user_pref("dom.storage.default_quota", 20480); // 20MB; default=5120
315 | //user_pref("dom.storage.shadow_writes", true);
316 |
317 | // PREF: tell garbage collector to start running when javascript is using xx MB of memory
318 | // Garbage collection releases memory back to the system.
319 | //user_pref("javascript.options.mem.high_water_mark", 128); // DEFAULT [HIDDEN OR REMOVED]
320 |
321 | /****************************************************************************
322 | * SECTION: MEDIA CACHE *
323 | ****************************************************************************/
324 |
325 | // PREF: media disk cache
326 | //user_pref("media.cache_size", 512000); // DEFAULT
327 |
328 | // PREF: media memory cache
329 | // [1] https://hg.mozilla.org/mozilla-central/file/tip/modules/libpref/init/StaticPrefList.yaml#l9652
330 | // [2] https://github.com/arkenfox/user.js/pull/941#issuecomment-668278121
331 | user_pref("media.memory_cache_max_size", 262144); // 256 MB; default=8192; AF=65536
332 |
333 | // PREF: media cache combine sizes
334 | user_pref("media.memory_caches_combined_limit_kb", 1048576); // 1GB; default=524288
335 | //user_pref("media.memory_caches_combined_limit_pc_sysmem", 5); // DEFAULT; alt=10; the percentage of system memory that Firefox can use for media caches
336 |
337 | // PREF: Media Source Extensions (MSE) web standard
338 | // Disabling MSE allows videos to fully buffer, but you're limited to 720p.
339 | // [WARNING] Disabling MSE may break certain videos.
340 | // false=Firefox plays the old WebM format
341 | // true=Firefox plays the new WebM format (default)
342 | // [1] https://support.mozilla.org/en-US/questions/1008271
343 | //user_pref("media.mediasource.enabled", true); // DEFAULT
344 |
345 | // PREF: adjust video buffering periods when not using MSE (in seconds)
346 | // [NOTE] Does not affect videos over 720p since they use DASH playback [1]
347 | // [1] https://lifehacker.com/preload-entire-youtube-videos-by-disabling-dash-playbac-1186454034
348 | user_pref("media.cache_readahead_limit", 600); // 10 min; default=60; stop reading ahead when our buffered data is this many seconds ahead of the current playback
349 | user_pref("media.cache_resume_threshold", 300); // 5 min; default=30; when a network connection is suspended, don't resume it until the amount of buffered data falls below this threshold
350 |
351 | /****************************************************************************
352 | * SECTION: IMAGE CACHE *
353 | ****************************************************************************/
354 |
355 | // PREF: image cache
356 | user_pref("image.cache.size", 10485760); // (cache images up to 10MiB in size) [DEFAULT 5242880]
357 | user_pref("image.mem.decode_bytes_at_a_time", 65536); // default=16384; alt=32768; chunk size for calls to the image decoders
358 | //user_pref("image.mem.max_decoded_image_kb", 512000); // 500MB [HIDDEN OR REMOVED?]
359 |
360 | // PREF: set minimum timeout to unmap shared surfaces since they have been last used
361 | // [NOTE] This is only used on 32-bit builds of Firefox where there is meaningful
362 | // virtual address space pressure.
363 | // [1] https://phabricator.services.mozilla.com/D109440
364 | // [2] https://bugzilla.mozilla.org/show_bug.cgi?id=1699224
365 | //user_pref("image.mem.shared.unmap.min_expiration_ms", 120000); // default=60000; minimum timeout to unmap shared surfaces since they have been last used
366 |
367 | /****************************************************************************
368 | * SECTION: NETWORK *
369 | ****************************************************************************/
370 |
371 | // PREF: use bigger packets
372 | // [WARNING] Cannot open HTML files bigger than 4MB if value is too large [2].
373 | // Reduce Firefox's CPU usage by requiring fewer application-to-driver data transfers.
374 | // However, it does not affect the actual packet sizes transmitted over the network.
375 | // [1] https://www.mail-archive.com/support-seamonkey@lists.mozilla.org/msg74561.html
376 | // [2] https://github.com/yokoffing/Betterfox/issues/279
377 | // [3] https://ra1ahq.blog/en/optimizaciya-proizvoditelnosti-mozilla-firefox
378 | //user_pref("network.buffer.cache.size", 65535); // default=32768 (32 kb); 262144 too large
379 | //user_pref("network.buffer.cache.count", 48); // default=24; 128 too large
380 |
381 | // PREF: increase the absolute number of HTTP connections
382 | // [1] https://kb.mozillazine.org/Network.http.max-connections
383 | // [2] https://kb.mozillazine.org/Network.http.max-persistent-connections-per-server
384 | // [3] https://www.reddit.com/r/firefox/comments/11m2yuh/how_do_i_make_firefox_use_more_of_my_900_megabit/jbfmru6/
385 | user_pref("network.http.max-connections", 1800); // default=900
386 | user_pref("network.http.max-persistent-connections-per-server", 10); // default=6; download connections; anything above 10 is excessive
387 | user_pref("network.http.max-urgent-start-excessive-connections-per-host", 5); // default=3
388 | //user_pref("network.http.max-persistent-connections-per-proxy", 48); // default=32
389 | user_pref("network.http.request.max-start-delay", 5); // default=10
390 | //user_pref("network.websocket.max-connections", 200); // DEFAULT
391 |
392 | // PREF: pacing requests [FF23+]
393 | // Controls how many HTTP requests are sent at a time.
394 | // Pacing HTTP requests can have some benefits, such as reducing network congestion,
395 | // improving web page loading speed, and avoiding server overload.
396 | // Pacing requests adds a slight delay between requests to throttle them.
397 | // If you have a fast machine and internet connection, disabling pacing
398 | // may provide a small speed boost when loading pages with lots of requests.
399 | // false = Firefox will send as many requests as possible without pacing
400 | // true = Firefox will pace requests (default)
401 | user_pref("network.http.pacing.requests.enabled", false);
402 | //user_pref("network.http.pacing.requests.min-parallelism", 10); // default=6
403 | //user_pref("network.http.pacing.requests.burst", 32); // default=10
404 |
405 | // PREF: increase DNS cache
406 | // [1] https://developer.mozilla.org/en-US/docs/Web/Performance/Understanding_latency
407 | user_pref("network.dnsCacheEntries", 10000); // default=800
408 |
409 | // PREF: adjust DNS expiration time
410 | // [ABOUT] about:networking#dns
411 | // [NOTE] These prefs will be ignored by DNS resolver if using DoH/TRR.
412 | user_pref("network.dnsCacheExpiration", 3600); // keep entries for 1 hour; default=60
413 | //user_pref("network.dnsCacheExpirationGracePeriod", 120); // default=60; cache DNS entries for 2 minutes after they expire
414 |
415 | // PREF: the number of threads for DNS
416 | //user_pref("network.dns.max_high_priority_threads", 40); // DEFAULT [FF 123?]
417 | //user_pref("network.dns.max_any_priority_threads", 24); // DEFAULT [FF 123?]
418 |
419 | // PREF: increase TLS token caching
420 | user_pref("network.ssl_tokens_cache_capacity", 10240); // default=2048; more TLS token caching (fast reconnects)
421 |
422 | /****************************************************************************
423 | * SECTION: SPECULATIVE LOADING *
424 | ****************************************************************************/
425 |
426 | // These are connections that are not explicitly asked for (e.g., clicked on).
427 | // [1] https://developer.mozilla.org/en-US/docs/Web/Performance/Speculative_loading
428 |
429 | // [NOTE] FF85+ partitions (isolates) pooled connections, prefetch connections,
430 | // pre-connect connections, speculative connections, TLS session identifiers,
431 | // and other connections. We can take advantage of the speed of pre-connections
432 | // while preserving privacy. Users may relax hardening to maximize their preference.
433 | // For more information, see SecureFox: "PREF: State Paritioning" and "PREF: Network Partitioning".
434 | // [NOTE] To activate and increase network predictions, go to settings in uBlock Origin and uncheck:
435 | // - "Disable pre-fetching (to prevent any connection for blocked network requests)"
436 | // [NOTE] Add prefs to "MY OVERRIDES" section and uncomment to enable them in your user.js.
437 |
438 | // PREF: link-mouseover opening connection to linked server
439 | // When accessing content online, devices use sockets as endpoints.
440 | // The global limit on half-open sockets controls how many speculative
441 | // connection attempts can occur at once when starting new connections [3].
442 | // If the user follows through, pages can load faster since some
443 | // work was done in advance. Firefox opens predictive connections
444 | // to sites when hovering over New Tab thumbnails or starting a
445 | // URL Bar search [1] and hyperlinks within a page [2].
446 | // [NOTE] DNS (if enabled), TCP, and SSL handshakes are set up in advance,
447 | // but page contents are not downloaded until a click on the link is registered.
448 | // [1] https://support.mozilla.org/en-US/kb/how-stop-firefox-making-automatic-connections?redirectslug=how-stop-firefox-automatically-making-connections&redirectlocale=en-US#:~:text=Speculative%20pre%2Dconnections
449 | // [2] https://news.slashdot.org/story/15/08/14/2321202/how-to-quash-firefoxs-silent-requests
450 | // [3] https://searchfox.org/mozilla-central/rev/028c68d5f32df54bca4cf96376f79e48dfafdf08/modules/libpref/init/all.js#1280-1282
451 | // [4] https://www.keycdn.com/blog/resource-hints#prefetch
452 | // [5] https://3perf.com/blog/link-rels/#prefetch
453 | user_pref("network.http.speculative-parallel-limit", 0);
454 |
455 | // PREF: DNS prefetching for HTMLLinkElement
456 | // Used for cross-origin connections to provide small performance improvements.
457 | // You can enable rel=dns-prefetch for the HTTPS document without prefetching
458 | // DNS for anchors, whereas the latter makes more specualtive requests [5].
459 | // [1] https://bitsup.blogspot.com/2008/11/dns-prefetching-for-firefox.html
460 | // [2] https://css-tricks.com/prefetching-preloading-prebrowsing/#dns-prefetching
461 | // [3] https://www.keycdn.com/blog/resource-hints#2-dns-prefetching
462 | // [4] http://www.mecs-press.org/ijieeb/ijieeb-v7-n5/IJIEEB-V7-N5-2.pdf
463 | // [5] https://bugzilla.mozilla.org/show_bug.cgi?id=1596935#c28
464 | user_pref("network.dns.disablePrefetch", true);
465 | user_pref("network.dns.disablePrefetchFromHTTPS", true); // [FF127+ false]
466 |
467 | // PREF: DNS prefetch for HTMLAnchorElement (speculative DNS)
468 | // Disable speculative DNS calls to prevent Firefox from resolving
469 | // hostnames for other domains linked on a page. This may eliminate
470 | // unnecessary DNS lookups, but can increase latency when following external links.
471 | // [1] https://bugzilla.mozilla.org/show_bug.cgi?id=1596935#c28
472 | // [2] https://github.com/arkenfox/user.js/issues/1870#issuecomment-2220773972
473 | //user_pref("dom.prefetch_dns_for_anchor_http_document", false); // [FF128+]
474 | //user_pref("dom.prefetch_dns_for_anchor_https_document", false); // DEFAULT [FF128+]
475 |
476 | // PREF: enable tag and Link: rel=preconnect response header handling
477 | //user_pref("network.preconnect", true); // DEFAULT
478 |
479 | // PREF: preconnect to the autocomplete URL in the address bar
480 | // Whether to warm up network connections for autofill or search results.
481 | // Firefox preloads URLs that autocomplete when a user types into the address bar.
482 | // Connects to destination server ahead of time, to avoid TCP handshake latency.
483 | // [NOTE] Firefox will perform DNS lookup (if enabled) and TCP and TLS handshake,
484 | // but will not start sending or receiving HTTP data.
485 | // [1] https://www.ghacks.net/2017/07/24/disable-preloading-firefox-autocomplete-urls/
486 | user_pref("browser.urlbar.speculativeConnect.enabled", false);
487 |
488 | // PREF: mousedown speculative connections on bookmarks and history [FF98+]
489 | // Whether to warm up network connections for places:menus and places:toolbar.
490 | user_pref("browser.places.speculativeConnect.enabled", false);
491 |
492 | // PREF: network module preload [FF115+]
493 | // High-priority loading of current page JavaScript modules.
494 | // Used to preload high-priority JavaScript modules for strategic performance improvements.
495 | // Module preloading allows developers to fetch JavaScript modules and dependencies
496 | // earlier to accelerate page loads. The browser downloads, parses, and compiles modules
497 | // referenced by links with this attribute in parallel with other resources, rather
498 | // than sequentially waiting to process each. Preloading reduces overall download times.
499 | // Browsers may also automatically preload dependencies without firing extra events.
500 | // Unlike other pre-connection tags (except rel=preload), this tag is mandatory for the browser.
501 | // [1] https://developer.mozilla.org/en-US/docs/Web/HTML/Attributes/rel/modulepreload
502 | //user_pref("network.modulepreload", true); // DEFAULT
503 |
504 | // PREF: link prefetching
505 | // Pre-populates the HTTP cache by prefetching same-site future navigation
506 | // resources or subresources used on those pages.
507 | // Enabling link prefetching allows Firefox to preload pages tagged as important.
508 | // The browser prefetches links with the prefetch-link tag, fetching resources
509 | // likely needed for the next navigation at low priority. When clicking a link
510 | // or loading a new page, prefetching stops and discards hints. Prefetching
511 | // downloads resources without executing them.
512 | // [NOTE] Since link prefetch uses the HTTP cache, it has a number of issues
513 | // with document prefetches, such as being potentially blocked by Cache-Control headers
514 | // (e.g. cache partitioning).
515 | // [1] https://developer.mozilla.org/en-US/docs/Glossary/Prefetch
516 | // [2] http://www.mecs-press.org/ijieeb/ijieeb-v7-n5/IJIEEB-V7-N5-2.pdf
517 | // [3] https://timkadlec.com/remembers/2020-06-17-prefetching-at-this-age/
518 | // [4] https://3perf.com/blog/link-rels/#prefetch
519 | // [5] https://developer.mozilla.org/docs/Web/HTTP/Link_prefetching_FAQ
520 | user_pref("network.prefetch-next", false);
521 |
522 | // PREF: Fetch Priority API [FF119+]
523 | // Indicates whether the `fetchpriority` attribute for elements which support it.
524 | // [1] https://web.dev/articles/fetch-priority
525 | // [2] https://nitropack.io/blog/post/priority-hints
526 | // [2] https://developer.mozilla.org/en-US/docs/Web/API/HTMLImageElement/fetchPriority
527 | // [3] https://developer.mozilla.org/en-US/docs/Web/API/HTMLLinkElement/fetchPriority
528 | //user_pref("network.fetchpriority.enabled", true);
529 |
530 | // PREF: early hints [FF120+]
531 | // [1] https://developer.mozilla.org/en-US/docs/Web/HTTP/Status/103
532 | // [2] https://developer.chrome.com/blog/early-hints/
533 | // [3] https://blog.cloudflare.com/early-hints/
534 | // [4] https://blog.cloudflare.com/early-hints-performance/
535 | //user_pref("network.early-hints.enabled", true);
536 |
537 | // PREF: `Link: rel=preconnect` in 103 Early Hint response [FF120+]
538 | // Used to warm most critical cross-origin connections to provide
539 | // performance improvements when connecting to them.
540 | // [NOTE] When 0, this is limited by "network.http.speculative-parallel-limit".
541 | //user_pref("network.early-hints.preconnect.enabled", true);
542 | //user_pref("network.early-hints.preconnect.max_connections", 10); // DEFAULT
543 |
544 | // PREF: Network Predictor (NP)
545 | // When enabled, it trains and uses Firefox's algorithm to preload page resource
546 | // by tracking past page resources. It uses a local file (history) of needed images,
547 | // scripts, etc. to request them preemptively when navigating.
548 | // [NOTE] By default, it only preconnects DNS, TCP, and SSL handshakes.
549 | // No data sends until clicking. With "network.predictor.enable-prefetch" enabled,
550 | // it also performs prefetches.
551 | // [1] https://wiki.mozilla.org/Privacy/Reviews/Necko
552 | // [2] https://www.ghacks.net/2014/05/11/seer-disable-firefox/
553 | // [3] https://github.com/dillbyrne/random-agent-spoofer/issues/238#issuecomment-110214518
554 | // [4] https://www.igvita.com/posa/high-performance-networking-in-google-chrome/#predictor
555 | //user_pref("network.predictor.enabled", false); // [DEFAULT: false FF144+]
556 |
557 | // PREF: Network Predictor fetch for resources ahead of time
558 | // Prefetch page resources based on past user behavior.
559 | //user_pref("network.predictor.enable-prefetch", false); // [FF48+] [DEFAULT: false]
560 |
561 | // PREF: make Network Predictor active when hovering over links
562 | // When hovering over links, Network Predictor uses past resource history to
563 | // preemptively request what will likely be needed instead of waiting for the document.
564 | // Predictive connections automatically open when hovering over links to speed up
565 | // loading, starting some work in advance.
566 | //user_pref("network.predictor.enable-hover-on-ssl", false); // DEFAULT
567 |
568 | // PREF: assign Network Predictor confidence levels
569 | // [NOTE] Keep in mind that Network Predictor must LEARN your browsing habits.
570 | // Editing these lower will cause more speculative connections to occur,
571 | // which reduces accuracy over time and has privacy implications.
572 | //user_pref("network.predictor.preresolve-min-confidence", 60); // DEFAULT
573 | //user_pref("network.predictor.preconnect-min-confidence", 90); // DEFAULT
574 | //user_pref("network.predictor.prefetch-min-confidence", 100); // DEFAULT
575 |
576 | // PREF: other Network Predictor values
577 | // [NOTE] Keep in mmind that Network Predictor must LEARN your browsing habits.
578 | //user_pref("network.predictor.prefetch-force-valid-for", 10); // DEFAULT; how long prefetched resources are considered valid and usable (in seconds) for the prediction modeling
579 | //user_pref("network.predictor.prefetch-rolling-load-count", 10); // DEFAULT; the maximum number of resources that Firefox will prefetch in memory at one time based on prediction modeling
580 | //user_pref("network.predictor.max-resources-per-entry", 250); // default=100
581 | //user_pref("network.predictor.max-uri-length", 1000); // default=500
582 |
583 | /****************************************************************************
584 | * SECTION: EXPERIMENTAL *
585 | ****************************************************************************/
586 |
587 | // PREF: CSS Masonry Layout [NIGHTLY]
588 | // [1] https://developer.mozilla.org/en-US/docs/Web/CSS/CSS_Grid_Layout/Masonry_Layout
589 | // [2] https://www.smashingmagazine.com/native-css-masonry-layout-css-grid/
590 | //user_pref("layout.css.grid-template-masonry-value.enabled", true);
591 |
592 | /****************************************************************************
593 | * SECTION: TAB UNLOAD *
594 | ****************************************************************************/
595 |
596 | // PREF: unload tabs on low memory
597 | // [ABOUT] about:unloads
598 | // Firefox will detect if your computer’s memory is running low (less than 200MB)
599 | // and suspend tabs that you have not used in awhile.
600 | // [1] https://support.mozilla.org/en-US/kb/unload-inactive-tabs-save-system-memory-firefox
601 | // [2] https://hacks.mozilla.org/2021/10/tab-unloading-in-firefox-93/
602 | //user_pref("browser.tabs.unloadOnLowMemory", true); // DEFAULT
603 |
604 | // PREF: determine when tabs unload [WINDOWS] [LINUX]
605 | // Notify TabUnloader or send the memory pressure if the memory resource
606 | // notification is signaled AND the available commit space is lower than
607 | // this value (in MiB).
608 | // Set this to some value, e.g. 4/5 of total memory available on your system:
609 | // 4GB=3276, 8GB=6553, 16GB=13107, 32GB=25698, 64GB=52429
610 | // [1] https://dev.to/msugakov/taking-firefox-memory-usage-under-control-on-linux-4b02
611 | //user_pref("browser.low_commit_space_threshold_mb", 3276); // default=200; WINDOWS LINUX
612 |
613 | // PREF: determine when tabs unload [LINUX]
614 | // On Linux, Firefox checks available memory in comparison to total memory,
615 | // and use this percent value (out of 100) to determine if Firefox is in a
616 | // low memory scenario.
617 | // [1] https://dev.to/msugakov/taking-firefox-memory-usage-under-control-on-linux-4b02
618 | //user_pref("browser.low_commit_space_threshold_percent", 20); // default=5; LINUX
619 |
620 | // PREF: determine how long (in ms) tabs are inactive before they unload
621 | // 60000=1min; 300000=5min; 600000=10min (default)
622 | //user_pref("browser.tabs.min_inactive_duration_before_unload", 300000); // 5min; default=600000
623 |
624 | /****************************************************************************
625 | * SECTION: PROCESS COUNT *
626 | ****************************************************************************/
627 |
628 | // PREF: process count
629 | // [ABOUT] View in about:processes.
630 | // With Firefox Quantum (2017), CPU cores = processCount. However, since the
631 | // introduction of Fission [2], the number of website processes is controlled
632 | // by processCount.webIsolated. Disabling fission.autostart or changing
633 | // fission.webContentIsolationStrategy reverts control back to processCount.
634 | // [1] https://www.reddit.com/r/firefox/comments/r69j52/firefox_content_process_limit_is_gone/
635 | // [2] https://firefox-source-docs.mozilla.org/dom/ipc/process_model.html#web-content-processes
636 | //user_pref("dom.ipc.processCount", 8); // DEFAULT; Shared Web Content
637 | //user_pref("dom.ipc.processCount.webIsolated", 1); // default=4; Isolated Web Content
638 | //user_pref("dom.ipc.keepProcessesAlive.web", 4); // default=1 [HIDDEN OR REMOVED]
639 |
640 | // PREF: use one process for process preallocation cache
641 | //user_pref("dom.ipc.processPrelaunch.fission.number", 1); // default=3; Process Preallocation Cache
642 |
643 | // PREF: configure process isolation
644 | // [1] https://hg.mozilla.org/mozilla-central/file/tip/dom/ipc/ProcessIsolation.cpp#l53
645 | // [2] https://www.reddit.com/r/firefox/comments/r69j52/firefox_content_process_limit_is_gone/
646 |
647 | // OPTION 1: isolate all websites
648 | // Web content is always isolated into its own `webIsolated` content process
649 | // based on site-origin, and will only load in a shared `web` content process
650 | // if site-origin could not be determined.
651 | //user_pref("fission.webContentIsolationStrategy", 1); // DEFAULT
652 | //user_pref("browser.preferences.defaultPerformanceSettings.enabled", true); // DEFAULT
653 | //user_pref("dom.ipc.processCount.webIsolated", 1); // one process per site origin
654 |
655 | // OPTION 2: isolate only "high value" websites
656 | // Only isolates web content loaded by sites which are considered "high
657 | // value". A site is considered high value if it has been granted a
658 | // `highValue*` permission by the permission manager, which is done in
659 | // response to certain actions.
660 | //user_pref("fission.webContentIsolationStrategy", 2);
661 | //user_pref("browser.preferences.defaultPerformanceSettings.enabled", false);
662 | //user_pref("dom.ipc.processCount.webIsolated", 1); // one process per site origin (high value)
663 | //user_pref("dom.ipc.processCount", 8); // determine by number of CPU cores/processors
664 |
665 | // OPTION 3: do not isolate websites
666 | // All web content is loaded into a shared `web` content process. This is
667 | // similar to the non-Fission behavior; however, remote subframes may still
668 | // be used for sites with special isolation behavior, such as extension or
669 | // mozillaweb content processes.
670 | //user_pref("fission.webContentIsolationStrategy", 0);
671 | //user_pref("browser.preferences.defaultPerformanceSettings.enabled", false);
672 | //user_pref("dom.ipc.processCount", 8); // determine by number of CPU cores/processors
673 |
--------------------------------------------------------------------------------