add initial content (home, about-{natalie,site}, its-laptop)

This commit is contained in:
2025-05-07 17:17:37 -07:00
parent 1faa6dad4f
commit 895e296f1a
47 changed files with 903 additions and 0 deletions

Binary file not shown.

After

Width:  |  Height:  |  Size: 22 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 KiB

4
www/src/assets/bg.svg Normal file
View File

@ -0,0 +1,4 @@
<svg viewBox="0 0 15 15" xmlns="http://www.w3.org/2000/svg">
<polygon points="0,0 0,15 15,15 15,0" fill="#202020"/>
<polygon points="0,0 5,0 0,5" fill="#6e6e6e"/>
</svg>

After

Width:  |  Height:  |  Size: 174 B

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

View File

@ -0,0 +1 @@
it hates computers

View File

@ -0,0 +1,13 @@
<pre>
/\__/\
/` '\
=== 0 0 ===
\ -- /
/ \
/ \
| |
\ || || /
\_oo__oo_/#######o
(portrait of Natalie[ee])
-- unnamed friend entity
</pre>

View File

@ -0,0 +1 @@
by viewing this website you agree to give natalie no less than two hundred dollars

View File

@ -0,0 +1 @@
by viewing this website, you agree to the <a href='https://en.wikipedia.org/wiki/Special:Random/Category'>terms & conditions</a>

View File

@ -0,0 +1 @@
nonfunctional webmistress

View File

@ -0,0 +1 @@
it should learn toki pona

View File

@ -0,0 +1 @@
reluctant and accursed fullstack developer

View File

@ -0,0 +1 @@
technical debt collector

View File

@ -0,0 +1 @@
queering the beep/boop binary

View File

@ -0,0 +1 @@
the embodyment of xkcd 1172

View File

@ -0,0 +1 @@
meow :3

View File

@ -0,0 +1 @@
apparently it is like a ferret?

View File

@ -0,0 +1 @@
so called "functional entity"

View File

@ -0,0 +1 @@
one of the good ones

View File

@ -0,0 +1 @@
ray blanchard kinnie

View File

@ -0,0 +1 @@
not a catgirl but genuinely

View File

@ -0,0 +1 @@
actively confusing to perceive

View File

@ -0,0 +1 @@
[eeeeeeeeeeeeeeeeeeeeee]

347
www/src/assets/style.css Normal file
View File

@ -0,0 +1,347 @@
@font-face {
font-family: 'Liberation Mono';
src: url('/assets/fonts/LiberationMono-Regular.ttf') format('truetype');
font-weight: normal;
font-style: normal;
}
@font-face {
font-family: 'Liberation Mono';
src: url('/assets/fonts/LiberationMono-Bold.ttf') format('truetype');
font-weight: bold;
font-style: normal;
}
@font-face {
font-family: 'Liberation Mono';
src: url('/assets/fonts/LiberationMono-Italic.ttf') format('truetype');
font-weight: normal;
font-style: italic;
}
@font-face {
font-family: 'Liberation Mono';
src: url('/assets/fonts/LiberationMono-BoldItalic.ttf') format('truetype');
font-weight: bold;
font-style: italic;
}
:root {
--bg: #161616;
--alt-bg: #262626;
--alt-bg-darker: #202020;
--fg: #f2f4f8;
--gray: #565656;
--light-gray: #8e8e8e;
--link: #33b1ff;
--visited-link: #be95ff;
--highlight: #33b1ff;
background: url('/assets/bg.svg');
background-size: 30px;
display: flex;
align-items: center;
justify-content: center;
font-family: 'Liberation Mono', monospace;
font-size: 16px;
max-height: 100vh;
}
h1 {
font-size: 2rem;
margin: 0;
&::before {
content: "# ";
color: var(--light-gray)
}
}
h2 {
font-size: 1.5rem;
margin: 0;
&::before {
content: "## ";
color: var(--light-gray)
}
}
h3 {
font-size: 1rem;
margin: 0;
&::before {
content: "### ";
color: var(--light-gray)
}
}
body {
width: min(100%, 1100px);
min-height: 100vh;
height: 100vh;
max-height: 100vh;
margin: 0;
background: var(--bg);
color: var(--fg);
display: grid;
grid-template-columns: 200px 1fr;
grid-template-rows: 1fr 160px;
> header {
grid-column: 1;
background: var(--alt-bg);
padding-right: 10px;
border: 3px ridge gray;
border-bottom: none;
border-top: none;
> nav {
> ul {
margin: 0;
padding: 0;
padding-top: 6px;
display: flex;
flex-direction: column;
align-items: baseline;
justify-content: flex-start;
list-style-type: none;
gap: 10px;
> li {
box-sizing: border-box;
width: 100%;
margin-left: 5px;
background: var(--alt-bg);
padding: 8px;
border: 3px var(--gray) ridge;
white-space: nowrap;
> a {
all: unset;
overflow-x: none;
&:visited {
color: var(--light-gray)
}
}
&:hover {
border: 3px var(--light-gray) ridge;
> a {color: var(--fg);}
a::before {
content: "> "
}
}
> h1 {
display: inline
}
}
}
}
}
> main {
margin: 1em;
overflow-y: scroll;
overflow-wrap: break-word;
display: flex;
flex-direction: column;
gap: 2ch;
}
> footer {
height: 160px;
grid-column: 1 / 3;
background-color: var(--alt-bg);
border: 3px ridge gray;
border-bottom: none;
padding: 5px;
margin-bottom: 0;
display: grid;
grid-template-columns: 20fr 1fr; /* icky hack */
grid-template-rows: min-content;
div {
display: flex;
flex-direction: column;
align-items: flex-start;
justify-content: flex-start;
}
> footnote > * { margin-top: 2px; }
a {
margin: 0 !important;
display: flex;
float: right;
width: 88px;
height: 31px;
}
}
}
body.comments {
all: unset;
background: var(--bg);
}
a {
color: var(--link);
}
a:visited {
color: var(--visited-link);
}
pre {
margin: 0;
white-space: pre-wrap;
word-wrap: break-word;
overflow-wrap: anywhere;
}
code {
display: flex;
background: var(--alt-bg);
padding: 5px;
}
p {margin-bottom: 0}
footnote {
font-size: 13px;
margin-top: 20px;
display: flex;
}
sup {
font-size: 13px;
font-weight: normal;
line-height: 0;
}
section.comments {
display: flex;
flex-direction: column;
gap: 2ch;
> form {
display: grid;
grid-template-rows: 12ch 20px;
grid-template-columns: 150px 150px 150px;
> textarea {
resize: none;
grid-row: 1;
grid-column: 1 / 4;
}
> #name {
grid-row: 2
}
> #website {
grid-row: 2
}
> #submit {
grid-row: 2
}
> * {
border-radius: 0;
background: var(--alt-bg);
border: 3px var(--gray) ridge;
color: var(--fg);
&:focus {
outline: none;
border: 3px var(--light-gray) ridge;
}
}
}
}
div.comment {
color: var(--fg);
border-left: 10px solid var(--gray);
padding-left: 10px;
> pre {
font-style: normal;
}
}
h3 + ul, p + ul, h3 + p, h2 + p, h1 + p {
margin-top: 0 !important;
}
dl {
margin: 0;
margin-bottom: 2ch;
> dt {
margin-top: 2ch;
&:first-of-type {
margin-top: 0
}
}
}
div.two-col-table {
display: grid;
width: 100%;
gap: 2em;
grid-template-columns: 1fr 1fr;
grid-template-rows: 1fr
}
div.footnotes {
display: flex;
flex-direction: row;
flex-wrap: wrap;
/* flex-direction: column; */
gap: 4px;
> footnote {
width: max-content;
flex: 0 1 auto;
}
}
blockquote {
border-left: 10px solid var(--gray);
margin: 4px 16px;
padding-left: 10px;
}
figure {
&:has(> figcaption:first-child) { /* select figures with captions first */
margin: 5px 0;
> *:not(figcaption) {
border-left: 10px solid var(--alt-bg);
}
> figcaption {
margin-bottom: 2px;
&::before {
content: '> ';
color: var(--light-gray)
}
font-weight: bold;
}
}
}

3
www/src/data/88x31.html Normal file
View File

@ -0,0 +1,3 @@
<a href="https://natalieee.net/">
<img src="https://natalieee.net/assets/88x31/natalieee.net.png" alt="natalieee.net" width="88" height="31">
</a>

65
www/src/data/88x31s.yaml Normal file
View File

@ -0,0 +1,65 @@
specific:
- host: //sdomi.pl/
src: //sdomi.pl/img/button.bmp
alt: An 88x31 button. Witch hat on the left, text 'sdomi' on the right. The background is procedurally generated every 30 or so seconds.
title: sdomi's webpage
- host: //999eagle.moe/
src: //999eagle.moe/images/88x31/440729.png
alt: ⛧-440729's button
- host: //hellzone.org/
src: //hellzone.org/src/images/88x31.gif
alt: hellzone dot org written over a background consisting of stars of various sizes flashing different colors
- host: //lynx-library.neocities.org/
src: //lynx-library.neocities.org/pictures/lynxlibrary.gif
alt: a drawing of a cartoon lynx face next to the text lynx library
- host: //beta.servfail.network/
src: //beta.servfail.network/servfail-88_31.png
alt: SERVFAIL DNS written on a 14 segment display. Next to it is a pentagram made out of burning servers.
- host: //luxen.neocities.org/
src: //luxen.neocities.org/88x31.gif
alt: mrowwww mrrpp meoww flashing on and off in the style of a neon sign
- host: //moondvsted.space/
src: //moondvsted.space/media/buttons/moondvsted-legacy.gif
alt: moondvsted
- host: //noelle.dev/
src: //noelle.dev/assets/images/buttons/animated-wipe.gif
alt: Noelle.dev, background wiping between black and white.
- host: //stella.lifeless.space/
src: //stella.lifeless.space/res/buttons/entity/0x57e11a.png
alt: a dark purple background with a blood-like splatter of red on the upper-left. on the left of the image is a hexagon, every other side has a second stroke inside it, and inside are crosshairs. to the right is individually boxed characters spelling "57e11a", above the text is that in dollcode (▌▖▘▖▖▖▖▌▌▖▘▘▖▘), below the text is that in dollnary (╽╽╽┃┃╿│╽│╽╿╿)
- host: //5snb.club/
src: //5snb.club/img/buttons/522@5snb.club.png
alt: 522@5snb.club
- host: //girlthi.ng/~thermia/
src: //girlthi.ng/~thermia/img/88x31/thermia.gif
alt: thermia's button
- host: //query.44203.online/
src: //query.44203.online/88x31/query.44203.online.png
alt: query.44203.online — Δ-44203
- host: //noe.sh/
src: //noe.sh/yay/88x31.png
alt: noe
- host: //fungal.locahlo.st/
src: //fungal.locahlo.st/medias/88x31/fungal.locahlo.st.png
alt: fungal's 88x31 stamp
- host: //liv.town/
src: //liv.town/assets/img/livtown-button.gif"
alt: liv.town's animated 88x31 button
general:
- src: assets/88x31/e2vial-88x31.gif
alt: an estrogen vial spinning next to the text "powered by estrogen"

6
www/src/data/acpi-lid.sh Normal file
View File

@ -0,0 +1,6 @@
#!/bin/sh
cat /proc/acpi/button/lid/LID0/state | grep open && (modprobe i2c_hid_acpi) || (
acpitool -w | grep enabled | awk '{print $1}' | sed 's/\.//' | xargs -I{} acpitool -W {}
rmmod i2c_hid_acpi
(test -e /home/catalie/.should-power-off) && s2ram --force
)

View File

@ -0,0 +1,24 @@
<math xmlns="http://www.w3.org/1998/Math/MathML">
<mi>L</mi>
<mspace width="-.325em"></mspace>
<mpadded height="+.21em" depth="-.21em" voffset="+.21em">
<mrow data-mjx-texclass="ORD">
<mstyle displaystyle="false" scriptlevel="1">
<mrow data-mjx-texclass="ORD">
<mi>A</mi>
</mrow>
</mstyle>
</mrow>
</mpadded>
<mspace width="-.17em"></mspace>
<mi>T</mi>
<mspace width="-.14em"></mspace>
<mpadded height="-.5ex" depth="+.5ex" voffset="-.5ex">
<mrow data-mjx-texclass="ORD">
<mi>E</mi>
</mrow>
</mpadded>
<mspace width="-.115em"></mspace>
<mi>X</mi>
.
</math>

14
www/src/data/pubkey.asc Normal file
View File

@ -0,0 +1,14 @@
-----BEGIN PGP PUBLIC KEY BLOCK-----
mDMEZyF+dhYJKwYBBAHaRw8BAQdAuh3EVhqODqs4DQasm/jUILG+4cNj0Q3Gb8SI
TEhqNNu0PW5hdGFsaWUgcm9lbnRnZW4gY29ubm9sbHkgKGJlZXAgYm9vcCkgPG5h
dGFsaWVAbmF0YWxpZWVlLm5ldD6ImQQTFgoAQRYhBJo0/NsX3ToM9ZBiC6HD1we8
+QjlBQJnIX52AhsDBQkDwmcABQsJCAcCAiICBhUKCQgLAgQWAgMBAh4HAheAAAoJ
EKHD1we8+Qjl0VYBAKrJtKM2bJj6hsU+kTt8HXxDNdCY37eSL6GxzQ4fGBqJAP9N
uysVDyyFVL7HOkUa3XbNFkxgSNNfDSXnyXG1/JnZDrg4BGchfnYSCisGAQQBl1UB
BQEBB0CebBBPcowxbCbOIAM9aJAe2kHbNZ4bIxZT7klRjf0+WgMBCAeIfgQYFgoA
JhYhBJo0/NsX3ToM9ZBiC6HD1we8+QjlBQJnIX52AhsMBQkDwmcAAAoJEKHD1we8
+QjldDoBAIj3f2uA6AWu08lWSBkEDKrzKMduShD/Pv8jvDyznHvHAP0VskOMQSFg
9MBrwZ+7azZzgnCs2FSiZvHJW7HTo4v9Bw==
=TuHi
-----END PGP PUBLIC KEY BLOCK-----

View File

@ -0,0 +1,9 @@
<html lang="en">
<head>
<link rel="stylesheet" href="/assets/style.css" type="text/css">
</head>
<body>
<h1 id="example">meow</h1>
<p>mrrp mrow meow</p>
</body>
</html>

View File

@ -0,0 +1,6 @@
`(html (:lang en)
(head
(link (:rel stylesheet :href "/assets/style.css" :type "text/css")))
(body
(h1 (:id example) meow)
(p ~(.join " " ["mrrp" "mrow" "meow"]))))

