From c0f2dfabf2395169a0bd248e8ca8b137753e8f87 Mon Sep 17 00:00:00 2001 From: Alex Karle Date: Tue, 14 Dec 2021 00:35:12 -0500 Subject: [PATCH] Move whole site from mdoc->nihdoc, with blog post! This is a mega commit from weeks of work on nihdoc [1] and generally reshaping every page on the website. I'm really pleased with how it turned out & am ready to show it to the world! Some big changes: - All pages are now .txt source instead of .7 mdoc, using my own custom markup parser (to keep it all in base) - New blog post announcing changes - The new format meant genatom and the gopher listing needed reworking (I think both look significantly better!) - All blog posts moved to /blog/ to enable a breadcrumb-style navigation. I'll set up redirects on httpd(8) to keep old links working as expected - All files moved into the www/ directory to match how the gopher/ directory is gopher-specific - The source (.txt) is now being bundled in the install, so that users (read: me) can introspect it. - There is a new builds.sr.ht config to enable akarle.srht.site to be a "deploy preview" of sorts (really nice to link to friends for feedback). I don't plan on using it for alexkarle.com any time soon due to (1) needing gopher support and (2) wanting to keep the redirects live. - I'm slowly moving towards recommending/linking sourcehut over linking to git.alexkarle.com -- I'm not deprecating the latter, but I have a feeling the former will outlive it (and I want to point it as a viable option for readers!) [1]: https://git.sr.ht/~akarle/nihdoc --- .build.yml | 19 +++++++++++++++++++ .gitignore | 18 +++++++----------- BLM.7 | 18 ------------------ LINKS | 11 ----------- Makefile | 117 ++++++++++++++++++++++++++++++++++++--------------------------------------------------------------------------------- ORDER | 18 ------------------ README.md | 51 +++++++++++++++++++-------------------------------- a-new-hope.7 | 22 ---------------------- bin/genatom.sh | 32 ++++++++++++++++---------------- bin/gencrumbs | 26 ++++++++++++++++++++++++++ bin/genpost.sh | 28 ---------------------------- bin/jam-index.sh | 74 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++------------------ bin/jam-stats.sh | 2 +- bin/newpost | 27 --------------------------- blog.7 | 67 ------------------------------------------------------------------- burrowing.7 | 113 ----------------------------------------------------------------------------------------------------------------- creative-coding.7 | 71 ----------------------------------------------------------------------- domain-names.7 | 41 ----------------------------------------- git/logo.png | Bin 0 -> 5972 bytes gopher/bin/blogidx.sh | 7 +++++++ gopher/blog/index.gph | 5 +++-- gopher/jam-tuesday/stats | 2 +- intro.7 | 38 -------------------------------------- jam-tuesday.7 | 37 ------------------------------------- jam-tuesday/2021-03-09 | 22 ---------------------- jam-tuesday/2021-03-16 | 33 --------------------------------- jam-tuesday/2021-03-23 | 26 -------------------------- jam-tuesday/2021-03-30 | 30 ------------------------------ jam-tuesday/2021-04-06 | 32 -------------------------------- jam-tuesday/2021-04-13 | 33 --------------------------------- jam-tuesday/2021-04-20 | 33 --------------------------------- jam-tuesday/2021-04-27 | 35 ----------------------------------- jam-tuesday/2021-05-04 | 35 ----------------------------------- jam-tuesday/2021-05-18 | 33 --------------------------------- jam-tuesday/2021-05-25 | 28 ---------------------------- jam-tuesday/2021-06-01 | 30 ------------------------------ jam-tuesday/2021-06-08 | 36 ------------------------------------ jam-tuesday/2021-06-15 | 35 ----------------------------------- jam-tuesday/2021-06-22 | 33 --------------------------------- jam-tuesday/2021-07-06 | 31 ------------------------------- jam-tuesday/2021-07-13 | 29 ----------------------------- jam-tuesday/2021-07-20 | 37 ------------------------------------- jam-tuesday/2021-07-27 | 39 --------------------------------------- jam-tuesday/index.html | 255 --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- license.7 | 26 -------------------------- logo.png | Bin 5972 -> 0 bytes make-obj.7 | 156 ------------------------------------------------------------------------------------------------------------------------------------------------------------ my-old-man.7 | 159 --------------------------------------------------------------------------------------------------------------------------------------------------------------- on-writing.7 | 58 ---------------------------------------------------------- self-hosted.7 | 98 -------------------------------------------------------------------------------------------------- style.css | 90 ------------------------------------------------------------------------------------------ text-only.7 | 89 ----------------------------------------------------------------------------------------- use-feeds.7 | 142 ---------------------------------------------------------------------------------------------------------------------------------------------- use-git.7 | 141 --------------------------------------------------------------------------------------------------------------------------------------------- uses.7 | 129 --------------------------------------------------------------------------------------------------------------------------------- www/LICENSE | 1 + www/blog/BLM.txt | 12 ++++++++++++ www/blog/a-new-hope.txt | 13 +++++++++++++ www/blog/burrowing.txt | 78 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ www/blog/creative-coding.txt | 44 ++++++++++++++++++++++++++++++++++++++++++++ www/blog/domain-names.txt | 38 ++++++++++++++++++++++++++++++++++++++ www/blog/index.txt | 33 +++++++++++++++++++++++++++++++++ www/blog/make-obj.txt | 87 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ www/blog/mdoc-to-nihdoc.txt | 164 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ www/blog/my-old-man-orig.html | 268 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ www/blog/my-old-man.txt | 143 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ www/blog/on-writing.txt | 48 ++++++++++++++++++++++++++++++++++++++++++++++++ www/blog/self-hosted.txt | 54 ++++++++++++++++++++++++++++++++++++++++++++++++++++++ www/blog/text-only.txt | 70 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ www/blog/use-feeds.txt | 100 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ www/blog/use-git.txt | 102 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ www/footer.html | 5 +++++ www/header.html | 32 ++++++++++++++++++++++++++++++++ www/index.txt | 49 +++++++++++++++++++++++++++++++++++++++++++++++++ www/jam-tuesday/2021-03-09 | 22 ++++++++++++++++++++++ www/jam-tuesday/2021-03-16 | 33 +++++++++++++++++++++++++++++++++ www/jam-tuesday/2021-03-23 | 26 ++++++++++++++++++++++++++ www/jam-tuesday/2021-03-30 | 30 ++++++++++++++++++++++++++++++ www/jam-tuesday/2021-04-06 | 32 ++++++++++++++++++++++++++++++++ www/jam-tuesday/2021-04-13 | 33 +++++++++++++++++++++++++++++++++ www/jam-tuesday/2021-04-20 | 33 +++++++++++++++++++++++++++++++++ www/jam-tuesday/2021-04-27 | 35 +++++++++++++++++++++++++++++++++++ www/jam-tuesday/2021-05-04 | 35 +++++++++++++++++++++++++++++++++++ www/jam-tuesday/2021-05-18 | 33 +++++++++++++++++++++++++++++++++ www/jam-tuesday/2021-05-25 | 28 ++++++++++++++++++++++++++++ www/jam-tuesday/2021-06-01 | 30 ++++++++++++++++++++++++++++++ www/jam-tuesday/2021-06-08 | 36 ++++++++++++++++++++++++++++++++++++ www/jam-tuesday/2021-06-15 | 35 +++++++++++++++++++++++++++++++++++ www/jam-tuesday/2021-06-22 | 33 +++++++++++++++++++++++++++++++++ www/jam-tuesday/2021-07-06 | 31 +++++++++++++++++++++++++++++++ www/jam-tuesday/2021-07-13 | 29 +++++++++++++++++++++++++++++ www/jam-tuesday/2021-07-20 | 37 +++++++++++++++++++++++++++++++++++++ www/jam-tuesday/2021-07-27 | 39 +++++++++++++++++++++++++++++++++++++++ www/jam-tuesday/index.html | 293 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ www/license.txt | 9 +++++++++ www/uses.txt | 104 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 96 files changed, 2548 insertions(+), 2606 deletions(-) create mode 100644 .build.yml delete mode 100644 BLM.7 delete mode 100644 LINKS delete mode 100644 ORDER delete mode 100644 a-new-hope.7 create mode 100755 bin/gencrumbs delete mode 100755 bin/genpost.sh delete mode 100755 bin/newpost delete mode 100644 blog.7 delete mode 100644 burrowing.7 delete mode 100644 creative-coding.7 delete mode 100644 domain-names.7 create mode 100644 git/logo.png create mode 100755 gopher/bin/blogidx.sh delete mode 100644 intro.7 delete mode 100644 jam-tuesday.7 delete mode 100644 jam-tuesday/2021-03-09 delete mode 100644 jam-tuesday/2021-03-16 delete mode 100644 jam-tuesday/2021-03-23 delete mode 100644 jam-tuesday/2021-03-30 delete mode 100644 jam-tuesday/2021-04-06 delete mode 100644 jam-tuesday/2021-04-13 delete mode 100644 jam-tuesday/2021-04-20 delete mode 100644 jam-tuesday/2021-04-27 delete mode 100644 jam-tuesday/2021-05-04 delete mode 100644 jam-tuesday/2021-05-18 delete mode 100644 jam-tuesday/2021-05-25 delete mode 100644 jam-tuesday/2021-06-01 delete mode 100644 jam-tuesday/2021-06-08 delete mode 100644 jam-tuesday/2021-06-15 delete mode 100644 jam-tuesday/2021-06-22 delete mode 100644 jam-tuesday/2021-07-06 delete mode 100644 jam-tuesday/2021-07-13 delete mode 100644 jam-tuesday/2021-07-20 delete mode 100644 jam-tuesday/2021-07-27 delete mode 100644 jam-tuesday/index.html delete mode 100644 license.7 delete mode 100644 logo.png delete mode 100644 make-obj.7 delete mode 100644 my-old-man.7 delete mode 100644 on-writing.7 delete mode 100644 self-hosted.7 delete mode 100644 style.css delete mode 100644 text-only.7 delete mode 100644 use-feeds.7 delete mode 100644 use-git.7 delete mode 100644 uses.7 create mode 120000 www/LICENSE create mode 100644 www/blog/BLM.txt create mode 100644 www/blog/a-new-hope.txt create mode 100644 www/blog/burrowing.txt create mode 100644 www/blog/creative-coding.txt create mode 100644 www/blog/domain-names.txt create mode 100644 www/blog/index.txt create mode 100644 www/blog/make-obj.txt create mode 100644 www/blog/mdoc-to-nihdoc.txt create mode 100644 www/blog/my-old-man-orig.html create mode 100644 www/blog/my-old-man.txt create mode 100644 www/blog/on-writing.txt create mode 100644 www/blog/self-hosted.txt create mode 100644 www/blog/text-only.txt create mode 100644 www/blog/use-feeds.txt create mode 100644 www/blog/use-git.txt create mode 100644 www/footer.html create mode 100644 www/header.html create mode 100644 www/index.txt create mode 100644 www/jam-tuesday/2021-03-09 create mode 100644 www/jam-tuesday/2021-03-16 create mode 100644 www/jam-tuesday/2021-03-23 create mode 100644 www/jam-tuesday/2021-03-30 create mode 100644 www/jam-tuesday/2021-04-06 create mode 100644 www/jam-tuesday/2021-04-13 create mode 100644 www/jam-tuesday/2021-04-20 create mode 100644 www/jam-tuesday/2021-04-27 create mode 100644 www/jam-tuesday/2021-05-04 create mode 100644 www/jam-tuesday/2021-05-18 create mode 100644 www/jam-tuesday/2021-05-25 create mode 100644 www/jam-tuesday/2021-06-01 create mode 100644 www/jam-tuesday/2021-06-08 create mode 100644 www/jam-tuesday/2021-06-15 create mode 100644 www/jam-tuesday/2021-06-22 create mode 100644 www/jam-tuesday/2021-07-06 create mode 100644 www/jam-tuesday/2021-07-13 create mode 100644 www/jam-tuesday/2021-07-20 create mode 100644 www/jam-tuesday/2021-07-27 create mode 100644 www/jam-tuesday/index.html create mode 100644 www/license.txt create mode 100644 www/uses.txt diff --git a/.build.yml b/.build.yml new file mode 100644 index 0000000..8b4ef5e --- /dev/null +++ b/.build.yml @@ -0,0 +1,19 @@ +# srht.site build +image: openbsd/latest +oauth: pages.sr.ht/PAGES:RW +sources: + - https://git.sr.ht/~akarle/alexkarle.com + - https://git.sr.ht/~akarle/nihdoc +environment: + site: akarle.srht.site +tasks: +- package: | + make -C nihdoc + env PATH="$PWD/nihdoc:$PATH" make -C alexkarle.com + cd alexkarle.com/www && tar -cvhzf ../../site.tar.gz . +- upload: | + acurl -f https://pages.sr.ht/publish/$site -Fcontent=@site.tar.gz +triggers: +- action: email + condition: always + to: ci@alexkarle.com diff --git a/.gitignore b/.gitignore index 2162783..3894934 100644 --- a/.gitignore +++ b/.gitignore @@ -1,13 +1,9 @@ -# generated html from man pages -/*.html -/*.txt +# generated html +*.html +!www/header.html +!www/footer.html +!www/jam-tuesday/index.html +!www/blog/my-old-man-orig.html -# atom feed is generated by ./bin/genatom.sh +# atom feeds are generated atom.xml -gopher.atom - -# obj directory on OpenBSD for out-of-tree builds -obj/ - -# Generated sed command to touch up out-of-base Xr references -bin/fixlinks diff --git a/BLM.7 b/BLM.7 deleted file mode 100644 index fde032b..0000000 --- a/BLM.7 +++ /dev/null @@ -1,18 +0,0 @@ -.Dd July 13, 2020 -.Dt BLM 7 -.Os -.Sh NAME -.Nm BLM -.Nd Black Lives Matter -.Sh DESCRIPTION -I meant to post about this earlier, but it's better late than never. -.Pp -It's become abundantly clear to me that we need serious structural changes in our country. -I want to raise my voice in solidarity to say that Black Lives Matter. -.Sh SEE ALSO -.Bl -bullet -compact -.It -.Lk https://blacklivesmatter.com -.It -.Xr blog 7 -.El diff --git a/LINKS b/LINKS deleted file mode 100644 index 03092c5..0000000 --- a/LINKS +++ /dev/null @@ -1,11 +0,0 @@ -vim.1 https://www.vim.org -git.1 https://git-scm.com/ -mutt.1 http://mutt.org -pass.1 https://www.passwordstore.org -newsboat.1 https://newsboat.org -stagit.1 https://git.codemadness.org/stagit/ -git-daemon.1 https://git-scm.com/docs/git-daemon -gophernicus.8 https://gophernicus.org -bombadillo.1 https://bombadillo.colorfield.space/ -lynx.1 https://lynx.invisible-island.net/ -sacc.1 https://git.fifth.space/sacc diff --git a/Makefile b/Makefile index 4c1e808..f6e9cf0 100644 --- a/Makefile +++ b/Makefile @@ -1,112 +1,67 @@ # alexkarle.com makefile -# -# a tale of two builds -# -# This Makefile builds both gopher://alexkarle.com (text-only) and -# alexkarle.com (html) from the same mdoc(7) by leveraging inference -# rules. Since this generates a LOT of derived files, it's recommended -# to run BSD make and run `make obj` first to get an out-of-tree build. -# GNU make should work in a pinch though! -# -# targets: -# build [default] -- generates html and text in obj (OpenBSD) or $PWD -# obj -- makes the obj/ directory for out-of-tree build on OpenBSD -# clean -- deletes html and text artifacts -# install -- install to $DESTDIR/{www,gopher} (default: /var/www/htdocs) -# jams -- regenerate jam-tuesday index and stats files - -# gmake defines CURDIR, OpenBSD defines .CURDIR -- one should work -DIR = $(.CURDIR)$(CURDIR) DESTDIR = /var/www/htdocs +CFLAGS = -g -O2 -Wall -Wpedantic -Wextra # Variables used to determine what to build (and clean) -HTML != echo $(DIR)/*.[1-9] | sed 's@$(DIR)/\([^\.]*\)\.[1-9]@\1.html@g' -TEXT != echo $(DIR)/*.[1-9] | sed 's@$(DIR)/\([^\.]*\)\.[1-9]@\1.txt@g' -SETS != find $(DIR)/jam-tuesday -name '[0-9][0-9][0-9][0-9]-*' -NOTES != find $(DIR)/gopher/notes/all -PHLOG != find $(DIR)/gopher/phlog +HTML != echo www/*.txt www/blog/*.txt | sed 's@\([^\.]*\)\.txt@\1.html@g' +SETS != find www/jam-tuesday -name '[0-9][0-9][0-9][0-9]-*' +NOTES != find gopher/notes/all +PHLOG != find gopher/phlog BUILT = $(HTML) \ - $(TEXT) \ - atom.xml \ - index.html \ gopher/notes/index.gph \ - gopher.atom - + gopher/phlog/atom.xml \ + www/atom.xml # Top level targets .PHONY: build build: $(BUILT) .PHONY: jams -jams: jam-tuesday/stats jam-tuesday/index.html - -obj: - mkdir -p obj/jam-tuesday obj/bin obj/gopher/notes +jams: gopher/jam-tuesday/stats www/jam-tuesday/index.html .PHONY: install install: build - # HTML to DESTDIR/www - install -m 755 -Dd $(DESTDIR)/www/jam-tuesday - install -m 444 $(SETS) $(DIR)/jam-tuesday/index.html $(DESTDIR)/www/jam-tuesday - install -m 444 *.html atom.xml $(DIR)/LICENSE $(DIR)/style.css $(DESTDIR)/www - # Text + gopher exclusives to DESTDIR/gopher - cd $(DIR) && pax -rw gopher $(DESTDIR) - pax -rw gopher $(DESTDIR) # for out-of-tree builds + pax -rw www $(DESTDIR) + pax -rw gopher $(DESTDIR) install -m 444 $(SETS) $(DESTDIR)/gopher/jam-tuesday - install -m 444 $(DIR)/LICENSE $(DESTDIR)/gopher - for f in *.txt; do \ - install -m 444 $$f $(DESTDIR)/gopher/blog/$$(grep $$f $(DIR)/ORDER); \ - done - install -m 444 atom.xml $(DESTDIR)/gopher/blog - cp $(DIR)/gopher/bin/* $(DESTDIR)/gopher/code - for d in jam-tuesday blog code; do \ - (cat $(DIR)/gopher/$$d/index.gph; \ - $(DIR)/gopher/bin/dirlist $(DESTDIR)/gopher/$$d)\ + install -m 444 LICENSE $(DESTDIR)/gopher + install -m 444 www/blog/*.txt www/atom.xml $(DESTDIR)/gopher/blog + install -m 444 gopher/bin/* $(DESTDIR)/gopher/code + for d in jam-tuesday code; do \ + (cat gopher/$$d/index.gph; \ + gopher/bin/dirlist $(DESTDIR)/gopher/$$d)\ > $(DESTDIR)/gopher/$$d/index.gph; \ done - install -m 444 gopher.atom $(DESTDIR)/gopher/phlog/atom.xml + (cat gopher/blog/index.gph; gopher/bin/blogidx.sh) > $(DESTDIR)/gopher/blog/index.gph .PHONY: clean clean: - rm -f $(BUILT) bin/fixlinks - + rm -f $(BUILT) # Individual files to build -jam-tuesday/stats: $(SETS) bin/jam-stats.sh - (date; echo; $(DIR)/bin/jam-stats.sh -f) > $@ - -jam-tuesday/index.html: $(SETS) bin/jam-index.sh bin/jam-stats.sh - $(DIR)/bin/jam-index.sh > $@ +gopher/jam-tuesday/stats: $(SETS) bin/jam-stats.sh + (date; echo; ./bin/jam-stats.sh -f) > $@ -index.html: - ln -sf intro.html index.html +www/jam-tuesday/index.html: $(SETS) bin/jam-index.sh bin/jam-stats.sh + ./bin/jam-index.sh > $@ -atom.xml: blog.7 bin/genatom.sh - $(DIR)/bin/genatom.sh > $@ - -bin/fixlinks: LINKS - mkdir -p bin - printf "#!/bin/sh\n# GENERATED DO NOT EDIT\nsed" > $@ - awk '{ printf " \\\n -e s#https://man.openbsd.org/%s#%s#g", $$1, $$2 } END { printf "\n" }' $(DIR)/LINKS >> $@ - chmod +x $@ +www/atom.xml: $(HTML) bin/genatom.sh + ./bin/genatom.sh > $@ gopher/notes/index.gph: $(NOTES) - (cd $(DIR)/gopher/notes && $(DIR)/gopher/bin/notetag) > $@ - -gopher.atom: $(PHLOG) gopher/bin/gophatom.sh - $(DIR)/gopher/bin/gophatom.sh > $@ + (cd gopher/notes && ../bin/notetag) > $@ -# Inference rules (*.txt and *.html) -$(HTML): bin/genpost.sh bin/fixlinks +gopher/phlog/atom.xml: $(PHLOG) gopher/bin/gophatom.sh + ./gopher/bin/gophatom.sh > $@ -.SUFFIXES: .7 .txt .html -.7.html: - @echo "mandoc -Thtml $<" - @mandoc -Tlint -Werror $< - @$(DIR)/bin/genpost.sh < $< > $@ +# Inference rules (*.txt -> *.html) +$(HTML): Makefile www/header.html www/footer.html bin/gencrumbs -.7.txt: - @echo "mandoc -Tascii $<" - @mandoc -Tlint -Werror $< - @mandoc -Tascii -Owidth=72 < $< | col -b > $@ +.SUFFIXES: .txt .html +.txt.html: + @echo "building $@" + @(cat www/header.html; \ + ./bin/gencrumbs $@; \ + nihdoc < $< ; \ + cat www/footer.html) > $@ diff --git a/ORDER b/ORDER deleted file mode 100644 index 225b7f1..0000000 --- a/ORDER +++ /dev/null @@ -1,18 +0,0 @@ -# file order for the text.alexkarle.com site -001-intro.txt -002-license.txt -003-uses.txt -004-jam-tuesday.txt -101-blog.txt -102-a-new-hope.txt -103-domain-names.txt -104-BLM.txt -105-self-hosted.txt -106-on-writing.txt -107-my-old-man.txt -108-use-feeds.txt -109-creative-coding.txt -110-text-only.txt -111-make-obj.txt -112-use-git.txt -113-burrowing.txt diff --git a/README.md b/README.md index c629b7e..48b4496 100644 --- a/README.md +++ b/README.md @@ -4,32 +4,25 @@ My small corner of the internet. www. ---- -A static site comprised of [mdoc(7)][mdoc] flavored man pages, built to -HTML via [mandoc(1)][mandoc] (managed by [make(1)][make]). +A small static blog powered by my own personal markup parser, [nihdoc]. -Currently hosted with OpenBSD's [httpd(8)][httpd], but any web server -should be able to serve it up. - -The Makefile to build the HTML is portable between gmake and BSD make. -On OpenBSD, running `make obj` is recommended before running `make` to -leverage the out-of-tree build extension (see the bit about `.OBJDIR` in -the man page!). +Currently hosted with OpenBSD's [httpd(8)], but any web server should be +able to serve it up. gopher:// --------- -A pure ascii dump of the [mdoc(7)][mdoc] content of the www site, served -over Gopher by [geomyidae(1)][geomyidae] respectively! +A pure ascii dump of the content of the www site, served over Gopher by +[geomyidae(1)] respectively! -Builds via [make(1)][make] at the same time as the HTML. See above for -instructions. +Builds via [make(1)] at the same time as the HTML. Also has gopher-exclusive content! git. ---- -I use a simple setup of git-daemon for anonymous (read-only) downloads, -ssh+git for read+write access (limited to myself) and -[stagit(1)][stagit] to host static views into the diffs and files of +I use a simple setup of [git-daemon(8)] for anonymous (read-only) downloads, +ssh+git for read+write access (limited to myself) and [stagit(1)] to +host static views into the diffs and files of each repo. I like the stagit approach in that it is simple, modular, and emphasizes @@ -38,19 +31,13 @@ etc). I use the default post-receive and create scripts that ship with the tool (with small modifications for the installation). The logo is in -this repo as logo.png. - -The content, being static, is served up with [httpd(8)][httpd] as well. - -I also discuss the setup in my blog posts [self-hosted(7)][self-hosted] -and [my-old-man(7)][my-old-man]. - -[mdoc]: https://man.openbsd.org/mdoc.7 -[mandoc]: https://man.openbsd.org/mandoc.1 -[make]: https://man.openbsd.org/make.1 -[httpd]: https://man.openbsd.org/httpd.8 -[stagit]: https://git.codemadness.org/stagit -[git-daemon]: https://git-scm.com/docs/git-daemon -[self-hosted]: https://alexkarle.com/self-hosted.html -[my-old-man]: https://alexkarle.com/my-old-man.html -[geomyidae]: http://r-36.net/scm/geomyidae +this repo as git/logo.png. + +The content, being static, is served up with [httpd(8)] as well. + +[make(1)]: https://man.openbsd.org/make.1 +[httpd(8)]: https://man.openbsd.org/httpd.8 +[stagit(1)]: https://git.codemadness.org/stagit +[git-daemon(8)]: https://git-scm.com/docs/git-daemon +[geomyidae(1)]: http://r-36.net/scm/geomyidae +[nihdoc]: https://git.sr.ht/~akarle/nihdoc diff --git a/a-new-hope.7 b/a-new-hope.7 deleted file mode 100644 index 14a8e4b..0000000 --- a/a-new-hope.7 +++ /dev/null @@ -1,22 +0,0 @@ -.Dd December 19, 2019 -.Dt A-NEW-HOPE 7 -.Os -.Sh NAME -.Nm a-new-hope -.Nd cliche first blog post? -.Sh DESCRIPTION -Toying with the thought of starting a website/blog. -.Pp -Exploring my hosting options and pleasantly surprised that -.Lk https://fastmail.com FastMail -has free static site hosting! -.Pp -Inspired by Jeff Huang's article on websites Designed to Last -and a general desire for a simpler web. -.Sh SEE ALSO -.Bl -bullet -compact -.It -.Lk https://jeffhuang.com/designed_to_last -.It -.Xr blog 7 -.El diff --git a/bin/genatom.sh b/bin/genatom.sh index 6f04900..76bd385 100755 --- a/bin/genatom.sh +++ b/bin/genatom.sh @@ -4,17 +4,13 @@ set -e REPO=$(dirname "$(dirname "$0")") -# Find fixlinks in either bin or the out-of-tree obj build -PATH="$REPO/bin:$REPO/obj/bin:$PATH" - -# All posts are a item (.It) in the list, and linked via .Xr -POSTS=$(sed '/SEE ALSO/q' "$REPO/blog.7" | grep -A1 '\.It' | grep '\.Xr' | sed 's/^\.Xr \([^ ]*\) 7/\1/') +POSTS=$(grep '^- ../..' "$REPO/www/blog/index.txt" | sed 's#.*/blog/\([^)]*\).*#\1#') cat <
- Alex Karle's blog(7) - + Alex Karle's blog + https://alexkarle.com/atom.xml @@ -22,26 +18,30 @@ cat <
HEADER -for p in $POSTS; do - d=$(date -juf"%b %d, %Y" +%F "$(grep '^\.Dd' "$REPO/$p.7" | cut -d' ' -f2-)") +for post in $POSTS; do + p=$(basename $post .html) + src="$REPO/www/blog/$p.txt" + [ "$p" = "index" ] && continue + + d=$(date -juf"%b %d, %Y" +%F \ + "$(grep '^_Published' "$src" | sed 's/_Published: \([^_]*\)_/\1/')") if [ -z "$printed_update" ]; then printed_update=1 printf " %s\n" "${d}T00:00:00Z" fi + + title=$(sed -e 's/^# //' -e '1q' "$src") cat < - $p - - https://alexkarle.com/$p.html + $title + + https://alexkarle.com/blog/$p.html ${d}T00:00:00Z ${d}T00:00:00Z Miscellaneous Information Manual<\/td>/d' \ - | fixlinks + nihdoc < "$src" cat < diff --git a/bin/gencrumbs b/bin/gencrumbs new file mode 100755 index 0000000..18bd815 --- /dev/null +++ b/bin/gencrumbs @@ -0,0 +1,26 @@ +#!/bin/sh +# generate breadcrumbs +set -e +die() { + echo "$*" 1>&2 + exit 1 +} + +[ -z "$1" ] && die "usage: gencrumbs FILE" + +REPO=$(dirname "$(dirname "$(readlink -f "$0")")") +FILE=$(readlink -f "$1") + +rel=${FILE##$REPO/www} +parts=$(echo "$rel" | sed 's#/# #g') + +printf "/home/alex" +curr="" +for p in $parts; do + if [ "$p" = "index.html" ]; then + continue + fi + curr="$curr/$p" + printf " / $p" +done +echo "" diff --git a/bin/genpost.sh b/bin/genpost.sh deleted file mode 100755 index b72bff5..0000000 --- a/bin/genpost.sh +++ /dev/null @@ -1,28 +0,0 @@ -#!/bin/sh -# genpost.sh -- reads mdoc(7) from stdin, generates HTML to stdout -REPO=$(dirname "$(dirname "$0")") - -# cd into $REPO so that the includes work! -cd $REPO - -# Find fixlinks in either bin or the out-of-tree obj build -PATH="$REPO/bin:$REPO/obj/bin:$PATH" - -# Command Explained -# ----------------- -# man=%N.html;man.openbsd.org -- look for files in CWD for .Xr, then link to openbsd.org -# sed: -# 1. Add a viewport tag for mobile -# 2. Add lang="en" to head for accessibility -# 3. Remove Misc Info column in header (too large on mobile) -# 4. Add a footer with license info -# 5. Correct various off-site links (i.e. .Xr st -> st.suckless.org instead of openbsd.org) -mandoc -Thtml -O 'man=%N.html;https://man.openbsd.org/%N.%S,style=style.css' \ - | sed \ - -e 's##&# ' \ - -e 's#^Miscellaneous Information Manual<\/td>/d' \ - -e 's##

