ctucx.git: nixfiles

ctucx' nixfiles

commit e25e49f41f68431daaf0f87b84dcc369d59331ae
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
configurations/linux/programs/firefox.nix
|
221
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++---------
M
flake.lock
|
18
++++++++++++++++++
M
flake.nix
|
3
+++
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";
   };
 
 }