diff options
author | Minijackson <minijackson@riseup.net> | 2021-06-15 17:36:43 +0200 |
---|---|---|
committer | Minijackson <minijackson@riseup.net> | 2021-06-15 17:36:43 +0200 |
commit | 9eef958cd0df0c2d87910d70e1e8344dff988070 (patch) | |
tree | e104b24e79c2bb5203342b5a0fd9f24a1d6ce8b7 /usecases/desktop/graphical/firefox.nix | |
parent | 27d5fed11dca4b42b629921f1c14ca8bff16143b (diff) | |
download | nixos-config-reborn-9eef958cd0df0c2d87910d70e1e8344dff988070.tar.gz nixos-config-reborn-9eef958cd0df0c2d87910d70e1e8344dff988070.zip |
firefox: init
Diffstat (limited to 'usecases/desktop/graphical/firefox.nix')
-rw-r--r-- | usecases/desktop/graphical/firefox.nix | 270 |
1 files changed, 270 insertions, 0 deletions
diff --git a/usecases/desktop/graphical/firefox.nix b/usecases/desktop/graphical/firefox.nix new file mode 100644 index 0000000..3539963 --- /dev/null +++ b/usecases/desktop/graphical/firefox.nix | |||
@@ -0,0 +1,270 @@ | |||
1 | inputs: | ||
2 | |||
3 | { config, lib, pkgs, ... }: | ||
4 | |||
5 | { | ||
6 | nixpkgs.config.allowUnfreePredicate = pkg: builtins.elem (lib.getName pkg) [ | ||
7 | "betterttv" | ||
8 | ]; | ||
9 | |||
10 | home-manager.users.minijackson = { ... }: | ||
11 | { | ||
12 | programs.firefox = { | ||
13 | enable = true; | ||
14 | package = pkgs.firefox-wayland; | ||
15 | |||
16 | extensions = with pkgs.nur.repos.rycee.firefox-addons; [ | ||
17 | # Security | ||
18 | https-everywhere | ||
19 | |||
20 | # Privacy | ||
21 | canvasblocker | ||
22 | clearurls | ||
23 | decentraleyes | ||
24 | google-search-link-fix | ||
25 | privacy-badger | ||
26 | ublock-origin | ||
27 | umatrix | ||
28 | |||
29 | # Additional features | ||
30 | betterttv | ||
31 | sidebery | ||
32 | stylus | ||
33 | #firenvim | ||
34 | |||
35 | # Annoyances | ||
36 | buster-captcha-solver | ||
37 | terms-of-service-didnt-read | ||
38 | unpaywall | ||
39 | bypass-paywalls | ||
40 | sponsorblock | ||
41 | |||
42 | # Missing | ||
43 | |||
44 | # Dark Website Forcer | ||
45 | # uBO-Scope | ||
46 | # Conex? | ||
47 | # Flagfox | ||
48 | # Privacy Settings | ||
49 | # Rust Search Extension | ||
50 | # French dictionary | ||
51 | ]; | ||
52 | |||
53 | profiles.home-manager-default = { | ||
54 | id = 0; | ||
55 | isDefault = true; | ||
56 | |||
57 | settings = { | ||
58 | # == Performance == | ||
59 | |||
60 | "gfx.webrender.all" = true; | ||
61 | "gfx.webrender.compositor" = true; | ||
62 | "gfx.webrender.enabled" = true; | ||
63 | "layers.acceleration.force-enabled" = true; | ||
64 | "media.ffmpeg.vaapi.enabled" = true; | ||
65 | |||
66 | # Newtab page | ||
67 | "browser.aboutHomeSnippets.updateUrl" = ""; | ||
68 | "browser.newtabpage.activity-stream.asrouter.userprefs.cfr.addons" = false; | ||
69 | "browser.newtabpage.activity-stream.asrouter.userprefs.cfr.features" = false; | ||
70 | "browser.newtabpage.activity-stream.default.sites" = ""; | ||
71 | "browser.newtabpage.activity-stream.discoverystream.config" = "{}"; | ||
72 | "browser.newtabpage.activity-stream.discoverystream.enabled" = false; | ||
73 | "browser.newtabpage.activity-stream.discoverystream.endpoints" = ""; | ||
74 | "browser.newtabpage.activity-stream.feeds.section.highlights" = false; | ||
75 | "browser.newtabpage.activity-stream.feeds.section.topstories" = false; | ||
76 | "browser.newtabpage.activity-stream.feeds.section.topstories.options" = "{}"; | ||
77 | "browser.newtabpage.activity-stream.feeds.sections" = false; | ||
78 | "browser.newtabpage.activity-stream.feeds.snippets" = false; | ||
79 | "browser.newtabpage.activity-stream.feeds.system.systemtick" = false; | ||
80 | "browser.newtabpage.activity-stream.feeds.system.telemetry" = false; | ||
81 | "browser.newtabpage.activity-stream.feeds.system.topsites" = false; | ||
82 | "browser.newtabpage.activity-stream.feeds.topsites" = false; | ||
83 | "browser.newtabpage.activity-stream.feeds.system.topstories" = false; | ||
84 | "browser.newtabpage.activity-stream.section.highlights.includeBookmarks" = false; | ||
85 | "browser.newtabpage.activity-stream.section.highlights.includeDownloads" = false; | ||
86 | "browser.newtabpage.activity-stream.section.highlights.includePocket" = false; | ||
87 | "browser.newtabpage.activity-stream.section.highlights.includeVisited" = false; | ||
88 | "browser.newtabpage.activity-stream.showSearch" = false; | ||
89 | "services.sync.prefs.sync.browser.newtabpage.activity-stream.feeds.snippets" = false; | ||
90 | |||
91 | # == Behavior == | ||
92 | |||
93 | "browser.bookmarks.showMobileBookmarks" = true; | ||
94 | # Don't try to guess TLDs, I'm using custom ones | ||
95 | "browser.fixup.alternate.enabled" = false; | ||
96 | "browser.fixup.domainsuffixwhitelist.vpn" = true; | ||
97 | "browser.ctrlTab.recentlyUsedOrder" = false; | ||
98 | "browser.startup.page" = 3; # Restore previous session | ||
99 | #"browser.startup.homepage" = "file://${homepage}"; | ||
100 | "browser.tabs.warnOnClose" = false; | ||
101 | |||
102 | "reader.color_scheme" = "dark"; | ||
103 | |||
104 | # Syncing | ||
105 | "services.sync.engine.addons" = false; | ||
106 | "services.sync.engine.addresses" = false; | ||
107 | "services.sync.engine.creditcards" = false; | ||
108 | "services.sync.engine.prefs" = false; | ||
109 | |||
110 | # Enable loading of userChrome | ||
111 | "toolkit.legacyUserProfileCustomizations.stylesheets" = true; | ||
112 | |||
113 | # == Security == | ||
114 | |||
115 | "security.pki.sha1_enforcement_level" = 1; # Completely forbid it | ||
116 | "security.ssl.treat_unsafe_negotiation_as_broken" = true; | ||
117 | "network.security.esni.enabled" = true; | ||
118 | |||
119 | # == General web privacy == | ||
120 | |||
121 | "beacon.enabled" = false; | ||
122 | |||
123 | "browser.send_pings" = false; | ||
124 | |||
125 | "browser.search.countryCode" = "US"; | ||
126 | "browser.search.region" = "US"; | ||
127 | "browser.search.geoip.url" = ""; | ||
128 | "browser.search.geoSpecificDefaults" = false; | ||
129 | |||
130 | "camera.control.face_detection.enabled" = false; | ||
131 | |||
132 | "device.sensors.enabled" = false; | ||
133 | |||
134 | "dom.archivereader.enabled" = false; | ||
135 | "dom.battery.enabled" = false; | ||
136 | "dom.event.clipboardevents.enabled" = false; | ||
137 | "dom.event.contextmenu.enabled" = false; | ||
138 | "dom.gamepad.enabled" = false; | ||
139 | "dom.maxHardwareConcurrency" = 2; | ||
140 | "dom.netinfo.enabled" = false; | ||
141 | "dom.network.enabled" = false; | ||
142 | "dom.telephony.enabled" = false; | ||
143 | "dom.vr.enabled" = false; | ||
144 | "dom.vibrator.enabled" = false; | ||
145 | |||
146 | # User-Agent already spoofed by 'resistFingerprinting' | ||
147 | # Apparently doesn't work | ||
148 | /* | ||
149 | "general.appversion.override" = "5.0 (Windows)"; | ||
150 | "general.platform.override" = "Win32"; | ||
151 | "general.oscpu.override" = "Windows NT 6.1"; | ||
152 | */ | ||
153 | |||
154 | "geo.enabled" = false; | ||
155 | "geo.wifi.uri" = "https://location.services.mozilla.com/v1/geolocate?key=%MOZILLA_API_KEY%"; | ||
156 | "geo.wifi.logging.enabled" = false; | ||
157 | |||
158 | "intl.accept_languages" = "en-US, en"; | ||
159 | "intl.locale.matchOS" = false; | ||
160 | |||
161 | "javascript.use_us_english_locale" = true; | ||
162 | |||
163 | # Don't leak private IP address with WebRTC | ||
164 | "media.peerconnection.ice.default_address_only" = true; | ||
165 | "media.peerconnection.ice.no_host" = true; | ||
166 | |||
167 | "media.webspeech.recognition.enable" = false; | ||
168 | |||
169 | "network.cookie.cookieBehavior" = 1; # Only cookies from the originating server are allowed. | ||
170 | "network.cookie.thirdparty.sessionOnly" = true; # If we decide to enable them temporarily | ||
171 | |||
172 | "network.dns.disablePrefetch" = true; | ||
173 | "network.dns.disablePrefetchFromHTTPS" = true; | ||
174 | |||
175 | "network.http.referer.XOriginPolicy" = 2; # Send a referrer only on same-origin | ||
176 | |||
177 | "network.http.speculative-parallel-limit" = 0; | ||
178 | |||
179 | "network.IDN_show_punycode" = true; | ||
180 | |||
181 | "network.manage-offline-status" = false; | ||
182 | |||
183 | "network.predictor.enabled" = false; | ||
184 | "network.prefetch-next" = false; | ||
185 | |||
186 | "privacy.donottrackheader.enabled" = true; | ||
187 | "privacy.resistFingerprinting" = true; | ||
188 | "privacy.resistFingerprinting.autoDeclineNoUserInputCanvasPrompts" = false; | ||
189 | "privacy.trackingprotection.enabled" = true; | ||
190 | "privacy.trackingprotection.pbmode.enabled" = true; | ||
191 | # Enable containers | ||
192 | "privacy.userContext.enabled" = true; | ||
193 | |||
194 | "security.fileuri.strict_origin_policy" = true; | ||
195 | "security.mixed_content.block_active_content" = true; | ||
196 | "security.mixed_content.block_display_content" = true; | ||
197 | |||
198 | "webgl.min_capability_mode" = true; | ||
199 | "webgl.disable-extensions" = true; | ||
200 | "webgl.disable-fail-if-major-performance-caveat" = true; | ||
201 | "webgl.enable-debug-renderer-info" = false; | ||
202 | |||
203 | # == Telemetry :( == | ||
204 | |||
205 | "app.normandy.enabled" = false; | ||
206 | "app.normandy.api_url" = ""; | ||
207 | "app.shield.optoutstudies.enabled" = true; | ||
208 | |||
209 | "datareporting.healthreport.uploadEnabled" = false; | ||
210 | "datareporting.healthreport.service.enabled" = false; | ||
211 | "datareporting.policy.dataSubmissionEnabled" = false; | ||
212 | |||
213 | "extensions.shield-recipe-client.enabled" = false; | ||
214 | "extensions.pocket.enabled" = false; | ||
215 | |||
216 | "loop.logDomains" = false; | ||
217 | |||
218 | "toolkit.telemetry.archive.enabled" = false; | ||
219 | "toolkit.telemetry.enabled" = false; | ||
220 | "toolkit.telemetry.unified" = false; | ||
221 | |||
222 | # == Other Firefox privacy weirdness == | ||
223 | |||
224 | # Crash reporting | ||
225 | "breakpad.reportURL" = ""; | ||
226 | |||
227 | "browser.casting.enabled" = false; | ||
228 | "browser.crashReports.unsubmittedCheck.enabled" = false; | ||
229 | "browser.discovery.enabled" = false; # Firefox add-on recommendations | ||
230 | "browser.formfill.enable" = false; | ||
231 | "browser.search.update" = false; | ||
232 | "browser.pagethumbnails.capturing_disabled" = true; | ||
233 | "browser.tabs.crashReporting.sendReport" = false; | ||
234 | "browser.uitour.enabled" = true; | ||
235 | "browser.urlbar.filter.javascript" = true; | ||
236 | "browser.urlbar.suggest.searches" = false; | ||
237 | "browser.urlbar.trimURLs" = false; | ||
238 | |||
239 | # Discovery of LAN/proximity IoT devices that expose a Web interface | ||
240 | "dom.flyweb.enabled" = false; | ||
241 | |||
242 | "experiments.supported" = false; | ||
243 | "experiments.enabled" = false; | ||
244 | "experiments.manifest.uri" = false; | ||
245 | |||
246 | "network.allow-experiments" = false; | ||
247 | "network.captive-portal-service.enabled" = false; | ||
248 | |||
249 | "plugin.state.flash" = 0; | ||
250 | "plugin.state.java" = 0; | ||
251 | |||
252 | "signon.rememberSignons" = false; | ||
253 | }; | ||
254 | |||
255 | # Hide tab bar | ||
256 | userChrome = '' | ||
257 | #main-window[tabsintitlebar="true"]:not([extradragspace="true"]) #TabsToolbar { | ||
258 | opacity: 0; | ||
259 | pointer-events: none; | ||
260 | } | ||
261 | |||
262 | #main-window:not([tabsintitlebar="true"]) #TabsToolbar { | ||
263 | visibility: collapse !important; | ||
264 | } | ||
265 | ''; | ||
266 | |||
267 | }; | ||
268 | }; | ||
269 | }; | ||
270 | } | ||