├── .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 | ![Badge](https://hitscounter.dev/api/hit?url=https%3A%2F%2Fgithub.com%2Fyokoffing%2FBetterfox&label=&icon=github&color=%23198754&message=&style=flat&tz=US%2FEastern)![GitHub Maintained](https://img.shields.io/badge/maintained-yes-green)![GitHub last commit](https://img.shields.io/github/last-commit/yokoffing/betterfox)![GitHub issues](https://img.shields.io/github/issues/yokoffing/betterfox)![GitHub closed issues](https://img.shields.io/github/issues-closed/yokoffing/betterfox)![GitHub repo size](https://img.shields.io/github/repo-size/yokoffing/betterfox)[![shields.io Stars](https://img.shields.io/github/stars/yokoffing/betterfox)](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 | [![Stargazers repo roster for @yokoffing/Betterfox](https://reporoster.com/stars/dark/yokoffing/Betterfox)](https://github.com/yokoffing/Betterfox/stargazers) 97 | 98 | Buy Me a Coffee at ko-fi.com 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 | --------------------------------------------------------------------------------