mirror of
https://github.com/imarkoff/Marble-shell-theme.git
synced 2025-09-18 09:17:54 -07:00
- Support uninstalling all themes and specified colors/modes only; - For reinstallation should be specified -ri argument; - Fixed theme removal in /root directory; - Fixed --help; - Closes #36.
86 lines
3.1 KiB
Python
Executable File
86 lines
3.1 KiB
Python
Executable File
import os.path
|
|
import shutil
|
|
import subprocess
|
|
from argparse import ArgumentParser
|
|
from scripts import config
|
|
from scripts.utils.is_photo import is_photo, NotSupportedPhotoExtension
|
|
|
|
def define_arguments(parser: ArgumentParser):
|
|
gdm_args = parser.add_argument_group("GDM tweaks")
|
|
gdm_args.add_argument("--gdm-image", type=str, nargs="?", help="Set GDM background image")
|
|
gdm_args.add_argument("--gdm-blur", type=int, nargs="?", help="Blur GDM background image (px)")
|
|
gdm_args.add_argument("--gdm-darken", type=int, choices=range(0, 100), help="Darken GDM background image (%%)", metavar="(0 - 100)")
|
|
gdm_args.add_argument("--gdm-lighten", type=int, choices=range(0, 100), help="Lighten GDM background image", metavar="(0 - 100)")
|
|
|
|
|
|
def apply_tweak(args, theme, colors):
|
|
if args.gdm_image:
|
|
gdm_image = GDMImage(args.gdm_image, config.temp_folder, args.gdm_blur)
|
|
|
|
destination_dir = os.path.join(config.temp_folder, config.gdm_folder, config.raw_theme_folder)
|
|
os.makedirs(destination_dir, exist_ok=True)
|
|
|
|
gdm_image.copy_image(destination_dir)
|
|
|
|
theme += f"""
|
|
.login-dialog {{
|
|
background-image: url("{gdm_image.image_name}");
|
|
background-size: cover;
|
|
{f"box-shadow: inset 0 0 0 9999px rgba(0, 0, 0, {args.gdm_darken/100});" if args.gdm_darken else ""}
|
|
{f"box-shadow: inset 0 0 0 9999px rgba(255, 255, 255, {args.gdm_lighten/100});" if args.gdm_lighten else ""}
|
|
}}
|
|
"""
|
|
|
|
|
|
class GDMImage:
|
|
"""
|
|
Class to apply effects to GDM background image
|
|
"""
|
|
|
|
image_name: str
|
|
|
|
def __init__(self, path: str, temp_folder: str, blur: int = None):
|
|
self.path = path
|
|
|
|
extension = path.split(".")[-1]
|
|
if not is_photo(extension):
|
|
raise NotSupportedPhotoExtension(extension)
|
|
|
|
self.image_name = f"gdm-image.{extension}"
|
|
self.destination_dir = temp_folder
|
|
self.destination_file = os.path.join(self.destination_dir, self.image_name)
|
|
|
|
if not os.path.exists(self.destination_file):
|
|
self._create_file()
|
|
self._magick_tweaks(blur)
|
|
|
|
def copy_image(self, destination: str):
|
|
dest_path = os.path.join(destination, self.image_name)
|
|
shutil.copyfile(self.destination_file, dest_path)
|
|
|
|
def _create_file(self):
|
|
os.makedirs(self.destination_dir, exist_ok=True)
|
|
shutil.copyfile(self.path, self.destination_file)
|
|
|
|
def _magick_tweaks(self, blur: int = None):
|
|
if not shutil.which("magick"):
|
|
print("Warning: ImageMagick not found. Image effects will be skipped.")
|
|
return
|
|
|
|
file = self.destination_file
|
|
|
|
modified = False
|
|
command = ["magick", file]
|
|
|
|
if blur:
|
|
command.extend(["-blur", f"0x{blur}"])
|
|
modified = True
|
|
|
|
if modified:
|
|
print("Applying image filters... This may take a while.")
|
|
output_file = file
|
|
command.append(output_file)
|
|
try:
|
|
subprocess.run(command, check=True)
|
|
except subprocess.CalledProcessError:
|
|
print(f"Error: Failed to apply image effects to {file}") |