Repos / hi.imnhan.com / 4232712922
commit 4232712922d17e1e7c3df4d29022091db8cdd594
Author: Nhân <hi@imnhan.com>
Date:   Sat Aug 19 17:52:48 2023 +0700

    convert pages to djot

diff --git a/about/index.dj b/about/index.dj
new file mode 100644
index 0000000..7eba9b3
--- /dev/null
+++ b/about/index.dj
@@ -0,0 +1,20 @@
+Title: About
+ShowInFeed: false
+Thumb: images/keyboard-warrior.jpg
+---
+
+Hi, I'm Nhân. I make webstuff for a living.
+
+![literally me](keyboard-warrior.jpg)
+
+My mind is a sad mess that cannot hold much information after a couple of
+months or so. This blog is where I write down interesting things I discover.
+On occasional bad days I might throw all my ramblings here too, but hopefully
+those will be rare.
+
+This blog is powered by my {-homegrown organic artisanal-} static site generator
+called [s4g][1] and is hosted on Github Pages.
+Its source code can be found on my [github repo][2].
+
+[1]: https://github.com/nhanb/s4g
+[2]: https://github.com/nhanb/hi.imnhan.com
diff --git a/about/index.html b/about/index.html
new file mode 100644
index 0000000..f75b22e
--- /dev/null
+++ b/about/index.html
@@ -0,0 +1,45 @@
+<!DOCTYPE html>
+<html>
+
+<head>
+  <meta charset="utf-8" />
+  <title>About | Hi, I&#39;m Nhân</title>
+  <meta name="viewport" content="width=device-width, initial-scale=1.0" />
+  <link rel="alternate" type="application/atom+xml" title="Atom feed" href="/feed.xml">
+  <link rel="stylesheet" href="/_theme/base.css">
+</head>
+
+<body>
+
+<link rel="stylesheet" href="/_theme/navbar.css">
+<nav>
+  <a href="/">Home</a>
+  <a href="/about/">About</a>
+  <a href="/projects/">Projects</a>
+
+</nav>
+<hr class="nav-hr">
+
+
+<main>
+<h1>About</h1>
+<p>Hi, I’m Nhân. I make webstuff for a living.</p>
+<p><img alt="literally me" src="keyboard-warrior.jpg"></p>
+<p>My mind is a sad mess that cannot hold much information after a couple of
+months or so. This blog is where I write down interesting things I discover.
+On occasional bad days I might throw all my ramblings here too, but hopefully
+those will be rare.</p>
+<p>This blog is powered by my <del>homegrown organic artisanal</del> static site generator
+called <a href="https://github.com/nhanb/s4g">s4g</a> and is hosted on Github Pages.
+Its source code can be found on my <a href="https://github.com/nhanb/hi.imnhan.com">github repo</a>.</p>
+
+</main>
+
+<footer>
+© 2023 nhanb<br>
+Made with <a href="https://github.com/nhanb/s4g">s4g</a>
+</footer>
+
+</body>
+
+</html>
diff --git a/content/images/keyboard-warrior.jpg b/about/keyboard-warrior.jpg
similarity index 100%
rename from content/images/keyboard-warrior.jpg
rename to about/keyboard-warrior.jpg
diff --git a/content/pages/about.md b/content/pages/about.md
deleted file mode 100644
index 984f4d0..0000000
--- a/content/pages/about.md
+++ /dev/null
@@ -1,23 +0,0 @@
-Title: About
-Thumb: images/keyboard-warrior.jpg
-
-Hi, I'm Nhân. I make webstuff for a living.
-
-![literally me](/images/keyboard-warrior.jpg)
-
-My mind is a sad mess that cannot hold much information after a couple of
-months or so. This blog is where I write down interesting things I discover.
-On occasional bad days I might throw all my ramblings here too, but hopefully
-those will be rare.
-
-This blog is generated using [Pelican][1] and hosted on Github Pages.
-Its source code can be found on my [github repo][2].
-
-I make a point not to include 3rd-party javascript on the page, with the
-exception of [Disqus][3], which is not loaded by default---you'll need to
-explicitly click on the "show comments" button below each post if you want to
-view or write comments. I think that's a reasonable compromise.
-
-[1]: http://getpelican.com
-[2]: https://github.com/nhanb/imnhan.com
-[3]: https://disqus.com/
diff --git a/feed.xml b/feed.xml
new file mode 100644
index 0000000..9645ccc
--- /dev/null
+++ b/feed.xml
@@ -0,0 +1,18 @@
+<feed xmlns="http://www.w3.org/2005/Atom">
+  <title>Hi, I&#39;m Nhân</title>
+  <id>https://hi.imnhan.com/</id>
+  <link rel="self" href="/feed.xml"></link>
+  <updated>0001-01-01T00:00:00+00:00</updated>
+  <author>
+    <name>nhanb</name>
+    <uri>https://hi.imnhan.com</uri>
+    <email>hi@imnhan.com</email>
+  </author>
+  <entry>
+    <title>Projects</title>
+    <id>https://hi.imnhan.com/projects/</id>
+    <link href="https://hi.imnhan.com/projects/"></link>
+    <published>0001-01-01T00:00:00+00:00</published>
+    <updated>0001-01-01T00:00:00+00:00</updated>
+  </entry>
+</feed>
\ No newline at end of file
diff --git a/content/pages/ideas.md b/ideas/index.dj
similarity index 95%
rename from content/pages/ideas.md
rename to ideas/index.dj
index 98e526b..5e51328 100644
--- a/content/pages/ideas.md
+++ b/ideas/index.dj
@@ -1,6 +1,6 @@
 Title: Potential project ideas