\ - © 2019-2021 Alex Karle | Home | License\ -

\ -&#' | fixlinks diff --git a/bin/jam-index.sh b/bin/jam-index.sh index b8c2b2f..15076e7 100755 --- a/bin/jam-index.sh +++ b/bin/jam-index.sh @@ -1,7 +1,7 @@ #!/bin/sh set -e REPO=$(dirname "$(dirname "$0")") -DIR="$REPO/jam-tuesday" +DIR="$REPO/www/jam-tuesday" # Prep for the by artist listing ALL=$(mktemp) @@ -10,33 +10,73 @@ for f in "$DIR"/[0-9][0-9][0-9][0-9]-*; do done | sort -f > "$ALL" cat < - + + Jam Tuesday Archive - +/home/alex / jam-tuesday

Jam Tuesday Archive

-

Welcome to the archive! For more information on the project, -refer to jam-tuesday(7).

+

About

+

+From about October 2020 up until August 2021, my brother Matt and I +got together every Tuesday evening to play music. It started as a +way to stay sane during the COVID quarantine, but it quickly became +a tradition and a highlight of the week. No matter how stressful +work was, or what was going on in the outside world, we could leave +it all behind as we played some of our favorite tunes. +

+

+At some point (woefully late), I realized it would be fun to start +cataloging what we played. +