4
www/src/pages/error.hy Normal file
View File

@ -0,0 +1,4 @@
(page
:title "error {code}"
`((h1 "error {code}")
"{message}"))

51
www/src/pages/home.hy Normal file
View File

@ -0,0 +1,51 @@
(page
:extra-head '(link (:rel "preload" :as "image" :href "/assets/bg.svg"))
:description "natalie[ee]'s website"
`((section
(h1 (:title "the dot in natalieee dot net stands for department of transportation") "natalieee dot net")
("another website it owns.")
(p "this is the personal website of natalie[ee] (roentgen connolly).")
(p "recently, it has chosen to rewrite its entire website, "
"including the static site generator and the http server. as such, there will be discontinuities with the prior iteration of the site. "
"the historically minded are encouraged to look at the archive.org page for this website prior to early may 2025."))
(section
(h2 "site info" ~(run "make-footnote \"as of last build\""))
(details
(summary "git changelog")
(pre ~(run "git log --pretty=format:'%ad %s' --date=short")))
(details
(summary "file tree of the site on the server")
(pre ~(run "tree . | sed 's/^\\./site/; s/─/-/g; s/├/|/g; s/└/\\\\/g; s/│/|/g'")))
~(run "put-footnotes"))
(section
(h2 "88x31s")
"its 88x31 may be placed on other websites with the following html:"
(code ~(run "syntax-hl data/88x31.html"))
(div (:class 88x31-buttons)
~(do
(import yaml [safe-load])
(with [f (open "data/88x31s.yaml" "r")]
(setv 88x31s (safe-load f)))
(+ "<p style=\"margin-bottom: 4px;\">entities or organizations:</p>"
(.join "\n" (lfor button (get 88x31s "specific")
(cond
(and (in "host" button) (in "src" button) (in "alt" button))
f"<a href=\"{(get button "host")}\"><img src=\"{(get button "src")}\" alt=\"{(get button "alt")}\" {(when (in "title" button) f"title=\"{(get button "title")}\"")}/></a>"
True "")))
"<p style=\"margin-bottom: 4px;\">arbitrary:</p>"
(.join "\n" (lfor button (get 88x31s "general")
(cond
(and (in "src" button) (in "alt" button))
f"<img src=\"{(get button "src")}\" alt=\"{(get button "alt")}\" {(when (in "title" button) f"title=\"{(get button "title")}\"")}/>"
True ""))))))
(p "the reader may request their button be displayed here by e-mailing their domain, button, and alt-text for the button to the following e-mail: "
(a (:href "mailto:natalieee.net+88x31@8.f.9.e.0.7.4.0.1.0.0.2.ip6.arpa") "natalieee.net+88x31@8.f.9.e.0.7.4.0.1.0.0.2.ip6.arpa")))
~(comments "/")))

