commit 3ccf37efd631625fe0cb60ca28a4a521a091c1bc
Author: Leah (ctucx) <git@ctu.cx>
Date: Fri, 4 Aug 2023 15:03:10 +0200
Author: Leah (ctucx) <git@ctu.cx>
Date: Fri, 4 Aug 2023 15:03:10 +0200
initial commit
13 files changed, 597 insertions(+), 0 deletions(-)
A
|
134
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
A
|
109
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
A
|
109
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
diff --git a/Makefile b/Makefile @@ -0,0 +1,41 @@ +PREFIX ?= ./public +tmpdir ?= /tmp +all = $(addprefix ${PREFIX}/, $(addsuffix .html, $(basename $(wildcard *.md)))) +files = $(addprefix ${PREFIX}/, gpg_pubkey.asc ssh_pubkey.asc $(wildcard assets/*)) + +install: ${all} ${files} + +show: + @echo ${all} + @echo ${static} + +${PREFIX}: + mkdir -p ${PREFIX} + +${PREFIX}/assets: + mkdir -p ${PREFIX}/assets + +${PREFIX}/%.html: %.md template.html ${PREFIX} + pandoc --standalone --template template.html $< -o $@ + +${PREFIX}/gpg_pubkey.asc: files/gpg_pubkey.asc + cp files/gpg_pubkey.asc ${PREFIX}/gpg_pubkey.asc + +${PREFIX}/ssh_pubkey.asc: files/ssh_pubkey.asc + cp files/ssh_pubkey.asc ${PREFIX}/ssh_pubkey.asc + +${PREFIX}/assets/%: assets/% ${PREFIX}/assets + cp $< $@ + +${PREFIX}/%: ${tmpdir}/% ${PREFIX} + cp $< $@ + +clean: + rm -r ${PREFIX} ${tmpdir} + +start: ${all} + { php -S 127.0.0.1:8123 -t ${PREFIX} & \ + echo $$! > ${tmpdir}/php.pid; } + +stop: + kill `cat ${tmpdir}/php.pid`
diff --git a/assets/avatar.jpg b/assets/avatar.jpg Binary files differ.
diff --git a/assets/style.css b/assets/style.css @@ -0,0 +1,134 @@ +@media screen { + :root { + color-scheme: normal; + --body-background: white; + --body-color: black; + --header-color: black; + --pre-background: #ddd; + --pre-color: #212529; + --link-color: black; + --nav-active-background: #ccc; + --nav-active-color: #777; + --nav-color: #777; + } +} + +@media screen and (prefers-color-scheme: dark) { + :root { + color-scheme: dark; + --body-background: #222; + --body-color: #9e9e9e; + --header-color: #9e9e9e; + --pre-background: #333; + --pre-color: #fff; + --link-color: #87ab63; + --nav-active-background: #87ab63; + --nav-active-color: #222; + --nav-color: #9e9e9e; + } +} + + +* { + font-family: monospace; + line-height: 1.25; +} + +*, ::after, ::before { + box-sizing: border-box; +} + +body { + margin: 0 auto; + max-width: 800px; + background: var(--body-background); + color: var(--body-color); +} + +a { + color: var(--link-color); + text-decoration: none; +} + +a:hover { + text-decoration: underline; +} + +header { + margin: 10px; +} + +header h1 { + color: var(--header-color); + font-size: 2em; + font-weight: bold; + margin-bottom: 0; +} + +header p { + color: #777; + margin-top: 0; +} + +nav { + margin-top: 2em; + padding: 0px 1em; + vertical-align: bottom; +} + +nav a { + color: var(--nav-color); + text-decoration: none; + padding: 2px 0.75em; + font-size: 110%; +} + +nav a.active { + color: var(--nav-active-color); + background: var(--nav-active-background); +} + +nav a.right { + float: right; +} + +main { + padding: 1em; +} + +main { + padding: 2em; + text-align: center; +} + +main ul h2 { + margin: .3em 0; +} + +main ul { + display: grid; + grid-template-columns: auto; + grid-gap: 1em; + text-align: center; + list-style: none; + padding: 0; +} + +.avatar { + margin-left: auto; + margin-right: auto; + border-radius: 100%; +} + +@media (min-width: 600px) { + main ul { + grid-template-columns: repeat(3, minmax(0, 1fr)); + } +} + +footer { + margin-top: 0; + text-align: center; + font-size: 1em; + color: #ccc; +}
diff --git a/contact.md b/contact.md @@ -0,0 +1,22 @@ +--- +title: ctucx.homepage +subtitle: +page-contact: true +--- + +# Contact + +You can contact me via one of these platforms: + +- ## Fediverse + [@leah@ctu.cx](https://fedi.ctu.cx/@leah) +- ## Matrix + [\@leah:ctu.cx](https://matrix.to/#/@leah:ctu.cx) +- ## Email + [leah@ctu.cx](mailto:leah@ctu.cx) + +<br> + +If you wish to encrypt your messages using PGP, use the key with the following fingerprint 🔒: +<br> +[Leah Thein (A1DC EE59 A6F5 F711 804B 4E9D F271 FB37 6E7C 5880)](gpg_pubkey.asc)
diff --git a/develop.sh b/develop.sh @@ -0,0 +1,19 @@ +#!/usr/bin/env bash + +cd "$(dirname "$0")" + +make +make start +trap "make stop;" EXIT + +inotifywait -qrm -e modify -e create -e move -e delete --format '%w%f' $PWD | grep --line-buffered -v 'public\|.swp$\|~$' | ( + while true + do + timeout 1 cat /dev/stdin | sort -u + done | \ + while read l + do + echo files changed: $l + make + done +)
diff --git a/files/gpg_pubkey.asc b/files/gpg_pubkey.asc @@ -0,0 +1,109 @@ +-----BEGIN PGP PUBLIC KEY BLOCK----- + +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 +=RgL/ +-----END PGP PUBLIC KEY BLOCK-----
diff --git a/files/ssh_pubkey.asc b/files/ssh_pubkey.asc @@ -0,0 +1,109 @@ +-----BEGIN PGP PUBLIC KEY BLOCK----- + +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 +=moud +-----END PGP PUBLIC KEY BLOCK-----
diff --git a/flake.lock b/flake.lock @@ -0,0 +1,61 @@ +{ + "nodes": { + "flake-utils": { + "inputs": { + "systems": "systems" + }, + "locked": { + "lastModified": 1689068808, + "narHash": "sha256-6ixXo3wt24N/melDWjq70UuHQLxGV8jZvooRanIHXw0=", + "owner": "numtide", + "repo": "flake-utils", + "rev": "919d646de7be200f3bf08cb76ae1f09402b6f9b4", + "type": "github" + }, + "original": { + "owner": "numtide", + "repo": "flake-utils", + "type": "github" + } + }, + "nixpkgs": { + "locked": { + "lastModified": 1690927903, + "narHash": "sha256-D5gCaCROnjEKDOel//8TO/pOP87pAEtT0uT8X+0Bj/U=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "bd836ac5e5a7358dea73cb74a013ca32864ccb86", + "type": "github" + }, + "original": { + "owner": "NixOS", + "ref": "nixos-23.05", + "repo": "nixpkgs", + "type": "github" + } + }, + "root": { + "inputs": { + "flake-utils": "flake-utils", + "nixpkgs": "nixpkgs" + } + }, + "systems": { + "locked": { + "lastModified": 1681028828, + "narHash": "sha256-Vy1rq5AaRuLzOxct8nz4T6wlgyUR7zLU309k9mBC768=", + "owner": "nix-systems", + "repo": "default", + "rev": "da67096a3b9bf56a91d16901293e51ba5b49a27e", + "type": "github" + }, + "original": { + "owner": "nix-systems", + "repo": "default", + "type": "github" + } + } + }, + "root": "root", + "version": 7 +}
diff --git a/flake.nix b/flake.nix @@ -0,0 +1,37 @@ +{ + description = "ctucx.website"; + + inputs = { + flake-utils.url = "github:numtide/flake-utils"; + nixpkgs.url = "github:NixOS/nixpkgs/nixos-23.05"; + }; + + outputs = { self, nixpkgs, flake-utils }: { + + overlay = final: prev: { + + ctucx-website = final.stdenv.mkDerivation rec { + name = "ctucx-homepage"; + src = self; + + makeFlags = [ "PREFIX=$(out)" ]; + + buildInputs = [ final.pandoc ]; + }; + + }; + + } // (flake-utils.lib.eachDefaultSystem (system: + let + pkgs = import nixpkgs { + inherit system; + overlays = [ self.overlay ]; + }; + + in rec { + + packages.default = pkgs.ctucx-website; + packages.ctucx-website = pkgs.ctucx-website; + + })); +}+ \ No newline at end of file
diff --git a/index.md b/index.md @@ -0,0 +1,11 @@ +--- +title: ctucx.homepage +subtitle: +page-about: true +--- + +<img class="avatar" width="30%" src="assets/avatar.jpg"> + +## Hey I'm leah +Also known as 'ctucx' and this is my empty website. +oopsie.
diff --git a/projects.md b/projects.md @@ -0,0 +1,26 @@ +--- +title: ctucx.homepage +subtitle: +page-projects: true +--- + +# Projects + +Some projects of mine that you might _not_ know. + +- ## [mqtt-webui](https://git.ctu.cx/mqtt-webui) + A generic webui that can be used to display and control data on a websocket-exposed mqtt-broker +- ## [webmusic-nginx](https://git.ctu.cx/webmusic-nginx) + Uses nginx's xslt-filter module to generate nice looking index-pages that are optimized for music +- ## [gallery](https://git.ctu.cx/gallery) + A static-site generator that generates a nice looking photo-gallery +- ## [sdm2mqtt](https://git.ctu.cx/sdm2mqtt) + Expose data from SDM120M meters via MQTT +- ## [travelynx2fedi](https://git.ctu.cx/travelynx2fedi) + Automaticly post travelynx checkins on the fediverse +- ## [nixfiles](https://git.ctu.cx/nixfiles) + Nix-configs i've written to deploy my servers/desktops + +<br> + +There are some smaller projects to look at on my [stagit-instance](https://git.ctu.cx).
diff --git a/template.html b/template.html @@ -0,0 +1,26 @@ +<!DOCTYPE html> +<html lang="en"> + <head> + <meta charset="utf-8"> + <title>$title$</title> + <meta name="viewport" content="width=device-width, initial-scale=1.0"> + <link href="/assets/style.css" rel="stylesheet" /> + </head> + <body> + <header> + <h1>$title$</h1> + <p>$subtitle$</p> + </header> + <nav> + <a href="/"$if(page-about)$ class="active" $endif$>home</a> + <a href="/projects.html"$if(page-projects)$ class="active" $endif$>projects</a> + <a href="/contact.html"$if(page-contact)$ class="active" $endif$>contact</a> + <a class="right" href="https://photos.ctu.cx/">photos</a> + <a class="right" href="https://cgit.ctu.cx/">git</a> + </nav> + <main> + $body$ + </main> + <footer><a href="/imprint.html">Imprint</a></footer> + </body> +</html>