Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
21 changes: 21 additions & 0 deletions packages/preview/breezy-report/0.1.0/LICENSE
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
MIT License

Copyright (c) 2026 Breanna Barraclough

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.
48 changes: 48 additions & 0 deletions packages/preview/breezy-report/0.1.0/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,48 @@
# breezy-report

A clean, colour-customisable engineering report template for Typst. Designed for university assignment submissions. The submission date is auto-populated, but can be overridden.

## Usage

```typst
#import "@preview/breezy-report:0.1.0": breezy, end-breezy

#show: breezy.with(
semester: "Semester 1 2026",
courseCode: "ENGE500",
courseName: "Engineering Mathematics I",
title: "My Report: With an extended title",
studentID: "12345678",
author: "Jane Smith",
accentColour: rgb("#300649"),
)

//Your content goes here

//If you need to include references, add the following after the rest of your body. The end-breezy function removes the top bar from appearing on the reference pages.

#end-breezy()
#pagebreak()
#bibliography("ref.bib", style: "ieee", title: "References")
```

## Parameters

| Parameter | Default | Description |
|---|---|---|
| `accentColour` | `rgb("#300649")` | Primary accent colour |
| `tableHeaderTextColour` | `white` | Table header text colour |
| `date` | datetime.today() | Date for the title page. Override with `date: datetime(day: #, month: #, year: ####)`|


## Default fonts
- **Georgia**: Body text.
- **Montserrat**: Headings and title page. Must be installed locally - download from [Google Fonts](https://fonts.google.com/specimen/Montserrat).
- **Arial**. Fallback font for headings & title page is Montserrat is not installed.

## Example pages
![An example title page from the breezy-report template with dark purple bars across the top and bottom of the page, with the student name, ID, course name and course ID overlayed. The title is in the centre of the page.](imgs/1.png)

![An example contents page from the breezy-report template.](imgs/2.png)

![An example page from the breezy-report template. A dark purple bar is the page header with the course ID and assignment title on the left, the student ID on the right. List items, the headings, and the table headers are coloured in the accent colour of dark purple. Code block has a light purple background with slightly rounded corners.](imgs/3.png)
Binary file added packages/preview/breezy-report/0.1.0/imgs/1.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added packages/preview/breezy-report/0.1.0/imgs/2.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added packages/preview/breezy-report/0.1.0/imgs/3.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
222 changes: 222 additions & 0 deletions packages/preview/breezy-report/0.1.0/template.typ
Original file line number Diff line number Diff line change
@@ -0,0 +1,222 @@
// breezy-report: A clean colour-customisable engineering report template
// Author: Breanna Barraclough
// License: MIT-0

#let in-body = state("in-body", false)

#let end-breezy(bib-file: none) = {
in-body.update(false)
}
#let breezy(
semester: "Semester 1, 20##",
date: datetime.today(),
course-code: "ENGE500",
course-name: "Course Name",
title:"Report Title: The purpose of the report",
student-id:"########",
author:"Author Name",
accent-colour:rgb("#300649"),
table-header-text-colour:white,
report
) = [
#let headingFont = ("Montserrat","Arial")

#let secondaryColour = accent-colour.lighten(20%)

#set par(leading: 0.75em, spacing: 1.2em)

#show heading: it => block(
above:1.5em,
below:1em,
text(font: headingFont,fill:accent-colour,it)
)

#set heading(
numbering: "1.",
)

#show raw.where(block:true): it => block(
fill: accent-colour.lighten(90%),
inset:12pt,
radius:3pt,
width:100%,
text(fill:luma(15%),it)
)

#set text(font:"Georgia")
#set line(length:100%)

#set list(
marker: (
[#text(fill: accent-colour)[•]],
[#text(fill: accent-colour)[‣]],
[#text(fill: accent-colour)[–]]
)
)


//Colours all supplements to the accent colour
#show figure.caption: it => [
#text(fill: accent-colour)[#it.supplement #it.counter.display(it.numbering)]#it.separator#it.body
]

#show ref: it => text(fill: accent-colour, it)
#show cite: it => text(fill: accent-colour, it)

#show link: it => text(fill:accent-colour,it)

// Provide custom supplements for each figure type
#show figure.where(kind: image): set figure(supplement: [Fig.])
#show figure.where(kind: table): set figure(supplement: [Tab.])
#set math.equation(numbering: "(1)", supplement: [Eq.])
#show figure.where(kind: "code"): set figure(supplement: [Snip.])

// Custom table settings where the heading is bold, white, serif font. Table has dark gray borders and left-aligned text.
#show table.cell.where(y: 0): set text(
weight: "bold",
font:headingFont,
fill: table-header-text-colour
)
#set table(
stroke:0.5pt + accent-colour.lighten(50%),
fill: (x,y) => {
if y == 0 {accent-colour}
},
inset:5pt,
align:left
)

