commit - 698528a410e37fa3f23c4983b703128fc9dc2839
commit + 4f64e923e703280ca4211c9e6919ee91bb328145
blob - bb98d07ad5fa2dbe4ac9c7657b73a7080f3b0b21
blob + eab80b15375c58e6969fb4da3c69edfa78cd924f
--- Makefile
+++ Makefile
PREFIX = /var/www
-CGIBINDIR = cgi-bin
-HTDOCSDIR = htdocs/pastanoggin.com
+HTDOCSDIR = /htdocs/pastanoggin.com
-CGIDIR = ${PREFIX}/${CGIBINDIR}
-ROOTDIR = ${PREFIX}/${HTDOCSDIR}
-
install:
- # perl
- install -d ${DISTDIR}${PREFIX}/usr/bin
- install -g www -m 755 -o www /usr/bin/perl ${DESTDIR}${PREFIX}/usr/bin
- install -d ${DISTDIR}${PREFIX}/usr/lib
- install -g www -m 755 -o www /usr/lib/libperl.so.* \
- ${DESTDIR}${PREFIX}/usr/lib
- install -g www -m 755 -o www /usr/lib/libm.so.* ${DESTDIR}${PREFIX}/usr/lib
- install -g www -m 755 -o www /usr/lib/libc.so.* ${DESTDIR}${PREFIX}/usr/lib
- install -d ${DISTDIR}${PREFIX}/usr/libexec
- install -g www -m 755 -o www /usr/libexec/ld.so \
- ${DESTDIR}${PREFIX}/usr/libexec
- install -d ${DISTDIR}${PREFIX}/usr/libdata/perl5
- # cgi
- install -d ${DESTDIR}${CGIDIR}
- install -g www -m 0555 -o www perl.cgi ${DESTDIR}${CGIDIR}
- # documents
- install -d ${DESTDIR}${ROOTDIR}/docs
- install -g www -m 0555 -o www docs/* ${DESTDIR}${ROOTDIR}/docs
- # static files
- install -d ${DESTDIR}${ROOTDIR}/static
- install -g www -m 0555 -o www static/* ${DESTDIR}${ROOTDIR}/static
+ install -d -o root -g daemon ${DISTDIR}${PREFIX}/usr/bin
+ install -o root -g bin -m 555 /usr/bin/awk ${DESTDIR}${PREFIX}/usr/bin
+ install -d -o root -g daemon ${DISTDIR}${PREFIX}/usr/lib
+ install -o root -g bin -m 444 /usr/lib/libm.so.* ${DESTDIR}${PREFIX}/usr/lib
+ install -o root -g bin -m 444 /usr/lib/libc.so.* ${DESTDIR}${PREFIX}/usr/lib
+ install -d -o root -g daemon ${DISTDIR}${PREFIX}/usr/libexec
+ install -o root -g bin -m 555 /usr/libexec/ld.so ${DESTDIR}${PREFIX}/usr/libexec
+ install -d ${DESTDIR}${PREFIX}/cgi-bin
+ install -o root -g bin awk.cgi ${DESTDIR}${PREFIX}/cgi-bin
+ install -d ${DESTDIR}${PREFIX}${HTDOCSDIR}/docs
+ install docs/* ${DESTDIR}${PREFIX}${HTDOCSDIR}/docs
+ install -d ${DESTDIR}${PREFIX}${HTDOCSDIR}/img
+ install img/* ${DESTDIR}${PREFIX}${HTDOCSDIR}/img
+ install -d ${DESTDIR}${PREFIX}${HTDOCSDIR}/style
+ install style/* ${DESTDIR}${PREFIX}${HTDOCSDIR}/style
uninstall:
- rm -f ${DESTDIR}${PREFIX}/cgi-bin/perl.cgi
+ rm -f ${DESTDIR}${PREFIX}/cgi-bin/awk.cgi
blob - e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
blob + a4e274debefbe15d8d914406550034512909e235
--- README
+++ README
+A CGI script in AWK because why not.
+
+It uses the a template file like main.tmp as a base with jinja2-like
+placeholders like [%title%], [%content%], etc. the script matches
+endpoints to a pair of template file and page title and sends it
+to the renderer, which prints the appropriate HTTP header lines and
+the requested page.
blob - /dev/null
blob + 5a4a279c0aab648f107dabcec145c1396976eabc (mode 644)
--- /dev/null
+++ docs/blog.html
+No blogs here yet!!!
blob - /dev/null
blob + 7ac968b899af253be4dbf5ba3d418116d1a143bd (mode 644)
--- /dev/null
+++ docs/contact.html
+<h2>how 2 contact?</h2>
+
+<dl>
+ <dt>E-mail</dt>
+ <dd>[REDACTED] (working on it)</dd>
+ <dt>IRC</dt>
+ <dd>anelli (not registered everywhere though)</dd>
+ <dt>XMPP</dt>
+ <dd>anelli@pastanoggin.com</dd>
+</dl>
+
+<p>yay!</p>
blob - /dev/null
blob + f5d795d33fe67c302f88519310b75fc93a283969 (mode 644)
--- /dev/null
+++ docs/links.html
+<p><i>-because search engines suck :b</i></p>
+
+<h2>my button :3</h2>
+<section>
+ <a href="https://pastanoggin.com"><img class="buttonbadge" src="/img/badge.png" alt="button to https://pastanoggin.com"></a>
+ <pre class="codeblock"><code><a href="https://pastanoggin.com"><img src="https://pastanoggin.com/static/badge.png" alt="button to https://pastanoggin.com"></a></code></pre>
+</section>
+
+<h2>kin</h2>
+<ul class="links-list">
+ <li><a href="http://thedaemon.space">thedaemon - based 9fronter</a></li>
+ <li><a href="https://dataswamp.org/~solene">solene - OpenBSD OG</a></i>
+</ul>
+
+<h2>preddy</h2>
+<ul class="links-list">
+ <li><a href="https://cadence.moe"><img class="buttonbadge" src="https://cadence.moe/static/img/cadence_now.png" alt="The text "cadence now!" on a purple background. There is a moon-shaped logo on the left side and a tiny star in the bottom right."></a></li>
+ <li><a href="https://nonkiru.art"><img class="buttonbadge" src="https://nonkiru.art/assets/images/buttons/nonkiru_button_light.gif" alt="button to nonkiru(light)"></a></li>
+ <li><a href="https://goblin-heart.net/sadgrl"><img class="buttonbadge" src="https://goblin-heart.net/sadgrl/assets/images/buttons/sadgrlonline.gif" alt="button to https://goblin-heart.net/sadgrl"></a></li>
+</ul>
+
+<h2>tech</h2>
+<ul class="links-list">
+ <li><a href="https://openbsd.org">OpenBSD - secure os</a></li>
+ <li><a href="https://9front.org">9front - unix done right</a></li>
+ <li><a href="https://unixdigest.com">unix digest</a></li>
+</ul>
+
+<h2>other</h2>
+<ul class="links-list">
+ <li><a href="https://analognowhere.com">unix_surrealism</a></li>
+ <li><a href="https://www.fieggen.com/shoelace" title="Ian's Shoelace Site">Ian's Shoelace Site</a></li>
+</ul>
blob - /dev/null
blob + d77c9b10f3ef6b86923919821954ee85af8ba60f (mode 644)
--- /dev/null
+++ docs/main.tmp
+<!DOCTYPE html>
+<html lang="en">
+ <head>
+ <meta charset="UTF-8">
+ <meta name="viewport" content="width=device-width, initial-scale=1.0">
+ <link rel="icon" href="/img/blunt.png" type="image/png">
+ <link rel="stylesheet" type="text/css" href="/style/main.css">
+ <title>
+ [%title%]
+ </title>
+ </head>
+ <body>
+ <header class="box lighten">
+ <img id="banner" src="/img/banner.png">
+ <img id="construction" src="/img/under_construction.png">
+ </header>
+ <nav class="box lighten">
+ <ul class="nav-list">
+ <li class="nav-item"><a class="nav-link" href="/">home</a></li>
+ <li class="nav-item"><a class="nav-link" href="/contact">contact</a></li>
+ <li class="nav-item"><a class="nav-link" href="/blog">blog</a></li>
+ <li class="nav-item"><a class="nav-link" href="https://git.pastanoggin.com">code</a></li>
+ <li class="nav-item"><a class="nav-link" href="/links">links</a></li>
+ </ul>
+ </nav>
+ <main class="box lighten">
+ [%content%]
+ </main>
+ <dl id="status" class="lighten">
+ <dt id="status-header">status</dt>
+ <dd id="status-body">
+ [%status%]
+ </dd>
+ </dl>
+ <footer class="box lighten">
+ <a class="footer-link" href="https://openbsd.org" target="_blank">
+ <img class="buttonbadge" src="/img/obsd.jpg">
+ </a>
+ <a class="footer-link" href="http://plan9.stanleylieber.com/mothra" target="_blank">
+ <img class="buttonbadge" src="/img/mothracompat.gif">
+ </a>
+ <a class="footer-link" href="https://cadence.moe/blog/2024-10-05-created-by-a-human-badges" target="_blank">
+ <img class="buttonbadge" src="/img/created_by_a_human.png">
+ </a>
+ </footer>
+ </body>
+</html>
blob - /dev/null
blob + 8bd8e37377744709821b218d5b2fe9ee5ac721e4 (mode 644)
--- /dev/null
+++ docs/root.html
+<blockquote>
+<p>"DO <b>YOU</b> HAVE A GRIMOIRE, SHITASS????"</p>
+<cite>- My friend</cite>
+</blockquote>
+<hr>
+
+<p>Hello, this is alex/anelli/noodle/etc,</p>
+<p>I think personal websites are way cooler than social media so hi. After surfing some neocities-like websites i was like "daym this is fun" (check out my favourites in the <i>links</i> page); so I'm trying to make a funny website too with blackjack and hookers as the cool kids say. I'll also blog and host code here for the lols.</p>
+
+<h2>Likes:</h2>
+<ul>
+<li>Birds</li>
+<li>Computers</li>
+<li>Self-hosting</li>
+<li>Xavier Renegade Angel</li>
+</ul>
+
+<h2>Dislikes:</h2>
+<ul>
+<li>Okara</li>
+<li>Spinach</li>
+<li>Consumerism</li>
+<li>Proprietary software/hardware</li>
+</ul>
blob - /dev/null
blob + 500b2c2924ac42035c507b8054c682e9b81c682d (mode 644)
--- /dev/null
+++ docs/status.html
+openbsd vs freebsd rap battle
blob - /dev/null
blob + 4d39ab4070ad60ad15373d6b374dc32241692d08 (mode 644)
--- /dev/null
+++ awk.cgi
+#!/bin/awk -f
+
+function header(code){
+ printf "Status: %s\nContent-Type: text/html\n\n", code
+}
+
+function readfile(a, i, path){
+ while((ret = getline <path) > 0)
+ a[i++] = $0
+ if(ret == -1)
+ print "couldn't read from "path >"/dev/stderr"
+ return i
+}
+
+function cat(a, n, i){
+ for(i = 0; i < n; i++)
+ print a[i]
+}
+
+function error(code, a, len){
+ header(code)
+ len = readfile(a, 0, basedir"/docs/"code".html")
+ cat(a, len)
+}
+
+function render(docpath, doctitle){
+ template_path = basedir"/docs/main.tmp"
+
+ while((ret = getline <template_path) > 0){
+ if($0 ~ /\[%title%\]/)
+ lines[len++] = doctitle
+ else if($0 ~ /\[%content%\]/)
+ len = readfile(lines, len, basedir"/docs/"docpath)
+ else if($0 ~ /\[%status%\]/)
+ len = readfile(lines, len, basedir"/docs/status.html")
+ else
+ lines[len++] = $0
+ }
+ if(ret == -1)
+ print "couldn't read from "template_path >"/dev/stderr"
+ if(len > 0){
+ header(200)
+ cat(lines, len)
+ } else
+ error(404)
+}
+
+BEGIN{
+ basedir = "/htdocs/pastanoggin.com"
+ $0 = ENVIRON["PATH_INFO"] ? ENVIRON["PATH_INFO"] : "/"
+
+ if(/^\/?$/)
+ render("root.html", "pastanoggin!!");
+ else if(/^\/contact\/?$/)
+ render("contact.html", "hello, is it me you're looking for?");
+ else if(/^\/blog\/?$/)
+ render("blog.html", "yapyapyapyap :D");
+ else if(/^\/links\/?$/)
+ render("links.html", "the interwebs");
+ else
+ error(404)
+ exit
+}
blob - /dev/null
blob + 08375c54b23cab4e41167eb8b728ea3b9f25d80d (mode 644)
Binary files /dev/null and img/badge.png differ
blob - /dev/null
blob + 1f8960dd28d6b237c43754e372b7273d2106ddab (mode 644)
Binary files /dev/null and img/banner.png differ
blob - /dev/null
blob + b0cff362e5071bfc8d2fa15ad1401a5ed560c56d (mode 644)
Binary files /dev/null and img/blunt.png differ
blob - /dev/null
blob + 4dca2c0c600d68015e9ae094ee86b3811236e046 (mode 644)
Binary files /dev/null and img/created_by_a_human.png differ
blob - /dev/null
blob + bf18a139d0052a14cb306d360a7479e87a55fd2a (mode 644)
Binary files /dev/null and img/cursor.png differ
blob - /dev/null
blob + 3ec3731ab550b44289ff65397b14a72797f8f4af (mode 644)
Binary files /dev/null and img/mothracompat.gif differ
blob - /dev/null
blob + c7edfefa5b3328d23082a6f58c4096ff609d751f (mode 644)
Binary files /dev/null and img/obsd.jpg differ
blob - /dev/null
blob + a5ddb12a2972159a43f002af3034396995356c88 (mode 644)
Binary files /dev/null and img/tile.png differ
blob - /dev/null
blob + 27189c000edfffe30316dedf6dd9cc6c36336360 (mode 644)
Binary files /dev/null and img/under_construction.png differ
blob - /dev/null
blob + 313c8c3dd5869e1c4238e924167f6fcc2616f650 (mode 644)
--- /dev/null
+++ style/main.css
+:root {
+ --color-grey: #222222;
+ --text-color: #f9f9f9;
+ --color-purple: #8f60af;
+ --background-img: url(/img/tile.png);
+}
+
+* {
+ cursor: url("/img/cursor.png"), auto;
+}
+
+body {
+ min-width: 20rem;
+ max-width: 60rem;
+ margin: auto;
+ padding: 1em;
+ color: var(--text-color);
+ background-image: var(--background-img);
+ display: flex;
+ gap: 1em;
+ flex-wrap: wrap;
+ flex-direction: row-reverse;
+}
+
+header {
+ flex-basis: 100%;
+ display: flex;
+ position: relative;
+ justify-content: center;
+}
+
+nav {
+ flex-basis: 10%;
+ flex-grow: 1;
+ display: flex;
+ align-items: start;
+}
+
+main {
+ flex-basis: 70%;
+ flex-grow: 1;
+}
+
+footer {
+ flex-basis: 100%;
+ display: flex;
+ flex-wrap: wrap;
+ gap: 0.5em;
+}
+
+a {
+ color: lightblue;
+}
+
+.nav-list {
+ width: 100%;
+ margin: 0;
+ padding: 0;
+ list-style: none;
+ display: flex;
+ gap: 1em;
+ flex-wrap: wrap;
+}
+
+.nav-item {
+ flex-grow: 1;
+ flex-shrink: 1;
+ flex-basis: 0;
+ display: flex;
+}
+
+.box {
+ padding: 1em;
+ border-style: groove;
+ border-width: 0.5em;
+ background-color: var(--color-grey);
+ border-color: var(--color-purple);
+}
+
+.lighten:hover {
+ filter: brightness(110%);
+}
+
+.nav-link {
+ width: 100%;
+ text-align: center;
+ align-content: center;
+ color: var(--color-grey);
+ text-decoration: none;
+ background: var(--color-purple);
+ border-style: outset;
+ border-color: var(--color-purple);
+ padding: 0.5em;
+ font-family: monospace;
+ font-weight: bold;
+ font-size: 1.5em;
+}
+
+.nav-link:hover {
+ filter: brightness(130%);
+}
+
+.buttonbadge {
+ width: 88px;
+ height: 31px;
+ vertical-align: middle;
+}
+
+.codeblock {
+ white-space: pre-wrap;
+ word-break: break-all;
+ background: black;
+ color: lightgreen;
+}
+
+#banner {
+ max-width: 100%;
+ object-fit: contain;
+ image-rendering: pixelated;
+}
+
+#construction {
+ position: absolute;
+ bottom: 0;
+ right: 0;
+ height: auto;
+ width: 30%;
+ max-width: 125px;
+ max-height: 100%;
+}
+
+#status {
+ margin: 0;
+ background-color: #8f60af;
+ color: var(--color-grey);
+ border-radius: 1.5em;
+ padding: 0.5em;
+ display: flex;
+ align-items: center;
+ gap: 1em;
+ flex-basis: 100%;
+ border-color: var(--color-grey);
+ border-width: 0.1em;
+ border-style: solid;
+}
+
+#status-header {
+ padding: 0.1em 1em;
+ background: white;
+ height: 100%;
+ border-radius: 1em;
+ text-align: center;
+ align-content: center;
+}
+
+#status-body {
+ margin: 0;
+ font-size: 1.2em;
+ color: white;
+ word-break: break-word;
+}
+
+@media only screen and (min-width: 800px) {
+ ul {
+ flex-direction: column;
+ }
+}