-Slug: ideas
-Hidden: True
+ShowInFeed: false
+---
 
 ## Self hosted RSS reader in D
 
@@ -16,7 +16,7 @@ ## Desktop GUI blogging CMS using tkinter
 - Split screen: one with markdown/bbcode source and one with rendered preview
 - Sane embedded image/video/etc. file management via GUI
   + Bonus: 1-click preprocessing: strip EXIF, losslessly optimize image
-- **No embedded browser**
+- *No embedded browser*
 - Is static site generator, but supports 1-click deployment to neocities,
   github/gitlab/sourcehut pages etc.
 - Human-friend distribution e.g. nuitka, pyoxidizer (pyinstaller is pretty meh)
diff --git a/ideas/index.html b/ideas/index.html
new file mode 100644
index 0000000..94943f4
--- /dev/null
+++ b/ideas/index.html
@@ -0,0 +1,94 @@
+<!DOCTYPE html>
+<html>
+
+<head>
+  <meta charset="utf-8" />
+  <title>Potential project ideas | Hi, I&#39;m Nhân</title>
+  <meta name="viewport" content="width=device-width, initial-scale=1.0" />
+  <link rel="alternate" type="application/atom+xml" title="Atom feed" href="/feed.xml">
+  <link rel="stylesheet" href="/_theme/base.css">
+</head>
+
+<body>
+
+<link rel="stylesheet" href="/_theme/navbar.css">
+<nav>
+  <a href="/">Home</a>
+  <a href="/about/">About</a>
+  <a href="/projects/">Projects</a>
+
+</nav>
+<hr class="nav-hr">
+
+
+<main>
+<h1>Potential project ideas</h1>
+<section id="Self-hosted-RSS-reader-in-D">
+<h2>Self hosted RSS reader in D</h2>
+<ul>
+<li>
+Single executable, web based
+</li>
+<li>
+SQLite3
+</li>
+<li>
+Either use adamdruppe’s rss.d or wrap libmrss
+</li>
+<li>
+Bonus: e-ink friendly display
+</li>
+<li>
+Bonus: netsurf friendly
+</li>
+</ul>
+</section>
+<section id="Desktop-GUI-blogging-CMS-using-tkinter">
+<h2>Desktop GUI blogging CMS using tkinter</h2>
+<ul>
+<li>
+Native win/mac look-and-feel, acceptable on linux (<code>clam</code> looks alright)
+</li>
+<li>
+Split screen: one with markdown/bbcode source and one with rendered preview
+</li>
+<li>
+Sane embedded image/video/etc. file management via GUI
++ Bonus: 1-click preprocessing: strip EXIF, losslessly optimize image
+</li>
+<li>
+<strong>No embedded browser</strong>
+</li>
+<li>
+Is static site generator, but supports 1-click deployment to neocities,
+github/gitlab/sourcehut pages etc.
+</li>
+<li>
+Human-friend distribution e.g. nuitka, pyoxidizer (pyinstaller is pretty meh)
+</li>
+<li>
+Bonus: pluggable templates
+</li>
+</ul>
+</section>
+<section id="Discord-bot-that-launches-CSGO-etc-server-on-demand">
+<h2>Discord bot that launches CSGO/etc. server on demand</h2>
+<p>Eyeing Linode’s 4GB RAM tier at $0.03/hr. But in general it should work on any
+cloud VPS that supports (almost) instant VM launch via API, and snapshots.</p>
+<ul>
+<li>
+Easy on/off/status commands via Discord bot maybe
+</li>
+</ul>
+</section>
+
+</main>
+
+<footer>
+© 2023 nhanb<br>
+Made with <a href="https://github.com/nhanb/s4g">s4g</a>
+</footer>
+
+</body>
+
+</html>
diff --git a/index.html b/index.html
index 052cf5f..dc1bb44 100644
--- a/index.html
+++ b/index.html
@@ -20,6 +20,8 @@ <h1 class="site-title">Hi, I&#39;m Nhân</h1>
 
 <div class="pages">
   <a href="/">Home</a>
