refactor: Rebuild site completely with hugo

Signed-off-by: Christoph Heiss <christoph@c8h4.io>
This commit is contained in:
Christoph Heiss 2022-12-10 01:55:38 +01:00
parent 3f7ff3cfad
commit d8d80330cd
Signed by: c8h4
GPG key ID: 6817E9C75C0785D7
36 changed files with 346 additions and 15284 deletions

View file

@ -1 +0,0 @@
/node_modules

1
.gitattributes vendored
View file

@ -1 +0,0 @@
package-lock.json merge=binary

View file

@ -7,26 +7,8 @@ on:
- dev
jobs:
lint-and-build:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- uses: actions/setup-node@v3
with:
node-version: 17
- uses: actions/cache@v3
id: cache-node-modules
with:
key: node-modules-${{ runner.os }}-${{ hashFiles('package-lock.json') }}
path: node_modules
- if: steps.cache-node-modules.outputs.cache-hit != 'true'
run: npm clean-install
- run: npm run lint:scss
- run: npm run build
docker-image:
runs-on: ubuntu-latest
needs: lint-and-build
steps:
- uses: actions/checkout@v3
- uses: docker/setup-buildx-action@v2

4
.gitignore vendored
View file

@ -1,2 +1,2 @@
node_modules/
dist/
public/
*.lock

View file

@ -1,9 +0,0 @@
{
"extends": "stylelint-config-standard-scss",
"rules": {
"declaration-empty-line-before": "never",
"scss/dollar-variable-colon-space-before": null,
"selector-class-pattern": "[a-z][a-zA-Z0-9]+",
"string-quotes": "single"
}
}

View file

@ -1,9 +1,8 @@
FROM node:17-alpine AS builder
FROM alpine:3.17 AS builder
WORKDIR /app
RUN apk add --no-cache libc6-compat
COPY . .
RUN npm clean-install && npm run build
RUN apk add --no-cache hugo && hugo --minify
FROM nginx:1.23-alpine AS runner
@ -26,4 +25,4 @@ server {\
}\
' >/etc/nginx/conf.d/default.conf
COPY --from=builder /app/dist /var/www/html
COPY --from=builder /app/public /var/www/html

6
archetypes/default.md Normal file
View file

@ -0,0 +1,6 @@
---
title: "{{ replace .Name "-" " " | title }}"
date: {{ .Date }}
draft: true
---

5
config.yml Normal file
View file

@ -0,0 +1,5 @@
baseURL: https://c8h4.io/
languageCode: en-us
title: Christoph Heiss
theme: hacker
enableRobotsTXT: true

75
content/_index.md Normal file
View file

@ -0,0 +1,75 @@
---
title: Christoph Heiss
heading: hello.
subheading: Open-source advocate. Embracing the unix philosophy.
description: Personal website of Christoph Heiss
date: 2022-12-08T14:53:30+01:00
---
## about me.
I am a 24 year old computer science student at the Technical University of Vienna, Austria.
I got a passion for embedded systems, bare-bones and low-level system programming, compiler
engineering and anything of that sort.
From time to time I also like to get into reverse-engineering some stuff.
Currently focusing primarily on x86(_64) and RISC-V.
Rust is my language of choice. Efficient in C/C++ as well.
As balance between all that I love getting caught up in devops and infrastructure management
and generally anything involving networks.
## my work.
Currently I'm part-time employed at
{{< extlink href="https://proxmox.com/" title="Proxmox Server Solutions GmbH" >}}
Proxmox
{{< /extlink >}} as software engineer.
Some useful projects I work on and maintain in my free time include:
* {{< extlink
href="https://github.com/christoph-heiss/bwtui"
title="'A terminal-based vault browser for Bitwarden' on GitHub"
>}}
bwtui
{{< /extlink >}}, a terminal client for Bitwarden.
* {{< extlink
href="https://github.com/christoph-heiss/teuthida"
title="'An in-order, 5-stage RISC-V (toy) implementation in Amaranth HDL.' on GitHub"
>}}
teuthida
{{< /extlink >}}, a [WIP] in-order 5-stage RISC-V (toy) implementation.
* {{< extlink
href="https://github.com/christoph-heiss/docker-images"
title="'Docker images for various applications without offical images.' on GitHub"
>}}
ready-to-use docker images
{{< /extlink >}} for various applications.
## contact.
I'm available via:
* Email: {{< extlink href="mailto:contact@christoph-heiss.at" rel="author" >}}contact@christoph-heiss.at{{< /extlink >}}
* GitHub: {{< extlink href="https://github.com/christoph-heiss" relAdd="me" >}}github.com/christoph-heiss{{< /extlink >}}
* Mastodon: {{< extlink href="https://fosstodon.org/@c8h4" relAdd="me" >}}@c8h4@fosstodon.org{{< /extlink >}}
You can also find me on:
* {{< extlink href="https://news.ycombinator.com/user?id=christoph-heiss" relAdd="me" >}}Hacker News{{< /extlink >}}
* {{< extlink href="https://www.linkedin.com/in/christoph-heiss" relAdd="me" >}}LinkedIn{{< /extlink >}}
PGP public key id: `73D5E7FDEE3DE49A`
PGP fingerprint: `9C56 1D64 30B2 8D6B DCBC 9CEB 73D5 E7FD EE3D E49A`
## support me.
If you like my work, you can support me on
{{< extlink
href="https://www.buymeacoffee.com/christoph.heiss"
title="Christoph Heiss on Buy Me a Coffee"
relAdd="me"
>}}
Buy Me a Coffee
{{< /extlink >}}.

