Basic rice set up. Still need to add a way to reiably update the package lists and i need a launcher.

This commit is contained in:
Jurn Wubben 2025-10-28 17:49:16 +01:00
commit 3e89f350a6
107 changed files with 7553 additions and 0 deletions

View file

@ -0,0 +1,24 @@
This is free and unencumbered software released into the public domain.
Anyone is free to copy, modify, publish, use, compile, sell, or
distribute this software, either in source code form or as a compiled
binary, for any purpose, commercial or non-commercial, and by any
means.
In jurisdictions that recognize copyright laws, the author or authors
of this software dedicate any and all copyright interest in the
software to the public domain. We make this dedication for the benefit
of the public at large and to the detriment of our heirs and
successors. We intend this dedication to be an overt act of
relinquishment in perpetuity of all present and future rights to this
software under copyright law.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR
OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
OTHER DEALINGS IN THE SOFTWARE.
For more information, please refer to <http://unlicense.org>

View file

@ -0,0 +1,354 @@
<img src="icon.svg" alt="Firefox GNOME theme" width="128" align="left"/>
# Firefox GNOME theme
[![GitHub](https://img.shields.io/github/license/rafaelmardojai/firefox-gnome-theme.svg)](https://github.com/rafaelmardojai/firefox-gnome-theme/blob/master/LICENSE)
[![Donate](https://img.shields.io/badge/PayPal-Donate-gray.svg?style=flat&logo=paypal&colorA=0071bb&logoColor=fff)](https://paypal.me/RafaelMardojaiCM)
[![Liberapay](https://img.shields.io/liberapay/receives/rafaelmardojai.svg?logo=liberapay)](https://liberapay.com/rafaelmardojai/donate)
<br>
**A GNOME theme for Firefox**
This theme follows latest GNOME Adwaita style.
> [!WARNING]
> ### Disclaimer:
> Be aware that this theme might do things that are not supported by upstream Firefox. If you face an issue while using this theme, report it here first or test if it is reproducible in vanilla Firefox.
>
> If you are a software distribution maintainer, please do not ship these changes by default to your users unless you make it extremely clear that they are using a modified version of the Firefox UI.
![Screenshot of the theme](screenshot.png)
## Description
This is a bunch of CSS code to make Firefox look closer to GNOME's native apps.
### Getting in Touch
Matrix room: [#firefox-gnome-theme:matrix.org](https://matrix.to/#/#firefox-gnome-theme:matrix.org)
### Firefox versions support
The `master` branch of this repo supports the current Firefox stable release `143`.
Theme versions compatible with older Firefox releases are preserved as git tags.
We also have the `beta` and `nightly` branches for fixes only applicable to the current Firefox beta and nightly versions.
# Installation
The most friendly way to get this theme is using the **Add Water** app.
<a href='https://flathub.org/apps/dev.qwery.AddWater'>
<img width='240' alt='Get it on Flathub' src='https://flathub.org/api/badge?locale=en'/>
</a>
## One command install with curl
To install this theme, you can run this command, which uses *curl* to download a script that will also download the latest released version of the theme (not the master version) and run the **auto-install** script for you.
> [!WARNING]
> Always be careful when running scripts from the Internet.
```sh
curl -s -o- https://raw.githubusercontent.com/rafaelmardojai/firefox-gnome-theme/master/scripts/install-by-curl.sh | bash
```
## Installation scripts
If you want to use other version of the theme than the stable one you can manually download the theme and run its install scripts.
First you need to grab a fresh copy of the theme repository by cloning it with git.
1. Clone this repo and enter folder:
```sh
git clone https://github.com/rafaelmardojai/firefox-gnome-theme.git
cd firefox-gnome-theme
```
2. Checkout a git branch or tag if needed, otherwise use `master` and ignore this step.
```sh
git checkout beta # Set beta branch
git checkout v78.1 # Set v78.1 tag
```
This theme provides two installation scripts in addition to the curled one.
### Auto install script
This script will look for Firefox profiles from various known locations (`~/.mozilla/firefox/`, Flatpak, Snap, etc) and install the theme in each one.
You can execute it by running:
```sh
./scripts/auto-install.sh
```
### Manual install script
This script will only install the theme into the profiles found in the default Firefox folder `~/.mozilla/firefox/`. The script accepts various flags to change its behavior.
Here are some examples of how to use it:
```sh
./scripts/install.sh # Standard
./scripts/install.sh -p pc8577yz.default-release # Only install in a profile named pc8577yz.default-release
./scripts/install.sh -f ~/.var/app/org.mozilla.firefox/.mozilla/firefox # Flatpak
./scripts/install.sh -f ~/snap/firefox/common/.mozilla/firefox #Snap
```
#### Script options
- `-f <firefox_folder_path>` *optional*
- Set custom Firefox folder path, for example `~/.mozilla/icecat/`.
- Default: `~/.mozilla/firefox/`
- `-p <profile_name>` *optional*
- Set custom profile name, for example `e0j6yb0p.default-nightly`.
- Default: All the profiles found in the firefox folder
### Advanced notes
<details>
<summary>Expand</summary>
If you want to checkout the theme version tag matching you Firefox version you can run:
```sh
git checkout v$(firefox --version | cut -d ' ' -f 3 | cut -d '.' -f 1) # Using Firefox version
```
</details>
## Package managers
### Arch Linux
1. Install the [AUR package](https://aur.archlinux.org/packages/firefox-gnome-theme) `firefox-gnome-theme`
2. Follow the instructions at `cat /usr/share/doc/firefox-gnome-theme/INSTALL.md`
## Manual installation
<details>
<summary>Expand</summary>
1. Go to `about:support` in Firefox.
2. Application Basics > Profile Directory > Open Directory.
3. Open directory in a terminal.
4. Create a `chrome` directory if it doesn't exist:
```sh
mkdir -p chrome
cd chrome
```
5. Clone this repo to a subdirectory:
```sh
git clone https://github.com/rafaelmardojai/firefox-gnome-theme.git
```
6. Create single-line user CSS files if non-existent or empty (at least one line is needed for `sed`):
```sh
[[ -s userChrome.css ]] || echo >> userChrome.css
[[ -s userContent.css ]] || echo >> userContent.css
```
7. Import this theme at the beginning of the CSS files (all `@import`s must come before any existing `@namespace` declarations):
```sh
sed -i '1s/^/@import "firefox-gnome-theme\/userChrome.css";\n/' userChrome.css
sed -i '1s/^/@import "firefox-gnome-theme\/userContent.css";\n/' userContent.css
```
8. Symlink preferences file:
```sh
cd .. # Go back to the profile directory
ln -fs chrome/firefox-gnome-theme/configuration/user.js user.js
```
9. Restart Firefox.
10. Open Firefox customization panel and move the new tab button to headerbar.
11. Be happy with your new gnomish Firefox.
</details>
## Required Firefox preferences
We provide a **user.js** configuration file in `configuration/user.js` that enables some preferences required by this theme to work.
You should already have this file installed if you followed one of the installation methods, but in any case be sure this preferences are enabled under `about:config`:
- `toolkit.legacyUserProfileCustomizations.stylesheets`
This preference is required to load the custom CSS in Firefox, otherwise the theme wouldn't work.
- `svg.context-properties.content.enabled`
This preference is required to recolor the icons, otherwise you will get black icons everywhere.
> For other non essential preferences checkout `configuration/user.js`.
## Updating
You can follow the installation script steps again to update the theme.
## Uninstalling
1. Go to your profile folder. (Go to `about:support` in Firefox > Application Basics > Profile Directory > Open Directory)
2. Remove `chrome` folder.
3. Remove the unwanted preferences from your `user.js` inside your profile folder. The install script append the needed prefs in that file, you can check what preferences does it append by checking `configuration/user.js` in this repo.
## Enabling optional features
Optional features can be enabled by creating new `boolean` preferences in `about:config`.
1. Go to the `about:config` page
2. Type the key of the feature you want to enable
3. Set it as a `boolean` and click on the add button
4. Restart Firefox
### Features
- **Hide single tab** `gnomeTheme.hideSingleTab`
Hide the tab bar when only one tab is open.
> **Note:** You should move the new tab button out of the tabbar or it will be hidden when there is only one tab. You can rearrange the toolbars doing a right-click on any toolbar and selecting "Customize Toolbar…".
- **Normal width tabs** `gnomeTheme.normalWidthTabs`
Use normal width tabs as default Firefox.
- **Swap tab close button position** `gnomeTheme.swapTabClose`
By default the tab close buttons follows the position of the window controls, this preference reverts that behavior.
- **Bookmarks toolbar under tabs** `gnomeTheme.bookmarksToolbarUnderTabs`
Move Bookmarks toolbar under tabs.
- **Active tab contrast** `gnomeTheme.activeTabContrast`
Add more contrast to the active tab.
- **Close only selected tabs** `gnomeTheme.closeOnlySelectedTabs`
Show the close button on the selected tab only.
- **System icons** `gnomeTheme.systemIcons`
Use system theme icons instead of Adwaita icons included by theme.
> **Note:** This feature has a [known color bug](#icons-color-broken-with-system-icons).
- **No themed Icons** `gnomeTheme.noThemedIcons`
Use default Firefox icons instead of the included icons.
- **Symbolic tab icons** `gnomeTheme.symbolicTabIcons`
Make all tab icons look kinda like symbolic icons.
- **Hide WebRTC indicator** `gnomeTheme.hideWebrtcIndicator`
Hide redundant WebRTC indicator since GNOME provides their own privacy icons in the top right.
- **Hide unified extensions button** `gnomeTheme.hideUnifiedExtensions`
Hide unified extensions button from the navbar, you can also use `extensions.unifiedExtensions.enabled` instead, which is only going to work till Firefox 111.
- **Drag window from headerbar buttons** `gnomeTheme.dragWindowHeaderbarButtons`
Allow dragging the window from headerbar buttons.
> **Note:** This feature is BUGGED. It can activate the button with unpleasant behavior.
- **Tabs as headerbar** `gnomeTheme.tabsAsHeaderbar`
Place the tabs on the top of the window, and use the tabs bar to hold the window controls, like Firefox's standard tab bar.
> **Note:** Enabling with `gnomeTheme.hideSingleTab` will replace the single tab with a title bar.
- **OLED black theme** `gnomeTheme.oledBlack`
Change the dark theme into the black variant.
- **Show "List All Tabs" button on overflow** `gnomeTheme.allTabsButtonOnOverflow`
Show the `List All Tabs` button when the tabs bar is overflowing (when you have too many tabs that the width of the tabs no longer shrinks when new tabs are added).
- **Show "List All Tabs" button** `gnomeTheme.allTabsButton`
Show the `List All Tabs` button all the time, like stock Firefox.
- **Align tab title and icon to left** `gnomeTheme.tabAlignLeft`
Align the tab title and favicon to left of tab in place of center.
- **Bookmarks bar in fullscreen** `gnomeTheme.bookmarksOnFullscreen`
Show the bookmarks bar while in fullscreen.
### Extensions support
We also have optional features to enable support for some Firefox extensions.
> [!WARNING]
> Note that extension support is maintained by the community, so requests to support new extensions are not allowed, and the included extensions may be broken until someone shows up to fix them.
- **Adaptive Tab Bar Colour support** `gnomeTheme.extensions.adaptiveTabBarColour`
> **Note:** Adaptive Tab Bar Colour presently hard-codes the colours for the home page (both normal as well as private windows). When navigating from the home page to any other page, the colour of the UI might momentarily switch to the original firefox home page colour before switching back to the expected colour (this is especially noticeable in private windows). This only happens when navigating from the homepage to another page, subsequent navigations should be unaffected.
## Known bugs
### CSD have sharp corners
See upstream [bug](https://bugzilla.mozilla.org/show_bug.cgi?id=1408360).
#### Wayland fix:
1. Go to the `about:config` page
2. Search for the `layers.acceleration.force-enabled` preference and set it to true.
3. Now restart Firefox, and it should look good!
#### X11 fix:
1. Go to the `about:config` page
2. Type `mozilla.widget.use-argb-visuals`
3. Set it as a `boolean` and click on the add button
4. Now restart Firefox, and it should look good!
### Icons color broken with System icons
Icons might appear black where they should be white on some systems. I have no idea why, but you can adjust them directly in the `system-icons.css` file, look for `--gnome-icons-hack-filter` & `--gnome-window-icons-hack-filter` vars and play with css filters.
## Development
If you wanna mess around the styles and change something, you might find these
things useful.
To use the Inspector to debug the UI, open the developer tools (F12) on any
page, go to options, check both of those:
- Enable browser chrome and add-on debugging toolboxes
- Enable remote debugging
Now you can close those tools and press Ctrl+Alt+Shift+I to Inspect the browser
UI.
Also you can inspect any GTK3 application, for example type this into a terminal
and it will run Epiphany with the GTK Inspector, so you can check the CSS styles
of its elements too.
```sh
GTK_DEBUG=interactive epiphany
```
Feel free to use any parts of my code to develop your own themes, I don't force
any specific license on your code.
## Credits
Developed by **[Rafael Mardojai CM](https://github.com/rafaelmardojai)** and [contributors](https://github.com/rafaelmardojai/firefox-gnome-theme/graphs/contributors). Based on **[Luna Kurame](https://github.com/lunakurame/firefox-gnome-theme)**'s original work.
## Donate
If you want to support development, consider donating via [PayPal](https://paypal.me/RafaelMardojaiCM). Also consider donating upstream, [Firefox](https://donate.mozilla.org/) & [GNOME](https://www.gnome.org/donate/).

View file

@ -0,0 +1,12 @@
# These are supported funding model platforms
github: rafaelmardojai
patreon: rafaelmardojai
open_collective: # Replace with a single Open Collective username
ko_fi: # Replace with a single Ko-fi username
tidelift: # Replace with a single Tidelift platform-name/package-name e.g., npm/babel
community_bridge: # Replace with a single Community Bridge project-name e.g., cloud-foundry
liberapay: rafaelmardojai
issuehunt: # Replace with a single IssueHunt username
otechie: # Replace with a single Otechie username
custom: ['https://rafaelmardojai.com/donate/']

View file

@ -0,0 +1,77 @@
name: Bug Report
description: Report a bug in the theme
title: "[Bug] "
labels: [bug]
body:
- type: markdown
attributes:
value: |
> [!IMPORTANT]
> Note that extension support is maintained by the community, so extension bug reports will be closed. If you want to report something, use [Discussions](https://github.com/rafaelmardojai/firefox-gnome-theme/discussions).
- type: textarea
attributes:
label: Describe the bug
description: A clear and concise description of what the bug is. Include screenshots if needed.
validations:
required: true
- type: textarea
attributes:
label: Steps to reproduce
description: Write steps to reproduce the behavior if possible.
- type: textarea
attributes:
label: Expected behavior
description: A clear and concise description of what you expected to happen.
- type: input
attributes:
label: Operating System
description: e.g. Fedora, Ubuntu
validations:
required: true
- type: dropdown
attributes:
label: Firefox installation method
options:
- Distro package
- Flatpak
- Snap
validations:
required: true
- type: input
attributes:
label: Firefox version
validations:
required: true
- type: input
attributes:
label: Theme version
description: e.g. v108, master branch, specific commit
validations:
required: true
- type: checkboxes
attributes:
label: Optional features enabled
description: Select the features you have enabled in `about:config`.
options:
- label: gnomeTheme.hideSingleTab
- label: gnomeTheme.normalWidthTabs
- label: gnomeTheme.swapTabClose
- label: gnomeTheme.bookmarksToolbarUnderTabs
- label: gnomeTheme.activeTabContrast
- label: gnomeTheme.closeOnlySelectedTabs
- label: gnomeTheme.systemIcons
- label: gnomeTheme.noThemedIcons
- label: gnomeTheme.symbolicTabIcons
- label: gnomeTheme.hideWebrtcIndicator
- label: gnomeTheme.hideUnifiedExtensions
- label: gnomeTheme.dragWindowHeaderbarButtons
- label: gnomeTheme.tabsAsHeaderbar
- label: gnomeTheme.oledBlack
- label: gnomeTheme.allTabsButtonOnOverflow
- label: gnomeTheme.allTabsButton
- label: gnomeTheme.tabAlignLeft
- label: gnomeTheme.bookmarksOnFullscreen
- type: textarea
attributes:
label: Additional information

View file

@ -0,0 +1,32 @@
name: Feature Request
description: Suggest an idea for this project
title: "[Feature] "
labels: [enhancement]
body:
- type: markdown
attributes:
value: |
> [!IMPORTANT]
> Note that requests for support of specific Firefox extensions are not allowed and will be closed.
- type: textarea
attributes:
label: Is your feature request related to a problem? Please describe.
description: |
A clear and concise description of what the problem is.
Ex. I'm always frustrated when [...]
validations:
required: true
- type: textarea
attributes:
label: Describe the solution you'd like
description: A clear and concise description of what you want to happen.
validations:
required: true
- type: textarea
attributes:
label: Describe alternatives you've considered
description: A clear and concise description of any alternative solutions or features you've considered.
- type: textarea
attributes:
label: Additional information

View file

@ -0,0 +1,5 @@
blank_issues_enabled: false
contact_links:
- name: General Questions and Chat
url: https://matrix.to/#/#firefox-gnome-theme:matrix.org
about: Ask and chat about the theme in Matrix

View file

@ -0,0 +1,30 @@
name: Release
on:
release:
types: [published]
jobs:
publish_aur_package:
name: Publish AUR package
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Generate PKGBUILD
env:
RELEASE: ${{ github.event.release.tag_name }}
run: ./scripts/generate-pkgbuild.sh
- name: Publish firefox-gnome-theme to the AUR
uses: KSXGitHub/github-actions-deploy-aur@v2.7.2
with:
pkgname: firefox-gnome-theme
pkgbuild: ./PKGBUILD
commit_username: ${{ secrets.AUR_USERNAME }}
commit_email: ${{ secrets.AUR_EMAIL }}
ssh_private_key: ${{ secrets.AUR_SSH_PRIVATE_KEY }}
commit_message: ${{ github.event.release.tag_name }}
updpkgsums: true
test: true

View file

@ -0,0 +1,41 @@
name: Test
on: [push]
jobs:
test:
runs-on: ubuntu-latest
name: Smoke test
steps:
- name: Setup - Install Firefox.deb
run: |
sudo add-apt-repository ppa:mozillateam/ppa
echo '
Package: *
Pin: release o=LP-PPA-mozillateam
Pin-Priority: 1001
' | sudo tee /etc/apt/preferences.d/mozilla-firefox
echo 'Unattended-Upgrade::Allowed-Origins:: "LP-PPA-mozillateam:${distro_codename}";' | sudo tee /etc/apt/apt.conf.d/51unattended-upgrades-firefox
sudo apt update
sudo apt install firefox
- name: Setup 1 - create a Firefox profile
run: firefox --headless --createprofile test
- name: Test 1 - Run a web installer as in README
run: curl -s -o- https://raw.githubusercontent.com/rafaelmardojai/firefox-gnome-theme/master/scripts/install-by-curl.sh | bash
- name: Teardown 1
run: rm -rf ls ~/.mozilla/firefox/
- name: Setup 2 - create a new Firefox profile
run: firefox --headless --createprofile test
- name: Setup 2 - checkout the repo
uses: actions/checkout@v3
- name: Test 2 - Run a regular installer
run: ./scripts/install.sh
- name: Teardown 2
run: rm -rf ls ~/.mozilla/firefox/

View file

@ -0,0 +1,3 @@
customChrome.css
customContent.css
PKGBUILD

View file

@ -0,0 +1,44 @@
#! /usr/bin/env bash
firefoxInstallationPaths=(
# Firefox
~/.mozilla/firefox # Package
~/.var/app/org.mozilla.firefox/.mozilla/firefox # Flatpak
~/snap/firefox/common/.mozilla/firefox # Snap
"$HOME/Library/Application Support/Firefox" # MacOS Package
~/AppData/Roaming/Mozilla/Firefox # Microsoft Windows
# Librewolf
~/.librewolf # Package
~/.var/app/io.gitlab.librewolf-community/.librewolf # Flatpak
# Floorp
~/.floorp # Package
~/.var/app/one.ablaze.floorp/.floorp # Flatpak
# Waterfox
~/.var/app/net.waterfox.waterfox/.waterfox # Flatpak
)
installScript="./scripts/install.sh"
folderArg=""
foldersFoundCount=0
eval "chmod +x ${installScript}"
for folder in "${firefoxInstallationPaths[@]}"; do
if [ -d "$folder" ]; then
echo Firefox installation folder found
folderArg=" -f \"$folder\""
eval ${installScript}${folderArg}
foldersFoundCount+=1
fi
done
if [ $foldersFoundCount = 0 ];then
echo No firefox folder found ;
fi

View file

@ -0,0 +1,42 @@
#!/bin/sh
# Exit on error
set -e
if [ -z "$RELEASE" ]; then
echo "\$RELEASE not set, aborting"
exit 1
fi
pkgver=$(echo "$RELEASE" | sed 's/v//')
cat << EOF > ./PKGBUILD
# Maintainer: Marko Korhonen <firefox-gnome-theme@marko.korhonen.cc>
# Based on the existing AUR package firefox-gnome-theme-git
# This PKGBUILD is automatically generated by https://github.com/rafaelmardojai/firefox-gnome-theme/blob/$RELEASE/scripts/generate-pkgbuild.sh
# when a release is published on GitHub. Do not edit this file directly.
pkgname=firefox-gnome-theme
pkgver=$pkgver
pkgrel=1
pkgdesc='A GNOME theme for Firefox'
arch=('any')
url="https://github.com/rafaelmardojai/\$pkgname"
license=('Unlicense')
optdepends=('firefox: primary compatible browser' 'librewolf: alternative compatible browser')
conflicts=("\$pkgname-git")
install="\$pkgname.install"
source=("\$pkgname-\$pkgver.tar.gz::https://github.com/rafaelmardojai/\$pkgname/archive/refs/tags/v\$pkgver.tar.gz" "INSTALL.md")
md5sums=('TO_BE_GENERATED'
'25f18456221ffc91f472b1abff8aae84')
package() {
cd "\$srcdir/\$pkgname-\$pkgver"
install -d "\$pkgdir/usr/lib/\$pkgname"
cp -ra theme userChrome.css userContent.css configuration "\$pkgdir/usr/lib/\$pkgname"
# Install docs
install -Dm644 README.md "\$pkgdir/usr/share/doc/\$pkgname/README.md"
install -Dm644 "\$srcdir/INSTALL.md" "\$pkgdir/usr/share/doc/\$pkgname/INSTALL.md"
}
EOF

View file

@ -0,0 +1,20 @@
#!/usr/bin/env bash
VERSION=$(curl --silent "https://api.github.com/repos/rafaelmardojai/firefox-gnome-theme/releases/latest" | grep tag_name | cut -d'"' -f4)
FILENAME=firefox-gnome-theme-$VERSION.tar.gz
(
cd $(mktemp -d) || exit 1
mkdir firefox-gnome-theme
cd firefox-gnome-theme
curl -LJo $FILENAME https://github.com/rafaelmardojai/firefox-gnome-theme/tarball/$VERSION
tar -xzf $FILENAME --strip-components=1
chmod +x scripts/auto-install.sh
./scripts/auto-install.sh
)

View file

@ -0,0 +1,156 @@
#!/usr/bin/env bash
THEMEDIRECTORY=$(cd "$(dirname $0)" && cd .. && pwd)
FIREFOXFOLDER=~/.mozilla/firefox
PROFILENAME=""
# Get options.
while getopts 'f:p:t:' flag; do
case "${flag}" in
f) FIREFOXFOLDER="${OPTARG}" ;;
p) PROFILENAME="${OPTARG}" ;;
*)
echo "Gnome Theme Install Script:"
echo " -f <firefox_folder_path>. Set custom Firefox folder path."
echo " -p <profile_name>. Set custom profile name."
echo " -h to show this message."
exit 0
;;
esac
done
# A wrapper around the `sed` command to handle platform-specific differences.
#
# sed in BSD platforms need this extra argument when using '-i' to specify no backup file.
function _sed(){
if [[ "$OSTYPE" == *"linux"* ]] || [[ "$OSTYPE" == *msys* ]]; then
sed "$@"
return $?
fi
if [[ "$1" == "-i" ]]; then
shift 1
sed -i '' "$@"
return $?
fi
sed "$@"
}
function saveProfile(){
local PROFILE_PATH="$1"
cd "$FIREFOXFOLDER/$PROFILE_PATH" || { echo "FAIL, Firefox profile path was not found."; exit 1; }
# Create a chrome directory if it doesn't exist.
mkdir -p chrome
cd chrome || { echo "FAIL, couldn't create chrome dir in $PWD, please check if there's something else named 'chrome'."; exit 1; }
# Copy theme repo inside
echo "Copying repo in $PWD" >&2
[ -e ./firefox-gnome-theme ] || mkdir firefox-gnome-theme
cp -fR "$THEMEDIRECTORY/." "$PWD/firefox-gnome-theme/" || { echo "FAIL, couldn't copy to $PWD/chrome, please check if there's something named 'chrome' or 'chrome/firefox-gnome-theme', that is not a dir."; exit 1; }
# Create single-line user CSS files if non-existent or empty.
if [ -s userChrome.css ]; then
# Remove older theme imports
_sed 's/@import "firefox-gnome-theme.*.//g' userChrome.css | _sed '/^\s*$/d' > tmpfile && mv tmpfile userChrome.css
echo >> userChrome.css
else
echo >> userChrome.css
fi
# Import this theme at the beginning of the CSS files.
_sed -i '1s/^/@import "firefox-gnome-theme\/userChrome.css";\n/' userChrome.css
# Check if the import was set correctly
if ! cat userChrome.css | grep "firefox-gnome-theme" > /dev/null; then
echo "Unable to add the main import in 'userChrome.css', it needs to be set manually." >&2
fi
# Create single-line user content CSS files if non-existent or empty. (userContent)
if [ -s userContent.css ]; then
# Remove older theme imports
_sed 's/@import "firefox-gnome-theme.*.//g' userContent.css | _sed '/^\s*$/d' > tmpfile1 && mv tmpfile1 userContent.css
echo >> userContent.css
else
echo >> userContent.css
fi
# Import this theme at the beginning of the CSS files. (userContent)
_sed -i '1s/^/@import "firefox-gnome-theme\/userContent.css";\n/' userContent.css
# Check if the import was set correctly (userContent)
if ! cat userContent.css | grep "firefox-gnome-theme" > /dev/null; then
echo "Unable to add the main import in 'userContent.css', it needs to be set manually." >&2
fi
cd ..
echo "Set configuration to user.js file" >&2
theme_prefs=()
while IFS= read -r line; do
theme_prefs+=("$line")
done < <(grep "user_pref" chrome/firefox-gnome-theme/configuration/user.js)
theme_prefs_unvalued=()
while IFS= read -r line; do
theme_prefs_unvalued+=("$line")
done < <(grep "user_pref" chrome/firefox-gnome-theme/configuration/user.js | cut -d'"' -f 2)
if [ ! -f "user.js" ]; then
mv chrome/firefox-gnome-theme/configuration/user.js .
else
cp user.js user.js.bak
OLDIFS=$IFS
IFS='/'
for t in "${theme_prefs_unvalued[@]}"; do
_sed -i "/$t/d" "user.js"
done
for f in "${theme_prefs[@]}"; do
echo "$f" >> "user.js"
done
IFS=$OLDIFS
fi
echo "Done." >&2
cd ..
}
PROFILES_FILE="${FIREFOXFOLDER}/profiles.ini"
if [ ! -f "${PROFILES_FILE}" ]; then
>&2 echo "FAIL, please check Firefox installation, unable to find 'profile.ini' at ${FIREFOXFOLDER}."
exit 1
fi
echo "'profiles.ini' found in ${FIREFOXFOLDER}"
PROFILES_PATHS=($(grep -E "^Path=" "${PROFILES_FILE}" | tr -d '\n' | _sed -e 's/\s\+/SPACECHARACTER/g' | _sed 's/Path=/::/g' ))
PROFILES_PATHS+=::
PROFILES_ARRAY=()
if [ "${PROFILENAME}" != "" ];
then
echo "Using ${PROFILENAME} profile"
PROFILES_ARRAY+=${PROFILENAME}
else
echo "Finding all available profiles";
while [[ "$PROFILES_PATHS" ]]; do
PROFILES_ARRAY+=( "${PROFILES_PATHS%%::*}" )
PROFILES_PATHS=${PROFILES_PATHS#*::}
done
fi
if [ ${#PROFILES_ARRAY[@]} -eq 0 ]; then
echo "FAIL, no Firefox profile found in $PROFILES_FILE".;
else
for i in "${PROFILES_ARRAY[@]}"
do
if [[ -n "$i" ]];
then
echo "Installing theme for $(sed 's/SPACECHARACTER/ /g' <<< $i) profile.";
saveProfile "$(sed 's/SPACECHARACTER/ /g' <<< $i)"
fi;
done
fi

View file

@ -0,0 +1,12 @@
#!/bin/sh
git checkout beta
git rebase master
git push origin beta -f
git checkout nightly
git rebase beta
git push origin nightly -f
git checkout master

View file

@ -0,0 +1,80 @@
@namespace xul url("http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul");
/* Variables that start with --gnome- are added by me and are assigned
* to elements somewhere in this code. The rest of the variables are
* built-in in Firefox, so you need to add an !important if you wanna
* override them. */
@media (prefers-color-scheme: dark) {
:root {
/* Accent */
--gnome-accent-bg: #1161CB;
--gnome-accent: #1161CB;
--gnome-toolbar-star-button: var(--gnome-palette-yellow-1);
/* Window */
--gnome-window-background: #000000;
--gnome-window-color: white;
--gnome-view-background: #1e1e1e;
--gnome-sidebar-background: #303030;
--gnome-secondary-sidebar-background: #2a2a2a;
/* Card */
--gnome-card-background: rgba(255, 255, 255, 0.08);
--gnome-card-shade-color: color-mix(in srgb, black 36%, transparent);
/* Menu */
--gnome-menu-background: #303030;
/* Header bar */
--gnome-headerbar-background: #000000;
--gnome-headerbar-shade-color: rgba(0, 0, 0, 0.9);
/* Toolbars */
--gnome-toolbar-icon-fill: #eeeeec;
/* Tabs */
--gnome-tabbar-tab-hover-background: #252524; /* Hardcoded color */
--gnome-tabbar-tab-active-background: #191918; /* Hardcoded color */
--gnome-tabbar-tab-active-background-contrast: #4F4F4F; /* Hardcoded color */
--gnome-tabbar-tab-active-hover-background: #272725; /* Hardcoded color */
--gnome-tabbar-identity-color-green: var(--gnome-palette-green-1);
--gnome-tabbar-identity-color-yellow: var(--gnome-palette-yellow-2);
--gnome-tabbar-identity-color-orange: var(--gnome-palette-orange-3);
--gnome-tabbar-identity-color-red: var(--gnome-palette-red-1);
--gnome-tabbar-identity-color-purple: var(--gnome-palette-purple-1);
/* Text color for Firefox Logo in new private tab */
--gnome-private-wordmark: #FBFBFE;
/* New private tab background */
--gnome-private-in-content-page-background: #242424;
/* Private browsing info box */
--gnome-private-text-primary-color: #FBFBFE;
}
/* Backdrop colors */
:root:-moz-window-inactive {
--gnome-tabbar-tab-hover-background: #2c2c2c; /* Hardcoded color */
--gnome-tabbar-tab-active-background: #2e2e2e; /* Hardcoded color */
}
/* Private colors */
:root[privatebrowsingmode="temporary"] {
--gnome-accent-fg: #78aeed;
/* Headerbar */
--gnome-headerbar-background: #252F49 !important;
/* Tabs */
--gnome-tabbar-tab-hover-background: #343e56; /* Hardcoded color */
--gnome-tabbar-tab-active-background: #343e56; /* Hardcoded color */
--gnome-tabbar-tab-active-background-contrast: #495675; /* Hardcoded color */
--gnome-tabbar-tab-active-hover-background: #414a61; /* Hardcoded color */
}
/* Private and backdrop colors */
:root[privatebrowsingmode="temporary"]:-moz-window-inactive {
--gnome-headerbar-background: #252F49 !important;
--gnome-tabbar-tab-hover-background: #242c3f; /* Hardcoded color */
--gnome-tabbar-tab-active-background: #272e41; /* Hardcoded color */
}
}

View file

@ -0,0 +1,71 @@
@namespace xul url("http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul");
/* Variables that start with --gnome- are added by me and are assigned
* to elements somewhere in this code. The rest of the variables are
* built-in in Firefox, so you need to add an !important if you wanna
* override them. */
@media (prefers-color-scheme: dark) {
:root {
/* Colors */
--gnome-standalone-color-oklab: max(l, 0.85) a b;
--gnome-destructive-bg: var(--gnome-palette-red-4);
--gnome-success-bg: var(--gnome-palette-green-5);
--gnome-warning-bg: #cd9309;
--gnome-error-bg: var(--gnome-palette-red-4);
--gnome-toolbar-star-button: var(--gnome-palette-yellow-1);
/* Window */
--gnome-window-background: #222226;
--gnome-window-color: white;
--gnome-view-background: #1e1e1e;
--gnome-sidebar-background: #2e2e32;
--gnome-secondary-sidebar-background: #28282c;
/* Card */
--gnome-card-background: rgba(255, 255, 255, 0.08);
--gnome-card-shade-color: rgba(0, 0, 6, 0.36);
/* Menu */
--gnome-menu-background: #36363a;
/* Header bar */
--gnome-headerbar-background: #2e2e32;
--gnome-headerbar-shade-color: rgba(0, 0, 0, 0.9);
/* Toolbars */
--gnome-toolbar-icon-fill: #ffffff;
/* Tabs */
--gnome-tabbar-identity-color-green: var(--gnome-palette-green-1);
--gnome-tabbar-identity-color-yellow: var(--gnome-palette-yellow-2);
--gnome-tabbar-identity-color-orange: var(--gnome-palette-orange-3);
--gnome-tabbar-identity-color-red: var(--gnome-palette-red-1);
--gnome-tabbar-identity-color-purple: var(--gnome-palette-purple-1);
/* Miscellaneous */
--gnome-shade-color: rgba(0, 0, 6, 0.25);
/* Text color for Firefox Logo in new private tab */
--gnome-private-wordmark: #FBFBFE;
/* New private tab background */
--gnome-private-in-content-page-background: #222226;
/* Private browsing info box */
--gnome-private-text-primary-color: #FBFBFE;
/* Backdrop colors */
&:-moz-window-inactive {
--gnome-sidebar-background: #28282c;
--gnome-secondary-sidebar-background: #252529;
}
/* Private browsing colors */
&[privatebrowsingmode="temporary"] {
/* Headerbar */
--gnome-headerbar-background: #2e2540 !important;
&:-moz-window-inactive {
--gnome-headerbar-background: #241d34 !important;
}
}
}
}

View file

@ -0,0 +1,177 @@
@namespace xul url("http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul");
/* Variables that start with --gnome- are added by me and are assigned
* to elements somewhere in this code. The rest of the variables are
* built-in in Firefox, so you need to add an !important if you wanna
* override them. */
:root {
/* Pallete */
--gnome-palette-blue-1: #99c1f1;
--gnome-palette-blue-2: #62a0ea;
--gnome-palette-blue-3: #3584e4;
--gnome-palette-blue-4: #1c71d8;
--gnome-palette-blue-5: #1a5fb4;
--gnome-palette-green-1: #8ff0a4;
--gnome-palette-green-2: #57e389;
--gnome-palette-green-3: #33d17a;
--gnome-palette-green-4: #2ec27e;
--gnome-palette-green-5: #26a269;
--gnome-palette-yellow-1: #f9f06b;
--gnome-palette-yellow-2: #f8e45c;
--gnome-palette-yellow-3: #f6d32d;
--gnome-palette-yellow-4: #f5c211;
--gnome-palette-yellow-5: #e5a50a;
--gnome-palette-orange-1: #ffbe6f;
--gnome-palette-orange-2: #ffa348;
--gnome-palette-orange-3: #ff7800;
--gnome-palette-orange-4: #e66100;
--gnome-palette-orange-5: #c64600;
--gnome-palette-red-1: #f66151;
--gnome-palette-red-2: #ed333b;
--gnome-palette-red-3: #e01b24;
--gnome-palette-red-4: #c01c28;
--gnome-palette-red-5: #a51d2d;
--gnome-palette-purple-1: #dc8add;
--gnome-palette-purple-2: #c061cb;
--gnome-palette-purple-3: #9141ac;
--gnome-palette-purple-4: #813d9c;
--gnome-palette-purple-5: #613583;
--gnome-palette-brown-1: #cdab8f;
--gnome-palette-brown-2: #b5835a;
--gnome-palette-brown-3: #986a44;
--gnome-palette-brown-4: #865e3c;
--gnome-palette-brown-5: #63452c;
--gnome-palette-light-1: #ffffff;
--gnome-palette-light-2: #f6f5f4;
--gnome-palette-light-3: #deddda;
--gnome-palette-light-4: #c0bfbc;
--gnome-palette-light-5: #9a9996;
--gnome-palette-dark-1: #77767b;
--gnome-palette-dark-2: #5e5c64;
--gnome-palette-dark-3: #3d3846;
--gnome-palette-dark-4: #241f31;
--gnome-palette-dark-5: #000000;
/* Colors */
--gnome-standalone-color-oklab: min(l, 0.5) a b;
--gnome-accent-bg: AccentColor;
--gnome-accent: oklab(from var(--gnome-accent-bg) var(--gnome-standalone-color-oklab));
--gnome-destructive-bg: var(--gnome-palette-red-3);
--gnome-destructive: oklab(from var(--gnome-destructive-bg) var(--gnome-standalone-color-oklab));
--gnome-success-bg: var(--gnome-palette-green-4);
--gnome-success: oklab(from var(--gnome-success-bg) var(--gnome-standalone-color-oklab));
--gnome-warning-bg: var(--gnome-palette-yellow-5);
--gnome-warning: oklab(from var(--gnome-warning-bg) var(--gnome-standalone-color-oklab));
--gnome-error-bg: var(--gnome-palette-red-3);
--gnome-error: oklab(from var(--gnome-error-bg) var(--gnome-standalone-color-oklab));
--gnome-focus-border-color: color-mix(in srgb, var(--gnome-accent) 50%, transparent);
--gnome-selection-bg: color-mix(in srgb, var(--gnome-accent-bg) 30%, transparent);
--gnome-toolbar-star-button: var(--gnome-palette-yellow-5);
/* Window */
--gnome-window-background: #fafafb;
--gnome-window-color: rgba(0, 0, 6, 0.8);
--gnome-view-background: #ffffff;
--gnome-view-color: var(--gnome-window-color);
--gnome-view-selected-background: color-mix(in srgb, var(--gnome-accent-bg) 25%, transparent);
--gnome-view-selected-hover-background: color-mix(in srgb, var(--gnome-accent-bg) 32%, transparent);
--gnome-view-selected-active-background: color-mix(in srgb, var(--gnome-accent-bg) 39%, transparent);
--gnome-sidebar-background: #ebebed;
--gnome-secondary-sidebar-background: #f3f3f5;
/* Card */
--gnome-card-background: #ffffff;
--gnome-card-shade-color: rgba(0, 0, 6, 0.07);
/* Menu */
--gnome-menu-background: #ffffff;
--gnome-menu-color: var(--gnome-window-color);
--gnome-menu-shadow: 0 1px 5px 1px rgba(0, 0, 0, .09), 0 2px 14px 3px rgba(0, 0, 0, .05);
--gnome-menu-button-hover-background: var(--gnome-button-background);
--gnome-menu-separator-color: var(--gnome-border-color);
/* Header bar */
--gnome-headerbar-background: #ffffff;
--gnome-headerbar-shade-color: rgba(0, 0, 0, 0.12);
/* Toolbars */
--gnome-toolbar-background: var(--gnome-headerbar-background);
--gnome-toolbar-border-color: var(--gnome-headerbar-shade-color);
--gnome-toolbar-icon-fill: #2f2f2f;
/* Elements */
--gnome-border-color: color-mix(in srgb, currentColor 15%, transparent);
--gnome-hover-color: color-mix(in srgb, currentColor 7%, transparent);
--gnome-active-color: color-mix(in srgb, currentColor 16%, transparent);
--gnome-selected-color: color-mix(in srgb, currentColor 10%, transparent);
--gnome-selected-hover-color: color-mix(in srgb, currentColor 13%, transparent);
--gnome-selected-active-color: color-mix(in srgb, currentColor 19%, transparent);
--gnome-trough-background: color-mix(in srgb, currentColor 15%, transparent);
--gnome-trough-hover-background: color-mix(in srgb, currentColor 20%, transparent);
--gnome-trough-active-background: color-mix(in srgb, currentColor 25%, transparent);
/* Buttons */
--gnome-button-background: color-mix(in srgb, currentColor 10%, transparent);
--gnome-button-hover-background: color-mix(in srgb, currentColor 15%, transparent);
--gnome-button-active-background: color-mix(in srgb, currentColor 30%, transparent);
--gnome-button-checked-background: var(--gnome-button-active-background);
--gnome-button-checked-hover-background: color-mix(in srgb, currentColor 35%, transparent);
--gnome-button-checked-active-background: color-mix(in srgb, currentColor 40%, transparent);
--gnome-button-suggested-background: var(--gnome-accent-bg);
--gnome-button-destructive-background: color-mix(in srgb, currentColor 15%, transparent);
--gnome-button-destructive-hover-background: color-mix(in srgb, currentColor 20%, transparent);
--gnome-button-destructive-active-background: color-mix(in srgb, currentColor 35%, transparent);
/* Entries */
--gnome-entry-background: var(--gnome-button-background);
--gnome-entry-color: var(--gnome-view-color);
--gnome-entry-focused-border-color: color-mix(in srgb, var(--gnome-accent) 50%, transparent);
--gnome-entry-error-focused-border-color: color-mix(in srgb, var(--gnome-error) 50%, transparent);
/* Tabs */
--gnome-tabbar-background: var(--gnome-headerbar-background);
--gnome-tabbar-tab-separator-color: var(--gnome-border-color);
--gnome-tabbar-tab-hover-background: color-mix(in srgb, currentColor 7%, var(--gnome-tabbar-background));
--gnome-tabbar-tab-active-background: color-mix(in srgb, currentColor 10%, var(--gnome-tabbar-background));
--gnome-tabbar-tab-active-background-contrast: color-mix(in srgb, currentColor 20%, var(--gnome-tabbar-background));
--gnome-tabbar-tab-active-hover-background: color-mix(in srgb, currentColor 13%, var(--gnome-tabbar-background));
--gnome-tabbar-tab-needs-attetion: var(--gnome-palette-blue-2);
--gnome-tabbar-identity-color-blue: var(--gnome-accent);
--gnome-tabbar-identity-color-turquoise: #00c79a;
--gnome-tabbar-identity-color-green: var(--gnome-palette-green-5);
--gnome-tabbar-identity-color-yellow: #ae7b03;
--gnome-tabbar-identity-color-orange: var(--gnome-palette-orange-4);
--gnome-tabbar-identity-color-red: var(--gnome-palette-red-3);
--gnome-tabbar-identity-color-pink: #ff4b84;
--gnome-tabbar-identity-color-purple: var(--gnome-palette-purple-4);
/* Miscellaneous */
--gnome-shade-color: rgba(0, 0, 6, 0.07);
/* Text color for Firefox Logo in new private tab */
--gnome-private-wordmark: #20123A;
/* New private tab background */
--gnome-private-in-content-page-background: #FAFAFA;
/* Private browsing info box */
--gnome-private-text-primary-color: #15141A;
/* Backdrop colors */
&:-moz-window-inactive {
--gnome-headerbar-background: var(--gnome-window-background) !important;
--gnome-sidebar-background: #f2f2f4;
--gnome-secondary-sidebar-background: #f6f6fa;
--gnome-selection-bg: color-mix(in srgb, var(--gnome-view-color) 10%, transparent);
}
/* Private browsing colors */
&[privatebrowsingmode="temporary"] {
/* Headerbar */
--gnome-headerbar-background: #f1eafa !important;
&:-moz-window-inactive {
--gnome-headerbar-background: #f3eef9 !important;
}
}
}

View file

@ -0,0 +1,73 @@
:root,
:root[privatebrowsingmode="temporary"],
:is(:root, :root[privatebrowsingmode="temporary"]):-moz-window-inactive {
/* Colors */
--gnome-accent-bg: AccentColor !important;
/* Window */
--gnome-window-color: var(--lwt-text-color);
--gnome-window-background: var(--lwt-accent-color);
--gnome-sidebar-background: var(--lwt-accent-color);
--gnome-secondary-sidebar-background: var(--sidebar-background-color);
/* Menu */
--gnome-menu-background: var(--arrowpanel-background);
--gnome-menu-color: var(--lwt-text-color);
/* Header bar */
--gnome-headerbar-background: var(--toolbar-bgcolor) !important;
/* Toolbars */
--gnome-toolbar-border-color: transparent;
--gnome-toolbar-background: var(--toolbar-bgcolor);
--gnome-toolbar-icon-fill: var(--toolbarbutton-icon-fill);
/* Entries */
--gnome-entry-background: var(--toolbar-field-background-color);
--gnome-entry-color: var(--toolbar-field-color);
--gnome-inactive-entry-color: hsl(from var(--gnome-entry-color) h s calc(l + 5%));
--gnome-entry-focused-border-color: var(--gnome-selection-bg);
/* Tabs */
--gnome-tabbar-background: var(--gnome-headerbar-background);
--gnome-tabbar-tab-hover-background: color-mix(in oklab, var(--gnome-tabbar-background), var(--lwt-text-color) 10%);
--gnome-tabbar-tab-active-background: var(--tab-selected-bgcolor);
--gnome-tabbar-tab-active-hover-background: color-mix(in oklab, var(--gnome-tabbar-tab-active-background), var(--lwt-text-color) 10%);
/* 'New Tab' and 'New Private Tab' pages */
&:has(
tab:where(
[image="chrome://branding/content/icon32.png"],
[image="chrome://browser/skin/privatebrowsing/favicon.svg"]
)[selected]
) {
--lwt-accent-color: var(--gnome-private-in-content-page-background) !important;
--lwt-text-color: rgba(0, 0, 0, 0.8) !important;
--sidebar-background-color: #f3f3f3 !important;
@media (prefers-color-scheme: dark) {
--lwt-text-color: white !important;
--sidebar-background-color: #2a2a2a !important;
}
--toolbar-bgcolor: var(--lwt-accent-color) !important;
--toolbar-color: var(--lwt-text-color) !important;
--toolbar-field-color: var(--lwt-text-color) !important;
--toolbarbutton-icon-fill: var(--lwt-text-color) !important;
--toolbar-field-focus-background-color: Field !important;
--arrowpanel-background: color-mix(in oklab, var(--toolbar-bgcolor), var(--lwt-text-color) 10%) !important;
--toolbar-field-background-color: var(--arrowpanel-background) !important;
--tab-selected-bgcolor: color-mix(in oklab, var(--gnome-tabbar-background), var(--lwt-text-color) 20%) !important;
--lwt-tab-line-color: var(--tab-selected-bgcolor) !important;
}
}
.menupopup-arrowscrollbox, window[role="dialog"] {
--gnome-menu-background: Menu;
--gnome-window-color: MenuText;
--gnome-toolbar-icon-fill: MenuText;
}
.urlbarView-url {
--gnome-headerbar-mix: color-mix(in oklch, var(--gnome-headerbar-background), var(--lwt-text-color) 60%);
--gnome-accent: oklch(from var(--gnome-headerbar-mix) l calc(c + 0.01) h);
}
#sidebar-launcher-splitter, #sidebar-splitter {
background-color: color-mix(in oklab, var(--lwt-accent-color), var(--lwt-text-color) 10%) !important;
}

View file

@ -0,0 +1,48 @@
/* Variables */
@import "variables.css";
@import "icons/icons.css";
@import "colors/light.css";
@import "colors/dark.css";
@import "colors/black.css" screen and -moz-pref("gnomeTheme.oledBlack");
/* Core */
@import "parts/toolbox.css";
@import "parts/headerbar.css";
@import "parts/csd.css";
@import "parts/urlbar.css";
@import "parts/tabsbar.css";
@import "parts/findbar.css";
@import "parts/sidebar.css";
@import "parts/lists.css";
@import "parts/buttons.css";
@import "parts/buttons-fixes.css";
@import "parts/entries.css";
@import "parts/controls.css";
@import "parts/icons.css";
@import "parts/popups.css";
@import "parts/popups-contents.css";
@import "parts/dialogs.css";
@import "parts/remove-white-flash.css";
/* Platforms */
@import "platforms/windows.css" screen and (-moz-platform: windows);
/* Extensions support */
@import "extensions/adaptive-tab-bar-colour.css" screen and -moz-pref("gnomeTheme.extensions.adaptiveTabBarColour");
/* Optional */
@import "system-icons.css" screen and -moz-pref("gnomeTheme.systemIcons");
@import "symbolic-tab-icons.css" screen and -moz-pref("gnomeTheme.symbolicTabIcons");
@namespace xul "http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul";
/* Set theme version text in customization panel */
#customization-footer::before {
background: url(../icon.svg) no-repeat;
background-size: contain;
content: "Firefox GNOME theme v143";
padding: 9px 9px 9px 50px;
}

View file

@ -0,0 +1,5 @@
<svg height="14" width="14" xmlns="http://www.w3.org/2000/svg">
<g style="display:inline">
<path d="M388 342c-2.207 0-4 1.793-4 4s1.793 4 4 4c2.208 0 4-1.793 4-4s-1.792-4-4-4z" transform="translate(-381 -339)" fill="context-fill" fill-opacity="context-fill-opacity"/>
</g>
</svg>

After

Width:  |  Height:  |  Size: 280 B

View file

@ -0,0 +1,5 @@
<svg height="14" width="14" xmlns="http://www.w3.org/2000/svg">
<g style="display:inline">
<path d="M388 342c-2.207 0-4 1.793-4 4s1.793 4 4 4c2.208 0 4-1.793 4-4s-1.792-4-4-4z" transform="translate(-381 -339)" fill="#2e3436"/>
</g>
</svg>

After

Width:  |  Height:  |  Size: 239 B

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 5 KiB

View file

@ -0,0 +1,4 @@
<?xml version="1.0" encoding="UTF-8"?>
<svg height="16px" viewBox="0 0 16 16" width="16px" xmlns="http://www.w3.org/2000/svg">
<path d="m 15 3.484375 l -1 -1 l -7.46875 7.515625 l -3.414062 -3.476562 l -2 2 l 5.414062 5.476562 l 9.46875 -9.515625 z m 0 0" fill="context-fill" fill-opacity="context-fill-opacity"/>
</svg>

After

Width:  |  Height:  |  Size: 325 B

View file

@ -0,0 +1,4 @@
<?xml version="1.0" encoding="UTF-8"?>
<svg height="16px" viewBox="0 0 16 16" width="16px" xmlns="http://www.w3.org/2000/svg">
<path d="m 15 3.484375 l -1 -1 l -7.46875 7.515625 l -3.414062 -3.476562 l -2 2 l 5.414062 5.476562 l 9.46875 -9.515625 z m 0 0" fill="#2e3436"/>
</svg>

After

Width:  |  Height:  |  Size: 284 B

View file

@ -0,0 +1,125 @@
# Generate stylesheet with GNOME SVG icons as CSS variables.
#
# Fetch icons from official git repos and convert them to inline CSS variables
# adding support for reoloring in Firefox in the process.
#
# Git is required to run the script.
#
# Partially inspired by https://gitlab.gnome.org/World/design/icon-library/-/blob/master/update-icons.py
import glob
import json
import logging
import os
import shutil
import subprocess
import xml.etree.ElementTree as ET
from typing import TypedDict
from urllib.parse import quote
ABS_PATH = os.path.dirname(os.path.abspath(__file__))
ICONS_FILE = os.path.join(ABS_PATH, "icons.json")
CSS_FILE = os.path.join(ABS_PATH, "icons.css")
ICONS_REPO_URL = "https://gitlab.gnome.org/GNOME/adwaita-icon-theme.git"
ICONS_REPO_PATH = os.path.join(ABS_PATH, "adwaita-icon-theme")
ICONS_KIT_REPO_URL = (
"https://gitlab.gnome.org/Teams/Design/icon-development-kit-www.git"
)
ICONS_KIT_REPO_PATH = os.path.join(ABS_PATH, "icon-development-kit-www")
ET.register_namespace("", "http://www.w3.org/2000/svg")
class IconsDefinition(TypedDict):
icons: list[str]
def main():
# Get icons repositories
if not os.path.exists(ICONS_REPO_PATH):
subprocess.call(["git", "clone", "--depth", "1", ICONS_REPO_URL], cwd=ABS_PATH)
if not os.path.exists(ICONS_KIT_REPO_PATH):
subprocess.call(
["git", "clone", "--depth", "1", ICONS_KIT_REPO_URL], cwd=ABS_PATH
)
# Get icons name to path mappings
icon_paths = {
**lookup_icons(f"{ICONS_KIT_REPO_PATH}/img/symbolic"), # Extra GNOME icons kit
**lookup_icons(f"{ICONS_REPO_PATH}/Adwaita/symbolic"), # Core GNOME icons
**lookup_icons(f"{ABS_PATH}/custom", False), # Custom icons
}
# Load definition of icons needed by the theme
with open(ICONS_FILE, "r") as f:
icons_def: IconsDefinition = json.load(f)
# Process icons SVGs for CSS
icons_svg: dict[str, str] = {}
for icon in icons_def["icons"]:
if icon not in icon_paths:
logging.warning(f"No icon file found for '{icon}'")
continue
text = process_svg(icon_paths[icon])
svg = quote(text, safe=" =:/'") # URL encode the icon, omitting some characters
icons_svg[icon] = svg
# Write CSS file
with open(CSS_FILE, "w") as css:
css.write(":root {\n")
for name, svg in icons_svg.items():
css.write(f'\t--gnome-icon-{name}: url("data:image/svg+xml,{svg}");\n')
css.write("}")
# Remove repos dirs
shutil.rmtree(ICONS_REPO_PATH)
shutil.rmtree(ICONS_KIT_REPO_PATH)
def lookup_icons(icons_folder: str, has_subdirs=True) -> dict[str, str]:
lookup: dict[str, str] = {}
for path in glob.glob(
f"{icons_folder}/{'**/' if has_subdirs else ''}*-symbolic.svg"
):
filename = os.path.basename(path)
name = filename.replace(".svg", "")
lookup[name] = path
return lookup
def process_svg(filename: str) -> str:
"""
Process SVG's XML to be one liner and add Mozilla's SVG coloring properties
"""
tree = ET.parse(filename)
root = tree.getroot()
# Set context-* values for fill and fill-opacity
# Needed for icon recolor from CSS
for tag in ("{http://www.w3.org/2000/svg}g", "{http://www.w3.org/2000/svg}path"):
for elem in root.iter(tag):
if "class" not in elem.attrib: # Paths with class name are colored overlays
if "fill" in elem.attrib:
elem.set("fill", "context-fill")
elem.set("fill-opacity", "context-fill-opacity")
if "stroke" in elem.attrib:
elem.set("stroke", "context-stroke")
elem.set("stroke-opacity", "context-stroke-opacity")
# Strip line breasks and indentation
for elem in root.iter("*"):
if elem.text is not None:
elem.text = elem.text.strip()
if elem.tail is not None:
elem.tail = elem.tail.strip()
text = ET.tostring(root, "unicode")
text = text.replace('"', "'") # Use single quotes
return text
main()

View file

@ -0,0 +1,68 @@
{
"icons": [
"application-x-addon-symbolic",
"applications-engineering-symbolic",
"audio-volume-muted-symbolic",
"audio-speakers-symbolic",
"build-configure-symbolic",
"bullet-symbolic",
"chain-link-symbolic",
"channel-insecure-symbolic",
"channel-secure-symbolic",
"chat-symbolic",
"edit-clear-symbolic",
"edit-copy-symbolic",
"edit-cut-symbolic",
"edit-find-symbolic",
"edit-paste-symbolic",
"eye-not-looking-symbolic",
"firefox-symbolic",
"folder-download-symbolic",
"folder-symbolic",
"general-properties-symbolic",
"go-down-symbolic",
"go-next-symbolic",
"go-previous-symbolic",
"go-up-symbolic",
"history-undo-symbolic",
"info-outline-symbolic",
"key-symbolic",
"list-add-symbolic",
"mail-unread-symbolic",
"newspaper-symbolic",
"non-starred-symbolic",
"open-menu-symbolic",
"pan-down-symbolic",
"pan-end-symbolic",
"pan-start-symbolic",
"pan-up-symbolic",
"pip-in-symbolic",
"pip-out-symbolic",
"play-large-disabled-symbolic",
"preferences-system-symbolic",
"preferences-system-time-symbolic",
"printer-symbolic",
"process-stop-symbolic",
"security-high-symbolic",
"security-low-symbolic",
"select-symbolic",
"settings-symbolic",
"sidebar-show-symbolic",
"sidebar-show-right-symbolic",
"starred-symbolic",
"tab-new-symbolic",
"tab-symbolic",
"user-home-symbolic",
"view-fullscreen-symbolic",
"view-more-horizontal-symbolic",
"view-refresh-symbolic",
"view-restore-symbolic",
"window-close-symbolic",
"window-maximize-symbolic",
"window-minimize-symbolic",
"window-new-symbolic",
"window-restore-symbolic",
"zoom-in-symbolic",
"zoom-out-symbolic"
]
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.8 MiB

View file

@ -0,0 +1,11 @@
/* about:newtab */
@-moz-document url("about:newtab"), url("about:home") {
body {
--newtab-background-color: var(--gnome-window-background) !important;
--newtab-background-color-secondary: var(--gnome-menu-background) !important;
--newtab-primary-action-background: var(--gnome-accent) !important;
background-color: var(--gnome-window-background) !important;
}
}

View file

@ -0,0 +1,16 @@
/* about:privatebrowsing */
@-moz-document url("about:privatebrowsing") {
html.private {
--background-color-canvas: var(--gnome-private-in-content-page-background) !important;
/* Used by headings in promo boxes Firefox shows (like an ad for Firefox Focus) */
--in-content-text-color: var(--gnome-private-text-primary-color) !important;
}
.wordmark {
fill: var(--gnome-private-wordmark) !important;
}
.showPrivate {
color: var(--gnome-private-text-primary-color);
}
}

View file

@ -0,0 +1,262 @@
/* Buttons Issues/Glitches fixes */
@namespace xul "http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul";
/* moz.button size */
moz-button {
--button-size-icon-small: var(--gnome-button-size) !important;
}
/* Menulist */
link[href="chrome://global/skin/menulist.css"] ~ dropmarker {
align-items: center !important;
justify-content: center !important;
}
.button-menu-dropmarker {
appearance: none !important;
margin: 0 !important;
margin-inline-start: 6px !important;
}
/* Remove the header bar buttons' hover styles */
#nav-bar {
--toolbarbutton-active-background: transparent !important;
--toolbarbutton-hover-background: transparent !important;
}
/* Fix notification dropmarker */
.popup-notification-dropmarker dropmarker {
margin-inline-start: 0 !important;
}
.popup-notification-dropmarker > .button-box > hbox {
display: -moz-box !important;
}
/* Fix subviewbutton icon buttons alignment */
.subviewbutton.subviewbutton-iconic:not(.subviewbutton-back, .unified-extensions-item-action-button) {
justify-content: center !important;
}
/* Fix hover background */
#appMenu-fullscreen-button2 > .toolbarbutton-icon {
background: transparent !important;
}
/* Fix unified-extensions-item margin */
toolbar .unified-extensions-item {
margin-inline: 0 3px !important;
}
/* menulist */
#label-box:not([native]) {
font-weight: 400 !important;
padding: 0 8px;
}
dropmarker:not([native]) {
margin-right: 8px;
}
/* Bookmark buttons */
#nav-bar toolbarbutton.bookmark-item {
width: auto !important;
}
#nav-bar toolbarbutton.bookmark-item .toolbarbutton-icon {
margin-left: 6px;
}
#nav-bar toolbarbutton.bookmark-item .toolbarbutton-text {
padding-right: 6px;
}
/* Fix library animation */
#library-animatable-box {
--library-button-height: 46px !important;
--library-icon-x: 1716px !important;
/*--library-icon-x: 1715.9833984375px !important;*/
}
#library-button[animate] > .toolbarbutton-icon {
fill: transparent !important;
}
/* Fix toolbars close icons */
.close-icon:not(.tab-close-button) .toolbarbutton-icon {
height: 16px !important;
width: 16px !important;
margin: 6px !important;
padding: 0 !important;
}
button.close {
margin: 0 !important;
}
/* */
#appMenu-popup .panel-banner-item[notificationid="update-restart"]::after {
display: none !important;
}
/* Identity site popover buttons */
.identity-popup-preferences-button:not(#hack) {
list-style-image: url("chrome://browser/skin/settings.svg") !important;
}
#tracking-protection-preferences-button > .toolbarbutton-text {
padding-inline-end: 0 !important;
}
.protections-popup-footer-button-label {
margin-inline-start: 3px !important;
}
/* Fix findbar buttons issues */
.findbar-container .findbar-find-previous image,
.findbar-container .findbar-find-next image {
margin: 6px !important;
opacity: 1 !important;
}
.findbar-container toolbarbutton:focus {
outline: 0 !important;
}
/* Sidebar header button reset font size */
#sidebar-header {
font-size: 1em !important;
}
/* Sidebar header button sizing */
#sidebar-switcher-target {
flex: unset !important;
}
/* Sidebar header button arrow opacity */
#sidebar-switcher-arrow {
opacity: 1 !important;
}
/* Sidebar history view */
#viewButton {
margin: 0 !important;
margin-inline-start: 6px !important;
}
/* Menulist */
#identity-popup-popup-menulist {
margin-right: 0 !important;
}
/* Auto complete popup button*/
.autocomplete-richlistitem[type="loginsFooter"] {
margin: 4px 4px 0 4px !important;
}
/* Identity popup tracking protection button */
.tracking-protection-button {
margin-inline-end: 0 !important;
}
/* Identity popup delete permission button */
.identity-popup-permission-remove-button {
opacity: 1 !important;
}
/* Identity popup expander button */
#identity-popup-security {
-moz-box-align: center;
}
#identity-popup-security-expander {
width: 34px !important;
}
#identity-popup-security-expander .button-icon {
margin: 0 !important;
}
/* Protections popup */
#protections-popup-info-button {
margin: 0 !important;
margin-inline-end: 0 !important;
}
.protections-popup-footer-icon {
display: none !important;
}
.protections-popup-footer-button-label {
margin-inline-start: 0 !important;
}
#protections-popup-footer-protection-type-label {
margin-inline-end: 0 !important;
margin-block: 0 !important;
}
/* Close button */
.close-icon:not(.tab-close-button) .toolbarbutton-icon {
outline: 0 !important;
}
/* Downloads button */
#downloads-indicator-progress-inner {
background: conic-gradient(var(--gnome-toolbar-icon-fill) var(--download-progress-pcent), transparent var(--download-progress-pcent)) !important;
background-color: var(--gnome-button-active-background) !important;
}
#downloads-indicator-progress-outer,
#downloads-indicator-start-image,
#downloads-indicator-finish-image {
border: 0 !important;
padding: 0 !important;
border-radius: 100% !important;
}
#downloads-indicator-progress-outer,
#downloads-indicator-start-image {
background: var(--gnome-toolbar-border-color) !important;
}
#downloads-indicator-finish-image {
background: var(--gnome-toolbar-icon-fill) !important;
}
#downloads-button[progress="true"] #downloads-indicator-progress-outer {
visibility: visible !important;
}
#downloads-button:not([progress="true"]) #downloads-indicator-icon {
visibility: visible !important;
}
/* Toolbar Animations */
#downloads-button .toolbarbutton-animatable-box {
top: 8px !important;
left: 8px !important;
}
#downloads-button .toolbarbutton-animatable-box,
#downloads-button .toolbarbutton-animatable-image,
#downloads-indicator-progress-inner {
height: 16px !important;
width: 16px !important;
}
#downloads-button .toolbarbutton-animatable-image,
#stop-reload-button .toolbarbutton-animatable-image:not(#hack),
#nav-bar-overflow-button .toolbarbutton-animatable-image:not(#hack) {
--anim-steps: 1 !important;
transform: none !important;
list-style-image: none !important;
display: none !important;
}
/* Panel banner */
#appMenu-popup .panel-banner-item {
margin: 0 0 6px !important;
}
#appMenu-popup .panel-banner-item > .toolbarbutton-text {
margin-inline: 0 !important;
}
/* User menu */
#fxa-toolbar-menu-button .toolbarbutton-badge-stack {
padding: 0 !important;
}
#fxa-avatar-image {
min-height: 24px !important;
width: 24px !important;
}
/* Translation */
#select-translations-panel-settings-button > .toolbarbutton-text {
display: none !important;
}
/* OPTIONAL: Hide unified-extensions-button */
@media -moz-pref("gnomeTheme.hideUnifiedExtensions") {
#unified-extensions-button {
display: none;
}
}