+  <a href="/about/">About</a>
+  <a href="/projects/">Projects</a>
   <a class="feed-link" href="/feed.xml">
     <img src="/_theme/feed.svg" alt="Atom Feed" title="Atom Feed">
   </a>
@@ -29,8 +31,15 @@ <h1 class="site-title">Hi, I&#39;m Nhân</h1>
 
 
 
+<p>All posts, newest first:</p>
 
-<p>No posts yet.</p>
+<ul>
+  <li>
+    <span class="time-prefix">0001-01-01 — </span>
+    <a href="/projects/">Projects</a>
+    <span class="time-suffix">(0001-01-01)</span>
+  </li>
+</ul>
 
 
 <style>
diff --git a/manifest.txt b/manifest.txt
index 6553aff..2bb9e07 100644
--- a/manifest.txt
+++ b/manifest.txt
@@ -1,4 +1,8 @@
+about/index.html
+feed.xml
+ideas/index.html
 index.html
+notes/index.html
 posts/acer-chromebook-spin/index.html
 posts/enable-italic-text-vim-tmux-gnome-terminal/index.html
 posts/fix-rmit-wifi-issue-in-ubuntu-13-04-and-variants/index.html
@@ -25,4 +29,6 @@ posts/towards-an-acceptable-video-playing-experience/index.html
 posts/virtualenwrapper-python2-python3/index.html
 posts/what-i-did-after-installing-manjaro-xfce/index.html
 posts/why-i-use-linux-automation/index.html
-posts/working-with-sqlite-in-python-without-an-orm-or-migration-framework/index.html
\ No newline at end of file
+posts/working-with-sqlite-in-python-without-an-orm-or-migration-framework/index.html
+projects/index.html
+yaks/index.html
\ No newline at end of file
diff --git a/content/pages/notes.md b/notes/index.dj
similarity index 73%
rename from content/pages/notes.md
rename to notes/index.dj
index 697fccf..949e839 100644
--- a/content/pages/notes.md
+++ b/notes/index.dj
@@ -1,7 +1,6 @@
 Title: Random notes
-Slug: notes
-Hidden: True
-
+ShowInFeed: false
+---
 
 In which I jot down scattered tidbits on various topics.
 
@@ -11,16 +10,18 @@ ## SRE
 on Rachel By The Bay, the gist is:
 
 - Rollbacks should work. On every deployment.
-
 - A to AB to B (a.k.a. make before break):
-    + v2 code/data should not break v1 code/data
+
+    - v2 code/data should not break v1 code/data
 
 - Strict(er than JSON) schema-ing when you fling data across places
-    + Protobuf, etc.
-    + You should only _begin_ to consider JSON if you need to talk to browsers
+
+    - Protobuf, etc.
+    - You should only _begin_ to consider JSON if you need to talk to browsers
 
 - Please fix 500s.
