commit e25e49f41f68431daaf0f87b84dcc369d59331ae
parent 97a1698b47118c85e8942b0600a6535e669e2837
Author: Katja (ctucx) <git@ctu.cx>
Date: Mon, 3 Mar 2025 00:55:54 +0100
parent 97a1698b47118c85e8942b0600a6535e669e2837
Author: Katja (ctucx) <git@ctu.cx>
Date: Mon, 3 Mar 2025 00:55:54 +0100
configurations/linux/programs/firefox: declerative configuration :3
3 files changed, 217 insertions(+), 25 deletions(-)
M
|
221
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++---------
diff --git a/configurations/linux/programs/firefox.nix b/configurations/linux/programs/firefox.nix @@ -1,7 +1,7 @@ -{ config, pkgs, lib, ... }: +{ inputs, config, pkgs, lib, ... }: let - cfg = config.ctucxConfig.programs.firefox; + cfg = config.ctucxConfig.programs.firefox; in { @@ -20,16 +20,206 @@ in { sessionVariables = { BROWSER = "firefox"; }; + + file."firefox-gnome-theme" = { + source = inputs.firefoxGnomeTheme; + target = ".mozilla/firefox/katja/chrome/firefox-gnome-theme"; + }; }; programs = { firefox = { enable = true; package = pkgs.firefox; - nativeMessagingHosts = with pkgs; [ - ff2mpv-rust - firefoxpwa - ]; + nativeMessagingHosts = [ pkgs.ff2mpv-rust ]; + + profiles.katja = { + id = 0; + isDefault = true; + + settings = { + # required for firefox-gnome-theme + "browser.toolbars.bookmarks.visibility" = "never"; + "browser.tabs.drawInTitlebar" = true; + "browser.theme.dark-private-windows" = false; + "browser.uidensity" = 0; + "svg.context-properties.content.enabled" = true; + "toolkit.legacyUserProfileCustomizations.stylesheets" = true; + }; + + userChrome = '' + @import "firefox-gnome-theme/userChrome.css"; + ''; + + userContent = '' + @import "firefox-gnome-theme/userContent.css"; + ''; + + search.force = true; # Required to prevent search engine symlink being overwritten. See https://github.com/nix-community/home-manager/issues/3698 + search.engines = { + "Noogle" = { + icon = "${pkgs.nixos-icons}/share/icons/hicolor/scalable/apps/nix-snowflake.svg"; + definedAliases = [ "@noogle" ]; + urls = [{ template = "https://noogle.dev/q?term={searchTerms}"; }]; + }; + + "NixOS Options" = { + icon = "${pkgs.nixos-icons}/share/icons/hicolor/scalable/apps/nix-snowflake.svg"; + definedAliases = [ "@nixos" ]; + urls = [{ template = "https://search.nixos.org/options?query={searchTerms}"; }]; + }; + + "Nix Packages" = { + icon = "${pkgs.nixos-icons}/share/icons/hicolor/scalable/apps/nix-snowflake.svg"; + definedAliases = [ "@nixpkgs" ]; + urls = [{ template = "https://search.nixos.org/packages?query={searchTerms}"; }]; + }; + }; + }; + + policies = { + # disable tracking bullshit + DisableTelemetry = true; + DisablePocket = true; + + # disable password manager + PasswordManagerEnabled = false; + OfferToSaveLogins = false; + PrimaryPassword = false; + AutofillCreditCardEnabled = false; + + # disable bookmark-toolbar + NoDefaultBookmarks = true; + DisplayBookmarksToolbar = "never"; + + Homepage.StartPage = "previous-session"; + Homepage.Locked = true; + + # disable DoH + DNSOverHTTPS.Enabled = false; + DNSOverHTTPS.Locked = true; + + # enable tracking protection + EnableTrackingProtection.Cryptomining = true; + EnableTrackingProtection.Fingerprinting = true; + EnableTrackingProtection.Value = true; + EnableTrackingProtection.Locked = true; + + UserMessaging.ExtensionRecommendations = false; + UserMessaging.FeatureRecommendations = false; + UserMessaging.UrlbarInterventions = false; + UserMessaging.SkipOnboarding = true; + UserMessaging.MoreFromMozilla = false; + UserMessaging.FirefoxLabs = false; + UserMessaging.Locked = true; + + Handlers.schemes.dbnav = { + action = "useHelperApp"; + ask = true; + handlers = [{ + name = "VDV PKPass DB Navigator Hook"; + path = pkgs.writeShellScript "db-hook" '' + #!/usr/bin/env bash + + if [[ "$1" == "dbnav:"* ]]; then + url=$(echo -n $1 | base64) + xdg-open "https://vdv-pkpass.magicalcodewit.ch/account/db_login/callback?url=$url" + else + xdg-open "$1" + fi + ''; + }]; + }; + + Preferences = { + "browser.uiCustomization.state".Status = "default"; + "browser.uiCustomization.state".Value = builtins.toJSON { + currentVersion = 21; + newElementCount = 7; + seen = []; + dirtyAreaCache = []; + placements = { + widget-overflow-fixed-list = []; + toolbar-menubar = [ "menubar-items" ]; + vertical-tabs = []; + PersonalToolbar = []; + unified-extensions-area = []; + nav-bar = [ + "back-button" + "forward-button" + "vertical-spacer" + "stop-reload-button" + "urlbar-container" + "downloads-button" + "_446900e4-71c2-419f-a6a7-df9c091e268b_-browser-action" + "ublock0_raymondhill_net-browser-action" + "unified-extensions-button" + ]; + TabsToolbar = [ "tabbrowser-tabs" "new-tab-button" ]; + }; + }; + } // ({ + # disable some password-manager/autofill features + "signon.generation.enabled" = false; + "signon.autofillForms" = false; + "signon.firefoxRelay.feature" = "disabled"; + "signon.management.page.breach-alerts.enabled" = false; + + # ask websites to not share or sell data + "privacy.globalprivacycontrol.enabled" = true; + + # disable warning on `abou:config` + "browser.aboutConfig.showWarning" = false; + + # disable telemetry stuff + "browser.ping-centre.telemetry" = false; + "browser.topsites.contile.enabled" = false; + "browser.crashReports.unsubmittedCheck.autoSubmit2" = false; + + # disable trending search suggestions + "browser.urlbar.suggest.trending" = false; + + # disable 'fancy' newtab page bullshit with tons of tracking and ads + "browser.startup.homepage" = "chrome://browser/content/blanktab.html"; + "browser.newtabpage.enabled" = false; + "browser.newtabpage.activity-stream.telemetry" = false; + "browser.newtabpage.activity-stream.showSearch" = false; + "browser.newtabpage.activity-stream.showSponsored" = false; + "browser.newtabpage.activity-stream.showSponsoredTopSites" = false; + "browser.newtabpage.activity-stream.feeds.telemetry" = false; + "browser.newtabpage.activity-stream.feeds.topsites" = false; + "browser.newtabpage.activity-stream.feeds.snippets" = false; + "browser.newtabpage.activity-stream.feeds.system.topsites" = false; + "browser.newtabpage.activity-stream.feeds.section.highlights" = false; + "browser.newtabpage.activity-stream.section.highlights.includePocket" = false; + "browser.newtabpage.activity-stream.section.highlights.includeBookmarks" = false; + "browser.newtabpage.activity-stream.section.highlights.includeDownloads" = false; + "browser.newtabpage.activity-stream.section.highlights.includeVisited" = false; + } |> lib.mapAttrs (name: value: { + Status = "locked"; + Value = value; + })); + + ExtensionSettings = ([ + [ "navbar" "{446900e4-71c2-419f-a6a7-df9c091e268b}" ] # Bitwarden Password Manager + [ "navbar" "uBlock0@raymondhill.net" ] # uBlock Origin + [ "menupanel" "@ublacklist" ] # uBlacklist + [ "menupanel" "@contain-facebook" ] # Facebook Container + [ "menupanel" "@contain-google" ] # Google Container + [ "menupanel" "containerise@kinte.sh" ] # Containerise + [ "menupanel" "{12cf650b-1822-40aa-bff0-996df6948878}" ] # cookies.txt + [ "menupanel" "@testpilot-containers" ] # Firefox Multi-Account Containers + [ "menupanel" "{252ee273-8c8d-4609-b54d-62ae345be0a1}" ] # IndicateTLS + [ "menupanel" "ipvfoo@pmarks.net" ] # IPvFoo + [ "menupanel" "{e9090647-32ff-48e4-9c3c-1361e8fd270e}" ] # Modern for Wikipedia + [ "menupanel" "sponsorBlocker@ajay.app" ] # SponsorBlock for YouTube - Skip Sponsorships + [ "menupanel" "de-DE@dictionaries.addons.mozilla.org" ] # German Dictionary + ] |> lib.map (config: { name = (lib.elemAt config 1); value = { + installation_mode = "normal_installed"; + default_area = (lib.elemAt config 0); + install_url = "https://addons.mozilla.org/firefox/downloads/latest/${lib.elemAt config 1}/latest.xpi"; + }; }) |> lib.listToAttrs); + }; }; }; @@ -41,25 +231,6 @@ in { enable = true; mime.enable = true; - desktopEntries.dbnav-handler = { - startupNotify = false; - noDisplay = true; - type = "Application"; - name = "VDV PKPass DB Navigator Hook"; - mimeType = [ "x-scheme-handler/dbnav" ]; - settings.NoDisplay = "true"; - exec = "/bin/sh -c \"${pkgs.writeShellScript "db-hook" '' - #!/usr/bin/env bash - - if [[ "$1" == "dbnav:"* ]]; then - url=$(echo -n $1 | base64) - xdg-open "https://vdv-pkpass.magicalcodewit.ch/account/db_login/callback?url=$url" - else - xdg-open "$1" - fi - ''} %u\""; - }; - #force hm to override existing mimeapps.list file configFile."mimeapps.list".force = true;
diff --git a/flake.lock b/flake.lock @@ -196,6 +196,23 @@ "url": "https://git.ctu.cx/dns.nix" } }, + "firefoxGnomeTheme": { + "flake": false, + "locked": { + "lastModified": 1739124267, + "narHash": "sha256-OtF9hFsFXLpCpz5Oy+I7yAE6GgenpFEzUXTc9AtoZQk=", + "owner": "rafaelmardojai", + "repo": "firefox-gnome-theme", + "rev": "ec79241ac2779fed566c105e2cd0c9776f11df05", + "type": "github" + }, + "original": { + "owner": "rafaelmardojai", + "ref": "v135", + "repo": "firefox-gnome-theme", + "type": "github" + } + }, "flake-compat": { "flake": false, "locked": { @@ -767,6 +784,7 @@ "ctucxThings": "ctucxThings", "ctucxWebsite": "ctucxWebsite", "dnsNix": "dnsNix", + "firefoxGnomeTheme": "firefoxGnomeTheme", "flakeUtils": "flakeUtils", "flauschehornSexy": "flauschehornSexy", "gpxMap": "gpxMap",
diff --git a/flake.nix b/flake.nix @@ -160,6 +160,9 @@ travelynx2fedi.url = "git+https://git.ctu.cx/travelynx2fedi"; travelynx2fedi.inputs.nixpkgs.follows = "nixpkgs"; travelynx2fedi.inputs.flake-utils.follows = "flakeUtils"; + + firefoxGnomeTheme.flake = false; + firefoxGnomeTheme.url = "github:rafaelmardojai/firefox-gnome-theme/v135"; }; }