Files
Marble-shell-theme/tweaks/gdm/tweak.py
Vladyslav Hroshev 163bfdef5a Reworked uninstallation process
- 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.
2025-03-28 19:35:31 +02:00

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}")