View file

@ -0,0 +1,266 @@
/* Buttons */
@namespace xul "http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul";
/* Override vars */
:root {
/* moz-button */
--button-border-radius: var(--gnome-button-radius) !important;
--button-background-color: var(--gnome-button-background) !important;
--button-background-color-hover: var(--gnome-button-hover-background) !important;
--button-background-color-active: var(--gnome-button-active-background) !important;
--button-background-color-ghost-hover: var(--gnome-hover-color) !important;
--button-background-color-ghost-active: var(--gnome-active-color) !important;
}
/* Hide buttons separator */
#nav-bar .toolbaritem-combined-buttons separator {
display: none !important;
}
#appMenu-popup .toolbaritem-combined-buttons toolbarseparator {
border: 0 !important;
}
/* Buttons */
menulist,
.customizationmode-button,
#nav-bar toolbarbutton:not(#urlbar-zoom-button):not(.subviewbutton):not(.titlebar-button):not(#searchmode-switcher-close, #urlbar-searchmode-switcher),
:root[inFullscreen] .titlebar-button.titlebar-restore,
.subviewbutton.panel-subview-footer,
.panel-footer button,
#downloadsPanel-mainView .download-state .downloadButton,
#appMenu-popup .panel-banner-item,
#appMenu-popup .toolbaritem-combined-buttons toolbarbutton:not(#appMenu-fxa-label),
#context-navigation menuitem,
.identity-popup-preferences-button:not(#hack),
.findbar-container toolbarbutton,
#sidebar-switcher-target,
#viewButton,
.close-icon:not(.tab-close-button),
button.close,
.menulist-label-box,
.expander-down, .expander-up,
.notification-button,
#identity-popup-security-expander,
.panel-info-button,
.panel-button,
#PanelUI-panic-view-button,
.tracking-protection-button,
.dialog-button,
.autocomplete-richlistitem[type="loginsFooter"],
.dialog-button-box button,
.searchbar-engine-one-off-item,
.permission-popup-permission-remove-button,
.button.connect-device,
#item-choose button,
#editBMPanel_newFolderButton,
.unified-extensions-item-menu-button {
-moz-appearance: none !important;
align-items: center !important;
background-color: var(--gnome-button-background) !important;
border-radius: var(--gnome-button-radius) !important;
border: 0 !important;
color: var(--gnome-window-color) !important;
font: menu !important;
font-weight: bold !important;
max-height: var(--gnome-button-size) !important;
min-height: var(--gnome-button-size) !important;
min-width: var(--gnome-button-size) !important;
outline: 0 !important;
padding: 0 1px !important;
transition: background var(--gnome-animation-time);
-moz-box-align: center !important;
&:not([disabled="true"]) {
/* Hover buttons */
&:hover {
outline: 0 !important;
background-color: var(--gnome-button-hover-background) !important;
}
/* Active buttons */
&:active, &.active {
background-color: var(--gnome-button-active-background) !important;
}
/* Checked buttons */
&[selected], &[checked], &[open] {
background-color: var(--gnome-button-checked-background) !important;
&:hover {
background-color: var(--gnome-button-checked-hover-background) !important;
}
&:active {
background-color: var(--gnome-button-checked-active-background) !important;
}
}
}
/* Disabled buttons */
&[disabled="true"] {
opacity: 0.5 !important;
}
&[_moz-menuactive] {
outline: 2px solid var(--gnome-focus-border-color) !important;
outline-offset: -2px !important;
}
}
.subviewbutton-iconic {
-moz-box-pack: center !important;
}
/* Flat Buttons */
#nav-bar toolbarbutton:not(#urlbar-zoom-button):not(.subviewbutton):not(.titlebar-button):not(#searchmode-switcher-close, #urlbar-searchmode-switcher),
:root[inFullscreen] .titlebar-button.titlebar-restore,
.close-icon:not(.tab-close-button),
button.close,
.panel-info-button,
.permission-popup-permission-remove-button,
.unified-extensions-item-menu-button {
background-color: transparent !important;
transition: background var(--gnome-animation-time);
&:not([disabled="true"]) {
/* Hover buttons */
&:hover {
background-color: var(--gnome-hover-color) !important;
}
/* Active buttons */
&:active {
background-color: var(--gnome-active-color) !important;
}
/* Checked buttons */
&[selected], &[checked], &[open] {
background-color: var(--gnome-selected-color) !important;
&:hover {
background-color: var(--gnome-selected-hover-color) !important;
}
&:active {
background-color: var(--gnome-selected-active-color) !important;
}
}
}
/* Disabled buttons */
&[disabled="true"] {
opacity: 0.3 !important;
}
}
/* Buttons with suggested action */
#appMenu-popup .panel-banner-item[notificationid="update-restart"],
button.popup-notification-primary-button:not(#hack),
#editBookmarkPanelDoneButton,
#tracking-action-block,
.button.connect-device {
--gnome-button-background: var(--gnome-button-suggested-background) !important;
--gnome-button-hover-background: var(--gnome-button-suggested-background) !important;
--gnome-button-active-background: var(--gnome-button-suggested-background) !important;
color: white !important;
&:not([disabled="true"]) {
&:hover {
background-image: linear-gradient(rgba(255, 255, 255, .1), rgba(255, 255, 255, .1)) !important;
}
&:active {
background-image: linear-gradient(rgba(0, 0, 0, .2), rgba(0, 0, 0, .2)) !important;
}
}
}
/* Buttons with destructive action */
.panel-footer button#editBookmarkPanelRemoveButton,
#PanelUI-panic-view-button {
--gnome-button-background: var(--gnome-button-destructive-background) !important;
--gnome-button-hover-background: var(--gnome-button-destructive-hover-background) !important;
--gnome-button-active-background: var(--gnome-button-destructive-active-background) !important;
color: var(--gnome-destructive) !important;
}
/* Buttons with margins */
#nav-bar toolbarbutton:not(#urlbar-zoom-button, #urlbar-searchmode-switcher):not(.subviewbutton):not(.titlebar-button),
.subviewbutton.panel-subview-footer:not(:only-of-type),
.panel-footer button:not(:only-of-type):not(:last-child) {
margin: 0 calc(var(--gnome-toolbar-spacing) / 2) !important;
}
.close-icon:not(.tab-close-button) {
margin-left: var(--gnome-toolbar-spacing) !important;
}
/* Text buttons */
menulist,
.customizationmode-button,
#sidebar-switcher-target,
.subviewbutton.panel-subview-footer,
.panel-footer button,
#appMenu-popup .panel-banner-item,
#appMenu-popup #appMenu-zoomReset-button2:not(#hack),
#tracking-protection-preferences-button:not(#hack),
.findbar-container toolbarbutton.findbar-button,
.notification-button,
#PanelUI-panic-view-button,
.tracking-protection-button,
.panel-button,
.dialog-button,
.autocomplete-richlistitem[type="loginsFooter"],
.dialog-button-box button,
.toolbaritem-combined-buttons:is(:not([cui-areatype="toolbar"]), [overflowedItem="true"]) > #appMenu-fxa-label2:not(#hack),
.button.connect-device,
#item-choose button,
#editBMPanel_newFolderButton {
padding: 2px 9px !important;
}
.subviewbutton.panel-subview-footer label,
.panel-footer button,
#appMenu-popup .panel-banner-item .toolbarbutton-text,
#appMenu-popup #appMenu-zoomReset-button2:not(#hack),
#tracking-protection-preferences-button:not(#hack),
.findbar-container toolbarbutton.findbar-button,
.notification-button,
#PanelUI-panic-view-button,
.tracking-protection-button,
.dialog-button,
.autocomplete-richlistitem[type="loginsFooter"],
.dialog-button-box button,
.button.connect-device,
#item-choose button {
text-align: center !important;
}
/* Circle buttons */
#downloadsPanel-mainView .download-state .downloadButton,
.permission-popup-permission-remove-button:not(#hack) {
border-radius: 100% !important;
}
/* Combined buttons */
#nav-bar .toolbaritem-combined-buttons:not(.unified-extensions-item) toolbarbutton:not(:last-of-type):not(#hack),
#appMenu-popup .toolbaritem-combined-buttons:not(.unified-extensions-item) toolbarbutton:not(:last-of-type):not(#appMenu-zoomEnlarge-button),
#context-navigation menuitem:not(:last-of-type),
.findbar-container toolbarbutton.findbar-find-previous,
.findbar-button:not(:last-of-type),
.search-panel-one-offs .searchbar-engine-one-off-item:not(:last-child),
.popup-notification-secondary-button:not([dropmarkerhidden="true"]):not(#hack) {
border-start-end-radius: 0 !important;
border-end-end-radius: 0 !important;
border-right-width: 0 !important;
margin-inline-end: 0 !important;
}
#nav-bar .toolbaritem-combined-buttons:not(.unified-extensions-item) toolbarbutton:not(:first-of-type):not(#hack),
#appMenu-popup .toolbaritem-combined-buttons:not(.unified-extensions-item) toolbarbutton:not(:first-of-type):not(#appMenu-fullscreen-button),
#context-navigation menuitem:not(:first-of-type),
.findbar-container toolbarbutton.findbar-find-previous,
.findbar-container toolbarbutton.findbar-find-next,
.findbar-button:not(:first-of-type),
.search-panel-one-offs .searchbar-engine-one-off-item:not(:first-child),
.popup-notification-dropmarker:not(#hack) {
border-end-start-radius: 0 !important;
border-start-start-radius: 0 !important;
margin-inline-start: 0 !important;
}
#nav-bar .toolbaritem-combined-buttons:not(.unified-extensions-item) {
margin-left: 0 !important;
margin-right: 0 !important;
}

