diff --git a/.env.example b/.env.example index 6e56f3951..5d0cc3dd8 100644 --- a/.env.example +++ b/.env.example @@ -3,3 +3,7 @@ # Crowdin Personal Access Token scoped to at least `project.report` (Read only) # Needed for `qtlimport --credits-since` CROWDIN_REPORT_READ_TOKEN= + +# Path for long-term cached files, like downloaded icon packs +# Used by `icons` unless `--work-dir` is set +CACHE_DIR= diff --git a/pkgutils.py b/pkgutils.py index 02714d0ee..b891791cd 100755 --- a/pkgutils.py +++ b/pkgutils.py @@ -153,7 +153,7 @@ if __name__ == "__main__": styles = ", ".join(["all", "default", "optional", "free", "non_free", *utils.icon_themes.ICON_SOURCES.keys()]) cmdIcons = parsers.add_parser("icons", help="Build icon theme files from upstream sources.") cmdIcons.add_argument("style", help=f"What icon style to build: {styles}") - cmdIcons.add_argument("--work-dir", help="Working directory.", default="build_icons") + cmdIcons.add_argument("--work-dir", help="Working directory.") cmdIcons.set_defaults(func=utils.icon_themes.main) # Import Translations diff --git a/utils/icon_themes.py b/utils/icon_themes.py index 510318017..1f141b083 100644 --- a/utils/icon_themes.py +++ b/utils/icon_themes.py @@ -30,22 +30,34 @@ import zipfile from pathlib import Path from xml.etree import ElementTree as ET -from utils.common import ROOT_DIR, log +from utils.common import ROOT_DIR, log, readEnvFile UTILS = Path(__file__).parent ET.register_namespace("", "http://www.w3.org/2000/svg") +# FontAwesome +# Repo: https://github.com/FortAwesome/Font-Awesome/ +# Website: https://fontawesome.com/ + +# Remix +# Repo: https://github.com/Remix-Design/RemixIcon +# Website: https://remixicon.com/ + +# Lucide +# Repo: https://github.com/lucide-icons/lucide +# Website: https://lucide.dev/ + ICON_SOURCES = { "material": "https://github.com/google/material-design-icons.git", "font_awesome": "https://github.com/FortAwesome/Font-Awesome/archive/refs/tags/7.3.1.zip", "remix": "https://github.com/Remix-Design/RemixIcon/archive/refs/tags/v4.9.1.zip", - "lucide": "https://github.com/lucide-icons/lucide/archive/refs/tags/1.24.0.zip", + "lucide": "https://github.com/lucide-icons/lucide/archive/refs/tags/1.49.0.zip", } ICON_EXTRACT = { "material": "material-design-icons", "font_awesome": "Font-Awesome-7.3.1", "remix": "RemixIcon-4.9.1", - "lucide": "lucide-1.24.0", + "lucide": "lucide-1.49.0", } ICONS = [ # Remember to also update tests/files/all_icons.json for test coverage @@ -397,10 +409,19 @@ def main(args: argparse.Namespace) -> None: log("") log("[b]Build Icon Themes[e]") log("[b]=================[e]") + + if args.work_dir: + workDir = Path(args.work_dir).absolute() + elif cacheDir := readEnvFile().get("CACHE_DIR"): + workDir = Path(cacheDir).expanduser().absolute() / "icons" + else: + workDir = ROOT_DIR / "build_icons" + + workDir.mkdir(parents=True, exist_ok=True) + + log(f"Work Dir: {workDir}") log("") - workDir = Path(args.work_dir).absolute() - workDir.mkdir(exist_ok=True) iconsDir = ROOT_DIR / "novelwriter" / "assets" / "icons" style = args.style