23 Commits
0.8.0 ... main

Author SHA1 Message Date
elagil
0cf87be8b6 fix: layout 2025-08-03 12:23:01 +02:00
elagil
de639642db fix: custom format 2025-08-01 23:01:53 +02:00
elagil
f5d9ba995a fix: alignment 2025-08-01 19:18:16 +02:00
elagil
dc0eb7a648 chore: remove coloring 2025-08-01 18:22:57 +02:00
Pedro Costa
13533bc0a7 Make phone number a tel URL (#126) 2025-07-17 10:44:22 -04:00
Laith Rastanawi
24ed5bef9f feat: Add support for custom author entry (#124) 2025-07-02 08:36:15 -04:00
Paul T
6e709397d8 fix(coverletter): spacing between footer and closing (#123) 2025-06-02 08:29:15 -04:00
Paul T
c7a023ff6a fix: resume skill item grid alignment (#121) 2025-05-28 22:50:54 -04:00
Paul T
63289012a1 feat: improve README design and readability (#120) 2025-05-25 22:47:08 -04:00
Paul T
8f7770aaca feat(lib): added icon to address entry (#119)
Co-authored-by: Carlo Rosso <carlorosso@Carlos-MacBook-Air.local>
2025-05-23 08:28:12 -04:00
Paul T
ac7c078341 fix: small misc issues with build (#118)
Auto formatted all typst code and fixed CI issue due to using upload artifacts v4 (actions/upload-artifact@v4/docs/MIGRATION.md)
2025-05-22 14:32:45 -04:00
José Faria
076afdd74e parametrize header-font for coverletters (#114)
Co-authored-by: jncfa <jncfa@proton.me>
2025-04-07 08:14:51 -04:00
Paul T
12352d79bd chore: typst 0.13 updates (#113)
* chore: upgrade linguify

* chore: update tests

* fix: remove deprecated type checks

* chore: improve Justfile docs

* chore: compile with typst 0.12 and 0.13 in CI

* chore: use tytanic for testing

* chore: use tytanic in CI

* fix: don't use ubuntu-latest

* fix: test runner issues

* chore: trying to fix CI issues

* fix: remove unused font in tests

* fix: update references
2025-03-29 08:12:19 -04:00
John
beff2b2b4b Use type literals for comparison (#112) 2025-03-24 10:09:46 -04:00
Paul T
21351f858d Merge pull request #111 from FiiL123/patch-1
fix: use paper-size in docs
2025-03-11 13:26:53 -04:00
Filip Sršeň
21da689b81 use paper-size in docs
change from page-size to paper-size used by the template
2025-03-11 08:55:54 +01:00
Paul T
7c174cc13d Merge pull request #105 from timmmmmmmmm/main
feat: add disable-smallcaps option
2025-03-10 10:38:12 -04:00
Tim van der Heide
148786be89 efactor: rename disable-smallcaps to use-smallcaps and reduce code duplication
- Change flag from disable-smallcaps (negative) to use-smallcaps (to keep 'positive' variable theme)
- Create helper functions (__format_author_name, __apply_smallcaps) to eliminate duplicate code
- Fix parameter passing to footer functions using named parameters
2025-03-04 09:07:34 +01:00
Tim van der Heide
bf57a254b9 feat: add disable-smallcaps option 2025-02-24 20:45:31 +01:00
Paul T
dab5adeb82 Merge pull request #102 from tfmoraes/gitlab_bitbucket 2025-02-18 12:28:37 -05:00
Thiago Franco de Moraes
17b9cc7862 Added gitlab and bitbucket 2025-02-17 17:04:17 -03:00
Paul T
2bd1355851 Merge pull request #101 from DeveloperPaul123/release/0.8.0
0.8.0 release back-merge
2025-02-15 22:12:09 -05:00
Paul Tsouchlos
71ccbf8cb9 chore: update manual generation lib 2025-01-23 08:18:56 -05:00
24 changed files with 582 additions and 535 deletions

View File

@@ -14,7 +14,7 @@ env:
jobs: jobs:
release: release:
runs-on: ubuntu-latest runs-on: ubuntu-22.04
steps: steps:
- name: Checkout - name: Checkout
uses: actions/checkout@v4 uses: actions/checkout@v4

View File

@@ -1,22 +1,22 @@
name: Tests name: Tests
on: on:
push: push:
branches: [ main ] branches: [main]
pull_request: pull_request:
branches: [ main ] branches: [main]
jobs: jobs:
tests: tests:
strategy: strategy:
matrix: matrix:
# add any other Typst versions that your package should support # add any other Typst versions that your package should support
typst-version: ["0.12"] typst-version: ["0.12", "0.13"]
# the docs don't need to build with all versions supported by the package; # the docs don't need to build with all versions supported by the package;
# the latest one is enough # the latest one is enough
include: include:
- typst-version: "0.12" - typst-version: "0.13"
doc: 1 doc: 1
runs-on: ubuntu-latest runs-on: ubuntu-22.04
steps: steps:
- name: Checkout - name: Checkout
uses: actions/checkout@v4 uses: actions/checkout@v4
@@ -37,36 +37,37 @@ jobs:
with: with:
crate: just crate: just
- name: Install typst-test from github - name: Install tytanic
uses: baptiste0928/cargo-install@v3 uses: taiki-e/cache-cargo-install-action@v2
with: with:
crate: typst-test tool: tytanic@0.2.2
git: https://github.com/tingerrr/typst-test.git
tag: ci-semi-stable
- name: Setup typst - name: Setup typst
uses: typst-community/setup-typst@v3 uses: typst-community/setup-typst@v3
with: with:
typst-version: ${{ matrix.typst-version }} typst-version: ${{ matrix.typst-version }}
- name: Install fonts - name: Install fonts
run: | run: |
sudo apt update sudo apt update
sudo apt-get install fonts-roboto sudo apt-get install fonts-roboto
./scripts/install-fontawesome ./scripts/install-fontawesome
./scripts/install-source-sans ./scripts/install-source-sans
typst fonts
- name: Install locally - name: Uninstall previous local install
run: just install run: just uninstall
- name: Run test suite - name: Run test suite
run: just test run: |
just install
tt run --font-path ~/.fonts --no-fail-fast
- name: Archive diffs - name: Archive diffs
uses: actions/upload-artifact@v4 uses: actions/upload-artifact@v4
if: always() if: always()
with: with:
name: diffs name: diffs-typst-${{ matrix.typst-version }}
path: | path: |
tests/**/diff/*.png tests/**/diff/*.png
tests/**/out/*.png tests/**/out/*.png
@@ -76,7 +77,7 @@ jobs:
- name: Build docs - name: Build docs
if: ${{ matrix.doc }} if: ${{ matrix.doc }}
run: just doc run: just doc
- name: Upload docs - name: Upload docs
uses: actions/upload-artifact@v4 uses: actions/upload-artifact@v4
with: with:

View File

@@ -7,39 +7,51 @@ default:
@just --list --unsorted @just --list --unsorted
# generate manual # generate manual
[doc('Generate package documentation')]
[group('package')]
doc: doc:
typst compile docs/manual.typ docs/manual.pdf typst compile docs/manual.typ docs/manual.pdf
# run test suite [doc('Run test suite. Requires tytanic.')]
test *args: [group('dev')]
typst-test run {{ args }} test *args: install
tt run {{ args }} --use-system-fonts --no-fail-fast
# update test cases [doc('Update test cases. Requires tytanic.')]
[group('dev')]
update *args: update *args:
typst-test update {{ args }} tt update {{ args }} --use-system-fonts
# package the library into the specified destination folder [doc('Package the library into the specified destination folder')]
[group('package')]
package target: package target:
./scripts/package "{{target}}" ./scripts/package "{{target}}"
# install the library with the "@local" prefix [doc('Install the library with the "@local" prefix')]
[group('dev')]
install: (package "@local") install: (package "@local")
# install the library with the "@preview" prefix (for pre-release testing) [doc('Install the library with the "@preview" prefix (for pre-release testing)')]
[group('dev')]
install-preview: (package "@preview") install-preview: (package "@preview")
[private] [private]
remove target: remove target:
./scripts/uninstall "{{target}}" ./scripts/uninstall "{{target}}"
# uninstalls the library from the "@local" prefix [doc('Uninstall the library from the "@local" prefix')]
[group('dev')]
uninstall: (remove "@local") uninstall: (remove "@local")
# uninstalls the library from the "@preview" prefix (for pre-release testing) [doc('Uninstall the library from the "@preview" prefix (for pre-release testing)')]
[group('dev')]
uninstall-preview: (remove "@preview") uninstall-preview: (remove "@preview")
[doc('Format the source code. Requires typstyle.')]
[group('dev')]
format: format:
./scripts/format ./scripts/format
# run ci suite [doc('Run ci suite')]
[group('dev')]
ci: test doc ci: test doc

View File

@@ -1,4 +1,8 @@
# Modern CV <h1 align="center">
<img src="assets/images/header.png" alt="Header">
<br><br>
Modern CV
</h1>
[![say thanks](https://img.shields.io/badge/Say%20Thanks-👍-1EAEDB.svg)](https://github.com/DeveloperPaul123/modern-cv/stargazers) [![say thanks](https://img.shields.io/badge/Say%20Thanks-👍-1EAEDB.svg)](https://github.com/DeveloperPaul123/modern-cv/stargazers)
[![Discord](https://img.shields.io/discord/652515194572111872?logo=Discord)](https://discord.gg/CX2ybByRnt) [![Discord](https://img.shields.io/discord/652515194572111872?logo=Discord)](https://discord.gg/CX2ybByRnt)
@@ -7,6 +11,20 @@
A port of the [Awesome-CV](https://github.com/posquit0/Awesome-CV) Latex resume template in [typst](https://github.com/typst/typst). A port of the [Awesome-CV](https://github.com/posquit0/Awesome-CV) Latex resume template in [typst](https://github.com/typst/typst).
## Features
- Modern and clean design
- Easy to use and customize (colors, profile picture, fonts, etc.)
- Support for multiple sections (education, experience, skills, etc.)
- Support for multiple languages
## Preview
| Resumes | Cover letters |
| --- | --- |
| ![Resume](assets/images/resume.png) | ![Cover Letter](assets/images/coverletter.png) |
| ![Resume 2](assets/images/resume2.png) | ![Cover Letter 2](assets/images/coverletter2.png)|
## Requirements ## Requirements
### Tools ### Tools
@@ -56,7 +74,7 @@ Below is a basic example for a simple resume:
), ),
profile-picture: none, profile-picture: none,
date: datetime.today().display(), date: datetime.today().display(),
page-size: "us-letter" paper-size: "us-letter"
) )
= Education = Education
@@ -85,13 +103,6 @@ For more information on how to use and compile `typst` files, see the [official
Documentation for this template is published with each commit. See the attached PDF on each Github Action run [here](https://github.com/DeveloperPaul123/modern-cv/actions). Documentation for this template is published with each commit. See the attached PDF on each Github Action run [here](https://github.com/DeveloperPaul123/modern-cv/actions).
### Output Examples
| Resumes | Cover letters |
| --- | --- |
| ![Resume](assets/images/resume.png) | ![Cover Letter](assets/images/coverletter.png) |
| ![Resume 2](assets/images/resume2.png) | ![Cover Letter 2](assets/images/coverletter2.png)|
## Building and Testing Locally ## Building and Testing Locally
To build and test the project locally, you will need to install the `typst` CLI. You can find instructions on how to do this [here](https://github.com/typst/typst#installation). To build and test the project locally, you will need to install the `typst` CLI. You can find instructions on how to do this [here](https://github.com/typst/typst#installation).

Binary file not shown.

Binary file not shown.

Before

Width:  |  Height:  |  Size: 205 KiB

After

Width:  |  Height:  |  Size: 231 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 209 KiB

After

Width:  |  Height:  |  Size: 207 KiB

BIN
assets/images/header.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 184 KiB

BIN
assets/images/logo.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 78 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 210 KiB

After

Width:  |  Height:  |  Size: 251 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 246 KiB

View File

@@ -1,9 +1,7 @@
#import "../lib.typ" #import "../lib.typ"
#import "@preview/tidy:0.3.0" #import "@preview/tidy:0.4.1"
#let docs = tidy.parse-module( #let docs = tidy.parse-module(read("../lib.typ"), name: "Modern CV", scope: (
read("../lib.typ"), resume: lib,
name: "Modern CV", ))
scope: (resume: lib), #tidy.show-module(docs, style: tidy.styles.minimal)
)
#tidy.show-module(docs)

717
lib.typ

File diff suppressed because it is too large Load Diff

View File

@@ -1,4 +1,3 @@
#!/usr/bin/env bash #!/usr/bin/env bash
set -eu set -eu
find . -iname "*.typ" | xargs typstyle -i
find . -iname "*.typ" | xargs typstyle -i

View File

@@ -8,4 +8,14 @@ mkdir -p ~/.fonts
find ~/source-sans-fonts -type f -name "*.otf" -exec cp {} ~/.fonts \; find ~/source-sans-fonts -type f -name "*.otf" -exec cp {} ~/.fonts \;
rm ~/source-sans.zip rm ~/source-sans.zip
rm -rf ~/source-sans-fonts rm -rf ~/source-sans-fonts
wget -O ~/source-sans-pro.zip https://github.com/adobe-fonts/source-sans-pro/archive/2.020R-ro/1.075R-it.zip
mkdir -p ~/source-sans-pro-fonts
unzip ~/source-sans-pro.zip -d ~/source-sans-pro-fonts
mkdir -p ~/.fonts
find ~/source-sans-pro-fonts -type f -name "*.otf" -exec cp {} ~/.fonts \;
# clean up
rm ~/source-sans-pro.zip
rm -rf ~/source-sans-pro-fonts
fc-cache -f -v fc-cache -f -v

View File

@@ -27,40 +27,40 @@ readarray -t ignores < <(grep -v '^#' .typstignore | grep '[^[:blank:]]')
# recursively print all files that are not excluded via .typstignore # recursively print all files that are not excluded via .typstignore
function enumerate { function enumerate {
local root="$1" local root="$1"
if [[ -f "$root" ]]; then if [[ -f "$root" ]]; then
echo "$root" echo "$root"
else else
local files local files
readarray -t files < <(find "$root" \ readarray -t files < <(find "$root" \
-mindepth 1 -maxdepth 1 \ -mindepth 1 -maxdepth 1 \
-not -name .git \ -not -name .git \
-not -name .typstignore) -not -name .typstignore)
# declare -p files >&2 # declare -p files >&2
local f local f
for f in "${files[@]}"; do for f in "${files[@]}"; do
local include local include
include=1 include=1
local ignore local ignore
for ignore in "${ignores[@]}"; do for ignore in "${ignores[@]}"; do
if [[ "$ignore" =~ ^! ]]; then if [[ "$ignore" =~ ^! ]]; then
ignore="${ignore:1}" ignore="${ignore:1}"
if [[ "$f" == ./$ignore ]]; then if [[ "$f" == ./$ignore ]]; then
# echo "\"$f\" matched \"!$ignore\"" >&2 # echo "\"$f\" matched \"!$ignore\"" >&2
include=1 include=1
fi fi
elif [[ "$f" == ./$ignore ]]; then elif [[ "$f" == ./$ignore ]]; then
# echo "\"$f\" matched \"$ignore\"" >&2 # echo "\"$f\" matched \"$ignore\"" >&2
include=0 include=0
fi fi
done done
if [[ "$include" == 1 ]]; then if [[ "$include" == 1 ]]; then
enumerate "$f" enumerate "$f"
fi fi
done done
fi fi
} }
# List of all files that get packaged # List of all files that get packaged

View File

@@ -2,4 +2,4 @@ typst compile -f png $PSScriptRoot/../template/resume.typ $PSScriptRoot/../asset
typst compile -f png $PSScriptRoot/../template/coverletter.typ $PSScriptRoot/../assets/images/coverletter.png typst compile -f png $PSScriptRoot/../template/coverletter.typ $PSScriptRoot/../assets/images/coverletter.png
typst compile -f png $PSScriptRoot/../template/coverletter2.typ $PSScriptRoot/../assets/images/coverletter2.png typst compile -f png $PSScriptRoot/../template/coverletter2.typ $PSScriptRoot/../assets/images/coverletter2.png
oxipng.exe $PSScriptRoot/../assets/images/* oxipng.exe $PSScriptRoot/../assets/images/*.png

View File

@@ -23,24 +23,25 @@
// Remove the following line to show the footer // Remove the following line to show the footer
// Or set the value to `true` // Or set the value to `true`
show-footer: false, show-footer: false,
// this defaults to false
show-address-icon: true,
// set this to `none` to show the default or remove it completely // set this to `none` to show the default or remove it completely
closing: [], closing: [],
// see typst "page" documentation for more options // see typst "page" documentation for more options
paper-size: "us-gov-legal" paper-size: "us-gov-legal",
) )
#hiring-entity-info(entity-info: ( #hiring-entity-info(
target: "Company Recruitement Team", entity-info: (
name: "Google, Inc.", target: "Company Recruitement Team",
street-address: "1600 AMPHITHEATRE PARKWAY", name: "Google, Inc.",
city: "MOUNTAIN VIEW, CA 94043", street-address: "1600 AMPHITHEATRE PARKWAY",
)) city: "MOUNTAIN VIEW, CA 94043",
),
#letter-heading(
job-position: "Software Engineer",
addressee: "Sir or Madame",
) )
#letter-heading(job-position: "Software Engineer", addressee: "Sir or Madame")
= About Me = About Me
#coverletter-content[ #coverletter-content[
#lorem(80) #lorem(80)

View File

@@ -14,23 +14,29 @@
"Software Engineer", "Software Engineer",
"Full Stack Developer", "Full Stack Developer",
), ),
custom: (
(
text: "Youtube Channel",
icon: "youtube",
link: "http://example.com",
),
),
), ),
profile-picture: none, profile-picture: none,
language: "sp", language: "sp",
) )
#hiring-entity-info(entity-info: ( #hiring-entity-info(
target: "Company Recruitement Team", entity-info: (
name: "Google, Inc.", target: "Company Recruitement Team",
street-address: "1600 AMPHITHEATRE PARKWAY", name: "Google, Inc.",
city: "MOUNTAIN VIEW, CA 94043", street-address: "1600 AMPHITHEATRE PARKWAY",
)) city: "MOUNTAIN VIEW, CA 94043",
),
#letter-heading(
job-position: "Software Engineer",
addressee: "Sir or Madame",
) )
#letter-heading(job-position: "Software Engineer", addressee: "Sir or Madame")
#coverletter-content[ #coverletter-content[
#lorem(100) #lorem(100)
] ]

View File

@@ -19,12 +19,20 @@
"Software Architect", "Software Architect",
"Developer", "Developer",
), ),
custom: (
(
text: "Youtube Channel",
icon: "youtube",
link: "https://example.com",
),
),
), ),
profile-picture: none, profile-picture: image("profile.png"),
date: datetime.today().display(), date: datetime.today().display(),
language: "en", language: "en",
colored-headers: true, colored-headers: true,
show-footer: false, show-footer: false,
show-address-icon: true,
paper-size: "us-letter", paper-size: "us-letter",
) )
@@ -56,10 +64,7 @@
#lorem(72) #lorem(72)
] ]
#resume-entry( #resume-entry(title: "Intern", location: "Example City, EX")
title: "Intern",
location: "Example City, EX",
)
#resume-item[ #resume-item[
- #lorem(20) - #lorem(20)
@@ -96,14 +101,62 @@
= Skills = Skills
#resume-skill-item( #resume-skill-item(
"Languages", "Programming Languages",
(strong("C++"), strong("Python"), "Java", "C#", "JavaScript", "TypeScript"), (
strong("C++"),
strong("Python"),
"Rust",
"Java",
"C#",
"JavaScript",
"TypeScript",
),
) )
#resume-skill-item("Spoken Languages", (strong("English"), "Spanish")) #resume-skill-item("Spoken Languages", (strong("English"), "Spanish"))
#resume-skill-item( #resume-skill-item(
"Programs", "Programs",
(strong("Excel"), "Word", "Powerpoint", "Visual Studio"), (
strong("Excel"),
"Word",
"Powerpoint",
"Visual Studio",
),
) )
// spacing fix, not needed if you use `resume-skill-grid`
#block(below: 0.65em)
// An alternative way of list out your resume skills
// #resume-skill-grid(
// categories_with_values: (
// "Programming Languages": (
// strong("C++"),
// strong("Python"),
// "Rust",
// "Java",
// "C#",
// "JavaScript",
// "TypeScript",
// ),
// "Spoken Languages": (
// strong("English"),
// "Spanish",
// "Greek",
// ),
// "Programs": (
// strong("Excel"),
// "Word",
// "Powerpoint",
// "Visual Studio",
// "git",
// "Zed"
// ),
// "Really Really Long Long Long Category": (
// "Thing 1",
// "Thing 2",
// "Thing 3"
// )
// ),
// )
= Education = Education

Binary file not shown.

Before

Width:  |  Height:  |  Size: 32 KiB

After

Width:  |  Height:  |  Size: 32 KiB

View File

@@ -1,13 +1,8 @@
#import "@local/modern-cv:0.8.0": * #import "@local/modern-cv:0.8.0": *
// setup the document like we do for the resume // setup the document like we do for the resume
#let font = ("Source Sans Pro", "Source Sans 3") #let font = "Source Sans 3"
#set text( #set text(font: font, size: 11pt, fill: color-darkgray, fallback: true)
font: font,
size: 11pt,
fill: color-darkgray,
fallback: true,
)
#set page( #set page(
paper: "a4", paper: "a4",
@@ -19,21 +14,12 @@
// set paragraph spacing // set paragraph spacing
#set par(spacing: 0.75em, justify: true) #set par(spacing: 0.75em, justify: true)
#set heading( #set heading(numbering: none, outlined: false)
numbering: none,
outlined: false,
)
#show heading.where(level: 1): it => [ #show heading.where(level: 1): it => [
#set block( #set block(above: 1em, below: 1em)
above: 1em, #set text(size: 16pt, weight: "regular")
below: 1em,
)
#set text(
size: 16pt,
weight: "regular",
)
#align(left)[ #align(left)[
#let color = if colored-headers { #let color = if colored-headers {
@@ -48,20 +34,12 @@
] ]
#show heading.where(level: 2): it => { #show heading.where(level: 2): it => {
set text( set text(color-darkgray, size: 12pt, style: "normal", weight: "bold")
color-darkgray,
size: 12pt,
style: "normal",
weight: "bold",
)
it.body it.body
} }
#show heading.where(level: 3): it => { #show heading.where(level: 3): it => {
set text( set text(size: 10pt, weight: "regular")
size: 10pt,
weight: "regular",
)
smallcaps[#it.body] smallcaps[#it.body]
} }
@@ -77,19 +55,10 @@
) )
// resume-entry also support omitting the date and description // resume-entry also support omitting the date and description
#resume-entry( #resume-entry(title: "Title", location: "Location")
title: "Title",
location: "Location",
)
#resume-certification( #resume-certification("Certified Scrum Master (CSM)", "Jan 2022")
"Certified Scrum Master (CSM)",
"Jan 2022",
)
#resume-skill-item( #resume-skill-item("Programming", (strong["C++"], "Python", "Java"))
"Programming",
(strong["C++"], "Python", "Java"),
)
#resume-gpa("3.5", "4.0") #resume-gpa("3.5", "4.0")

Binary file not shown.

Before

Width:  |  Height:  |  Size: 24 KiB

After

Width:  |  Height:  |  Size: 24 KiB

View File

@@ -1,13 +1,8 @@
#import "@local/modern-cv:0.8.0": * #import "@local/modern-cv:0.8.0": *
// setup the document like we do for the resume // setup the document like we do for the resume
#let font = ("Source Sans Pro", "Source Sans 3") #let font = "Source Sans 3"
#set text( #set text(font: font, size: 11pt, fill: color-darkgray, fallback: true)
font: font,
size: 11pt,
fill: color-darkgray,
fallback: true,
)
#set page( #set page(
paper: "a4", paper: "a4",
@@ -19,21 +14,12 @@
// set paragraph spacing // set paragraph spacing
#set par(spacing: 0.75em, justify: true) #set par(spacing: 0.75em, justify: true)
#set heading( #set heading(numbering: none, outlined: false)
numbering: none,
outlined: false,
)
#show heading.where(level: 1): it => [ #show heading.where(level: 1): it => [
#set block( #set block(above: 1em, below: 1em)
above: 1em, #set text(size: 16pt, weight: "regular")
below: 1em,
)
#set text(
size: 16pt,
weight: "regular",
)
#align(left)[ #align(left)[
#let color = if colored-headers { #let color = if colored-headers {
@@ -48,20 +34,12 @@
] ]
#show heading.where(level: 2): it => { #show heading.where(level: 2): it => {
set text( set text(color-darkgray, size: 12pt, style: "normal", weight: "bold")
color-darkgray,
size: 12pt,
style: "normal",
weight: "bold",
)
it.body it.body
} }
#show heading.where(level: 3): it => { #show heading.where(level: 3): it => {
set text( set text(size: 10pt, weight: "regular")
size: 10pt,
weight: "regular",
)
smallcaps[#it.body] smallcaps[#it.body]
} }
@@ -80,9 +58,11 @@
#birth-icon #birth-icon
#homepage-icon #homepage-icon
#website-icon #website-icon
#gitlab-icon
#bitbucket-icon
#square(size: 1em, fill: color-darkgray) #square(size: 1em, fill: color-darkgray)
#square(size: 1em, fill: color-darknight) #square(size: 1em, fill: color-darknight)
#square(size: 1em, fill: color-gray) #square(size: 1em, fill: color-gray)
#square(size: 1em, fill: default-accent-color) #square(size: 1em, fill: default-accent-color)
#square(size: 1em, fill: default-location-color) #square(size: 1em, fill: default-location-color)