View file

@ -0,0 +1,107 @@
/* Controls */
/* Switchers, Checkboxes, etc. */
@namespace xul "http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul";
/* Checkbox */
input[type="checkbox"],
checkbox:not(.treenode-checkbox) > .checkbox-check {
appearance: none !important;
border: 0 !important;
border-radius: 6px !important;
color: var(--gnome-window-color) !important;
height: 20px !important;
width: 20px !important;
}
input[type="checkbox"]:not(:checked),
checkbox:not(.treenode-checkbox) > .checkbox-check:not([checked]) {
background-color: transparent !important;
box-shadow: inset 0 0 0 2px var(--gnome-trough-background);
}
input[type="checkbox"]:not(:checked):hover,
checkbox:not(.treenode-checkbox) > .checkbox-check:not([checked]):hover {
box-shadow: inset 0 0 0 2px var(--gnome-trough-hover-background);
}
input[type="checkbox"]:checked,
checkbox:not(.treenode-checkbox) > .checkbox-check[checked] {
background-color: var(--gnome-accent-bg) !important;
/* NOTE: var(--gnome-icon-select-symbolic) doesn't load in modal dialogs */
background-image: url("../icons/custom/select-fixed-symbolic.svg") !important;
background-size: 14px !important;
background-repeat: no-repeat;
background-position: center;
fill: white !important;
-moz-context-properties: fill;
}
/* Radio */
input[type="radio"],
radio > .radio-check {
appearance: none !important;
border: 0 !important;
border-radius: 50% !important;
color: var(--gnome-window-color) !important;
height: 20px !important;
padding: 3px !important;
width: 20px !important;
radiogroup:focus-visible radio[focused] > & {
outline: 2px solid var(--gnome-focus-border-color) !important;
outline-offset: 2px !important;
}
}
input[type="radio"][aria-checked="false"],
radio > .radio-check:not([selected]) {
background-color: transparent !important;
box-shadow: inset 0 0 0 2px var(--gnome-trough-background);
}
input[type="radio"][aria-checked="false"]:hover,
radio > .radio-check:not([selected]):hover {
box-shadow: inset 0 0 0 2px var(--gnome-trough-hover-background);
}
input[type="radio"][aria-checked="true"],
radio > .radio-check[selected] {
background-color: var(--gnome-accent-bg) !important;
/* NOTE: var(--gnome-icon-bullet-symbolic) doesn't load in modal dialogs */
background-image: url("../icons/custom/bullet-fixed-symbolic.svg") !important;
background-repeat: no-repeat;
background-position: center;
fill: white !important;
-moz-context-properties: fill;
}
.radio-label-box {
outline: 0 !important;
}
.radio-label {
margin-inline-start: 3px !important;
}
/* Switchers */
.toggle-button {
--toggle-height: 26px !important;
--toggle-width: 48px !important;
--toggle-border-radius: 24px !important;
--toggle-border-color: var(--gnome-trough-background) !important;
--toggle-background-color: var(--gnome-trough-background) !important;
--toggle-background-color-pressed: var(--gnome-accent-bg) !important;
--toggle-dot-height: 22px !important;
--toggle-dot-width: 22px !important;
--toggle-dot-background-color: #FFF !important;
--toggle-dot-background-color-on-pressed: #FFF !important;
--toggle-dot-transform-x: calc(var(--toggle-width) - 4 * var(--toggle-dot-margin) - var(--toggle-dot-width)) !important;
border: 0 !important;
}
.toggle-button::before {
box-shadow: 0 2px 4px rgba(0, 0, 0, .2);
}
link[href="chrome://global/content/elements/moz-toggle.css"] ~ .label-wrapper {
margin-inline: 0 !important;
}
link[href="chrome://global/content/elements/moz-toggle.css"] ~ .description {
--input-space-offset: calc(48px + 12px) !important;
margin-block-start: 0 !important;
}

