diff --git a/.devcontainer/devcontainer.json b/.devcontainer/devcontainer.json new file mode 100644 index 0000000..4d1ea5e --- /dev/null +++ b/.devcontainer/devcontainer.json @@ -0,0 +1,15 @@ +// For format details, see https://aka.ms/devcontainer.json. For config options, see the +// README at: https://github.com/devcontainers/templates/tree/main/src/python +{ + "name": "Python 3", + // Or use a Dockerfile or Docker Compose file. More info: https://containers.dev/guide/dockerfile + "image": "mcr.microsoft.com/devcontainers/python:1-3.12-bullseye", + // Use 'onCreateCommand' to run commands after the container is created inside the container: + "onCreateCommand": "pip install --user -r requirements.txt", + // Configure tool-specific properties. + "customizations": { + "vscode": { + "extensions": ["redhat.vscode-yaml", "mathematic.vscode-pdf"] + } + } +} diff --git a/.github/workflows/release.yaml b/.github/workflows/release.yaml new file mode 100644 index 0000000..da4f347 --- /dev/null +++ b/.github/workflows/release.yaml @@ -0,0 +1,34 @@ +name: Release a CV + +on: + push: + tags: + - "*" # Any tag pushed to the repository + +permissions: + contents: write + +jobs: + call_rendercv_workflow: + name: RenderCV + uses: ./.github/workflows/rendercv.yaml + + build: + needs: call_rendercv_workflow + runs-on: ubuntu-latest + steps: + - name: Checkout + uses: actions/checkout@v4 + - name: Download RenderCV Output + uses: actions/download-artifact@v4 + with: + name: RenderCV Output + path: rendercv_output + - name: Release + uses: softprops/action-gh-release@v2 + with: + files: | + rendercv_output/*_CV.pdf + rendercv_output/*_CV.tex + generate_release_notes: true + make_latest: true diff --git a/.github/workflows/rendercv.yaml b/.github/workflows/rendercv.yaml new file mode 100644 index 0000000..a9dda1a --- /dev/null +++ b/.github/workflows/rendercv.yaml @@ -0,0 +1,54 @@ +name: Render a CV + +on: + push: + branches: + - main + workflow_call: # to make the workflow triggerable from other workflows (release.yaml) + +permissions: + contents: write + +jobs: + rendercv: + name: RenderCV + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v4 + - uses: actions/setup-python@v5 + with: + python-version: "3.12" + - name: Install RenderCV + run: | + pip install -r requirements.txt + - name: RenderCV + run: | + cd src + cv_file=$(find . -maxdepth 1 -type f -name "*_CV.yaml" | head -n 1) + if [ -z "$cv_file" ]; then + echo "No RenderCV file found!" + exit 1 + fi + cd .. + rendercv render src/$cv_file --pdf-path ${cv_file%.yaml}.pdf --markdown-path README.md --latex-path ${cv_file%.yaml}.tex + - name: Upload rendercv_output as an artifact + uses: actions/upload-artifact@v4 + with: + name: RenderCV Output + path: rendercv_output + - uses: dorny/paths-filter@v3 + id: changes + with: + base: HEAD + filters: | + cv: + - '*_CV.tex' + - 'README.md' + - name: Push the changes + if: steps.changes.outputs.cv == 'true' + run: | + git config --global user.name "${{ github.actor }}" + git config --global user.email "${{ github.actor }}@users.noreply.github.com" + git add -A + git commit -m "render the latest CV" + git push diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..3a2c983 --- /dev/null +++ b/.gitignore @@ -0,0 +1,2 @@ +__pycache__/ +rendercv_output/ \ No newline at end of file diff --git a/.vscode/launch.json b/.vscode/launch.json new file mode 100644 index 0000000..c9bc13b --- /dev/null +++ b/.vscode/launch.json @@ -0,0 +1,22 @@ +{ + // Use IntelliSense to learn about possible attributes. + // Hover to view descriptions of existing attributes. + // For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387 + "version": "0.2.0", + "configurations": [ + { + "name": "Run RenderCV", + "type": "debugpy", + "request": "launch", + "module": "rendercv", + "args": [ + "render", + "src/John_Doe_CV.yaml", + "--pdf-path", + "John_Doe_CV.pdf", + "--markdown-path", + "README.md" + ] + } + ] +} diff --git a/John_Doe_CV.pdf b/John_Doe_CV.pdf new file mode 100644 index 0000000..06f548b Binary files /dev/null and b/John_Doe_CV.pdf differ diff --git a/John_Doe_CV.tex b/John_Doe_CV.tex new file mode 100644 index 0000000..dc41f25 --- /dev/null +++ b/John_Doe_CV.tex @@ -0,0 +1,392 @@ +\documentclass[10pt, letterpaper]{article} + +% Packages: +\usepackage[ + ignoreheadfoot, % set margins without considering header and footer + top=2 cm, % seperation between body and page edge from the top + bottom=2 cm, % seperation between body and page edge from the bottom + left=2 cm, % seperation between body and page edge from the left + right=2 cm, % seperation between body and page edge from the right + footskip=1.0 cm, % seperation between body and footer + % showframe % for debugging +]{geometry} % for adjusting page geometry +\usepackage[explicit]{titlesec} % for customizing section titles +\usepackage{tabularx} % for making tables with fixed width columns +\usepackage{array} % tabularx requires this +\usepackage[dvipsnames]{xcolor} % for coloring text +\definecolor{primaryColor}{RGB}{0, 79, 144} % define primary color +\usepackage{enumitem} % for customizing lists +\usepackage{fontawesome5} % for using icons +\usepackage{amsmath} % for math +\usepackage[ + pdftitle={John Doe's CV}, + pdfauthor={John Doe}, + pdfcreator={LaTeX with RenderCV}, + colorlinks=true, + urlcolor=primaryColor +]{hyperref} % for links, metadata and bookmarks +\usepackage[pscoord]{eso-pic} % for floating text on the page +\usepackage{calc} % for calculating lengths +\usepackage{bookmark} % for bookmarks +\usepackage{lastpage} % for getting the total number of pages +\usepackage{changepage} % for one column entries (adjustwidth environment) +\usepackage{paracol} % for two and three column entries +\usepackage{ifthen} % for conditional statements +\usepackage{needspace} % for avoiding page brake right after the section title +\usepackage{iftex} % check if engine is pdflatex, xetex or luatex + +% Ensure that generate pdf is machine readable/ATS parsable: +\ifPDFTeX + \input{glyphtounicode} + \pdfgentounicode=1 + \usepackage[T1]{fontenc} + \usepackage[utf8]{inputenc} + \usepackage{lmodern} +\fi + +\usepackage[default, type1]{sourcesanspro} + +% Some settings: +\AtBeginEnvironment{adjustwidth}{\partopsep0pt} % remove space before adjustwidth environment +\pagestyle{empty} % no header or footer +\setcounter{secnumdepth}{0} % no section numbering +\setlength{\parindent}{0pt} % no indentation +\setlength{\topskip}{0pt} % no top skip +\setlength{\columnsep}{0.15cm} % set column seperation +\makeatletter +\let\ps@customFooterStyle\ps@plain % Copy the plain style to customFooterStyle +\patchcmd{\ps@customFooterStyle}{\thepage}{ + \color{gray}\textit{\small John Doe - Page \thepage{} of \pageref*{LastPage}} +}{}{} % replace number by desired string +\makeatother +\pagestyle{customFooterStyle} + +\titleformat{\section}{ + % avoid page braking right after the section title + \needspace{4\baselineskip} + % make the font size of the section title large and color it with the primary color + \Large\color{primaryColor} +}{ +}{ +}{ + % print bold title, give 0.15 cm space and draw a line of 0.8 pt thickness + % from the end of the title to the end of the body + \textbf{#1}\hspace{0.15cm}\titlerule[0.8pt]\hspace{-0.1cm} +}[] % section title formatting + +\titlespacing{\section}{ + % left space: + -1pt +}{ + % top space: + 0.3 cm +}{ + % bottom space: + 0.2 cm +} % section title spacing + +% \renewcommand\labelitemi{$\vcenter{\hbox{\small$\bullet$}}$} % custom bullet points +\newenvironment{highlights}{ + \begin{itemize}[ + topsep=0.10 cm, + parsep=0.10 cm, + partopsep=0pt, + itemsep=0pt, + leftmargin=0.4 cm + 10pt + ] +}{ + \end{itemize} +} % new environment for highlights + +\newenvironment{highlightsforbulletentries}{ + \begin{itemize}[ + topsep=0.10 cm, + parsep=0.10 cm, + partopsep=0pt, + itemsep=0pt, + leftmargin=10pt + ] +}{ + \end{itemize} +} % new environment for highlights for bullet entries + + +\newenvironment{onecolentry}{ + \begin{adjustwidth}{ + 0.2 cm + 0.00001 cm + }{ + 0.2 cm + 0.00001 cm + } +}{ + \end{adjustwidth} +} % new environment for one column entries + +\newenvironment{twocolentry}[2][]{ + \onecolentry + \def\secondColumn{#2} + \setcolumnwidth{\fill, 4.5 cm} + \begin{paracol}{2} +}{ + \switchcolumn \raggedleft \secondColumn + \end{paracol} + \endonecolentry +} % new environment for two column entries + +\newenvironment{threecolentry}[3][]{ + \onecolentry + \def\thirdColumn{#3} + \setcolumnwidth{1 cm, \fill, 4.5 cm} + \begin{paracol}{3} + {\raggedright #2} \switchcolumn +}{ + \switchcolumn \raggedleft \thirdColumn + \end{paracol} + \endonecolentry +} % new environment for three column entries + +\newenvironment{header}{ + \setlength{\topsep}{0pt}\par\kern\topsep\centering\color{primaryColor}\linespread{1.5} +}{ + \par\kern\topsep +} % new environment for the header + +\newcommand{\placelastupdatedtext}{% \placetextbox{}{}{} + \AddToShipoutPictureFG*{% Add to current page foreground + \put( + \LenToUnit{\paperwidth-2 cm-0.2 cm+0.05cm}, + \LenToUnit{\paperheight-1.0 cm} + ){\vtop{{\null}\makebox[0pt][c]{ + \small\color{gray}\textit{Last updated in October 2024}\hspace{\widthof{Last updated in October 2024}} + }}}% + }% +}% + +% save the original href command in a new command: +\let\hrefWithoutArrow\href + +% new command for external links: +\renewcommand{\href}[2]{\hrefWithoutArrow{#1}{\ifthenelse{\equal{#2}{}}{ }{#2 }\raisebox{.15ex}{\footnotesize \faExternalLink*}}} + + +\begin{document} + \newcommand{\AND}{\unskip + \cleaders\copy\ANDbox\hskip\wd\ANDbox + \ignorespaces + } + \newsavebox\ANDbox + \sbox\ANDbox{} + + \placelastupdatedtext + \begin{header} + \fontsize{30 pt}{30 pt} + \textbf{John Doe} + + \vspace{0.3 cm} + + \normalsize + \mbox{{\footnotesize\faMapMarker*}\hspace*{0.13cm}Your Location}% + \kern 0.25 cm% + \AND% + \kern 0.25 cm% + \mbox{\hrefWithoutArrow{mailto:youremail@yourdomain.com}{{\footnotesize\faEnvelope[regular]}\hspace*{0.13cm}youremail@yourdomain.com}}% + \kern 0.25 cm% + \AND% + \kern 0.25 cm% + \mbox{\hrefWithoutArrow{tel:+90-541-999-99-99}{{\footnotesize\faPhone*}\hspace*{0.13cm}0541 999 99 99}}% + \kern 0.25 cm% + \AND% + \kern 0.25 cm% + \mbox{\hrefWithoutArrow{https://yourwebsite.com/}{{\footnotesize\faLink}\hspace*{0.13cm}yourwebsite.com}}% + \kern 0.25 cm% + \AND% + \kern 0.25 cm% + \mbox{\hrefWithoutArrow{https://linkedin.com/in/yourusername}{{\footnotesize\faLinkedinIn}\hspace*{0.13cm}yourusername}}% + \kern 0.25 cm% + \AND% + \kern 0.25 cm% + \mbox{\hrefWithoutArrow{https://github.com/yourusername}{{\footnotesize\faGithub}\hspace*{0.13cm}yourusername}}% + \end{header} + + \vspace{0.3 cm - 0.3 cm} + + + \section{Welcome to RenderCV!} + + + + + \begin{onecolentry} + \href{https://github.com/sinaatalay/rendercv}{RenderCV} is a LaTeX-based CV/resume framework. It allows you to create a high-quality CV or resume as a PDF file from a YAML file, with \textbf{full Markdown syntax support} and \textbf{complete control over the LaTeX code}. + \end{onecolentry} + + \vspace{0.2 cm} + + \begin{onecolentry} + The boilerplate content was inspired by \href{https://github.com/dnl-blkv/mcdowell-cv}{Gayle McDowell}. + \end{onecolentry} + + + + \section{Quick Guide} + + \begin{onecolentry} + \begin{highlightsforbulletentries} + + + \item Each section title is arbitrary and each section contains a list of entries. + + \item There are 7 unique entry types: \textit{BulletEntry}, \textit{TextEntry}, \textit{EducationEntry}, \textit{ExperienceEntry}, \textit{NormalEntry}, \textit{PublicationEntry}, and \textit{OneLineEntry}. + + \item Select a section title, pick an entry type, and start writing your section! + + \item \href{https://docs.rendercv.com/user_guide/}{Here}, you can find a comprehensive user guide for RenderCV. + + + \end{highlightsforbulletentries} + \end{onecolentry} + + \section{Education} + + + + + \begin{threecolentry}{\textbf{BS}}{ + Sept 2000 – May 2005 + } + \textbf{University of Pennsylvania}, Computer Science + \begin{highlights} + \item GPA: 3.9/4.0 (\href{https://example.com}{Transcript}) + \item \textbf{Coursework:} Computer Architecture, Comparison of Learning Algorithms, Computational Theory + \end{highlights} + \end{threecolentry} + + + + \section{Experience} + + + + + \begin{twocolentry}{ + Cupertino, CA + + June 2005 – Aug 2007 + + 2 years 2 months + } + \textbf{Apple}, Software Engineer + \begin{highlights} + \item Reduced time to render user buddy lists by 75\% by implementing a prediction algorithm + \item Integrated iChat with Spotlight Search by creating a tool to extract metadata from saved chat transcripts and provide metadata to a system-wide search database + \item Redesigned chat file format and implemented backward compatibility for search + \end{highlights} + \end{twocolentry} + + + \vspace{0.2 cm} + + \begin{twocolentry}{ + Redmond, WA + + June 2003 – Aug 2003 + + 2 months + } + \textbf{Microsoft}, Software Engineer Intern + \begin{highlights} + \item Designed a UI for the VS open file switcher (Ctrl-Tab) and extended it to tool windows + \item Created a service to provide gradient across VS and VS add-ins, optimizing its performance via caching + \item Built an app to compute the similarity of all methods in a codebase, reducing the time from $\mathcal{O}(n^2)$ to $\mathcal{O}(n \log n)$ + \item Created a test case generation tool that creates random XML docs from XML Schema + \item Automated the extraction and processing of large datasets from legacy systems using SQL and Perl scripts + \end{highlights} + \end{twocolentry} + + + + + \section{Publications} + + + + + \begin{samepage} + \begin{twocolentry}{ + Jan 2004 + } + \textbf{3D Finite Element Analysis of No-Insulation Coils} + + \vspace{0.10 cm} + + \mbox{Frodo Baggins}, \mbox{\textbf{\textit{John Doe}}}, \mbox{Samwise Gamgee} + \vspace{0.10 cm} + + \href{https://doi.org/10.1109/TASC.2023.3340648}{10.1109/TASC.2023.3340648} + \end{twocolentry} + \end{samepage} + + + + \section{Projects} + + + + + \begin{twocolentry}{ + \href{https://github.com/sinaatalay/rendercv}{github.com/name/repo} + } + \textbf{Multi-User Drawing Tool} + \begin{highlights} + \item Developed an electronic classroom where multiple users can simultaneously view and draw on a "chalkboard" with each person's edits synchronized + \item Tools Used: C++, MFC + \end{highlights} + \end{twocolentry} + + + \vspace{0.2 cm} + + \begin{twocolentry}{ + \href{https://github.com/sinaatalay/rendercv}{github.com/name/repo} + } + \textbf{Synchronized Desktop Calendar} + \begin{highlights} + \item Developed a desktop calendar with globally shared and synchronized calendars, allowing users to schedule meetings with other users + \item Tools Used: C\#, .NET, SQL, XML + \end{highlights} + \end{twocolentry} + + + \vspace{0.2 cm} + + \begin{twocolentry}{ + 2002 + } + \textbf{Custom Operating System} + \begin{highlights} + \item Built a UNIX-style OS with a scheduler, file system, text editor, and calculator + \item Tools Used: C + \end{highlights} + \end{twocolentry} + + + + + \section{Technologies} + + + + + \begin{onecolentry} + \textbf{Languages:} C++, C, Java, Objective-C, C\#, SQL, JavaScript + \end{onecolentry} + + \vspace{0.2 cm} + + \begin{onecolentry} + \textbf{Technologies:} .NET, Microsoft SQL Server, XCode, Interface Builder + \end{onecolentry} + + + + +\end{document} \ No newline at end of file diff --git a/LICENSE b/LICENSE new file mode 100644 index 0000000..dc0709a --- /dev/null +++ b/LICENSE @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) 2024 Sina Atalay + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/README.md b/README.md new file mode 100644 index 0000000..87b64fa --- /dev/null +++ b/README.md @@ -0,0 +1,108 @@ + + +# RenderCV Pipeline + +Are you ready to revolutionize the way you manage and craft your CVs and resumes? + +Picture this: + +1. You simply update your `src/John_Doe_CV.yaml` input file and push the changes. +2. Then, a pipeline generates a new PDF and Markdown from it and uploads it to the repository. +3. When you are done with your work, you can create a new release on GitHub, tagging your CV with something like `v2024.04`. The pipeline will automatically add the PDF and its $\LaTeX$ source as assets to the release. +4. You have successfully created your CV pipeline, and all the history is in safe hands and reproducible. + +**How to start?** + +1. [Click here](https://github.com/new?template_name=rendercv-pipeline&template_owner=sinaatalay) to create your CV repository based on this `rendercv-pipeline` template repository. +2. Edit either + - the `src/John_Doe_CV.yaml` file, or + - the contents of `src/markdown` or `src/classic` directories + + and push. Then, see the magic happen. + +**Some tips** + +- Learn more about [RenderCV](https://github.com/sinaatalay/rendercv) to understand what you can do with this tool. +- Edit and preview your CV in your browser without installing anything by creating a codespace. Click the <> **Code** button, then click the **Codespaces** tab, and then click **Create codespace on main**. The environment will be ready for RenderCV usage. Update `.vscode/launch.json` to point to your YAML file and press `F5` to run RenderCV in the browser. + + +# John Doe's CV + +- Phone: +90 541 999 99 99 +- Email: [youremail@yourdomain.com](mailto:youremail@yourdomain.com) +- Location: Your Location +- Website: [yourwebsite.com](https://yourwebsite.com/) +- LinkedIn: [yourusername](https://linkedin.com/in/yourusername) +- GitHub: [yourusername](https://github.com/yourusername) + + +# Welcome to RenderCV! + +[RenderCV](https://github.com/sinaatalay/rendercv) is a LaTeX-based CV/resume framework. It allows you to create a high-quality CV or resume as a PDF file from a YAML file, with **full Markdown syntax support** and **complete control over the LaTeX code**. + +The boilerplate content was inspired by [Gayle McDowell](https://github.com/dnl-blkv/mcdowell-cv). + +# Quick Guide + +- Each section title is arbitrary and each section contains a list of entries. +- There are 7 unique entry types: *BulletEntry*, *TextEntry*, *EducationEntry*, *ExperienceEntry*, *NormalEntry*, *PublicationEntry*, and *OneLineEntry*. +- Select a section title, pick an entry type, and start writing your section! +- [Here](https://docs.rendercv.com/user_guide/), you can find a comprehensive user guide for RenderCV. +# Education + +## University of Pennsylvania, BS in Computer Science + +- Sept 2000 – May 2005 +- GPA: 3.9/4.0 ([Transcript](https://example.com)) +- **Coursework:** Computer Architecture, Comparison of Learning Algorithms, Computational Theory + +# Experience + +## Apple, Software Engineer + +- June 2005 – Aug 2007 +- Cupertino, CA +- Reduced time to render user buddy lists by 75% by implementing a prediction algorithm +- Integrated iChat with Spotlight Search by creating a tool to extract metadata from saved chat transcripts and provide metadata to a system-wide search database +- Redesigned chat file format and implemented backward compatibility for search + +## Microsoft, Software Engineer Intern + +- June 2003 – Aug 2003 +- Redmond, WA +- Designed a UI for the VS open file switcher (Ctrl-Tab) and extended it to tool windows +- Created a service to provide gradient across VS and VS add-ins, optimizing its performance via caching +- Built an app to compute the similarity of all methods in a codebase, reducing the time from $\mathcal{O}(n^2)$ to $\mathcal{O}(n \log n)$ +- Created a test case generation tool that creates random XML docs from XML Schema +- Automated the extraction and processing of large datasets from legacy systems using SQL and Perl scripts + +# Publications + +## 3D Finite Element Analysis of No-Insulation Coils ([10.1109/TASC.2023.3340648](https://doi.org/10.1109/TASC.2023.3340648)) +- Jan 2004 +- Frodo Baggins, ***John Doe***, Samwise Gamgee + +# Projects + +## Multi-User Drawing Tool + +- [github.com/name/repo](https://github.com/sinaatalay/rendercv) +- Developed an electronic classroom where multiple users can simultaneously view and draw on a "chalkboard" with each person's edits synchronized +- Tools Used: C++, MFC + +## Synchronized Desktop Calendar + +- [github.com/name/repo](https://github.com/sinaatalay/rendercv) +- Developed a desktop calendar with globally shared and synchronized calendars, allowing users to schedule meetings with other users +- Tools Used: C#, .NET, SQL, XML + +## Custom Operating System + +- 2002 +- Built a UNIX-style OS with a scheduler, file system, text editor, and calculator +- Tools Used: C + +# Technologies + +- Languages: C++, C, Java, Objective-C, C#, SQL, JavaScript +- Technologies: .NET, Microsoft SQL Server, XCode, Interface Builder diff --git a/requirements.txt b/requirements.txt new file mode 100644 index 0000000..3849580 --- /dev/null +++ b/requirements.txt @@ -0,0 +1 @@ +rendercv==1.14 diff --git a/src/John_Doe_CV.yaml b/src/John_Doe_CV.yaml new file mode 100644 index 0000000..e3da6d8 --- /dev/null +++ b/src/John_Doe_CV.yaml @@ -0,0 +1,144 @@ +cv: + name: John Doe + location: Your Location + email: youremail@yourdomain.com + phone: tel:+90-541-999-99-99 + website: https://yourwebsite.com/ + social_networks: + - network: LinkedIn + username: yourusername + - network: GitHub + username: yourusername + sections: + welcome_to_RenderCV!: + - '[RenderCV](https://github.com/sinaatalay/rendercv) is + a LaTeX-based CV/resume framework. It allows you to create + a high-quality CV or resume as a PDF file from a YAML + file, with **full Markdown syntax support** and **complete + control over the LaTeX code**.' + - The boilerplate content was inspired by [Gayle McDowell](https://github.com/dnl-blkv/mcdowell-cv). + quick_guide: + - bullet: Each section title is arbitrary and each section + contains a list of entries. + - bullet: 'There are 7 unique entry types: *BulletEntry*, + *TextEntry*, *EducationEntry*, *ExperienceEntry*, *NormalEntry*, + *PublicationEntry*, and *OneLineEntry*.' + - bullet: Select a section title, pick an entry type, and + start writing your section! + - bullet: '[Here](https://docs.rendercv.com/user_guide/), + you can find a comprehensive user guide for RenderCV.' + education: + - institution: University of Pennsylvania + area: Computer Science + degree: BS + start_date: 2000-09 + end_date: 2005-05 + highlights: + - 'GPA: 3.9/4.0 ([Transcript](https://example.com))' + - '**Coursework:** Computer Architecture, Comparison + of Learning Algorithms, Computational Theory' + experience: + - company: Apple + position: Software Engineer + location: Cupertino, CA + start_date: 2005-06 + end_date: 2007-08 + highlights: + - Reduced time to render user buddy lists by 75% by + implementing a prediction algorithm + - Integrated iChat with Spotlight Search by creating + a tool to extract metadata from saved chat transcripts + and provide metadata to a system-wide search database + - Redesigned chat file format and implemented backward + compatibility for search + - company: Microsoft + position: Software Engineer Intern + location: Redmond, WA + start_date: 2003-06 + end_date: 2003-08 + highlights: + - Designed a UI for the VS open file switcher (Ctrl-Tab) + and extended it to tool windows + - Created a service to provide gradient across VS and + VS add-ins, optimizing its performance via caching + - Built an app to compute the similarity of all methods + in a codebase, reducing the time from $\mathcal{O}(n^2)$ + to $\mathcal{O}(n \log n)$ + - Created a test case generation tool that creates random + XML docs from XML Schema + - Automated the extraction and processing of large datasets + from legacy systems using SQL and Perl scripts + publications: + - title: 3D Finite Element Analysis of No-Insulation Coils + authors: + - Frodo Baggins + - '***John Doe***' + - Samwise Gamgee + doi: 10.1109/TASC.2023.3340648 + date: 2004-01 + projects: + - name: Multi-User Drawing Tool + date: '[github.com/name/repo](https://github.com/sinaatalay/rendercv)' + highlights: + - Developed an electronic classroom where multiple users + can simultaneously view and draw on a "chalkboard" + with each person's edits synchronized + - 'Tools Used: C++, MFC' + - name: Synchronized Desktop Calendar + date: '[github.com/name/repo](https://github.com/sinaatalay/rendercv)' + highlights: + - Developed a desktop calendar with globally shared + and synchronized calendars, allowing users to schedule + meetings with other users + - 'Tools Used: C#, .NET, SQL, XML' + - name: Custom Operating System + date: 2002 + highlights: + - Built a UNIX-style OS with a scheduler, file system, + text editor, and calculator + - 'Tools Used: C' + technologies: + - label: Languages + details: C++, C, Java, Objective-C, C#, SQL, JavaScript + - label: Technologies + details: .NET, Microsoft SQL Server, XCode, Interface + Builder +design: + theme: classic + font: Source Sans 3 + font_size: 10pt + page_size: letterpaper + color: '#004f90' + disable_external_link_icons: false + disable_page_numbering: false + page_numbering_style: NAME - Page PAGE_NUMBER of TOTAL_PAGES + disable_last_updated_date: false + last_updated_date_style: Last updated in TODAY + header_font_size: 30 pt + text_alignment: justified + seperator_between_connections: '' + use_icons_for_connections: true + margins: + page: + top: 2 cm + bottom: 2 cm + left: 2 cm + right: 2 cm + section_title: + top: 0.3 cm + bottom: 0.2 cm + entry_area: + left_and_right: 0.2 cm + vertical_between: 0.2 cm + date_and_location_width: 4.5 cm + education_degree_width: 1 cm + highlights_area: + top: 0.10 cm + left: 0.4 cm + vertical_between_bullet_points: 0.10 cm + header: + vertical_between_name_and_connections: 0.3 cm + bottom: 0.3 cm + horizontal_between_connections: 0.5 cm + show_timespan_in: + - Experience diff --git a/src/classic/BulletEntry.j2.tex b/src/classic/BulletEntry.j2.tex new file mode 100644 index 0000000..d1f5697 --- /dev/null +++ b/src/classic/BulletEntry.j2.tex @@ -0,0 +1 @@ +\item <> diff --git a/src/classic/EducationEntry.j2.tex b/src/classic/EducationEntry.j2.tex new file mode 100644 index 0000000..eeab11f --- /dev/null +++ b/src/classic/EducationEntry.j2.tex @@ -0,0 +1,23 @@ +((* if section_title in design.show_timespan_in *)) + ((* set date_and_location_strings = [entry.location, entry.date_string, entry.time_span_string]|select("!=", "") *)) +((* else *)) + ((* set date_and_location_strings = [entry.location, entry.date_string]|select("!=", "") *)) +((* endif *)) +((* if not is_first_entry *)) +\vspace{<>} +((* endif *)) + +\begin{threecolentry}{\textbf{<>}}{ + <> +} + \textbf{<>}, <> +((* for item in entry.highlights *)) + ((* if loop.first *)) + \begin{highlights} + ((* endif *)) + \item <> + ((* if loop.last *)) + \end{highlights} + ((* endif *)) +((* endfor *)) +\end{threecolentry} \ No newline at end of file diff --git a/src/classic/ExperienceEntry.j2.tex b/src/classic/ExperienceEntry.j2.tex new file mode 100644 index 0000000..c01ee51 --- /dev/null +++ b/src/classic/ExperienceEntry.j2.tex @@ -0,0 +1,38 @@ +((* if section_title in design.show_timespan_in *)) + ((* set date_and_location_strings = [entry.location, entry.date_string, entry.time_span_string]|select("!=", "") *)) +((* else *)) + ((* set date_and_location_strings = [entry.location, entry.date_string]|select("!=", "") *)) +((* endif *)) +((* if not is_first_entry *)) +\vspace{<>} +((* endif *)) + +((* if entry.date_string or entry.location *)) +\begin{twocolentry}{ + <> +} + \textbf{<>}, <> + ((* for item in entry.highlights *)) + ((* if loop.first *)) + \begin{highlights} + ((* endif *)) + \item <> + ((* if loop.last *)) + \end{highlights} + ((* endif *)) + ((* endfor *)) +\end{twocolentry} +((* else *)) +\begin{onecolentry} + \textbf{<>}, <> + ((* for item in entry.highlights *)) + ((* if loop.first *)) + \begin{highlights} + ((* endif *)) + \item <> + ((* if loop.last *)) + \end{highlights} + ((* endif *)) + ((* endfor *)) +\end{onecolentry} +((* endif *)) \ No newline at end of file diff --git a/src/classic/Header.j2.tex b/src/classic/Header.j2.tex new file mode 100644 index 0000000..022f7b1 --- /dev/null +++ b/src/classic/Header.j2.tex @@ -0,0 +1,42 @@ +\newcommand{\AND}{\unskip + \cleaders\copy\ANDbox\hskip\wd\ANDbox + \ignorespaces +} +\newsavebox\ANDbox +\sbox\ANDbox{<>} + +((* if not design.disable_last_updated_date *)) +\placelastupdatedtext +((* endif *)) +((* if cv.name is not none *)) +\begin{header} + \fontsize{<>}{<>} + \textbf{<>} + + \vspace{<>} + + \normalsize + ((* for connection in cv.connections *)) + ((* if design.use_icons_for_connections *)) + \mbox{((*- if connection["url"] -*)) + \hrefWithoutArrow{<>}{{\footnotesize<>}\hspace*{0.13cm}<>} + ((*- else -*)) + {\footnotesize<>}\hspace*{0.13cm}<> + ((*- endif -*))}% + ((* else *)) + \mbox{((*- if connection["url"] -*)) + \hrefWithoutArrow{<>}{<>} + ((*- else -*)) + <> + ((*- endif -*))}% + ((* endif *)) + ((* if not loop.last *)) + \kern <>% + \AND% + \kern <>% + ((* endif *)) + ((* endfor *)) +\end{header} + +\vspace{<> - <>} +((* endif *)) \ No newline at end of file diff --git a/src/classic/NormalEntry.j2.tex b/src/classic/NormalEntry.j2.tex new file mode 100644 index 0000000..4e781a9 --- /dev/null +++ b/src/classic/NormalEntry.j2.tex @@ -0,0 +1,38 @@ +((* if section_title in design.show_timespan_in *)) + ((* set date_and_location_strings = [entry.location, entry.date_string, entry.time_span_string]|select("!=", "") *)) +((* else *)) + ((* set date_and_location_strings = [entry.location, entry.date_string]|select("!=", "") *)) +((* endif *)) +((* if not is_first_entry *)) +\vspace{<>} +((* endif *)) + +((* if entry.date_string or entry.location *)) +\begin{twocolentry}{ + <> +} + \textbf{<>} + ((* for item in entry.highlights *)) + ((* if loop.first *)) + \begin{highlights} + ((* endif *)) + \item <> + ((* if loop.last *)) + \end{highlights} + ((* endif *)) + ((* endfor *)) +\end{twocolentry} +((* else *)) +\begin{onecolentry} + \textbf{<>} + ((* for item in entry.highlights *)) + ((* if loop.first *)) + \begin{highlights} + ((* endif *)) + \item <> + ((* if loop.last *)) + \end{highlights} + ((* endif *)) + ((* endfor *)) +\end{onecolentry} +((* endif *)) \ No newline at end of file diff --git a/src/classic/OneLineEntry.j2.tex b/src/classic/OneLineEntry.j2.tex new file mode 100644 index 0000000..e7b963f --- /dev/null +++ b/src/classic/OneLineEntry.j2.tex @@ -0,0 +1,7 @@ +((* if not is_first_entry *)) +\vspace{<>} +((* endif *)) + +\begin{onecolentry} + \textbf{<>:} <> +\end{onecolentry} diff --git a/src/classic/Preamble.j2.tex b/src/classic/Preamble.j2.tex new file mode 100644 index 0000000..ffa2a29 --- /dev/null +++ b/src/classic/Preamble.j2.tex @@ -0,0 +1,199 @@ +\documentclass[<>, <>]{article} + +% Packages: +\usepackage[ + ignoreheadfoot, % set margins without considering header and footer + top=<>, % seperation between body and page edge from the top + bottom=<>, % seperation between body and page edge from the bottom + left=<>, % seperation between body and page edge from the left + right=<>, % seperation between body and page edge from the right + footskip=<>, % seperation between body and footer + % showframe % for debugging +]{geometry} % for adjusting page geometry +\usepackage[explicit]{titlesec} % for customizing section titles +\usepackage{tabularx} % for making tables with fixed width columns +\usepackage{array} % tabularx requires this +\usepackage[dvipsnames]{xcolor} % for coloring text +\definecolor{primaryColor}{RGB}{<>} % define primary color +\usepackage{enumitem} % for customizing lists +\usepackage{fontawesome5} % for using icons +\usepackage{amsmath} % for math +\usepackage[ + pdftitle={<>'s CV}, + pdfauthor={<>}, + pdfcreator={LaTeX with RenderCV}, + colorlinks=true, + urlcolor=primaryColor +]{hyperref} % for links, metadata and bookmarks +\usepackage[pscoord]{eso-pic} % for floating text on the page +\usepackage{calc} % for calculating lengths +\usepackage{bookmark} % for bookmarks +\usepackage{lastpage} % for getting the total number of pages +\usepackage{changepage} % for one column entries (adjustwidth environment) +\usepackage{paracol} % for two and three column entries +\usepackage{ifthen} % for conditional statements +\usepackage{needspace} % for avoiding page brake right after the section title +\usepackage{iftex} % check if engine is pdflatex, xetex or luatex + +% Ensure that generate pdf is machine readable/ATS parsable: +\ifPDFTeX + \input{glyphtounicode} + \pdfgentounicode=1 + \usepackage[T1]{fontenc} + \usepackage[utf8]{inputenc} + \usepackage{lmodern} +\fi + +((* if design.font == "Latin Modern Serif" *)) + +((* elif design.font == "Latin Modern Sans Serif" *)) +\renewcommand{\familydefault}{\sfdefault} +((* elif design.font == "Latin Modern Mono" *)) +\renewcommand{\familydefault}{\ttdefault} +((* elif design.font == "Source Sans 3" *)) +\usepackage[default, type1]{sourcesanspro} +((* elif design.font == "Charter" *)) +\usepackage{charter} +((* endif *)) + +% Some settings: +((* if design.text_alignment == "justified-with-no-hyphenation" *)) +\usepackage[none]{hyphenat} +\sloppy +((* elif design.text_alignment == "left-aligned" *)) +\raggedright +((* endif *)) +\AtBeginEnvironment{adjustwidth}{\partopsep0pt} % remove space before adjustwidth environment +\pagestyle{empty} % no header or footer +\setcounter{secnumdepth}{0} % no section numbering +\setlength{\parindent}{0pt} % no indentation +\setlength{\topskip}{0pt} % no top skip +\setlength{\columnsep}{0.15cm} % set column seperation +((* if design.disable_page_numbering *)) +\pagenumbering{gobble} % no page numbering +((* else *)) +((* set page_numbering_style_placeholders = { + "NAME": cv.name, + "PAGE_NUMBER": "\\thepage{}", + "TOTAL_PAGES": "\pageref*{LastPage}", + "TODAY": today +} *)) +\makeatletter +\let\ps@customFooterStyle\ps@plain % Copy the plain style to customFooterStyle +\patchcmd{\ps@customFooterStyle}{\thepage}{ + \color{gray}\textit{\small <>} +}{}{} % replace number by desired string +\makeatother +\pagestyle{customFooterStyle} +((* endif *)) + +\titleformat{\section}{ + % avoid page braking right after the section title + \needspace{4\baselineskip} + % make the font size of the section title large and color it with the primary color + \Large\color{primaryColor} +}{ +}{ +}{ + % print bold title, give 0.15 cm space and draw a line of 0.8 pt thickness + % from the end of the title to the end of the body + \textbf{#1}\hspace{0.15cm}\titlerule[0.8pt]\hspace{-0.1cm} +}[] % section title formatting + +\titlespacing{\section}{ + % left space: + -1pt +}{ + % top space: + <> +}{ + % bottom space: + <> +} % section title spacing + +% \renewcommand\labelitemi{$\vcenter{\hbox{\small$\bullet$}}$} % custom bullet points +\newenvironment{highlights}{ + \begin{itemize}[ + topsep=<>, + parsep=<>, + partopsep=0pt, + itemsep=0pt, + leftmargin=<> + 10pt + ] +}{ + \end{itemize} +} % new environment for highlights + +\newenvironment{highlightsforbulletentries}{ + \begin{itemize}[ + topsep=<>, + parsep=<>, + partopsep=0pt, + itemsep=0pt, + leftmargin=10pt + ] +}{ + \end{itemize} +} % new environment for highlights for bullet entries + + +\newenvironment{onecolentry}{ + \begin{adjustwidth}{ + <> + 0.00001 cm + }{ + <> + 0.00001 cm + } +}{ + \end{adjustwidth} +} % new environment for one column entries + +\newenvironment{twocolentry}[2][]{ + \onecolentry + \def\secondColumn{#2} + \setcolumnwidth{\fill, <>} + \begin{paracol}{2} +}{ + \switchcolumn \raggedleft \secondColumn + \end{paracol} + \endonecolentry +} % new environment for two column entries + +\newenvironment{threecolentry}[3][]{ + \onecolentry + \def\thirdColumn{#3} + \setcolumnwidth{<>, \fill, <>} + \begin{paracol}{3} + {\raggedright #2} \switchcolumn +}{ + \switchcolumn \raggedleft \thirdColumn + \end{paracol} + \endonecolentry +} % new environment for three column entries + +\newenvironment{header}{ + \setlength{\topsep}{0pt}\par\kern\topsep\centering\color{primaryColor}\linespread{1.5} +}{ + \par\kern\topsep +} % new environment for the header + +((* set last_updated_date_style_placeholders = { + "TODAY": today, +} *)) +\newcommand{\placelastupdatedtext}{% \placetextbox{}{}{} + \AddToShipoutPictureFG*{% Add to current page foreground + \put( + \LenToUnit{\paperwidth-<>-<>+0.05cm}, + \LenToUnit{\paperheight-<>} + ){\vtop{{\null}\makebox[0pt][c]{ + \small\color{gray}\textit{<>}\hspace{\widthof{<>}} + }}}% + }% +}% + +% save the original href command in a new command: +\let\hrefWithoutArrow\href + +% new command for external links: +((* if not design.disable_external_link_icons *)) +\renewcommand{\href}[2]{\hrefWithoutArrow{#1}{\ifthenelse{\equal{#2}{}}{ }{#2 }\raisebox{.15ex}{\footnotesize \faExternalLink*}}} +((* endif *)) \ No newline at end of file diff --git a/src/classic/PublicationEntry.j2.tex b/src/classic/PublicationEntry.j2.tex new file mode 100644 index 0000000..a1de4bd --- /dev/null +++ b/src/classic/PublicationEntry.j2.tex @@ -0,0 +1,37 @@ +((* if not is_first_entry *)) +\vspace{<>} +((* endif *)) + +\begin{samepage} + ((* if entry.date_string *)) + \begin{twocolentry}{ + <> + } + ((* else *)) + \begin{onecolentry} + ((* endif *)) + \textbf{<>} + + \vspace{<>} + + <> + ((* if entry.doi or entry.journal or entry.url *)) + \vspace{<>} + + ((* endif *)) + ((* if entry.doi -*)) + \href{<>}{<>} + ((* elif entry.url -*)) + \href{<>}{<>} + ((*- endif -*)) + ((*- if (entry.doi or entry.url) and entry.journal *)) (((* endif -*)) + ((*- if entry.journal -*)) + <> + ((*- endif -*)) + ((*- if (entry.doi or entry.url) and entry.journal *)))((* endif *)) + ((* if entry.date_string *)) + \end{twocolentry} + ((* else *)) + \end{onecolentry} + ((* endif *)) +\end{samepage} diff --git a/src/classic/SectionBeginning.j2.tex b/src/classic/SectionBeginning.j2.tex new file mode 100644 index 0000000..c80738d --- /dev/null +++ b/src/classic/SectionBeginning.j2.tex @@ -0,0 +1,6 @@ +\section{<>} + +((* if entry_type == "BulletEntry" *)) +\begin{onecolentry} + \begin{highlightsforbulletentries} +((* endif *)) diff --git a/src/classic/SectionEnding.j2.tex b/src/classic/SectionEnding.j2.tex new file mode 100644 index 0000000..7e2aaa1 --- /dev/null +++ b/src/classic/SectionEnding.j2.tex @@ -0,0 +1,4 @@ +((* if entry_type == "BulletEntry" *)) + \end{highlightsforbulletentries} +\end{onecolentry} +((* endif *)) \ No newline at end of file diff --git a/src/classic/TextEntry.j2.tex b/src/classic/TextEntry.j2.tex new file mode 100644 index 0000000..0150c5c --- /dev/null +++ b/src/classic/TextEntry.j2.tex @@ -0,0 +1,7 @@ +((* if not is_first_entry *)) +\vspace{<>} +((* endif *)) + +\begin{onecolentry} + <> +\end{onecolentry} diff --git a/src/markdown/BulletEntry.j2.md b/src/markdown/BulletEntry.j2.md new file mode 100644 index 0000000..7431c32 --- /dev/null +++ b/src/markdown/BulletEntry.j2.md @@ -0,0 +1 @@ +- <> diff --git a/src/markdown/EducationEntry.j2.md b/src/markdown/EducationEntry.j2.md new file mode 100644 index 0000000..630b07c --- /dev/null +++ b/src/markdown/EducationEntry.j2.md @@ -0,0 +1,9 @@ +## <>, ((* if entry.degree *))<> in ((* endif *))<> + +((* if entry.date_string *))- <> +((* endif *)) +((* if entry.location *))- <> +((* endif *)) +((* for item in entry.highlights *)) +- <> +((* endfor *)) diff --git a/src/markdown/ExperienceEntry.j2.md b/src/markdown/ExperienceEntry.j2.md new file mode 100644 index 0000000..44c3b7e --- /dev/null +++ b/src/markdown/ExperienceEntry.j2.md @@ -0,0 +1,9 @@ +## <>, <> + +((* if entry.date_string *))- <> +((* endif *)) +((* if entry.location *))- <> +((* endif *)) +((* for item in entry.highlights *)) +- <> +((* endfor *)) diff --git a/src/markdown/Header.j2.md b/src/markdown/Header.j2.md new file mode 100644 index 0000000..010b1c8 --- /dev/null +++ b/src/markdown/Header.j2.md @@ -0,0 +1,47 @@ + + +# RenderCV Pipeline + +Are you ready to revolutionize the way you manage and craft your CVs and resumes? + +Picture this: + +1. You simply update your `src/John_Doe_CV.yaml` input file and push the changes. +2. Then, a pipeline generates a new PDF and Markdown from it and uploads it to the repository. +3. When you are done with your work, you can create a new release on GitHub, tagging your CV with something like `v2024.04`. The pipeline will automatically add the PDF and its $\LaTeX$ source as assets to the release. +4. You have successfully created your CV pipeline, and all the history is in safe hands and reproducible. + +**How to start?** + +1. [Click here](https://github.com/new?template_name=rendercv-pipeline&template_owner=sinaatalay) to create your CV repository based on this `rendercv-pipeline` template repository. +2. Edit either + - the `src/John_Doe_CV.yaml` file, or + - the contents of `src/markdown` or `src/classic` directories + + and push. Then, see the magic happen. + +**Some tips** + +- Learn more about [RenderCV](https://github.com/sinaatalay/rendercv) to understand what you can do with this tool. +- Edit and preview your CV in your browser without installing anything by creating a codespace. Click the <> **Code** button, then click the **Codespaces** tab, and then click **Create codespace on main**. The environment will be ready for RenderCV usage. Update `.vscode/launch.json` to point to your YAML file and press `F5` to run RenderCV in the browser. + + +# <>'s CV + +((* if cv.phone *)) +- Phone: <> +((* endif *)) +((* if cv.email *)) +- Email: [<>](mailto:<>) +((* endif *)) +((* if cv.location *)) +- Location: <> +((* endif *)) +((* if cv.website *)) +- Website: [<>](<>) +((* endif *)) +((* if cv.social_networks *)) + ((* for network in cv.social_networks *)) +- <>: [<>](<>) + ((* endfor *)) +((* endif *)) diff --git a/src/markdown/NormalEntry.j2.md b/src/markdown/NormalEntry.j2.md new file mode 100644 index 0000000..374be0b --- /dev/null +++ b/src/markdown/NormalEntry.j2.md @@ -0,0 +1,9 @@ +## <> + +((* if entry.date_string *))- <> +((* endif *)) +((* if entry.location *))- <> +((* endif *)) +((* for item in entry.highlights *)) +- <> +((* endfor *)) diff --git a/src/markdown/OneLineEntry.j2.md b/src/markdown/OneLineEntry.j2.md new file mode 100644 index 0000000..649f617 --- /dev/null +++ b/src/markdown/OneLineEntry.j2.md @@ -0,0 +1 @@ +- <>: <> diff --git a/src/markdown/PublicationEntry.j2.md b/src/markdown/PublicationEntry.j2.md new file mode 100644 index 0000000..73aef66 --- /dev/null +++ b/src/markdown/PublicationEntry.j2.md @@ -0,0 +1,9 @@ +## <> ((* if entry.doi *))([<>](<>))((* elif entry.url *))([<>](<>))((* endif *)) + +((* if entry.date_string *)) +- <> +((* endif *)) +- <> +((* if entry.journal *)) +- <> +((* endif *)) diff --git a/src/markdown/SectionBeginning.j2.md b/src/markdown/SectionBeginning.j2.md new file mode 100644 index 0000000..409e29e --- /dev/null +++ b/src/markdown/SectionBeginning.j2.md @@ -0,0 +1 @@ +# <> diff --git a/src/markdown/TextEntry.j2.md b/src/markdown/TextEntry.j2.md new file mode 100644 index 0000000..90e577a --- /dev/null +++ b/src/markdown/TextEntry.j2.md @@ -0,0 +1,2 @@ +<> +