nixos-config/home/browsers/firefox.nix

148 lines
4.7 KiB
Nix
Raw Normal View History

2020-08-15 02:30:01 +02:00
{ config, pkgs, lib, ... }:
2020-08-15 02:30:01 +02:00
with lib;
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;
# "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;
# Theme
"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;
"browser.ssb.enabled" = true;
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 {
programs.firefox = {
enable = true;
2020-11-22 10:55:35 +01:00
package = with pkgs;
wrapFirefox firefox-unwrapped { cfg.enableFXCastBridge = true; };
profiles = {
private = {
id = 0;
2020-08-15 02:30:01 +02:00
settings = sharedSettings;
};
work = {
id = 1;
2020-08-15 02:30:01 +02:00
settings = sharedSettings;
};
};
extensions = with firefox-addons; [
ublock-origin
decentraleyes
2020-09-07 12:52:36 +02:00
clearurls
terms-of-service-didnt-read
vimium
ipfs-companion
2020-09-23 09:33:49 +02:00
bitwarden
darkreader
languagetool
metamask
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-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);
2020-08-25 21:34:43 +02:00
makeFirefoxProfileDesktopItem = attrs:
let
2020-10-03 16:48:01 +02:00
mkExec = with lib;
{ name, profile, ... }: ''
firefox -p "${escapeDesktopArg profile}" --class="firefox-${
escapeDesktopArg name
}"
2020-09-07 12:52:36 +02:00
'';
2020-10-03 16:48:01 +02:00
in pkgs.makeDesktopItem ((removeAttrs attrs [ "profile" ]) // {
exec = mkExec attrs;
extraEntries = ''
StartupWMClass="${escapeDesktopArg attrs.name}"
'';
});
2020-08-25 21:34:43 +02:00
makeFirefoxWebAppDesktopItem = attrs:
let
2020-09-07 12:52:36 +02:00
# --class not yet respected: https://bugzilla.mozilla.org/show_bug.cgi?id=1606247
2020-10-03 16:48:01 +02:00
mkExec = with lib;
{ app, name, profile ? "private", ... }: ''
firefox -p "${escapeDesktopArg profile}" --ssb="${
escapeDesktopArg app
}" --class="${escapeDesktopArg name}"
2020-09-07 12:52:36 +02:00
'';
2020-10-03 16:48:01 +02:00
in pkgs.makeDesktopItem ((removeAttrs attrs [ "app" "profile" ]) // {
exec = mkExec attrs;
extraEntries = ''
StartupWMClass="${escapeDesktopArg attrs.name}"
'';
});
in (with pkgs;
[ (tor-browser-bundle-bin.override { pulseaudioSupport = true; }) ]) ++ [
(makeFirefoxProfileDesktopItem {
name = "firefox-work";
desktopName = "Firefox (Work)";
icon = "firefox"; # TODO looks different
profile = "work";
})
(makeFirefoxWebAppDesktopItem {
name = "element";
desktopName = "Element";
app = "https://app.element.io";
})
(makeFirefoxWebAppDesktopItem {
name = "youtube-music";
desktopName = "YouTube Music";
app = "https://music.youtube.com";
})
];
}