From ae7d017d2b6cf08605106ce363b2bb3bb403a0b6 Mon Sep 17 00:00:00 2001 From: kenji Date: Mon, 5 Jan 2026 14:31:20 -0600 Subject: [PATCH] feat(firefox): generalize youtube profile into modular web-app profile - Renamed profiles/youtube.nix to profiles/web-app.nix. - Refactored to accept id, name, and url as arguments. - Added settings to force homepage on startup and new tabs. - Disabled session restore and undo-close-tab for web-app profiles. --- apps/firefox/default.nix | 7 +- apps/firefox/profiles/web-app.nix | 129 ++++++++++++++++++++++++++++++ apps/firefox/profiles/youtube.nix | 71 +++++++--------- 3 files changed, 162 insertions(+), 45 deletions(-) create mode 100644 apps/firefox/profiles/web-app.nix diff --git a/apps/firefox/default.nix b/apps/firefox/default.nix index 7ceac5c..b52e8ae 100644 --- a/apps/firefox/default.nix +++ b/apps/firefox/default.nix @@ -49,7 +49,12 @@ ]; profiles = { - youtube = import ./profiles/youtube.nix {inherit pkgs myConfig;}; + youtube = import ./profiles/web-app.nix { + inherit pkgs myConfig; + id = 1; + name = "YouTube"; + url = "https://youtube.com"; + }; hakase = { search.force = true; isDefault = true; diff --git a/apps/firefox/profiles/web-app.nix b/apps/firefox/profiles/web-app.nix new file mode 100644 index 0000000..8ddd7d9 --- /dev/null +++ b/apps/firefox/profiles/web-app.nix @@ -0,0 +1,129 @@ +{ + pkgs, + myConfig, + id, + name, + url, + ... +}: { + inherit id name; + search.force = true; + search.default = "ddg"; + extensions.force = true; + extensions.packages = with pkgs.nur.repos.rycee.firefox-addons; [ + ublock-origin + bitwarden + tridactyl + ]; + + settings = { + # --- Privacy & Hardening --- + "browser.contentblocking.category" = "strict"; + "privacy.trackingprotection.enabled" = true; + "privacy.resistFingerprinting" = true; # Note: Spoofs timezone and caps FPS to 60 + "geo.enabled" = false; + "media.peerconnection.enabled" = false; # Prevents WebRTC IP leaks + "network.dns.disablePrefetch" = true; + "network.prefetch-next" = false; + + # --- NixOS / Hyprland Integration --- + "widget.use-xdg-desktop-portal.file-picker" = 1; # Use native file picker + + # --- UI & Behavior --- + "browser.compactmode.show" = true; + "browser.tabs.closeWindowWithLastTab" = false; + "extensions.pocket.enabled" = false; + "extensions.screenshots.disabled" = true; + "browser.topsites.contile.enabled" = false; + "browser.formfill.enable" = false; + "browser.search.suggest.enabled" = false; + "browser.search.suggest.enabled.private" = false; + "browser.urlbar.suggest.searches" = false; + "browser.urlbar.showSearchSuggestionsFirst" = false; + "browser.newtabpage.activity-stream.feeds.section.topstories" = false; + "browser.newtabpage.activity-stream.feeds.snippets" = 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; + "browser.newtabpage.activity-stream.showSponsored" = false; + "browser.newtabpage.activity-stream.system.showSponsored" = false; + "browser.newtabpage.activity-stream.showSponsoredTopSites" = false; + "toolkit.legacyUserProfileCustomizations.stylesheets" = true; + "extensions.autoDisableScopes" = 0; # Enable extensions by default + + # --- Homepage & Navigation --- + "browser.startup.page" = 1; # Always open the homepage + "browser.startup.homepage" = url; + "browser.newtab.url" = url; # Try to set newtab to homepage + "browser.sessionstore.resume_from_crash" = false; # Always start fresh + "browser.sessionstore.max_tabs_undo" = 0; # Disable undo close tab + + # --- Tridactyl (attempt to override) --- + # We can't easily set per-profile tridactylrc, but we can try to minimize its newtab impact + }; + + userChrome = '' + "network.trr.mode" = 2; # Use DoH with system fallback + "network.trr.uri" = "https://dns.quad9.net/dns-query"; + }; + + userChrome = '' + /* --- Floating Autohide Toolbox (Tabs Only) --- */ + + /* Take toolbox out of the document flow so web content is 100% height */ + #navigator-toolbox { + position: fixed !important; + top: 0; + left: 0; + width: 100%; + z-index: 9999 !important; + background-color: var(--toolbar-bgcolor, #1c1b22) !important; + + /* Start hidden */ + transform: translateY(-100%) !important; + opacity: 0 !important; + transition: transform 0.2s ease, opacity 0.2s ease !important; + } + + /* Trigger zone */ + #navigator-toolbox::after { + content: ""; + position: absolute; + top: 100%; + left: 0; + width: 100%; + height: 10px; + z-index: 10000 !important; + } + + /* Reveal when hovering */ + #navigator-toolbox:hover { + transform: translateY(0) !important; + opacity: 1 !important; + } + + /* --- Hide specific bars --- */ + + /* Hide Navigation Bar (Address Bar) COMPLETELY */ + #nav-bar { + visibility: collapse !important; + height: 0px !important; + min-height: 0px !important; + padding: 0 !important; + margin: 0 !important; + } + + /* Hide Bookmarks Toolbar */ + #PersonalToolbar { visibility: collapse !important; } + + /* Hide Titlebar */ + #titlebar { appearance: none !important; } + + /* Ensure TabsToolbar looks okay on its own */ + #TabsToolbar { + border: none !important; + background: transparent !important; + } + ''; +} \ No newline at end of file diff --git a/apps/firefox/profiles/youtube.nix b/apps/firefox/profiles/youtube.nix index 50421c4..cdff023 100644 --- a/apps/firefox/profiles/youtube.nix +++ b/apps/firefox/profiles/youtube.nix @@ -60,61 +60,44 @@ }; userChrome = '' - /* --- Floating Autohide Toolbox (Tabs Only) --- */ - - /* Take toolbox out of the document flow so web content is 100% height */ - #navigator-toolbox { - position: fixed !important; - top: 0; - left: 0; - width: 100%; - z-index: 9999 !important; - background-color: var(--toolbar-bgcolor, #1c1b22) !important; - - /* Start hidden */ - transform: translateY(-100%) !important; + /* Hide the Navigation Bar by default */ + #nav-bar { + height: 0px !important; + min-height: 0px !important; + overflow: hidden !important; opacity: 0 !important; - transition: transform 0.2s ease, opacity 0.2s ease !important; + transition: height 0.3s ease, opacity 0.3s ease !important; + z-index: 100 !important; } - /* Trigger zone */ - #navigator-toolbox::after { - content: ""; - position: absolute; - top: 100%; - left: 0; - width: 100%; - height: 10px; - z-index: 10000 !important; - } - - /* Reveal when hovering */ - #navigator-toolbox:hover { - transform: translateY(0) !important; + /* Show the Navigation Bar on hover over the navigator toolbox */ + #navigator-toolbox:hover #nav-bar, + #nav-bar:focus-within { + height: 40px !important; /* Adjust based on your density settings */ + min-height: 40px !important; opacity: 1 !important; } - /* --- Hide specific bars --- */ - - /* Hide Navigation Bar (Address Bar) COMPLETELY */ - #nav-bar { - visibility: collapse !important; + /* Auto-hide Tabs Toolbar */ + #TabsToolbar { height: 0px !important; min-height: 0px !important; - padding: 0 !important; - margin: 0 !important; + overflow: hidden !important; + opacity: 0 !important; + transition: height 0.3s ease, opacity 0.3s ease !important; + z-index: 100 !important; + } + + /* Show Tabs Toolbar on hover over the navigator toolbox */ + #navigator-toolbox:hover #TabsToolbar { + height: 30px !important; /* Adjust based on your tab height preference */ + min-height: 30px !important; + opacity: 1 !important; } /* Hide Bookmarks Toolbar */ - #PersonalToolbar { visibility: collapse !important; } - - /* Hide Titlebar */ - #titlebar { appearance: none !important; } - - /* Ensure TabsToolbar looks okay on its own */ - #TabsToolbar { - border: none !important; - background: transparent !important; + #PersonalToolbar { + visibility: collapse !important; } ''; }