mirror of
https://github.com/GradienceTeam/Gradience.git
synced 2024-09-11 23:52:31 +00:00
# Parse firefox profiles.ini files to get paths of profiles This parses firefox profiles.ini files to get the paths of the profiles instead of just treating any subdir of the firefox dir as a profile. This allows supporting profiles without a dot in their name which the existing glob didn't match which can happen if they are named manually, as well as profiles configured to be outside of the firefox directory that were ignored and profiles that are symlinked (by adding a resolve() on the path before the is_dir()). There is also an additional try condition to avoid failing for the remaining profiles if encountering a profile without the customChrome.css, as it might be installed on some profiles only. ## Changelog - Fixed theming Firefox profiles that don't have a dot in their name - Fixed theming Firefox profiles that are outside of the Firefox dir - Fixed theming Firefox profiles that are symlinks - Fixed failing to theme remaining profiles after encountering one on which the firefox-gnome-theme is not present Please note that I have only tested on non-flatpak Firefox. Signed-off-by: 0xMRTT <0xMRTT@proton.me> Co-authored-by: 0xMRTT <0xMRTT@proton.me>
149 lines
7.4 KiB
Python
149 lines
7.4 KiB
Python
from pathlib import Path
|
|
from configparser import ConfigParser
|
|
|
|
from yapsy.IPlugin import IPlugin
|
|
|
|
TEMPLATE = """
|
|
/*
|
|
* =========================================================================== *
|
|
* This file was overwritten by the firefox_gnome_theme plugin from Gradience *
|
|
* *
|
|
* Report issue at: https://github.com/GradienceTeam/Plugins/issues/new/choose *
|
|
* Join us on matrix: https://matrix.to/#/#Gradience:matrix.org *
|
|
* =========================================================================== *
|
|
*/
|
|
|
|
:root {{
|
|
--gnome-browser-before-load-background: {window_bg_color};
|
|
--gnome-accent-bg: {accent_bg_color};
|
|
--gnome-accent: {accent_color};
|
|
--gnome-toolbar-background: {window_bg_color};
|
|
--gnome-toolbar-color: {window_fg_color};
|
|
--gnome-toolbar-icon-fill: {window_fg_color};
|
|
--gnome-inactive-toolbar-color: {window_bg_color};
|
|
--gnome-inactive-toolbar-border-color: {headerbar_border_color};
|
|
--gnome-inactive-toolbar-icon-fill: {window_fg_color};
|
|
--gnome-menu-background: {dialog_bg_color};
|
|
--gnome-headerbar-background: {headerbar_bg_color};
|
|
--gnome-button-destructive-action-background: {destructive_bg_color};
|
|
--gnome-entry-color: {view_fg_color};
|
|
--gnome-inactive-entry-color: {view_fg_color};
|
|
--gnome-switch-slider-background: {view_bg_color};
|
|
--gnome-switch-active-slider-background: {accent_color};
|
|
--gnome-inactive-tabbar-tab-background: {window_bg_color};
|
|
--gnome-inactive-tabbar-tab-active-background: rgba(255,255,255,0.025);
|
|
--gnome-tabbar-tab-background: {window_bg_color};
|
|
--gnome-tabbar-tab-hover-background: rgba(255,255,255,0.025);
|
|
--gnome-tabbar-tab-active-background: rgba(255,255,255,0.075);
|
|
--gnome-tabbar-tab-active-hover-background: rgba(255,255,255,0.100);
|
|
--gnome-tabbar-tab-active-background-contrast: rgba(255,255,255,0.125);
|
|
}}
|
|
|
|
@-moz-document url-prefix(about:home), url-prefix(about:newtab) {{
|
|
body{{
|
|
--newtab-background-color: #2A2A2E!important;
|
|
--newtab-border-primary-color: rgba(249, 249, 250, 0.8)!important;
|
|
--newtab-border-secondary-color: rgba(249, 249, 250, 0.1)!important;
|
|
--newtab-button-primary-color: #0060DF!important;
|
|
--newtab-button-secondary-color: #38383D!important;
|
|
--newtab-element-active-color: rgba(249, 249, 250, 0.2)!important;
|
|
--newtab-element-hover-color: rgba(249, 249, 250, 0.1)!important;
|
|
--newtab-icon-primary-color: rgba(249, 249, 250, 0.8)!important;
|
|
--newtab-icon-secondary-color: rgba(249, 249, 250, 0.4)!important;
|
|
--newtab-icon-tertiary-color: rgba(249, 249, 250, 0.4)!important;
|
|
--newtab-inner-box-shadow-color: rgba(249, 249, 250, 0.2)!important;
|
|
--newtab-link-primary-color: var(--gnome-accent)!important;
|
|
--newtab-link-secondary-color: #50BCB6!important;
|
|
--newtab-text-conditional-color: #F9F9FA!important;
|
|
--newtab-text-primary-color: var(--gnome-accent)!important;
|
|
--newtab-text-secondary-color: rgba(249, 249, 250, 0.8)!important;
|
|
--newtab-textbox-background-color: var(--gnome-toolbar-background)!important;
|
|
--newtab-textbox-border: var(--gnome-inactive-toolbar-border-color)!important;
|
|
--newtab-textbox-focus-color: #45A1FF!important;
|
|
--newtab-textbox-focus-boxshadow: 0 0 0 1px #45A1FF, 0 0 0 4px rgba(69, 161, 255, 0.3)!important;
|
|
--newtab-feed-button-background: #38383D!important;
|
|
--newtab-feed-button-text: #F9F9FA!important;
|
|
--newtab-feed-button-background-faded: rgba(56, 56, 61, 0.6)!important;
|
|
--newtab-feed-button-text-faded: rgba(249, 249, 250, 0)!important;
|
|
--newtab-feed-button-spinner: #D7D7DB!important;
|
|
--newtab-contextmenu-background-color: #4A4A4F!important;
|
|
--newtab-contextmenu-button-color: #2A2A2E!important;
|
|
--newtab-modal-color: #2A2A2E!important;
|
|
--newtab-overlay-color: rgba(12, 12, 13, 0.8)!important;
|
|
--newtab-section-header-text-color: rgba(249, 249, 250, 0.8)!important;
|
|
--newtab-section-navigation-text-color: rgba(249, 249, 250, 0.8)!important;
|
|
--newtab-section-active-contextmenu-color: #FFF!important;
|
|
--newtab-search-border-color: rgba(249, 249, 250, 0.2)!important;
|
|
--newtab-search-dropdown-color: #38383D!important;
|
|
--newtab-search-dropdown-header-color: #4A4A4F!important;
|
|
--newtab-search-header-background-color: rgba(42, 42, 46, 0.95)!important;
|
|
--newtab-search-icon-color: rgba(249, 249, 250, 0.6)!important;
|
|
--newtab-search-wordmark-color: #FFF!important;
|
|
--newtab-topsites-background-color: #38383D!important;
|
|
--newtab-topsites-icon-shadow: none!important;
|
|
--newtab-topsites-label-color: rgba(249, 249, 250, 0.8)!important;
|
|
--newtab-card-active-outline-color: var(--gnome-toolbar-icon-fill)!important;
|
|
--newtab-card-background-color: var(--gnome-toolbar-background)!important;
|
|
--newtab-card-hairline-color: rgba(249, 249, 250, 0.1)!important;
|
|
--newtab-card-placeholder-color: #4A4A4F!important;
|
|
--newtab-card-shadow: 0 1px 8px 0 rgba(12, 12, 13, 0.2)!important;
|
|
--newtab-snippets-background-color: #38383D!important;
|
|
--newtab-snippets-hairline-color: rgba(255, 255, 255, 0.1)!important;
|
|
--trailhead-header-text-color: rgba(255, 255, 255, 0.6)!important;
|
|
--trailhead-cards-background-color: rgba(12, 12, 13, 0.1)!important;
|
|
--trailhead-card-button-background-color: rgba(12, 12, 13, 0.3)!important;
|
|
--trailhead-card-button-background-hover-color: rgba(12, 12, 13, 0.5)!important;
|
|
--trailhead-card-button-background-active-color: rgba(12, 12, 13, 0.7)!important;
|
|
}}
|
|
}}
|
|
"""
|
|
|
|
|
|
class FirefoxGnomeTheme2Plugin(IPlugin):
|
|
plugin_id = "firefox_gnome_theme"
|
|
title = "Firefox GNOME Theme"
|
|
author = "Gradience Team"
|
|
template = TEMPLATE
|
|
|
|
def give_preset_settings(self, preset_settings, custom_settings=None):
|
|
self.variables = preset_settings["variables"]
|
|
|
|
def validate(self):
|
|
return False, None
|
|
|
|
def open_settings(self):
|
|
return False
|
|
|
|
def apply(self, dark_theme=False):
|
|
for path in [
|
|
"~/.mozilla/firefox",
|
|
"~/.librewolf",
|
|
"~/.var/app/org.mozilla.firefox/.mozilla/firefox",
|
|
"~/.var/app/io.gitlab.librewolf-community/.librewolf",
|
|
]:
|
|
try:
|
|
directory = Path(path).expanduser()
|
|
cp = ConfigParser()
|
|
cp.read(str(directory / "profiles.ini"))
|
|
results = []
|
|
for section in cp.sections():
|
|
if not section.startswith("Profile"):
|
|
continue
|
|
if cp[section]["IsRelative"] == 0:
|
|
results.append(Path(cp[section]["Path"]))
|
|
else:
|
|
results.append(directory / Path(cp[section]["Path"]))
|
|
for result in results:
|
|
try:
|
|
if result.resolve().is_dir():
|
|
with open(
|
|
f"{result}/chrome/firefox-gnome-theme/customChrome.css",
|
|
"w",
|
|
) as f:
|
|
f.write(self.template.format(**self.variables))
|
|
except OSError:
|
|
pass
|
|
except OSError:
|
|
pass
|
|
except StopIteration:
|
|
pass
|