mirror of
https://github.com/imarkoff/Marble-shell-theme.git
synced 2025-10-01 05:44:41 -07:00
86
tweaks/gdm/tweak.py
Executable file
86
tweaks/gdm/tweak.py
Executable file
@@ -0,0 +1,86 @@
|
||||
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}")
|
Reference in New Issue
Block a user