-    + Also you should only get 400s when talking to external things out of your control
+
+    - Also you should only get 400s when talking to external things out of your control
 
 Her [follow-up](http://rachelbythebay.com/w/2019/10/05/nxdomain/) is a nice
 scary story too. Also reminder that "infra-as-code" abstractions isn't an
diff --git a/notes/index.html b/notes/index.html
new file mode 100644
index 0000000..e3b1fbb
--- /dev/null
+++ b/notes/index.html
@@ -0,0 +1,77 @@
+<!DOCTYPE html>
+<html>
+
+<head>
+  <meta charset="utf-8" />
+  <title>Random notes | Hi, I&#39;m Nhân</title>
+  <meta name="viewport" content="width=device-width, initial-scale=1.0" />
+  <link rel="alternate" type="application/atom+xml" title="Atom feed" href="/feed.xml">
+  <link rel="stylesheet" href="/_theme/base.css">
+</head>
+
+<body>
+
+<link rel="stylesheet" href="/_theme/navbar.css">
+<nav>
+  <a href="/">Home</a>
+  <a href="/about/">About</a>
+  <a href="/projects/">Projects</a>
+
+</nav>
+<hr class="nav-hr">
+
+
+<main>
+<h1>Random notes</h1>
+<p>In which I jot down scattered tidbits on various topics.</p>
+<section id="SRE">
+<h2>SRE</h2>
+<p>There’s a good <a href="http://rachelbythebay.com/w/2019/07/21/reliability/">checklist</a>
+on Rachel By The Bay, the gist is:</p>
+<ul>
+<li>
+Rollbacks should work. On every deployment.
+</li>
+<li>
+A to AB to B (a.k.a. make before break):
+<ul>
+<li>
+v2 code/data should not break v1 code/data
+</li>
+</ul>
+</li>
+<li>
+Strict(er than JSON) schema-ing when you fling data across places
+<ul>
+<li>
+Protobuf, etc.
+</li>
+<li>
+You should only <em>begin</em> to consider JSON if you need to talk to browsers
+</li>
+</ul>
+</li>
+<li>
+Please fix 500s.
+<ul>
+<li>
+Also you should only get 400s when talking to external things out of your control
+</li>
+</ul>
+</li>
+</ul>
+<p>Her <a href="http://rachelbythebay.com/w/2019/10/05/nxdomain/">follow-up</a> is a nice
+scary story too. Also reminder that “infra-as-code” abstractions isn’t an
+excuse <em>not</em> to learn the underlying infra properly.</p>
+</section>
+
+</main>
+
+<footer>
+© 2023 nhanb<br>
+Made with <a href="https://github.com/nhanb/s4g">s4g</a>
+</footer>
+
+</body>
+
+</html>
diff --git a/content/pages/projects.md b/projects/index.dj
similarity index 99%
rename from content/pages/projects.md
rename to projects/index.dj
index 3a46bcb..2d2ff31 100644
--- a/content/pages/projects.md
+++ b/projects/index.dj
@@ -1,5 +1,6 @@
 Title: Projects
 Thumb: images/keyboard-warrior.jpg
+---
 
 
 I've written some open source software in my free time.
diff --git a/projects/index.html b/projects/index.html
new file mode 100644
index 0000000..99175de
--- /dev/null
+++ b/projects/index.html
@@ -0,0 +1,87 @@
+<!DOCTYPE html>
+<html>
+
+<head>
+  <meta charset="utf-8" />
+  <title>Projects | Hi, I&#39;m Nhân</title>
+  <meta name="viewport" content="width=device-width, initial-scale=1.0" />
+  <link rel="alternate" type="application/atom+xml" title="Atom feed" href="/feed.xml">
+  <link rel="stylesheet" href="/_theme/base.css">
+</head>
+
+<body>
+
+<link rel="stylesheet" href="/_theme/navbar.css">
+<nav>
+  <a href="/">Home</a>
+  <a href="/about/">About</a>
+  <a href="/projects/">Projects</a>
+
+</nav>
+<hr class="nav-hr">
+
+
+<main>
+<h1>Projects</h1>
+<p>I’ve written some open source software in my free time.
+In some cases I even maintain them! Shocking, I know.</p>
+<section id="Shark">
+<h2>Shark</h2>
+<p><a href="https://github.com/nhanb/shark/">Shark</a> is a simple “desktop pet”. It’s my first foray into cross-platform
+desktop application development, also my first Go project that actually did
+anything fun.</p>
+</section>
+<section id="Pytaku">
+<h2>Pytaku</h2>
+<p><a href="https://git.sr.ht/~nhanb/pytaku">Pytaku</a> is a web-based manga reader that’s designed to be as
+self-host-friendly as possible. It’s an experiment to see how far I can get
+with a simpler toolset: basically just flask, sqlite and mithril.js for the
+frontend. There are still many rough spots but that’s enough for my daily use,
+so it’s currently in maintenance mode.</p>
+</section>
+<section id="ORTS">
+<h2>ORTS</h2>
+<p><a href="https://github.com/nhanb/orts/">ORTS</a> is a GUI for operating scoreboards on
+fighting game streams. It’s served its purpose beaufifully during
+<a href="https://www.facebook.com/SaigonFGC/">our</a> local tournaments and several
+<a href="https://sgc19.saigonfgc.com/en/">Saigon Cups</a>… until a certain pandemic
+happened.</p>
+</section>
+<section id="An-animated-wallpaper-for-KDE-Plasma">
+<h2>An animated wallpaper for KDE Plasma</h2>
+<p>I was frustrated that KDE 5 didn’t allow animated gifs as wallpaper so I <a href="https://github.com/nhanb/com.nerdyweekly.animated">wrote
+one</a>. Every now and then someone would <a href="https://www.reddit.com/r/unixporn/comments/9sd5uy/kde_plasma_blur_gif_pixel_art_wallpaper_look/">use it on /r/unixporn</a> and cause
+a surge in github stars. It is currently my most starred repo, which gives me
+mixed feelings.</p>
+</section>
+<section id="McRoss">
+<h2>McRoss</h2>
+<p><a href="https://sr.ht/~nhanb/mcross">McRoss</a> is a minimal and usable
+<a href="https://gemini.circumlunar.space/">gemini://</a> browser written in python and
+tkinter, meaning it Just Works (tm) on any self-respecting desktop OS.
+Fast forward a couple of years and there’s still no interesting content on the
+gemini-verse (that I can find anyway). Also given the fact that there’s a very
+good <a href="https://portal.mozz.us/gemini/mozz.us/">web proxy</a> now, McRoss is pretty
+much shelved.</p>
+</section>
+<section id="Caophim">
+<h2>Caophim</h2>
+<p><a href="https://github.com/nhanb/caophim">Caophim</a> is my take on imageboard software and also my excuse to try
+<a href="https://nim-lang.org/">Nim</a>. There’s a usable live instance at <a href="https://caophim.imnhan.com/">caophim.imnhan.com</a>. It’s
+nowhere near my goals but to be honest I got tired of <a href="https://github.com/nim-lang/Nim/issues/13531">running</a> <a href="https://github.com/nim-lang/Nim/issues/13986">into</a>
+<a href="https://github.com/pragmagic/karax/issues/143">nim’s</a> <a href="https://github.com/pragmagic/karax/issues/142">bugs</a>, in the compiler, the standard library, the flagship
+module that’s supposed to supersede a module in the standard library… you
+name it. The straw that broke the camel’s back though, was <a href="https://github.com/nim-lang/Nim/issues/13923">this gem right
+here</a> that remains unfixed to this day.</p>
+</section>
+
+</main>
+
+<footer>
+© 2023 nhanb<br>
+Made with <a href="https://github.com/nhanb/s4g">s4g</a>
+</footer>
+
+</body>
+
+</html>
diff --git a/website.s4g b/website.s4g
index 9e971de..4bf5261 100644
--- a/website.s4g
+++ b/website.s4g
@@ -3,7 +3,7 @@ Name: Hi, I'm Nhân
 Tagline: and welcome to my humble corner on the interwebs
 Root: /
 ShowFooter: true
-NavbarLinks: index.dj
+NavbarLinks: index.dj, about/index.dj, projects/index.dj
 AuthorName: nhanb
 AuthorURI: https://hi.imnhan.com
 AuthorEmail: hi@imnhan.com
diff --git a/content/pages/yaks.md b/yaks/index.dj
similarity index 87%
rename from content/pages/yaks.md
rename to yaks/index.dj
index 3aff4a6..da5b9b1 100644
--- a/content/pages/yaks.md
+++ b/yaks/index.dj
@@ -1,7 +1,6 @@
 Title: Yak shaving
-Slug: yaks
-Hidden: True
-
+ShowInFeed: false
+---
 
 Basically my TODOs, in pursuit of the ever-pervasive _pleasant workflow_.
 
@@ -16,6 +15,7 @@ ## Replacing tmux with kitty
 ## Interesting tools
 
 - [pyinfra](https://pointlessramblings.com/posts/why-you-should-try-pyinfra/):
+
     + faster than ansible, from my anecdotal experience
     + python, not yaml
     + truly agentless (doesn't even require python)
@@ -34,6 +34,6 @@ ## Home server
 
 Services:
 
-- [x] Syncthing
-- [] Some RSS reader
-- [] Some bookmarking system that does full text search.
+- Syncthing
+- Some RSS reader
+- Some bookmarking system that does full text search.
diff --git a/yaks/index.html b/yaks/index.html
new file mode 100644
index 0000000..31f5cb4
--- /dev/null
+++ b/yaks/index.html
@@ -0,0 +1,101 @@
+<!DOCTYPE html>
+<html>
+
+<head>
+  <meta charset="utf-8" />
+  <title>Yak shaving | Hi, I&#39;m Nhân</title>
+  <meta name="viewport" content="width=device-width, initial-scale=1.0" />
+  <link rel="alternate" type="application/atom+xml" title="Atom feed" href="/feed.xml">
+  <link rel="stylesheet" href="/_theme/base.css">
+</head>
+
+<body>
+
+<link rel="stylesheet" href="/_theme/navbar.css">
+<nav>
+  <a href="/">Home</a>
+  <a href="/about/">About</a>
+  <a href="/projects/">Projects</a>
+
+</nav>
+<hr class="nav-hr">
+
+
+<main>
+<h1>Yak shaving</h1>
+<p>Basically my TODOs, in pursuit of the ever-pervasive <em>pleasant workflow</em>.</p>
+<section id="Replacing-tmux-with-kitty">
+<h2>Replacing tmux with kitty</h2>
+<p>All blockers seem to have been addressed now?</p>
+<ul>
+<li>
+<a href="https://sw.kovidgoyal.net/kitty/index.html#startup-sessions">tmuxp replacement</a>
+</li>
+<li>
+<a href="https://github.com/knubie/vim-kitty-navigator">seamless navigation alongside vimsplit</a>
+</li>
+</ul>
+</section>
+<section id="Interesting-tools">
+<h2>Interesting tools</h2>
+<ul>
+<li>
+<a href="https://pointlessramblings.com/posts/why-you-should-try-pyinfra/">pyinfra</a>:
+<ul>
+<li>
+faster than ansible, from my anecdotal experience
+</li>
+<li>
+python, not yaml
+</li>
+<li>
+truly agentless (doesn’t even require python)
+</li>
+</ul>
+</li>
+<li>
+<a href="https://pydoit.org/">doit</a>: I just want a cross-platform <code>make</code>.
+</li>
+</ul>
+</section>
+<section id="Home-server">
+<h2>Home server</h2>
+<p>Specs:</p>
+<ul>
+<li>
+Thinkpad T430 whose screen just broke
+</li>
+<li>
+Accessible via Tailscale
+</li>
+<li>
+Debian 10 installed on main SSD
+</li>
+<li>
+2x1TB Seagate HDDs, LUKS encrypted, running a RAID1 btrfs pool.
+</li>
+</ul>
+<p>Services:</p>
+<ul>
+<li>
+Syncthing
+</li>
+<li>
+Some RSS reader
+</li>
+<li>
+Some bookmarking system that does full text search.
+</li>
+</ul>
+</section>
+
+</main>
+
+<footer>
+© 2023 nhanb<br>
+Made with <a href="https://github.com/nhanb/s4g">s4g</a>
+</footer>
+
+</body>
+
+</html>