aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to '')
-rw-r--r--.gitignore5
-rw-r--r--Makefile10
-rw-r--r--README.md2
-rw-r--r--template.pdfbin0 -> 2193 bytes
-rw-r--r--template.typ97
-rw-r--r--urbanprah_cv.pdfbin63768 -> 64289 bytes
-rw-r--r--urbanprah_cv.typ24
7 files changed, 84 insertions, 54 deletions
diff --git a/.gitignore b/.gitignore
index 70012de..d2de9f8 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1,7 +1,2 @@
-*.aux
-*.fdb_latexmk
-*.fls
*.log
-*.out
-*.synctex.gz
.SRCINFO
diff --git a/Makefile b/Makefile
new file mode 100644
index 0000000..b3b0c33
--- /dev/null
+++ b/Makefile
@@ -0,0 +1,10 @@
+all: clean build
+
+clean:
+ rm -f urbanprah_cv.pdf
+
+build:
+ typst compile --font-path ./font urbanprah_cv.typ
+
+watch:
+ typst watch --font-path ./font urbanprah_cv.typ
diff --git a/README.md b/README.md
index 8d51dbf..83191ce 100644
--- a/README.md
+++ b/README.md
@@ -1,6 +1,6 @@
# Urban Prah - CV
-This repository contains the source to my cv. It's been rewritten in Typst and can be compiled using `typst compile --font-path ./font urbanprah.typ`. For the most part it's a modification of a LaTex template whose authors are credited below.
+This repository contains the source to my cv. It's been rewritten in Typst and can be compiled using `make`. For the most part it's a modification of a LaTex template whose authors are credited below.
##### Credits:
* jan@vorisek.me
diff --git a/template.pdf b/template.pdf
new file mode 100644
index 0000000..f66d94a
--- /dev/null
+++ b/template.pdf
Binary files differ
diff --git a/template.typ b/template.typ
index 8bc210d..8f2beee 100644
--- a/template.typ
+++ b/template.typ
@@ -2,18 +2,23 @@
#let icon_font = "Font Awesome 7 Free Solid"
#let icon_size = 10pt
+/* Building blocks */
+/********************************************************************/
+/* Font awesome icon */
#let fa(txt, size: 7pt) = text(
font: icon_font,
size: size,
txt,
)
+/* Underlined link or content if no url provided */
#let smartlink(url, content) = if url != none {
link(url, underline(offset: 1.5pt, content))
} else {
content
}
+/* Inverted box */
#let inv_box(content, size: 10pt, bold: true, capital: true) = box(
fill: black,
inset: 3pt,
@@ -25,13 +30,24 @@
),
)
-#let job(title, location) = stack(
+/* Date subtext in experience */
+#let date_tag(tag) = if tag != "" {
+ v(-0.2em)
+ text(size: 8pt)[#raw(tag)]
+}
+
+
+/* Document parts */
+/********************************************************************/
+/* Active jobs under author name */
+#let active_job(title, location) = stack(
dir: ttb,
spacing: 0.5em,
strong(title),
location,
)
+/* Icons in top right */
#let iconlink(icon, label) = grid(
columns: (auto, auto),
column-gutter: 0.5em,
@@ -52,17 +68,56 @@
text(size: 9pt, label)
)
+/* Labeled percent bar */
#let skillbar(title, percent) = (
// Use array so alignment can be determined in parrent
inv_box(title, size: 9pt, bold: false, capital: false),
line(length: percent, stroke: 10pt),
)
+/* Labeled percent circles */
#let skillbubble(title, percent) = (
circle(fill: black, radius: percent * 2.5em),
text(title),
)
+/* Experience entry */
+#let experience(date, title, location, description, skills: (), tag: "") = block(
+ breakable: false,
+ grid(
+ columns: (8em, auto),
+ rows: (auto, auto),
+ row-gutter: 0.7em,
+ column-gutter: 1em,
+ date,
+ stack(
+ dir: ltr,
+ spacing: 1fr,
+ strong(title),
+ text(size: 8pt, weight: "bold", location),
+ ),
+ date_tag(tag), //
+ par(justify: true, description),
+ none,
+ skills
+ .map(raw)
+ .join({
+ h(1em)
+ raw("/")
+ h(1em)
+ }),
+ ),
+)
+
+/* Extra titled paragraphs */
+#let info(title, content) = {
+ inv_box(title, size: 8pt)
+ set par(justify: true)
+ set text(size: 8pt)
+ content
+}
+
+/* Work field containing experiences, education, etc. */
#let field(name, bubbles: (), experiences: (), education: (), other: ()) = {
/* Title */
heading(name)
@@ -100,45 +155,7 @@
)
}
-#let date_tag(tag) = if tag != "" {
- v(-0.2em)
- text(size: 8pt, tag)
-}
-
-#let experience(date, title, location, description, skills: (), tag: "") = block(
- breakable: false,
- grid(
- columns: (8em, auto),
- rows: (auto, auto),
- row-gutter: 0.7em,
- column-gutter: 1em,
- date,
- stack(
- dir: ltr,
- spacing: 1fr,
- strong(title),
- text(size: 8pt, weight: "bold", location),
- ),
- date_tag(tag), //
- par(justify: true, description),
- none,
- skills
- .map(raw)
- .join({
- h(1em)
- raw("/")
- h(1em)
- }),
- ),
-)
-
-#let info(title, content) = {
- inv_box(title, size: 8pt)
- set par(justify: true)
- set text(size: 8pt)
- content
-}
-
+/* Main document template */
#let CV(
author: "Janez Novak",
active_jobs: (),
diff --git a/urbanprah_cv.pdf b/urbanprah_cv.pdf
index a92ca81..60d3342 100644
--- a/urbanprah_cv.pdf
+++ b/urbanprah_cv.pdf
Binary files differ
diff --git a/urbanprah_cv.typ b/urbanprah_cv.typ
index 1657ba8..f087243 100644
--- a/urbanprah_cv.typ
+++ b/urbanprah_cv.typ
@@ -1,4 +1,4 @@
-#import "template.typ": CV, job, iconlink, field, experience, info, skillbar, skillbubble, smartlink, fa
+#import "template.typ": CV, active_job, iconlink, field, experience, info, skillbar, skillbubble, smartlink, fa
#let URLS = (
gsm: "tel:+38640521816",
@@ -36,9 +36,9 @@
#CV(
author: "Urban Prah",
active_jobs: (
- job(
- "Embedded Software Developer",
- smartlink(URLS.at("leis"), "Laboratory of Electronic and Information systems, University of Maribor"),
+ active_job(
+ "Ground segment software developer",
+ smartlink(URLS.at("skylabs"), "Skylabs d.o.o"),
),
// job("Routesetter and Coach", smartlink(URLS.at("pcsb"), "Plezalni center Slovenska Bistrica")),
),
@@ -69,8 +69,15 @@
"Software development",
experiences: (
experience(
- "2023 - Present",
- "Embedded development - " + smartlink(URLS.at("sara"), "SARA"),
+ "2025 - Present",
+ tag: "full-time",
+ "Ground segment software development",
+ smartlink(URLS.at("skylabs"), "Skylabs d.o.o"),
+ "Continuing the work on the SARA project in addition to other ground-segment related tasks for TRISAT and other systems.",
+ ),
+ experience(
+ "2023 - 2025",
+ "Robotic systems development - " + smartlink(URLS.at("sara"), "SARA"),
smartlink(URLS.at("skylabs"), "Skylabs d.o.o"),
"R&D for an unmanned arachnid-shaped space vehicle based on ROS2. Developing the software responsible for remote control and autonomous locomotion. Work includes simulation, system architecture design, RISC-V embedded firmware implementation, reinforcement learning with PPO, etc.",
skills: (
@@ -84,6 +91,7 @@
"Inverse kinematics",
"PID",
"Gazebo sim",
+ "CAN",
"RISC-V",
"Python",
"C++",
@@ -239,11 +247,11 @@
),
info(
fa("") + h(0.5em) + "Other skills",
- "Apart from programming I also have intermediate knowledge of creative software for photo and video editing. I am an amateur photographer, can touch type and am an avid Neovim user with an eternal chase for a perfect workflow. Currently using NixOS to set-up a secure interconnected distributed system of personal computers and a VPS for a unified user experience. I have some experience with reverse-engineering and beginner CTF challenges.",
+ "Apart from programming I also have intermediate knowledge of creative software for photo and video editing. I am an amateur photographer, can touch type and am an avid Neovim user with an eternal chase for the perfect workflow. Currently using NixOS to set-up a secure interconnected distributed system of personal computers and a VPS for a unified user experience. I have some experience with reverse-engineering and beginner CTF challenges. I'm familiar with LaTeX and Typst, the former of which was used to generate this document.",
),
info(
fa("") + h(0.5em) + "Hobbies",
- "In my limited free time I like to tinker with microelectronics and tackle random DIY projects like setting up a Raspberry Pi based home entertainment system, a custom smart watch. I like photography, HiFi audio, reading, open source software and philosophy. I used to also help with the local firefighter team. I always wanted to get better at 3D printing and chess.",
+ "In my limited free time I like to tinker with microelectronics and tackle random DIY projects like setting up a Raspberry Pi based home entertainment system or a custom smart watch. I like photography, HiFi audio, reading, open source software and philosophy. I also used to help with the local firefighter team. I always wanted to get better at 3D printing and chess.",
),
),
),