View file

@ -0,0 +1,126 @@
/* GNOME CSD styles for headerbar on Firefox */
@namespace xul url("http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul");
:root[customtitlebar] {
/* Headerbar top border corners rounded */
&[sizemode="normal"]:not([gtktiledwindow="true"]) #nav-bar {
border-radius: env(-moz-gtk-csd-titlebar-radius, 8px) env(-moz-gtk-csd-titlebar-radius, 8px) 0 0 !important;
}
/* Always show nav bar window buttons*/
#nav-bar > .titlebar-buttonbox-container {
display: flex !important;
}
#toolbar-menubar {
/* Prevent menubar from breaking */
&:not([inactive=true]) {
height: 30px !important;
margin-bottom: 8px;
}
/* Always hide menu bar window buttons*/
& > .titlebar-buttonbox-container {
display: none !important;
}
}
&[inFullscreen] {
/* Remove close and minimize buttons from fullscreen buttons */
.titlebar-buttonbox-container .titlebar-button:not(.titlebar-restore) {
display: none !important;
}
/* Force the restore button to appear regardless of maximize button's status */
&:not([inDOMFullscreen]) {
.titlebar-buttonbox-container {
visibility: visible !important;
}
.titlebar-restore {
display: inherit !important;
}
}
}
&:not([inFullscreen]) {
.titlebar-buttonbox-container {
padding: 0 8px;
}
/* Window buttons style */
.titlebar-button {
background: var(--gnome-button-background) !important;
border-radius: 100% !important;
height: 24px !important;
transition: background var(--gnome-animation-time);
width: 24px !important;
&:not([disabled]):hover {
background: var(--gnome-button-hover-background) !important;
}
&:not([disabled]):active {
background: var(--gnome-button-active-background) !important;
}
&::-moz-window-inactive {
filter: opacity(0.5);
}
}
}
.titlebar-buttonbox-container {
align-items: center;
padding: 0 3px;
.titlebar-buttonbox {
appearance: none !important;
gap: 13px;
.titlebar-button {
padding: 0 !important;
margin: 0 !important;
& > .toolbarbutton-icon {
@media not -moz-pref("gnomeTheme.noThemedIcons") {
background: none !important;
appearance: none !important;
height: 16px !important;
padding: 0 !important;
stroke: none !important;
width: 16px !important;
-moz-context-properties: fill, fill-opacity !important;
}
}
@media -moz-pref("widget.gtk.non-native-titlebar-buttons.enabled") {
&:-moz-lwtheme { /* Override config */
& > .toolbarbutton-icon {
appearance: auto !important
}
}
}
}
}
}
.titlebar-spacer {
display: none;
}
}
/* OPTIONAL: Allow draging the window from headerbar buttons */
@media -moz-pref("gnomeTheme.dragWindowHeaderbarButtons") {
:root[customtitlebar] #nav-bar *,
:root[customtitlebar] #titlebar .titlebar-button {
-moz-window-dragging: drag;
}
/* Avoid window dragging from urlbar */
:root[customtitlebar] #nav-bar .urlbar-input-box,
:root[customtitlebar] #nav-bar .urlbar-input-box * {
-moz-window-dragging: no-drag !important;
}
}

View file

@ -0,0 +1,207 @@
/* Dialogs */
@namespace xul "http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul";
window {
padding: 0 !important;
width: initial !important;
}
dialog {
padding: var(--gnome-dialog-padding) !important;
}
/* Dialog box */
.dialogBox {
border-radius: var(--gnome-dialog-radius) !important;
margin-top: 0 !important;
}
.dialogBox[resizable="true"] {
margin-top: var(--gnome-dialog-padding) !important;
}
.dialogOverlay[topmost="true"]:not(.dialogOverlay-window-modal-dialog-subdialog), #window-modal-dialog::backdrop {
background-color: rgba(0, 0, 0, .5) !important;
}
/* Modal dialogs */
#window-modal-dialog {
display: flex;
justify-content: center;
align-items: center;
height: 100vh;
}
window[role="dialog"] {
background: var(--gnome-menu-background) !important;
border: 0 !important;
box-shadow: var(--gnome-menu-shadow) !important;
padding: 0 !important;
}
dialog#handling {
display: flex;
flex-direction: column;
}
.tab-prompt-dialog .dialogOverlay {
justify-content: center;
}
/* Content */
dialog {
&:not(.sizeDetermined) {
display: grid !important;
justify-content: stretch;
min-width: fit-content;
}
#titleContainer {
justify-content: center !important;
}
#titleCropper {
&[overflown] {
mask-image: none !important;
#titleText {
display: inline-block !important;
max-width: 100% !important;
overflow: hidden !important;
text-overflow: ellipsis;
}
}
&:not([nomaskfade]) {
display: initial !important;
}
}
#titleText {
font-size: 20px !important;
font-weight: 800 !important;
text-align: center !important;
white-space: initial !important;
}
.titleIcon {
display: none;
}
#description-box {
text-align: center;
#description {
font-size: 20px !important;
font-weight: 800 !important;
}
}
#infoContainer {
text-align: center;
}
#checkboxContainer {
align-items: center !important;
}
}
/* Buttons */
.dialog-button-box {
background: transparent !important;
display: flex !important;
gap: 12px;
margin-top: auto;
padding: 0 !important;
/* if dialog has at least 3 buttons */
&:has(button:not([hidden])[dlgtype="extra1"]) {
min-width: 40rem;
}
button {
min-height: 44px !important;
max-height: unset !important;
padding: 10px 14px !important;
margin: 0 !important;
border-radius: 12px !important;
flex: 1;
border-bottom: 0 !important;
.button-box {
max-width: 100%;
.button-text {
max-width: 100%;
&::before {
max-width: 100% !important;
overflow: hidden !important;
text-overflow: ellipsis;
}
}
}
}
.button-spacer {
display: none;
}
}
/* Browser dialogs */
#dialogGrid {
padding-bottom: 8px !important;
}
/* Bookmark dialog */
#bookmarkpropertiesdialog #editBookmarkPanelContent {
padding-bottom: var(--gnome-dialog-padding) !important;
}
/* Hadler dialog */
#os-default-handler {
image {
display: none !important;
}
.name {
font-weight: normal !important;
}
}
/* Fullscreen warning */
#fullscreen-warning {
background: rgba(0, 0, 0, 0.7) !important;
border-radius: 150px !important;
border: none !important;
color: rgba(255, 255, 255, .9) !important;
padding: 6px 12px !important;
&::before {
background-image: var(--gnome-icon-channel-secure-symbolic) !important;
height: 16px !important;
width: 16px !important;
}
.pointerlockfswarning-domain-text {
font-size: 16px !important;
font-weight: normal !important;
margin: 0 12px 0 6px !important;
}
}
#fullscreen-exit-button {
appearance: none !important;
background-color: rgba(255, 255, 255, .09) !important;
border-radius: var(--gnome-button-radius) !important;
border: 0 !important;
padding: 2px 16px !important;
height: var(--gnome-button-size) !important;
min-height: var(--gnome-button-size) !important;
color: rgba(255, 255, 255, .9) !important;
font-weight: bold !important;
transition: background var(--gnome-animation-time);
&:hover {
background-color: rgba(255, 255, 255, .135) !important;
}
&:active {
background-color: rgba(255, 255, 255, .27) !important;
}
}

View file

@ -0,0 +1,133 @@
/* Entries */
@namespace xul "http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul";
/* Entries */
input[type="text"]:not(.tree-input),
input[type="password"],
#urlbar,
#searchbar,
link[href="chrome://global/content/elements/moz-input-common.css"] ~ #input,
.findbar-textbox,
.tabsFilter,
.popup-notification-body input {
-moz-appearance: none !important;
background: var(--gnome-entry-background) !important;
outline: 2px solid transparent !important;
border: 0 !important;
border-radius: var(--gnome-entry-radius) !important;
box-shadow: none !important;
color: var(--gnome-entry-color) !important;
height: var(--gnome-entry-height) !important;
max-height: var(--gnome-entry-height) !important;
margin: 0 !important;
padding: 6px 9px !important;
box-sizing: border-box;
transition-property: outline, outline-offset;
transition-duration: var(--gnome-animation-time);
/* Error */
&[status="notfound"] {
color: var(--gnome-error) !important;
}
&:-moz-window-inactive {
color: var(--gnome-inactive-entry-color) !important;
outline: 2px solid transparent !important;
}
}
/* Entries focused */
input[type="text"]:not(.tree-input):focus,
input[type="password"]:focus,
#urlbar[breakout][breakout-extend],
#urlbar[focused]:not([suppress-focus-border]),
#searchbar:focus-within,
link[href="chrome://global/content/elements/moz-input-common.css"] ~ #input:focus,
.findbar-textbox[focused],
.findbar-textbox:focus,
.tabsFilter[focused],
.popup-notification-body input:focus {
outline: 2px solid var(--gnome-entry-focused-border-color) !important;
outline-offset: -2px;
/* Error */
&[status="notfound"] {
outline-color: var(--gnome-entry-error-focused-border-color) !important;
}
}
/* Entries combined */
.findbar-textbox:not(.minimal) {
border-top-right-radius: 0 !important;
border-bottom-right-radius: 0 !important;
border-right-width: 0 !important;
}
/* Entry button */
.identity-box-button,
#tracking-protection-icon-container,
#notification-popup-box,
.urlbar-page-action,
.urlbar-icon {
fill-opacity: 0.8 !important;
transition-property: fil, fill-opacity, opacity;
transition-duration: var(--gnome-animation-time);
}
.identity-box-button:hover:not([open="true"]),
#tracking-protection-icon-container:hover:not([open="true"]),
#notification-popup-box:hover:not([open="true"]),
.urlbar-page-action:hover:not([open="true"]),
.urlbar-page-action:hover:not([open="true"]) .urlbar-icon,
.urlbar-icon:not([disabled]):hover {
background: none !important;
fill-opacity: 1 !important;
}
.identity-box-button:hover:active,
.identity-box-button[open=true],
#tracking-protection-icon-container:hover:active,
#tracking-protection-icon-container[open=true],
#notification-popup-box:hover:active,
#notification-popup-box[open=true],
.urlbar-page-action:hover:active,
.urlbar-page-action[open=true],
.urlbar-page-action:hover:active .urlbar-icon,
.urlbar-page-action[open=true] .urlbar-icon {
background: none !important;
fill-opacity: 1 !important;
}
/* Entries fixes */
#urlbar-container, #search-container {
padding: 0 !important;
margin: 0 !important;
}
.urlbar-input-container {
background: transparent !important;
border: 0 !important;
}
#urlbar, #searchbar {
margin: 0 calc(var(--gnome-toolbar-spacing) / 2) !important;
padding: 0 3px !important;
&[unifiedsearchbutton-available=""] {
padding-inline-start: 0 !important;
}
}
.searchbar-textbox {
border: 0 !important;
padding: 0 !important;
margin: 0 !important;
min-height: auto !important;
}
#searchbar > .searchbar-textbox[focused] .searchbar-search-button:not(#hack) {
margin: 0 !important;
}
#urlbar[focused]:not([suppress-focus-border]) > #urlbar-background {
outline: 0 !important;
}
link[href="chrome://global/content/elements/moz-input-common.css"] ~ #input {
width: 100% !important;
}

View file

@ -0,0 +1,42 @@
/* Find bar */
@namespace xul "http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul";
findbar {
padding: var(--gnome-toolbar-padding) !important;
position: relative;
.findbar-container {
align-items: center;
display: flex;
justify-content: flex-start;
position: relative;
flex-direction: row;
margin: 0 !important;
margin-inline-end: var(--gnome-toolbar-padding) !important;
height: auto !important;
.findbar-textbox-wrapper {
order: 0;
}
.findbar-label.found-matches {
font-weight: normal !important;
order: 1;
}
.findbar-label.findbar-find-status {
font-weight: normal !important;
order: 4;
}
checkbox {
order: 2;
}
.findbar-entire-word {
margin-inline-end: auto !important;
}
}
.findbar-closebutton {
margin: 0 !important;
}
}

View file

@ -0,0 +1,50 @@
/* Header bar */
@namespace xul "http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul";
/* Headerbar */
#nav-bar {
background: var(--gnome-headerbar-background) !important;
border: 0 !important;
padding: var(--gnome-toolbar-padding) calc(var(--gnome-toolbar-padding) / 2) !important;
}
/* Add private window headerbar indicator */
:root[privatebrowsingmode="temporary"] #nav-bar toolbarspring:first-of-type:before {
background: var(--gnome-icon-eye-not-looking-symbolic) no-repeat;
background-size: 64px 64px;
content: "";
display: block;
position: absolute;
width: 64px;
height: 64px;
top: 0;
transform: translate(15px, -9px);
fill: var(--gnome-window-color) !important;
fill-opacity: 0.15 !important;
-moz-context-properties: fill, fill-opacity;
}
/* Hide tabsbar default private browsing indicator */
.private-browsing-indicator-with-label {
display: none !important;
}
/* Overlay headerbar on fullscreen */
@media -moz-pref("browser.fullscreen.autohide") {
#navigator-toolbox[inFullscreen] {
position: fixed !important;
transition: margin var(--gnome-animation-time) ease-in-out 0s !important;
line-height: 0;
z-index: 1;
width: 100vw;
}
#navigator-toolbox[inFullscreen]:hover,
#navigator-toolbox[inFullscreen]:focus-within {
margin-top: 0 !important;
}
#navigator-toolbox[inFullscreen] > * {
line-height: normal;
}
}

View file

@ -0,0 +1,604 @@
/* Replace icons */
@namespace xul "http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul";
/* Icons color */
.toolbarbutton-icon:not([class*="identity-color-"] .toolbarbutton-icon),
link[href="chrome://global/content/elements/moz-button.css"] + button[type~="icon"],
menuitem:not([class*='identity']) .menu-icon,
#vertical-tabs-newtab-button .toolbarbutton-icon,
.urlbar-page-action:not([readeractive]),
.urlbar-icon,
#blocked-permissions-container > .blocked-permission-icon,
.button-icon:not(#hack),
.bookmark-item[container],
.notification-anchor-icon,
.protections-popup-category::after,
.protections-popup-footer-icon,
#identity-popup-mainView .subviewbutton-nav::after,
.widget-overflow-list .subviewbutton-nav::after,
.PanelUI-subView .subviewbutton-nav::after,
#identity-popup[connection^="secure"] .identity-popup-security-connection,
.panel-info-button > image,
.menu-right,
.expander-down > .button-box,
#sidebar-switcher-arrow,
#sidebar-icon,
#viewButton .button-menu-dropmarker,
.menulist-label-box:after,
.expander-up > .button-box,
#urlbar:not(.searchButton) > .urlbar-input-container > #identity-box[pageproxystate="invalid"] > #identity-icon,
.searchbar-search-icon,
.textbox-search-sign,
treechildren::-moz-tree-twisty,
treechildren::-moz-tree-image,
.item.client .item-twisty-container,
menuitem[type="checkbox"],
menuitem[type="checkbox"][checked="true"],
menuitem[type="radio"],
menuitem[type="radio"][checked="true"],
.tab-icon-overlay,
.tab-icon-stack::before,
.close-icon:not(.tab-close-button),
button.close::before,
#urlbar-search-mode-indicator-close,
#tracking-protection-icon,
#identity-icon,
#permissions-granted-icon,
#downloads-indicator-icon,
.textbox-search-clear,
.urlbarView-type-icon,
radio > .radio-check,
link[href="chrome://global/skin/dropmarker.css"] + image,
:root[customtitlebar] .titlebar-buttonbox .titlebar-button .toolbarbutton-icon {
fill: var(--gnome-toolbar-icon-fill) !important;
-moz-context-properties: fill;
}
.urlbar-icon:-moz-window-inactive,
#urlbar:-moz-window-inactive image,
.toolbarbutton-icon:-moz-window-inactive,
:root[customtitlebar] .titlebar-buttonbox .titlebar-button .toolbarbutton-icon:-moz-window-inactive {
opacity: 0.5 !important;
}
/* Dimmed icons */
#urlbar:not(.searchButton) > .urlbar-input-container > #identity-box[pageproxystate="invalid"] > #identity-icon,
.searchbar-search-icon,
.textbox-search-sign,
.textbox-search-clear {
opacity: 0.7 !important;
}
.textbox-search-clear:hover {
opacity: 1 !important;
}
/* Fix icons sizes */
.permission-popup-permission-remove-button > .button-box > .button-icon,
.menu-iconic-icon,
link[href="chrome://global/skin/dropmarker.css"] + image,
.toolbarbutton-combined-buttons-dropmarker {
height: 16px !important;
width: 16px !important;
}
/* Fix icon color */
#sidebar-icon {
opacity: 1 !important;
}
treechildren::-moz-tree-twisty,
treechildren::-moz-tree-image {
fill-opacity: 1 !important;
}
/* Icons active color */
treechildren::-moz-tree-twisty(selected, focus),
treechildren::-moz-tree-twisty(selected, focus, open),
treechildren::-moz-tree-image(selected, focus),
treechildren::-moz-tree-image(selected, focus, open),
.item.client:focus .item-twisty-container,
.sidebar-panel[lwt-sidebar-brighttext] .sidebar-placesTreechildren::-moz-tree-twisty,
.sidebar-panel[lwt-sidebar-brighttext] .sidebar-placesTreechildren::-moz-tree-twisty(open) {
fill: #fff !important;
}
/* Fix flat buttons icons aproach */
button.close::before {
content: "";
display: block;
background-position: center center;
background-repeat: no-repeat;
height: 100%;
width: 100%;
}
/* Fix main menu zoom controls icons */
#appMenu-zoom-controls2 .toolbarbutton-icon {
padding: 0 !important;
padding-block: 0 !important;
padding-inline: 0 !important;
}
@media not -moz-pref("gnomeTheme.noThemedIcons") {
/* Scroll icons */
#scrollbutton-up {
list-style-image: var(--scrollbutton-icon-name) !important;
}
#scrollbutton-down {
list-style-image: var(--scrollbutton-icon-name) !important;
}
arrowscrollbox {
--scrollbutton-icon-name: var(--gnome-icon-pan-down-symbolic);
}
arrowscrollbox[orient="horizontal"] {
--scrollbutton-icon-name: var(--gnome-icon-pan-start-symbolic);
}
/* Popovers subview menu arrow */
#identity-popup-mainView .subviewbutton-nav::after,
.widget-overflow-list .subviewbutton-nav::after,
.PanelUI-subView .subviewbutton-nav::after,
.protections-popup-category::after,
.subviewbutton-back .toolbarbutton-icon,
.menu-right,
menupopup > menu::after {
fill-opacity: 1 !important;
opacity: .3;
}
.menu-right {
-moz-appearance: none !important;
list-style-image: var(--gnome-icon-go-next-symbolic) !important;
width: 16px !important;
height: 16px !important;
}
#identity-popup-mainView .subviewbutton-nav::after,
.widget-overflow-list .subviewbutton-nav::after,
.PanelUI-subView .subviewbutton-nav::after,
menupopup > menu::after {
content: "" !important;
background: var(--gnome-icon-go-next-symbolic) !important;
background-size: contain;
height: 16px;
width: 16px;
}
.protections-popup-category::after {
content: var(--gnome-icon-go-next-symbolic) !important;
}
/* Popovers subview back button */
.subviewbutton-back {
list-style-image: var(--gnome-icon-go-previous-symbolic) !important;
}
/* Arrow down buttons */
.expander-down > .button-box,
#sidebar-switcher-arrow,
#viewButton .button-menu-dropmarker,
.toolbarbutton-combined-buttons-dropmarker {
-moz-appearance: none !important;
list-style-image: var(--gnome-icon-pan-down-symbolic) !important;
}
.popup-notification-dropmarker dropmarker {
-moz-appearance: none !important;
content: var(--gnome-icon-pan-down-symbolic) !important;
}
#sidebar-switcher-arrow,
#viewButton .button-menu-dropmarker {
-moz-appearance: none !important;
list-style-image: var(--gnome-icon-pan-down-symbolic) !important;
width: 16px !important;
height: 16px !important;
}
.menulist-label-box:after,
link[href="chrome://global/skin/menulist.css"] ~ dropmarker {
content: var(--gnome-icon-pan-down-symbolic) !important;
}
/* Arrow up buttons */
.expander-up > .button-box {
list-style-image: var(--gnome-icon-pan-up-symbolic) !important;
}
/* Search entries */
#urlbar:not(.searchButton) > .urlbar-input-container > #identity-box[pageproxystate="invalid"] > #identity-icon,
.searchbar-search-icon,
.textbox-search-sign {
list-style-image: url(../icons/edit-find-symbolic.svg) !important;
}
.textbox-search-sign {
margin: 3px 0;
max-height: 16px !important;
width: 16px !important;
}
/* Findbar */
.findbar-find-previous {
list-style-image: var(--gnome-icon-go-up-symbolic) !important;
}
.findbar-find-next {
list-style-image: var(--gnome-icon-go-down-symbolic) !important;
}
/* Tree views */
treechildren::-moz-tree-twisty,
.item.client .item-twisty-container {
list-style-image: var(--gnome-icon-pan-end-symbolic) !important;
width: 16px !important;
height: 16px !important;
}
.item.client .item-twisty-container {
background-image: var(--gnome-icon-pan-end-symbolic) !important;
}
treechildren::-moz-tree-twisty(open) {
list-style-image: var(--gnome-icon-pan-down-symbolic) !important;
}
.item.client.closed .item-twisty-container {
background-image: var(--gnome-icon-pan-down-symbolic) !important;
}
treechildren::-moz-tree-image(title, container),
treechildren::-moz-tree-image(title, open) {
list-style-image: var(--gnome-icon-folder-symbolic) !important;
}
treechildren::-moz-tree-image(title, query, dayContainer),
treechildren::-moz-tree-image(query, OrganizerQuery_history____v) {
list-style-image: var(--gnome-icon-preferences-system-time-symbolic) !important;
}
/* Menu checkbox */
menuitem[type="checkbox"] {
list-style-image: none !important;
}
menuitem[type="checkbox"][checked="true"] {
list-style-image: var(--gnome-icon-select-symbolic) !important;
}
menuitem[type="checkbox"][disabled="true"] .menu-icon {
opacity: 0.5;
}
/* Menu radio */
menuitem[type="radio"] {
list-style-image: none !important;
}
menuitem[type="radio"][checked="true"] {
list-style-image: var(--gnome-icon-bullet-symbolic) !important;
}
menuitem[type="radio"] .menu-icon {
border-radius: 100%;
border: 1px solid var(--gnome-toolbar-icon-fill);
}
menuitem[type="radio"][disabled="true"] .menu-icon {
opacity: 0.5;
}
/* Dropmarker */
link[href="chrome://global/skin/dropmarker.css"] + image {
list-style-image: var(--gnome-icon-pan-down-symbolic) !important;
}
/* Close button */
.close-icon:not(.tab-close-button),
.identity-popup-permission-remove-button .button-icon,
.permission-popup-permission-remove-button > .button-box > .button-icon {
list-style-image: var(--gnome-icon-window-close-symbolic) !important;
}
#urlbar-search-mode-indicator-close,
#searchmode-switcher-close,
button.close::before {
background-image: var(--gnome-icon-window-close-symbolic) !important;
}
@media (prefers-color-scheme: light) {
.notificationbox-stack notification[type="critical"] .close-icon:not(.tab-close-button):not(:hover) {
fill: #fff !important;
}
}
@media (prefers-color-scheme: dark) {
.notificationbox-stack notification[type="warning"] .close-icon:not(.tab-close-button):not(:hover) image {
fill: rgb(46, 52, 54) !important;
}
}
moz-button.close {
--message-bar-icon-close-url: var(--gnome-icon-window-close-symbolic) !important;
}
/* Window buttons */
:root[customtitlebar] .titlebar-buttonbox .titlebar-close .toolbarbutton-icon {
list-style-image: var(--gnome-icon-window-close-symbolic) !important;
}
:root[customtitlebar] .titlebar-buttonbox .titlebar-max .toolbarbutton-icon {
list-style-image: var(--gnome-icon-window-maximize-symbolic) !important;
}
:root[customtitlebar] .titlebar-buttonbox .titlebar-restore .toolbarbutton-icon {
list-style-image: var(--gnome-icon-window-restore-symbolic) !important;
}
:root[customtitlebar][inFullscreen] .titlebar-buttonbox .titlebar-restore .toolbarbutton-icon {
background-image: none !important;
list-style-image: var(--gnome-icon-view-restore-symbolic) !important;
}
:root[customtitlebar] .titlebar-buttonbox .titlebar-min .toolbarbutton-icon {
list-style-image: var(--gnome-icon-window-minimize-symbolic) !important;
}
/* Sound icons */
.tab-icon-overlay[soundplaying] {
list-style-image: var(--gnome-icon-audio-speakers-symbolic) !important;
}
.tab-icon-overlay[muted] {
list-style-image: var(--gnome-icon-audio-volume-muted-symbolic) !important;
}
.tab-icon-overlay[activemedia-blocked] {
list-style-image: var(--gnome-icon-play-large-disabled-symbolic) !important;
}
/* Firefox View */
#firefox-view-button {
list-style-image: var(--gnome-icon-firefox-symbolic) !important;
}
/* Private browsing button */
#privatebrowsing-button {
list-style-image: var(--gnome-icon-eye-not-looking-symbolic) !important;
}
/* Sidebar button */
#sidebar-button:-moz-locale-dir(ltr):not([positionend]) .toolbarbutton-icon, #sidebar-button:-moz-locale-dir(rtl)[positionend] .toolbarbutton-icon {
list-style-image: var(--gnome-icon-sidebar-show-symbolic) !important;
}
#sidebar-button .toolbarbutton-icon {
list-style-image: var(--gnome-icon-sidebar-show-right-symbolic);
}
/* Back button */
#nav-bar #back-button,
#context-back {
list-style-image: var(--gnome-icon-go-previous-symbolic) !important;
}
/* Forward button */
#nav-bar #forward-button,
#context-forward,
#urlbar-go-button,
.search-go-button {
list-style-image: var(--gnome-icon-go-next-symbolic) !important;
}
/* Menu button */
#PanelUI-menu-button {
list-style-image: var(--gnome-icon-open-menu-symbolic) !important;
}
/* New tab button */
#new-tab-button {
list-style-image: var(--gnome-icon-tab-new-symbolic) !important;
}
#tabs-newtab-button,
#TabsToolbar #new-tab-button,
#vertical-tabs-newtab-button {
list-style-image: var(--gnome-icon-list-add-symbolic) !important;
}
/* Home button */
#home-button {
list-style-image: var(--gnome-icon-user-home-symbolic) !important;
}
/* Preferences button */
#preferences-button,
.search-setting-button > .button-box > .button-icon,
.unified-extensions-item-menu-button.subviewbutton,
.translations-panel-settings-gear-icon > .toolbarbutton-icon {
list-style-image: var(--gnome-icon-settings-symbolic) !important;
}
/* Tabs sync */
#sync-button,
#sidebar-box[sidebarcommand="viewTabsSidebar"] > #sidebar-header > #sidebar-switcher-target > #sidebar-icon,
.urlbarView-row[source="tabs"] > .urlbarView-row-inner > .urlbarView-no-wrap > .urlbarView-favicon,
#urlbar-engine-one-off-item-tabs {
list-style-image: var(--gnome-icon-tab-symbolic) !important;
}
/* Fullscreen button */
#fullscreen-button,
#appMenu-fullscreen-button2 {
list-style-image: var(--gnome-icon-view-fullscreen-symbolic) !important;
}
/* Zoom out button */
#zoom-out-button,
#appMenu-zoomReduce-button2 {
list-style-image: var(--gnome-icon-zoom-out-symbolic) !important;
}
/* Zoom in button */
#zoom-in-button,
#appMenu-zoomEnlarge-button2 {
list-style-image: var(--gnome-icon-zoom-in-symbolic) !important;
}
/* Developer button */
#developer-button {
list-style-image: var(--gnome-icon-build-configure-symbolic) !important;
}
/* Email link button */
#email-link-button {
list-style-image: var(--gnome-icon-mail-unread-symbolic) !important;
}
/* Print button */
#print-button {
list-style-image: var(--gnome-icon-printer-symbolic) !important;
}
/* Addons button */
#unified-extensions-button,
#add-ons-button,
#addons-notification-icon,
.install-icon {
list-style-image: var(--gnome-icon-application-x-addon-symbolic) !important;
}
/* Find button */
#find-button {
list-style-image: var(--gnome-icon-edit-find-symbolic) !important;
}
/* New window button */
#new-window-button {
list-style-image: var(--gnome-icon-window-new-symbolic) !important;
}
/* Bookmarks menu button */
#bookmarks-menu-button,
#sidebar-box[sidebarcommand="viewBookmarksSidebar"] > #sidebar-header > #sidebar-switcher-target > #sidebar-icon,
.urlbarView-row[source="bookmarks"] > .urlbarView-row-inner > .urlbarView-no-wrap > .urlbarView-favicon,
#urlbar-engine-one-off-item-bookmarks {
list-style-image: var(--gnome-icon-starred-symbolic) !important;
}
#context-bookmarkpage[starred="true"],
#star-button[starred] {
list-style-image: var(--gnome-icon-starred-symbolic) !important;
}
#context-bookmarkpage,
#star-button {
list-style-image: var(--gnome-icon-non-starred-symbolic) !important;
}
#star-button[starred] {
fill: var(--gnome-toolbar-star-button) !important;
}
/* Privacy */
#print-button {
list-style-image: var(--gnome-icon-printer-symbolic) !important;
}
/* Picture-in-picture */
#picture-in-picture-button > .urlbar-icon {
list-style-image: var(--gnome-icon-pip-in-symbolic) !important;
}
#picture-in-picture-button[pipactive] > .urlbar-icon {
list-style-image: var(--gnome-icon-pip-out-symbolic) !important;
}
/* Read mode */
#reader-mode-button > .urlbar-icon {
list-style-image: var(--gnome-icon-newspaper-symbolic) !important;
}
#reader-mode-button[readeractive] > .urlbar-icon {
fill: var(--gnome-accent) !important;
}
/* Blocked media */
.autoplay-media-icon.blocked-permission-icon {
list-style-image: var(--gnome-icon-play-large-disabled-symbolic) !important;
}
/* DRM */
.drm-icon {
list-style-image: var(--gnome-icon-chain-link-symbolic) !important;
}
/* History button */
#history-panelmenu,
#sidebar-box[sidebarcommand="viewHistorySidebar"] > #sidebar-header > #sidebar-switcher-target > #sidebar-icon,
.urlbarView-row[source="history"] > .urlbarView-row-inner > .urlbarView-no-wrap > .urlbarView-favicon,
#urlbar-engine-one-off-item-history {
list-style-image: var(--gnome-icon-preferences-system-time-symbolic) !important;
}
/* Forget history */
#panic-button {
list-style-image: var(--gnome-icon-history-undo-symbolic) !important;
}
/* All tabs button */
#alltabs-button {
list-style-image: var(--gnome-icon-pan-down-symbolic) !important;
}
/* Cut button */
#cut-button,
#appMenu-cut-button {
list-style-image: var(--gnome-icon-edit-cut-symbolic) !important;
}
/* Copy button */
#copy-button,
#appMenu-copy-button {
list-style-image: var(--gnome-icon-edit-copy-symbolic) !important;
}
/* Paste button */
#paste-button,
#appMenu-paste-button {
list-style-image: var(--gnome-icon-edit-paste-symbolic) !important;
}
/* Overflow button */
#nav-bar-overflow-button {
list-style-image: var(--gnome-icon-pan-down-symbolic) !important;
}
/* Reload */
#reload-button,
.downloadIconRetry > .button-box > .button-icon,
#context-reload {
list-style-image: var(--gnome-icon-view-refresh-symbolic) !important;
}
/* Stop */
#stop-button,
.downloadIconCancel > .button-box > .button-icon,
#context-stop {
list-style-image: var(--gnome-icon-process-stop-symbolic) !important;
}
/* Downlaod */
#downloads-button,
#downloads-indicator-icon {
list-style-image: var(--gnome-icon-folder-download-symbolic) !important;
}
/* Info */
.panel-info-button:not(.translations-panel-settings-gear-icon) > image,
#identity-icon {
list-style-image: var(--gnome-icon-info-outline-symbolic) !important;
}
.tabbrowser-tab[image="chrome://global/skin/icons/info.svg"]:not([busy]):not([progress]) .tab-icon-stack::before {
content: "";
height: 16px;
width: 16px;
background-image: var(--gnome-icon-info-outline-symbolic) !important;
}
/* Password */
#password-notification-icon {
list-style-image: var(--gnome-icon-key-symbolic) !important;
}
/* Url Bar icons */
#urlbar:not(.searchButton) > .urlbar-input-container > #identity-box[pageproxystate="invalid"] #identity-icon {
list-style-image: var(--gnome-icon-edit-find-symbolic) !important;
}
.urlbar-input-container[pageproxystate="valid"] > #tracking-protection-icon-container > #tracking-protection-icon-box > #tracking-protection-icon {
list-style-image: var(--gnome-icon-security-high-symbolic) !important;
}
.urlbar-input-container[pageproxystate="valid"] > #tracking-protection-icon-container > #tracking-protection-icon-box[hasException] > #tracking-protection-icon {
list-style-image: var(--gnome-icon-security-low-symbolic) !important;
}
.urlbar-input-container[pageproxystate="valid"] > #tracking-protection-icon-container > #tracking-protection-icon-box:not([hasException])[active] > #tracking-protection-icon {
list-style-image: var(--gnome-icon-security-high-symbolic) !important;
}
#identity-box[pageproxystate="valid"].verifiedDomain #identity-icon,
#identity-box[pageproxystate="valid"].mixedActiveBlocked #identity-icon {
list-style-image: var(--gnome-icon-channel-secure-symbolic) !important;
}
#identity-box[pageproxystate="valid"].notSecure #identity-icon,
#identity-box[pageproxystate="valid"].mixedActiveContent #identity-icon,
#identity-box[pageproxystate="valid"].httpsOnlyErrorPage #identity-icon,
#identity-box[pageproxystate="valid"].certUserOverridden #identity-icon {
list-style-image: var(--gnome-icon-channel-insecure-symbolic) !important;
}
#identity-popup[connection^="secure"] .identity-popup-security-connection {
list-style-image: var(--gnome-icon-channel-secure-symbolic) !important;
}
#identity-popup[connection="secure-cert-user-overridden"] .identity-popup-security-connection,
.identity-popup-security-connection {
list-style-image: var(--gnome-icon-channel-insecure-symbolic) !important;
}
#permissions-granted-icon {
list-style-image: var(--gnome-icon-general-properties-symbolic) !important;
}
.popup-notification-icon[popupid="web-notifications"], .desktop-notification-icon {
list-style-image: var(--gnome-icon-chat-symbolic) !important;
}
#reader-mode-button {
list-style-image: var(--gnome-icon-newspaper-symbolic) !important;
}
.urlbar-icon {
margin: 2px 0 !important;
}
/* Fix for extensions icons */
@media (prefers-color-scheme: dark) {
.webextension-browser-action {
list-style-image: var(--webextension-menupanel-image-light, inherit) !important;
}
}
/* Folder icon */
.bookmark-item[container],
.downloadIconShow > .button-box > .button-icon {
list-style-image: var(--gnome-icon-folder-symbolic) !important;
}
/* Text clear */
.textbox-search-clear {
content: var(--gnome-icon-edit-clear-symbolic) !important;
}
}