View file

@ -1,75 +0,0 @@
'use strict';
const autoprefixer = require('gulp-autoprefixer');
const browserSync = require('browser-sync').create();
const concat = require('gulp-concat');
const dartSass = require('sass');
const del = require('del');
const purgecss = require('gulp-purgecss');
const gulp = require('gulp');
const gulpSass = require('gulp-sass');
const htmlmin = require('gulp-htmlmin');
const inject = require('gulp-inject');
const merge = require('merge-stream');
const sass = gulpSass(dartSass);
function cleanDist() {
return del('dist/*');
}
function buildProdCss() {
return gulp.src('src/*.scss')
.pipe(sass({outputStyle: 'compressed'}).on('error', sass.logError))
.pipe(purgecss({content: ['src/*.html']}))
.pipe(autoprefixer())
.pipe(concat('all.css'));
}
function buildProdHtml() {
return gulp.src('src/*.html')
.pipe(inject(buildProdCss(), {
transform: (path, file) => '<style>' + file.contents.toString('utf8') + '</style>',
}))
.pipe(htmlmin({
includeAutoGeneratedTags: true,
removeComments: true,
removeRedundantAttributes: true,
sortClassName: true,
collapseWhitespace: true
}))
.pipe(gulp.dest('dist/'))
}
function copyProdPublic() {
return gulp.src('public/*')
.pipe(gulp.dest('dist/'));
}
function buildDevCss() {
return gulp.src('src/*.scss')
.pipe(sass.sync().on('error', sass.logError))
.pipe(gulp.dest('dist/'));
}
function buildDevHtml() {
let css = buildDevCss();
return gulp.src('src/*.html')
.pipe(inject(css, {ignorePath: 'dist/', addRootSlash: false}))
.pipe(gulp.dest('dist/'));
}
function startDevServer() {
browserSync.init({
server: {
baseDir: 'dist',
},
files: ['dist/*.html', 'dist/*.css'],
});
gulp.watch(['src/*.html'], buildDevHtml);
gulp.watch(['src/*.scss'], buildDevCss);
};
exports.dev = gulp.series(cleanDist, buildDevCss, buildDevHtml, startDevServer);
exports.default = gulp.series(cleanDist, buildProdHtml, copyProdPublic);

View file

@ -0,0 +1,13 @@
<a
href="{{ .Get "href" }}"
{{ with .Get "title" -}} title="{{ . }}" {{- end }}
{{ with .Get "rel" -}}
rel="{{ . }}"
{{- else -}}
rel="external noreferrer {{ .Get "relAdd" }}"
{{- end }}
target="_blank"
>
{{- trim .Inner " \n" -}}
</a>
{{- /* Dummy to avoid newline after shortcode output */ -}}