// Page settings

#set page(
paper: "a4",
margin: (top: 2.5cm, bottom: 2.5cm, left: 2cm, right: 2cm),

// Header design, applied to all but first page
header: context {
if (in-body.get()){
[
#place(
top + left,
dx: -2cm,
dy: 0pt,
block(
width: 100% + 4.1cm,
height: 1.75cm,
fill: accent-colour
)
)
#set text(fill: accent-colour.lighten(90%))
#align(horizon)[
#grid(
columns: (1fr, auto),
[
#course-code
#{ let parts = title.split(":")
parts.at(0)
}
],
[
ID: #student-id
]
)
]
]
} else { [] }
},
)

// Cover page

#place(
top+left,
dx:-2cm,
dy:-2.5cm,
block(
width:100% + 4.1cm,
height:6cm,
fill:accent-colour,
inset:(x:2.5cm,y:1.5cm),
align(bottom)[
#text(size:20pt,weight:"bold",font:headingFont,fill:white)[#course-name]
#v(-0.5em)
#text(size:14pt,weight:"bold",font:headingFont,fill:accent-colour.lighten(70%))[#course-code]
]
)
)

#align(center + horizon)[
#text(size:12pt,font:headingFont,fill:accent-colour.lighten(25%))[#semester]
#v(1em)
#text(size:28pt,font:headingFont,fill:accent-colour,weight:"bold")[#title]
#v(0.5em)
#line(length:40%,stroke:accent-colour.lighten(60%))
]

#place(
bottom+left,
dx:-2cm,
dy:2.5cm,
block(
width:100% + 4.1cm,
height:3.5cm,
fill:accent-colour,
inset:(x:2.5cm,y:1cm),
align(horizon)[
#grid(
columns:(1fr,auto),
align:horizon,
[
#text(size:14pt,font:headingFont,fill:white,weight:"bold")[#author]
#v(-0.5em)
#text(size:11pt,font:headingFont,fill:accent-colour.lighten(70%))[Student ID: #student-id]
],
[
#text(size:11pt,font:headingFont,fill:accent-colour.lighten(94%))[ *Submission date:* \
#date.display("[day]/[month]/[year]")]
]
)
]
)

)

#pagebreak()

// Create page number in footer, removing title page from the count

#counter(page).update(1)
#set page(
footer: context{
align(center,
text(fill:accent-colour)[-- #counter(page).get().first() --]
)
},
)

#outline()

// Only display the table of contents for tables, figures if there are any

#context{

if counter(figure.where(kind:image)).final().at(0) > 0 {
outline(
title:"List of Figures",
target: figure.where(kind:image)
)
}

if counter(figure.where(kind:table)).final().at(0) > 0 {
outline(
title:"List of Tables",
target: figure.where(kind:table)
)
}
}

#in-body.update(true)

#pagebreak()
#report
]
52 changes: 52 additions & 0 deletions packages/preview/breezy-report/0.1.0/template/main.typ
Original file line number Diff line number Diff line change
@@ -0,0 +1,52 @@
#import "@preview/breezy-report:0.1.0": breezy, end-breezy

#show: breezy.with(
semester:"Semester 1 2026",
course-code: "ENGE500",
course-name: "Course Name",
title: "Report Title: The purpose of the report",
student-id: "12345678",
author: "Student Name",
)

= Section
#lorem(40)
- List item 1
- List item 2
- List item sub 1
- List item sub 2
- List item 3

#lorem(20)

== Subsection
#lorem(60)
#figure(
table(
columns:(1fr,1fr),
[Heading 1],[Heading 2],
[#lorem(10)],[#lorem(5)]
),
caption:"Caption for a table."
)
= Section
#lorem(40)

```c
#int main()
{
int count = 0;

while (1)
{
for (int i = 0; i < 5; i++)
{
printf(count);
count++;
}
}
}

```

#end-breezy()
20 changes: 20 additions & 0 deletions packages/preview/breezy-report/0.1.0/typst.toml
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
[package]
name = "breezy-report"
version = "0.1.0"
entrypoint = "template.typ"
authors = ["Breanna Barraclough <https://github.com/brebarra>"]
license = "MIT"
description = "Clean, colour-customisable engineering report template for university submissions."
repository = "https://github.com/brebarra/breezy-report"
keywords = ["report","assignment","university"]
categories = ["report"]
exclude = [
"imgs/2.png",
"imgs/3.png"
]


[template]
path = "template"
entrypoint = "main.typ"
thumbnail = "imgs/1.png"
Loading