fix: rework zipping of files, better build CI
Thanks to @npv12 for this PR!
This commit is contained in:
2
.github/workflows/release.yml
vendored
2
.github/workflows/release.yml
vendored
@@ -21,7 +21,7 @@ jobs:
|
|||||||
- name: Install dependencies
|
- name: Install dependencies
|
||||||
run: pip install -r requirements.txt
|
run: pip install -r requirements.txt
|
||||||
- name: Generate themes
|
- name: Generate themes
|
||||||
run: python ./build.py
|
run: python ./install.py all -a all --zip
|
||||||
- name: Add zips to release
|
- name: Add zips to release
|
||||||
uses: softprops/action-gh-release@v1
|
uses: softprops/action-gh-release@v1
|
||||||
with:
|
with:
|
||||||
|
17
build.py
17
build.py
@@ -1,17 +0,0 @@
|
|||||||
import shutil
|
|
||||||
from zipfile import ZipFile
|
|
||||||
|
|
||||||
from scripts.create_theme import create_theme
|
|
||||||
from scripts.ctp_colors import ctp_colors, get_all_accent
|
|
||||||
from scripts.var import tmp_dir
|
|
||||||
|
|
||||||
for flavor, value in ctp_colors.items():
|
|
||||||
for accent in get_all_accent(value).keys():
|
|
||||||
print("\n\n\nCreating theme for", flavor, "with accent", accent)
|
|
||||||
filename = tmp_dir + '/' + create_theme(flavor, accent)
|
|
||||||
filenames = [filename, filename + '-xhdpi', filename + '-hdpi']
|
|
||||||
|
|
||||||
with ZipFile(filename + '.zip', 'w') as zip:
|
|
||||||
for filename in filenames:
|
|
||||||
zip.write(filename)
|
|
||||||
shutil.rmtree(filename)
|
|
83
install.py
83
install.py
@@ -7,64 +7,85 @@ Usage:
|
|||||||
"""
|
"""
|
||||||
import argparse
|
import argparse
|
||||||
|
|
||||||
|
from scripts.ctp_colors import ctp_colors, get_all_accent
|
||||||
from scripts.create_theme import create_theme
|
from scripts.create_theme import create_theme
|
||||||
from scripts.var import theme_name, tmp_dir
|
from scripts.var import theme_name, tmp_dir
|
||||||
|
|
||||||
parser = argparse.ArgumentParser(description='Catppuccin theme')
|
parser = argparse.ArgumentParser(description="Catppuccin theme")
|
||||||
parser.add_argument('type',
|
parser.add_argument("flavor",
|
||||||
metavar='theme type',
|
metavar="theme flavor",
|
||||||
type=str,
|
type=str,
|
||||||
choices=['mocha', 'frappe', 'macchiato', 'latte'],
|
nargs="+",
|
||||||
help='Type of the theme to apply. Can be frappe, mocha, macchiato, latte')
|
choices=["mocha", "frappe", "macchiato", "latte", "all"],
|
||||||
|
help="Flavor of the theme to apply. Can be frappe, mocha, macchiato, latte")
|
||||||
|
|
||||||
parser.add_argument('--name', '-n',
|
parser.add_argument("--name", "-n",
|
||||||
metavar='theme name',
|
metavar="theme name",
|
||||||
type=str,
|
type=str,
|
||||||
default=theme_name,
|
default=theme_name,
|
||||||
dest="name",
|
dest="name",
|
||||||
help='Name of the theme to apply. Defaults to Catppuccin')
|
help="Name of the theme to apply. Defaults to Catppuccin")
|
||||||
|
|
||||||
parser.add_argument('--dest', '-d',
|
parser.add_argument("--dest", "-d",
|
||||||
metavar='destination',
|
metavar="destination",
|
||||||
type=str,
|
type=str,
|
||||||
default=tmp_dir,
|
default=tmp_dir,
|
||||||
dest="dest",
|
dest="dest",
|
||||||
help='Destination of the files. defaults to releases folder inside the root')
|
help="Destination of the files. defaults to releases folder inside the root")
|
||||||
|
|
||||||
parser.add_argument('--accent', '-a',
|
parser.add_argument("--accent", "-a",
|
||||||
metavar='Accent of the theme',
|
metavar="Accent of the theme",
|
||||||
type=str,
|
type=str,
|
||||||
default="blue",
|
nargs="+",
|
||||||
|
default=["blue"],
|
||||||
dest="accent",
|
dest="accent",
|
||||||
choices=['rosewater', 'flamingo', 'pink', 'mauve', 'red', 'maroon', 'peach',
|
choices=["rosewater", "flamingo", "pink", "mauve", "red", "maroon", "peach",
|
||||||
'yellow', 'green', 'teal', 'sky', 'sapphire', 'blue', 'lavender'],
|
"yellow", "green", "teal", "sky", "sapphire", "blue", "lavender", "all"],
|
||||||
help="Accent of the theme. Can include 'rosewater', 'flamingo', 'pink', 'mauve', 'red', 'maroon', 'peach', 'yellow', 'green', 'teal', 'sky', 'sapphire', 'blue', 'lavender'")
|
help="Accent of the theme. Can include 'rosewater', 'flamingo', 'pink', 'mauve', 'red', 'maroon', \
|
||||||
|
'peach', 'yellow', 'green', 'teal', 'sky', 'sapphire', 'blue', 'lavender'")
|
||||||
|
|
||||||
parser.add_argument("--size", "-s",
|
parser.add_argument("--size", "-s",
|
||||||
metavar='Size of the theme',
|
metavar="Size of the theme",
|
||||||
type=str,
|
type=str,
|
||||||
default="standard",
|
default="standard",
|
||||||
dest="size",
|
dest="size",
|
||||||
choices=['standard', 'compact'],
|
choices=["standard", "compact"],
|
||||||
help='Size variant of the theme. Can be standard or compact')
|
help="Size variant of the theme. Can be standard or compact")
|
||||||
|
|
||||||
parser.add_argument('--tweaks',
|
parser.add_argument("--tweaks",
|
||||||
metavar='Colloid specific tweaks',
|
metavar="Colloid specific tweaks",
|
||||||
type=str,
|
type=str,
|
||||||
default=[],
|
default=[],
|
||||||
nargs='+',
|
nargs="+",
|
||||||
dest="tweaks",
|
dest="tweaks",
|
||||||
choices=['black', 'rimless', 'normal'],
|
choices=["black", "rimless", "normal"],
|
||||||
help='Some specifc tweaks. like black, rimless, normal buttons')
|
help="Some specifc tweaks. like black, rimless, normal buttons")
|
||||||
|
|
||||||
parser.add_argument('--link',
|
parser.add_argument("-l", "--link",
|
||||||
help='Link advaita themes to our catppuccin theme',
|
help="Link advaita themes to our catppuccin theme",
|
||||||
type=bool,
|
type=bool,
|
||||||
default=True,
|
default=False,
|
||||||
action=argparse.BooleanOptionalAction,
|
action=argparse.BooleanOptionalAction,
|
||||||
dest="link",)
|
dest="link")
|
||||||
|
|
||||||
|
parser.add_argument("--zip",
|
||||||
|
help="Zip catppuccin theme",
|
||||||
|
type=bool,
|
||||||
|
default=False,
|
||||||
|
action=argparse.BooleanOptionalAction,
|
||||||
|
dest="zip")
|
||||||
|
|
||||||
args = parser.parse_args()
|
args = parser.parse_args()
|
||||||
|
|
||||||
filename = create_theme(args.type, args.accent, args.dest,
|
if "all" in args.flavor:
|
||||||
args.link, args.name, args.size, args.tweaks)
|
flavors = ctp_colors.keys()
|
||||||
|
else:
|
||||||
|
flavors = args.flavor
|
||||||
|
|
||||||
|
if "all" in args.accent:
|
||||||
|
accents = get_all_accent().keys()
|
||||||
|
else:
|
||||||
|
accents = args.accent
|
||||||
|
|
||||||
|
filename = create_theme(flavors, accents, args.dest,
|
||||||
|
args.link, args.name, args.size, args.tweaks, args.zip)
|
||||||
|
@@ -1,20 +1,26 @@
|
|||||||
import os
|
import os
|
||||||
import shutil
|
import shutil
|
||||||
import subprocess
|
import subprocess
|
||||||
|
from typing import List
|
||||||
|
|
||||||
from scripts.ctp_colors import ctp_colors
|
from scripts.ctp_colors import ctp_colors
|
||||||
from scripts.recolor import recolor
|
from scripts.recolor import recolor
|
||||||
|
from scripts.utils import zip_multiple_folders
|
||||||
from scripts.var import def_color_map, theme_name, tmp_dir, work_dir
|
from scripts.var import def_color_map, theme_name, tmp_dir, work_dir
|
||||||
|
|
||||||
|
|
||||||
def create_theme(type: str, accent: str, dest: str = tmp_dir, link: bool = False, name: str = theme_name, size: str = "standard", tweaks=[]) -> str:
|
def create_theme(types: List[str], accents: List[str], dest: str = tmp_dir, link: bool = False,
|
||||||
|
name: str = theme_name, size: str = "standard", tweaks=[], zip = False) -> None:
|
||||||
|
|
||||||
try:
|
try:
|
||||||
os.makedirs(tmp_dir) # Create our temporary directory
|
os.makedirs(dest) # Create our destination directory
|
||||||
except FileExistsError:
|
except FileExistsError:
|
||||||
pass
|
pass
|
||||||
|
|
||||||
|
for type in types:
|
||||||
|
for accent in accents:
|
||||||
# Recolor colloid wrt our selection like mocha. latte
|
# Recolor colloid wrt our selection like mocha. latte
|
||||||
|
print(type, accent)
|
||||||
recolor(ctp_colors[type], accent)
|
recolor(ctp_colors[type], accent)
|
||||||
theme_style: str = "light" if type == "latte" else "dark"
|
theme_style: str = "light" if type == "latte" else "dark"
|
||||||
install_cmd: str = f"./install.sh -c {theme_style} -s {size} -n {name} -d {dest} -t {def_color_map[accent]}"
|
install_cmd: str = f"./install.sh -c {theme_style} -s {size} -n {name} -d {dest} -t {def_color_map[accent]}"
|
||||||
@@ -29,7 +35,8 @@ def create_theme(type: str, accent: str, dest: str = tmp_dir, link: bool = False
|
|||||||
|
|
||||||
try:
|
try:
|
||||||
# Rename colloid generated files as per catppuccin
|
# Rename colloid generated files as per catppuccin
|
||||||
new_filename = f"{theme_name}-{type.capitalize()}-{size.capitalize()}-{accent.capitalize()}"
|
new_filename = dest + \
|
||||||
|
f"/{theme_name}-{type.capitalize()}-{size.capitalize()}-{accent.capitalize()}"
|
||||||
filename = f"{theme_name}"
|
filename = f"{theme_name}"
|
||||||
if def_color_map[accent] != 'default':
|
if def_color_map[accent] != 'default':
|
||||||
filename += f"-{def_color_map[accent].capitalize()}"
|
filename += f"-{def_color_map[accent].capitalize()}"
|
||||||
@@ -37,20 +44,19 @@ def create_theme(type: str, accent: str, dest: str = tmp_dir, link: bool = False
|
|||||||
if size == 'compact':
|
if size == 'compact':
|
||||||
filename += '-Compact'
|
filename += '-Compact'
|
||||||
try:
|
try:
|
||||||
shutil.rmtree(dest + "/" + new_filename + '-hdpi')
|
shutil.rmtree(new_filename + '-hdpi')
|
||||||
shutil.rmtree(dest + "/" + new_filename + '-xhdpi')
|
shutil.rmtree(new_filename + '-xhdpi')
|
||||||
shutil.rmtree(dest + "/" + new_filename)
|
shutil.rmtree(new_filename)
|
||||||
except:
|
except:
|
||||||
pass
|
pass
|
||||||
os.rename(dest + "/" + filename + '-hdpi',
|
os.rename(dest + "/" + filename + '-hdpi',
|
||||||
dest + "/" + new_filename + '-hdpi')
|
new_filename + '-hdpi')
|
||||||
os.rename(dest + "/" + filename + '-xhdpi',
|
os.rename(dest + "/" + filename + '-xhdpi',
|
||||||
dest + "/" + new_filename + '-xhdpi')
|
new_filename + '-xhdpi')
|
||||||
os.rename(dest + "/" + filename, dest + "/" + new_filename)
|
os.rename(dest + "/" + filename, new_filename)
|
||||||
print("Successfully renamed file")
|
print("Successfully renamed file")
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
print("Failed to rename the files due to:", e)
|
print("Failed to rename the files due to:", e)
|
||||||
return ""
|
|
||||||
|
|
||||||
if link:
|
if link:
|
||||||
try:
|
try:
|
||||||
@@ -63,15 +69,16 @@ def create_theme(type: str, accent: str, dest: str = tmp_dir, link: bool = False
|
|||||||
os.makedirs(f"{HOME}/.config/gtk-4.0")
|
os.makedirs(f"{HOME}/.config/gtk-4.0")
|
||||||
except FileExistsError:
|
except FileExistsError:
|
||||||
pass
|
pass
|
||||||
os.symlink(f"{dest + '/' + new_filename}/gtk-4.0/assets",
|
os.symlink(f"{new_filename}/gtk-4.0/assets",
|
||||||
f"{HOME}/.config/gtk-4.0/assets")
|
f"{HOME}/.config/gtk-4.0/assets")
|
||||||
os.symlink(f"{dest + '/' + new_filename}/gtk-4.0/gtk.css",
|
os.symlink(f"{new_filename}/gtk-4.0/gtk.css",
|
||||||
f"{HOME}/.config/gtk-4.0/gtk.css")
|
f"{HOME}/.config/gtk-4.0/gtk.css")
|
||||||
os.symlink(f"{dest + '/' + new_filename}/gtk-4.0/gtk-dark.css",
|
os.symlink(f"{new_filename}/gtk-4.0/gtk-dark.css",
|
||||||
f"{HOME}/.config/gtk-4.0/gtk-dark.css")
|
f"{HOME}/.config/gtk-4.0/gtk-dark.css")
|
||||||
print("Successfully created symlinks for libadvaita")
|
print("Successfully created symlinks for libadvaita")
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
print("Failed to link due to :", e)
|
print("Failed to link due to :", e)
|
||||||
return ""
|
|
||||||
|
|
||||||
return new_filename
|
if zip:
|
||||||
|
foldernames = [new_filename, new_filename + '-xhdpi', new_filename + '-hdpi']
|
||||||
|
zip_multiple_folders(foldernames, new_filename + ".zip", not link)
|
||||||
|
@@ -7,9 +7,9 @@ ctp_colors = {
|
|||||||
"macchiato": Flavour.macchiato()
|
"macchiato": Flavour.macchiato()
|
||||||
}
|
}
|
||||||
|
|
||||||
def get_all_accent(flavor):
|
def get_all_accent():
|
||||||
accent = {}
|
accent = {}
|
||||||
for key, value in flavor.__dict__.items():
|
for key, value in Flavour.latte().__dict__.items():
|
||||||
if key not in ['white', 'black', 'text', 'subtext0', 'subtext1', 'overlay0', 'overlay1', 'overlay2', 'surface0', 'surface1', 'surface2', 'base', 'mantle', 'crust']:
|
if key not in ['white', 'black', 'text', 'subtext0', 'subtext1', 'overlay0', 'overlay1', 'overlay2', 'surface0', 'surface1', 'surface2', 'base', 'mantle', 'crust']:
|
||||||
accent[key] = value
|
accent[key] = value
|
||||||
|
|
||||||
|
@@ -1,4 +1,7 @@
|
|||||||
|
import os
|
||||||
import re
|
import re
|
||||||
|
import shutil
|
||||||
|
import zipfile
|
||||||
|
|
||||||
|
|
||||||
def replacetext(file_name: str, search_text: str, replace_text: str) -> None:
|
def replacetext(file_name: str, search_text: str, replace_text: str) -> None:
|
||||||
@@ -20,3 +23,25 @@ def replacetext(file_name: str, search_text: str, replace_text: str) -> None:
|
|||||||
f.seek(0)
|
f.seek(0)
|
||||||
f.write(file)
|
f.write(file)
|
||||||
f.truncate()
|
f.truncate()
|
||||||
|
|
||||||
|
|
||||||
|
def zipdir(path, ziph):
|
||||||
|
"""
|
||||||
|
Takes in a oath of a directory and zips it in a ziph.
|
||||||
|
Util to zip a directory.
|
||||||
|
Thanks https://stackoverflow.com/questions/46229764/python-zip-multiple-directories-into-one-zip-file
|
||||||
|
"""
|
||||||
|
for root, _, files in os.walk(path):
|
||||||
|
for file in files:
|
||||||
|
ziph.write(os.path.join(root, file),
|
||||||
|
os.path.relpath(os.path.join(root, file),
|
||||||
|
os.path.join(path, '..')))
|
||||||
|
|
||||||
|
|
||||||
|
def zip_multiple_folders(dir_list, zip_name, remove = True):
|
||||||
|
zipf = zipfile.ZipFile(zip_name, 'w', zipfile.ZIP_DEFLATED)
|
||||||
|
for dir in dir_list:
|
||||||
|
zipdir(dir, zipf)
|
||||||
|
if remove:
|
||||||
|
shutil.rmtree(dir)
|
||||||
|
zipf.close()
|
||||||
|
Reference in New Issue
Block a user