View file

@ -0,0 +1,51 @@
/* Lists */
@namespace xul "http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul";
/* TODO: create list color vars */
/* List container */
#permission-popup-permission-list,
richlistbox#items {
--in-content-item-selected: var(--gnome-accent-bg) !important;
--in-content-item-selected-text: #fff !important;
background: var(--gnome-card-background) !important;
border: 0 !important;
border-radius: var(--gnome-card-radius) !important;
padding: 0 !important;
overflow: hidden;
}
richlistbox#items {
box-shadow: 0 0 0 1px rgba(0, 0, 0, .03),
0 1px 3px 1px rgba(0, 0, 0, .07),
0 2px 6px 2px rgba(0, 0, 0, .03);
}
/* List item */
.permission-popup-permission-item,
richlistbox#items richlistitem {
padding: var(--gnome-toolbar-padding) !important;
margin: 0 !important;
}
.permission-popup-permission-list-anchor {
padding: 0 !important;
}
.permission-popup-permission-list-anchor:not(:has(.permission-popup-permission-item)) {
visibility: collapse;
}
richlistbox#items richlistitem:not(:last-child) {
border-bottom: 1px solid var(--gnome-card-shade-color);
}
.permission-popup-permission-list-anchor:not(#permission-popup-permission-list-default-anchor):has(.permission-popup-permission-item) {
border-top: 1px solid var(--gnome-card-shade-color);
}
#permission-popup-permission-list-default-anchor:empty + .permission-popup-permission-list-anchor {
border: 0 !important;
}
/* Fix list buttons on selected state */
@media (prefers-color-scheme: light) {
richlistbox#items richlistitem[selected=true] button {
filter: invert() brightness(200%) !important;
}
}

View file

@ -0,0 +1,343 @@
/* Popups contents syles */
@namespace xul "http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul";
/* Main menu fxa */
#appMenu-fxa-status[fxastatus="signedin"] > #appMenu-fxa-label {
padding-left: 22px !important;
margin-inline-start: -22px !important;
}
#appMenu-fxa-status[fxastatus="signedin"] > #appMenu-fxa-avatar {
margin-inline-start: 5px !important;
}
#appMenu-fxa-status2[fxastatus] > #appMenu-fxa-label2 > vbox > #appMenu-header-description, #appMenu-fxa-text {
font-weight: 400 !important;
}
/* Style main context menu & buttons */
#context-navigation {
padding: 0;
}
#context-navigation > menuitem > .menu-iconic-left {
margin: auto !important;
}
#context-navigation menuitem {
--toolbarbutton-active-background: transparent !important;
--toolbarbutton-hover-background: transparent !important;
}
/* Main menu */
#appMenu-popup .panel-banner-item:after {
-moz-box-ordinal-group: 0;
margin: 0 8px 0 0 !important;
}
#appMenu-popup .toolbaritem-combined-buttons {
margin-inline-end: 0 !important;
}
#appMenu-popup .toolbaritem-combined-buttons .before-label {
width: 32px !important;
}
.subviewbutton#appMenu-zoom-controls2 {
padding-right: 0 !important;
padding-top: 6px !important;
}
/* User sync account remove avatar */
#fxa-menu-avatar {
display: none;
}
/* Add search engine button remove icon */
#pageAction-panel-addSearchEngine .toolbarbutton-badge-stack {
display: none !important;
}
/* All tabs popover */
.all-tabs-item[selected] {
border-left: 3px solid var(--gnome-tabbar-tab-active-border-bottom-color);
box-shadow: none !important;
}
.all-tabs-item > .all-tabs-secondary-button label {
margin: 0 !important;
}
/* Add bookmark */
#editBookmarkPanel {
#editBookmarkPanelContent {
padding: 0 !important;
label {
margin-top: calc(var(--gnome-toolbar-spacing) * 2) !important;
margin-bottom: var(--gnome-toolbar-spacing) !important;
}
}
#editBookmarkPanelBottomContent {
margin-block: calc(var(--gnome-toolbar-spacing) * 2) !important;
}
}
/* Downloads popover */
#downloadsPanel-mainView .download-state {
padding: 12px !important;
border: 0 !important;
display: flex;
align-items: center;
height: 64px !important;
margin: 0 !important;
}
#downloadsPanel-mainView .downloadMainArea {
flex: 1;
display: flex;
}
#downloadsPanel-mainView .downloadMainArea:hover {
background: transparent !important;
}
#downloadsPanel-mainView .downloadTypeIcon {
margin: 0 !important;
margin-right: 6px !important;
}
#downloadsPanel-mainView .downloadContainer {
margin-inline-end: 0 !important;
flex: 1;
display: flex;
flex-direction: column;
}
#downloadsPanel-mainView .download-state .downloadButton .button-box {
padding: 0 !important;
margin: 0 !important;
}
#downloadsPanel-mainView .download-state toolbarseparator {
display: none;
}
/* Customization overflow menu position */
#customization-panel-container {
margin-top: 10px;
z-index: 10;
}
/* Confirmation Hint */
#confirmation-hint-checkmark-animation-container {
margin: 12px 6px 12px 12px !important;
}
#confirmation-hint-message-container {
margin: 12px 12px 12px 0 !important;
}
/* URLbar popups */
#identity-popup-mainView,
#permission-popup-mainView,
#protections-popup-mainView,
#identity-popup-mainView-panel-header {
max-width: calc(var(--popup-width) + (var(--gnome-menu-padding) * 2)) !important;
min-width: calc(var(--popup-width) + (var(--gnome-menu-padding) * 2)) !important;
}
/* Identity popup */
#identity-popup-security,
.identity-popup-section,
#identity-popup-security-expander .button-box,
.identity-popup-security-content {
border: 0 !important;
}
.identity-popup-security-content {
padding-inline-end: 0 !important;
padding-inline-start: 0 !important;
}
.identity-popup-security-content {
background-position: 0em 0.8em !important;
background-size: 24px auto;
}
.identity-popup-security-content .identity-popup-headline {
margin-left: 1.4em !important;
}
#identity-popup-security-button {
padding: 3px 0 !important;
}
.identity-popup-security-connection.identity-button:not(#hack) {
width: calc(var(--popup-width) - 30px) !important;
}
/* Permission popup */
#permission-popup-permissions-content {
padding: 0 !important;
}
.permission-popup-permission-item:first-child, #permission-popup-storage-access-permission-list-header {
margin-top: 0 !important;
}
.permission-popup-permission-remove-button {
opacity: 1 !important;
}
.permission-popup-permission-state-label {
display: none !important;
}
#permission-popup-permission-list-default-anchor:empty {
padding: 0 !important;
}
.permission-popup-permission-list-anchor[anchorfor="3rdPartyStorage"] {
padding: 0 !important;
}
.permission-popup-permission-list-anchor[anchorfor="3rdPartyStorage"] > vbox:only-child {
display: block !important;
height: 0 !important;
overflow: hidden;
visibility: hidden;
margin: 0 !important;
margin-bottom: -1px !important;
}
.permission-popup-permission-item-3rdPartyStorage {
margin-right: 6px;
margin-bottom: 6px !important;
}
#permission-popup-storage-access-permission-list-header {
padding: 6px !important;
}
/* Protections popup */
.protections-popup-section,
#protections-popup-not-blocking-section-header {
border: 0 !important;
}
#protections-popup-mainView-panel-header-section {
background: transparent !important;
}
#protections-popup-mainView toolbarseparator {
display: none !important;
}
#protections-popup-mainView-panel-header {
color: var(--gnome-window-color) !important;
}
#protections-popup[hasException] #protections-popup-mainView-panel-header {
background: none !important;
}
#protections-popup-main-header-label {
height: auto !important;
margin-inline-start: 6px !important;
text-align: left !important;
}
#protections-popup-mainView-panel-header-span {
margin: 0 !important;
margin-inline-start: 0 !important
}
#protections-popup[toast] #protections-popup-mainView-panel-header {
border-bottom-width: 1px !important;
border-radius: 5px !important;
padding: 0px !important;
}
#protections-popup-info-button {
margin: 0 !important;
}
#protections-popup-message {
background-position: center 12px !important;
background-color: var(--gnome-entry-background);
border: 0 !important;
border-radius: 12px;
color: var(--gnome-window-color) !important;
height: 100% !important;
margin: 0 !important;
}
#protections-popup-message .text-link,
#cfr-protections-panel-link-text {
color: var(--gnome-window-color) !important;
}
.whatsNew-message-body {
padding: 0 6px;
}
#protections-popup-tp-switch-section {
background: var(--gnome-menu-background);
border: 1px solid var(--gnome-button-border-color) !important;
border-radius: 9px;
padding: 0 0 24px 0 !important;
margin: 0 !important;
}
#protections-popup-tp-switch-section-header {
padding: 0 !important;
}
#protections-popup[hasException] #protections-popup-tp-switch-section {
background: var(--gnome-menu-background) !important;
}
.protections-popup-tp-switch-label-box label {
margin-right: 12px !important;
font-weight: normal !important;
}
#protections-popup-no-trackers-found-description {
margin: 12px 8px 0 !important;
text-align: left !important;
}
#protections-popup-blocking-section-header,
#protections-popup-not-found-section-header,
#protections-popup-not-blocking-section-header{
padding: 0px 5px !important;
margin-top: 20px !important;
height: auto !important;
}
#protections-popup-category-list {
margin: 0 !important;
}
.protections-popup-category.notFound .protections-popup-category-label {
width: calc(var(--popup-width) - 70px) !important;
}
.protections-popup-category-label {
margin-inline-start: 6px !important;
}
.protections-popup-category-state-label {
opacity: 0.7;
}
#protections-popup-footer {
display: flex;
justify-content: flex-start;
flex-wrap: wrap;
margin-top: 12px;
}
#protections-popup-show-report-stack,
#protections-popup-settings-button {
width: 100% !important;
}
#protections-popup-show-report-button {
height: 32px !important;
}
#protections-popup-footer-protection-type-label {
margin-left: 6px !important;
}
.protections-popup-description {
border-bottom: 0 !important;
}
.protections-popup-description > description {
margin: 8px !important;
}
/* Feature recommendation notification, fix width */
#contextual-feature-recommendation-notification {
width: auto !important;
}
/* Extensions sometimes assume a white background */
.webextension-popup-browser {
background-color: #fff !important;
}
/* Translate */
#translations-panel-translate:not(:only-child, #hack) {
margin: 0 !important;
}
#translations-panel-lang-selection > label {
margin-top: var(--gnome-menu-padding) !important;
}

View file

@ -0,0 +1,310 @@
/* Popup menus and context menus */
@namespace xul "http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul";
/* Style menus */
menupopup {
appearance: none !important;
color: var(--gnome-window-color) !important;
padding: var(--gnome-menu-padding) !important;
}
menucaption {
color: var(--gnome-window-color) !important;
}
menu menupopup {
margin: -16px 0 0 0 !important;
}
menulist {
padding: 0px !important;
}
.menupopup-arrowscrollbox {
appearance: none !important;
background: var(--gnome-menu-background) !important;
border: 0 !important;
border-radius: var(--gnome-popover-radius) !important;
box-shadow: var(--gnome-menu-shadow) !important;
padding: var(--gnome-menu-padding) !important;
min-height: 45px !important;
}
@media not -moz-pref("gnomeTheme.noThemedIcons") {
menuitem:is([type="checkbox"], [checked="true"]) .menu-iconic-icon,
menuitem[type="radio"] .menu-iconic-icon {
appearance: none !important;
}
}
menuitem {
padding-inline-end: 18px !important;
}
menu, menuitem {
margin-inline: 0 !important;
&:where([_moz-menuactive]:not([disabled="true"])) {
color: currentColor;
background-color: transparent !important;
}
}
menuitem:not([acceltext]) .menu-accel-container {
visibility: collapse !important;
}
menuitem[type="checkbox"] image, menuitem[type="radio"] image {
appearance: none !important;
visibility: visible !important;
}
menuitem[disabled="true"]:hover, menupopup menu[disabled="true"]:hover {
background: transparent !important;
}
.menu-iconic-icon {
padding: 0 !important;
}
/* Adjust popovers position */
panel[type=arrow] {
margin-top: var(--gnome-menu-padding) !important;
}
/* Style popovers */
panel:not([remote]) {
--arrowpanel-background: var(--gnome-menu-background) !important;
--arrowpanel-color: var(--gnome-menu-color) !important;
--panel-item-hover-bgcolor: var(--gnome-selected-background) !important;
}
panel {
--arrowpanel-padding: 0 !important;
--arrowpanel-border-color: var(--gnome-menu-border-color) !important;
--arrowpanel-border-radius: var(--gnome-popover-radius) !important;
--panel-separator-color: var(--gnome-menu-color) !important;
}
/* Padding rules */
#sidebarMenu-popup {
--arrowpanel-padding: var(--gnome-menu-padding) !important;
}
#downloadsPanel-blockedSubview,
#downloadsPanel-mainView,
#select-translations-panel-main-content {
padding: var(--gnome-menu-padding) !important;
}
.panel-header, .panel-footer,
.panel-subview-body,
#protections-popup-mainView-panel-header-section,
.permission-popup-section,
.popup-notification-header-container,
.popup-notification-body-container,
.popup-notification-footer-container,
.translations-panel-content {
padding: 0 var(--gnome-menu-padding) var(--gnome-menu-padding) !important;
}
:is(
.panel-header, .panel-footer,
.panel-subview-body,
.protections-popup-section,
#protections-popup-mainView-panel-header-section,
.permission-popup-section,
.identity-popup-section,
.popup-notification-header-container,
.popup-notification-body-container,
.popup-notification-footer-container
):first-child:not(:empty) {
padding-top: var(--gnome-menu-padding) !important;
}
#protections-popup-footer,
#identity-popup-clear-sitedata-footer {
padding: 0 var(--gnome-menu-padding) !important;
}
.panel-subview-body > .panel-subview-body {
padding: 0 !important;
}
/* Padding with margign */
.subviewbutton.panel-subview-footer-button:not(#downloadsHistory) {
margin: var(--gnome-menu-padding) !important;
}
.subviewbutton.panel-subview-footer-button:not(:only-child, #downloadsHistory) {
margin: 0 var(--gnome-menu-padding) !important;
}
.subviewbutton.panel-subview-footer-button:not(:only-child, #downloadsHistory, #translations-panel-translate):last-child {
margin-bottom: var(--gnome-menu-padding) !important;
}
/* No menu */
#notification-popup,
#permission-popup,
#editBookmarkPanel,
#downloadsPanel,
#translations-panel {
--gnome-menu-padding: 12px !important;
}
/* Panel arrow */
.panel-arrowcontent {
background: var(--arrowpanel-background) !important;
border: 1px solid var(--gnome-menu-border-color) !important;
border-radius: 12px !important;
color: var(--gnome-window-color) !important;
}
.panel-arrow {
fill: var(--arrowpanel-background) !important;
stroke: var(--gnome-menu-border-color) !important;
display: -moz-inline-box !important;
}
/* Panel header */
.panel-header {
position: relative !important;
}
/* Panel footer */
.panel-footer {
background-color: transparent !important;
margin: 0 !important;
}
.panel-subview-body .panel-footer {
padding: 0 !important;
}
.panel-footer.panel-footer-menulike {
border-top: 0 !important;
margin-top: 8px !important;
}
.panel-footer toolbarseparator {
display: none !important;
}
.proton-zap {
border-image: unset !important;
}
.panel-subview-footer {
margin-top: 10px !important;
}
/* Remove unwanted separators */
.panel-header + toolbarseparator,
#identity-popup-mainView-panel-header + toolbarseparator,
#permission-popup-mainView-panel-header + toolbarseparator,
#protections-popup-mainView-panel-header-section + toolbarseparator {
display: none !important;
}
/* Menu buttons */
menuitem, menupopup menu,
panelview .subviewbutton:not(#appMenu-fxa-label2, .unified-extensions-item-menu-button),
panelview .toolbarbutton-1,
panelview .unified-extensions-item-action-button,
.protections-popup-footer-button,
.protections-popup-category,
.identity-popup-content-blocking-category,
#downloadsPanel-mainView .download-state {
-moz-appearance: none !important;
border-radius: var(--gnome-button-radius) !important;
color: var(--gnome-window-color) !important;
font: menu !important;
padding: 4px 12px !important;
min-height: 32px !important;
&:hover, &[_moz-menuactive], &:focus, &:focus-within {
background: var(--gnome-selected-color) !important;
outline: 0 !important;
}
}
.subviewbutton,
.protections-popup-footer-button,
.protections-popup-category,
.identity-popup-content-blocking-category,
.openintabs-menuitem,
.widget-overflow-list .toolbarbutton-1,
panelview .unified-extensions-item {
margin: 0 !important;
}
.subviewbutton[shortcut]:after {
opacity: 0.5 !important;
color: var(--gnome-menu-color) !important;
}
.bookmark-item .menu-right {
fill-opacity: 1 !important;
}
/* Menu buttons disabled */
menuitem[disabled="true"], menupopup menu[disabled="true"],
.subviewbutton[disabled="true"], .toolbarbutton-1[disabled="true"],
.protections-popup-category[disabled="true"],
.identity-popup-content-blocking-category[disabled="true"] {
opacity: .5 !important;
}
menuitem[disabled="true"][_moz-menuactive], menupopup menu[disabled="true"][_moz-menuactive] {
background: transparent !important;
}
/* Menu buttons fix */
#appMenu-fxa-label2 {
padding: 0 !important;
}
#appMenu-fxa-label2:hover {
background: transparent !important;
}
/* Menu buttons back */
.subviewbutton-back {
opacity: 1 !important;
width: 100%;
-moz-box-align: center !important;
-moz-box-pack: start !important;
}
.subviewbutton-back + h1 {
font-weight: normal !important;
left: 0 !important;
padding: 0 !important;
pointer-events: none;
position: absolute !important;
top: 12px !important;
width: 100%;
}
/* Menu headers */
.subview-subheader {
font: menu !important;
font-weight: bold !important;
padding-block: 0 !important;
margin: 0 4px !important;
}
/* Style popover separators */
panel toolbarseparator, menuseparator {
appearance: none !important;
padding: 0 !important;
&:not([orient="vertical"]) {
border-top: 1px solid var(--gnome-menu-separator-color) !important;
margin: 6px 0 !important;
&::before {
display: none !important;
}
}
&[orient="vertical"] {
margin: 0 6px !important;
}
}
#PlacesToolbar menupopup[placespopup="true"] menuseparator {
border-top: 1px solid var(--gnome-menu-separator-color) !important;
padding: 0 !important;
margin: 6px 0 !important;
}
#PlacesToolbar menupopup[placespopup="true"] menuseparator::before {
border: 0 !important;
}
.panel-subview-body + toolbarseparator:not([orient="vertical"]) {
margin: 0 0 6px !important;
}
panelview > toolbarseparator:not([orient="vertical"]),
#identity-popup-more-info-footer toolbarseparator:not([orient="vertical"]){
margin: 6px !important;
}
#identity-popup-clear-sitedata-footer toolbarseparator:not([orient="vertical"]) {
margin-top: 0 !important;
}