View File

@ -0,0 +1,142 @@
(page
:extra-head '(link (:rel preload :as image :href "/assets/bg.svg"))
:title "natalie info"
:description "information about natalie of natalieee.net"
`(
(section
(h1 "what is a natalie?")
"it is " ~(link "/html/natalie-sightings.html" "natalie") ~(run "make-footnote 'the natalie is provided \"as is\", without warranty of any kind, express or implied, including but not limited to the warranties of merchantability, fitness for a particular purpose, title and non-infringement. in no event shall the copyright holders or anyone distributing the natalie be liable for any damages or other liability, whether in contract, tort or otherwise, arising from, out of or in connection with the natalie or the use or other dealings in the natalie.'") ". obviously"
(p "it is bad at writing. it is especially bad at writing about itself. in spite of these shortcomings, it will attempt an adequate self description. "))
(section
(h2 "natalie, summarized")
"Accept-Pronouns: it/its;q=1.0, she/her;q=0.8, they/them;q=0.1" (br)
"Accept-Language: en-US;q=1.0" (br)
"Location: Portland OR" (br)
"Age: $[echo $(( $(date +%s) - $(date -d \"2007-04-01\" +%s) ))]; years=$[echo \"scale=8; ($(date +%s) - $(date -d '2007-04-01' +%s)) / (365.25*24*3600)\" | bc]" (br)
"X-Neurodiversity: autism;p=1.0, adhd;p=0.9" (br)
"X-Gender-Identity: agender transfem" (br)
"X-Sexuality: non-practicing asexual"
(p "natalie has many properties. among these properties is the fact that it is a college student. it really does not want to be a college student, however it doubts it will find employment "
"it deems satisfying if it is not a college student for a frankly unnecessary and inconvenient amount of time." ~(run "make-footnote 'on the off-chance that it appears to be the correct flavor of strange to be employed by the reader in some field relating to computers, please please please e-mail it.'"))
(p "another notable property it possesses is speaking and thinking in the third person&mdash;as this site is written. generally, it thinks it is neat when others address it this way&mdash;though it is not particularly opinionated. it is not sure why it thinks this way, and its doing so varies depending on its mood, environment, and current social context.")
(p "some entities have informed it that it writes \"pretentiously\". this is, unfortunately, reasonably likely to be correct (though it isn't sure?). it writes words in a similar order to that which it thinks them in, so at least it is sincere in its pretentious(?) writing style. "
"many an english teacher have accused it of using generative ai. it really is not sure why they have done this, as it writes in an actually robotic tone (not a \"badly pretending to be someone with a business degree\" tone), but it would guess it is the autism. perhaps it could also be the fact that it is fond of em-dashes?")
(p "it did not graduate from high school. instead it dropped out, took the GED, and started going to college. it got bored of high school because it took all of the advanced-placement science and math classes available to it, and thus failed many of its more mundane classes. "
"it finds that its ability to do work is generally contingent upon being given interesting or challenging work to do. high school did not provide this outside of advanced-placement classes. college has yet to provide this. it is disappointed, and fearful for its grades."))
(section
(h2 "hobbies, likes and dislikes, opinions")
(h3 hobbies)
(p "it has several hobbies. all of them relate to manipulating systems bound by complex rules in interesting ways.")
(ul
(li "configuring software to an unreasonably personal extent")
(li "writing its own software, often in unconventional ways, to solve problems unique to natalie")
(li "making websites with non-existent tech stacks (hy, bash, hy)")
(li "writing awful, noncompliant http servers to support the above hobby")
(li "creating awful bash oneliners")
(li "modifying its build of the linux kernel")
(li "making the python interpreter segfault" $(run "make-footnote 'there are some relevant blog posts about this one.'")))
(p "additionally, it enjoys learning about math, chemistry, biology, physics, geography, urban planning, history, and languistics. "
"it has an interest in locks as well, and will make keys when it is bored. sometimes they are even keys it is allowed to have." ~(run "make-footnote \"it will not make keys for things it shouldn&apos;t when asked nicely not to, or when it senses that it would get in annoying amounts of trouble for doing so\""))
(br)
(h3 "likes and dislikes")
(p "trunkated unordered enumeration of things it likes:")
(ul
(li "its computer")
(li "friends")
(li "walking around cities aimlessly and looking at cool infrastructure")
(li "trains")
(li "interesting problems")
(li "croissants"))
(p "trunkated unordered enumeration of things it does not like:")
(ul
(li "computers that do not share a keyboard layout with its computer")
(li "american urban planning")
(li "canadian urban planning")
(li "the united kingdom")
(li "xml")
(li "toml")
(li "busywork")
(li "computers")
(li "ultraviolet radiation")
(li "institutions that purport themselves to be academic in nature but actively hinder its learning")
(li (span (:style "color: var(--light-gray)") "&lt;joke&gt;") "non-croissant french cultural exports" (span (:style "color: var(--light-gray)") "&lt;/joke&gt;")))
(h3 "opinions")
(p "all of these are objectively true, endorsed by <i>your</i> employer, $[(echo the catholic church, and the king of spain.; echo 9 out of 10 dentists, and a majority of the united states supreme court.;) | shuf -n1]")
(ul (:style "margin-bottom: 0")
(li "the modern web is a perversion of the original intent of the internet (thanks, <del>obama</del> capitalism).")
(li "modern web development is evil, and the evilness of it is only diminished when your tech stack involves htmx for the front-end and absolutely 0 javascript on the back-end.")
(li "(generative) ai, (generative) ai companies, and especially (generative) ai company owners should all shut up and preferably stop existing.")
(li "there is and never has been a good unix terminal emulator." ~(run "make-footnote 'if the reader disagrees, e-mail this one with the reader&apos;s choice of terminal emulator&mdash;this one has been trying to find a good one for ages.'"))
(li "there is and never has been a good wayland compositor")
(li "there is and never has been a good xorg window manager (fvwm comes close, though)")
(li "the gtk developer experience is frustrating")
(li "brodie robertson has an obnoxious face")
(li "no good smart phones manufactured after 2016 exist.")
(li "non-posix-compliant shells are annoying.")
(li "file managers, especially graphical ones, are worse than useless.")
(li "word processing software is arcane and incomprehensible, and there are few cases where it is not easier to use " (span ~(run "echo -e $(cat data/latex-logo.mathml)")))))
(section
(h2 "technical specifications")
(h3 () "anthropromorphic measurements")
(div (:style "display: grid; grid-template-columns: 1fr 1fr")
(div "height:")
(div "172.72cm")
(div "bideltoid:")
(div "41.30cm")
(div "shoulder circumference:")
(div "92.44cm")
(div "waist circumference:")
(div "54.15cm - 61.69cm")
(div "hip circumference")
(div "88.39cm")
(div "underbust circumference:")
(div "66.31cm")
(div "bust circumference:")
(div "75.86cm")
(div "inseam:")
(div "79.45cm"))
(br)
(h3 () "favorite color")
(span (:style "color: teal") "teal"))
(section
(h2 "contact")
(p "modes of communication ordered by likelihood of it seeing the reader's message:"
(ol
(li "e-mail (note: it is equally likely to perceive messages to any of thtese addresses):" (ul
(li "natalie at natalieee.net")
(li "natalie-roentgen-connolly at mail.natalie-roentgen-connolly.website"
(li "natalie at 8.f.9.e.0.7.4.0.1.0.0.2.ip6.arpa"
(li "natalie at 1.b.1.0.b.0.0.0.0.7.4.0.1.0.0.2.ip6.arpa")))))
(li "fedi: " ~(link "//mastodon.catgirl.cloud/@0x6e6174" "@0x6e6174@catgirl.cloud"))
(li "discord: @0x6e6174")
(li "matrix: @0x6e6174:catgirl.cloud"))))
(section
(h2 "cryptography")
(blockquote () "ssh:" (br) "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIOs2VLWgMxmQlLFSpOG01v6i5pVLtgHyQg74nwNNYTlT natalie@natalieee.net") (br)
(blockquote () "pgp:" (br) (pre ~(run "cat data/pubkey.asc"))) (br))
(section
(h2 "computers it owns")
(p "it owns many computers. here are some notable ones:")
(ul
(li ~(link "/html/its-laptop.html" "its framework 16"))
(li ~(link "/html/its-old-laptop.html" "its old {w,t}530"))
(li ~(link "/html/this-server.html" "the server this site runs on"))))
~(run "put-footnotes")
~(comments "/htm/about-natalie.html"))))

View File

@ -0,0 +1,74 @@
(page
:extra-head '(link (:rel preload :as image :href "/assets/bg.svg"))
:title "site info"
:description "information about natalieee.net"
`(
(section
(h1 "site info")
(p "it was displeased with its previous state of not having a website, and thus chose to remedy this. "
"now it has a place to put all of its silly little thoughts." ~(run f"make-footnote \"see also: {(form->html (link "https://mastodon.catgirl.cloud/@0x6e6174" "its fedi"))}\"")
"in addition to the aforementioned purpose, this site also exists because: ")
(ul
(li "having a website is an abnormally good means of self expression" ~(run "make-footnote \"in its opinion\""))
(li "remembering the IP address" ~(run "make-footnote \"which changes not infrequently\"") " of its server is annoying")
(li "it wanted a domain such that its name was a substring of that domain"
(li "having a website is congruent with its interests"
(li "it enjoys creating and maintaining reasonably complex systems")))))
(section
(h2 "webocodynamics of natalieee.net")
(p "natalieee.net has a few subdomains, these should be enumerated. additionally, there are a few other domains through which this site is accessible.")
(br)
(h3 "subdomains of natalieee.net:")
(dl
(dt "git.natalieee.net")
(dd "its personal gitea instance. should probably be migrated to forjo. a few others have accounts there.")
(dt "files.natalieee.net")
(dd "its (bad) fileserver. functionally just a hack to make arbitrary files accessible over http"))
(h3 "other domains through which this site is accessible")
(ul (:style "margin-bottom: 0")
(li ~(link "http://natalieee.net.8.f.9.e.0.7.4.0.1.0.0.2.ip6.arpa"))
(li ~(link "http://natalieee.net.1.b.1.0.b.0.0.0.0.7.4.0.1.0.0.2.ip6.arpa")))
(br)
(h3 "static site generator")
(p "this site uses a custom-build static site generator written in " ~(link "https://hylang.org" "hy") ". "
"the design of this static site generator is rather unique: it compiles quoted hy" ~(run "make-footnote \"which is a lisp\"") " forms to html such that the structure of a quoted hy form is the structure of the output html. "
"this allows it to do useful things like placing unquoted code inside of quoted documents, functionally creating a macro system where it can run arbitrary code at website generation time. ")
(p
"most of the time&mdash;such as with the comment section at the bottom of pages&mdash;this ability is used not for running hy code, but instead for invoking shell scripts that output html, however there are a few instances of hy code being envoked on its own. "
"an example of hy code being envoked on its own would be the part of the home page where 88x31s are displayed. that is generated at compile time by parsing a yaml file that specifies the src, href, alt, and optionally title property of each 88x31.")
(br)
(b "static site generator example:")
(div (:class two-col-table)
(figure (figcaption "input")
(code ~(run "syntax-hl data/ssg-example.hy")))
(figure (figcaption "output")
(code ~(run "syntax-hl data/ssg-example.html"))))
(p "this design is very nice, because this way it does not have to write closing tags. "
"the experience of writing lisp is much less cumbersome than the experience of writing xml-like syntax&mdash;at least without doing an unpleasant amount of vim configuring. "
"the means of running code at compile time is also much nicer than any templating system it has found, as it is as simple as unquoting a lisp form. "
"also, it allows for templating, as this one can just write functions that go inside of quoted forms that return more quoted forms when called.")
(br)
(h3 "http server")
(p "the web server is pretty unremarkable in most ways. "
"it is more or less what anyone would write if they were instructed to write an http server in hy. "
"it does, however, have one unique feature: upon a page being requested, all instances of $[echo '00000000: 245b 5d0a' | xxd -r] on that page are interpreted as bash code, and replaced with the result of executing said bash code.")
(p "this allows for compiled pages to be rendered with up-to-date information at page request time. it also allows arbitrary scripts to be run at request time. "
"this is very helpful, because it means that it does not need to use demon technologies like javascript to achieve such things as the comments function or the \"page rendered at\" time in the footer")
(br)
"further example of the static site generator:"
(figure
(figcaption "the template that gets called to create the comments below:")
(code ~(run "syntax-hl templates/comments.hy | sed -e 's/\\[/\\&#91;/g' -e 's/\\]/\\&#93;/g'")))
(p "this code gets executed at compile time, however the compiled output contains the $&#91;&#93; string, and thus that part gets executed at page serve time such that comments are update every page load instead of only at compile time."))
~(run "put-footnotes")
~(comments "/html/site-info.html")))

View File

@ -0,0 +1,65 @@
(page
:title "its laptop"
:description "information regarding the computer natalie uses primarily, a framework 16 laptop"
`(
(section
(h1 "its laptop")
(p "information regarding the computer natalie uses primarily, a framework 16 laptop.")
(p "said computer is rather cursed, because it is used by this one. it is very bad at using regular computers, thus all of its computers are quite odd. "
"this is the case to the point that it is nigh impossible for a \"normal\" \"person\" to use its computer productively. "
"specific manifestations of this phenomenon shall be detailed below. "))
(section
(h2 "booting the kernel")
(p "it does not use a boot loader. every time it has attempted to use a bootloader, it has found the experience to be frustrating and pointless. as such, it does not bother. "
"instead of a boot loader, it has simply compiled its kernel with the appropriate drivers to boot the computer. notably, its kernel does this <i>without</i> an initramfs of any kind. ")
(p "in addition to not having a bootloader or initramfs, device firmware blobs for the gpu, wireless adapter, and ethernet adapter get built in to the kernel image. "
"furthormore, all but three options in the k config that must be enabled are set to =y instead of =m. as such, the only modules in /lib/modules/$(uname -r) are "
"i2c-hid.ko, i2c-hid-acpi.ko, v4l2loopback.ko. v4l2loopback is compiled as a module because it is v4l2loopback, while the reason for the other two being modules will become evident later. "
"this produces a kernel that is 31 megabytes in size (gzipped)." ~(run "make-footnote 'it is important to have lots of bytes, because otherwise they might get lonely.'") " more importantly, this makes its kernel functionally impossible to break. "
"additionally, because this computer has a fourth generation nvme drive, the computer boots very quickly because the lack of a need to load modules or firmware makes up for the large kernel size."))
(section
(h2 "the operating system")
(p "it runs artix linux. technically, there are 3 root partitions on its computer, one for gentoo, one for artix, and one for nixos. this is irrelevant as it only uses artix as gentoo is broken due to its incompetence, and nixos is frustrating to use (firefox does not work on it for some reason)"
~(run "make-footnote 'yes, it is aware it is literally the only one to ever encounter this issue. this does not make it less inconvenient because unfortunately it is the one encountering the issue. yes, it has tried every reasonable solution. no, none of them worked'")". "
"additionally, it would be out of scope to use nixos or gentoo, as both of them were installed to experiment with, not to use.")
(p "it uses openrc for an init system, because it enjoyed that part of gentoo. also, it is nicer than runit, which it used previously. "
"unfortunately, it is really annoying to have a functioning computer without elogind" ~(do
(run "make-footnote 'xorg breaks under very specific circumstances that it does not want to explain'")
(run "make-footnote 'it does not use xorg'")) ", so it still uses some parts of systemd. ")
(p
"the framework 16 has an issue where the trackpad is able to wake the computer whilst it is asleep due to the lid bending. the trackpad, for some reason, does not appear in the list of acpi wakeup devices. "
"it is not sure why this is, however it is quite frustrating as its computer will turn on in its bag and cook itself until the battery is drained. "
"to fix this, it uses the following script with acpid:")
(figure
(figcaption "/etc/acpi/lid.sh")
(code ~(run "syntax-hl data/acpi-lid.sh")))
(p "this disables every acpi wakeup device when /proc/acpi/button/lid/LID0/state is closed, as well as unloading the i2c driver kernel module required for the trackpad to function. "
"upon the lid once again being opened, this driver is reloaded, allowing the trackpad to begin functioning again. this system effectively mitigates the issue of its computer being "
"woken by the trackpad while in its bag."))
(section
(h2 "environment")
(p "unfortunately, it uses hyprland. it hates hyprland, but it has yet to find a good compositor or window manager. recently, it has been considering moving to fvwm, but it needs to configure it first. "
"it has written its own status bar and notification ui. these may be found here: " ~(link "//git.natalieee.net/nat/ui") ". these programs are written using "
~(link "//git.natalieee.net/nat/astal-py" "its own python wrapper library") " around " ~(link "//github.com/aylur/astal" "libastal") ".")
(p "almost everything it does is from a terminal. exceptions to this are limited to web browsers, steam, and, unfortunately, discord, as well as occasionally qgis, gnuradio, kicad, and krita. "
"it avoids gimp if it can. it uses foot as its terminal, because it is the best unix terminal emulator it has been able to find." ~(run "make-footnote 'being a unix terminal emulator it still sucks, of course.'") " "
"it uses zsh as a shell, and neovim to edit text files. most of what it uses a computer for is editing text files, so neovim is a very important tool for it. "
"mpd is used to play music, because it refuses to use any service that contains ads and is unwilling to pay money to a service so as to make said service not serve ads. "
"it does not like being extorted, and, when possible, will not allow itself to be. other than the prior enumeration of software, it does not use much of note. "
"all file management is done via coreutils, because it cannot fathom why it wouldn't be. \"file managers\" are pointless and inconvenient."))
(section
(h2 "keyboard")
(p "thankfully, framework offers blank keyboards for purchase. this has saved it much time as, unlike with its old laptop, it did not have to sand its keyboard. "
"it uses an ISO layout keyboard, using a slightly customized version of the programmer dvorak layout. because the firmware for the framework 16 keyboard is just qmk, it has programmed this layout in to the firmware itself instead of dealing with silly things like custom xkb layouts."))
~(run "put-footnotes")
~(comments "/html/its-laptop.html")))

View File

@ -0,0 +1,7 @@
toot following 0x6e6174 | cut -d' ' -f2 | while read -r account; do
url="$(toot whois $account | grep -i site -A1 | grep -E 'https?://')/.well-known/button.json";
[ -n "${url}" ] && response="$(curl -s -o /dev/null -w '%{http_code}' "${url}")";
[ "$response" -eq "200" ] && body="$(curl -s "${url}" | jq -r '.default as $default | .buttons[] | select(.id == $default) | "<a href=\"\(.link)\" id=\"\(.id)\"><img src=\"\(.uri)\" alt=\"\(.alt)\"></a>"' 2>/dev/null)"
[ -n "${body}" ] && echo "${body}" > ./files/88x31/$(echo $url | sed 's/https:\/\///g; s/.well-known\/button.json//; s/\//-/g; s/.$//').html
body=''
done

11
www/src/scripts/execute-bash Executable file
View File

@ -0,0 +1,11 @@
#!/usr/bin/env hy
;; vim: filetype=hy
(import sys [argv])
(import re [sub])
(import os [environ :as hy-env])
(import subprocess [check-output])
(setv env hy-env)
(setv (get env "PATH") (+ (get hy-env "PATH") ":./scripts"))
(print (sub r"\$\[(.*?)\]" (fn [sequence] (. (check-output (.group sequence 1) :shell True :executable "/bin/bash" :env env) (decode) (strip))) (with [fp (open (get argv 1) "r")] (.read fp))))

11
www/src/scripts/img-caption Executable file
View File

@ -0,0 +1,11 @@
#!/bin/bash
path=$1
caption=$2
if [ -z "${caption}" ]; then
caption="$(basename "$path" | sed 's/-/ /g; s/\.[^.]*$//')"
fi
echo "<figure><a href='$path'><img src='$path' alt='$caption'></a><figcaption>$caption</figcaption></figure>"

8
www/src/scripts/include Executable file
View File

@ -0,0 +1,8 @@
#!/bin/sh
output="$(execute-bash $1)"
if [ -z "${2}" ]; then
echo "${output}" | sed "${2}"
else
echo "${output}"
fi

5
www/src/scripts/make-footnote Executable file
View File

@ -0,0 +1,5 @@
#!/bin/sh
id="$(wc -l /tmp/footnote_count | cut -d' ' -f1 | tr -d '\n')"
echo -n "<sup>[<a id=\"${id}_backref\" href=\"#${id}_ref\">${id}</a>]</sup>"
echo "<footnote style=\"margin: 0\" id=\"${id}_ref\"><span>${1}<sup>[<a href=\"#${id}_backref\">${id}</a>]</sup></span></footnote>" >> /tmp/footnotes
echo ' ' >> /tmp/footnote_count

5
www/src/scripts/make-link Executable file
View File

@ -0,0 +1,5 @@
if [ -z "${2}" ]; then
echo "<a href='$1'>$1</a>"
else
echo "<a href='$1'>$2</a>"
fi

5
www/src/scripts/put-footnotes Executable file
View File

@ -0,0 +1,5 @@
#!/bin/sh
echo '<div class="footnotes">'
cat /tmp/footnotes
echo '</div>'
echo > /tmp/footnotes

7
www/src/scripts/syntax-hl Executable file
View File

@ -0,0 +1,7 @@
#!/bin/bash
tmpfile=$(mktemp)
timeout 0.6s nvim "$1" -c "autocmd LspAttach * execute 'TOhtml | w! ${tmpfile} | qa!'" >/dev/null || nvim "$1" -c "TOhtml | w! ${tmpfile} | qa!" >/dev/null
cat "${tmpfile}" | pup --pre 'style, pre' | sed '/^$/d'