486 lines
17 KiB
Nix
486 lines
17 KiB
Nix
{
|
|
pkgs,
|
|
lib,
|
|
osConfig,
|
|
...
|
|
}:
|
|
let
|
|
|
|
base16 = osConfig.stylix.base16Scheme;
|
|
merge = lib.foldr (a: b: a // b) { };
|
|
betterfox = ''
|
|
/****************************************************************************
|
|
* SECTION: FASTFOX *
|
|
****************************************************************************/
|
|
/** GENERAL ***/
|
|
user_pref("content.notify.interval", 100000);
|
|
|
|
/** GFX ***/
|
|
user_pref("gfx.canvas.accelerated.cache-size", 512);
|
|
user_pref("gfx.content.skia-font-cache-size", 20);
|
|
|
|
/** DISK CACHE ***/
|
|
user_pref("browser.cache.disk.enable", false);
|
|
|
|
/** MEMORY CACHE ***/
|
|
user_pref("browser.sessionhistory.max_total_viewers", 4);
|
|
|
|
/** MEDIA CACHE ***/
|
|
user_pref("media.memory_cache_max_size", 65536);
|
|
user_pref("media.cache_readahead_limit", 7200);
|
|
user_pref("media.cache_resume_threshold", 3600);
|
|
|
|
/** IMAGE CACHE ***/
|
|
user_pref("image.mem.decode_bytes_at_a_time", 32768);
|
|
|
|
/** NETWORK ***/
|
|
user_pref("network.http.max-connections", 1800);
|
|
user_pref("network.http.max-persistent-connections-per-server", 10);
|
|
user_pref("network.http.max-urgent-start-excessive-connections-per-host", 5);
|
|
user_pref("network.http.pacing.requests.enabled", false);
|
|
user_pref("network.dnsCacheExpiration", 3600);
|
|
user_pref("network.ssl_tokens_cache_capacity", 10240);
|
|
|
|
/** SPECULATIVE LOADING ***/
|
|
user_pref("network.http.speculative-parallel-limit", 0);
|
|
user_pref("network.dns.disablePrefetch", true);
|
|
user_pref("network.dns.disablePrefetchFromHTTPS", true);
|
|
user_pref("browser.urlbar.speculativeConnect.enabled", false);
|
|
user_pref("browser.places.speculativeConnect.enabled", false);
|
|
user_pref("network.prefetch-next", false);
|
|
user_pref("network.predictor.enabled", false);
|
|
|
|
/** EXPERIMENTAL ***/
|
|
user_pref("layout.css.grid-template-masonry-value.enabled", true);
|
|
|
|
/****************************************************************************
|
|
* SECTION: SECUREFOX *
|
|
****************************************************************************/
|
|
/** TRACKING PROTECTION ***/
|
|
user_pref("browser.contentblocking.category", "strict");
|
|
user_pref("privacy.trackingprotection.allow_list.baseline.enabled", true);
|
|
user_pref("privacy.trackingprotection.allow_list.convenience.enabled", true);
|
|
user_pref("browser.download.start_downloads_in_tmp_dir", true);
|
|
user_pref("browser.helperApps.deleteTempFileOnExit", true);
|
|
user_pref("browser.uitour.enabled", false);
|
|
user_pref("privacy.globalprivacycontrol.enabled", true);
|
|
|
|
/** OCSP & CERTS / HPKP ***/
|
|
user_pref("security.OCSP.enabled", 0);
|
|
user_pref("security.pki.crlite_mode", 2);
|
|
user_pref("security.csp.reporting.enabled", false);
|
|
|
|
/** SSL / TLS ***/
|
|
user_pref("security.ssl.treat_unsafe_negotiation_as_broken", true);
|
|
user_pref("browser.xul.error_pages.expert_bad_cert", true);
|
|
user_pref("security.tls.enable_0rtt_data", false);
|
|
|
|
/** DISK AVOIDANCE ***/
|
|
user_pref("browser.privatebrowsing.forceMediaMemoryCache", true);
|
|
user_pref("browser.sessionstore.interval", 60000);
|
|
|
|
/** SHUTDOWN & SANITIZING ***/
|
|
user_pref("browser.privatebrowsing.resetPBM.enabled", true);
|
|
user_pref("privacy.history.custom", true);
|
|
|
|
/** SEARCH / URL BAR ***/
|
|
user_pref("browser.urlbar.trimHttps", true);
|
|
user_pref("browser.urlbar.untrimOnUserInteraction.featureGate", true);
|
|
user_pref("browser.search.separatePrivateDefault.ui.enabled", true);
|
|
user_pref("browser.search.suggest.enabled", false);
|
|
user_pref("browser.urlbar.quicksuggest.enabled", false);
|
|
user_pref("browser.urlbar.groupLabels.enabled", false);
|
|
user_pref("browser.formfill.enable", false);
|
|
user_pref("network.IDN_show_punycode", true);
|
|
|
|
/** PASSWORDS ***/
|
|
user_pref("signon.formlessCapture.enabled", false);
|
|
user_pref("signon.privateBrowsingCapture.enabled", false);
|
|
user_pref("network.auth.subresource-http-auth-allow", 1);
|
|
user_pref("editor.truncate_user_pastes", false);
|
|
|
|
/** MIXED CONTENT + CROSS-SITE ***/
|
|
user_pref("security.mixed_content.block_display_content", true);
|
|
user_pref("pdfjs.enableScripting", false);
|
|
|
|
/** EXTENSIONS ***/
|
|
user_pref("extensions.enabledScopes", 5);
|
|
|
|
/** HEADERS / REFERERS ***/
|
|
user_pref("network.http.referer.XOriginTrimmingPolicy", 2);
|
|
|
|
/** CONTAINERS ***/
|
|
user_pref("privacy.userContext.ui.enabled", true);
|
|
|
|
/** SAFE BROWSING ***/
|
|
user_pref("browser.safebrowsing.downloads.remote.enabled", false);
|
|
|
|
/** MOZILLA ***/
|
|
user_pref("permissions.default.desktop-notification", 2);
|
|
user_pref("permissions.default.geo", 2);
|
|
user_pref("geo.provider.network.url", "https://beacondb.net/v1/geolocate");
|
|
user_pref("browser.search.update", false);
|
|
user_pref("permissions.manager.defaultsUrl", "");
|
|
user_pref("extensions.getAddons.cache.enabled", false);
|
|
|
|
/** TELEMETRY ***/
|
|
user_pref("datareporting.policy.dataSubmissionEnabled", false);
|
|
user_pref("datareporting.healthreport.uploadEnabled", false);
|
|
user_pref("toolkit.telemetry.unified", false);
|
|
user_pref("toolkit.telemetry.enabled", false);
|
|
user_pref("toolkit.telemetry.server", "data:,");
|
|
user_pref("toolkit.telemetry.archive.enabled", false);
|
|
user_pref("toolkit.telemetry.newProfilePing.enabled", false);
|
|
user_pref("toolkit.telemetry.shutdownPingSender.enabled", false);
|
|
user_pref("toolkit.telemetry.updatePing.enabled", false);
|
|
user_pref("toolkit.telemetry.bhrPing.enabled", false);
|
|
user_pref("toolkit.telemetry.firstShutdownPing.enabled", false);
|
|
user_pref("toolkit.telemetry.coverage.opt-out", true);
|
|
user_pref("toolkit.coverage.opt-out", true);
|
|
user_pref("toolkit.coverage.endpoint.base", "");
|
|
user_pref("browser.newtabpage.activity-stream.feeds.telemetry", false);
|
|
user_pref("browser.newtabpage.activity-stream.telemetry", false);
|
|
user_pref("datareporting.usage.uploadEnabled", false);
|
|
|
|
/** EXPERIMENTS ***/
|
|
user_pref("app.shield.optoutstudies.enabled", false);
|
|
user_pref("app.normandy.enabled", false);
|
|
user_pref("app.normandy.api_url", "");
|
|
|
|
/** CRASH REPORTS ***/
|
|
user_pref("breakpad.reportURL", "");
|
|
user_pref("browser.tabs.crashReporting.sendReport", false);
|
|
|
|
/****************************************************************************
|
|
* SECTION: PESKYFOX *
|
|
****************************************************************************/
|
|
/** MOZILLA UI ***/
|
|
user_pref("browser.privatebrowsing.vpnpromourl", "");
|
|
user_pref("extensions.getAddons.showPane", false);
|
|
user_pref("extensions.htmlaboutaddons.recommendations.enabled", false);
|
|
user_pref("browser.discovery.enabled", false);
|
|
user_pref("browser.shell.checkDefaultBrowser", false);
|
|
user_pref("browser.newtabpage.activity-stream.asrouter.userprefs.cfr.addons", false);
|
|
user_pref("browser.newtabpage.activity-stream.asrouter.userprefs.cfr.features", false);
|
|
user_pref("browser.preferences.moreFromMozilla", false);
|
|
user_pref("browser.aboutConfig.showWarning", false);
|
|
user_pref("browser.aboutwelcome.enabled", false);
|
|
user_pref("browser.profiles.enabled", true);
|
|
|
|
/** THEME ADJUSTMENTS ***/
|
|
user_pref("toolkit.legacyUserProfileCustomizations.stylesheets", true);
|
|
user_pref("browser.compactmode.show", true);
|
|
user_pref("browser.privateWindowSeparation.enabled", false); // WINDOWS
|
|
|
|
/** AI ***/
|
|
user_pref("browser.ml.enable", false);
|
|
user_pref("browser.ml.chat.enabled", false);
|
|
|
|
/** FULLSCREEN NOTICE ***/
|
|
user_pref("full-screen-api.transition-duration.enter", "0 0");
|
|
user_pref("full-screen-api.transition-duration.leave", "0 0");
|
|
user_pref("full-screen-api.warning.timeout", 0);
|
|
|
|
/** URL BAR ***/
|
|
user_pref("browser.urlbar.trending.featureGate", false);
|
|
|
|
/** NEW TAB PAGE ***/
|
|
user_pref("browser.newtabpage.activity-stream.default.sites", "");
|
|
user_pref("browser.newtabpage.activity-stream.showSponsoredTopSites", false);
|
|
user_pref("browser.newtabpage.activity-stream.feeds.section.topstories", false);
|
|
user_pref("browser.newtabpage.activity-stream.showSponsored", false);
|
|
user_pref("browser.newtabpage.activity-stream.showSponsoredCheckboxes", false);
|
|
|
|
/** POCKET ***/
|
|
user_pref("extensions.pocket.enabled", false);
|
|
|
|
/** DOWNLOADS ***/
|
|
user_pref("browser.download.manager.addToRecentDocs", false);
|
|
|
|
/** PDF ***/
|
|
user_pref("browser.download.open_pdf_attachments_inline", true);
|
|
|
|
/** TAB BEHAVIOR ***/
|
|
user_pref("browser.bookmarks.openInTabClosesMenu", false);
|
|
user_pref("browser.menu.showViewImageInfo", true);
|
|
user_pref("findbar.highlightAll", true);
|
|
user_pref("layout.word_select.eat_space_to_next_word", false);
|
|
|
|
/****************************************************************************
|
|
* START: MY OVERRIDES *
|
|
****************************************************************************/
|
|
// visit https://github.com/yokoffing/Betterfox/wiki/Common-Overrides
|
|
// visit https://github.com/yokoffing/Betterfox/wiki/Optional-Hardening
|
|
// Enter your personal overrides below this line:
|
|
|
|
|
|
|
|
/****************************************************************************
|
|
* SECTION: SMOOTHFOX *
|
|
****************************************************************************/
|
|
// visit https://github.com/yokoffing/Betterfox/blob/main/Smoothfox.js
|
|
// Enter your scrolling overrides below this line:
|
|
|
|
|
|
|
|
/****************************************************************************
|
|
* END: BETTERFOX *
|
|
****************************************************************************/
|
|
'';
|
|
search = {
|
|
default = "ddg";
|
|
force = true;
|
|
engines = {
|
|
# don't need these default ones
|
|
"amazondotcom-us".metaData.hidden = true;
|
|
"bing".metaData.hidden = true;
|
|
"ebay".metaData.hidden = true;
|
|
|
|
"ddg" = {
|
|
urls = [
|
|
{
|
|
template = "https://duckduckgo.com";
|
|
params = [
|
|
{
|
|
name = "q";
|
|
value = "{searchTerms}";
|
|
}
|
|
];
|
|
}
|
|
];
|
|
definedAliases = [ ",d" ];
|
|
};
|
|
"Nix Packages" = {
|
|
urls = [
|
|
{
|
|
template = "https://search.nixos.org/packages";
|
|
params = [
|
|
{
|
|
name = "type";
|
|
value = "packages";
|
|
}
|
|
{
|
|
name = "query";
|
|
value = "{searchTerms}";
|
|
}
|
|
];
|
|
}
|
|
];
|
|
definedAliases = [ ",n" ];
|
|
};
|
|
"Wikipedia" = {
|
|
urls = [
|
|
{
|
|
template = "https://en.wikipedia.org/wiki/Special:Search";
|
|
params = [
|
|
{
|
|
name = "search";
|
|
value = "{searchTerms}";
|
|
}
|
|
];
|
|
}
|
|
];
|
|
definedAliases = [ ",w" ];
|
|
};
|
|
"GitHub" = {
|
|
urls = [
|
|
{
|
|
template = "https://github.com/search";
|
|
params = [
|
|
{
|
|
name = "q";
|
|
value = "{searchTerms}";
|
|
}
|
|
];
|
|
}
|
|
];
|
|
definedAliases = [ ",gh" ];
|
|
};
|
|
};
|
|
};
|
|
userChrome = ''
|
|
/* Hide tab bar. Used with Sidebery */
|
|
#TabsToolbar {
|
|
visibility: collapse !important;
|
|
}
|
|
|
|
#navigator-toolbox:not(:hover):not(:focus-within):has(#toolbar-menubar[inactive]) {
|
|
margin-top: -36px;
|
|
}
|
|
/*
|
|
#nav-bar {
|
|
height: 20px;
|
|
}
|
|
#urlbar {
|
|
margin-top: -2px;
|
|
font-size: 10px;
|
|
padding-left: 5px;
|
|
min-height: 16px;
|
|
height: 16px;
|
|
}
|
|
#urlbar-searchmode-switcher {
|
|
display: none !important;
|
|
}
|
|
*/
|
|
browser[type="content-primary"],
|
|
browser[type="content"],
|
|
.browserContainer {
|
|
background-color: #${base16.base01} !important;
|
|
background: #${base16.base01} !important;
|
|
}
|
|
'';
|
|
in
|
|
{
|
|
stylix = lib.mkIf osConfig.custom.graphical.stylix.enable {
|
|
targets.firefox = {
|
|
profileNames = [ "default" ];
|
|
colorTheme.enable = true;
|
|
};
|
|
};
|
|
programs.firefox = lib.mkIf osConfig.custom.graphical.firefox-custom.enable {
|
|
enable = true;
|
|
policies = {
|
|
DisableTelemetry = true;
|
|
DontCheckDefaultBrowser = true;
|
|
DisablePocket = true;
|
|
DisableFirefoxStudies = true;
|
|
DisableFeedbackCommands = true;
|
|
Extensions = {
|
|
Uninstall = [
|
|
"google@search.mozilla.org"
|
|
"bing@search.mozilla.org"
|
|
"amazondotcom@search.mozilla.org"
|
|
"ebay@search.mozilla.org"
|
|
"wikipedia@search.mozilla.org"
|
|
"webcompat-reporter@mozilla.org"
|
|
"addons-search-detection@mozilla.com"
|
|
];
|
|
};
|
|
ExtensionSettings = {
|
|
"google@search.mozilla.org".installation_mode = "blocked";
|
|
"bing@search.mozilla.org".installation_mode = "blocked";
|
|
"amazondotcom@search.mozilla.org".installation_mode = "blocked";
|
|
"ebay@search.mozilla.org".installation_mode = "blocked";
|
|
"wikipedia@search.mozilla.org".installation_mode = "blocked";
|
|
"{5cd68d86-8324-4ab2-9e0d-3afcc60bee5f}" = {
|
|
install_url = "https://addons.mozilla.org/firefox/downloads/latest/animated-pekora-dark-theme/latest.xpi";
|
|
installation_mode = "force_installed";
|
|
};
|
|
};
|
|
};
|
|
profiles = {
|
|
default = {
|
|
name = "privacy-friendly";
|
|
extraConfig = betterfox;
|
|
settings = merge (
|
|
[
|
|
(import ./config/preferences.nix)
|
|
(import ./config/browser-features.nix)
|
|
(import ./config/privacy.nix)
|
|
(import ./config/tracking.nix)
|
|
(import ./config/tracking-webaudio.nix)
|
|
(import ./config/security.nix)
|
|
(import ./config/speed.nix)
|
|
]
|
|
++ lib.optionals osConfig.custom.hardware.nvidia.enable [ (import ./config/nvidia-fixes.nix) ]
|
|
);
|
|
userChrome = userChrome;
|
|
userContent = ''
|
|
body:-moz-only-whitespace {
|
|
--body-bg-color: #${base16.base01};
|
|
background-color: #${base16.base01};
|
|
}
|
|
|
|
#toolbarContainer {
|
|
--toolbar-bg-color: #${base16.base01};
|
|
}
|
|
'';
|
|
# Changes the extension storage backend from IDB to json, wipes all data when switching
|
|
extensions.force = true;
|
|
extensions.packages = with pkgs.nur.repos.rycee.firefox-addons; [
|
|
clearurls
|
|
darkreader
|
|
sponsorblock
|
|
ublock-origin
|
|
keepassxc-browser
|
|
youtube-nonstop
|
|
sidebery
|
|
vimium
|
|
user-agent-string-switcher
|
|
];
|
|
inherit search;
|
|
};
|
|
enable-webaudio = {
|
|
name = "privacy-but-enable-webaudio";
|
|
id = 2;
|
|
settings = merge (
|
|
[
|
|
(import ./config/preferences.nix)
|
|
(import ./config/browser-features.nix)
|
|
(import ./config/privacy.nix)
|
|
(import ./config/tracking.nix)
|
|
(import ./config/security.nix)
|
|
(import ./config/speed.nix)
|
|
]
|
|
++ lib.optionals osConfig.custom.hardware.nvidia.enable [ (import ./config/nvidia-fixes.nix) ]
|
|
);
|
|
userChrome = userChrome;
|
|
extensions.packages = with pkgs.nur.repos.rycee.firefox-addons; [
|
|
clearurls
|
|
darkreader
|
|
sponsorblock
|
|
ublock-origin
|
|
keepassxc-browser
|
|
youtube-nonstop
|
|
sidebery
|
|
vimium
|
|
user-agent-string-switcher
|
|
];
|
|
inherit search;
|
|
};
|
|
# This does not have as strict privacy settings as the default profile.
|
|
# It uses the default firefox settings. Useful when something is not
|
|
# working using the default profile
|
|
shit = {
|
|
name = "trade-privacy-for-convenience";
|
|
id = 1;
|
|
userChrome = userChrome;
|
|
settings = merge (
|
|
[
|
|
(import ./config/preferences.nix)
|
|
(import ./config/speed.nix)
|
|
]
|
|
++ lib.optionals osConfig.custom.hardware.nvidia.enable [ (import ./config/nvidia-fixes.nix) ]
|
|
);
|
|
extensions.packages = with pkgs.nur.repos.rycee.firefox-addons; [
|
|
clearurls
|
|
darkreader
|
|
sponsorblock
|
|
ublock-origin
|
|
youtube-nonstop
|
|
sidebery
|
|
user-agent-string-switcher
|
|
];
|
|
inherit search;
|
|
};
|
|
};
|
|
};
|
|
xdg.desktopEntries = {
|
|
firefox-enable-webaudio = {
|
|
name = "Firefox - enabled webaudio";
|
|
genericName = "Web Browser";
|
|
exec = "firefox -P privacy-but-enable-webaudio %U";
|
|
terminal = false;
|
|
categories = [
|
|
"Application"
|
|
"Network"
|
|
"WebBrowser"
|
|
];
|
|
mimeType = [
|
|
"text/html"
|
|
"text/xml"
|
|
];
|
|
};
|
|
};
|
|
}
|