2020-08-15 02:30:01 +02:00
|
|
|
{ config, pkgs, lib, ... }:
|
2020-08-14 23:41:20 +02:00
|
|
|
|
2020-08-15 02:30:01 +02:00
|
|
|
with lib;
|
2020-08-14 23:41:20 +02:00
|
|
|
let
|
|
|
|
firefox-addons = pkgs.nur.repos.rycee.firefox-addons;
|
2020-08-15 02:30:01 +02:00
|
|
|
|
2020-10-03 16:48:01 +02:00
|
|
|
prefer-dark-theme =
|
|
|
|
config.gtk.gtk3.extraConfig.gtk-application-prefer-dark-theme;
|
2020-08-15 02:30:01 +02:00
|
|
|
|
|
|
|
sharedSettings = {
|
|
|
|
# Privacy recommendations from https://www.privacytools.io/browsers/#about_config
|
|
|
|
"privacy.firstparty.isolate" = true;
|
2020-08-15 12:26:25 +02:00
|
|
|
# "privacy.resistFingerprinting" = true; # forces ui.systemUsesDarkTheme to false
|
2020-08-15 02:30:01 +02:00
|
|
|
"privacy.trackingprotection.fingerprinting.enabled" = true;
|
|
|
|
"privacy.trackingprotection.cryptomining.enabled" = true;
|
|
|
|
"privacy.trackingprotection.socialtracking.enabled" = true;
|
|
|
|
"privacy.trackingprotection.enabled" = true;
|
|
|
|
"browser.send_pings" = false;
|
|
|
|
"browser.urlbar.speculativeConnect.enabled" = false;
|
|
|
|
"dom.event.clipboardevents.enabled" = false;
|
2020-11-22 17:02:48 +01:00
|
|
|
"dom.security.https_only_mode" = true;
|
|
|
|
"dom.security.https_only_mode_ever_enabled" = true;
|
2020-08-15 02:30:01 +02:00
|
|
|
"media.eme.enabled" = false;
|
|
|
|
"media.gmp-widevinecdm.enabled" = false;
|
|
|
|
"media.navigator.enabled" = false;
|
|
|
|
"network.cookie.cookieBehavior" = 1;
|
|
|
|
"network.http.referer.XOriginPolicy" = 2;
|
|
|
|
"network.http.referer.XOriginTrimmingPolicy" = 2;
|
2020-08-25 21:34:43 +02:00
|
|
|
# "webgl.disabled" = true;
|
2020-08-15 02:30:01 +02:00
|
|
|
"browser.sessionstore.privacy_level" = 2;
|
|
|
|
"network.IDN_show_punycode" = true;
|
|
|
|
|
2021-05-11 20:58:03 +02:00
|
|
|
# Disable DNS over HTTPS (done system-wide)
|
|
|
|
"network.trr.mode" = 5;
|
|
|
|
|
2020-08-15 02:30:01 +02:00
|
|
|
# Theme
|
2021-06-03 11:46:58 +02:00
|
|
|
"browser.theme.toolbar-theme" = 0;
|
2020-08-15 12:26:25 +02:00
|
|
|
"ui.systemUsesDarkTheme" = prefer-dark-theme;
|
2020-10-03 16:48:01 +02:00
|
|
|
"extensions.activeThemeID" = concatStrings [
|
|
|
|
"firefox-compact-"
|
|
|
|
(if prefer-dark-theme then "dark" else "light")
|
|
|
|
"@mozilla.org"
|
|
|
|
];
|
|
|
|
"devtools.theme" = if prefer-dark-theme then "dark" else "light";
|
|
|
|
|
|
|
|
# i18n
|
|
|
|
"intl.accept_languages" = "en-GB, en";
|
|
|
|
"intl.regional_prefs.use_os_locales" = true;
|
2020-08-25 21:34:43 +02:00
|
|
|
|
2020-12-25 12:01:55 +01:00
|
|
|
# dev tools
|
|
|
|
"devtools.inspector.color-scheme-simulation.enabled" = true;
|
|
|
|
"devtools.inspector.showAllAnonymousContent" = true;
|
|
|
|
|
2020-08-25 21:34:43 +02:00
|
|
|
# Other
|
|
|
|
"browser.startup.page" = 3;
|
2021-03-04 15:08:34 +01:00
|
|
|
"browser.toolbars.bookmarks.visibility" = "newtab";
|
2020-08-27 23:39:29 +02:00
|
|
|
"browser.tabs.drawInTitlebar" = true;
|
|
|
|
"browser.aboutConfig.showWarning" = false;
|
|
|
|
"signon.rememberSignons" = false;
|
|
|
|
"services.sync.engine.passwords" = false;
|
2020-08-28 13:44:06 +02:00
|
|
|
"browser.newtabpage.activity-stream.asrouter.userprefs.cfr.addons" = false;
|
2020-10-03 16:48:01 +02:00
|
|
|
"browser.newtabpage.activity-stream.asrouter.userprefs.cfr.features" =
|
|
|
|
false;
|
2020-09-07 12:52:36 +02:00
|
|
|
"browser.newtabpage.activity-stream.feeds.snippets" = false;
|
2020-11-22 10:55:35 +01:00
|
|
|
"extensions.update.enabled" = false;
|
|
|
|
"extensions.update.autoUpdateDefault" = false;
|
2020-08-15 02:30:01 +02:00
|
|
|
};
|
2020-10-03 16:48:01 +02:00
|
|
|
in {
|
2020-08-14 23:41:20 +02:00
|
|
|
programs.firefox = {
|
|
|
|
enable = true;
|
2020-11-22 10:55:35 +01:00
|
|
|
package = with pkgs;
|
2021-11-09 09:57:22 +01:00
|
|
|
wrapFirefox firefox-unwrapped {
|
|
|
|
forceWayland = true;
|
|
|
|
cfg.enableFXCastBridge = true;
|
|
|
|
};
|
2020-08-14 23:41:20 +02:00
|
|
|
profiles = {
|
|
|
|
private = {
|
|
|
|
id = 0;
|
2020-08-15 02:30:01 +02:00
|
|
|
settings = sharedSettings;
|
2020-08-14 23:41:20 +02:00
|
|
|
};
|
|
|
|
work = {
|
|
|
|
id = 1;
|
2020-08-15 02:30:01 +02:00
|
|
|
settings = sharedSettings;
|
2020-08-14 23:41:20 +02:00
|
|
|
};
|
|
|
|
};
|
|
|
|
extensions = with firefox-addons; [
|
|
|
|
ublock-origin
|
2021-06-10 11:54:38 +02:00
|
|
|
localcdn
|
2020-09-07 12:52:36 +02:00
|
|
|
clearurls
|
|
|
|
terms-of-service-didnt-read
|
2020-08-14 23:41:20 +02:00
|
|
|
vimium
|
|
|
|
ipfs-companion
|
2020-09-23 09:33:49 +02:00
|
|
|
bitwarden
|
2020-08-14 23:41:20 +02:00
|
|
|
darkreader
|
2020-10-20 15:41:55 +02:00
|
|
|
languagetool
|
|
|
|
metamask
|
2021-03-04 15:08:34 +01:00
|
|
|
privacy-redirect
|
2021-06-10 11:54:38 +02:00
|
|
|
to-deepl
|
2020-08-25 21:34:43 +02:00
|
|
|
# not available yet:
|
|
|
|
# fx_cast
|
2020-09-07 12:52:36 +02:00
|
|
|
# google-lighthouse
|
2020-08-14 23:41:20 +02:00
|
|
|
];
|
|
|
|
};
|
2020-08-15 02:32:23 +02:00
|
|
|
|
2020-08-25 21:34:43 +02:00
|
|
|
home.packages = let
|
2020-10-03 16:48:01 +02:00
|
|
|
escapeDesktopArg = arg:
|
|
|
|
replaceStrings [ ''"'' ] [ ''"\""'' ] (toString arg);
|
2021-03-29 21:39:37 +02:00
|
|
|
makeFirefoxProfileBin = args@{ profile, ... }:
|
2020-08-25 21:34:43 +02:00
|
|
|
let
|
2021-03-29 21:39:37 +02:00
|
|
|
name = "firefox-${profile}";
|
2021-03-29 21:43:13 +02:00
|
|
|
scriptBin = pkgs.writeScriptBin name ''
|
2021-03-29 21:39:37 +02:00
|
|
|
firefox -p "${escapeDesktopArg profile}" --class="${
|
|
|
|
escapeDesktopArg name
|
2021-03-29 21:43:13 +02:00
|
|
|
}" $@
|
2020-10-03 16:48:01 +02:00
|
|
|
'';
|
2021-03-29 21:39:37 +02:00
|
|
|
desktopFile = pkgs.makeDesktopItem ((removeAttrs args [ "profile" ])
|
|
|
|
// {
|
|
|
|
inherit name;
|
|
|
|
exec = "${scriptBin}/bin/${name} %U";
|
|
|
|
extraEntries = ''
|
|
|
|
StartupWMClass="${escapeDesktopArg name}"
|
|
|
|
'';
|
|
|
|
genericName = "Web Browser";
|
|
|
|
mimeType = lib.concatStringsSep ";" [
|
|
|
|
"text/html"
|
|
|
|
"text/xml"
|
|
|
|
"application/xhtml+xml"
|
|
|
|
"application/vnd.mozilla.xul+xml"
|
|
|
|
"x-scheme-handler/http"
|
|
|
|
"x-scheme-handler/https"
|
|
|
|
"x-scheme-handler/ftp"
|
|
|
|
];
|
|
|
|
categories = "Network;WebBrowser;";
|
|
|
|
});
|
|
|
|
in pkgs.runCommand name { } ''
|
|
|
|
mkdir -p $out/{bin,share}
|
|
|
|
cp -r ${scriptBin}/bin/${name} $out/bin/${name}
|
|
|
|
cp -r ${desktopFile}/share/applications $out/share/applications
|
|
|
|
'';
|
2020-10-03 16:48:01 +02:00
|
|
|
in (with pkgs;
|
|
|
|
[ (tor-browser-bundle-bin.override { pulseaudioSupport = true; }) ]) ++ [
|
2021-03-29 21:39:37 +02:00
|
|
|
(makeFirefoxProfileBin {
|
2020-10-03 16:48:01 +02:00
|
|
|
profile = "work";
|
2021-03-29 21:39:37 +02:00
|
|
|
desktopName = "Firefox (Work)";
|
|
|
|
icon = "firefox";
|
2020-10-03 16:48:01 +02:00
|
|
|
})
|
|
|
|
];
|
2020-08-14 23:41:20 +02:00
|
|
|
}
|