Skip to content

rendercv.themes.options

The rendercv.themes.options module contains the standard data models for the Typst themes' design options. To avoid code duplication, the themes are encouraged to inherit from these data models.

Page

Bases: RenderCVBaseModelWithoutExtraKeys

Options related to the page.

Source code in rendercv/themes/options.py
class Page(RenderCVBaseModelWithoutExtraKeys):
    """Options related to the page."""

    model_config = pydantic.ConfigDict(title="Page")

    size: PageSize = page_size_field_info
    top_margin: TypstDimension = page_top_margin_field_info
    bottom_margin: TypstDimension = page_bottom_margin_field_info
    left_margin: TypstDimension = page_left_margin_field_info
    right_margin: TypstDimension = page_right_margin_field_info
    show_page_numbering: bool = page_show_page_numbering_field_info
    show_last_updated_date: bool = page_show_last_updated_date_field_info

Colors

Bases: RenderCVBaseModelWithoutExtraKeys

Color used throughout the CV.

Source code in rendercv/themes/options.py
class Colors(RenderCVBaseModelWithoutExtraKeys):
    """Color used throughout the CV."""

    model_config = pydantic.ConfigDict(title="Colors")

    text: pydantic_color.Color = colors_text_field_info
    name: pydantic_color.Color = colors_name_field_info
    connections: pydantic_color.Color = colors_connections_field_info
    section_titles: pydantic_color.Color = colors_section_titles_field_info
    links: pydantic_color.Color = colors_links_field_info
    last_updated_date_and_page_numbering: pydantic_color.Color = (
        colors_last_updated_date_and_page_numbering_field_info
    )

    @pydantic.field_serializer(
        "text",
        "name",
        "connections",
        "section_titles",
        "links",
        "last_updated_date_and_page_numbering",
    )
    def serialize_color(self, value: pydantic_color.Color) -> str:
        return value.as_rgb()

Text

Bases: RenderCVBaseModelWithoutExtraKeys

Options related to text.

Source code in rendercv/themes/options.py
class Text(RenderCVBaseModelWithoutExtraKeys):
    """Options related to text."""

    model_config = pydantic.ConfigDict(title="Text")

    font_family: FontFamily = text_font_family_field_info
    font_size: TypstDimension = text_font_size_field_info
    leading: TypstDimension = text_leading_field_info
    alignment: TextAlignment = text_alignment_field_info
    date_and_location_column_alignment: Alignment = (
        text_date_and_location_column_alignment_field_info
    )

Bases: RenderCVBaseModelWithoutExtraKeys

Options related to links.

Source code in rendercv/themes/options.py
class Links(RenderCVBaseModelWithoutExtraKeys):
    """Options related to links."""

    model_config = pydantic.ConfigDict(title="Links")
    underline: bool = links_underline_field_info
    use_external_link_icon: bool = links_use_external_link_icon_field_info

Header

Bases: RenderCVBaseModelWithoutExtraKeys

Options related to headers.

Source code in rendercv/themes/options.py
class Header(RenderCVBaseModelWithoutExtraKeys):
    """Options related to headers."""

    model_config = pydantic.ConfigDict(title="Header")
    name_font_family: FontFamily = header_name_font_family_field_info
    name_font_size: TypstDimension = header_name_font_size_field_info
    name_bold: bool = header_name_bold_field_info
    small_caps_for_name: bool = header_small_caps_for_name_field_info
    photo_width: TypstDimension = header_photo_width_field_info
    vertical_space_between_name_and_connections: TypstDimension = (
        header_vertical_space_name_connections_field_info
    )
    vertical_space_between_connections_and_first_section: TypstDimension = (
        header_vertical_space_connections_first_section_field_info
    )
    horizontal_space_between_connections: TypstDimension = (
        header_horizontal_space_connections_field_info
    )
    connections_font_family: FontFamily = header_connections_font_family_field_info
    separator_between_connections: Optional[str] = (
        header_separator_between_connections_field_info
    )
    use_icons_for_connections: bool = header_use_icons_for_connections_field_info
    use_urls_as_placeholders_for_connections: bool = (
        header_use_urls_as_placeholders_for_connections_field_info
    )
    make_connections_links: bool = make_connections_links_field_info
    alignment: Alignment = header_alignment_field_info

    @pydantic.field_validator("separator_between_connections")
    def validate_separator_between_connections(cls, value: Optional[str]) -> str:
        if value is None:
            return ""
        return value

SectionTitles

Bases: RenderCVBaseModelWithoutExtraKeys

Options related to section titles.

