Files
mytoolkit/bin/commands/mycv.py
T
Zhengshou Lai 55af210db7 feat(mycv): add mycv build/open commands with --lang-en option
- build: generate CV PDF from cv-zh.md / cv-en.md via Typst cv template
- open: open generated PDF with default application
- --lang-en flag switches between Chinese and English CV
2026-05-05 09:30:31 +08:00

64 lines
1.5 KiB
Python

"""CV build and open utilities."""
import subprocess
from pathlib import Path
import click
from bin.md_to_pdf import build_pdf
_CV_DIR = (
Path.home()
/ "Library"
/ "Mobile Documents"
/ "iCloud~md~obsidian"
/ "Documents"
/ "myacademia"
/ "00-cv"
)
def _src(lang_en: bool) -> Path:
return _CV_DIR / ("cv-en.md" if lang_en else "cv-zh.md")
def _pdf(lang_en: bool) -> Path:
return _CV_DIR / ("cv-en.pdf" if lang_en else "cv-zh.pdf")
@click.group(name="mycv")
def mycv_cmd():
"""Build and open CV PDFs."""
pass
@mycv_cmd.command("build")
@click.option("--lang-en", is_flag=True, help="Build English CV (default: Chinese)")
def mycv_build(lang_en):
"""Build CV PDF from markdown using the cv Typst template."""
src = _src(lang_en)
out = _pdf(lang_en)
if not src.exists():
click.secho(f"CV source not found: {src}", fg="red")
raise click.Abort()
click.secho(f"Building {'English' if lang_en else 'Chinese'} CV ...", fg="cyan")
build_pdf("cv", [src], out, bookmark_depth=2)
click.secho(f"CV generated: {out}", fg="green")
@mycv_cmd.command("open")
@click.option("--lang-en", is_flag=True, help="Open English CV (default: Chinese)")
def mycv_open(lang_en):
"""Open the CV PDF with the default application."""
pdf = _pdf(lang_en)
if not pdf.exists():
click.secho(f"PDF not found: {pdf}", fg="red")
click.secho("Run 'mytoolkit mycv build' first.", fg="yellow")
raise click.Abort()
subprocess.run(["open", str(pdf)], check=False)