Skip to content

Commit 00c79d8

Browse files
authored
finely-crafted-cv:0.2.0 (typst#1533)
1 parent e6be223 commit 00c79d8

File tree

20 files changed

+904
-0
lines changed

20 files changed

+904
-0
lines changed
Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
MIT License
2+
3+
Copyright (c) 2024 Stephen Waits <steve@waits.net>
4+
5+
Permission is hereby granted, free of charge, to any person obtaining a copy
6+
of this software and associated documentation files (the "Software"), to deal
7+
in the Software without restriction, including without limitation the rights
8+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9+
copies of the Software, and to permit persons to whom the Software is
10+
furnished to do so, subject to the following conditions:
11+
12+
The above copyright notice and this permission notice shall be included in all
13+
copies or substantial portions of the Software.
14+
15+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21+
SOFTWARE.
Lines changed: 118 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,118 @@
1+
# Finely Crafted CV Template
2+
3+
This Typst template provides a clean and professional format for creating a
4+
curriculum vitae (CV) or résumé. It comes with functions and styles to help you
5+
easily generate a well-structured document, complete with sections for
6+
education, experience, skills, and more.
7+
8+
## Features
9+
10+
- **Modern Design:** Aesthetic and professional layout designed for readability.
11+
- **Responsive Header & Footer:** Includes contact information dynamically.
12+
13+
## Usage
14+
15+
To use this template, import it with the version number and utilize the `resume` or `cv` function:
16+
17+
```typst
18+
#import "@preview/finely-crafted-cv:0.2.0": *
19+
20+
#show: resume.with(
21+
name: "Amira Patel",
22+
tagline: "Innovative marine biologist with 15+ years of experience in ocean conservation and research.",
23+
keywords: "marine biology, conservation, research, education, patents",
24+
email: "amira.patel@oceandreams.org",
25+
phone: "+1-305-555-7890",
26+
linkedin-username: "amirapatel",
27+
thumbnail: image("assets/my-qr-code.svg"),
28+
)
29+
30+
= Introduction
31+
32+
#lorem(100)
33+
34+
= Experience
35+
36+
#company-heading("Some Company", start: "March 2018", end: "Present", icon: image("icons/earth.svg"))[
37+
#job-heading("Some Job", location: "Some Location")[
38+
- Here is an achievement
39+
- Here's another one.
40+
]
41+
// companies can have multiple jobs
42+
#job-heading("First Job", location: "Some Location")[
43+
- Here is an achievement
44+
- Here's another one.
45+
]
46+
]
47+
48+
// for companies which have less detail, you can use the `comment` instead of a
49+
// body of tasks, as follows:
50+
#company-heading("Another Company", start: "July 2005", end: "August 2009", icon: image("icons/microscope.svg"))[
51+
#job-heading("Another Job", location: "Another Location",
52+
comment: [Contributed to 7 published studies. #footnote[Visit https://amirapatel.org/publications for full list of publications.]]
53+
)[]
54+
]
55+
56+
= Education
57+
58+
// school-heading is an alias for company-heading, accepts the same parameters as company-heading
59+
#school-heading("University of California, San Diego", start: "Fall 2001", end: "Spring 2005", icon: image("icons/graduation-cap.svg"))[
60+
// degree-heading is an alias for job-heading, accepts the same parameters as job-heading
61+
#degree-heading("Ph.D. in Marine Biology")[]
62+
]
63+
```
64+
65+
## Functions and Parameters
66+
67+
### `resume` or `cv`
68+
69+
This is the main function to create a CV document.
70+
71+
- **Parameters:**
72+
- `name`: (String) Your full name. Default is "YOUR NAME HERE".
73+
- `tagline`: (String) A brief description of your professional identity or mission.
74+
- `paper`: (String) The paper size, default is "us-letter".
75+
- `heading-font`: (Font) Font for headings, customizable.
76+
- `body-font`: (Font) Font for body text, customizable.
77+
- `body-size`: (Size) Font size for body text.
78+
- `email`: (String) Your email address.
79+
- `phone`: (String) Your phone number.
80+
- `linkedin-username`: (String) Your LinkedIn username.
81+
- `keywords`: (String) Keywords for searchability.
82+
- `thumbnail`: (Image) Thumbnail or QR code image, optional.
83+
- `body`: (Block) The main content of your CV.
84+
85+
### `company-heading`
86+
87+
Used to create a heading for a company or organization.
88+
89+
- **Parameters:**
90+
- `name`: (String) Name of the company.
91+
- `start`: (String) Start date.
92+
- `end`: (String) End date, optional.
93+
- `icon`: (Image) Icon image associated with the company, optional.
94+
- `body`: (Block) Content related to the company role or tasks.
95+
96+
### `job-heading`
97+
98+
Defines a job title within a company heading.
99+
100+
- **Parameters:**
101+
- `title`: (String) Job title.
102+
- `location`: (String) Location of the job, optional.
103+
- `start`: (String) Start date, optional.
104+
- `end`: (String) End date, optional.
105+
- `comment`: (String) Additional comments or notes, optional.
106+
- `body`: (Block) Tasks or responsibilities.
107+
108+
### `school-heading`
109+
110+
Alias for `company-heading`, used for educational institutions.
111+
112+
### `degree-heading`
113+
114+
Alias for `job-heading`, used for academic degrees or certifications.
115+
116+
## License
117+
118+
This template is released under the MIT License.
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
#import "src/resume.typ": cv, resume, company-heading, job-heading, school-heading, degree-heading
Lines changed: 61 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,61 @@
1+
// Constants
2+
#let SIZE_HUGE = 1.5em
3+
#let SIZE_LARGE = 1.1em
4+
#let SIZE_NORMAL = 1em
5+
#let SIZE_SMALL = 0.9em
6+
#let SIZE_TINY = 0.7em
7+
8+
#let BODY_FONT = "Source Serif Pro"
9+
#let BODY_SIZE = 11pt
10+
#let BODY_WEIGHT = "light"
11+
#let HEADING_FONT = "Source Sans Pro"
12+
13+
#let PAGE_MARGIN = 0.5in
14+
15+
#let HEADER_SIZE = SIZE_SMALL
16+
#let HEADER_ICON_HEIGHT = SIZE_NORMAL
17+
#let HEADER_ICON_SPACING = 0.25em
18+
19+
#let FOOTER_SIZE = SIZE_TINY
20+
#let FOOTER_TEXT_WEIGHT = "thin"
21+
22+
#let HEADLINE_NAME_SIZE = SIZE_HUGE
23+
#let HEADLINE_NAME_WEIGHT = "bold"
24+
#let HEADLINE_HRULE_STROKE = 1pt + black
25+
26+
#let TAGLINE_SIZE = SIZE_NORMAL
27+
#let TAGLINE_STYLE = "italic"
28+
#let TAGLINE_WEIGHT = "regular"
29+
30+
#let SECTION_HEADING_SIZE = 0.8em // TODO: this seems wrong, should be SIZE_NORMAL (etc)
31+
#let SECTION_HEADING_WEIGHT = "semibold"
32+
#let SECTION_HEADING_HRULE_STROKE = 0.75pt + navy.lighten(10%)
33+
#let SECTION_HEADING_SPACE_ABOVE = 1em
34+
#let SECTION_HEADING_SPACE_BELOW = 0.5em
35+
#let SECTION_HEADING_BLOCK_FILL = luma(100%) //gradient.linear(blue.lighten(99%), luma(100%))
36+
#let SECTION_HEADING_BLOCK_RADIUS = 2pt
37+
#let SECTION_HEADING_BLOCK_OUTSET = 0.2em
38+
39+
#let COMPANY_ICON_SIZE = SIZE_NORMAL
40+
#let COMPANY_ICON_SPACING = 0.25em
41+
#let COMPANY_NAME_SIZE = SIZE_LARGE
42+
#let COMPANY_NAME_WEIGHT = "semibold"
43+
#let COMPANY_DATE_SIZE = COMPANY_NAME_SIZE
44+
#let COMPANY_DATE_WEIGHT = "semibold"
45+
#let COMPANY_BLOCK_BELOW = 1.3em
46+
47+
#let JOB_NAME_SIZE = SIZE_NORMAL
48+
#let JOB_NAME_STYLE = "normal"
49+
#let JOB_NAME_WEIGHT = "medium"
50+
#let JOB_LOCATION_SIZE = SIZE_SMALL
51+
#let JOB_LOCATION_STYLE = JOB_NAME_STYLE
52+
#let JOB_LOCATION_WEIGHT = "light"
53+
#let JOB_BLOCK_ABOVE = 0.6em
54+
#let JOB_BLOCK_BELOW = 1em
55+
#let EMPTY_JOB_NUDGE = -0.75em
56+
57+
#let TABLE_HEADER_COLOR = blue.lighten(70%)
58+
#let TABLE_ZEBRA_COLOR_0 = green.lighten(85%)
59+
#let TABLE_ZEBRA_COLOR_1 = green.lighten(95%)
60+
61+
#let HRULE_HEIGHT = 0.5em
Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
#import "constants.typ":*
2+
3+
#let icon_and_contact(icon, content) = {
4+
grid(
5+
columns: 2,
6+
align: center+horizon,
7+
gutter: COMPANY_ICON_SPACING,
8+
9+
box(
10+
height: HEADER_ICON_HEIGHT,
11+
width: auto,
12+
image(icon)
13+
),
14+
content
15+
)
16+
}
17+
18+
#let hrule(stroke: 1pt + black) = {
19+
block(
20+
above: HRULE_HEIGHT,
21+
below: 0em,
22+
breakable: false,
23+
line(length: 100%, stroke: stroke)
24+
)
25+
}

packages/preview/finely-crafted-cv/0.2.0/src/icons/email.svg

Lines changed: 20 additions & 0 deletions
Loading

packages/preview/finely-crafted-cv/0.2.0/src/icons/linkedin.svg

Lines changed: 8 additions & 0 deletions
Loading

0 commit comments

Comments
 (0)