Source code in rendercv/themes/options.py
class SectionTitles(RenderCVBaseModelWithoutExtraKeys):
    """Options related to section titles."""

    model_config = pydantic.ConfigDict(title="Section Titles")

    type: SectionTitleType = section_titles_type_field_info
    font_family: FontFamily = section_titles_font_family_field_info
    font_size: TypstDimension = section_titles_font_size_field_info
    bold: bool = section_titles_bold_field_info
    small_caps: bool = section_titles_small_caps_field_info
    line_thickness: TypstDimension = section_titles_line_thickness_field_info
    vertical_space_above: TypstDimension = (
        section_titles_vertical_space_above_field_info
    )
    vertical_space_below: TypstDimension = (
        section_titles_vertical_space_below_field_info
    )

Entries

Bases: RenderCVBaseModelWithoutExtraKeys

Options related to entries.

Source code in rendercv/themes/options.py
class Entries(RenderCVBaseModelWithoutExtraKeys):
    """Options related to entries."""

    model_config = pydantic.ConfigDict(title="Entries")

    date_and_location_width: TypstDimension = entries_date_and_location_width_field_info
    left_and_right_margin: TypstDimension = entries_left_and_right_margin_field_info
    horizontal_space_between_columns: TypstDimension = (
        entries_horizontal_space_between_columns_field_info
    )
    vertical_space_between_entries: TypstDimension = (
        entries_vertical_space_between_entries_field_info
    )
    allow_page_break_in_sections: bool = entries_allow_page_break_in_sections_field_info
    allow_page_break_in_entries: bool = entries_allow_page_break_in_entries_field_info
    short_second_row: bool = entries_short_second_row_field_info
    show_time_spans_in: list[str] = entries_show_time_spans_in_field_info

Highlights

Bases: RenderCVBaseModelWithoutExtraKeys

Options related to highlights.

Source code in rendercv/themes/options.py
class Highlights(RenderCVBaseModelWithoutExtraKeys):
    """Options related to highlights."""

    model_config = pydantic.ConfigDict(title="Highlights")

    bullet: BulletPoint = highlights_bullet_field_info
    nested_bullet: BulletPoint = highlights_nested_bullet_field_info
    top_margin: TypstDimension = highlights_top_margin_field_info
    left_margin: TypstDimension = highlights_left_margin_field_info
    vertical_space_between_highlights: TypstDimension = (
        highlights_vertical_space_between_highlights_field_info
    )
    horizontal_space_between_bullet_and_highlight: TypstDimension = (
        highlights_horizontal_space_between_bullet_and_highlight_field_info
    )
    summary_left_margin: TypstDimension = highlights_summary_left_margin_field_info

EntryBaseWithDate

Bases: RenderCVBaseModelWithoutExtraKeys

Base options for entries with a date.

Source code in rendercv/themes/options.py
class EntryBaseWithDate(RenderCVBaseModelWithoutExtraKeys):
    """Base options for entries with a date."""

    main_column_second_row_template: str = (
        entry_base_with_date_main_column_second_row_template_field_info
    )
    date_and_location_column_template: str = (
        entry_base_with_date_date_and_location_column_template_field_info
    )

PublicationEntryOptions

Bases: RenderCVBaseModelWithoutExtraKeys

Options related to publication entries.

Source code in rendercv/themes/options.py
class PublicationEntryOptions(RenderCVBaseModelWithoutExtraKeys):
    """Options related to publication entries."""

    model_config = pydantic.ConfigDict(title="Publication Entry Options")

    main_column_first_row_template: str = (
        publication_entry_main_column_first_row_template_field_info
    )
    main_column_second_row_template: str = (
        publication_entry_main_column_second_row_template_field_info
    )
    main_column_second_row_without_journal_template: str = (
        publication_entry_main_column_second_row_without_journal_template_field_info
    )
    main_column_second_row_without_url_template: str = (
        publication_entry_main_column_second_row_without_url_template_field_info
    )
    date_and_location_column_template: str = (
        publication_entry_date_and_location_column_template_field_info
    )

EducationEntryBase

Bases: RenderCVBaseModelWithoutExtraKeys

Base options for education entries.

Source code in rendercv/themes/options.py
class EducationEntryBase(RenderCVBaseModelWithoutExtraKeys):
    """Base options for education entries."""

    main_column_first_row_template: str = (
        education_entry_main_column_first_row_template_field_info
    )
    degree_column_template: Optional[str] = (
        education_entry_degree_column_template_field_info
    )
    degree_column_width: TypstDimension = education_entry_degree_column_width_field_info

EducationEntryOptions

Bases: EntryBaseWithDate, EducationEntryBase

Options related to education entries.

Source code in rendercv/themes/options.py
class EducationEntryOptions(EntryBaseWithDate, EducationEntryBase):
    """Options related to education entries."""

    model_config = pydantic.ConfigDict(title="Education Entry Options")

NormalEntryBase

Bases: RenderCVBaseModelWithoutExtraKeys

Base options for normal entries.

