summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMinijackson <minijackson@riseup.net>2021-06-15 17:36:43 +0200
committerMinijackson <minijackson@riseup.net>2021-06-15 17:36:43 +0200
commit9eef958cd0df0c2d87910d70e1e8344dff988070 (patch)
treee104b24e79c2bb5203342b5a0fd9f24a1d6ce8b7
parent27d5fed11dca4b42b629921f1c14ca8bff16143b (diff)
downloadnixos-config-reborn-9eef958cd0df0c2d87910d70e1e8344dff988070.tar.gz
nixos-config-reborn-9eef958cd0df0c2d87910d70e1e8344dff988070.zip
firefox: init
-rw-r--r--common/default.nix1
-rw-r--r--flake.lock18
-rw-r--r--flake.nix3
-rw-r--r--usecases/desktop/graphical.nix1
-rw-r--r--usecases/desktop/graphical/firefox.nix270
5 files changed, 291 insertions, 2 deletions
diff --git a/common/default.nix b/common/default.nix
index 2d3b33c..c2caaaf 100644
--- a/common/default.nix
+++ b/common/default.nix
@@ -18,5 +18,6 @@ inputs:
18 (final: prev: { 18 (final: prev: {
19 unstable = inputs.nixpkgs-unstable.legacyPackages.${config.nixpkgs.system}; 19 unstable = inputs.nixpkgs-unstable.legacyPackages.${config.nixpkgs.system};
20 }) 20 })
21 inputs.nur.overlay
21 ]; 22 ];
22} 23}
diff --git a/flake.lock b/flake.lock
index 1f5c90d..b84717b 100644
--- a/flake.lock
+++ b/flake.lock
@@ -106,13 +106,29 @@
106 "type": "github" 106 "type": "github"
107 } 107 }
108 }, 108 },
109 "nur": {
110 "locked": {
111 "lastModified": 1623766295,
112 "narHash": "sha256-vhUc/wQPsNrGz6nTRX6JhW/HMICQxtb+tSazduOoF9o=",
113 "owner": "nix-community",
114 "repo": "NUR",
115 "rev": "14e2122b8b1a82c149b93a97fcbb7a68bdd052ba",
116 "type": "github"
117 },
118 "original": {
119 "owner": "nix-community",
120 "repo": "NUR",
121 "type": "github"
122 }
123 },
109 "root": { 124 "root": {
110 "inputs": { 125 "inputs": {
111 "flake-utils": "flake-utils", 126 "flake-utils": "flake-utils",
112 "home-manager": "home-manager", 127 "home-manager": "home-manager",
113 "neovim-master": "neovim-master", 128 "neovim-master": "neovim-master",
114 "nixpkgs": "nixpkgs", 129 "nixpkgs": "nixpkgs",
115 "nixpkgs-unstable": "nixpkgs-unstable" 130 "nixpkgs-unstable": "nixpkgs-unstable",
131 "nur": "nur"
116 } 132 }
117 } 133 }
118 }, 134 },
diff --git a/flake.nix b/flake.nix
index 704883d..f05befc 100644
--- a/flake.nix
+++ b/flake.nix
@@ -12,6 +12,7 @@
12 url = "github:neovim/neovim?dir=contrib"; 12 url = "github:neovim/neovim?dir=contrib";
13 inputs.nixpkgs.follows = "nixpkgs-unstable"; 13 inputs.nixpkgs.follows = "nixpkgs-unstable";
14 }; 14 };
15 inputs.nur.url = "github:nix-community/NUR";
15 16
16 outputs = inputs @ { self, nixpkgs, home-manager, ... }: { 17 outputs = inputs @ { self, nixpkgs, home-manager, ... }: {
17 18
@@ -135,7 +136,7 @@
135 (modulesPath + "/virtualisation/qemu-vm.nix") 136 (modulesPath + "/virtualisation/qemu-vm.nix")
136 ]; 137 ];
137 138
138 virtualisation.memorySize = 1024; 139 virtualisation.memorySize = 2048;
139 virtualisation.qemu.options = [ "-vga none -device virtio-gpu-pci" ]; 140 virtualisation.qemu.options = [ "-vga none -device virtio-gpu-pci" ];
140 }) 141 })
141 ]; 142 ];
diff --git a/usecases/desktop/graphical.nix b/usecases/desktop/graphical.nix
index 0483024..258f603 100644
--- a/usecases/desktop/graphical.nix
+++ b/usecases/desktop/graphical.nix
@@ -5,6 +5,7 @@ inputs:
5{ 5{
6 imports = [ 6 imports = [
7 (import ./graphical/alacritty.nix inputs) 7 (import ./graphical/alacritty.nix inputs)
8 (import ./graphical/firefox.nix inputs)
8 (import ./graphical/mpv.nix inputs) 9 (import ./graphical/mpv.nix inputs)
9 (import ./graphical/rofi.nix inputs) 10 (import ./graphical/rofi.nix inputs)
10 (import ./graphical/sway.nix inputs) 11 (import ./graphical/sway.nix inputs)
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 @@
1inputs:
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}