14813
package-lock.json generated

File diff suppressed because it is too large Load diff

View file

@ -1,40 +0,0 @@
{
"author": "Christoph Heiss <contact@christoph-heiss.at>",
"name": "christoph-heiss.at",
"version": "1.0.0",
"description": "",
"private": true,
"repository": {
"type": "git",
"url": "git@github.com:christoph-heiss/christoph-heiss.at.git"
},
"browserslist": [
"last 3 versions",
"> 5%"
],
"devDependencies": {
"browser-sync": "^2.27.10",
"del": "^6.1.1",
"gulp": "^4.0.2",
"gulp-autoprefixer": "^8.0.0",
"gulp-cli": "^2.3.0",
"gulp-concat": "^2.6.1",
"gulp-htmlmin": "^5.0.1",
"gulp-inject": "^5.0.5",
"gulp-purgecss": "^4.1.3",
"gulp-sass": "^5.1.0",
"merge-stream": "^2.0.0",
"sass": "^1.52.2",
"stylelint": "^14.11.0",
"stylelint-config-standard-scss": "^5.0.0"
},
"engines": {
"node": ">=16"
},
"scripts": {
"dev": "gulp dev",
"build": "gulp",
"lint:scss": "stylelint src/*.scss"
},
"target": "web"
}

View file

@ -1,2 +0,0 @@
User-Agent: *
Allow: /

View file