Source code in rendercv/themes/options.py
class NormalEntryBase(RenderCVBaseModelWithoutExtraKeys):
    """Base options for normal entries."""

    main_column_first_row_template: str = (
        normal_entry_main_column_first_row_template_field_info
    )

NormalEntryOptions

Bases: EntryBaseWithDate, NormalEntryBase

Options related to normal entries.

Source code in rendercv/themes/options.py
class NormalEntryOptions(EntryBaseWithDate, NormalEntryBase):
    """Options related to normal entries."""

    model_config = pydantic.ConfigDict(title="Normal Entry Options")

ExperienceEntryBase

Bases: RenderCVBaseModelWithoutExtraKeys

Base options for experience entries.

Source code in rendercv/themes/options.py
class ExperienceEntryBase(RenderCVBaseModelWithoutExtraKeys):
    """Base options for experience entries."""

    main_column_first_row_template: str = (
        experience_entry_main_column_first_row_template_field_info
    )

ExperienceEntryOptions

Bases: EntryBaseWithDate, ExperienceEntryBase

Options related to experience entries.

Source code in rendercv/themes/options.py
class ExperienceEntryOptions(EntryBaseWithDate, ExperienceEntryBase):
    """Options related to experience entries."""

    model_config = pydantic.ConfigDict(title="Experience Entry Options")

OneLineEntryOptions

Bases: RenderCVBaseModelWithoutExtraKeys

Options related to one-line entries.

Source code in rendercv/themes/options.py
class OneLineEntryOptions(RenderCVBaseModelWithoutExtraKeys):
    """Options related to one-line entries."""

    model_config = pydantic.ConfigDict(title="One Line Entry Options")
    template: str = one_line_entry_template_field_info

EntryTypes

Bases: RenderCVBaseModelWithoutExtraKeys

Options related to the templates.

Source code in rendercv/themes/options.py
class EntryTypes(RenderCVBaseModelWithoutExtraKeys):
    """Options related to the templates."""

    model_config = pydantic.ConfigDict(title="Entry Types")
    one_line_entry: OneLineEntryOptions = entry_types_one_line_entry_field_info
    education_entry: EducationEntryOptions = entry_types_education_entry_field_info
    normal_entry: NormalEntryOptions = entry_types_normal_entry_field_info
    experience_entry: ExperienceEntryOptions = entry_types_experience_entry_field_info
    publication_entry: PublicationEntryOptions = (
        entry_types_publication_entry_field_info
    )

ThemeOptions

Bases: RenderCVBaseModelWithoutExtraKeys

Full design options.

Source code in rendercv/themes/options.py
class ThemeOptions(RenderCVBaseModelWithoutExtraKeys):
    """Full design options."""

    model_config = pydantic.ConfigDict(title="Theme Options")
    theme: Literal["tobeoverwritten"] = theme_options_theme_field_info
    page: Page = theme_options_page_field_info
    colors: Colors = theme_options_colors_field_info
    text: Text = theme_options_text_field_info
    links: Links = theme_options_links_field_info
    header: Header = theme_options_header_field_info
    section_titles: SectionTitles = theme_options_section_titles_field_info
    entries: Entries = theme_options_entries_field_info
    highlights: Highlights = theme_options_highlights_field_info
    entry_types: EntryTypes = theme_options_entry_types_field_info

validate_typst_dimension(dimension)

Check if the input string is a valid dimension for the Typst theme.

Parameters:

  • dimension (str) –

    The input string to be validated.

Returns:

  • str

    The input string itself if it is a valid dimension.

Source code in rendercv/themes/options.py
def validate_typst_dimension(dimension: str) -> str:
    """Check if the input string is a valid dimension for the Typst theme.

    Args:
        dimension: The input string to be validated.

    Returns:
        The input string itself if it is a valid dimension.
    """
    if not re.fullmatch(r"\d+\.?\d*(cm|in|pt|mm|ex|em)", dimension):
        message = (
            "The value must be a number followed by a unit (cm, in, pt, mm, ex, em)."
            " For example, 0.1cm."
        )
        raise ValueError(message)
    return dimension

validate_font_family(font_family)

Check if the input string is a valid font family.

Parameters:

  • font_family (str) –

    The input string to be validated.

Returns:

  • str

    The input string itself if it is a valid font family.

Source code in rendercv/themes/options.py
def validate_font_family(font_family: str) -> str:
    """Check if the input string is a valid font family.

    Args:
        font_family: The input string to be validated.

    Returns:
        The input string itself if it is a valid font family.
    """
    if (pathlib.Path("fonts")).exists():
        # Then allow custom font families.
        return font_family

    try:
        font_family_validator.validate_strings(font_family)
    except pydantic.ValidationError as e:
        message = (
            "The font family must be one of the following:"
            f" {', '.join(available_font_families)}."
        )
        raise ValueError(message) from e

    return font_family_validator.validate_strings(font_family)