From ea6a1f199a2b5c7cc959a54fd31a793f44ec7b60 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Thomas=20Av=C3=A9?= Date: Sun, 2 Jun 2024 22:43:44 +0200 Subject: [PATCH] Sun Jun 2 10:43:44 PM CEST 2024 --- flake.lock | 39 ------------ flake.nix | 5 -- home/Kell.nix | 2 +- home/firefox/default.nix | 110 +++++++++++++++++++++++----------- home/firefox/files/signed.xpi | Bin 0 -> 7731 bytes 5 files changed, 75 insertions(+), 81 deletions(-) create mode 100644 home/firefox/files/signed.xpi diff --git a/flake.lock b/flake.lock index 3a2e0a8..7165d9c 100644 --- a/flake.lock +++ b/flake.lock @@ -1,28 +1,5 @@ { "nodes": { - "firefox-addons": { - "inputs": { - "flake-utils": "flake-utils", - "nixpkgs": [ - "nixpkgs" - ] - }, - "locked": { - "dir": "pkgs/firefox-addons", - "lastModified": 1717357284, - "narHash": "sha256-PZX/5oCPnBbACrmlswUNTNKM3Il8N3G0vH1eqWjDdB8=", - "owner": "rycee", - "repo": "nur-expressions", - "rev": "35d015a460c52df64c01f5c98e05ed0190274eb5", - "type": "gitlab" - }, - "original": { - "dir": "pkgs/firefox-addons", - "owner": "rycee", - "repo": "nur-expressions", - "type": "gitlab" - } - }, "flake-compat": { "flake": false, "locked": { @@ -39,21 +16,6 @@ "type": "github" } }, - "flake-utils": { - "locked": { - "lastModified": 1629284811, - "narHash": "sha256-JHgasjPR0/J1J3DRm4KxM4zTyAj4IOJY8vIl75v/kPI=", - "owner": "numtide", - "repo": "flake-utils", - "rev": "c5d161cc0af116a2e17f54316f0bf43f0819785c", - "type": "github" - }, - "original": { - "owner": "numtide", - "repo": "flake-utils", - "type": "github" - } - }, "home-manager": { "inputs": { "nixpkgs": [ @@ -270,7 +232,6 @@ }, "root": { "inputs": { - "firefox-addons": "firefox-addons", "home-manager": "home-manager", "hyprland": "hyprland", "nixpkgs": "nixpkgs_2", diff --git a/flake.nix b/flake.nix index 499392d..c028914 100644 --- a/flake.nix +++ b/flake.nix @@ -19,17 +19,12 @@ url = "github:Duckonaut/split-monitor-workspaces"; inputs.hyprland.follows = "hyprland"; }; - firefox-addons = { - url = "gitlab:rycee/nur-expressions?dir=pkgs/firefox-addons"; - inputs.nixpkgs.follows = "nixpkgs"; - }; }; outputs = { self , nixpkgs , home-manager - , split-monitor-workspaces , ... }@inputs: let diff --git a/home/Kell.nix b/home/Kell.nix index d3d461d..00b2a22 100644 --- a/home/Kell.nix +++ b/home/Kell.nix @@ -5,9 +5,9 @@ (import ./common.nix { inherit inputs config pkgs; }) (import ./hyprland { inherit inputs pkgs; }) (import ./waybar { inherit inputs pkgs; }) + (import ./firefox { inherit inputs pkgs; }) ./rofi ./alacritty - ./firefox ]; services.hyprpaper = { diff --git a/home/firefox/default.nix b/home/firefox/default.nix index aea231d..1e0b10b 100644 --- a/home/firefox/default.nix +++ b/home/firefox/default.nix @@ -1,40 +1,78 @@ -{pkgs, ...}: { - programs.firefox = { - enable = true; - profiles.user = { - bookmarks = {}; - extensions = with pkgs.inputs.firefox-addons; [ - ublock-origin - ]; - bookmarks = {}; - settings = { - # "browser.disableResetPrompt" = true; - # "browser.download.panel.shown" = true; - # "browser.download.useDownloadDir" = false; - # "browser.newtabpage.activity-stream.showSponsoredTopSites" = false; - # "browser.shell.checkDefaultBrowser" = false; - # "browser.shell.defaultBrowserCheckCount" = 1; - # "browser.startup.homepage" = "https://start.duckduckgo.com"; - # "browser.uiCustomization.state" = ''{"placements":{"widget-overflow-fixed-list":[],"nav-bar":["back-button","forward-button","stop-reload-button","home-button","urlbar-container","downloads-button","library-button","ublock0_raymondhill_net-browser-action","_testpilot-containers-browser-action"],"toolbar-menubar":["menubar-items"],"TabsToolbar":["tabbrowser-tabs","new-tab-button","alltabs-button"],"PersonalToolbar":["import-button","personal-bookmarks"]},"seen":["save-to-pocket-button","developer-button","ublock0_raymondhill_net-browser-action","_testpilot-containers-browser-action"],"dirtyAreaCache":["nav-bar","PersonalToolbar","toolbar-menubar","TabsToolbar","widget-overflow-fixed-list"],"currentVersion":18,"newElementCount":4}''; - # "dom.security.https_only_mode" = true; - # "identity.fxaccounts.enabled" = false; - # "privacy.trackingprotection.enabled" = true; - # "signon.rememberSignons" = false; - }; - }; - }; +{inputs, pkgs, ...}: +let +lock-false = { + Value = false; + Status = "locked"; +}; +lock-true = { + Value = true; + Status = "locked"; +}; +in +{ + programs.firefox = { + enable = true; + policies = { + DisableTelemetry = true; + DisableFirefoxStudies = true; + DisablePocket = true; + DisplayBookmarksToolbar = "never"; # alternatives: "always" or "newtab" + EnableTrackingProtection = { + Value = true; + Locked = true; + Cryptomining = true; + Fingerprinting = true; + }; + ExtensionSettings = { + "uBlock0@raymondhill.net" = { + install_url = "https://addons.mozilla.org/firefox/downloads/latest/ublock-origin/latest.xpi"; + installation_mode = "force_installed"; + }; + "jid1-MnnxcxisBPnSXQ@jetpack" = { + install_url = "https://addons.mozilla.org/firefox/downloads/latest/privacy-badger17/latest.xpi"; + installation_mode = "force_installed"; + }; + "theme@thomasave.be" = { + install_url = "${./files/signed.xpi}"; + installation_mode = "force_installed"; + }; + }; - home = { - persistence = { - # Not persisting is safer - # "/persist/home/misterio".directories = [ ".mozilla/firefox" ]; + }; + profiles = { + default = { + id = 0; + name = "default"; + isDefault = true; + search = { + force = true; + default = "DuckDuckGo"; + order = [ "DuckDuckGo" "Google" ]; + }; + settings = { + "browser.disableResetPrompt" = true; + "browser.download.panel.shown" = true; +# "browser.download.useDownloadDir" = false; + "browser.shell.checkDefaultBrowser" = false; + "browser.shell.defaultBrowserCheckCount" = 1; + "browser.startup.homepage" = "https://start.duckduckgo.com"; + "browser.compactmode.show" = true; + "extensions.pocket.enabled" = lock-false; + "browser.newtabpage.activity-stream.showSponsored" = lock-false; + "browser.newtabpage.activity-stream.system.showSponsored" = lock-false; + "browser.newtabpage.activity-stream.showSponsoredTopSites" = lock-false; + "browser.contentblocking.category" = { Value = "strict"; Status = "locked"; }; + "browser.uiCustomization.state" = ''{"placements":{"widget-overflow-fixed-list":["fxa-toolbar-menu-button","developer-button"],"unified-extensions-area":["sponsorblocker_ajay_app-browser-action","_testpilot-containers-browser-action","_531906d3-e22f-4a6c-a102-8057b88a1a63_-browser-action","beyond20_kakaroto_homelinux_net-browser-action","_d7742d87-e61d-4b78-b8a1-b469842139fa_-browser-action","_contain-facebook-browser-action","jid1-kkzogwgsw3ao4q_jetpack-browser-action","jid1-mnnxcxisbpnsxq_jetpack-browser-action","_74145f27-f039-47ce-a470-a662b129930a_-browser-action","chrome-gnome-shell_gnome_org-browser-action","_ea4204c0-3209-4116-afd2-2a208e21a779_-browser-action","_f209234a-76f0-4735-9920-eb62507a54cd_-browser-action","_762f9885-5a13-4abd-9c77-433dcd38b8fd_-browser-action","display-anchors_robwu_nl-browser-action","firefoxcolor_mozilla_com-browser-action","search_kagi_com-browser-action","_7a7a4a92-a2a0-41d1-9fd7-1e92480d612d_-browser-action"],"nav-bar":["back-button","forward-button","stop-reload-button","urlbar-container","downloads-button","_446900e4-71c2-419f-a6a7-df9c091e268b_-browser-action","_12cf650b-1822-40aa-bff0-996df6948878_-browser-action","_3e4d2037-d300-4e95-859d-3cba866f46d3_-browser-action","save-as-pdf-ff_pdfcrowd_com-browser-action","user-agent-switcher_ninetailed_ninja-browser-action","_d66c8515-1e0d-408f-82ee-2682f2362726_-browser-action","ublock0_raymondhill_net-browser-action","reset-pbm-toolbar-button","adguardadblocker_adguard_com-browser-action","unified-extensions-button"],"toolbar-menubar":["menubar-items"],"TabsToolbar":["tabbrowser-tabs","new-tab-button","alltabs-button"],"PersonalToolbar":["import-button","personal-bookmarks"]},"seen":["save-to-pocket-button","developer-button","profiler-button","chrome-gnome-shell_gnome_org-browser-action","_446900e4-71c2-419f-a6a7-df9c091e268b_-browser-action","_74145f27-f039-47ce-a470-a662b129930a_-browser-action","_contain-facebook-browser-action","_testpilot-containers-browser-action","jid1-kkzogwgsw3ao4q_jetpack-browser-action","jid1-mnnxcxisbpnsxq_jetpack-browser-action","ublock0_raymondhill_net-browser-action","_531906d3-e22f-4a6c-a102-8057b88a1a63_-browser-action","beyond20_kakaroto_homelinux_net-browser-action","_12cf650b-1822-40aa-bff0-996df6948878_-browser-action","_3e4d2037-d300-4e95-859d-3cba866f46d3_-browser-action","save-as-pdf-ff_pdfcrowd_com-browser-action","_d7742d87-e61d-4b78-b8a1-b469842139fa_-browser-action","user-agent-switcher_ninetailed_ninja-browser-action","_d66c8515-1e0d-408f-82ee-2682f2362726_-browser-action","_ea4204c0-3209-4116-afd2-2a208e21a779_-browser-action","adguardadblocker_adguard_com-browser-action","_f209234a-76f0-4735-9920-eb62507a54cd_-browser-action","_762f9885-5a13-4abd-9c77-433dcd38b8fd_-browser-action","sponsorblocker_ajay_app-browser-action","display-anchors_robwu_nl-browser-action","firefoxcolor_mozilla_com-browser-action","search_kagi_com-browser-action","_7a7a4a92-a2a0-41d1-9fd7-1e92480d612d_-browser-action"],"dirtyAreaCache":["nav-bar","PersonalToolbar","toolbar-menubar","TabsToolbar","widget-overflow-fixed-list","unified-extensions-area"],"currentVersion":20,"newElementCount":11}''; + "privacy.trackingprotection.enabled" = true; + }; + }; + }; }; - }; - xdg.mimeApps.defaultApplications = { - "text/html" = ["firefox.desktop"]; - "text/xml" = ["firefox.desktop"]; - "x-scheme-handler/http" = ["firefox.desktop"]; - "x-scheme-handler/https" = ["firefox.desktop"]; - }; + xdg.mimeApps.defaultApplications = { + "text/html" = ["firefox.desktop"]; + "text/xml" = ["firefox.desktop"]; + "x-scheme-handler/http" = ["firefox.desktop"]; + "x-scheme-handler/https" = ["firefox.desktop"]; + }; } diff --git a/home/firefox/files/signed.xpi b/home/firefox/files/signed.xpi new file mode 100644 index 0000000000000000000000000000000000000000..474c5e9926eb51b4f15580ed92420b625300c8e3 GIT binary patch literal 7731 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