This commit is contained in:
nora 2024-01-21 18:12:51 +01:00
parent 5f1f9bd6a6
commit 2da77e8af5
13 changed files with 314 additions and 33 deletions

View file

@ -25,7 +25,7 @@ jobs:
uses: dtolnay/rust-toolchain@stable
- name: Build website
run: cargo run
run: cargo run build
- name: Deploy
uses: peaceiris/actions-gh-pages@v3

3
.prettierrc.json Normal file
View file

@ -0,0 +1,3 @@
{
"printWidth": 100
}

View file

@ -1,4 +1,4 @@
[slides]
talks = [
"2024-01-17-how-to-contribute-to-the-rust-project"
{ name = "How to contribute to the Rust project", location = "Rust Zürisee", date = "2024-01-17" },
]

View file

@ -16,8 +16,8 @@ pub fn build(config: &SlidesConfig, slides: &Path, dist: &Path) -> Result<()> {
utils::cp_r(&slides.join("plugin"), &dist.join("plugin")).wrap_err("copying reveal.js dist")?;
for talk in &config.talks {
let path = slides.join(talk);
let dist = dist.join(talk);
let path = slides.join(talk.dirname());
let dist = dist.join(talk.dirname());
utils::cp_r(&path, &dist).wrap_err("copying slide data")?;
}

View file

@ -5,12 +5,12 @@ use std::{fs, path::Path};
use askama::Template;
use color_eyre::{eyre::WrapErr, Result};
use crate::{utils, SlidesConfig};
use crate::{utils, SlidesConfig, Talk};
#[derive(askama::Template)]
#[template(path = "slides.html")]
struct Slides {
talks: Vec<String>,
talks: Vec<Talk>,
}
pub fn build(config: &SlidesConfig, statics: &Path, dist: &Path) -> Result<()> {

View file

@ -29,7 +29,24 @@ struct Config {
#[derive(Deserialize)]
struct SlidesConfig {
talks: Vec<String>,
talks: Vec<Talk>,
}
#[derive(Deserialize, Clone)]
struct Talk {
name: String,
date: String,
location: String,
}
impl Talk {
fn dirname(&self) -> String {
format!(
"{}-{}",
self.date,
self.name.replace(" ", "-").to_lowercase()
)
}
}
fn main() -> Result<()> {
@ -64,6 +81,7 @@ fn main() -> Result<()> {
}
fn watch(root: &'static Path) -> Result<()> {
build(root).wrap_err("initial build")?;
let (send, recv) = std::sync::mpsc::sync_channel(1);
let mut watcher = notify::recommended_watcher(move |res| match res {
Ok(_) => {

View file

@ -0,0 +1,84 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>nilstrieb.dev</title>
<link rel="stylesheet" href="static/theme.css" />
</head>
<body>
<div class="main-content">
<div class="main-content-inner">
<h1>secret back alley</h1>
<a href="/">getting out</a>
<div>
<p>
hey! psst! you might have found the secret back alley. granted, it was not very secret.
but that's the thing with back alleys, they're not really secret, yet people usually
don't go there.
</p>
<p>
so while you're here, i have some things for you. secret websites i host. you may use
them, but don't abuse them. i really mean it! or else i will be forced to move them out
of the secret back alley into my secret bunker, where you won't have access to them at
all. and you don't want that, do you?
</p>
</div>
<div>
<h2>uptime</h2>
<p>
uptime is my
<a href="https://github.com/Nilstrieb/uptime"
>personal hand-written status page website</a
>. how do you know that it's handwritten? its performance is absolutely horrible, that's
why!
</p>
<a href="https://uptime.nilstrieb.dev" class="call-to-action">
<span>uptime.nilstrieb.dev</span>
</a>
</div>
<div>
<h2>OLAT</h2>
<p>
you've ever wanted to use a
<a href="https://www.openolat.com/">professional learning platform</a> that's used by
real schools for things that may not be very appropriate on the school instance? i
kinda, uh... do, so that's why this exists.
</p>
<a href="https://olat.nilstrieb.dev" class="call-to-action">
<span>olat.nilstrieb.dev</span>
</a>
</div>
<div>
<h2>HugoChat</h2>
<p>
the <a href="https://github.com/C0RR1T/HugoChat">brilliant chat platform</a> for all
your needs.
</p>
<a href="https://hugo-chat.nilstrieb.dev" class="call-to-action">
<span>hugo-chat.nilstrieb.dev</span>
</a>
</div>
<div>
<h2>CORS</h2>
<p>
running <a href="https://github.com/nilstrieb-lehre/davinci-cors">CORS</a>, for your
creative organized relaxed school life.
</p>
<a href="https://cors-school.nilstrieb.dev/" class="call-to-action">
<span>cors-school.nilstrieb.dev</span>
</a>
</div>
<div>
<h2>cargo-bisect-rustc-service</h2>
<p>
<a href="https://github.com/Nilstrieb/cargo-bisect-rustc-service">webscale bisection</a> at your fingertips
</p>
<a href="https://bisect-rustc.nilstrieb.dev/" class="call-to-action">
<span>bisect-rustc.nilstrieb.dev</span>
</a>
</div>
</div>
</div>
</body>
</html>

View file

@ -1,18 +1,118 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>nilstrieb.dev</title>
</head>
<body>
<h1>hi!</h1>
<p>This is my website. It is work in progress.</p>
<h2>my blog</h2>
<p>I have a blog, it might be interesting, maybe.</p>
<a href="/blog">blog</a>
<h2>slides</h2>
<p>i have given one talk, here are its slides, isnt this amazing</p>
<a href="/slides/index.html">slides from talks</a>
</body>
<link rel="stylesheet" href="static/theme.css" />
<style>
.secret {
color: #5b4561;
cursor: pointer;
}
.social-logo {
height: 50px;
}
.ferrisuwu {
z-index: 1;
position: absolute;
right: -100px;
bottom: 0;
}
.ferrisuwu-animate {
animation-iteration-count: 1;
animation-name: ferrisuwu-enter;
animation-duration: 3s;
}
@keyframes ferrisuwu-enter {
from {
right: -100px;
}
50% {
right: 50px;
}
to {
right: -100px;
}
}
</style>
</head>
<body>
<div class="main-content">
<div class="main-content-inner">
<h1>Nilstrieb's website</h1>
<div>
<p>
this is my website. you'll find lots of interesting and not very interesting stuff here,
depending on where you look.
</p>
<p>
there may be many
<span onclick="onSecretClick()" class="secret" role="button">secrets</span>
depending on where you look....
</p>
</div>
<div>
<h2>socials</h2>
<p>
these two are not everything, but you may find more there, like a choose your own
adventure story: choose your own nils
</p>
<a href="https://github.com/Nilstrieb"
><img class="social-logo" alt="GitHub" src="static/github.svg"
/></a>
<a href="https://hachyderm.io/@nilstrieb"
><img class="social-logo" alt="Mastodon" src="static/mastodon.png"
/></a>
</div>
<div>
<h2>my blog</h2>
<p>i have a blog, it might be interesting, maybe.</p>
<a href="/blog" class="call-to-action">
<span>blog</span>
</a>
</div>
<div>
<h2>slides</h2>
<p>i have given one talk, here are its slides, isnt this amazing</p>
<a href="/slides/index.html" class="call-to-action">
<span>slides from talks</span>
</a>
</div>
<div>
<h2>random projects</h2>
<p>
in addition to all the other stuff mentioned above, i also have some random projects
hosted on my server. they are pretty bad and i won't promote them this openly, but you
will be able to find them if you *really* want to.
</p>
</div>
</div>
</div>
<div>
<img id="ferrisuwu" class="ferrisuwu" src="static/ferrisuwu.webp" />
</div>
<script>
let clickCount = 0;
let ferrisuwuAnimating = false;
function onSecretClick() {
clickCount++;
if (clickCount > 3 && !ferrisuwuAnimating) {
const ferrisuwu = document.getElementById("ferrisuwu");
ferrisuwu.classList.add("ferrisuwu-animate");
ferrisuwuAnimating = true;
setTimeout(() => {
ferrisuwu.classList.remove("ferrisuwu-animate");
ferrisuwuAnimating = false;
}, 3000);
}
}
</script>
</body>
</html>

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.2 KiB

View file

@ -0,0 +1,3 @@
<svg height="32" viewBox="0 0 16 16" version="1.1" width="32" xmlns="http://www.w3.org/2000/svg">
<path d="M8 0c4.42 0 8 3.58 8 8a8.013 8.013 0 0 1-5.45 7.59c-.4.08-.55-.17-.55-.38 0-.27.01-1.13.01-2.2 0-.75-.25-1.23-.54-1.48 1.78-.2 3.65-.88 3.65-3.95 0-.88-.31-1.59-.82-2.15.08-.2.36-1.02-.08-2.12 0 0-.67-.22-2.2.82-.64-.18-1.32-.27-2-.27-.68 0-1.36.09-2 .27-1.53-1.03-2.2-.82-2.2-.82-.44 1.1-.16 1.92-.08 2.12-.51.56-.82 1.28-.82 2.15 0 3.06 1.86 3.75 3.64 3.95-.23.2-.44.55-.51 1.07-.46.21-1.61.55-2.33-.66-.15-.24-.6-.83-1.23-.82-.67.01-.27.38.01.53.34.19.73.9.82 1.13.16.45.68 1.31 2.69.94 0 .67.01 1.3.01 1.49 0 .21-.15.45-.55.38A7.995 7.995 0 0 1 0 8c0-4.42 3.58-8 8-8Z"></path>
</svg>

After

Width:  |  Height:  |  Size: 700 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 26 KiB

View file

@ -0,0 +1,65 @@
body {
font-family: Verdana, sans-serif;
background-color: #e6dae9;
color: #1b191c;
overflow-x: hidden;
}
.main-content {
display: flex;
flex-direction: column;
align-items: center;
}
@media (min-width: 700px) {
.main-content-inner {
width: 70vw;
}
}
@media (min-width: 1200px) {
.main-content-inner {
width: 50vw;
}
}
.call-to-action {
width: 400px;
height: 50px;
background-color: #8c499d;
display: flex;
justify-content: center;
align-items: center;
cursor: pointer;
text-decoration: none;
}
.call-to-action:hover {
background-color: #ac78b8;
}
.call-to-action * {
color: white;
}
@media (prefers-color-scheme: light) {
body {
background-color: #e6dae9;
color: #1b191c;
}
.secret {
color: #5b4561;
}
}
@media (prefers-color-scheme: dark) {
body {
background-color: #1b191c;
color: #e6dae9;
}
.secret {
color: #a081a9;
}
}

View file

@ -1,17 +1,25 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<link rel="stylesheet" href="/static/theme.css" />
<title>Slides</title>
</head>
<body>
<h1>Slides</h1>
<p>Talks I have given with slides available:</p>
<div>
</head>
<body>
<div class="main-content">
<div class="main-content-inner">
<h1>slides</h1>
<p>slides from talks that i have given</p>
{% for talk in talks %}
<a href="{{ talk }}">{{ talk }}</a>
<div>
<h2>{{ talk.date }} - {{ talk.name }}</h2>
<p>{{ talk.location }}</p>
<a href="{{ talk.dirname() }}">{{ talk.dirname() }}</a>
</div>
{% endfor %}
</div>
</div>
</body>
</body>
</html>