@ -0,0 +1,25 @@
body {
font-family: monospace;
font-size: 1.3em;
max-width: 45em; }
@media only screen and (max-width: 768px) {
body {
font-size: 1em; } }
ul {
list-style-type: 'o'; }
li {
padding-left: 10px; }
footer {
border-top: 1px #fff;
float: right;
margin-top: 4em; }
a:visited {
color: #9bf; }
code {
font-size: 0.8em; }

View file

@ -0,0 +1 @@
{"Target":"css/main.css","MediaType":"text/css","Data":{}}

View file

@ -0,0 +1 @@
body{color:#333;font-family:helvetica,arial,sans-serif;line-height:1.5;margin:0 auto;max-width:40em;padding:0 1em}h1,h2,h3,h4,h5,h6{margin:1.25em 0 .5em;line-height:1.2}a:link{color:#00e}a:visited{color:#518}a:focus,a:hover{color:#03f}a:active{color:#e00}h1 a:empty:before,h2 a:empty:before,h3 a:empty:before,h4 a:empty:before,h5 a:empty:before,h6 a:empty:before{content:"#"}h1 a:empty,h2 a:empty,h3 a:empty,h4 a:empty,h5 a:empty,h6 a:empty{visibility:hidden;padding-left:.25em}h1:hover a:empty,h2:hover a:empty,h3:hover a:empty,h4:hover a:empty,h5:hover a:empty,h6:hover a:empty{visibility:visible}img{max-width:100%}figure{margin:1em 0;text-align:center}figcaption{font-size:small}pre,code,samp,kbd{color:#009;font-family:monospace,monospace}pre kbd{color:#060}pre,blockquote{background:#eee;padding:.5em}pre{overflow:auto}blockquote{border-left:solid #ccc;margin:1em 0}blockquote :first-child{margin-top:0}blockquote :last-child{margin-bottom:0}table{border-collapse:collapse}th,td{border:thin solid #999;padding:.3em .4em;text-align:left}@media(prefers-color-scheme:dark){body{background:#111;color:#bbb}a:link{color:#9bf}a:visited{color:#caf}a:focus,a:hover{color:#9cf}a:active{color:#faa}pre,code,samp,kbd{color:#6cf}pre kbd{color:#9c6}pre,blockquote{background:#000}blockquote{border-color:#333}th,td{border-color:#666}}body{font-family:monospace;font-size:1.3em;max-width:45em}@media only screen and (max-width:768px){body{font-size:1em}}ul{list-style-type:'*'}li{padding-left:10px}footer{border-top:1px #fff;float:right;margin-top:4em}a:visited{color:#9bf}code{font-size:.8em}

View file

@ -0,0 +1 @@
{"Target":"css/main.min.css","MediaType":"text/css","Data":{}}

View file

@ -0,0 +1,37 @@
body {
color: #333;
font-family: monospace;
font-size: 1.3em;
max-width: 45em;
margin: 0 auto;
line-height: 1.5; }
@media only screen and (max-width: 768px) {
body {
font-size: 1em; } }
h1 {
margin: 1.25em 0 .5em 0;
line-height: 1.2; }
ul {
list-style-type: '*'; }
li {
padding-left: 10px; }
footer {
border-top: 1px #fff;
float: right;
margin-top: 4em; }
a:visited {
color: #9bf; }
code {
font-size: 0.8em; }
@media (prefers-color-scheme: dark) {
body {
background-color: #111;
color: #bbb; } }

View file

@ -0,0 +1 @@
{"Target":"css/main.css","MediaType":"text/css","Data":{}}

View file

@ -0,0 +1,51 @@
body {
color: #333;
font-family: monospace;
font-size: 1.3em;
max-width: 45em;
margin: 0 auto;
padding: 0 1em;
line-height: 1.5; }
@media only screen and (max-width: 768px) {
body {
font-size: 1em; } }
h1, h2 {
line-height: 1.2; }
h1 {
margin: 1.25em 0 0 0; }
h2 {
margin: 1.25em 0 .5em 0; }
ul {
list-style-type: '*'; }
li {
padding-left: 10px; }
footer {
border-top: 1px #fff;
margin-top: 2.5em;
float: right; }
a {
color: #3b82f6; }
a:visited, a:link {
color: #3b82f6; }
code {
font-family: monospace, monospace;
font-size: 0.8em;
color: #1e40af; }
@media (prefers-color-scheme: dark) {
body {
background-color: #111;
color: #bbb; }
a:visited, a:link {
color: #9bf; }
code {
color: #6cf; } }

View file

@ -0,0 +1 @@
{"Target":"scss/main.css","MediaType":"text/css","Data":{}}

View file

@ -1,37 +0,0 @@
@import 'sp';
$white: #fff;
body {
font-family: monospace;
font-size: 1.3em;
max-width: 45em;
}
@media only screen and (max-width: 768px) {
body {
font-size: 1em;
}
}
ul {
list-style-type: '*';
}
li {
padding-left: 10px;
}
footer {
border-top: 1px $white;
float: right;
margin-top: 4em;
}
a:visited {
color: #9bf;
}
code {
font-size: 0.8em;
}

View file

@ -1,166 +0,0 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<meta name="language" content="english">
<meta name="author" content="Christoph Heiss">
<meta name="keywords" content="Christoph Heiss,c8h4,c8h4.io,personal,website,github,code,developer,hardware,software,postgresql,cybertec">
<meta name="city" content="Vienna">
<meta name="country" content="Austria">
<meta name="description" content="Personal website of Christoph Heiss">
<meta property="og:url" content="https://christoph-heiss.at">
<meta property="og:site_name" content="Christoph Heiss">
<meta property="og:title" content="Christoph Heiss">
<meta property="og:description" content="Personal website of Christoph Heiss">
<meta property="twitter:card" content="summary">
<meta property="twitter:site" content="@christophheiss">
<meta property="twitter:title" content="Christoph Heiss">
<meta property="twitter:creator" content="christophheiss">
<meta property="twitter:description" content="Personal website of Christoph Heiss">
<title>Christoph Heiss</title>
<!-- inject:css -->
<!-- endinject -->
</head>
<body>
<header>
<h1>hello.</h1>
<hr>
Open-source advocate. Embracing the unix philosophy.
</header>
<main>
<section>
<h2>about me.</h2>
<p>
I am a 24 year old computer science student at the Technical University of Vienna, Austria.
</p>
<p>
I got a passion for embedded systems, bare-bones and low-level system programming, compiler
engineering and anything of that sort.
<br>
From time to time I also like to get into reverse-engineering some stuff.
<br>
Currently focusing primarily on x86(_64) and RISC-V.
<br>
Rust is my language of choice. Efficient in C/C++ as well.
</p>
<p>
As balance between all that I love getting caught up in devops and infrastructure management
and generally anything involving networks.
</p>
</section>
<section>
<h2>my work.</h2>
<p>
Currently I'm part-time employed at
<a href="https://www.proxmox.com"
title="Proxmox Server Solutions GmbH"
target="_blank"
rel="external">
Proxmox</a>
as software engineer.
<p>
Some useful projects I work on and maintain in my free time include:
<ul>
<li>
<a href="https://github.com/christoph-heiss/bwtui"
title="'A terminal-based vault browser for Bitwarden' on GitHub"
target="_blank"
rel="external noreferrer">
bwtui</a>, a terminal client for Bitwarden.
</li>
<li>
<a href="https://github.com/christoph-heiss/teuthida"
title="'An in-order, 5-stage RISC-V (toy) implementation in Amaranth HDL.' on GitHub"
target="_blank"
rel="external noreferrer">
teuthida</a>, a [WIP] in-order 5-stage RISC-V (toy) implementation.
</li>
<li>
<a href="https://github.com/christoph-heiss/docker-images"
title="Docker images for various applications without offical images.' on GitHub"
target="_blank"
rel="external noreferrer">
ready-to-use docker images</a> for various applications.
</li>
</ul>
</p>
</section>
<section>
<h2>contact.</h2>
<p>
I'm available via:
<ul>
<li>
Email:
<a href="mailto:contact@christoph-heiss.at" rel="author">
contact@christoph-heiss.at
</a>
</li>
<li>
GitHub:
<a href="https://github.com/christoph-heiss" target="_blank" rel="external noreferrer">
github.com/christoph-heiss
</a>
</li>
<li>
Mastodon:
<a href="https://fosstodon.org/@c8h4" target="_blank" rel="me external noreferrer">
@c8h4@fosstodon.org
</a>
</li>
</ul>
</p>
<p>
You can also find me on:
<ul>
<li>
<a href="https://news.ycombinator.com/user?id=christoph-heiss"
target="_blank"
rel="external noreferrer">
Hacker News
</a>
</li>
<li>
<a href="https://www.linkedin.com/in/christoph-heiss"
target="_blank"
rel="external noreferrer nofollow">
LinkedIn
</a>
</ul>
</p>
<p>
PGP public key id: <code>73D5E7FDEE3DE49A</code>
<br>
PGP fingerprint: <code>9C56 1D64 30B2 8D6B DCBC 9CEB 73D5 E7FD EE3D E49A</code>
</p>
</section>
<section>
<h2>support me.</h2>
If you like my work, you can support me on
<a href="https://www.buymeacoffee.com/christoph.heiss"
title="Christoph Heiss on Buy me a coffee"
target="_blank"
rel="external noreferrer">Buy me a coffee</a>.
</section>
</main>
<footer>
&copy; Christoph Heiss 2022.
</footer>
</body>
</html>

View file

@ -1,116 +0,0 @@
/*
* https://github.com/susam/spcss/blob/54f1f6d2b4fe58da6f4af2422613579e2d47d726/sp.css
* Date: 12.03.2022
*/
body {
color: #333;
font-family: helvetica, arial, sans-serif;
line-height: 1.5;
margin: 0 auto;
max-width: 40em;
padding: 0 1em;
}
h1, h2, h3, h4, h5, h6 {
margin: 1.25em 0 0.5em 0;
line-height: 1.2;
}
a:link {
color: #00e;
}
a:visited {
color: #518;
}
a:focus, a:hover {
color: #03f;
}
a:active {
color: #e00;
}
h1 a:empty:before, h2 a:empty:before, h3 a:empty:before,
h4 a:empty:before, h5 a:empty:before, h6 a:empty:before {
content: "#";
}
h1 a:empty, h2 a:empty, h3 a:empty, h4 a:empty, h5 a:empty, h6 a:empty {
visibility: hidden;
padding-left: 0.25em;
}
h1:hover a:empty, h2:hover a:empty, h3:hover a:empty,
h4:hover a:empty, h5:hover a:empty, h6:hover a:empty {
visibility: visible;
}
img {
max-width: 100%;
}
figure {
margin: 1em 0;
text-align: center;
}
figcaption {
font-size: small;
}
pre, code, samp, kbd {
color: #009;
font-family: monospace, monospace;
}
pre kbd {
color: #060;
}
pre, blockquote {
background: #eee;
padding: 0.5em;
}
pre {
overflow: auto;
}
blockquote {
border-left: medium solid #ccc;
margin: 1em 0;
}
blockquote :first-child {
margin-top: 0;
}
blockquote :last-child {
margin-bottom: 0;
}
table {
border-collapse: collapse;
}
th, td {
border: thin solid #999;
padding: 0.3em 0.4em;
text-align: left;
}
@media (prefers-color-scheme: dark) {
body {
background: #111;
color: #bbb;
}
a:link {
color: #9bf;
}
a:visited {
color: #caf;
}
a:focus, a:hover {
color: #9cf;
}
a:active {
color: #faa;
}
pre, code, samp, kbd {
color: #6cf;
}
pre kbd {
color: #9c6;
}
pre, blockquote {
background: #000;
}
blockquote {
border-color: #333;
}
th, td {
border-color: #666;
}
}

View file

@ -0,0 +1,2 @@
+++
+++

View file

@ -0,0 +1,70 @@
body {
color: #333;
font-family: monospace;
font-size: 1.3em;
max-width: 45em;
margin: 0 auto;
padding: 0 1em;
line-height: 1.5;
}
@media only screen and (max-width: 768px) {
body {
font-size: 1em;
}
}
h1, h2 {
line-height: 1.2;
}
h1 {
margin: 1.25em 0 0 0;
}
h2 {
margin: 1.25em 0 .5em 0;
}
ul {
list-style-type: '*';
}
li {
padding-left: 10px;
}
footer {
border-top: 1px #fff;
margin-top: 2.5em;
float: right;
}
a {
color: #3b82f6;
&:visited, &:link {
color: #3b82f6;
}
}
code {
font-family: monospace, monospace;
font-size: 0.8em;
color: #1e40af;
}
@media (prefers-color-scheme: dark) {
body {
background-color: #111;
color: #bbb;
}
a:visited, a:link {
color: #9bf;
}
code {
color: #6cf;
}
}

View file

@ -0,0 +1,9 @@
<!DOCTYPE html>
<html lang="en">
{{- partial "head.html" . -}}
<body>
{{- partial "header.html" . -}}
{{- block "main" . }}{{- end }}
{{- partial "footer.html" . -}}
</body>
</html>

View file

View file

@ -0,0 +1,3 @@
<main>
{{ .Content }}
</main>

View file

@ -0,0 +1,5 @@
{{ define "main" }}
<main>
{{ .Content }}
</main>
{{ end }}

View file

@ -0,0 +1,3 @@
<footer>
&copy; Christoph Heiss 2022.
</footer>

View file

@ -0,0 +1,20 @@
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<meta name="language" content="english">
<meta name="author" content="Christoph Heiss">
<meta name="keywords" content="Christoph Heiss,c8h4,c8h4.io,personal,website,git,github,code,developer,hardware,software,postgresql,proxmox">
<meta name="city" content="Vienna">
<meta name="country" content="Austria">
<meta name="description" content="{{ .Description }}">
{{ template "_internal/opengraph.html" . }}
{{ $title := print .Site.Title " | " .Title }}
{{ if .IsHome }}{{ $title = .Site.Title }}{{ end }}
<title>{{ $title }}</title>
{{ $styles := resources.Get "scss/main.scss" | toCSS }}
<style>{{ $styles.Content | safeCSS }}</style>
</head>

View file

@ -0,0 +1,5 @@
<header>
<h1>{{ with .Params.heading }}{{ . }}{{ else }}{{ .Title }}{{ end }}</h1>
<hr>
{{ with .Params.subheading }}{{ . }}{{ else }}{{ .Description }}{{ end }}
</header>

7
themes/hacker/theme.yml Normal file
View file

@ -0,0 +1,7 @@
name: Hacker
homepage: https://github.com/christoph-heiss/christoph-heiss.at
min_version: 0.41.0
author:
name: Christoph Heiss
homepage: https://c8h4.io