492 lines
27 KiB
Nix
492 lines
27 KiB
Nix
{
|
|
config,
|
|
inputs,
|
|
lib,
|
|
pkgs,
|
|
...
|
|
}: let
|
|
cfg = config.myOptions.programs.firefox;
|
|
inherit (config.myOptions.other.system) username;
|
|
|
|
inherit (lib) mkEnableOption mkIf mkOption;
|
|
inherit (lib.types) attrsOf listOf str submodule;
|
|
inherit (lib.attrsets) mapAttrs mapAttrsToList;
|
|
|
|
buildFirefoxXpiAddon = lib.makeOverridable ({
|
|
stdenv ? pkgs.stdenv,
|
|
fetchurl ? pkgs.fetchurl,
|
|
pname,
|
|
version,
|
|
addonId,
|
|
url,
|
|
sha256,
|
|
...
|
|
}:
|
|
stdenv.mkDerivation {
|
|
name = "${pname}-${version}";
|
|
src = fetchurl {inherit url sha256;};
|
|
preferLocalBuild = true;
|
|
allowSubstitutes = true;
|
|
buildCommand = ''
|
|
dst="$out/share/mozilla/extensions/{ec8030f7-c20a-464f-9b0e-13a3a9397384}"
|
|
mkdir -p "$dst"
|
|
install -v -m644 "$src" "$dst/${addonId}.xpi"
|
|
'';
|
|
});
|
|
|
|
extra-addons = {
|
|
yomichan = buildFirefoxXpiAddon {
|
|
pname = "yomichan";
|
|
version = "20.5.22.1";
|
|
addonId = "{a9226ee9-7998-47bd-b72e-a1b56df7f77b}";
|
|
url = "https://addons.mozilla.org/firefox/downloads/file/3585060/yomichan-20.5.22.1.xpi";
|
|
sha256 = "sha256-/icvPD/nCJYS31owfYMD25QzFjsxAqapy/UAehhxsy8=";
|
|
};
|
|
};
|
|
|
|
searxng-name = "NotASearx";
|
|
|
|
searxng = {
|
|
urls = [{ template = "https://search.notashelf.dev/search?q={searchTerms}"; }];
|
|
iconUpdateURL = "https://search.notashelf.dev/favicon.ico";
|
|
updateInterval = 24 * 60 * 60 * 1000;
|
|
definedAliases = [ "@sx" ];
|
|
};
|
|
|
|
logo = pkgs.fetchurl {
|
|
url = "https://raw.githubusercontent.com/schizofox/assets/main/logo/logo.png";
|
|
sha256 = "1wjzivdmppbzrwdxhza5dzzljl3z59vfgggxim9xjb2rzr0wqyyf";
|
|
};
|
|
in {
|
|
options.myOptions.programs.firefox = {
|
|
enable = mkEnableOption "firefox";
|
|
defaultSearchEngine = mkOption {
|
|
description = "name of the default search engine";
|
|
type = str;
|
|
};
|
|
searchEngines = mkOption {
|
|
default = [{
|
|
url = "https://startpage.com";
|
|
name = "Startpage";
|
|
aliases = [ "@sp" ];
|
|
}];
|
|
description = "search engines";
|
|
type = attrsOf (submodule {
|
|
options = {
|
|
url = mkOption {
|
|
description = "url for the search engine, params placeholder and all";
|
|
type = str;
|
|
};
|
|
faviconPath = mkOption {
|
|
default = "";
|
|
description = "path to favicon";
|
|
type = str;
|
|
};
|
|
faviconUrl = mkOption {
|
|
default = "";
|
|
description = "url to favicon";
|
|
type = str;
|
|
};
|
|
aliases = mkOption {
|
|
description = "aliases for the search engine";
|
|
type = listOf str;
|
|
};
|
|
};
|
|
});
|
|
};
|
|
};
|
|
|
|
config = mkIf cfg.enable {
|
|
nixpkgs.overlays = [ inputs.nur.overlay ];
|
|
|
|
environment.sessionVariables = {
|
|
MOZ_ENABLE_WAYLAND = "1";
|
|
MOZ_DRM_DEVICE = "/dev/dri/card0";
|
|
};
|
|
|
|
services.psd = {
|
|
enable = true;
|
|
resyncTimer = "30m";
|
|
};
|
|
|
|
home-manager.users.${username} = {
|
|
xdg.desktopEntries = {
|
|
firefox-schizo = {
|
|
name = "Schizofox";
|
|
genericName = "Web Browser";
|
|
exec = "firefox-devedition --name firefox-schizo -P schizo %U";
|
|
icon = "${logo}";
|
|
terminal = false;
|
|
categories = [ "Network" "WebBrowser" ];
|
|
mimeType = [ "text/html" "text/xml" "application/xhtml+xml" "application/vnd.mozilla.xul+xml" "x-scheme-handler/http" "x-scheme-handler/https" ];
|
|
type = "Application";
|
|
startupNotify = true;
|
|
settings = {
|
|
StartupWMClass = "firefox-schizo";
|
|
};
|
|
};
|
|
firefox-unschizo = {
|
|
name = "Sanefox";
|
|
genericName = "Web Browser";
|
|
exec = "firefox-devedition --name firefox-sane -P unschizo %U";
|
|
icon = "${logo}";
|
|
terminal = false;
|
|
categories = [ "Network" "WebBrowser" ];
|
|
mimeType = [ "text/html" "text/xml" "application/xhtml+xml" "application/vnd.mozilla.xul+xml" "x-scheme-handler/http" "x-scheme-handler/https" ];
|
|
type = "Application";
|
|
startupNotify = true;
|
|
settings = {
|
|
StartupWMClass = "firefox-sane";
|
|
};
|
|
};
|
|
};
|
|
|
|
programs.firefox = {
|
|
enable = true;
|
|
package = pkgs.firefox-devedition;
|
|
profiles = {
|
|
"schizo" = {
|
|
id = 0;
|
|
isDefault = true;
|
|
search = {
|
|
default = cfg.defaultSearchEngine;
|
|
force = true;
|
|
engines = (mapAttrs (name: value: {
|
|
${name} = {
|
|
urls = [{ template = value.url; }];
|
|
icon = mkIf (value.faviconPath != "") value.faviconPath;
|
|
iconUpdateURL = mkIf (value.faviconUrl != "") value.faviconUrl;
|
|
updateInterval = mkIf (value.faviconUrl != "") (24 * 60 * 60 * 1000);
|
|
definedAliases = value.aliases;
|
|
};
|
|
}) cfg.searchEngines)
|
|
// {
|
|
# GTFO
|
|
"Google".metaData.hidden = true;
|
|
"Bing".metaData.hidden = true;
|
|
"DuckDuckGo".metaData.hidden = true;
|
|
"Amazon.com".metaData.hidden = true;
|
|
};
|
|
order = mapAttrsToList (name: _value: name) cfg.searchEngines;
|
|
};
|
|
extensions = with pkgs.nur.repos.rycee.firefox-addons; [
|
|
ublock-origin
|
|
tridactyl
|
|
violentmonkey
|
|
darkreader
|
|
keepassxc-browser
|
|
redirector
|
|
auto-tab-discard
|
|
extra-addons.yomichan
|
|
];
|
|
settings = {
|
|
"browser.aboutConfig.showWarning" = false;
|
|
"browser.startup.page" = 0;
|
|
"browser.startup.homepage" = "about:home";
|
|
"browser.newtabpage.enabled" = true;
|
|
"browser.newtabpage.activity-stream.showSponsored" = false;
|
|
"browser.newtabpage.activity-stream.showSponsoredTopSites" = false;
|
|
"browser.newtabpage.activity-stream.default.sites" = "";
|
|
"geo.provider.network.url" = "";
|
|
"geo.provider.network.logging.enabled" = false;
|
|
"geo.provider.ms-windows-location" = false;
|
|
"geo.provider.use_corelocation" = false;
|
|
"geo.provider.use_gpsd" = false;
|
|
"geo.provider.use_geoclue" = false;
|
|
"intl.accept_langauges" = "en-US";
|
|
"javascript.use_us_english_locale" = true;
|
|
"extensions.getAddons.showPane" = false;
|
|
"extensions.htmlaboutaddons.recommendations.enabled" = false;
|
|
"browser.discovery.enabled" = false;
|
|
# this shit doesn't work thanks to firefox's
|
|
# fucking retarded ass decisions
|
|
# but I'm gonna keep it anyway
|
|
"extensions.unifiedExtensions.enabled" = false;
|
|
"datareporting.policy.dataSubmissionEnabled" = false;
|
|
"datareporting.healthreport.uploadEnabled" = false;
|
|
"toolkit.telemetry.unified" = false;
|
|
"toolkit.telemetry.enabled" = false;
|
|
"toolkit.telemetry.server" = "data:,";
|
|
"toolkit.telemetry.archive.enabled" = false;
|
|
"toolkit.telemetry.newProfilePing.enabled" = false;
|
|
"toolkit.telemetry.shutdownPingSender.enabled" = false;
|
|
"toolkit.telemetry.updatePing.enabled" = false;
|
|
"toolkit.telemetry.bhrPing.enabled" = false;
|
|
"toolkit.telemetry.firstShutdownPing.enabled" = false;
|
|
"toolkit.telemetry.coverage.opt-out" = true;
|
|
"toolkit.coverage.endpoint.base" = "";
|
|
"browser.ping-centre.telemetry" = false;
|
|
"browser.newtabpage.activity-stream.feeds.telemetry" = false;
|
|
"browser.newtabpage.activity-stream.telemetry" = false;
|
|
"app.shield.optoutstudies.enabled" = false;
|
|
"app.normandy.enabled" = false;
|
|
"app.normandy.api_url" = "";
|
|
"breakpad.reportURL" = "";
|
|
"browser.tabs.crashReporting.sendReport" = false;
|
|
"browser.crashReports.unsubmittedCheck.enabled" = false;
|
|
"browser.crashReports.unsubmittedCheck.autoSubmit2" = false;
|
|
"captivedetect.canonicalURL" = "";
|
|
"network.captive-portal-service.enabled" = false;
|
|
"network.connectivity-service.enabled" = false;
|
|
"browser.safebrowsing.malware.enabled" = false;
|
|
"browser.safebrowsing.phishing.enabled" = false;
|
|
"browser.safebrowsing.downloads.enabled" = false;
|
|
"browser.safebrowsing.downloads.remote.enabled" = false;
|
|
"browser.safebrowsing.downloads.remote.url" = "";
|
|
"browser.safebrowsing.downloads.remote.block_potentially_unwanted" = false;
|
|
"browser.safebrowsing.downloads.remote.block_uncommon" = false;
|
|
"browser.safebrowsing.allowOverride" = false;
|
|
"network.prefetch-next" = false;
|
|
"network.dns.disablePrefetch" = true;
|
|
"network.dns.disablePrefetchFromHTTPS" = true;
|
|
"network.predictor.enabled" = false;
|
|
"network.predictor.enable-prefetch" = false;
|
|
"network.http.speculative.parallel-limit" = 0;
|
|
"browser.places.speculativeConnect.enabled" = false;
|
|
"browser.send_pings" = false;
|
|
"network.dns.disableIPv6" = true;
|
|
"network.proxy.socks_remote_dns" = true;
|
|
"network.file.disable_unc_paths" = true;
|
|
"network.gio.supported-protocols" = "";
|
|
"network.proxy.failover_direct" = false;
|
|
"network.proxy.allow_bypass" = false;
|
|
# "network.trr.mode" = 5; TODO read about this
|
|
"browser.fixup.alternate.enabled" = false;
|
|
# TODO do I want this
|
|
"browser.search.suggest.enabled" = true;
|
|
"browser.urlbar.suggest.searches" = true;
|
|
"browser.urlbar.speculativeConnect.enabled" = false;
|
|
"browser.urlbar.dnsResolveSingleWordsAfterSearch" = 0;
|
|
"browser.urlbar.suggest.quicksuggest.nonsponsored" = false;
|
|
"browser.urlbar.suggest.quicksuggest.sponsored" = false;
|
|
"browser.formfill.enable" = false;
|
|
"layout.css.visited_links_enabled" = false;
|
|
"signon.autofillForms" = false;
|
|
"signon.formlessCapture.enabled" = false;
|
|
# TODO find some info about this
|
|
"network.auth.subresource-http-auth-allow" = 0;
|
|
"network.http.windows-sso.enabled" = false;
|
|
# TODO read about these until...
|
|
"browser.cache.disk.enable" = true;
|
|
"browser.privatebrowsing.forceMediaMemoryCache" = true;
|
|
"media.memory_cache_max_size" = 65536;
|
|
"browser.sessionstore.privacy_level" = 2;
|
|
# here
|
|
"toolkit.winRegisterApplicationRestart" = false;
|
|
# TODO favicons might be cool though
|
|
"browser.shell.shortcutFavicons" = false;
|
|
"security.ssl.require_safe_negotiation" = true;
|
|
"security.tls.enable_0rtt_data" = true;
|
|
# TODO read and think about it
|
|
"security.OCSP.enabled" = 1;
|
|
"security.OCSP.require" = true;
|
|
"security.family_safety.mode" = 0;
|
|
"security.cert_pinning.enforcement_level" = 2;
|
|
# TODO read about the next 2
|
|
"security.remote_settings.crlite_filters.enabled" = true;
|
|
"security.pki.crlite_mode" = 2;
|
|
# TODO if images break it's probably this
|
|
"security.mixed_content.block_display_content" = true;
|
|
"dom.security.https_only_mode" = true;
|
|
"dom.security.https_only_mode_pbm" = true;
|
|
"dom.security.https_only_mode.upgrade_local" = true;
|
|
"dom.security.https_only_mode_send_http_background_request" = false;
|
|
"security.ssl.treat_unsafe_negotiation_as_broken" = true;
|
|
"browser.xul.error_pages.expert_bad_cert" = true;
|
|
"network.http.referer.XOriginPolicy" = 2;
|
|
"network.http.referer.XOriginTrimmingPolicy" = 2;
|
|
"privacy.userContext.enabled" = true;
|
|
"privacy.userContext.ui.enabled" = true;
|
|
"privacy.userContext.newTabContainerOnLeftClick.enabled" = true;
|
|
# TODO read about these 2
|
|
"media.peerconnection.ice.proxy_only_if_behind_proxy" = true;
|
|
"media.peerconnection.ice.default_address_only" = true;
|
|
"media.peerconnection.ice.no_host" = true;
|
|
# TODO remove this if some codecs or shit don't work
|
|
"media.gmp-provider.enabled" = false;
|
|
# I think this is for netflix and shit
|
|
"media.gmp-widevinecdm.enabled" = false;
|
|
# disables DRM in general
|
|
"media.eme.enabled" = false;
|
|
# and the ui for it just in case
|
|
"browser.eme.ui.enabled" = false;
|
|
"dom.disable_window_move_resize" = true;
|
|
"accessibility.force_disabled" = 1;
|
|
"browser.helperApps.deleteTempFileOnExit" = true;
|
|
# TODO what the fuck is uitour
|
|
"browser.uitour.enabled" = false;
|
|
"browser.uitour.url" = "";
|
|
"devtools.debugger.remote-enabled" = false;
|
|
"middlemouse.contentLoadURL" = false;
|
|
"permissions.default.shortcuts" = 2;
|
|
"permissions.manager.defaultsUrl" = "";
|
|
# TODO what is this
|
|
"webchannel.allowObject.urlWhitelist" = "";
|
|
"network.IDN_show_punycode" = true;
|
|
"pdfjs.disabled" = false;
|
|
"pdfjs.enableScripting" = false;
|
|
"network.protocol-handler.external.ms-windows-store" = false;
|
|
"permissions.delegation.enabled" = false;
|
|
"browser.download.useDownloadDir" = true;
|
|
"browser.download.alwaysOpenPanel" = false;
|
|
"browser.download.manager.addToRecentDocs" = true;
|
|
"browser.download.always_ask_before_handling_new_types" = true;
|
|
# if extensions break go here
|
|
"extensions.enabledScopes" = 5;
|
|
"extensions.autoDisableScopes" = 15;
|
|
# TODO rethink this
|
|
"extensions.postDownloadThirdPartyPrompt" = true;
|
|
"extensions.webextensions.restrictedDomains" = "";
|
|
"browser.contentblocking.category" = "strict";
|
|
"privacy.antitracking.enableWebcompat" = false;
|
|
"privacy.partition.serviceWorkers" = true;
|
|
"privacy.partition.always_partition_third_party_non_cookie_storage" = true;
|
|
"privacy.partition.always_partition_third_party_non_cookie_storage.exempt_sessionstorage" = false;
|
|
"privacy.sanitize.sanitizeOnShutdown" = true;
|
|
"privacy.clearOnShutdown.cache" = true;
|
|
"privacy.clearOnShutdown.downloads" = true;
|
|
"privacy.clearOnShutdown.formdata" = true;
|
|
"privacy.clearOnShutdown.history" = true;
|
|
"privacy.clearOnShutdown.sessions" = true;
|
|
"privacy.clearOnShutdown.siteSettings" = true;
|
|
# if true I can't recover from crashes according to arkenfox
|
|
"privacy.clearOnShutdown.openWindows" = false;
|
|
"privacy.clearOnShutdown.cookies" = true;
|
|
"privacy.clearOnShutdown.offlineApps" = true;
|
|
"privacy.clearsitedata.cache.enabled" = true;
|
|
"privacy.cpd.cache" = true;
|
|
"privacy.cpd.formdata" = true;
|
|
"privacy.cpd.history" = true;
|
|
"privacy.cpd.sessions" = true;
|
|
"privacy.cpd.offlineApps" = true;
|
|
"privacy.cpd.cookies" = true;
|
|
"privacy.cpd.downloads" = true;
|
|
"privacy.cpd.openWindows" = false;
|
|
"privacy.cpd.passwords" = true;
|
|
"privacy.cpd.siteSettings" = true;
|
|
"privacy.sanitize.timeSpan" = 0;
|
|
"privacy.resistFingerprint" = false;
|
|
# we won't be installing extensions through mozilla's website I don't think
|
|
"privacy.resistFingerprinting.block_mozAddonManager" = true;
|
|
"privacy.resistFingerprinting.letterboxing" = true;
|
|
"layout.css.font-visibility.resistFingerprinting" = 1;
|
|
"browser.display.use_system_colors" = false;
|
|
"widget.non-native-theme.enabled" = true;
|
|
"browser.link.open_newwindow" = 3;
|
|
"browser.link.open_newwindow.restriction" = 0;
|
|
"webgl.disabled" = false;
|
|
"signon.rememberSignons" = false;
|
|
"permissions.memory_only" = true;
|
|
"security.nocertdb" = true;
|
|
"browser.chrome.site_icons" = true;
|
|
"browser.session.max_tabs_undo" = 0;
|
|
"browser.sessionstore.resume_from_crash" = true;
|
|
"browser.urlbar.autoFill" = false;
|
|
"places.history.enabled" = false;
|
|
"extensions.formautofill.addresses.enabled" = false;
|
|
"extensions.formautofill.creditCards.enabled" = false;
|
|
"extensions.formautofill.heuristics.enabled" = false;
|
|
"dom.popup_allowed_events" = "click dblclick mousedown pointerdown";
|
|
"javascript.options.ion" = false;
|
|
"javascript.options.baselinejit" = false;
|
|
"javascript.options.jit_trustedprincipals" = true;
|
|
"javascript.options.wasm" = false;
|
|
"extensions.blocklist.enabled" = true;
|
|
"network.http.referer.spoofSource" = false;
|
|
"security.dialog_enable_delay" = 1000;
|
|
"privacy.firstparty.isolate" = false;
|
|
"extensions.webcompat.enable_shims" = true;
|
|
"security.tls.version.enable-deprecated" = false;
|
|
"extensions.webcompat-reporter.enabled" = false;
|
|
|
|
"gfx.webrender.all" = true;
|
|
"media.ffmpeg.vaapi.enabled" = true;
|
|
|
|
"identity.sync.tokenserver.uri" = "https://ffsync.jacekpoz.pl/1.0/sync/1.5";
|
|
};
|
|
};
|
|
"unschizo" = {
|
|
id = 1;
|
|
isDefault = false;
|
|
search = {
|
|
default = "${searxng-name}";
|
|
force = true;
|
|
engines = {
|
|
"${searxng-name}" = searxng;
|
|
# GTFO
|
|
"Google".metaData.hidden = true;
|
|
"Bing".metaData.hidden = true;
|
|
"DuckDuckGo".metaData.hidden = true;
|
|
"Amazon.com".metaData.hidden = true;
|
|
};
|
|
};
|
|
extensions = with pkgs.nur.repos.rycee.firefox-addons; [
|
|
ublock-origin
|
|
dearrow
|
|
tridactyl
|
|
violentmonkey
|
|
darkreader
|
|
keepassxc-browser
|
|
auto-tab-discard
|
|
extra-addons.yomichan
|
|
];
|
|
settings = {
|
|
"browser.aboutConfig.showWarning" = false;
|
|
"browser.startup.page" = 0;
|
|
"browser.startup.homepage" = "about:home";
|
|
"browser.newtabpage.enabled" = true;
|
|
"browser.newtabpage.activity-stream.showSponsored" = false;
|
|
"browser.newtabpage.activity-stream.showSponsoredTopSites" = false;
|
|
"browser.newtabpage.activity-stream.default.sites" = "";
|
|
"extensions.getAddons.showPane" = false;
|
|
"extensions.htmlaboutaddons.recommendations.enabled" = false;
|
|
"browser.discovery.enabled" = false;
|
|
"extensions.unifiedExtensions.enabled" = false;
|
|
"datareporting.policy.dataSubmissionEnabled" = false;
|
|
"datareporting.healthreport.uploadEnabled" = false;
|
|
"toolkit.telemetry.unified" = false;
|
|
"toolkit.telemetry.enabled" = false;
|
|
"toolkit.telemetry.server" = "data:,";
|
|
"toolkit.telemetry.archive.enabled" = false;
|
|
"toolkit.telemetry.newProfilePing.enabled" = false;
|
|
"toolkit.telemetry.shutdownPingSender.enabled" = false;
|
|
"toolkit.telemetry.updatePing.enabled" = false;
|
|
"toolkit.telemetry.bhrPing.enabled" = false;
|
|
"toolkit.telemetry.firstShutdownPing.enabled" = false;
|
|
"toolkit.telemetry.coverage.opt-out" = true;
|
|
"toolkit.coverage.endpoint.base" = "";
|
|
"browser.ping-centre.telemetry" = false;
|
|
"browser.newtabpage.activity-stream.feeds.telemetry" = false;
|
|
"browser.newtabpage.activity-stream.telemetry" = false;
|
|
"app.shield.optoutstudies.enabled" = false;
|
|
"app.normandy.enabled" = false;
|
|
"app.normandy.api_url" = "";
|
|
"breakpad.reportURL" = "";
|
|
"browser.tabs.crashReporting.sendReport" = false;
|
|
"browser.crashReports.unsubmittedCheck.enabled" = false;
|
|
"browser.crashReports.unsubmittedCheck.autoSubmit2" = false;
|
|
"captivedetect.canonicalURL" = "";
|
|
"network.captive-portal-service.enabled" = false;
|
|
"network.connectivity-service.enabled" = false;
|
|
"browser.safebrowsing.malware.enabled" = false;
|
|
"browser.safebrowsing.phishing.enabled" = false;
|
|
"browser.safebrowsing.downloads.enabled" = false;
|
|
"browser.safebrowsing.downloads.remote.enabled" = false;
|
|
"browser.safebrowsing.downloads.remote.url" = "";
|
|
"browser.safebrowsing.downloads.remote.block_potentially_unwanted" = false;
|
|
"browser.safebrowsing.downloads.remote.block_uncommon" = false;
|
|
"browser.safebrowsing.allowOverride" = false;
|
|
"privacy.resistFingerprinting.block_mozAddonManager" = true;
|
|
"signon.rememberSignons" = false;
|
|
|
|
"gfx.webrender.all" = true;
|
|
"media.ffmpeg.vaapi.enabled" = true;
|
|
|
|
"identity.sync.tokenserver.uri" = "https://ffsync.jacekpoz.pl/1.0/sync/1.5";
|
|
};
|
|
};
|
|
};
|
|
};
|
|
};
|
|
};
|
|
}
|