From 7c7a474ad0d57884b935324ab39cb69a95e262c2 Mon Sep 17 00:00:00 2001 From: Vladyslav Hroshev Date: Sun, 1 Sep 2024 21:21:46 +0300 Subject: [PATCH] Make installation undependable from tweaks Updated copyright years ("better late than never" ahh change) --- install.py | 60 +++++++++--------- scripts/config.py | 1 + scripts/gdm.py | 3 + scripts/theme.py | 2 +- scripts/tweaks_manager.py | 58 +++++++++++++++++ tweaks/launchpad/launchpad.css | 7 -- tweaks/overview/launchpad/launchpad.css | 7 ++ tweaks/{ => overview}/launchpad/launchpad.png | Bin tweaks/overview/tweak.py | 15 +++++ tweaks/panel/tweak.py | 27 ++++++++ 10 files changed, 141 insertions(+), 39 deletions(-) create mode 100644 scripts/tweaks_manager.py delete mode 100644 tweaks/launchpad/launchpad.css create mode 100644 tweaks/overview/launchpad/launchpad.css rename tweaks/{ => overview}/launchpad/launchpad.png (100%) create mode 100755 tweaks/overview/tweak.py create mode 100755 tweaks/panel/tweak.py diff --git a/install.py b/install.py index 52bf2b9..7915fd6 100644 --- a/install.py +++ b/install.py @@ -1,5 +1,5 @@ # This file installs Marble shell theme for GNOME DE -# Copyright (C) 2023 Vladyslav Hroshev +# Copyright (C) 2023-2024 Vladyslav Hroshev # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by @@ -20,11 +20,10 @@ import argparse # command-line options import shutil import textwrap # example text in argparse -from scripts import config # folder and files definitions +from scripts import config # folder and files definitions +from scripts.tweaks_manager import TweaksManager # load tweaks from files -from scripts.utils import ( - remove_files, # delete already installed Marble theme - hex_to_rgba) # convert HEX to RGBA +from scripts.utils import remove_files # delete already installed Marble theme from scripts.theme import Theme from scripts.gdm import GlobalTheme @@ -80,44 +79,44 @@ def parse_args(): gdm_theming.add_argument('--gdm', action='store_true', help='install GDM theme. \ Requires root privileges. You must specify a specific color.') - panel_args = parser.add_argument_group('Panel tweaks') - panel_args.add_argument('-Pds', '--panel_default_size', action='store_true', help='set default panel size') - panel_args.add_argument('-Pnp', '--panel_no_pill', action='store_true', help='remove panel button background') - panel_args.add_argument('-Ptc', '--panel_text_color', type=str, nargs='?', help='custom panel HEX(A) text color') - - overview_args = parser.add_argument_group('Overview tweaks') - overview_args.add_argument('--launchpad', action='store_true', help='change Show Apps icon to MacOS Launchpad icon') + # Dynamically load arguments from each tweak script + tweaks_manager = TweaksManager() + tweaks_manager.define_arguments(parser) return parser.parse_args() -def apply_tweaks(args, theme): +def apply_tweaks(args, theme, colors): """ Apply theme tweaks :param args: parsed arguments :param theme: Theme object + :param colors: colors from colors.json """ - if args.panel_default_size: - with open(f"{config.tweaks_folder}/panel/def-size.css", "r") as f: - theme += f.read() + tweaks_manager = TweaksManager() + tweaks_manager.apply_tweaks(args, theme, colors) - if args.panel_no_pill: - with open(f"{config.tweaks_folder}/panel/no-pill.css", "r") as f: - theme += f.read() + # if args.panel_default_size: + # with open(f"{config.tweaks_folder}/panel/def-size.css", "r") as f: + # theme += f.read() - if args.panel_text_color: - theme += ".panel-button,\ - .clock,\ - .clock-display StIcon {\ - color: rgba(" + ', '.join(map(str, hex_to_rgba(args.panel_text_color))) + ");\ - }" + # if args.panel_no_pill: + # with open(f"{config.tweaks_folder}/panel/no-pill.css", "r") as f: + # theme += f.read() - if args.launchpad: - with open(f"{config.tweaks_folder}/launchpad/launchpad.css", "r") as f: - theme += f.read() + # if args.panel_text_color: + # theme += ".panel-button,\ + # .clock,\ + # .clock-display StIcon {\ + # color: rgba(" + ', '.join(map(str, hex_to_rgba(args.panel_text_color))) + ");\ + # }" - theme *= f"{config.tweaks_folder}/launchpad/launchpad.png" + # if args.overview: + # with open(f"{config.tweaks_folder}/overview/overview.css", "r") as f: + # theme += f.read() + + # theme *= f"{config.tweaks_folder}/overview/overview.png" def install_theme(theme, hue, theme_name, sat, gdm=False): @@ -214,7 +213,7 @@ def local_theme(args, colors): config.themes_folder, config.temp_folder, mode=args.mode, is_filled=args.filled) - apply_tweaks(args, gnome_shell_theme) + apply_tweaks(args, gnome_shell_theme, colors) apply_colors(args, gnome_shell_theme, colors) @@ -226,7 +225,6 @@ def main(): if args.gdm: global_theme(args, colors) - # if not GDM theme else: local_theme(args, colors) diff --git a/scripts/config.py b/scripts/config.py index 0833347..41471aa 100644 --- a/scripts/config.py +++ b/scripts/config.py @@ -14,4 +14,5 @@ extracted_gdm_folder = "theme" # files definitions gnome_shell_css = f"{temp_gnome_folder}/gnome-shell.css" +tweak_file = f"./{tweaks_folder}/*/tweak.py" colors_json = "colors.json" diff --git a/scripts/gdm.py b/scripts/gdm.py index beab5a5..0361463 100644 --- a/scripts/gdm.py +++ b/scripts/gdm.py @@ -159,6 +159,9 @@ class GlobalTheme: :param sat: color saturation """ + if os.geteuid() != 0: + raise Exception("Root privileges required to install GDM theme") + if self.__is_installed(): print("Theme is installed. Reinstalling...") self.gst += ".backup" diff --git a/scripts/theme.py b/scripts/theme.py index 11d2b4c..e52298b 100644 --- a/scripts/theme.py +++ b/scripts/theme.py @@ -47,7 +47,7 @@ class Theme: ("BUTTON-TEXT_SECONDARY", "TEXT-BLACK_SECONDARY")) def __add__(self, other): - """Z + """ Add to main styles another styles :param other: styles to add :return: new Theme object diff --git a/scripts/tweaks_manager.py b/scripts/tweaks_manager.py new file mode 100644 index 0000000..0a3c382 --- /dev/null +++ b/scripts/tweaks_manager.py @@ -0,0 +1,58 @@ +import glob +import os +from scripts import config +import importlib.util + + +class TweaksManager: + """ + Tweak manager class to load and apply tweaks from the tweak files in the tweaks folder + (I think this class manages the tweaks) + """ + + def __init__(self): + self.tweak_files = glob.glob(config.tweak_file) + + @staticmethod + def load_tweak(tweak_file): + """ + Load the tweak module :return: + """ + + is_executable = os.access(tweak_file, os.X_OK) + if not is_executable: + os.chmod(tweak_file, 0o755) + + if os.access(tweak_file, os.X_OK): + spec = importlib.util.spec_from_file_location("tweak_module", tweak_file) + module = importlib.util.module_from_spec(spec) + spec.loader.exec_module(module) + return module + + return None + + def define_arguments(self, parser): + """ + Define arguments for the tweaks + :param parser: ArgumentParser object + """ + + for tweak_file in self.tweak_files: + tweak_module = self.load_tweak(tweak_file) + + if tweak_module: + tweak_module.define_arguments(parser) + + def apply_tweaks(self, args, theme, colors): + """ + Apply the tweaks + :param args: parsed arguments + :param theme: Theme object + :param colors: colors.json object + """ + + for tweak_file in self.tweak_files: + tweak_module = self.load_tweak(tweak_file) + + if tweak_module: + tweak_module.apply_tweak(args, theme, colors) diff --git a/tweaks/launchpad/launchpad.css b/tweaks/launchpad/launchpad.css deleted file mode 100644 index b176e23..0000000 --- a/tweaks/launchpad/launchpad.css +++ /dev/null @@ -1,7 +0,0 @@ -/* Change Show Apps icon to MacOS Launchpad icon */ - -.show-apps .show-apps-icon { - color: transparent; - background-image: url("launchpad.png"); - background-size: contain; - } \ No newline at end of file diff --git a/tweaks/overview/launchpad/launchpad.css b/tweaks/overview/launchpad/launchpad.css new file mode 100644 index 0000000..b5696c3 --- /dev/null +++ b/tweaks/overview/launchpad/launchpad.css @@ -0,0 +1,7 @@ +/* Change Show Apps icon to macOS Launchpad icon */ + +.show-apps .show-apps-icon { + color: transparent; + background-image: url("./launchpad.png"); + background-size: contain; + } \ No newline at end of file diff --git a/tweaks/launchpad/launchpad.png b/tweaks/overview/launchpad/launchpad.png similarity index 100% rename from tweaks/launchpad/launchpad.png rename to tweaks/overview/launchpad/launchpad.png diff --git a/tweaks/overview/tweak.py b/tweaks/overview/tweak.py new file mode 100755 index 0000000..ad4ba0d --- /dev/null +++ b/tweaks/overview/tweak.py @@ -0,0 +1,15 @@ +from scripts import config +overview_folder = f"{config.tweaks_folder}/overview" + + +def define_arguments(parser): + overview_args = parser.add_argument_group('Overview tweaks') + overview_args.add_argument('--launchpad', action='store_true', help='change Show Apps icon to macOS Launchpad icon') + + +def apply_tweak(args, theme, colors): + if args.launchpad: + with open(f"{overview_folder}/launchpad/launchpad.css", "r") as f: + theme += f.read() + + theme *= f"{overview_folder}/launchpad/launchpad.png" diff --git a/tweaks/panel/tweak.py b/tweaks/panel/tweak.py new file mode 100755 index 0000000..c96aef2 --- /dev/null +++ b/tweaks/panel/tweak.py @@ -0,0 +1,27 @@ +from scripts import config +from scripts.utils import hex_to_rgba +panel_folder = f"{config.tweaks_folder}/panel" + + +def define_arguments(parser): + panel_args = parser.add_argument_group('Panel tweaks') + panel_args.add_argument('-Pds', '--panel_default_size', action='store_true', help='set default panel size') + panel_args.add_argument('-Pnp', '--panel_no_pill', action='store_true', help='remove panel button background') + panel_args.add_argument('-Ptc', '--panel_text_color', type=str, nargs='?', help='custom panel HEX(A) text color') + + +def apply_tweak(args, theme, colors): + if args.panel_default_size: + with open(f"{panel_folder}/def-size.css", "r") as f: + theme += f.read() + + if args.panel_no_pill: + with open(f"{panel_folder}/no-pill.css", "r") as f: + theme += f.read() + + if args.panel_text_color: + theme += ".panel-button,\ + .clock,\ + .clock-display StIcon {\ + color: rgba(" + ', '.join(map(str, hex_to_rgba(args.panel_text_color))) + ");\ + }"