refactor: Rebuild site completely with hugo
Signed-off-by: Christoph Heiss <christoph@c8h4.io>
This commit is contained in:
parent
3f7ff3cfad
commit
d8d80330cd
|
@ -1 +0,0 @@
|
||||||
/node_modules
|
|
1
.gitattributes
vendored
1
.gitattributes
vendored
|
@ -1 +0,0 @@
|
||||||
package-lock.json merge=binary
|
|
18
.github/workflows/build.yml
vendored
18
.github/workflows/build.yml
vendored
|
@ -7,26 +7,8 @@ on:
|
||||||
- dev
|
- dev
|
||||||
|
|
||||||
jobs:
|
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:
|
docker-image:
|
||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
needs: lint-and-build
|
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@v3
|
- uses: actions/checkout@v3
|
||||||
- uses: docker/setup-buildx-action@v2
|
- uses: docker/setup-buildx-action@v2
|
||||||
|
|
4
.gitignore
vendored
4
.gitignore
vendored
|
@ -1,2 +1,2 @@
|
||||||
node_modules/
|
public/
|
||||||
dist/
|
*.lock
|
||||||
|
|
|
@ -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"
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -1,9 +1,8 @@
|
||||||
FROM node:17-alpine AS builder
|
FROM alpine:3.17 AS builder
|
||||||
WORKDIR /app
|
WORKDIR /app
|
||||||
RUN apk add --no-cache libc6-compat
|
|
||||||
|
|
||||||
COPY . .
|
COPY . .
|
||||||
RUN npm clean-install && npm run build
|
RUN apk add --no-cache hugo && hugo --minify
|
||||||
|
|
||||||
FROM nginx:1.23-alpine AS runner
|
FROM nginx:1.23-alpine AS runner
|
||||||
|
|
||||||
|
@ -26,4 +25,4 @@ server {\
|
||||||
}\
|
}\
|
||||||
' >/etc/nginx/conf.d/default.conf
|
' >/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
6
archetypes/default.md
Normal file
|
@ -0,0 +1,6 @@
|
||||||
|
---
|
||||||
|
title: "{{ replace .Name "-" " " | title }}"
|
||||||
|
date: {{ .Date }}
|
||||||
|
draft: true
|
||||||
|
---
|
||||||
|
|
5
config.yml
Normal file
5
config.yml
Normal 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
75
content/_index.md
Normal 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 >}}.
|
||||||
|
|
75
gulpfile.js
75
gulpfile.js
|
@ -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);
|
|
13
layouts/shortcodes/extlink.html
Normal file
13
layouts/shortcodes/extlink.html
Normal 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
14813
package-lock.json
generated
File diff suppressed because it is too large
Load diff
40
package.json
40
package.json
|
@ -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"
|
|
||||||
}
|
|
|
@ -1,2 +0,0 @@
|
||||||
User-Agent: *
|
|
||||||
Allow: /
|
|
|
@ -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; }
|
|
@ -0,0 +1 @@
|
||||||
|
{"Target":"css/main.css","MediaType":"text/css","Data":{}}
|
|
@ -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}
|
|
@ -0,0 +1 @@
|
||||||
|
{"Target":"css/main.min.css","MediaType":"text/css","Data":{}}
|
|
@ -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; } }
|
|
@ -0,0 +1 @@
|
||||||
|
{"Target":"css/main.css","MediaType":"text/css","Data":{}}
|
|
@ -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; } }
|
|
@ -0,0 +1 @@
|
||||||
|
{"Target":"scss/main.css","MediaType":"text/css","Data":{}}
|
37
src/app.scss
37
src/app.scss
|
@ -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;
|
|
||||||
}
|
|
166
src/index.html
166
src/index.html
|
@ -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>
|
|
||||||
© Christoph Heiss 2022.
|
|
||||||
</footer>
|
|
||||||
</body>
|
|
||||||
</html>
|
|
116
src/sp.css
116
src/sp.css
|
@ -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;
|
|
||||||
}
|
|
||||||
}
|
|
2
themes/hacker/archetypes/default.md
Normal file
2
themes/hacker/archetypes/default.md
Normal file
|
@ -0,0 +1,2 @@
|
||||||
|
+++
|
||||||
|
+++
|
70
themes/hacker/assets/scss/main.scss
Normal file
70
themes/hacker/assets/scss/main.scss
Normal 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;
|
||||||
|
}
|
||||||
|
}
|
9
themes/hacker/layouts/_default/baseof.html
Normal file
9
themes/hacker/layouts/_default/baseof.html
Normal 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>
|
0
themes/hacker/layouts/_default/list.html
Normal file
0
themes/hacker/layouts/_default/list.html
Normal file
3
themes/hacker/layouts/_default/single.html
Normal file
3
themes/hacker/layouts/_default/single.html
Normal file
|
@ -0,0 +1,3 @@
|
||||||
|
<main>
|
||||||
|
{{ .Content }}
|
||||||
|
</main>
|
0
themes/hacker/layouts/_default/taxonomy.html
Normal file
0
themes/hacker/layouts/_default/taxonomy.html
Normal file
5
themes/hacker/layouts/index.html
Normal file
5
themes/hacker/layouts/index.html
Normal file
|
@ -0,0 +1,5 @@
|
||||||
|
{{ define "main" }}
|
||||||
|
<main>
|
||||||
|
{{ .Content }}
|
||||||
|
</main>
|
||||||
|
{{ end }}
|
3
themes/hacker/layouts/partials/footer.html
Normal file
3
themes/hacker/layouts/partials/footer.html
Normal file
|
@ -0,0 +1,3 @@
|
||||||
|
<footer>
|
||||||
|
© Christoph Heiss 2022.
|
||||||
|
</footer>
|
20
themes/hacker/layouts/partials/head.html
Normal file
20
themes/hacker/layouts/partials/head.html
Normal 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>
|
5
themes/hacker/layouts/partials/header.html
Normal file
5
themes/hacker/layouts/partials/header.html
Normal 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
7
themes/hacker/theme.yml
Normal 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
|
Loading…
Reference in a new issue