summary refs log tree commit diff
diff options
context:
space:
mode:
authorLain Iwakura <lain@lainmail.xyz>2025-12-27 20:37:57 +0300
committerLain Iwakura <lain@lainmail.xyz>2025-12-27 20:37:57 +0300
commit39870ae8471bc50e5042ba2d59de517b35f04216 (patch)
treeec28c77d639f286a2608238fed2a7b7b5e870402
downloadhome-39870ae8471bc50e5042ba2d59de517b35f04216.tar.gz
home-39870ae8471bc50e5042ba2d59de517b35f04216.zip
feat: home sweet home
-rw-r--r--.gitignore3
-rw-r--r--email.748
-rw-r--r--index.127
-rw-r--r--makefile21
-rw-r--r--scheme.css66
-rw-r--r--style.css29
6 files changed, 194 insertions, 0 deletions
diff --git a/.gitignore b/.gitignore
new file mode 100644
index 0000000..09e4fc8
--- /dev/null
+++ b/.gitignore
@@ -0,0 +1,3 @@
+*.html
+dist/
+.DS_store
diff --git a/email.7 b/email.7
new file mode 100644
index 0000000..314b920
--- /dev/null
+++ b/email.7
@@ -0,0 +1,48 @@
+.TH EMAIL 7 "2025" "unixfriends" "Miscellaneous Information"
+.SH NAME
+email \- contact information
+.SH DESCRIPTION
+This page contains the contact email address.
+
+.PP
+The address is intentionally not written in plain text.
+To obtain it, you must decode the following payload.
+
+.SH PAYLOAD
+.nf
+\&                                         ,--,
+\&          ____                        ,---.'|
+\&        ,'  , `.   ,---,         ,---,|   | :
+\&     ,-+-,.' _ |  '  .' \\     ,`--.' |:   : |
+\&  ,-+-. ;   , || /  ;    '.   |   :  :|   ' :
+\& ,--.'|'   |  ;|:  :       \\  :   |  ';   ; '
+\&|   |  ,', |  '::  |   /\\   \\ |   :  |'   | |__
+\&|   | /  | |  |||  :  ' ;.   :'   '  ;|   | :.'|
+\&'   | :  | :  |,|  |  ;/  \\   \\   |  |'   :    ;
+\&;   . |  ; |--' '  :  | \\  \\ ,'   :  ;|   |  ./
+\&|   : |  | ,    |  |  '  '--' |   |  ';   : ;
+\&|   : '  |/     |  :  :       '   :  ||   ,/
+\&;   | |`-'      |  | ,'       ;   |.' '---'
+\&|   ;/          `--''         '---'
+\&'---'
+\&                      (powered by OpenBSD OpenSMTPd)
+.fi
+
+.SH DECODE
+Run the following command in a POSIX shell:
+
+.nf
+echo "H4sIALoYUGkAA8tJzMxzyEnNzc8rSU3Uy8nP4QIAjNU6PhIAAAA=" | base64 -d | gzip -d
+.fi
+
+.SH NOTES
+This method is used to avoid automated address harvesting.
+
+.PP
+If you cannot decode this, you probably do not need the address.
+
+.SH SEE ALSO
+.Xr base32 1 ,
+.Xr gzip 1 ,
+.Xr base64 1 ,
+.Xr mandoc 1
diff --git a/index.1 b/index.1
new file mode 100644
index 0000000..a314228
--- /dev/null
+++ b/index.1
@@ -0,0 +1,27 @@
+.TH LAIN 1 "2025" "unixfriends" "User Pages"
+.SH NAME
+lain \- personal homepage
+.SH SYNOPSIS
+.B lain
+.RI [ options ]
+.SH DESCRIPTION
+Developer interested in backend, sysadmin and security.
+
+.SH CONTACTS
+.TP
+Email
+.UR email.html
+click here
+.UE
+.TP
+Telegram
+@pvlabs
+
+.SH DEVICES
+Thinkpad X230, Pixel 3a, Macbook Air M3, etc.
+
+.SH SEE ALSO
+man(1), plan9(7), nixos(8)
+
+.PP
+I believe websites should be fast, readable, and respectful of users.
diff --git a/makefile b/makefile
new file mode 100644
index 0000000..1d47f10
--- /dev/null
+++ b/makefile
@@ -0,0 +1,21 @@
+DIST=dist
+
+all: $(DIST)/index.html $(DIST)/email.html $(DIST)/style.css $(DIST)/scheme.css
+
+$(DIST):
+	mkdir -p $(DIST)
+
+$(DIST)/index.html: index.1 style.css | $(DIST)
+	mandoc -Thtml -Ostyle=style.css index.1 > $@
+
+$(DIST)/email.html: email.7 style.css | $(DIST)
+	mandoc -Thtml -Ostyle=style.css email.7 > $@
+
+$(DIST)/style.css: style.css | $(DIST)
+	cp style.css $@
+
+$(DIST)/scheme.css: scheme.css | $(DIST)
+	cp scheme.css $@
+
+clean:
+	rm -rf $(DIST)
diff --git a/scheme.css b/scheme.css
new file mode 100644
index 0000000..f22ad9c
--- /dev/null
+++ b/scheme.css
@@ -0,0 +1,66 @@
+/* taken from https://causal.agency/ */
+:root {
+	--ansi0: #161510;
+	--ansi1: #A32810;
+	--ansi2: #727A18;
+	--ansi3: #A37720;
+	--ansi4: #3D6266;
+	--ansi5: #7A4955;
+	--ansi6: #557A55;
+	--ansi7: #998D6B;
+	--ansi8: #4C4635;
+	--ansi9: #CC3214;
+	--ansi10: #8E991E;
+	--ansi11: #CC9528;
+	--ansi12: #4C7B7F;
+	--ansi13: #995B6B;
+	--ansi14: #6B996B;
+	--ansi15: #CCBC8E;
+	--ansi16: #14130E;
+	--ansi17: #B7A980;
+	--ansi18: #CCBC8E;
+	--ansi19: #A34110;
+	--ansi20: #7A7155;
+}
+.fg0 { color: var(--ansi0); }
+.bg0 { background-color: var(--ansi0); }
+.fg1 { color: var(--ansi1); }
+.bg1 { background-color: var(--ansi1); }
+.fg2 { color: var(--ansi2); }
+.bg2 { background-color: var(--ansi2); }
+.fg3 { color: var(--ansi3); }
+.bg3 { background-color: var(--ansi3); }
+.fg4 { color: var(--ansi4); }
+.bg4 { background-color: var(--ansi4); }
+.fg5 { color: var(--ansi5); }
+.bg5 { background-color: var(--ansi5); }
+.fg6 { color: var(--ansi6); }
+.bg6 { background-color: var(--ansi6); }
+.fg7 { color: var(--ansi7); }
+.bg7 { background-color: var(--ansi7); }
+.fg8 { color: var(--ansi8); }
+.bg8 { background-color: var(--ansi8); }
+.fg9 { color: var(--ansi9); }
+.bg9 { background-color: var(--ansi9); }
+.fg10 { color: var(--ansi10); }
+.bg10 { background-color: var(--ansi10); }
+.fg11 { color: var(--ansi11); }
+.bg11 { background-color: var(--ansi11); }
+.fg12 { color: var(--ansi12); }
+.bg12 { background-color: var(--ansi12); }
+.fg13 { color: var(--ansi13); }
+.bg13 { background-color: var(--ansi13); }
+.fg14 { color: var(--ansi14); }
+.bg14 { background-color: var(--ansi14); }
+.fg15 { color: var(--ansi15); }
+.bg15 { background-color: var(--ansi15); }
+.fg16 { color: var(--ansi16); }
+.bg16 { background-color: var(--ansi16); }
+.fg17 { color: var(--ansi17); }
+.bg17 { background-color: var(--ansi17); }
+.fg18 { color: var(--ansi18); }
+.bg18 { background-color: var(--ansi18); }
+.fg19 { color: var(--ansi19); }
+.bg19 { background-color: var(--ansi19); }
+.fg20 { color: var(--ansi20); }
+.bg20 { background-color: var(--ansi20); }
diff --git a/style.css b/style.css
new file mode 100644
index 0000000..e38ef00
--- /dev/null
+++ b/style.css
@@ -0,0 +1,29 @@
+/* styles from https://causal.agency/ */
+@import url("scheme.css");
+
+table.head, table.foot { width: 100%; }
+td.head-rtitle, td.foot-os { text-align: right; }
+td.head-vol { text-align: center; }
+div.Pp { margin: 1ex 0ex; }
+div.Nd, div.Bf, div.Op { display: inline; }
+span.Pa, span.Ad { font-style: italic; }
+span.Ms { font-weight: bold; }
+dl.Bl-diag > dt { font-weight: bold; }
+code.Nm, code.Fl, code.Cm, code.Ic, code.In, code.Fd, code.Fn,
+code.Cd { font-weight: bold; font-family: inherit; }
+
+div.head, div.foot { display: flex; justify-content: space-between; }
+.head-ltitle, .foot-date { flex: 1; }
+.head-vol { flex: 0 1 auto; text-align: center; }
+.head-rtitle, .foot-os { flex: 1; text-align: right; }
+
+html { font-family: monospace; line-height: 1.25em; }
+body { max-width: 80ch; margin: 1em auto; padding: 0 1ch; }
+table { border-collapse: collapse; }
+table.Nm code.Nm { padding-right: 1ch; }
+table.foot { margin-top: 1em; }
+
+html { background-color: var(--ansi16); color: var(--ansi17); }
+a { color: var(--ansi4); }
+a:visited { color: var(--ansi5); }
+a.permalink { color: var(--ansi3); text-decoration: none; }