View file

@ -0,0 +1,11 @@
/* Removes a white flash after you open or close a tab. Affects all variants,
* but it's more visible on dark variants. */
@namespace xul "http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul";
/* Overrides: Change the flash color */
#tabbrowser-tabpanels,
#tabbrowser-tabpanels[pendingpaint],
browser {
background-color: var(--gnome-window-background) !important;
}

View file

@ -0,0 +1,131 @@
/* Sidebar */
@namespace xul "http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul";
/* Main sidebar */
#sidebar-main {
--button-size-icon: var(--gnome-button-size) !important;
background-color: var(--gnome-sidebar-background) !important;
}
link[href="chrome://browser/content/sidebar/sidebar-main.css"] + .wrapper {
.tools-and-extensions {
align-items: center !important;
justify-content: center !important;
&[orientation="horizontal"] {
padding: var(--gnome-toolbar-padding) !important;
}
}
.actions-list {
& > moz-button:not(.tools-overflow) {
--button-outer-padding-inline: var(--gnome-toolbar-padding) !important;
--button-outer-padding-block: calc(var(--gnome-toolbar-spacing) / 2) !important;
--toolbarbutton-active-background: var(--gnome-selected-color) !important;
&:last-of-type {
--button-outer-padding-block-end: var(--gnome-toolbar-padding) !important;
}
&:first-of-type {
--button-outer-padding-block-start: var(--gnome-toolbar-padding) !important;
}
}
}
}
/* Sidebar content */
#sidebar-box {
padding: 0 !important;
}
#sidebar-box:-moz-window-inactive label, #sidebar-box:-moz-window-inactive image,
.sidebar-panel:-moz-window-inactive label, .sidebar-panel:-moz-window-inactive image,
.tools-and-extensions:-moz-window-inactive,
.sidebar-placesTreechildren:-moz-window-inactive {
opacity: 0.7 !important;
}
#sidebar {
background-color: var(--gnome-secondary-sidebar-background) !important;
border: 0 !important;
border-radius: 0 !important;;
box-shadow: none !important;
}
#sidebar-search-container {
padding: var(--gnome-toolbar-padding) !important;
}
/* Separator */
#sidebar-splitter,
#sidebar-launcher-splitter {
background: var(--gnome-toolbar-background) !important;
border: 0 !important;
border-right: 1px solid var(--gnome-border-color) !important;
border-color: var(--gnome-toolbar-border-color) !important;
margin: 0 !important;
width: 0 !important;
}
#sidebar-tools-and-extensions-splitter {
background: transparent !important;
margin-block: 0 !important;
}
/* Browser content */
#tabbrowser-tabbox {
--chrome-content-separator-color: var(--gnome-toolbar-border-color);
box-shadow: none !important;
outline: 0 !important;
}
/* Settings lists */
/* TODO: Move to lists.css */
.customize-group .extensions,
link[href="chrome://global/content/elements/moz-fieldset.css"] ~ fieldset #inputs {
background: var(--gnome-card-background) !important;
border: 0 !important;
border-radius: var(--gnome-card-radius) !important;
box-shadow: 0 0 0 1px rgba(0, 0, 0, .03), 0 1px 3px 1px rgba(0, 0, 0, .07), 0 2px 6px 2px rgba(0, 0, 0, .03);
margin-top: 12px !important;
padding: 0 !important;
}
moz-checkbox, moz-radio, .customize-group .extension-item {
display: flex !important;
padding: 0 !important;
&:not(:last-of-type) {
border-bottom: 1px solid var(--gnome-card-shade-color) !important;
}
&[slot="nested"]:first-of-type {
border-top: 1px solid var(--gnome-card-shade-color) !important;
}
}
moz-checkbox, moz-radio {
flex-direction: column;
justify-content: center;
margin-block-start: 0 !important;
}
.customize-group .extension-item {
align-items: center;
min-height: 50px !important;
padding: 0 12px !important;
}
link[href="chrome://global/content/elements/moz-input-common.css"]:has(~ .nested) {
& ~ .label-wrapper {
margin-inline: 12px !important;
& > label {
align-items: center;
display: flex !important;
gap: var(--gnome-toolbar-spacing);
min-height: 50px !important;
}
}
& ~ .nested {
gap: 0 !important;
margin: 0 !important;
}
}

View file

@ -0,0 +1,892 @@
/* Tabs bar */
@namespace xul "http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul";
/* Override vars */
:root {
--space-above-tabbar: 0 !important;
--tab-min-height: var(--gnome-button-size) !important;
--tab-border-radius: var(--gnome-button-radius) !important;
--tab-hover-background-color: var(--gnome-hover-color) !important;
--tab-selected-bgcolor: var(--gnome-selected-color) !important;
--tab-pinned-container-margin-inline-expanded: calc(var(--gnome-toolbar-padding) / 2) !important;
--tabstrip-inner-border: 1px solid var(--gnome-border-color) !important;
--gnome-tabbar-tab-close-overlay-bg: var(--gnome-tabbar-tab-hover-background);
@media not -moz-pref("sidebar.verticalTabs") {
/* We need the hardcoded tab colors in horizontal tabs, beacuse of the close button overlay */
--tab-hover-background-color: var(--gnome-tabbar-tab-hover-background) !important;
--tab-selected-bgcolor: var(--gnome-tabbar-tab-active-background) !important;
}
}
/* Tabsbar */
#TabsToolbar {
background-color: var(--gnome-tabbar-background) !important;
border-bottom: 0 !important;
padding: 0 calc(var(--gnome-toolbar-padding) / 2) !important;
position: relative;
z-index: 1;
--toolbarbutton-inner-padding: var(--toolbarbutton-inner-padding) !important;
/* Remove hover effects on tab bar buttons */
--toolbarbutton-active-background: transparent !important;
--toolbarbutton-hover-background: transparent !important;
/* Tabs scroll fade */
--gnome-tabbar-fade-background: var(--gnome-tabbar-background);
/* Remove tabbar's window controls */
.titlebar-buttonbox-container {
display: none !important;
}
/* Remove blank spaces on tabs start and end */
.titlebar-spacer {
display: none !important;
}
/* Tabsbar buttons */
.toolbarbutton-1 {
border-radius: var(--gnome-button-radius) !important;
margin: 0px calc(var(--gnome-toolbar-spacing) / 2) var(--gnome-toolbar-padding) !important;
min-height: var(--gnome-button-size) !important;
min-width: var(--gnome-button-size) !important;
transition: background var(--gnome-animation-time);
&:not([disabled]):not(:active):not([open]):hover {
background-color: var(--gnome-tabbar-tab-hover-background) !important;
}
&:active, &[open] {
background-color: var(--gnome-tabbar-tab-active-background) !important;
}
}
}
/* Tabs container */
#tabbrowser-tabs {
/* Horizontal */
&[orient="horizontal"] {
&, arrowscrollbox {
height: auto !important;
min-height: auto !important;
--tab-min-height: var(--gnome-button-size) !important;
}
}
/* Vertical */
&[orient="vertical"] {
grid-gap: 0 !important;
&[expanded] {
--tab-inner-inline-margin: var(--gnome-toolbar-padding) !important;
}
#tabbrowser-arrowscrollbox-periphery > #tabs-newtab-button,
#vertical-tabs-newtab-button {
margin-block: calc(var(--gnome-toolbar-padding) / 2) !important;
}
}
}
/* Tabs scroll */
#tabbrowser-arrowscrollbox {
&[orient="horizontal"] {
position: relative !important;
}
&[orient="vertical"] {
--gnome-undershoot-top: inset 0 1px color-mix(in srgb, var(--gnome-shade-color) 75%, transparent);
--gnome-undershoot-bottom: inset 0 -1px color-mix(in srgb, var(--gnome-shade-color) 75%, transparent);
&[overflowing] {
&:not([scrolledtostart]) {
box-shadow: var(--gnome-undershoot-top);
}
&:not([scrolledtoend]) {
box-shadow: var(--gnome-undershoot-bottom);
}
&:not([scrolledtostart], [scrolledtoend]) {
box-shadow: var(--gnome-undershoot-top), var(--gnome-undershoot-bottom);
}
}
}
}
/* Horizontal tabs scroll fade */
#scrollbutton-up:has(~ scrollbox[orient="horizontal"]),
scrollbox[orient="horizontal"] ~ #scrollbutton-down {
border-top: 0 !important;
position: absolute !important;
z-index: 5 !important;
top: 0;
bottom: 0;
}
#scrollbutton-up:has(~ scrollbox[orient="horizontal"])[disabled],
scrollbox[orient="horizontal"] ~ #scrollbutton-down[disabled] {
display: none;
}
#scrollbutton-up:has(~ scrollbox[orient="horizontal"]) > .toolbarbutton-icon,
scrollbox[orient="horizontal"] ~ #scrollbutton-down > .toolbarbutton-icon{
visibility: hidden;
}
scrollbox[orient="horizontal"] ~ #scrollbutton-down {
right: 0;
margin-inline-end: -5px !important;
}
#scrollbutton-up:has(~ scrollbox[orient="horizontal"]) {
left: 0;
margin-inline-start: -5px !important;
}
#scrollbutton-up:has(~ scrollbox[orient="horizontal"]):not([disabled])::after,
scrollbox[orient="horizontal"] ~ #scrollbutton-down:not([disabled])::after {
content: "";
height: 39px;
position: absolute;
top: -3px;
z-index: -1;
width: 50px;
pointer-events: none;
}
#scrollbutton-up:has(~ scrollbox[orient="horizontal"]):not([disabled])::after {
background: linear-gradient(to right, var(--gnome-tabbar-fade-background) 10px, transparent);
left: 0;
}
scrollbox[orient="horizontal"] ~ #scrollbutton-down:not([disabled])::after {
background: linear-gradient(to left, var(--gnome-tabbar-fade-background) 10px, transparent);
right: 0;
}
spacer[part=overflow-start-indicator], spacer[part=overflow-end-indicator] {
width: 0 !important;
border: 0 !important;
margin-inline: 0 !important;
}
/* Tabs */
.tabbrowser-tab {
&[selected="true"] {
--gnome-tabbar-tab-close-overlay-bg: var(--gnome-tabbar-tab-active-background);
&:hover {
--gnome-tabbar-tab-close-overlay-bg: var(--gnome-tabbar-tab-active-hover-background) !important;
}
}
@media -moz-pref("gnomeTheme.closeOnlySelectedTabs") {
--gnome-tabbar-tab-close-overlay-bg: unset;
}
/* OPTIONAL: Add more contrast to the active tab */
@media -moz-pref("gnomeTheme.activeTabContrast") {
&[selected="true"], &:hover {
--tab-hover-background-color: var(--gnome-tabbar-tab-active-background-contrast) !important;
--tab-selected-bgcolor: var(--gnome-tabbar-tab-active-background-contrast) !important;
--gnome-tabbar-tab-close-overlay-bg: var(--gnome-tabbar-tab-active-background-contrast) !important;
}
}
/* Horizontal tabs only */
#tabbrowser-tabs[orient="horizontal"] & {
position: relative;
> stack {
height: var(--tab-min-height) !important;
width: var(--tab-min-height) !important;
min-height: var(--tab-min-height) !important;
}
/* Not in collapsed tab-group */
:not([collapsed]) > & {
padding: 0px calc(var(--gnome-toolbar-spacing) / 2 - 1px) var(--gnome-toolbar-padding) !important;
&:not([hidden=true]):last-of-type {
padding-right: calc(var(--gnome-toolbar-spacing) / 2) !important;
}
/* Full width tabs */
@media not -moz-pref("gnomeTheme.normalWidthTabs") {
&:not([style^="max-width"]):not([pinned]),
&[style^="max-width: 100px !important;"]:not([pinned]) {
max-width: 100% !important;
--tab-min-width-pref: 131px !important;
}
&:not([style^="max-width"]):not([pinned]):not([fadein]),
&[style^="max-width: 100px !important;"]:not([pinned]):not([fadein]) {
max-width: .1px !important;
}
}
}
}
/* Vertical tabs only */
#tabbrowser-tabs[orient="vertical"] & {
padding-block: calc(var(--gnome-toolbar-spacing) / 2) !important;
&[pinned] {
padding-block: var(--gnome-toolbar-spacing) !important;
}
}
}
/* Tab background */
.tab-background {
box-shadow: none !important;
transition: background var(--gnome-tab-animation-time) linear !important;
margin-block: 0 !important;
/* Selected hover */
tab[selected]:hover & {
background-color: var(--gnome-selected-hover-color) !important;
@media not -moz-pref("sidebar.verticalTabs") {
background-color: var(--gnome-tabbar-tab-active-hover-background) !important;
}
}
/* Use raised button colors for pinned tabs in vertical */
#tabbrowser-tabs[orient="vertical"] tab[pinned] & {
background-color: var(--gnome-button-background) !important;
&[selected] {
background-color: var(--gnome-button-checked-background) !important;
}
tab:hover & {
background-color: var(--gnome-button-hover-background) !important;
&[selected] {
background-color: var(--gnome-button-checked-hover-background) !important;
}
}
}
/* Add solid bg on tabs dnd */
#tabbrowser-tabs[movingtab] tab:is([multiselected], [selected]) & {
background-color: var(--gnome-tabbar-background) !important;
background-image: linear-gradient(var(--tab-selected-bgcolor), var(--tab-selected-bgcolor)) !important;
}
}
/* Tab content */
.tab-content {
#tabbrowser-tabs[orient="horizontal"] & {
/* Center content on horizontal tabs */
align-items: center !important;
justify-content: center !important;
margin-top: -1px;
position: relative !important;
&:not([pinned]) {
padding: 0 4px !important;
}
&[pinned] {
padding: 0 5px !important;
}
/* Rearrange contents */
.tab-audio-button {
order: 0;
}
.tab-icon-stack {
order: 1;
}
.tab-label-container {
order: 2;
}
.tab-close-button {
order: 3;
}
/* Prevent tab icons size breaking */
.tab-icon-image, .tab-icon-sound, .tab-throbber, .tab-throbber-fallback, .tab-close-button {
min-width: 16px;
}
/* Tab close button etc. positioning */
.tab-throbber, .tab-icon-image, .tab-sharing-icon-overlay, .tab-icon-sound, .tab-close-button {
margin-top: 0 !important;
}
/* Close button overlay */
&:not([pinned])::before {
background: linear-gradient(to left, var(--gnome-tabbar-tab-close-overlay-bg) 50%, transparent);
border-radius: 0 4px 4px 0;
bottom: 2px;
content: "";
height: calc(100% - 5px);
opacity: 0;
position: absolute;
right: 2px;
transition: all var(--gnome-tab-animation-time) linear;
width: 55px;
z-index: 99;
}
&:not([pinned])[selected]::before,
tab:hover &::before {
opacity: 1;
}
:root[dir="rtl"] &:not([pinned])::before {
display: none;
}
/* Left close button */
@media (-moz-gtk-csd-reversed-placement) and (not -moz-pref("gnomeTheme.swapTabClose")),
(-moz-pref("gnomeTheme.swapTabClose")) and (not (-moz-gtk-csd-reversed-placement)) {
/* Rearrange and fix alignment */
.tab-audio-button {
order: 3 !important;
}
.tab-icon-stack {
margin-inline-start: 0 !important;
}
.tab-label-container {
margin-inline-end: auto !important;
}
.tab-close-button {
margin-inline-start: 0 !important;
order: 0 !important;
}
/* Overlay is not longer needed */
:root[dir="ltr"] &:not([pinned])::before {
display: none !important;
}
}
}
}
/* Tab label */
.tab-label-container {
#tabbrowser-tabs[orient="horizontal"] & {
min-width: 0 !important;
max-width: min-content !important;
:root[dir="ltr"] &:not([pinned]) {
margin-inline-end: -16px;
}
/* Fix alignment when audio button is prestent */
tab:is([muted], [soundplaying]) & {
@media (not (-moz-gtk-csd-reversed-placement)) and (not -moz-pref("gnomeTheme.swapTabClose")) {
margin-inline-end: 0 !important;
}
}
}
/* Hide secondary label, muted, playing, etc */
.tab-secondary-label {
display: none;
}
}
/* Tab buttons */
.tab-icon-overlay,
.tab-close-button {
border: 0 !important;
box-sizing: content-box !important; /* Avoid deformation on flexbox */
border-radius: 50% !important;
padding: 4px !important;
background-image: none !important;
background-color: transparent !important;
background-size: 24px;
transition: all var(--gnome-animation-time) ease-out !important;
&:hover {
background-color: var(--gnome-hover-color) !important;
}
&:active {
background-color: var(--gnome-active-color) !important;
}
/* Set solid bg when in no expanded vertical tabs */
#tabbrowser-tabs[orient="vertical"]:not([expanded]) & {
background-color: var(--gnome-window-background) !important;
}
}
/* Audio button */
.tab-audio-button {
--button-border-radius: 50% !important;
--button-size-icon-small: 24px !important;
#tabbrowser-tabs[orient="horizontal"] & {
margin-inline: 0 !important;
}
}
/* Tab close button */
.tab-close-button {
fill: var(--gnome-window-color) !important;
fill-opacity: 1 !important;
height: 16px !important;
list-style-image: var(--gnome-icon-window-close-symbolic) !important;
width: 16px !important;
-moz-context-properties: fill, fill-opacity !important;
#tabbrowser-tabs[orient="horizontal"] & {
margin-inline-start: auto;
margin-inline-end: 0 !important;
opacity: 1 !important;
z-index: 100 !important;
/* Autohide */
&:not([selected]) {
visibility: hidden !important;
opacity: 0 !important;
}
/* Show close button on tab hover */
tab:hover & {
@media not -moz-pref("gnomeTheme.closeOnlySelectedTabs") {
visibility: visible !important;
opacity: 1 !important;
}
}
}
}
/* Icon overlay */
.tab-icon-overlay {
height: 12px !important;
left: 11px !important;
top: -3px !important;
width: 12px !important;
&:not([crashed]) {
padding: 2px !important;
background: var(--gnome-button-background) !important;
&:hover {
background: var(--gnome-button-hover-background) !important;
}
}
&[busy] {
display: none !important;
}
}
/* Tab icon */
.tab-icon-stack {
align-items: center;
/* Avoid firefox hiding elements on indicator-replaces-favicon */
&[indicator-replaces-favicon] :not(&) {
opacity: 1 !important;
}
#tabbrowser-tabs[orient="horizontal"] & {
&:not([pinned]) {
margin-inline-start: auto !important;
margin-inline-end: 2px;
@media -moz-pref("gnomeTheme.tabAlignLeft") {
/* OPTIONAL: Align tab items left */
margin-inline-start: 0 !important;
padding: 0 5px !important;
}
.tab-throbber, .tab-icon-pending, .tab-icon-image, .tab-sharing-icon-overlay, .tab-icon-overlay {
margin-inline-end: 0 !important;
}
}
&[busy], &[sharing], .tab-icon-image:not([sharing]) {
padding: 4px;
}
.tab-icon-image {
transition: opacity var(--gnome-animation-time) ease-out !important;
}
}
&::before {
margin: 4px;
}
}
/* Tabs separators */
:root[dir="ltr"] #tabbrowser-tabs[orient="horizontal"] {
:not([collapsed]) > tab {
border-color: transparent !important;
border-left-width: 1px !important;
border-style: solid !important;
}
tab:not(:first-of-type, [selected], :hover) {
--gnome-tabbar-tab-separator-hack0: var(--gnome-tabbar-background);
--gnome-tabbar-tab-separator-hack1: linear-gradient(
to bottom,
var(--gnome-tabbar-tab-separator-hack0) 0,
var(--gnome-tabbar-tab-separator-hack0) 3px,
var(--gnome-tabbar-tab-separator-color) 3px,
var(--gnome-tabbar-tab-separator-color) 31px,
var(--gnome-tabbar-tab-separator-hack0) 31px,
var(--gnome-tabbar-tab-separator-hack0) 40px
) 1;
border-image: var(--gnome-tabbar-tab-separator-hack1);
}
tab[selected] ~ tab:not([hidden="true"]) {
border-image: none;
}
tab[selected] ~ tab:not([hidden="true"]) ~ tab:not([hidden="true"]) {
border-image: var(--gnome-tabbar-tab-separator-hack1);
}
tab:hover ~ tab:not([hidden="true"]) {
border-image: none !important;
}
tab:hover ~ tab:not([hidden="true"]) ~ tab:not([hidden="true"]) {
border-image: var(--gnome-tabbar-tab-separator-hack1) !important;
}
tab:hover ~ tab[selected] ~ tab:not([hidden="true"]) {
border-image: none !important;
}
tab:hover ~ tab[selected] ~ tab:not([hidden="true"]) ~ tab:not([hidden="true"]) {
border-image: var(--gnome-tabbar-tab-separator-hack1) !important;
}
tab-group[collapsed] + tab {
border-image: none !important;
}
}
/* Tabs group */
tab-group {
#tabbrowser-tabs[orient="horizontal"] & {
.tab-group-line {
margin-block-end: calc(var(--gnome-toolbar-padding) * -1) !important;
margin-inline: calc((var(--gnome-toolbar-spacing) / 2) * -1) !important;
}
}
#tabbrowser-tabs[orient="vertical"][expanded] & {
margin-inline-start: calc(var(--gnome-toolbar-padding) * 2) !important;
padding-inline-start: var(--tab-group-line-thickness);
}
}
.tab-group-label-container {
#tabbrowser-tabs[orient="vertical"][expanded] & {
margin-block: 0 !important;
margin-inline-start: calc(var(--tab-group-line-thickness) * -1);
}
#tabbrowser-tabs[orient="vertical"]:not([expanded]) & {
tab-group[collapsed] & {
margin-block: var(--gnome-toolbar-padding) !important;
}
}
}
/* Tabs group label */
.tab-group-label {
border-radius: 26px !important;
tab-group[collapsed] & {
@media (prefers-color-scheme: dark) {
outline: 0 !important;
}
}
#tabbrowser-tabs[orient="horizontal"] &,
#tabbrowser-tabs[orient="vertical"][expanded] & {
padding: 2px 9px !important;
}
#tabbrowser-tabs[orient="vertical"][expanded] & {
align-items: center !important;
display: flex;
margin-block: var(--gnome-toolbar-padding) !important;
&::before {
-moz-context-properties: fill;
fill: currentColor !important;
background: var(--gnome-icon-pan-end-symbolic) no-repeat;
background-size: contain;
content: "";
display: block;
height: 16px;
margin-inline-end: 3px;
width: 16px;
}
tab-group:not([collapsed]) &::before {
background-image: var(--gnome-icon-pan-down-symbolic);
}
}
}
/* Tabs group line */
.tab-group-line {
#tabbrowser-tabs[orient="vertical"] & {
inset-block: -3px !important;;
}
}
/* Tabs group overflow */
.tab-group-overflow-count-container {
#tabbrowser-tabs[orient="vertical"] & {
padding-block-start: 0 !important;
}
}
/* Remove spacing between pinned tabs and first tab */
#tabbrowser-tabs[haspinnedtabs]:not([positionpinnedtabs]) > #tabbrowser-arrowscrollbox > .tabbrowser-tab:nth-child(1 of :not([pinned], [hidden])) {
margin-inline-start: 0 !important;
}
/* Always display close icon (hidden) */
#tabbrowser-tabs[closebuttons="activetab"] .tab-close-button:not([pinned]) {
display: block !important;
}
/* Always show the muted icon when present */
#tabbrowser-tabs:not([secondarytext-unsupported]) .tabbrowser-tab:not(:hover) .tab-icon-overlay[indicator-replaces-favicon] {
opacity: 1 !important;
}
/* Fix custom info tab icon */
.tabbrowser-tab[image="chrome://global/skin/icons/info.svg"]:not([pinned]):not([busy]):not([progress]) .tab-icon-stack::before {
margin-inline-end: 5.5px;
}
.tabbrowser-tab[image="chrome://global/skin/icons/info.svg"] .tab-icon-image {
display: none !important;
}
/* Tabs containers */
.tabbrowser-tab[usercontextid] {
& > .tab-stack > .tab-background > .tab-context-line {
display: none;
}
.tab-label-container {
color: var(--identity-tab-color) !important;
font-weight: bold !important;
}
#tabbrowser-tabs[orient="vertical"]:not([expanded]) & {
.tab-background {
outline: 1px solid var(--identity-tab-color) !important;
}
}
}
.identity-color-blue,
.identity-color-turquoise,
.identity-color-green,
.identity-color-yellow,
.identity-color-orange,
.identity-color-red,
.identity-color-pink,
.identity-color-purple {
--identity-icon-color: var(--identity-tab-color) !important;
}
.identity-color-blue {
--identity-tab-color: var(--gnome-tabbar-identity-color-blue) !important;
}
.identity-color-turquoise {
--identity-tab-color: var(--gnome-tabbar-identity-color-turquoise) !important;
}
.identity-color-green {
--identity-tab-color: var(--gnome-tabbar-identity-color-green) !important;
}
.identity-color-yellow {
--identity-tab-color: var(--gnome-tabbar-identity-color-yellow) !important;
}
.identity-color-orange {
--identity-tab-color: var(--gnome-tabbar-identity-color-orange) !important;
}
.identity-color-red {
--identity-tab-color: var(--gnome-tabbar-identity-color-red) !important;
}
.identity-color-pink {
--identity-tab-color: var(--gnome-tabbar-identity-color-pink) !important;
}
.identity-color-purple {
--identity-tab-color: var(--gnome-tabbar-identity-color-purple) !important;
}
/* Needs attetion tab indicator */
.tabbrowser-tab:is([image], [pinned]) > .tab-stack > .tab-content,
.tabbrowser-tab > .tab-stack > .tab-content[pinned][titlechanged] {
background-size: 0px 0px !important;
background-position: center bottom !important;
transition-property: background-size;
transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);
transition-duration: calc(var(--gnome-animation-time) / 2);
}
.tabbrowser-tab:is([image], [pinned]) > .tab-stack > .tab-content[attention]:not([selected]),
.tabbrowser-tab > .tab-stack > .tab-content[pinned][titlechanged]:not([selected]) {
background-image: radial-gradient(var(--gnome-tabbar-tab-needs-attetion), var(--gnome-tabbar-tab-needs-attetion) 10px) !important;
background-size: clamp(20%, 50%, 7rem) 2px !important;
}
.tab-label[attention]:not([selected]) {
font-weight: normal !important;
}
/* Tab spinner */
.tab-throbber::before {
animation: none !important;
background-image: url("../icons/spinner.png") !important;
background-size: 16px;
width: 16px !important;
opacity: 1 !important;
@media (prefers-color-scheme: dark) {
background-image: url("../icons/spinner-dark.png") !important;
}
}
/* Tabs manager menu */
#alltabs-button {
@media not -moz-pref("gnomeTheme.allTabsButton") {
visibility: collapse;
}
@media -moz-pref("browser.tabs.tabmanager.enabled"), -moz-pref("gnomeTheme.allTabsButtonOnOverflow") {
#tabbrowser-tabs[overflow] ~ & {
visibility: visible;
}
}
#tabbrowser-tabs:not([overflow])[using-closing-tabs-spacer] ~ & {
display: none !important;
}
}
/* Firefox View */
#TabsToolbar #firefox-view-button .toolbarbutton-icon {
box-shadow: none !important;
fill: var(--gnome-toolbar-icon-fill) !important;
height: 16px !important;
opacity: 1 !important;
width: 16px !important;
overflow: visible !important;
border-radius: initial !important;
}
:root:not([privatebrowsingmode="temporary"]):not([firefoxviewhidden]) :is(#firefox-view-button, #wrapper-firefox-view-button) + #tabbrowser-tabs {
border-inline-start: 0 !important;
padding-inline-start: var(--tab-overflow-pinned-tabs-width) !important;
margin-inline-start: 0 !important;
}
/* OPTIONAL: Hide single tab */
@media -moz-pref("gnomeTheme.hideSingleTab") and (not -moz-pref("sidebar.verticalTabs")) {
#tabbrowser-tabs:not(:has(tab:not([hidden="true"]) ~ tab:not([hidden="true"]))) {
:is(tab, tab ~ toolbarbutton, tab ~ #tabbrowser-arrowscrollbox-periphery) {
visibility: collapse;
}
~ #alltabs-button {
visibility: collapse;
}
}
}
/* OPTIONAL: Use tabs as headerbar */
@media -moz-pref("gnomeTheme.tabsAsHeaderbar") and (not -moz-pref("sidebar.verticalTabs")) {
/* Rearrange bars */
#navigator-toolbox #TabsToolbar {
order: 0;
}
#navigator-toolbox #toolbar-menubar {
order: 1;
}
#navigator-toolbox #nav-bar {
order: 3;
}
#navigator-toolbox #PersonalToolbar {
order: 4;
}
@media -moz-pref("gnomeTheme.bookmarksToolbarUnderTabs") {
#navigator-toolbox #PersonalToolbar {
order: 2 !important;
}
}
#TabsToolbar {
/* Spacing should be removed on the side touching the URL bar */
.toolbarbutton-1,
.titlebar-button {
margin-bottom: 0 !important;
}
.toolbarbutton-1 {
margin-top: var(--gnome-toolbar-padding) !important;
}
}
#tabbrowser-tabs[orient="horizontal"] {
/* Invert padding */
:not([collapsed]) > .tabbrowser-tab, .tabbrowser-tab {
padding-bottom: 0px !important;
padding-top: var(--gnome-toolbar-padding) !important;
}
/* Move tab group line to top */
.tab-group-label-container::after {
inset: 0 !important;
}
tab-group {
.tab-group-line {
margin-block-end: 0 !important;
margin-block-start: calc(var(--gnome-toolbar-padding) * -1) !important;
top: 0 !important;
}
}
/* Tabs separators */
:root[dir="ltr"] & {
tab:not(:first-of-type, [selected], :hover) {
--gnome-tabbar-tab-separator-hack1: linear-gradient(
to bottom,
var(--gnome-tabbar-tab-separator-hack0) 0,
var(--gnome-tabbar-tab-separator-hack0) 9px,
var(--gnome-tabbar-tab-separator-color) 9px,
var(--gnome-tabbar-tab-separator-color) 37px,
var(--gnome-tabbar-tab-separator-hack0) 37px,
var(--gnome-tabbar-tab-separator-hack0) 40px
) 1;
border-image: var(--gnome-tabbar-tab-separator-hack1);
}
}
}
/* Remove nav-bar rounding and padding */
:root[customtitlebar][sizemode="normal"]:not([gtktiledwindow="true"]) #nav-bar {
border-radius: 0 !important;
}
/* Round and pad tab-bar */
:root[customtitlebar][sizemode="normal"]:not([gtktiledwindow="true"]) #TabsToolbar {
border-radius: env(-moz-gtk-csd-titlebar-radius) env(-moz-gtk-csd-titlebar-radius) 0 0 !important
}
:root[customtitlebar]:not([inFullscreen], [sizemode="maximized"]) #TabsToolbar .toolbar-items {
padding: 0 46px;
}
/* Hide duplicate window controls from navbar */
:root[customtitlebar] #nav-bar .titlebar-buttonbox-container {
display: none !important;
}
/* Force displaying controls in tab-bar */
:root[customtitlebar]:not([inDOMFullscreen]) #TabsToolbar .titlebar-buttonbox-container {
display: flex !important;
padding-top: var(--gnome-toolbar-padding) !important;
visibility: visible !important;
}
/* Blend single tab into whole bar */
@media -moz-pref("gnomeTheme.hideSingleTab") {
#tabbrowser-tabs:not(:has(tab:not([hidden="true"]) ~ tab:not([hidden="true"]))) :is(
tab,
tab ~ toolbarbutton,
tab ~ #tabbrowser-arrowscrollbox-periphery
) {
visibility: visible;
}
#tabbrowser-tabs:not(:has(tab:not([hidden="true"]) ~ tab:not([hidden="true"]))) tab {
-moz-window-dragging: drag !important;
}
#tabbrowser-tabs:not(:has(tab:not([hidden="true"]) ~ tab:not([hidden="true"]))) .tab-background {
display: none !important
}
#tabbrowser-tabs:not(:has(tab:not([hidden="true"]) ~ tab:not([hidden="true"]))) .tab-close-button {
visibility: hidden !important;
opacity: 0 !important;
}
#tabbrowser-tabs:not(:has(tab:not([hidden="true"]) ~ tab:not([hidden="true"]))) .tab-content::before {
--gnome-tabbar-tab-close-overlay-bg: unset !important;
}
:root[dir="ltr"] #tabbrowser-tabs:not(:has(tab:not([hidden="true"]) ~ tab:not([hidden="true"]))) .tab-label-container[textoverflow="true"] {
margin-inline-end: -16px;
}
}
}

