yep, more dotfiles
1{ config
2, lib
3, pkgs
4, ...
5}:
6
7let
8 cfg = config.local.fragment.firefox;
9in
10{
11 options.local.fragment.firefox.enable = lib.mkEnableOption ''
12 Firefox related
13 '';
14
15 config = lib.mkIf cfg.enable {
16 home.sessionVariables.BROWSER = lib.getExe pkgs.firefox;
17
18 programs.firefox = {
19 enable = true;
20
21 policies = {
22 DisableTelemetry = true;
23 DisableFirefoxStudies = true;
24 DontCheckDefaultBrowser = true;
25 DisablePocket = true;
26 SearchBar = "unified";
27 };
28
29 profiles.default = {
30 isDefault = true;
31
32 settings = {
33 # Privacy and default bloat
34 "extensions.pocket.enabled" = false;
35 "browser.newtabpage.pinned" = "";
36 "browser.topsites.contile.enabled" = false;
37 "browser.newtabpage.activity-stream.showSponsored" = false;
38 "browser.newtabpage.activity-stream.system.showSponsored" = false;
39 "browser.newtabpage.activity-stream.showSponsoredTopSites" = false;
40
41 # Use vertical tabs
42 "sidebar.revamp" = true;
43 "sidebar.verticalTabs" = true;
44
45 # Disable swipe gesture
46 "browser.gesture.swipe.left" = "";
47 "browser.gesture.swipe.right" = "";
48
49 "browser.search.defaultenginename" = "DuckDuckGo";
50 "browser.search.order.1" = "DuckDuckGo";
51
52 "signon.rememberSignons" = false;
53 "widget.use-xdg-desktop-portal.file-picker" = 1;
54 "browser.aboutConfig.showWarning" = false;
55
56 # Enable meta devtools to inspect Firefox Chrome UI
57 "devtools.chrome.enabled" = true;
58 "devtools.debugger.remote-enabled" = true;
59
60 # Pickup userChrome styles at startup
61 "toolkit.legacyUserProfileCustomizations.stylesheets" = true;
62
63 # Firefox 75+ remembers the last workspace it was opened on as part of its session management.
64 # This is annoying, because I can have a blank workspace, click Firefox from the launcher, and
65 # then have Firefox open on some other workspace.
66 "widget.disable-workspace-management" = true;
67 };
68
69 # <https://www.userchrome.org/how-create-userchrome-css.html>
70 userChrome = ''
71 /* Hide close button */
72 .titlebar-close { display: none !important; }
73 '';
74
75 userContent = ''
76 /* Darken PDFs in viewer to match system color scheme */
77 @media (prefers-color-scheme: dark) {
78 #viewerContainer > #viewer > .page > .canvasWrapper > canvas,
79 #viewerContainer > #viewer > div.spread > .page > .canvasWrapper > canvas {
80 filter: grayscale(1) invert(1) sepia(1);
81 }
82 }
83 '';
84
85 search = {
86 force = true;
87 default = "ddg";
88 order = [ "ddg" "wikipedia" "google" ];
89 };
90 };
91 };
92 };
93}