+

+This archive includes the setlists and some play stats. +

+

+There are no audio recordings (at least publicly), but there's a +stray note here and there to "set the scene". +

+

+The setlist notation is hopefully pretty straightforward. Unless +otherwise noted, I'm on guitar and Matt's on keys (and if only one +instrument is specified, it's me switching to it). We both +(attempt to) sing. Sometimes we even harmonize :) +

Stats

-
EOM "$REPO"/bin/jam-stats.sh | sed \ @@ -48,20 +88,18 @@ EOM cat <

Setlists

-
Updated weekly:
    EOM for f in "$DIR"/[0-9][0-9][0-9][0-9]-*; do name=$(basename "$f") - echo "
  • $name
  • " + echo "
  • $name
  • " done cat <

    All Songs, by Artist

    -
    EOM diff --git a/bin/jam-stats.sh b/bin/jam-stats.sh index a7b18b6..4c30dbd 100755 --- a/bin/jam-stats.sh +++ b/bin/jam-stats.sh @@ -5,7 +5,7 @@ set -e N=10 REPO=$(dirname "$(dirname "$0")") -DIR="$REPO/jam-tuesday" +DIR="$REPO/www/jam-tuesday" TMP=$(mktemp) num_sessions=0 for set in "$DIR"/[0-9][0-9][0-9][0-9]-*; do diff --git a/bin/newpost b/bin/newpost deleted file mode 100755 index 2289f53..0000000 --- a/bin/newpost +++ /dev/null @@ -1,27 +0,0 @@ -#!/bin/sh -set -e -die() { - echo "$1" 1>&2 - exit 1 -} - -[ -z "$1" ] && die "usage: $(basename "$0") NAME" - -name="$1" -TITLE=$(printf "$name" | tr [a-z] [A-Z]) - -cat < "$name".7 -.Dd $(date +"%B %d, %Y") -.Dt $TITLE 7 -.Os -.Sh NAME -.Nm $name -.Nd -.Sh DESCRIPTION -entry -.Sh SEE ALSO -.Bl -bullet -compact -.It -.Xr blog 7 -.El -EOM diff --git a/blog.7 b/blog.7 deleted file mode 100644 index 4e6ff22..0000000 --- a/blog.7 +++ /dev/null @@ -1,67 +0,0 @@ -.Dd $Mdocdate$ -.Dt BLOG 7 -.Os -.Sh NAME -.Nm blog -.Nd yet another weblog -.Sh DESCRIPTION -I don't write frequently, but when I do, it's usually about tech. -.Pp -If you'd like to get notifications on new articles, I publish an -.Lk atom.xml Atom -feed (for use with your favorite RSS/Atom client). -.Pp -For an up to date list of software/hardware I use, see -.Xr uses 7 . -.Sh POSTS -.Bl -tag -width "XX/XX" -.It 11/21 -.Xr burrowing 7 -- from -.Xr text-only 7 -to gopher-only -.It 11/21 -.Xr use-git 7 -- non-standard uses of -.Xr git 1 -.It 09/21 -.Xr make-obj 7 -- out-of-tree builds with BSD -.Xr make 1 -.It 09/21 -.Xr text-only 7 -- announcing text.alexkarle.com -.It 07/21 -.Xr creative-coding 7 -- learning through creative limitation -.It 02/21 -.Xr use-feeds 7 -- RSS/Atom feeds; what, why, and how -.It 12/20 -.Xr my-old-man 7 -- Adventures in using -.Xr mdoc 7 -for this site -.It 10/20 -.Xr on-writing 7 -- On Writing Without an Audience -.It 07/20 -.Xr self-hosted 7 -- Migrating to a Self-Hosted Site -.It 07/20 -.Xr BLM 7 -- Black Lives Matter -.It 03/20 -.Xr domain-names 7 -- What's in a (domain) name? -.It 12/19 -.Xr a-new-hope 7 -- A New Hope -.El -.Sh SEE ALSO -.Bl -bullet -compact -.It -.Xr intro 7 -.It -.Xr jam-tuesday 7 -.El diff --git a/burrowing.7 b/burrowing.7 deleted file mode 100644 index e043c6f..0000000 --- a/burrowing.7 +++ /dev/null @@ -1,113 +0,0 @@ -.Dd November 15, 2021 -.Dt BURROWING 7 -.Os -.Sh NAME -.Nm burrowing -.Nd from -.Xr text-only 7 -to gopher-only -.Sh DESCRIPTION -This past month, -I've spent a lot of time learning about gopher. -It's truly a fascinating alternative to the world wide web, -not just in the content found there -but also in terms of the protocol itself. -.Pp -As of this writing, I've decided to deprecate -.Lk https://text.alexkarle.com -in favor of serving that content (and more!) over gopher -instead, exclusively. -.Sh IMPLICATIONS -This shouldn't have much impact on this -.Xr blog 7 . -After all, -.Xr text-only 7 -was an experiment to begin with! -I'll still keep publishing semi-regularly here, -I just don't plan on maintaining a text dump via HTTP. -.Pp -I will, however, start publishing gopher-only content. -There's two main reasons for this: -.Pp -.Bl -enum -compact -.It -I want to see more activity on gopher -.It -Gopher is easier to publish on -.El -.Pp -Admittedly, number 2 is my own doing. -I moved this blog to -.Xr mdoc 7 -willingly -.Xr ( my-old-man 7 ) -to learn the language. -I've found that it slows my raw output, -which, -while fine for longer form pieces, -is a pain for shorter-form thoughts. -No regrets (I learned a ton!), -but shorter-form thoughts do much better in plaintext! -.Pp -The first reason is a theme for this blog: -be the change you want to see. -I would love to see more content on gopher, -so I'm taking the plunge. -.Sh THE PITCH -So, why gopher? -Probably the biggest reason to explore gopher is -the content. -It's a parallel network totally untouched by -commercial interests. -You won't see a single ad. -.Pp -The second reason to try gopher lies in the -protocol itself--gopher has a standardized menu -interface, and individual gopherholes cannot -change the way you interact with them beyond -the standard. -In a world where it seems every bit of the -web's UI has been rewritten in JavaScript (looking -at you,
    's that should be
    ArtistSongPlays
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    ArtistSongPlays
    311Amber1
    A Great Big Pile Of LeavesAlligator Bop1
    A Tribe Called QuestCan I Kick It?1
    Anderson .PaakMake It Better1
    Anderson .Paak & Bruno MarsLeave the Door Open1
    Atta BoyJack and Blow8
    Walden Pond2
    Bad BooksBaby Shoes1
    Forest Whitaker1
    It Never Stops1
    The After Party2
    You Wouldn't Have To Ask1
    BeckLoser1
    Cage The ElephantCigarette Daydreams6
    Shake Me Down1
    Telescope1
    Trouble1
    CakeComfort Eagle1
    CarpentersClose To You1
    Carrie UnderwoodBefore He Cheats1
    Daniel CaesarJapanese Denim1
    Darwin DeezRadar Detector2
    Death Cab For CutieI Will Posess Your Heart1
    Dojo CatSay So1
    Dr. DogNellie1
    Shadow People10
    Stranger2
    The Beers/Shadow People1
    The Breeze1
    Twin Size/Shadow People/Beers1
    EurythmicsSweet Dreams1
    Eve 6Inside Out1
    Father John MistyReal Love Baby4
    Fleet FoxesWhite Winter Hymnal1
    Foo FightersLearn To Fly1
    The Pretender1
    Goo Goo DollsIris1
    GorillazFeel Good Inc.1
    Harvey DangerFlagpole Sitta1
    Her'sBlue Lips6
    Cool With You1
    Herbie HancockChameleon3
    Jay SomBaybee1
    Jimmy Eat WorldThe Middle1
    John MayerMoving On and Getting Over1
    No Such Thing1
    Joyce ManorLast You Heard of Me1
    Kanye WestGolddigger1
    Kate BollingerI Don't Wanna Lose1
    Kevin DevineCotton Crush1
    I Could Be With Anyone1
    KhalidTalk1
    Lake Street DiveCall Off Your Dogs1
    Hello Goodbye1
    Hypotheticals5
    Lenny KravitzFly Away1
    Mac DeMarcoMy Old Man2
    Mac MillerWhat's The Use3
    Manchester OrchestraBed Head3
    Everything To Nothing1
    I Can Barely Breathe1
    I Can Feel A Hot One1
    I've Got Friends4
    Keel Timing3
    Pride4
    Shake It Out5
    Telepath1
    The Only One4
    Tony The Tiger1
    Virgin1
    MattOriginal4
    Matt and AlexOriginal5
    Men I TrustLauren6
    Michael JacksonBeat It1
    Billie Jean1
    Modern BaseballTears Over Beers2
    Modest MouseFloat On2
    Natalie ImbrugliaTorn1
    No DoubtDon't Speak1
    Omar ApolloThe Two of Us3
    OutKastMs Jackson1
    Paper KitesBloom1
    ParcelsTieduprightnow1
    Peach PitAlrighty Aphrodite11
    Black Licorice1
    Brian's Movie10
    Chagu's Sideturn2
    Drop the Guillotine6
    Peach Pit1
    Shampoo Bottles2
    Techno Show3
    Tommy's Party1
    PhishCharacter Zero3
    Portugal. The ManFeel It Still1
    PrawnWhy You Always Leave A Note1
    RadioheadCreep2
    Rage Against The MachineKilling in the Name1
    Red Hot Chili PeppersCan't Stop4
    RipeCaralee1
    Goon Squad1
    Pretty Dirty1
    Talk to the Moon1
    Robbie Hunter BandQue Paso?1
    Sammy RaeJackie Onassis1
    Kick It To Me2
    SantanaSmooth1
    Stone Temple PilotsInterstate Love Song2
    SublimeDoin Time1
    Sugar RayEvery Morning2
    Sure SureGood Thing1
    Tame ImpalaThe Less I Know The Better2
    The BeatlesI've Just Seen A Face1
    With a Little Help From My Friends1
    The Black KeysTighten Up1
    The CarsJust What I Needed1
    The Dear HunterA Sua Voz3
    Black Sandy Beaches1
    Deny It All1
    Girl1
    Misplaced Devotion1
    Progress/Therma2
    Red Hands4
    The Moon/Awake1
    What it Means to Be Alone1
    The EaglesHotel California1
    The Front BottomsCough It Out1
    Flashlight4
    Jim Bogart1
    Legit Tattoo Gun2
    Rhode Island11
    The Beers8
    Twin Size Mattress12
    West Virginia1
    The Head and The HeartHoneybee1
    Lost In My Mind2
    Rivers and Roads2
    The RaconteursSteady As She Goes1
    The White StripesWe're Going To Be Friends1
    Theo KatzmanYou Could Be President1
    Third Eye BlindSemi Charmed Life1
    Three Doors DownKryptonite1
    TonicIf You Could Only See1
    TwiddleWhen it Rains it Poors1
    USERxHeadsick1
    Vampire WeekendFlower Moon2
    Sunflower4
    VansireThat I Miss You6
    Vulfpeck16122
    Animal Spirits1
    Aunt Leslie3
    Baby I Don't Know Oh Oh1
    Back Pocket2
    LAX1
    Love is a Beautiful Thing1
    Outro1
    Wait For The Moment4
    WeezerBuddy Holly2
    If You're Wondering If I Want You To1
    The World Has Turned and Left Me Here1
    -

    -

    Last Updated: Thu Nov 11 21:15:31 EST 2021

    -

    -© 2019-2021 Alex Karle | Home | License -

    - - diff --git a/license.7 b/license.7 deleted file mode 100644 index 47378cc..0000000 --- a/license.7 +++ /dev/null @@ -1,26 +0,0 @@ -.Dd $Mdocdate$ -.Dt LICENSE 7 -.Os -.Sh NAME -.Nm license -.Nd copyright info for this site -.Sh COPYRIGHT -Except where otherwise noted, -all content on this site is licensed under a -Creative Commons Attribution 4.0 license (CC BY 4.0). -.Pp -Any code snippets, including the code used to build this site, -are licensed under a MIT license. -.Sh SEE ALSO -.Bl -bullet -compact -.It -.Lk https://creativecommons.org/licenses/by/4.0/ CC BY 4.0 -.It -.Lk /LICENSE MIT license -.It -.Lk https://git.alexkarle.com/alexkarle.com Source code for the site -.It -.Xr intro 7 -.It -.Xr blog 7 -.El diff --git a/logo.png b/logo.png deleted file mode 100644 index 99709a8..0000000 Binary files a/logo.png and /dev/null differ diff --git a/make-obj.7 b/make-obj.7 deleted file mode 100644 index ddac324..0000000 --- a/make-obj.7 +++ /dev/null @@ -1,156 +0,0 @@ -.Dd September 28, 2021 -.Dt MAKE-OBJ 7 -.Os -.Sh NAME -.Nm make-obj -.Nd out-of-tree builds with BSD -.Xr make 1 -.Sh DESCRIPTION -If you've ever built parts of OpenBSD from source, -you may know that the sequence of commands recommended by -.Xr release 8 -is: -.Pp -.Bd -literal -offset indent -$ make obj -$ make -# make install -.Ed -.Pp -If, like me, you've forgotten the -.Ql make obj -step, -you'll find yourself with many derived files in the -current directory of whatever program you're building. -By running -.Ql make obj -first, -a directory called -.Pa obj -appears and the derived files -(usually -.Pa *.o -files) are placed there instead. -Cleverly, the -.Pa obj -directory is actually a symlink to -another filesystem under -.Pa /usr/obj , -making it truly an out-of-tree build. -.Pp -Up until recently, -I understood what the -.Ql obj -target did and why it was useful. -However, it wasn't until I tried to replicate it with the -build for text.alexkarle.com -that I discovered how it worked. -I figured I'd document it here in case it helps anyone else. -.Sh HOW IT WORKS -My discovery of the inner workings of this target was a classic -lesson in RTFM. -After 10-15 minutes of trying to parse the makefiles in -.Pa /usr/share/mk , -I finally searched for -.Pa obj -in the -.Xr make 1 -man page, -and sure enough the answer was the first hit! -I've copied it for convenience below -(licensed under the BSD-3 clause): -.Pp -.Bl -tag -offset indent -.It Va .OBJDIR -Path to the directory where targets are built. -At startup, -.Ic make -searches for an alternate directory to place target files. -.Ic make -tries to -.Xr chdir 2 into -.Ev MAKEOBJDIR -(or -.Pa obj -if -.Ev MAKEOBJDIR -is not defined), -and sets -.Va .OBJDIR -accordingly. -Should that fail, -.Va .OBJDIR -is set to -.Va .CURDIR . -.El -.Pp -With this new knowledge, -getting an out-of-tree build was almost as simple as running -.Ql mkdir obj -before -.Ql make ! -.Pp -The one catch was that, -having chdir'd in, -I had to canonicalize the paths to any scripts used in the build recipes. -For instance, -I have a genpost.sh script in the -.Pa bin/ -directory of this repo. -To call it from the -.Pa obj -directory, -I needed to use its absolute path via the -.Va .CURDIR -variable: -.Pp -.Dl $(.CURDIR)/bin/genpost.sh < $< > $@ -.Sh PORTABILITY -While I mostly build my site on OpenBSD, -it's important to me that it builds with GNU make too. -.Pp -Unfortunately, -the -.Va .OBJDIR -chdir'ing appears to be an extension in OpenBSD's -make (and possibly NetBSD too). -The good news is that, -with one more trick, -GNU make support is easy to add -(albeit without out-of-tree builds). -.Pp -The one final hack to support GNU make was to define -a portable version of -.Va .CURDIR . -Since -.Va .CURDIR -isn't defined in GNU make (which uses -.Va CURDIR -instead), -I had to define the -.Va DIR -variable that's the concatenation of the two: -.Pp -.Dl DIR = $(.CURDIR)$(CURDIR) -.Pp -.Sh CONCLUSION -I hope this sheds some light on why -.Ql make obj -is common practice on OpenBSD as well as -how to add similar support to your own projects! -.Pp -While not as flexible as GNU make's pattern matching -inference rules (that allow builds in subdirectories), -I find the chdir-ing into -.Pa obj -a cleverly simple way -to obtain a similar end result. -.Sh SEE ALSO -.Bl -bullet -compact -.It -.Xr blog 7 -.It -.Xr text-only 7 -.It -.Xr my-old-man 7 -.El diff --git a/my-old-man.7 b/my-old-man.7 deleted file mode 100644 index 616dea6..0000000 --- a/my-old-man.7 +++ /dev/null @@ -1,159 +0,0 @@ -.Dd December 30, 2020 -.Dt MY-OLD-MAN 7 -.Os -.Sh NAME -.Nm my-old-man -.Nd adventures in using -.Xr mdoc 7 -as the markup for this site -.Sh SYNOPSIS -.Bd -literal -offset indent -Uh oh, -looks like, -I'm seeing more of my old man(1) in me - ~ Mac DeMarco (added (1) by me) -.Ed -.Sh DESCRIPTION -While Mac wasn't talking about good old roff-style man pages, -I felt his words were a fun description of my effort to move -from a markdown based templated site to a -.Xr mdoc 7 -based site. -.Pp -After pointing out that -.Lk https://git.alexkarle.com/alexkarle.com/file/intro.7.html I really did -rewrite my site in -.Xr mdoc 7 , -you might be wondering -.Em why -I would do this. -This blog post is intended to answer just that. -.Sh WHY -.Ss For the learning experience -The single biggest motivator of the rewrite was that -I like to use this site as a playground for learning new (old) technology, -and -.Xr mdoc 7 -was on my list of tech to learn. -.Pp -What better way to learn a new markup language than to port an existing -project to use it? -.Pp -I had a blast transferring my old posts and coming up with a new build -system. -.Ss For the look -I really enjoy a good -.Xr man 1 -page. -.Pp -You've probably heard it before, but I'll say it again: one of the best -parts of using OpenBSD is its concise and comprehensive man pages in -the base system. -.Pp -There's a certain warm fuzzy feeling when you can learn something -both without internet access and with the knowledge that it is the -authoritative source. -.Pp -I want my site to be a homage to good, well thought out, -.Xr man 1 -pages. -.Ss Keeping it all in base -As an OpenBSD nerd, I find a bit of joy in having a site which is built, -deployed, and served all via the base OpenBSD system. -.Pp -By using -.Xr mandoc 1 -instead of Markdown.pl, I can now build my site without any additional -dependencies. -.Pp -Better yet, -.Xr mandoc 1 -is ported to the various Linux distros I use day to day, and it is -.Em fast . -.Sh HOW -If you read this far, I thought you might be interested to hear how I'm -deploying the content. -.Pp -I'm a big fan of automation, so I've rigged up the site to deploy on a push -to the master branch. -Doing so involved two steps. -.Ss Building the mdoc -I created a small Makefile that builds each HTML file from each man page source. -.Pp -The relevant bit is the implicit suffix rule to convert each .7 file to .html: -.Bd -literal -offset indent -\).SUFFIXES: .7 .html -\).7.html: - @echo "mandoc $<" - @mandoc -Thtml -O 'man=%N.html;https://man.openbsd.org/%N.%S,style=style.css' $< \\ - | sed 's##&# ' \\ - > $@ -.Ed -.Pp -This looks crazy, but it's not too complex. -First, know that -.Sy $< -is the source (the .7 page), and -.Sy $@ -is the target (the .html page). -The -.Sy @ -prefix is a bit of magic to suppress printing the command run (so that all the -output shown on git-push is just a single "mandoc" line for each file updated). -.Pp -Moving on to the mandoc command, I use the html output of mandoc via -T, -with the -O switch specifying that linked man-page references should look -locally first, then to point to man.openbsd.org. -This allows me to quickly reference OpenBSD base tools and pages, while also -using the terse -.Sy .Xr -macro for linking individual site pages. -.Pp -Finally, I use a -.Xr sed 1 -oneliner to splice in a viewport tag for mobile -devices. -.Pp -And that's really it! -The rest is just listing the man pages I want built, -with a phony default target depending on the html pages so that a -.Ql make -builds them all. -Check out the full source -.Lk https://git.alexkarle.com/alexkarle.com/file/Makefile.html here . -.Ss Deploying via git hook -Since I'm self-hosting git on the same server as the website, it's trivial to -deploy when it receives a push by leveraging git hooks. -.Pp -For the unfamiliar, git hooks are simply shell scripts that are triggered by -specific git actions. -In this case, I used the post-receive hook to publish -after the refs were updated via a -.Ql git push . -.Pp -More specifically, I added the following to -.Pa /hooks/post-receive : -.Bd -literal -offset indent -echo "Deploying to to /var/www/htdocs... " -WT=/var/www/htdocs -git -C ${dir} --work-tree=${WT} checkout -f master -make -C ${WT} -echo "done" -.Ed -.Pp -So, on any push, it checks out the entire source tree into the webserver's content -area and rebuilds only the necessary HTML files (thanks to -.Xr make 1 ) . -.Pp -If I had files I didn't want served, I would modify it to build elsewhere and -copy the contents to /var/www; however, I'm publishing both the source for the site -and the git history at -.Lk https://git.alexkarle.com , -so I don't see any harm to having the README.md accessible from the root. -.Sh SEE ALSO -.Bl -bullet -compact -.It -.Xr blog 7 -.It -.Lk https://www.git-scm.com/docs/githooks git hooks -.El diff --git a/on-writing.7 b/on-writing.7 deleted file mode 100644 index 5e1e1db..0000000 --- a/on-writing.7 +++ /dev/null @@ -1,58 +0,0 @@ -.Dd October 22, 2020 -.Dt ON-WRITING 7 -.Os -.Sh NAME -.Nm on-writing -.Nd thoughts on writing without an audience -.Sh DESCRIPTION -I wrote a blog post 3 weeks ago but never published it. -I spent a couple hours writing, proof-reading, and rewriting, and settled to -re-read once more in the morning and publish if I still liked it after a good -nights sleep. -.Pp -I got caught up with other things, and a day or two later re-read it and -still didn't end up publishing it. -I didn't think it was quite right. -I liked it well enough, but I was worried other people would judge it. -.Pp -But here's the irony -\(em -as far as I know, I have no readers. -Publishing it is almost equivalent to shouting into the void. -.Pp -So why did I care so much? -.Pp -As I found myself thinking about how I'd revise the original post -tonight, I realized that maybe this fear of judgment from non-existent -(but potential future) internet strangers was a much more interesting -topic to explore than my original musings. -So here I am hashing it out. -.Pp -I think the fear of judgment comes from a mixture of seeing public figures -have their pasts (preserved in the digital era) come back to haunt them -combined with observing how readers can react strongly and negatively to -posts. -I don't plan to ever become so famous as to have a blog haunt me, -nor do I ever expect enough readers to have overwhelmingly unpleasant -reactions, but the fear still got to me. -.Pp -But I want to persevere, and that's ultimately what writing this is about. -I'm not writing for fame or attention. -I'm not writing to further my career or put it on my resume. -I'm writing for me. -For the clarity I get from expressing my thoughts, and for -the joy I get looking back at where I was months or years ago. -.Pp -Why host them publicly? -Well, I really enjoy a good tech blog, and admire a blogger or two out there. -I want to be the change I want to see in the internet and migrate from -centralized social networks back to a decentralized network of personal and -self-hosted sites. -.Pp -And who knows, maybe one day someone will read this and have felt the same. -I guess I'm writing for that person too. -.Sh SEE ALSO -.Bl -bullet -compact -.It -.Xr blog 7 -.El diff --git a/self-hosted.7 b/self-hosted.7 deleted file mode 100644 index 3bad0c0..0000000 --- a/self-hosted.7 +++ /dev/null @@ -1,98 +0,0 @@ -.Dd July 19, 2020 -.Dt SELF-HOSTED 7 -.Os -.Sh NAME -.Nm self-hosted -.Nd a tale of migrating to my own server -.Sh DESCRIPTION -If you look at the first post -.Xr ( a-new-hope 7 ) -on this site, you'll see that this site started as a series of static HTML -files that I was, by hand, uploading to Fastmail via their "files" GUI. -.Pp -Being a total nerd for automation, I was always on the lookout for an excuse to -migrate to my own server, where I could (over)engineer a pipeline to build my -static content and deploy it without ever leaving the terminal. -.Pp -That excuse presented itself in the form of needing to get a VPS to stand up my -hobby-project, `euchre.live`. -If I was going to pay for a tiny VM, it was a no-brainer to move my personal -site to it too. -.Pp -This turned out to be a great learning experience -\(em -getting hands on experience -with reverse proxies, DNS, and a variety of operating systems and webservers -(first hosted on Alpine Linux and migrated to OpenBSD). -Additionally, I could self-host git repos, which has long been a nerd-goal of mine :) -.Pp -I plan to write a lengthier post about the joys of self-hosting in the future, -but for now, I really just wanted to give a brief update on where I landed and -what the current stack is. -.Pp -I'm currently running (in no particular order): -.Pp -.Bl -bullet -compact -.It -.Sy OS : -OpenBSD -.It -.Sy Web server : -OpenBSD's -.Xr httpd 8 -.Bl -dash -compact -.It -Serves the `www.` static content -.It -Also serves -.Lk https://git.alexkarle.com -.El -.It -.Sy Reverse proxy : -OpenBSD's -.Xr relayd 8 -.Bl -dash -compact -.It -Used to send traffic between `euchre.live` (which uses a Mojolicious -web server as the backend) and `alexkarle.com` based on URL -.El -.It -.Sy `www` content : -.Bl -dash -compact -.It -100% static content -.It -No metrics, ads, or tracking -.It -Posts and pages written in markdown -.It -HTML generated with a pipeline of the original `Markdown.pl` into a small -templating Perl script that I home-rolled -.El -.It -.Sy Git : -.Bl -dash -compact -.It -Public repos served with -.Xr git-daemon 1 -over the `git://` protocol -.It -Push access via the `ssh://` protocol -.It -static HTML of content generated via post-receive hook with -.Xr stagit 1 -.El -.El -.Pp -That's all for now! -.Sh SEE ALSO -.Bl -bullet -compact -.It -.Xr blog 7 -.It -.Xr a-new-hope 7 -.It -.Lk https://euchre.live -.It -.Lk https://mojolicious.org Mojolicious -.El diff --git a/style.css b/style.css deleted file mode 100644 index 95d1185..0000000 --- a/style.css +++ /dev/null @@ -1,90 +0,0 @@ -/* general defaults */ -body { - background-color: #F5F5F5; - margin-left: 20px; - margin-right: 20px; - font-size: 1.3em; - line-height: 1.3; - font-family: monospace; -} - -/* style tweaks */ -a:link { color: #0a7899; } -a:visited { color: #033a4a; } -code { font-size: 1em; } -h1 { font-size: 1.1em; } -h2 { font-size: 1em; } -.foot-license { - margin-top: 16px; - font-size: .7em; - position: static; - bottom: 0; -} - -/* override bold/italic colors within permalinks */ -a.permalink { text-decoration: none } -b,i { color: #000000 } - -/* Responsive screen sizes */ -@media only screen and (min-width: 992px) { - body { - width: 60%; - margin: 0 auto; - } -} -@media only screen and (min-width: 600px) and (max-width: 991px) { - body { - width: 80%; - margin: 0 auto; - } -} - -/* Smaller font on small screens */ -@media only screen and (max-width: 599px) { - body { font-size: 1.1em; } -} - -/* margins around head/foot */ -table.foot { margin-top: 3em; } -table.head { margin-bottom: 3em; } - -/* scrollbars on the block-display content */ -div.Bd-indent { - border-left-color: gray; - border-left-style: solid; - border-left-width: 2px; - border-radius: 5px; - padding-left: 1em; -} - -.Bd > pre { - overflow-x: auto; -} - -/* Bl-tag correctly with grid for blog.7 */ -dl.Bl-tag { - display: grid; - grid-template-columns: max-content auto -} -dl.Bl-tag dd { - margin-left: 16px; - margin-bottom: 1em; -} - -/* defaults from mandoc(1)'s inlined CSS */ -table.head, table.foot { width: 100%; } -td.head-rtitle, td.foot-os { text-align: right; } -.Nd, .Bf, .Op { display: inline; } -.Pa, .Ad { font-style: italic; } -.Ms { font-weight: bold; } -.Bl-diag > dt { font-weight: bold; } -code.Nm, .Fl, .Cm, .Ic, code.In, .Fd, .Fn, .Cd { - font-weight: bold; -} - -.jam-artists tr:nth-child(even) { - background-color: #e3e3e3; -} -td.jam-artists, th.jam-artists, table.jam-artists { - border: 1px solid black; -} diff --git a/text-only.7 b/text-only.7 deleted file mode 100644 index 8063147..0000000 --- a/text-only.7 +++ /dev/null @@ -1,89 +0,0 @@ -.Dd September 20, 2021 -.Dt TEXT-ONLY 7 -.Os -.Sh NAME -.Nm text-only -.Nd announcing text.alexkarle.com -.Sh DESCRIPTION -This past week I rolled out -.Lk https://text.alexkarle.com , -and I wanted to write a little bit about it! -.Ss WHAT -text.alexkarle.com is a text-only ascii dump of this entire site. -It's served over HTTP, HTTPS, and Gopher to provide a wide array -of options for accessing the content. -.Ss WHY -I'm a huge fan of the "small internet" and lightweight sites in general. -Although I'm not an active participant in any of the tilde communities, -I really appreciate the commitment to plaintext, *NIX, and simple software. -.Pp -At some point in my browsing of the tildeverse, -I stumbled across Gopher and took a liking to the simple protocol. -Surfing gopherspace is so awesomely fast and simple compared to -the slow, ad-filled, modern web. -Better yet, it's totally removed from the commercialization of the internet. -No one is serving content on Gopher to make money. -It's full of art and real, empathetic, humans. -.Pp -For my own part, -I started serving an ascii dump of the -.Xr mdoc 7 -content on this site over Gopher (via -.Xr gophernicus 8 ) -almost 7 months ago. -However, I was never really happy with how it was organized or generated -(hence the lack of an announcement on the -.Xr blog 7 ) . -.Pp -It was the discovery of a fellow -.Xr mdoc 7 -website over at -.Lk https://text.causal.agency -that inspired me to revisit my approach to publishing a text-only -version of this site. -I finally replaced the scripted afterthought of a gopher -publisher with a first class build target -and decided to expand the offering from gopher-only to HTTP(S). -I figured someone might prefer to browse it that way -(maybe retro computing enthusiasts?), -and with -.Xr httpd 8 -already running, it came basically for free! -.Ss HOW -I started to write about all the "challenges" I faced in this process, -but really these were all self-imposed problems from restricting myself -to a POSIX subset of BSD -.Xr make 1 -(in the name of -.Xr creative-coding 7 ) . -I think had I chosen either BSD make with extensions or GNU make, -the build would have been much cleaner, -but with a couple of hacks it's okay as is. -.Pp -Maybe I'll write about it someday, -but it didn't feel worth holding up this "announcement". -The TL;DR: I added another inference rule for *.7 -> *.txt and -moved from a "build in tree" model (where the source tree was what was served by -.Xr httpd 8 ) -to a "run the install target after build" model. -The latter is necessary because POSIX inference rules only build into the -current directory and I don't want text.alexkarle.com users to see the *.html -there too. -.Pp -Of course, if you're curious to see how the bits come together, -I publish all of the site source at -.Lk https://git.alexkarle.com/alexkarle.com ! -.Sh UPDATE -As of November 15, 2021, text.alexkarle.com was moved entirely to gopher. -See -.Xr burrowing 7 -for more info. -.Sh SEE ALSO -.Bl -bullet -compact -.It -.Xr blog 7 -.It -.Xr my-old-man 7 -.It -.Xr gophernicus 8 -.El diff --git a/use-feeds.7 b/use-feeds.7 deleted file mode 100644 index cccfb01..0000000 --- a/use-feeds.7 +++ /dev/null @@ -1,142 +0,0 @@ -.Dd February 9, 2021 -.Dt USE-FEEDS 7 -.Os -.Sh NAME -.Nm use-feeds -.Nd RSS/Atom feeds; what are they and why you should care -.Sh SYNOPSIS -.Bd -literal -offset indent -Feed the birds -Tuppence, a bag - ~ Mary Poppins -.Ed -.Sh DESCRIPTION -I've always wanted this site to be an homage to tech that I -enjoy using, and recently, that's included old-school RSS/Atom feeds. -However, up until now, I had only been a feed consumer -and had never produced my own. -So, this past weekend I decided to hunker down and read enough -of the spec to generate one for this site. -.Pp -But let's back up \(em what is a feed? Why should you care? -.Pp -A feed is simply a standardized listing of items a source -(blog, vlog, newspaper, etc) has generated recently. -Users then consume multiple feeds to get centralized notifications -on new content. -Think "following" on social media, but generalized for any content -accessible on the web. -.Pp -The most important feature of a feed is that it has been standardized -and is not controlled by any individual corporation. -This ensures that users are not only free from vendor lock-in, but -it also allows for an increasingly diverse set of clients and sources. -.Pp -For example, there are clients ranging from FOSS text only terminal -clients like -.Xr newsboat 1 -to commercial apps like -.Lk https://feedly.com Feedly . -And despite being drastically different UI's, their purpose is the same: -allow you to subscribe to any number of feeds, and centralize your -notifications. -.Pp -The idea is simple, but it's transformed the way I interact with the -web. -It saves me time in not browsing the infinite scroll that has -become social media, and it allows me to stay up to date with smaller -blogs that don't post frequently (cough, like yours truly, cough). -.Pp -Consider a new blog post on this site. -Without a feed, you'd have to periodically check my -.Xr blog 7 -for updates -or hear about it through some other link aggregation or social media -site (Hackernews, Reddit, etc). -Adding a feed allows those who want to follow to get notifications, without -checking other locations or having to waste time checking back periodically. -.Pp -So if you haven't tried a feed reader ever, go find one that suits -your fancy and give it a try! -In an era where user upvoted content reigns king (Reddit, Facebook, etc), -it's really empowering as a user to decide -.Em what -you see updates for and to be able to check them on your own time. -And if you're a publisher of any content, consider creating a feed for -others to follow. -I'll certainly appreciate it! -.Pp -It's never too late to take control of your digital habits, -and using a feed reader is a good place to start. -.Sh IMPLEMENTATION -If you read this far, I thought you might also be interested in hearing -not only the what and the why but also the -.Em how . -.Pp -Due to the recent migration to using -.Xr mdoc 7 -as the markup for this site (detailed in -.Xr my-old-man 7 ) , -I knew that finding an off-the-shelf feed generator would be unlikely. -Plus, with my general desire to keep the site build-able by base OpenBSD, -I figured it was as good an excuse as any to read the spec and generate -it myself. -.Pp -I ended up choosing Atom over RSS mostly based on some online opinions -that it is a stricter standard, but I can't say much to back that up. -What I can say is that after the initial confusion of how to escape the -embedded HTML in the XML feed, it was pretty smooth sailing. -.Pp -The full implementation is in -.Lk https://git.alexkarle.com/alexkarle.com/file/bin/genatom.sh.html genatom.sh -and basically boils down to: -.Pp -.Bl -enum -compact -.It -.Xr grep 1 -call through the -.Em blog.7 -file to get a list of entries and their dates -.It -Print the header of the XML (with newest date from 1.) -.It -For each item in entries, add the XML entry along with the content -as generated by -.Xr mandoc 1 -with the -.Fl O Ar fragment -option. -This ensures the "notification" has the full post \(em -users never even need to visit the site! -.It -End by printing the footer of the XML -.El -.Pp -And that's it! -The only real trick was to use -.Lk https://en.wikipedia.org/wiki/CDATA CDATA -sections around the entry content in the XML to escape the HTML tags. -.Pp -And of course, like everything else in this blog, it rebuilds on git-push -via a call to -.Xr make 1 . -See the -.Lk https://git.alexkarle.com/alexkarle.com/file/Makefile.html Makefile -for the recipe. -.Sh SEE ALSO -.Bl -bullet -compact -.It -.Xr blog 7 -.It -My Atom feed: -.Lk https://alexkarle.com/atom.xml -.It -Wiki page on Atom: -.Lk https://en.wikipedia.org/wiki/Atom_(Web_standard) -.It -Atom RFC: -.Lk https://tools.ietf.org/html/rfc4287 -.It -Related advocacy: -.Lk https://atthis.link/blog/2021/rss.html -.El diff --git a/use-git.7 b/use-git.7 deleted file mode 100644 index cbf5953..0000000 --- a/use-git.7 +++ /dev/null @@ -1,141 +0,0 @@ -.Dd November 07, 2021 -.Dt USE-GIT 7 -.Os -.Sh NAME -.Nm use-git -.Nd non-standard uses for -.Xr git 1 -.Sh DESCRIPTION -In this post, -I'm not going to teach you how to use -.Xr git 1 . -Instead, -I wanted to write a quick post to encourage you to use git -for non-conventional use cases -(i.e. things other than source code). -.Pp -If perchance you're not familiar with git, -there's a ton of good documentation out there. -I'd recommend starting with the official and free -.Lk https://git-scm.com/book/en/v2 Pro Git . -Also, -as a PSA, -just know that git stores whole snapshots and NOT diffs. -.Pp -.Sh BACKGROUND -Git is a distributed version control system, -and this is a beautiful thing. -I feel it's often lost on us, -given that we use it most frequently on centralized forges -for team collaboration (GitHub, GitLab, etc). -.Pp -Git being distributed means you can: -.Pp -.Bl -enum -compact -.It -Use it offline (your copy is "first class") -.It -Mirror it to as many places as you want -.El -.Pp -In other words, -git can be used without any dependence on a third-party -service or company and with complete ownership of private data. -Forges (and I recommend -.Lk https://sourcehut.org ) -are a great place to backup your code and collaborate, -but you don't have to use a forge to use git as a futureproof way to do what -it does best: version your files. -.Sh STORY TIME -When I started my first job in tech, -I found that it was a good habit to take personal notes. -It was incredibly useful to quickly reference obscure CLI -commands or system knowledge gained from pairing. -These were things that were too small or personal to make it into -standard documentation -but invaluable to have on hand. -.Pp -My first solution was shoving them all into a directory called -.Pa ~/notes -as plaintext files. -They were easy to write and reference, -and it was simple to back them up by copying the directory -to another drive nightly. -.Pp -Over time, -the -.Ql cp -a -trick broke down: -.Pp -.Bl -bullet -compact -.It -Files deleted in the source prevailed in the backup -.It -Changes more than a day old were lost! -.El -.Pp -Around the same time, -I started getting more familiar with git, -and it finally occurred to me: -I could use git and still keep these notes private! -.Pp -Git can clone/push/pull across filesystems, -so in the matter of minutes I solved both of my issues -with just: -.Bd -literal -offset indent -# Set up the backup mirror -$ git init --bare /backup/drive/notes.git - -# Put it to use! -$ cd ~/notes -$ git init && git add . && git commit -m "import" -$ git remote add origin /backup/drive/notes.git -$ git push -u origin main -.Ed -.Pp -If you don't have a backup drive mounted, -it's equally good (or better) to make the remote a repo -accessed over SSH: -.Bd -literal -offset indent -# On the remote host -user@example.com~$ git init --bare ~/notes.git - -# On the local host -$ git remote add origin user@example.com:notes.git -.Ed -.Sh GOING FURTHER -These days, -I shudder at the thought of any important plaintext on my system -that's not version-controlled somewhere. -Too many hours are spent writing these little files, -and it's so easy to version them, -why risk losing any of that history? -.Pp -Aside from my private notes, I version: -.Pp -.Bl -bullet -compact -.It -System config files from /etc -.It -Personal config files (dotfiles) -.It -My passwords (via -.Xr pass 1 ) -.It -A small set of personal patches for FOSS projects I have yet to polish and upstream (a-la ports-system) -.It -My resume (admittedly still a DOCX from college, but versioning has really helped) -.El -.Pp -In conclusion, -my advice to anyone writing anything of importance: -just use -.Xr git 1 ! -.Sh SEE ALSO -.Bl -bullet -compact -.It -.Xr blog 7 -.It -.Lk https://github.blog/2020-12-17-commits-are-snapshots-not-diffs/ Commits are snapshots, not diffs -by Derrick Stolee -.El diff --git a/uses.7 b/uses.7 deleted file mode 100644 index f2a3846..0000000 --- a/uses.7 +++ /dev/null @@ -1,129 +0,0 @@ -.Dd September 14, 2021 -.Dt USES 7 -.Os -.Sh NAME -.Nm uses -.Nd list of software/hardware I use -.Sh DESCRIPTION -I really enjoy a good "uses" post. -I think the first I ever stumbled across was Wes Bos', -back when I was learning web-development. -As someone fascinated by developer tooling, -I loved hearing what other programmers use in their day-to-day lives. -.Pp -I try to keep this page up to date, -both for my future nostalgia -as well as for anyone else out there who enjoys the "genre". -.Sh SOFTWARE -.Ss Editor -I got hooked on -.Xr vim 1 -mid-college (~2017) and never looked back. -It's first on this list (with a dedicated section!) -because it was the "gateway program" -that got me interested in developer tooling in the first place! -If not my most important tool, -it's definitely the most impactful. -.Pp -Other editors I use: -.Pp -.Bl -bullet -compact -.It -.Xr vi 1 -for system configs (super snappy on OpenBSD) -.It -.Xr ed 1 -for fun and for slow/serial connections (yes, really!) -.El -.Pp -I try emacs every once and a while because I think Lisp is awesome -(and far superior to VimScript), -but I don't really dig the "run everything in emacs" approach. -.Ss Operating System -I've been passionate about running free and open source (FOSS) -operating systems -since ~2019 when I first started using Linux seriously at work. -At some point in ~2020, I discovered OpenBSD and -slowly started putting it on all of my personal machines. -I'm currently running: -.Pp -.Bl -compact -bullet -.It -OpenBSD for my laptop, desktop, -server (hosting this site \(em see -.Xr self-hosted 7 ) , -and home router/firewall -.It -Arch Linux for work -(needed a cutting edge kernel for newer work laptop) -.El -.Pp -In the past I've also used Alpine Linux on my laptop and Debian -on my desktop. -.Ss Other Tools -I'm a huge fan of command line tools for their composability and -keyboard-centric UI. Some of my favorites include: -.Pp -.Bl -compact -bullet -.It -.Xr git 1 -for all things plaintext: notes, code, config backups, etc -.It -.Xr tmux 1 -for terminal scrollback, searching, copy/paste buffers, multiplexing, -persistent sessions over dropped -.Xr ssh 1 -connections... really a necessity! -.It -.Xr mutt 1 -for personal email (great for mailing lists!) -.It -.Xr pass 1 -for password/secret management -.It -.Xr sh 1 -for glueing it all together, of course! -.El -.Sh HARDWARE -.Ss Keyboard -After years of mushy laptop keyboards, -I discovered mechanical keyboards through a coworker and -I've been clicking and clacking happily ever since! -.Pp -I started off with an Ultimate Hacking Keyboard -with Kailh browns (had to be quiet in a shared office), -but I've been using a Keyboardio Atreus for about a year. -I switched in a (successful!) attempt to reduce finger movement -and strain. -Plus, I'm a remote worker now, -and I get to clack away at Kailh white switches, -which is awesome. -.Ss Laptop -When I started really getting into Linux at work and home ~2019, -I installed Arch on my old macbook and suffered at the hands of -NVIDIA and poor hardware support until I ditched my macbook for -a ThinkPad X220 (2011, i7, 2GB RAM) that I bought used for ~$130 off Ebay. -A simple upgrade to a SSD and it runs great! -.Pp -I use the laptop for casual browsing and hobby coding -(I try to ensure my hobby projects all run on old hardware!), -but its CPU age really shows on big websites or compilations. -.Ss Desktop -I built my first desktop (a long standing nerd goal of mine) at the -start of the COVID-19 pandemic in 2020 when it became clear I'd be -working from home and my 2GB of laptop RAM wouldn't cut it. -.Pp -I tried (and failed) to keep the parts entirely FOSS-friendly, -but I ended up getting a GPU that needed the AMDGPU firmware blobs -(hard to find a fully free graphics card these days it seems). -With a high-end CPU (AMD Ryzen 7 3700X) -but a low-end GPU (Radeon RX 560), -it was a reasonable price. -And with 16GB of RAM, it handles my work environment well. -.Sh SEE ALSO -.Bl -bullet -compact -.It -.Xr blog 7 -.It -.Lk https://wesbos.com/uses Wes Bos' uses page -.El diff --git a/www/LICENSE b/www/LICENSE new file mode 120000 index 0000000..ea5b606 --- /dev/null +++ b/www/LICENSE @@ -0,0 +1 @@ +../LICENSE \ No newline at end of file diff --git a/www/blog/BLM.txt b/www/blog/BLM.txt new file mode 100644 index 0000000..84a615e --- /dev/null +++ b/www/blog/BLM.txt @@ -0,0 +1,12 @@ +# Black Lives Matter + +_Published: July 13, 2020_ + +I meant to post about this earlier, but it's better late than +never. + +It's become abundantly clear to me that we need serious structural +changes in our country. I want to raise my voice in solidarity to +say that [Black Lives Matter](https://blacklivesmatter.com). + +[Back to blog](/blog) diff --git a/www/blog/a-new-hope.txt b/www/blog/a-new-hope.txt new file mode 100644 index 0000000..aae297d --- /dev/null +++ b/www/blog/a-new-hope.txt @@ -0,0 +1,13 @@ +# A New Hope + +_Published: December 19, 2019_ + +Toying with the thought of starting a website/blog. + +Exploring my hosting options and pleasantly surprised that +[FastMail](https://fastmail.com) has free static site hosting! + +Inspired by [Jeff Huang's article](https://jeffhuang.com/designed_to_last) +on websites Designed to Last and a general desire for a simpler web. + +[Back to blog](/blog) diff --git a/www/blog/burrowing.txt b/www/blog/burrowing.txt new file mode 100644 index 0000000..945eae7 --- /dev/null +++ b/www/blog/burrowing.txt @@ -0,0 +1,78 @@ +# burrowing: From text-only to gopher-only + +_Published: November 15, 2021_ + +## Description + +This past month, I've spent a lot of time learning about gopher. +It's truly a fascinating alternative to the world wide web, not +just in the content found there but also in terms of the protocol +itself. + +As of this writing, I've decided to deprecate text.alexkarle.com +in favor of serving that content (and more!) over gopher instead, +exclusively. + +## Implications + +This shouldn't have much impact on this blog. After all, +text.alexkarle.com was [an experiment](/blog/text-only.html) to begin +with! I'll still keep publishing semi-regularly here, I just +don't plan on maintaining a text dump via HTTP. + +I will, however, start publishing gopher-only content. There's two +main reasons for this: + +1. I want to see more activity on gopher +2. Gopher is easier to publish on + +Admittedly, number 2 is my own doing. I +[moved this blog to `mdoc(7)`](/blog/my-old-man.html) willingly to +learn the language. I've found that it slows my raw output, +which, while fine for longer form pieces, is a pain for +shorter-form thoughts. No regrets (I learned a ton!), but +shorter-form thoughts do much better in plaintext! + +The first reason is a theme for this blog: be the change you want +to see. I would love to see more content on gopher, so I'm taking +the plunge. + +## The Pitch + +So, why gopher? Probably the biggest reason to explore gopher is +the content. It's a parallel network totally untouched by +commercial interests. You won't see a single ad. + +The second reason to try gopher lies in the protocol itself--gopher +has a standardized menu interface, and individual gopherholes +cannot change the way you interact with them beyond the standard. +In a world where it seems every bit of the web's UI has been +rewritten in JavaScript (looking at you,
    's that should be +