View file

@ -0,0 +1,189 @@
/* Toolbox, a container for all toolbars (toolbox#navigator-toolbox):
* - menu bar (toolbar#toolbar-menubar)
* - tab bar (toolbar#TabsToolbar)
* - header bar (toolbar#nav-bar)
* - bookmark bar (toolbar#PersonalToolbar)
* - add-ons can add their own toolbars (toolbar) */
@namespace xul "http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul";
:root {
--tabpanel-background-color: --gnome-window-background !important;
}
/* Toolbox colors */
#navigator-toolbox {
background: var(--gnome-toolbar-background) !important;
border-bottom: 1px solid var(--gnome-toolbar-border-color) !important;
}
#PersonalToolbar, #toolbar-menubar, #TabsToolbar, findbar {
appearance: none !important;
border: 0 !important;
background: var(--gnome-toolbar-background) !important;
&:-moz-window-inactive {
opacity: 1 !important;
}
}
findbar {
border-top: 1px solid var(--gnome-toolbar-border-color) !important;
}
#nav-bar:-moz-window-inactive,
#PersonalToolbar:-moz-window-inactive,
#toolbar-menubar:-moz-window-inactive,
#TabsToolbar:-moz-window-inactive,
findbar:-moz-window-inactive,
.container.infobar:-moz-window-inactive {
transition: background var(--gnome-animation-time) ease-out;
}
#navigator-toolbox:-moz-window-inactive label,
#downloads-indicator-anchor:-moz-window-inactive,
findbar:-moz-window-inactive image:not(#hack),
findbar:-moz-window-inactive label,
findbar:-moz-window-inactive description,
#viewButton:-moz-window-inactive dropmarker,
.container.infobar:-moz-window-inactive {
opacity: 0.5 !important;
}
#toolbar-menubar:not([inactive=true]) {
margin-bottom: 0 !important;
}
/* Overrides: Remove border below the menu bar / above the header bar */
#TabsToolbar:not([collapsed="true"]) + #nav-bar {
border-top-width: 0 !important;
}
#navigator-toolbox::after {
border-bottom-width: 0 !important;
}
/* Reorder toolbars */
#navigator-toolbox #nav-bar {
order: 0;
}
#navigator-toolbox #PersonalToolbar {
order: 2;
}
#navigator-toolbox #TabsToolbar {
order: 3;
}
#notifications-toolbar {
order: 100;
}
.notificationbox-stack {
order: 1000;
}
/* Content notifications */
.notificationbox-stack notification-message {
background-color: color-mix(in srgb, var(--gnome-accent-bg) 30%, var(--gnome-window-background)) !important;
border: 0 !important;
border-top: 1px solid var(--gnome-toolbar-border-color) !important;
border-radius: 0 !important;
margin: 0 !important;
&[type="warning"] {
background-color: #ffe900 !important;
}
&[type="critical"] {
background-color: #d70022 !important;
}
&[style*="margin-top"] {
margin-top: -48px !important;
}
&::before {
display: none !important;
}
}
link[href="chrome://global/content/elements/moz-message-bar.css"] ~ .container {
background: none !important;
border-radius: 0 !important;
box-shadow: none !important;
gap: var(--gnome-toolbar-spacing) !important;
padding: var(--gnome-toolbar-padding) !important;
.close {
margin: 0 !important;
}
.icon {
color: var(--gnome-window-color);
height: 16px !important;
width: 16px !important;
margin: 8px 0 !important;
}
.text-container {
flex: auto;
padding-block: 0 !important;
}
.text-content {
font-weight: bold !important;
}
}
/* Bookmarks */
#PersonalToolbar {
padding: var(--gnome-toolbar-padding) !important;
padding-top: 0 !important;
--bookmarks-toolbar-overlapping-browser-height: auto;
}
#PlacesToolbar toolbarseparator {
border-top: 0 !important;
}
#PlacesToolbarItems > toolbarseparator::before {
border-image-source: none !important;
border-color: var(--gnome-tabbar-tab-separator-color) !important;
}
@media -moz-pref("gnomeTheme.bookmarksOnFullscreen") { /* OPTIONAL: Show bookmarks bar while in fullscreen */
:root[inFullscreen] #PersonalToolbar{
visibility: visible !important;
}
}
#import-button,
#PlacesToolbar .bookmark-item {
border-radius: 6px !important;
color: var(--gnome-window-color) !important;
padding: 3px 6px !important;
&:hover {
background-color: var(--gnome-selected-color) !important;
}
&:active, &[open] {
background-color: var(--gnome-selected-active-color) !important;
}
}
/* Text link */
.text-link, a {
color: var(--gnome-accent) !important;
}
/* Selection*/
*::-moz-selection {
background-color: var(--gnome-selection-bg) !important;
}
/* OPTIONAL: Hide WebRTC indicator */
@media -moz-pref("gnomeTheme.hideWebrtcIndicator") {
#webrtcIndicator {
display: none;
}
}
/* OPTIONAL: Move Bookmarks toolbar under tabs */
@media -moz-pref("gnomeTheme.bookmarksToolbarUnderTabs") {
#navigator-toolbox #PersonalToolbar {
order: 3;
}
#navigator-toolbox #TabsToolbar {
order: 2;
}
}

View file

@ -0,0 +1,263 @@
/* Header bar's URL bar */
@namespace xul "http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul";
#urlbar {
--urlbar-height: 34.00px;
--urlbar-toolbar-height: 34.00px !important;
}
#urlbar-container {
--urlbar-container-height: 34px !important;
@media (max-width: 630px) {
width: auto !important;
}
}
/* Center the URL bar */
toolbarspring {
max-width: 10000px !important;
}
/* URL bar */
#urlbar {
box-shadow: none !important;
&[breakout] {
width: calc(var(--urlbar-width) - var(--gnome-toolbar-spacing)) !important;
}
.urlbar-background {
box-shadow: var(--gnome-entry-box-shadow) !important;
border: 0 !important;
border-radius: var(--gnome-entry-radius) !important;
background: transparent !important;
}
.urlbar-input-container {
padding: 0 !important;
}
}
.urlbar-input::placeholder, .searchbar-textbox::placeholder {
opacity: 0.85 !important;
}
#urlbar-searchmode-switcher {
background-color: transparent !important;
border-radius: var(--gnome-button-radius) !important;
&:hover {
background-color: var(--gnome-hover-color) !important;
}
&:active, &[open] {
background-color: var(--gnome-active-color) !important;
}
#urlbar[searchmode] & {
background-color: var(--gnome-selected-color) !important;
border-start-end-radius: 0 !important;
border-end-end-radius: 0 !important;
&:hover {
background-color: var(--gnome-selected-hover-color) !important;
}
&:active, &[open] {
background-color: var(--gnome-selected-active-color) !important;
}
}
}
#searchmode-switcher-icon {
margin-inline-start: 6px !important;
}
#searchmode-switcher-chicklet {
background-color: var(--gnome-button-background) !important;
border-start-end-radius: var(--gnome-button-radius) !important;
border-end-end-radius: var(--gnome-button-radius) !important;
}
#searchmode-switcher-title {
color: var(--gnome-window-color);
padding-inline: 4px !important;
}
#searchmode-switcher-close {
background-size: 16px !important;
border-radius: 24px !important;
width: 24px !important;
height: 24px !important;
}
/* URL bar results */
.urlbarView {
background: transparent !important;
color: var(--gnome-window-color) !important;
margin: 11px 0 0 -3px !important;
position: absolute !important;
box-shadow: var(--gnome-menu-shadow) !important;
border-radius: 12px !important;
width: 100% !important;
}
/* Search bar result */
#PopupSearchAutoComplete {
margin-top: 7px !important;
}
.urlbarView-body-outer {
--item-padding-start: 0 !important;
--item-padding-end: 0 !important;
background: var(--gnome-menu-background) !important;
overflow-x: auto;
padding: 2px 6px !important;
border-radius: 8px 8px 0 0 !important;
}
.urlbarView-body-inner {
border: 0 !important;
}
.urlbarView-row-inner, .urlbarView-no-wrap {
align-items: center !important;
}
.urlbarView-row-inner {
padding-block: 5px !important;
border-radius: 5px !important;
}
.urlbarView-row[selected] {
background: var(--gnome-selected-color) !important;
color: var(--gnome-window-color) !important;
}
.urlbarView-row[selected]:hover {
background: var(--gnome-selected-hover-color) !important;
}
.urlbarView-row:not([selected]):hover {
background: var(--gnome-hover-color) !important;
}
.urlbarView-row:not([selected]):active {
background: var(--gnome-active-color) !important;
}
.urlbarView-url {
color: var(--gnome-accent) !important;
}
.urlbarView-action {
background: transparent !important;
}
/* Fix items overflow */
.urlbarView[actionoverride] .urlbarView-row[has-url] > .urlbarView-row-inner > .urlbarView-no-wrap,
.urlbarView-row[has-url]:not([type$="tab"]) > .urlbarView-row-inner > .urlbarView-no-wrap, .urlbarView-row[has-url]:is([type="remotetab"],
[sponsored]):is(:hover, [selected]) > .urlbarView-row-inner > .urlbarView-no-wrap {
max-width: calc(96% - 2 * (var(--urlbarView-favicon-width) + (6px + 2px))) !important;
}
/* Search engines buttons */
.search-one-offs {
padding: 8px !important;
background: var(--gnome-menu-background) !important;
border-top: 1px solid var(--gnome-menu-separator-color) !important;
border-radius: 0 0 8px 8px !important;
}
.search-one-offs[is_searchbar="true"] {
margin-bottom: -8px !important;
}
/* URL bar and Search bar */
#urlbar[focused] .urlbar-textbox-container {
margin: -1px !important;
}
#searchbar > .searchbar-textbox[focused] .searchbar-search-button {
margin-left: -1px !important;
}
#searchbar > .searchbar-textbox[focused] .search-go-button {
margin-right: -1px !important;
}
/* URL bar and Search bar's icons */
.urlbar-icon:hover,
.urlbar-icon-wrapper:hover,
.urlbar-icon[open],
.urlbar-icon-wrapper[open],
.urlbar-icon:hover:active,
.urlbar-icon-wrapper:hover:active,
.searchbar-search-button:hover .searchbar-search-icon,
.searchbar-search-button[open] .searchbar-search-icon,
.searchbar-search-button:hover:active .searchbar-search-icon {
background-color: transparent !important;
fill-opacity: 1 !important;
}
#urlbar .urlbar-icon {
margin: 0 !important;
height: 100% !important;
}
#notification-popup-box {
height: 100% !important;
}
@media -moz-pref("browser.urlbar.richSuggestions.featureGate") {
#urlbar:not(.searchButton) > .urlbar-input-container > #identity-box[pageproxystate="invalid"] > .identity-box-button {
margin-inline-start: 2px;
}
}
/* Search mode indicator */
#urlbar-search-mode-indicator,
#urlbar-label-box,
#urlbar-zoom-button {
background: var(--gnome-button-background) !important;
border: 0 !important;
border-radius: 26px !important;
outline: 0 !important;
margin: 4px 0;
}
#urlbar-search-mode-indicator {
padding-right: 0 !important;
}
#urlbar-search-mode-indicator-title {
color: var(--gnome-window-color);
padding-inline: 4px !important;
}
#urlbar-search-mode-indicator-close {
background-size: 16px !important;
background-position: center;
border-radius: 26px !important;
padding: 5px !important;
}
#urlbar-search-mode-indicator-close:hover {
background-color: var(--gnome-button-hover-background) !important;
}
#urlbar-zoom-button {
opacity: 0.8;
}
#urlbar-zoom-button:hover {
opacity: 1;
}
/* Firefox identity box */
#identity-box[pageproxystate="valid"].notSecureText > .identity-box-button,
#identity-box[pageproxystate="valid"].chromeUI > .identity-box-button,
#identity-box[pageproxystate="valid"].extensionPage > .identity-box-button,
#urlbar-label-box {
background-color: transparent !important;
}
#identity-box[pageproxystate="valid"].notSecureText > .identity-box-button:hover:not([open]),
#identity-box[pageproxystate="valid"].chromeUI > .identity-box-button:hover:not([open]),
#identity-box[pageproxystate="valid"].extensionPage > .identity-box-button:hover:not([open]) {
background-color: hsla(0,0%,70%,.2) !important;
}
#identity-box[pageproxystate="valid"].notSecureText > .identity-box-button:hover:active,
#identity-box[pageproxystate="valid"].notSecureText > .identity-box-button[open=true],
#identity-box[pageproxystate="valid"].chromeUI > .identity-box-button:hover:active,
#identity-box[pageproxystate="valid"].chromeUI > .identity-box-button[open=true],
#identity-box[pageproxystate="valid"].extensionPage > .identity-box-button:hover:active,
#identity-box[pageproxystate="valid"].extensionPage > .identity-box-button[open=true] {
background-color: hsla(0,0%,70%,.3) !important;
}
@media -moz-pref("browser.urlbar.richSuggestions.featureGate") {
#identity-box[pageproxystate="invalid"] > .identity-box-button {
padding-inline: var(--urlbar-icon-padding) !important;
}
}

View file

@ -0,0 +1,75 @@
@namespace xul url("http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul");
@namespace html url("http://www.w3.org/1999/xhtml");
/** Video player **/
.progressBar::-moz-progress-bar {
background-color: #fff !important;
}
.scrubber:hover::-moz-range-thumb,
.volumeControl:hover::-moz-range-thumb {
background-color: #ccc !important;
}
.scrubber:active::-moz-range-thumb,
.volumeControl:active::-moz-range-thumb {
background-color: #bbb !important;
}
.controlBar {
border-radius: 5px;
margin: auto;
margin-bottom: 5px;
width: 98.5%;
max-width: 800px;
height: 30px !important;
background-color: rgba(20,20,20,0.8) !important;
}
.controlBar > .button:enabled:hover {
fill: #ccc !important;
}
.controlBar > .button:enabled:hover:active {
fill: #bbb !important;
}
.scrubberStack {
margin: 0 10px;
}
.playButton {
scale: 0.8;
}
/** Vertical Volume Bar **/
/* I'm to stupid to get this working. Wasn't able to set proper position relative to mute button */
/* .muteButton:hover ~ .volumeStack{
margin-bottom: 129px !important;
}
.volumeStack:hover {
margin-bottom: 129px !important;
}
.volumeStack {
transform: rotate(270deg);
max-height: 33px !important;
min-width: 100px !important;
position:absolute !important;
margin-bottom: -150px !important;
background-color: rgba(20,20,20,0.8) !important;
border-bottom-right-radius: 5px !important;
border-top-right-radius: 5px !important;
transition-property: margin-bottom;
transition-duration: 0.13s;
transition-timing-function: linear;
}
.volumeControl{
width: 92% !important;
margin-left: 5px !important;
} */

View file

@ -0,0 +1,2 @@
@namespace xul url("http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul");

View file

@ -0,0 +1,17 @@
@namespace xul url("http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul");
/* Icons light/dark fix coloring hack filters */
:root {
--gnome-convert-icon-to-symbolic-hack-filter: invert(100%) sepia(100%) grayscale(100%) brightness(200%) brightness(85%) invert(100%);
}
@media (prefers-color-scheme: dark) {
:root {
--gnome-convert-icon-to-symbolic-hack-filter: invert(100%) sepia(100%) grayscale(100%) brightness(200%) brightness(85%);
}
}
/* Make all tab icons look kinda like symbolic icons */
tab .tab-icon-image {
filter: var(--gnome-convert-icon-to-symbolic-hack-filter);
}

View file

@ -0,0 +1,98 @@
@namespace xul url("http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul");
/* Icons light/dark fix coloring hack filters */
:root {
--gnome-icons-hack-filter: brightness(0) saturate(100%) invert(37%) sepia(8%) saturate(683%) hue-rotate(183deg) brightness(95%) contrast(84%);
--gnome-window-icons-hack-filter: brightness(0) saturate(100%) invert(37%) sepia(8%) saturate(683%) hue-rotate(183deg) brightness(95%) contrast(84%);
@media (prefers-color-scheme: dark) {
--gnome-icons-hack-filter: brightness(0) saturate(100%) invert(94%) sepia(11%) saturate(362%) hue-rotate(184deg) brightness(95%) contrast(87%);
--gnome-window-icons-hack-filter: brightness(0) saturate(100%) invert(94%) sepia(11%) saturate(362%) hue-rotate(184deg) brightness(95%) contrast(87%);
}
}
/* Use system theme icons instead of Adwaita icons included by theme */
:root {
--gnome-icon-application-x-addon-symbolic: url("moz-icon://stock/application-x-addon-symbolic?size=dialog") !important;
--gnome-icon-applications-engineering-symbolic: url("moz-icon://stock/applications-engineering-symbolic?size=dialog") !important;
--gnome-icon-edit-copy-symbolic: url("moz-icon://stock/edit-copy-symbolic?size=dialog") !important;
--gnome-icon-edit-cut-symbolic: url("moz-icon://stock/edit-cut-symbolic?size=dialog") !important;
--gnome-icon-edit-find-symbolic: url("moz-icon://stock/edit-find-symbolic?size=dialog") !important;
--gnome-icon-edit-paste-symbolic: url("moz-icon://stock/edit-paste-symbolic?size=dialog") !important;
--gnome-icon-folder-download-symbolic: url("moz-icon://stock/folder-download-symbolic?size=dialog") !important;
--gnome-icon-go-next-symbolic: url("moz-icon://stock/go-next-symbolic?size=dialog") !important;
--gnome-icon-go-previous-symbolic: url("moz-icon://stock/go-previous-symbolic?size=dialog") !important;
--gnome-icon-mail-unread-symbolic: url("moz-icon://stock/mail-unread-symbolic?size=dialog") !important;
--gnome-icon-open-menu-symbolic: url("moz-icon://stock/open-menu-symbolic?size=dialog") !important;
--gnome-icon-pan-down-symbolic: url("moz-icon://stock/pan-down-symbolic?size=dialog") !important;
--gnome-icon-pan-down-symbolic: url("moz-icon://stock/pan-down-symbolic?size=dialog") !important;
--gnome-icon-preferences-system-symbolic: url("moz-icon://stock/preferences-system-symbolic?size=dialog") !important;
--gnome-icon-preferences-system-time-symbolic: url("moz-icon://stock/preferences-system-time-symbolic?size=dialog") !important;
--gnome-icon-printer-symbolic: url("moz-icon://stock/printer-symbolic?size=dialog") !important;
--gnome-icon-process-stop-symbolic: url("moz-icon://stock/process-stop-symbolic?size=dialog") !important;
--gnome-icon-starred-symbolic: url("moz-icon://stock/starred-symbolic?size=dialog") !important;
--gnome-icon-tab-new-symbolic: url("moz-icon://stock/tab-new-symbolic?size=dialog") !important;
--gnome-icon-user-home-symbolic: url("moz-icon://stock/user-home-symbolic?size=dialog") !important;
--gnome-icon-view-fullscreen-symbolic: url("moz-icon://stock/view-fullscreen-symbolic?size=dialog") !important;
--gnome-icon-view-refresh-symbolic: url("moz-icon://stock/view-refresh-symbolic?size=dialog") !important;
--gnome-icon-view-restore-symbolic: url("moz-icon://stock/view-restore-symbolic?size=dialog") !important;
--gnome-icon-window-close-symbolic: url("moz-icon://stock/window-close-symbolic?size=dialog") !important;
--gnome-icon-window-maximize-symbolic: url("moz-icon://stock/window-maximize-symbolic?size=dialog") !important;
--gnome-icon-window-minimize-symbolic: url("moz-icon://stock/window-minimize-symbolic?size=dialog") !important;
--gnome-icon-window-new-symbolic: url("moz-icon://stock/window-new-symbolic?size=dialog") !important;
--gnome-icon-window-restore-symbolic: url("moz-icon://stock/window-restore-symbolic?size=dialog") !important;
--gnome-icon-zoom-in-symbolic: url("moz-icon://stock/zoom-in-symbolic?size=dialog") !important;
--gnome-icon-zoom-out-symbolic: url("moz-icon://stock/zoom-out-symbolic?size=dialog") !important;
}
/* Apply icon color filter */
:root[customtitlebar] .titlebar-buttonbox .titlebar-close .toolbarbutton-icon,
.close-icon,
#nav-bar #back-button .toolbarbutton-icon,
#nav-bar #forward-button .toolbarbutton-icon,
#PanelUI-menu-button .toolbarbutton-icon,
#new-tab-button .toolbarbutton-icon,
#tabs-newtab-button .toolbarbutton-icon,
#TabsToolbar #new-tab-button .toolbarbutton-icon,
#home-button .toolbarbutton-icon,
#preferences-button .toolbarbutton-icon,
#fullscreen-button .toolbarbutton-icon,
#zoom-out-button .toolbarbutton-icon,
#zoom-in-button .toolbarbutton-icon,
#developer-button .toolbarbutton-icon,
#email-link-button .toolbarbutton-icon,
#print-button .toolbarbutton-icon,
#add-ons-button .toolbarbutton-icon,
#find-button .toolbarbutton-icon,
#new-window-button .toolbarbutton-icon,
#bookmarks-menu-button .toolbarbutton-icon,
#history-panelmenu .toolbarbutton-icon,
#alltabs-button .toolbarbutton-icon,
#cut-button .toolbarbutton-icon,
#copy-button .toolbarbutton-icon,
#paste-button .toolbarbutton-icon,
#reload-button .toolbarbutton-icon,
#context-reload .toolbarbutton-icon,
#stop-button .toolbarbutton-icon,
#context-stop .toolbarbutton-icon,
#downloads-indicator-icon,
#downloads-indicator-icon .toolbarbutton-icon,
#nav-bar-overflow-button .toolbarbutton-icon,
#context-back .menu-iconic-icon,
#context-forward .menu-iconic-icon,
#appMenu-zoom-controls .toolbarbutton-icon,
#unified-extensions-button .toolbarbutton-icon,
#identity-icon {
filter: var(--gnome-window-icons-hack-filter) !important;
}
/* Fix icon size */
toolbar .toolbarbutton-1 > .toolbarbutton-icon,
#downloads-indicator-icon {
width: 16px !important;
height: 16px !important;
padding: 0 !important;
}
:root[customtitlebar] #titlebar .titlebar-button .toolbarbutton-icon,
:root[customtitlebar][inFullscreen] #window-controls toolbarbutton .toolbarbutton-icon {
width: 16px;
}

View file

@ -0,0 +1,24 @@
:root {
--gnome-toolbar-padding: 6px;
--gnome-toolbar-spacing: 6px;
--gnome-button-radius: 9px;
--gnome-button-size: 34px;
--gnome-entry-radius: var(--gnome-button-radius);
--gnome-entry-height: var(--gnome-button-size);
--gnome-card-radius: 12px;
--gnome-menu-radius: 9px;
--gnome-menu-padding: 6px;
--gnome-menu-item-padding: 12px;
--gnome-popover-radius: calc(var(--gnome-menu-radius) + 6px);
--gnome-dialog-radius: 18px; /* Alert dialog */
--gnome-dialog-padding: 24px;
/* Animations */
--gnome-animation-time: 300ms;
--gnome-tab-animation-time: 200ms;
@media (prefers-reduced-motion) {
--gnome-animation-time: 0ms;
--gnome-tab-animation-time: 0ms;
}
}

View file

@ -0,0 +1,9 @@
/* Import theme */
@import "theme/gnome-theme.css";
/* Import a custom stylesheet
* Everything you add in your customChrome.css file (it doesn't exist by
* default) will be included here and preserved between updates.
* You can apply your own custom styles in that file. */
@import "customChrome.css"; /**/

View file

@ -0,0 +1,14 @@
@import "theme/variables.css";
@import "theme/colors/light.css";
@import "theme/colors/dark.css";
@import "theme/pages/newtab.css";
@import "theme/pages/privatebrowsing.css";
@import "theme/parts/video-player.css";
/* Import a custom stylesheet
* Everything you add in your customContent.css file (it doesn't exist by
* default) will be included here and preserved between updates.
* You can apply your own custom styles in that file. */
@import "customContent.css"; /**/

View file

@ -0,0 +1,93 @@
@import "firefox-gnome-theme/userChrome.css";
@import "firefox-gnome-theme/userChrome.css";
/* This is strongly inspired by ../gtk/gtk.mustache. */
:root {
/* Palette */
--gnome-palette-blue-1: #{{.colors.base0D}};
--gnome-palette-blue-2: #{{.colors.base0D}};
--gnome-palette-blue-3: #{{.colors.base0D}};
--gnome-palette-blue-4: #{{.colors.base0D}};
--gnome-palette-blue-5: #{{.colors.base0D}};
--gnome-palette-green-1: #{{.colors.base0B}};
--gnome-palette-green-2: #{{.colors.base0B}};
--gnome-palette-green-3: #{{.colors.base0B}};
--gnome-palette-green-4: #{{.colors.base0B}};
--gnome-palette-green-5: #{{.colors.base0B}};
--gnome-palette-yellow-1: #{{.colors.base0A}};
--gnome-palette-yellow-2: #{{.colors.base0A}};
--gnome-palette-yellow-3: #{{.colors.base0A}};
--gnome-palette-yellow-4: #{{.colors.base0A}};
--gnome-palette-yellow-5: #{{.colors.base0A}};
--gnome-palette-orange-1: #{{.colors.base09}};
--gnome-palette-orange-2: #{{.colors.base09}};
--gnome-palette-orange-3: #{{.colors.base09}};
--gnome-palette-orange-4: #{{.colors.base09}};
--gnome-palette-orange-5: #{{.colors.base09}};
--gnome-palette-red-1: #{{.colors.base08}};
--gnome-palette-red-2: #{{.colors.base08}};
--gnome-palette-red-3: #{{.colors.base08}};
--gnome-palette-red-4: #{{.colors.base08}};
--gnome-palette-red-5: #{{.colors.base08}};
--gnome-palette-purple-1: #{{.colors.base0E}};
--gnome-palette-purple-2: #{{.colors.base0E}};
--gnome-palette-purple-3: #{{.colors.base0E}};
--gnome-palette-purple-4: #{{.colors.base0E}};
--gnome-palette-purple-5: #{{.colors.base0E}};
--gnome-palette-brown-1: #{{.colors.base0F}};
--gnome-palette-brown-2: #{{.colors.base0F}};
--gnome-palette-brown-3: #{{.colors.base0F}};
--gnome-palette-brown-4: #{{.colors.base0F}};
--gnome-palette-brown-5: #{{.colors.base0F}};
--gnome-palette-light-1: #{{.colors.base05}};
--gnome-palette-light-2: #{{.colors.base05}};
--gnome-palette-light-3: #{{.colors.base05}};
--gnome-palette-light-4: #{{.colors.base05}};
--gnome-palette-light-5: #{{.colors.base05}};
--gnome-palette-dark-1: #{{.colors.base05}};
--gnome-palette-dark-2: #{{.colors.base05}};
--gnome-palette-dark-3: #{{.colors.base05}};
--gnome-palette-dark-4: #{{.colors.base05}};
--gnome-palette-dark-5: #{{.colors.base05}};
/* Colors */
--gnome-warning-bg: #{{.colors.base0E}};
/* Wind.colors.ow */
--gnome-window-background: #{{.colors.base00}};
--gnome-window-color: #{{.colors.base05}};
--gnome-view-background: #{{.colors.base00}};
--gnome-sidebar-background: #{{.colors.base01}};
--gnome-secondary-sidebar-background: #{{.colors.base01}};
/* Card */
--gnome-card-background: #{{.colors.base01}};
--gnome-card-shade-color: rgba(0, 0, 0, 0.07);
/* Menu */
--gnome-menu-background: #{{.colors.base01}};
/* Headerbar */
--gnome-headerbar-background: #{{.colors.base01}};
--gnome-headerbar-shade-color: rgba(0, 0, 0, 0.07);
/* Toolbar */
--gnome-toolbar-icon-fill: #{{.colors.base05}};
/* Tabs */
--gnome-tabbar-tab-hover-background: color-mix(in srgb, #{{.colors.base01}}, #{{.colors.base02}} 75%);
--gnome-tabbar-tab-active-background: #{{.colors.base02}};
--gnome-tabbar-tab-active-background-contrast: #{{.colors.base02}};
--gnome-tabbar-tab-active-hover-background: color-mix(in srgb, #{{.colors.base02}}, #{{.colors.base03}} 25%);
/* Private Tabs */
--gnome-private-wordmark: #{{.colors.base04}};
--gnome-private-in-content-page-background: #{{.colors.base00}};
--gnome-private-text-primary-color: #{{.colors.base04}};
&:-moz-window-inactive {
--gnome-tabbar-tab-hover-background: var(--gnome-tabbar-tab-hover-background);
--gnome-tabbar-tab-active-background: var(--gnome-tabbar-tab-active-background);
}
}

View file

@ -0,0 +1,2 @@
@import "firefox-gnome-theme/userContent.css";

View file

@ -0,0 +1,301 @@
/*
* https://github.com/rafaelmardojai/firefox-gnome-theme/
*/
// Enable customChrome.css
user_pref("toolkit.legacyUserProfileCustomizations.stylesheets", true);
// Set UI density to normal
user_pref("browser.uidensity", 0);
// Enable SVG context-propertes
user_pref("svg.context-properties.content.enabled", true);
// Disable private window dark theme
user_pref("browser.theme.dark-private-windows", false);
// Enable rounded bottom window corners
user_pref("widget.gtk.rounded-bottom-corners.enabled", true);
// UI Settings
user_pref("browser.uiCustomization.state", '{"placements":{"widget-overflow-fixed-list":[],"unified-extensions-area":[],"nav-bar":["back-button","forward-button","stop-reload-button","customizableui-special-spring1","vertical-spacer","urlbar-container","customizableui-special-spring2","downloads-button","unified-extensions-button"],"toolbar-menubar":["menubar-items"],"TabsToolbar":["tabbrowser-tabs","new-tab-button","alltabs-button"],"vertical-tabs":[],"PersonalToolbar":[]},"seen":["developer-button","screenshot-button"],"dirtyAreaCache":["nav-bar","vertical-tabs","PersonalToolbar","TabsToolbar"],"currentVersion":23,"newElementCount":3}"')
//
/* You may copy+paste this file and use it as it is.
*
* If you make changes to your about:config while the program is running, the
* changes will be overwritten by the user.js when the application restarts.
*
* To make lasting changes to preferences, you will have to edit the user.js.
*/
/****************************************************************************
* Betterfox *
* "Ad meliora" *
* version: 144 *
* url: https://github.com/yokoffing/Betterfox *
****************************************************************************/
/****************************************************************************
* SECTION: FASTFOX *
****************************************************************************/
/** GENERAL ***/
user_pref("gfx.content.skia-font-cache-size", 32);
/** GFX ***/
user_pref("gfx.canvas.accelerated.cache-items", 32768);
user_pref("gfx.canvas.accelerated.cache-size", 4096);
user_pref("webgl.max-size", 16384);
/** DISK CACHE ***/
user_pref("browser.cache.disk.enable", false);
/** MEMORY CACHE ***/
user_pref("browser.cache.memory.capacity", 131072);
user_pref("browser.cache.memory.max_entry_size", 20480);
user_pref("browser.sessionhistory.max_total_viewers", 4);
user_pref("browser.sessionstore.max_tabs_undo", 10);
/** MEDIA CACHE ***/
user_pref("media.memory_cache_max_size", 262144);
user_pref("media.memory_caches_combined_limit_kb", 1048576);
user_pref("media.cache_readahead_limit", 600);
user_pref("media.cache_resume_threshold", 300);
/** IMAGE CACHE ***/
user_pref("image.cache.size", 10485760);
user_pref("image.mem.decode_bytes_at_a_time", 65536);
/** NETWORK ***/
user_pref("network.http.max-connections", 1800);
user_pref("network.http.max-persistent-connections-per-server", 10);
user_pref("network.http.max-urgent-start-excessive-connections-per-host", 5);
user_pref("network.http.request.max-start-delay", 5);
user_pref("network.http.pacing.requests.enabled", false);
user_pref("network.dnsCacheEntries", 10000);
user_pref("network.dnsCacheExpiration", 3600);
user_pref("network.ssl_tokens_cache_capacity", 10240);
/** SPECULATIVE LOADING ***/
user_pref("network.http.speculative-parallel-limit", 0);
user_pref("network.dns.disablePrefetch", true);
user_pref("network.dns.disablePrefetchFromHTTPS", true);
user_pref("browser.urlbar.speculativeConnect.enabled", false);
user_pref("browser.places.speculativeConnect.enabled", false);
user_pref("network.prefetch-next", false);
user_pref("network.predictor.enabled", false);
/****************************************************************************
* SECTION: SECUREFOX *
****************************************************************************/
/** TRACKING PROTECTION ***/
user_pref("browser.contentblocking.category", "strict");
user_pref("privacy.trackingprotection.allow_list.baseline.enabled", true);
user_pref("browser.download.start_downloads_in_tmp_dir", true);
user_pref("browser.helperApps.deleteTempFileOnExit", true);
user_pref("browser.uitour.enabled", false);
user_pref("privacy.globalprivacycontrol.enabled", true);
/** OCSP & CERTS / HPKP ***/
user_pref("security.OCSP.enabled", 0);
user_pref("security.csp.reporting.enabled", false);
/** SSL / TLS ***/
user_pref("security.ssl.treat_unsafe_negotiation_as_broken", true);
user_pref("browser.xul.error_pages.expert_bad_cert", true);
user_pref("security.tls.enable_0rtt_data", false);
/** DISK AVOIDANCE ***/
user_pref("browser.privatebrowsing.forceMediaMemoryCache", true);
user_pref("browser.sessionstore.interval", 60000);
/** SHUTDOWN & SANITIZING ***/
user_pref("privacy.history.custom", true);
user_pref("browser.privatebrowsing.resetPBM.enabled", true);
/** SEARCH / URL BAR ***/
user_pref("browser.urlbar.trimHttps", true);
user_pref("browser.urlbar.untrimOnUserInteraction.featureGate", true);
user_pref("browser.search.separatePrivateDefault.ui.enabled", true);
user_pref("browser.search.suggest.enabled", false);
user_pref("browser.urlbar.quicksuggest.enabled", false);
user_pref("browser.urlbar.groupLabels.enabled", false);
user_pref("browser.formfill.enable", false);
user_pref("network.IDN_show_punycode", true);
/** PASSWORDS ***/
user_pref("signon.formlessCapture.enabled", false);
user_pref("signon.privateBrowsingCapture.enabled", false);
user_pref("network.auth.subresource-http-auth-allow", 1);
user_pref("editor.truncate_user_pastes", false);
/** MIXED CONTENT + CROSS-SITE ***/
user_pref("security.mixed_content.block_display_content", true);
user_pref("pdfjs.enableScripting", false);
/** EXTENSIONS ***/
user_pref("extensions.enabledScopes", 5);
/** HEADERS / REFERERS ***/
user_pref("network.http.referer.XOriginTrimmingPolicy", 2);
/** CONTAINERS ***/
user_pref("privacy.userContext.ui.enabled", true);
/** SAFE BROWSING ***/
user_pref("browser.safebrowsing.downloads.remote.enabled", false);
/** MOZILLA ***/
user_pref("permissions.default.desktop-notification", 2);
user_pref("permissions.default.geo", 2);
user_pref("geo.provider.network.url", "https://beacondb.net/v1/geolocate");
user_pref("browser.search.update", false);
user_pref("permissions.manager.defaultsUrl", "");
user_pref("extensions.getAddons.cache.enabled", false);
/** TELEMETRY ***/
user_pref("datareporting.policy.dataSubmissionEnabled", false);
user_pref("datareporting.healthreport.uploadEnabled", false);
user_pref("toolkit.telemetry.unified", false);
user_pref("toolkit.telemetry.enabled", false);
user_pref("toolkit.telemetry.server", "data:,");
user_pref("toolkit.telemetry.archive.enabled", false);
user_pref("toolkit.telemetry.newProfilePing.enabled", false);
user_pref("toolkit.telemetry.shutdownPingSender.enabled", false);
user_pref("toolkit.telemetry.updatePing.enabled", false);
user_pref("toolkit.telemetry.bhrPing.enabled", false);
user_pref("toolkit.telemetry.firstShutdownPing.enabled", false);
user_pref("toolkit.telemetry.coverage.opt-out", true);
user_pref("toolkit.coverage.opt-out", true);
user_pref("toolkit.coverage.endpoint.base", "");
user_pref("browser.newtabpage.activity-stream.feeds.telemetry", false);
user_pref("browser.newtabpage.activity-stream.telemetry", false);
user_pref("datareporting.usage.uploadEnabled", false);
/** EXPERIMENTS ***/
user_pref("app.shield.optoutstudies.enabled", false);
user_pref("app.normandy.enabled", false);
user_pref("app.normandy.api_url", "");
/** CRASH REPORTS ***/
user_pref("breakpad.reportURL", "");
user_pref("browser.tabs.crashReporting.sendReport", false);
/****************************************************************************
* SECTION: PESKYFOX *
****************************************************************************/
/** MOZILLA UI ***/
user_pref("browser.privatebrowsing.vpnpromourl", "");
user_pref("extensions.getAddons.showPane", false);
user_pref("extensions.htmlaboutaddons.recommendations.enabled", false);
user_pref("browser.discovery.enabled", false);
user_pref("browser.shell.checkDefaultBrowser", false);
user_pref("browser.newtabpage.activity-stream.asrouter.userprefs.cfr.addons", false);
user_pref("browser.newtabpage.activity-stream.asrouter.userprefs.cfr.features", false);
user_pref("browser.preferences.moreFromMozilla", false);
user_pref("browser.aboutConfig.showWarning", false);
user_pref("browser.aboutwelcome.enabled", false);
user_pref("browser.profiles.enabled", true);
/** THEME ADJUSTMENTS ***/
user_pref("browser.compactmode.show", true);
user_pref("browser.privateWindowSeparation.enabled", false); // WINDOWS
/** AI ***/
user_pref("browser.ml.enable", false);
user_pref("browser.ml.chat.enabled", false);
user_pref("browser.ml.chat.menu", false);
user_pref("browser.tabs.groups.smart.enabled", false);
user_pref("browser.ml.linkPreview.enabled", false);
/** FULLSCREEN NOTICE ***/
user_pref("full-screen-api.transition-duration.enter", "0 0");
user_pref("full-screen-api.transition-duration.leave", "0 0");
user_pref("full-screen-api.warning.timeout", 0);
/** URL BAR ***/
user_pref("browser.urlbar.trending.featureGate", false);
/** NEW TAB PAGE ***/
user_pref("browser.newtabpage.activity-stream.default.sites", "");
user_pref("browser.newtabpage.activity-stream.showSponsoredTopSites", false);
user_pref("browser.newtabpage.activity-stream.feeds.section.topstories", false);
user_pref("browser.newtabpage.activity-stream.showSponsored", false);
user_pref("browser.newtabpage.activity-stream.showSponsoredCheckboxes", false);
/** DOWNLOADS ***/
user_pref("browser.download.manager.addToRecentDocs", false);
/** PDF ***/
user_pref("browser.download.open_pdf_attachments_inline", true);
/** TAB BEHAVIOR ***/
user_pref("browser.bookmarks.openInTabClosesMenu", false);
user_pref("browser.menu.showViewImageInfo", true);
user_pref("findbar.highlightAll", true);
user_pref("layout.word_select.eat_space_to_next_word", false);
/****************************************************************************
* START: MY OVERRIDES *
****************************************************************************/
// visit https://github.com/yokoffing/Betterfox/wiki/Common-Overrides
// visit https://github.com/yokoffing/Betterfox/wiki/Optional-Hardening
// Enter your personal overrides below this line:
// PREF: show weather on New Tab page
user_pref("browser.newtabpage.activity-stream.showWeather", true);
// PREF: restore search engine suggestions (install kagi extension for privacy)
user_pref("browser.search.suggest.enabled", true);
// PREF: enable container tabs
user_pref("privacy.userContext.enabled", true);
// PREF: disable Firefox Sync
user_pref("identity.fxaccounts.enabled", false);
// PREF: disable the Firefox View tour from popping up
user_pref("browser.firefox-view.feature-tour", "{\"screen\":\"\",\"complete\":true}");
// PREF: disable login manager
user_pref("signon.rememberSignons", false);
// PREF: disable address and credit card manager
user_pref("extensions.formautofill.addresses.enabled", false);
user_pref("extensions.formautofill.creditCards.enabled", false);
// PREF: do not allow embedded tweets, Instagram, Reddit, and Tiktok posts
user_pref("urlclassifier.trackingSkipURLs", "");
user_pref("urlclassifier.features.socialtracking.skipURLs", "");
// PREF: disable captive portal detection
user_pref("captivedetect.canonicalURL", "");
user_pref("network.captive-portal-service.enabled", false);
user_pref("network.connectivity-service.enabled", false);
// PREF: display the installation prompt for all extensions
user_pref("extensions.postDownloadThirdPartyPrompt", false);
// PREF: enforce certificate pinning
// [ERROR] MOZILLA_PKIX_ERROR_KEY_PINNING_FAILURE
// 1 = allow user MiTM (such as your antivirus) (default)
// 2 = strict
user_pref("security.cert_pinning.enforcement_level", 2);
// PREF: delete all browsing data on shutdown
// Settings → Privacy & Security → Cookies and Site Data → Manage Exceptions
user_pref("privacy.sanitize.sanitizeOnShutdown", true);
user_pref("privacy.clearOnShutdown_v2.cache", false);
user_pref("privacy.clearOnShutdown_v2.cookiesAndStorage", true);
user_pref("privacy.clearOnShutdown_v2.browsingHistoryAndDownloads", true);
user_pref("privacy.clearOnShutdown_v2.downloads", true); // [HIDDEN]
user_pref("privacy.clearOnShutdown_v2.formdata", true);
// PREF: after crashes or restarts, do not save extra session data
// such as form content, scrollbar positions, and POST data
user_pref("browser.sessionstore.privacy_level", 2);
/****************************************************************************
* SECTION: SMOOTHFOX *
****************************************************************************/
// visit https://github.com/yokoffing/Betterfox/blob/main/Smoothfox.js
user_pref("general.smoothScroll", true); // DEFAULT
user_pref("mousewheel.default.delta_multiplier_y", 250); // 250-400; adjust this number to your liking
/****************************************************************************
* END: BETTERFOX *
****************************************************************************/