Recently Written · git

recentlywritten

my writings (done recently)

git clone https://github.com/equwal/recentlywritten

Log | Files | Refs


commit a786ace08036889d250c2dba58d9622a1af67d49
Spenser Truex <truex@equwal.com>
2026-10-04 23:10:33 -0700

git mirror: update alt-hack0 and minimak-tty-xkb to their full histories

 .../3cc9a7d269baad7a41d252e0525f4835893334ff.html  |  65 +++
 .../a09b18297800b617b3e407f952f0ce5ad2c999ec.html  | 331 ++++++++++++++
 .../bde80c5f6759aab5ff6a61add0704a8f83f3f94b.html  | 485 +++++++++++++++++++++
 .../d56aaf015c47ed3118a4ec06c7493675a9d8ffb8.html  |  27 ++
 .../f109b78b9b2fd835ef21e266b019aa491847ef90.html  |  25 ++
 git/alt-hack0/file/README.md.html                  |  48 +-
 git/alt-hack0/file/all-fonts-bc.lisp.html          |  47 ++
 git/alt-hack0/file/all-fonts-default.lisp.html     |  47 ++
 git/alt-hack0/file/generator-bc.ros.html           | 253 +++++++++++
 git/alt-hack0/file/generator.ros.html              | 379 +++++++++-------
 git/alt-hack0/file/glyphs.html                     |   2 +-
 git/alt-hack0/file/hack.html                       |   4 +-
 git/alt-hack0/file/script-bc.lisp.html             |  14 +
 git/alt-hack0/file/script-default.lisp.html        |  14 +
 git/alt-hack0/file/source.html                     |   2 +-
 git/alt-hack0/file/tarflat.html                    |  26 ++
 git/alt-hack0/file/tt-hinting.html                 |   2 +-
 git/alt-hack0/files.html                           |   2 +-
 git/alt-hack0/index.html                           |   2 +-
 git/alt-hack0/refs.html                            |   2 +-
 git/index.html                                     |   2 +-
 .../008b3165de9dfeb8e6dc642c6f6f53c73ee4a994.html  |  81 ++++
 git/minimak-tty-xkb/file/README.html               |  57 ++-
 git/minimak-tty-xkb/files.html                     |   2 +-
 git/minimak-tty-xkb/index.html                     |   2 +-
 git/minimak-tty-xkb/refs.html                      |   2 +-
 26 files changed, 1708 insertions(+), 215 deletions(-)
diff --git a/git/alt-hack0/commit/3cc9a7d269baad7a41d252e0525f4835893334ff.html b/git/alt-hack0/commit/3cc9a7d269baad7a41d252e0525f4835893334ff.html
new file mode 100644
index 0000000..12b2177
--- /dev/null
+++ b/git/alt-hack0/commit/3cc9a7d269baad7a41d252e0525f4835893334ff.html
@@ -0,0 +1,65 @@
+<!DOCTYPE html>
+<html lang="en"><head><meta charset="UTF-8" />
+<meta name="viewport" content="width=device-width, initial-scale=1" />
+<title>alt-hack0 3cc9a7d2 - Recently Written</title>
+<link rel="stylesheet" href="../../stagit.css" />
+</head><body>
+<div id="top"><a href="../../../index.html">Recently Written</a> &middot; <a href="../../index.html">git</a></div>
+<h1>alt-hack0</h1><span class="desc">The Hack font family with a non-weird zero, and other variants.</span><p class="url">git clone https://github.com/equwal/alt-hack0</p><p><a href="../../alt-hack0/index.html">Log</a> | <a href="../../alt-hack0/files.html">Files</a> | <a href="../../alt-hack0/refs.html">Refs</a></p><hr/>
+<div id="content">
+<pre>commit 3cc9a7d269baad7a41d252e0525f4835893334ff
+Spenser Truex &lt;truex@equwal.com&gt;
+2021-01-16 02:57:05 -0800
+
+Re-symlink.
+
+</pre><pre> TODO       | 1 -
+ glyphs     | 2 +-
+ hack       | 2 +-
+ source     | 2 +-
+ tt-hinting | 2 +-
+ 5 files changed, 4 insertions(+), 5 deletions(-)
+</pre><pre>diff --git a/TODO b/TODO
+deleted file mode 100644
+index 597ec61..0000000
+--- a/TODO
++++ /dev/null
+<span class="h">@@ -1 +0,0 @@</span>
+<span class="d">-- Change these to be scripts which modify the existing layout from the keyboard rather than hand-coded modifications.</span>
+diff --git a/glyphs b/glyphs
+index b44b72b..d90c0ba 120000
+--- a/glyphs
++++ b/glyphs
+<span class="h">@@ -1 +1 @@</span>
+<span class="d">-/home/jose/src/github.com/source-foundry/alt-hack/glyphs/</span>
+\ No newline at end of file
+<span class="a">+/home/jose/src/gh/source-foundry/alt-hack/glyphs</span>
+\ No newline at end of file
+diff --git a/hack b/hack
+index 535ab1c..37532e5 120000
+--- a/hack
++++ b/hack
+<span class="h">@@ -1 +1 @@</span>
+<span class="d">-/home/jose/src/github.com/source-foundry/hack</span>
+\ No newline at end of file
+<span class="a">+/home/jose/src/gh/source-foundry/hack</span>
+\ No newline at end of file
+diff --git a/source b/source
+index 4df09a0..4742210 120000
+--- a/source
++++ b/source
+<span class="h">@@ -1 +1 @@</span>
+<span class="d">-/home/jose/src/github.com/source-foundry/hack/source/</span>
+\ No newline at end of file
+<span class="a">+/home/jose/src/gh/source-foundry/hack/source</span>
+\ No newline at end of file
+diff --git a/tt-hinting b/tt-hinting
+index 3a4409a..405f0d0 120000
+--- a/tt-hinting
++++ b/tt-hinting
+<span class="h">@@ -1 +1 @@</span>
+<span class="d">-/home/jose/src/github.com/source-foundry/hack/postbuild_processing/tt-hinting</span>
+\ No newline at end of file
+<span class="a">+/home/jose/src/gh/source-foundry/hack/postbuild_processing/tt-hinting</span>
+\ No newline at end of file</pre>
+</div></body></html>
diff --git a/git/alt-hack0/commit/a09b18297800b617b3e407f952f0ce5ad2c999ec.html b/git/alt-hack0/commit/a09b18297800b617b3e407f952f0ce5ad2c999ec.html
new file mode 100644
index 0000000..9fe0b3b
--- /dev/null
+++ b/git/alt-hack0/commit/a09b18297800b617b3e407f952f0ce5ad2c999ec.html
@@ -0,0 +1,331 @@
+<!DOCTYPE html>
+<html lang="en"><head><meta charset="UTF-8" />
+<meta name="viewport" content="width=device-width, initial-scale=1" />
+<title>alt-hack0 a09b1829 - Recently Written</title>
+<link rel="stylesheet" href="../../stagit.css" />
+</head><body>
+<div id="top"><a href="../../../index.html">Recently Written</a> &middot; <a href="../../index.html">git</a></div>
+<h1>alt-hack0</h1><span class="desc">The Hack font family with a non-weird zero, and other variants.</span><p class="url">git clone https://github.com/equwal/alt-hack0</p><p><a href="../../alt-hack0/index.html">Log</a> | <a href="../../alt-hack0/files.html">Files</a> | <a href="../../alt-hack0/refs.html">Refs</a></p><hr/>
+<div id="content">
+<pre>commit a09b18297800b617b3e407f952f0ce5ad2c999ec
+Spenser Truex &lt;truex@equwal.com&gt;
+2023-08-10 13:15:50 -0300
+
+Add bc scripts
+
+</pre><pre> Hack              |   1 +
+ all-fonts-bc.lisp |  37 +++++++++
+ generator-bc.ros  | 243 ++++++++++++++++++++++++++++++++++++++++++++++++++++++
+ script-bc.lisp    |   4 +
+ 4 files changed, 285 insertions(+)
+</pre><pre>diff --git a/Hack b/Hack
+new file mode 120000
+index 0000000..f59d596
+--- /dev/null
++++ b/Hack
+<span class="h">@@ -0,0 +1 @@</span>
+<span class="a">+/home/jose/src/repos/gh/source-foundry/hack</span>
+\ No newline at end of file
+diff --git a/all-fonts-bc.lisp b/all-fonts-bc.lisp
+new file mode 100644
+index 0000000..2c35da0
+--- /dev/null
++++ b/all-fonts-bc.lisp
+<span class="h">@@ -0,0 +1,37 @@</span>
+<span class="a">+(defpackage :all-fonts</span>
+<span class="a">+  (:use :cl)</span>
+<span class="a">+  (:import-from :alexandria :map-combinations)</span>
+<span class="a">+  (:import-from :uiop :run-program))</span>
+<span class="a">+(in-package :all-fonts)</span>
+<span class="a">+</span>
+<span class="a">+(defparameter *groups*</span>
+<span class="a">+  &#x27;(curve round backslash diamond dot forwardslash noslab1 flattop3 widerknife slabi slabl traditional loop nogap)</span>
+<span class="a">+  &quot;Things you actually want to permute together.&quot;)</span>
+<span class="a">+</span>
+<span class="a">+(defparameter *exclusions*</span>
+<span class="a">+  &#x27;((curve round)</span>
+<span class="a">+    (backslash diamond dot forwardslash))</span>
+<span class="a">+  &quot;Things which you don&#x27;t want specified at the same time.&quot;)</span>
+<span class="a">+</span>
+<span class="a">+(defun verify (spec)</span>
+<span class="a">+  &quot;Ensure that the spec is not bogus.&quot;</span>
+<span class="a">+  (let ((group (not (set-difference spec *groups*)))</span>
+<span class="a">+        (exclusion (not (some #&#x27;identity</span>
+<span class="a">+                              (mapcar #&#x27;(lambda (ex)</span>
+<span class="a">+                                          (&lt;= 2 (length (intersection spec ex))))</span>
+<span class="a">+                                      *exclusions*)))))</span>
+<span class="a">+    (values (and group exclusion)</span>
+<span class="a">+            (if group (if exclusion &#x27;group-and-exclusion &#x27;group)</span>
+<span class="a">+                (if exclusion &#x27;exclusion &#x27;unknown)))))</span>
+<span class="a">+(defun gen-all-fonts ()</span>
+<span class="a">+  (loop for x from 1 to (length *groups*)</span>
+<span class="a">+        do (map-combinations</span>
+<span class="a">+             (lambda (f)</span>
+<span class="a">+               (when (verify f)</span>
+<span class="a">+                 (run-program (format nil &quot;./generator-bc.ros --ttf --woff --woff2 ~(~{ ~A~}~)&quot; f) :output t)</span>
+<span class="a">+                 ;; KLUDGE: Weird bug where everything ends up in the ttf folder</span>
+<span class="a">+                 (run-program (format nil &quot;tar -vcf - Hack/build/ttf/* | xz -12 &gt;&#x27;~(~{~A~}~).tar.xz&#x27;&quot; f) :output t)</span>
+<span class="a">+                 (run-program &quot;rm -Rf Hack/build&quot;)</span>
+<span class="a">+                 (run-program &quot;mkdir Hack/build&quot;)))</span>
+<span class="a">+            *groups*</span>
+<span class="a">+             :length x)))</span>
+diff --git a/generator-bc.ros b/generator-bc.ros
+new file mode 100755
+index 0000000..9e8b33b
+--- /dev/null
++++ b/generator-bc.ros
+<span class="h">@@ -0,0 +1,243 @@</span>
+<span class="a">+#!/bin/sh</span>
+<span class="a">+#|-*- mode:lisp -*-|#</span>
+<span class="a">+#|</span>
+<span class="a">+exec ros -Q -- $0 &quot;$@&quot;</span>
+<span class="a">+|#</span>
+<span class="a">+;;; This file (c) Spenser Truex 2021</span>
+<span class="a">+;;; MIT license.</span>
+<span class="a">+</span>
+<span class="a">+(progn ;;init forms</span>
+<span class="a">+  (ros:ensure-asdf)</span>
+<span class="a">+  #+quicklisp(ql:quickload &#x27;(:alexandria :uiop)</span>
+<span class="a">+                           :silent t))</span>
+<span class="a">+</span>
+<span class="a">+;;; EXAMPLE USAGE:</span>
+<span class="a">+;;; cd alt-hack &amp;&amp; ./generator.ros curve dot slabi</span>
+<span class="a">+(defpackage :ros.script.generator.3783095582</span>
+<span class="a">+  (:use :cl))</span>
+<span class="a">+(in-package :ros.script.generator.3783095582)</span>
+<span class="a">+(defvar *weights* &#x27;(&quot;Bold&quot; &quot;BoldItalic&quot; &quot;Italic&quot; &quot;Regular&quot;))</span>
+<span class="a">+</span>
+<span class="a">+(defun uncomment (spec)</span>
+<span class="a">+  (remove-if #&#x27;(lambda (item)</span>
+<span class="a">+                 (and (stringp item)</span>
+<span class="a">+                      (= 1 (length item))))</span>
+<span class="a">+             spec))</span>
+<span class="a">+</span>
+<span class="a">+(defparameter *helpful-groups*</span>
+<span class="a">+  &#x27;(;; Barry Cohen&#x27;s additions</span>
+<span class="a">+    (slabl &quot;u006C-slab&quot; &quot;l&quot;</span>
+<span class="a">+           &quot;u013C-slab&quot; &quot;ļ&quot;</span>
+<span class="a">+           &quot;u013E-slab&quot; &quot;ľ&quot;</span>
+<span class="a">+           &quot;u0142-slab&quot; &quot;ł&quot;</span>
+<span class="a">+           &quot;u013A-slab&quot; &quot;ĺ&quot;</span>
+<span class="a">+           &quot;u0140-slab&quot; &quot;ŀ&quot;)</span>
+<span class="a">+    (traditional &quot;u0025-traditional&quot; &quot;%&quot;)</span>
+<span class="a">+    (nogap &quot;u0026-nogap&quot; &quot;&amp;&quot;)</span>
+<span class="a">+    (loop &quot;u0067-loop&quot; &quot;g&quot;</span>
+<span class="a">+          &quot;u0123-loop&quot; &quot;ǵ&quot;</span>
+<span class="a">+          &quot;u011F-loop&quot; &quot;ğ&quot;</span>
+<span class="a">+          &quot;u01E7-loop&quot; &quot;ǧ&quot;</span>
+<span class="a">+          &quot;u0121-loop&quot; &quot;ġ&quot;</span>
+<span class="a">+          &quot;u011D-loop&quot; &quot;ĝ&quot;)</span>
+<span class="a">+    (curve &quot;u0028-curved&quot; &quot;(&quot;</span>
+<span class="a">+     &quot;u0029-curved&quot; &quot;)&quot;)</span>
+<span class="a">+    (round &quot;u0028-rounder&quot; &quot;(&quot;</span>
+<span class="a">+     &quot;u0029-rounder&quot; &quot;)&quot;)</span>
+<span class="a">+    (backslash &quot;u0030-backslash&quot; &quot;0&quot;)</span>
+<span class="a">+    (diamond &quot;u0030-diamond&quot; &quot;0&quot;)</span>
+<span class="a">+    (dot &quot;u0030-dotted&quot; &quot;0&quot;)</span>
+<span class="a">+    (forwardslash &quot;u0030-forwardslash&quot; &quot;0&quot;)</span>
+<span class="a">+    (noslab1 &quot;u0031-noslab&quot; &quot;1&quot;)</span>
+<span class="a">+    (flattop3 &quot;u0033-flattop&quot; &quot;3&quot;)</span>
+<span class="a">+    (wider &quot;u003C-wider&quot; &quot;&lt;&quot;</span>
+<span class="a">+     &quot;u003E-wider&quot; &quot;&gt;&quot;)</span>
+<span class="a">+    (knife &quot;u0066-knife&quot; &quot;f&quot;)</span>
+<span class="a">+    (slabi &quot;u0069-slab&quot; &quot;i&quot;</span>
+<span class="a">+     &quot;u00EC-slab&quot; &quot;ì&quot;</span>
+<span class="a">+     &quot;u00ED-slab&quot; &quot;í&quot;</span>
+<span class="a">+     &quot;u00EE-slab&quot; &quot;î&quot;</span>
+<span class="a">+     &quot;u00EF-slab&quot; &quot;ï&quot;</span>
+<span class="a">+     &quot;u0129-slab&quot; &quot;ĩ&quot;</span>
+<span class="a">+     &quot;u012B-slab&quot; &quot;ī&quot;</span>
+<span class="a">+     &quot;u012D-slab&quot; &quot;ĭ&quot;</span>
+<span class="a">+     &quot;u012F-slab&quot; &quot;į&quot;</span>
+<span class="a">+     &quot;u0131-slab&quot; &quot;ı&quot;</span>
+<span class="a">+     &quot;u0456-slab&quot; &quot;і&quot;</span>
+<span class="a">+     &quot;u0457-slab&quot; &quot;ї&quot;))</span>
+<span class="a">+  &quot;Groups with extra information for user help.&quot;)</span>
+<span class="a">+</span>
+<span class="a">+(defun prune (test tree)</span>
+<span class="a">+  (labels ((rec (tree acc)</span>
+<span class="a">+             (cond</span>
+<span class="a">+               ((null tree) (nreverse acc))</span>
+<span class="a">+               ((consp (car tree))</span>
+<span class="a">+                (rec (cdr tree)</span>
+<span class="a">+                     (cons (rec (car tree) nil) acc)))</span>
+<span class="a">+               (t (rec (cdr tree)</span>
+<span class="a">+                       (if (funcall test (car tree))</span>
+<span class="a">+                           acc</span>
+<span class="a">+                           (cons (car tree) acc)))))))</span>
+<span class="a">+    (rec tree nil)))</span>
+<span class="a">+</span>
+<span class="a">+(defun pprint-helpful-groups ()</span>
+<span class="a">+  (let ((more-helpful (prune #&#x27;(lambda (s)</span>
+<span class="a">+                                 (and (stringp s)</span>
+<span class="a">+                                      (&lt; 1 (length s))))</span>
+<span class="a">+                             *helpful-groups*)))</span>
+<span class="a">+    (loop for g in more-helpful</span>
+<span class="a">+          do (format t &quot;~A:~%&quot; (car g))</span>
+<span class="a">+          do (format t &quot;~{~A ~}~%&quot; (cdr g)))))</span>
+<span class="a">+(defparameter *groups*</span>
+<span class="a">+  (mapcar #&#x27;uncomment *helpful-groups*)</span>
+<span class="a">+  &quot;Things you actually want to permute together.&quot;)</span>
+<span class="a">+(defparameter *exclusions*</span>
+<span class="a">+  &#x27;((curve round)</span>
+<span class="a">+    (backslash diamond dot forwardslash))</span>
+<span class="a">+  &quot;Things which you don&#x27;t want specified at the same time.&quot;)</span>
+<span class="a">+(defparameter *formats*</span>
+<span class="a">+  &#x27;(&quot;ttf&quot; &quot;woff&quot; &quot;woff2&quot;)</span>
+<span class="a">+  &quot;Valid parameters to call as formats.&quot;)</span>
+<span class="a">+</span>
+<span class="a">+(define-symbol-macro help</span>
+<span class="a">+    (progn (pprint-lines</span>
+<span class="a">+            &quot;generator.ros OPTIONS* {SHOW | SPEC+}&quot;)</span>
+<span class="a">+           (format t &quot;These are valid OPTIONS: ~{~A ~}~%&quot;</span>
+<span class="a">+                   (mapcar #&#x27;(lambda (f) (concatenate &#x27;string &quot;--&quot; f))</span>
+<span class="a">+                           *formats*))</span>
+<span class="a">+           (pprint-lines &quot;SPEC should be a list of:&quot;)</span>
+<span class="a">+           (pprint-helpful-groups)</span>
+<span class="a">+           (pprint-lines</span>
+<span class="a">+            &quot;Keep in mind that it makes no sense to include&quot;</span>
+<span class="a">+            &quot;the same character spec twice.&quot;</span>
+<span class="a">+            &quot;SHOW just finds all available glyphs in alt-hack.&quot;</span>
+<span class="a">+            &quot;TEST runs the test functions for ttf, woff and woff2.&quot;)))</span>
+<span class="a">+</span>
+<span class="a">+(defun find-keyword (keyword group)</span>
+<span class="a">+  (when (not (null group))</span>
+<span class="a">+    (let ((c (car group)))</span>
+<span class="a">+      (if (eql keyword (car c))</span>
+<span class="a">+          c</span>
+<span class="a">+          (find-keyword keyword (cdr group))))))</span>
+<span class="a">+</span>
+<span class="a">+(defun folders (keyword)</span>
+<span class="a">+  (cdr (find-keyword keyword *groups*)))</span>
+<span class="a">+</span>
+<span class="a">+(defun pprint-lines (&amp;rest strings)</span>
+<span class="a">+  (format t &quot;~{~A~%~}&quot; strings))</span>
+<span class="a">+</span>
+<span class="a">+(defun remove-hints ()</span>
+<span class="a">+  (let ((files (uiop:directory-files #P&quot;Hack/postbuild_processing/tt-hinting&quot;)))</span>
+<span class="a">+    (dolist (f files)</span>
+<span class="a">+      (with-open-file (si f :direction :input)</span>
+<span class="a">+        (with-open-file (so f :direction :output</span>
+<span class="a">+                              :if-exists :supersede)</span>
+<span class="a">+          (let ((line (read-line si nil nil)))</span>
+<span class="a">+            (when (and line (char/= #\#(elt line 0)))</span>
+<span class="a">+              (write-line (format nil &quot;# ~S~%&quot; line) so))))))))</span>
+<span class="a">+</span>
+<span class="a">+(defun put-glyphs! (ufolders)</span>
+<span class="a">+  (dolist (arg ufolders)</span>
+<span class="a">+    (dolist (weight *weights*)</span>
+<span class="a">+      (dolist (f (uiop:directory-files</span>
+<span class="a">+                  (concatenate &#x27;string &quot;glyphs/&quot; arg &quot;/&quot;</span>
+<span class="a">+                               (string-downcase weight) &quot;/&quot;)))</span>
+<span class="a">+        (uiop:copy-file f</span>
+<span class="a">+                   (concatenate &#x27;string</span>
+<span class="a">+                                &quot;Hack/source/Hack-&quot;</span>
+<span class="a">+                                weight</span>
+<span class="a">+                                &quot;.ufo/glyphs/&quot;</span>
+<span class="a">+                                (pathname-name f)</span>
+<span class="a">+                                &quot;.&quot;</span>
+<span class="a">+                                (pathname-type f)))))))</span>
+<span class="a">+(defun make-it (&amp;optional subcommand)</span>
+<span class="a">+  ;; Cannot use uiop:launch-program since it is asynchronous.</span>
+<span class="a">+  (uiop:run-program (if subcommand</span>
+<span class="a">+                      (list &quot;make&quot; subcommand)</span>
+<span class="a">+                      &quot;make&quot;)</span>
+<span class="a">+                  :output *standard-output*</span>
+<span class="a">+                  :directory #P&quot;Hack&quot;</span>
+<span class="a">+                  :error-output *standard-output*))</span>
+<span class="a">+(defun build (&amp;rest make-commands)</span>
+<span class="a">+  (dolist (m make-commands)</span>
+<span class="a">+    (make-it m)))</span>
+<span class="a">+</span>
+<span class="a">+(defun verify (spec)</span>
+<span class="a">+  &quot;Ensure that the spec is not bogus.&quot;</span>
+<span class="a">+  (let ((group (not (set-difference spec (mapcar #&#x27;car *groups*))))</span>
+<span class="a">+        (exclusion (not (some #&#x27;identity</span>
+<span class="a">+                    (mapcar #&#x27;(lambda (ex)</span>
+<span class="a">+                                (&lt;= 2 (length (intersection spec ex))))</span>
+<span class="a">+                            *exclusions*)))))</span>
+<span class="a">+    (values (and group exclusion)</span>
+<span class="a">+            (if group (if exclusion &#x27;group-and-exclusion &#x27;group)</span>
+<span class="a">+                (if exclusion &#x27;exclusion &#x27;unknown)))))</span>
+<span class="a">+</span>
+<span class="a">+(defun show-characters ()</span>
+<span class="a">+  (flet ((pprint-letters (letter-alist)</span>
+<span class="a">+           (dolist (p letter-alist)</span>
+<span class="a">+             (format t &quot;~T~A~T~A~%&quot;</span>
+<span class="a">+                     (string (cdr p)) (car p)))))</span>
+<span class="a">+    (let ((dirs (uiop:subdirectories &quot;glyphs&quot;)))</span>
+<span class="a">+      (pprint-letters</span>
+<span class="a">+       (loop</span>
+<span class="a">+         for d in dirs</span>
+<span class="a">+         collecting</span>
+<span class="a">+         (let ((mat (car (last (pathname-directory d)))))</span>
+<span class="a">+           (cons</span>
+<span class="a">+            mat</span>
+<span class="a">+            (code-char (read-from-string</span>
+<span class="a">+                        (concatenate &#x27;string</span>
+<span class="a">+                                     &quot;#x&quot;</span>
+<span class="a">+                                (subseq mat 1 (search &quot;-&quot; mat))))))))))))</span>
+<span class="a">+(defun format-parser (argv)</span>
+<span class="a">+  (when argv</span>
+<span class="a">+    (let ((c (car argv)))</span>
+<span class="a">+      (when (and (&lt; 2 (length c))</span>
+<span class="a">+                 (string= &quot;--&quot; (subseq c 0 2)))</span>
+<span class="a">+       (cons (subseq c 2) (format-parser (cdr argv)))))))</span>
+<span class="a">+(defun should-help (argv)</span>
+<span class="a">+  (or (null argv)</span>
+<span class="a">+      (dolist (a argv)</span>
+<span class="a">+        (when (or (search &quot;-?&quot; a)</span>
+<span class="a">+                  (search &quot;-h&quot; a)</span>
+<span class="a">+                  (search &quot;help&quot; a))</span>
+<span class="a">+          (return t)))))</span>
+<span class="a">+(defun should-test (argv)</span>
+<span class="a">+  (string= (car argv) &quot;test&quot;))</span>
+<span class="a">+</span>
+<span class="a">+(define-symbol-macro test</span>
+<span class="a">+    (progn (format t &quot;Helping you:~%&quot;)</span>
+<span class="a">+           (main &quot;help&quot;)</span>
+<span class="a">+           (format t &quot;~%DONE. Trying TTF.&quot;)</span>
+<span class="a">+           (main &quot;--ttf&quot;)</span>
+<span class="a">+           (format t &quot;~%DONE. Trying WOFF.&quot;)</span>
+<span class="a">+           (main &quot;--woff&quot;)</span>
+<span class="a">+           (format t &quot;~%DONE. Trying WOFF2.&quot;)</span>
+<span class="a">+           (main &quot;--woff2&quot;)))</span>
+<span class="a">+</span>
+<span class="a">+(defun main (&amp;rest argv)</span>
+<span class="a">+  (declare (ignorable argv))</span>
+<span class="a">+  (if (should-help argv)</span>
+<span class="a">+      help</span>
+<span class="a">+      (if (should-test argv)</span>
+<span class="a">+          test</span>
+<span class="a">+          (let ((formats (format-parser argv)))</span>
+<span class="a">+            (let ((argv (mapcar (lambda (g) (intern (string-upcase g)))</span>
+<span class="a">+                                (nthcdr (length formats) argv)))</span>
+<span class="a">+                  (formats (or formats &quot;ttf woff woff2&quot;)))</span>
+<span class="a">+              (if (and argv (string= &quot;SHOW&quot; (string-upcase (car argv))))</span>
+<span class="a">+                  (show-characters)</span>
+<span class="a">+                  (multiple-value-bind (bool name)</span>
+<span class="a">+                      (verify argv)</span>
+<span class="a">+                    (if bool</span>
+<span class="a">+                        (progn (remove-hints)</span>
+<span class="a">+                               (mapc #&#x27;put-glyphs!</span>
+<span class="a">+                                     (mapcar #&#x27;folders argv))</span>
+<span class="a">+                               ;; Can&#x27;t get woff2 on my system.</span>
+<span class="a">+                               (mapc #&#x27;build formats))</span>
+<span class="a">+                        (progn (format t &quot;Invalid ~S in spec: ~{~A ~}~%&quot;</span>
+<span class="a">+                                       name</span>
+<span class="a">+                                       argv))))))))))</span>
+<span class="a">+</span>
+<span class="a">+;;; vim: set ft=lisp lisp:</span>
+diff --git a/script-bc.lisp b/script-bc.lisp
+new file mode 100644
+index 0000000..cda6908
+--- /dev/null
++++ b/script-bc.lisp
+<span class="h">@@ -0,0 +1,4 @@</span>
+<span class="a">+(ql:quickload :alexandria)</span>
+<span class="a">+(ql:quickload :uiop)</span>
+<span class="a">+(load &quot;all-fonts-bc.lisp&quot;)</span>
+<span class="a">+(all-fonts::gen-all-fonts)</span></pre>
+</div></body></html>
diff --git a/git/alt-hack0/commit/bde80c5f6759aab5ff6a61add0704a8f83f3f94b.html b/git/alt-hack0/commit/bde80c5f6759aab5ff6a61add0704a8f83f3f94b.html
new file mode 100644
index 0000000..b5e3bab
--- /dev/null
+++ b/git/alt-hack0/commit/bde80c5f6759aab5ff6a61add0704a8f83f3f94b.html
@@ -0,0 +1,485 @@
+<!DOCTYPE html>
+<html lang="en"><head><meta charset="UTF-8" />
+<meta name="viewport" content="width=device-width, initial-scale=1" />
+<title>alt-hack0 bde80c5f - Recently Written</title>
+<link rel="stylesheet" href="../../stagit.css" />
+</head><body>
+<div id="top"><a href="../../../index.html">Recently Written</a> &middot; <a href="../../index.html">git</a></div>
+<h1>alt-hack0</h1><span class="desc">The Hack font family with a non-weird zero, and other variants.</span><p class="url">git clone https://github.com/equwal/alt-hack0</p><p><a href="../../alt-hack0/index.html">Log</a> | <a href="../../alt-hack0/files.html">Files</a> | <a href="../../alt-hack0/refs.html">Refs</a></p><hr/>
+<div id="content">
+<pre>commit bde80c5f6759aab5ff6a61add0704a8f83f3f94b
+Spenser Truex &lt;truex@equwal.com&gt;
+2021-02-05 15:47:29 -0800
+
+Add combinatoric script
+
+</pre><pre> README.md              |  12 +++
+ all-fonts-default.lisp |  37 +++++++
+ alt-hack-new-glyphs    |   1 +
+ generator.ros          | 265 +++++++++++++++++++++++++++++++------------------
+ glyphs                 |   2 +-
+ hack                   |   1 -
+ script-default.lisp    |   4 +
+ source                 |   2 +-
+ tarflat                |  16 +++
+ tt-hinting             |   2 +-
+ 10 files changed, 241 insertions(+), 101 deletions(-)
+</pre><pre>diff --git a/README.md b/README.md
+index 202b787..724d048 100644
+--- a/README.md
++++ b/README.md
+<span class="h">@@ -1,5 +1,17 @@</span>
+ # Hack with an alternative zero.
+ 
+<span class="a">+Warning:</span>
+<span class="a">+</span>
+<span class="a">+Generating alt-hacks is confusing. Among the confusions:</span>
+<span class="a">+- Installing binaries in your /home/user directory</span>
+<span class="a">+- Undocumented dependencies (including the above!)</span>
+<span class="a">+- alt-hacks script that I made is lazy about helping you and sucks. To use it:</span>
+<span class="a">+$ sbcl</span>
+<span class="a">+(ql:quickload :alexandria)</span>
+<span class="a">+(ql:quickload :uiop)</span>
+<span class="a">+(load &quot;all-fonts.lisp)</span>
+<span class="a">+(all-fonts::gen-all-fonts) ; spend forever generating an assload of stuff</span>
+<span class="a">+</span>
+ [Released font downloads](https://www.equwal.com/alt-hacks.html)
+ 
+ Like [Hack](https://github.com/ryanoasis/nerd-fonts) fonts? Dislike
+diff --git a/all-fonts-default.lisp b/all-fonts-default.lisp
+new file mode 100644
+index 0000000..cc23e73
+--- /dev/null
++++ b/all-fonts-default.lisp
+<span class="h">@@ -0,0 +1,37 @@</span>
+<span class="a">+(defpackage :all-fonts</span>
+<span class="a">+  (:use :cl)</span>
+<span class="a">+  (:import-from :alexandria :map-combinations)</span>
+<span class="a">+  (:import-from :uiop :run-program))</span>
+<span class="a">+(in-package :all-fonts)</span>
+<span class="a">+</span>
+<span class="a">+(defparameter *groups*</span>
+<span class="a">+  &#x27;(curve round backslash diamond dot forwardslash noslab1 flattop3 widerknife slabi)</span>
+<span class="a">+  &quot;Things you actually want to permute together.&quot;)</span>
+<span class="a">+</span>
+<span class="a">+(defparameter *exclusions*</span>
+<span class="a">+  &#x27;((curve round)</span>
+<span class="a">+    (backslash diamond dot forwardslash))</span>
+<span class="a">+  &quot;Things which you don&#x27;t want specified at the same time.&quot;)</span>
+<span class="a">+</span>
+<span class="a">+(defun verify (spec)</span>
+<span class="a">+  &quot;Ensure that the spec is not bogus.&quot;</span>
+<span class="a">+  (let ((group (not (set-difference spec *groups*)))</span>
+<span class="a">+        (exclusion (not (some #&#x27;identity</span>
+<span class="a">+                              (mapcar #&#x27;(lambda (ex)</span>
+<span class="a">+                                          (&lt;= 2 (length (intersection spec ex))))</span>
+<span class="a">+                                      *exclusions*)))))</span>
+<span class="a">+    (values (and group exclusion)</span>
+<span class="a">+            (if group (if exclusion &#x27;group-and-exclusion &#x27;group)</span>
+<span class="a">+                (if exclusion &#x27;exclusion &#x27;unknown)))))</span>
+<span class="a">+(defun gen-all-fonts ()</span>
+<span class="a">+  (loop for x from 1 to (length *groups*)</span>
+<span class="a">+        do (map-combinations</span>
+<span class="a">+             (lambda (f)</span>
+<span class="a">+               (when (verify f)</span>
+<span class="a">+                 (run-program (format nil &quot;./generator.ros --ttf --woff --woff2 ~(~{ ~A~}~)&quot; f) :output t)</span>
+<span class="a">+                 ;; KLUDGE: Weird bug where everything ends up in the ttf folder</span>
+<span class="a">+                 (run-program (format nil &quot;tar -vcf - Hack/build/ttf/* | xz -12 &gt;&#x27;~(~{~A~}~).tar.xz&#x27;&quot; f) :output t)</span>
+<span class="a">+                 (run-program &quot;rm -Rf Hack/build&quot;)</span>
+<span class="a">+                 (run-program &quot;mkdir Hack/build&quot;)))</span>
+<span class="a">+            *groups*</span>
+<span class="a">+             :length x)))</span>
+diff --git a/alt-hack-new-glyphs b/alt-hack-new-glyphs
+new file mode 160000
+index 0000000..4921583
+--- /dev/null
++++ b/alt-hack-new-glyphs
+<span class="h">@@ -0,0 +1 @@</span>
+<span class="a">+Subproject commit 4921583737a2368684eb7ce3fad4b68579a2596b</span>
+diff --git a/generator.ros b/generator.ros
+index 37f460d..9e6fbb5 100755
+--- a/generator.ros
++++ b/generator.ros
+<span class="h">@@ -3,35 +3,19 @@</span>
+ #|
+ exec ros -Q -- $0 &quot;$@&quot;
+ |#
+<span class="a">+;;; This file (c) Spenser Truex 2021</span>
+<span class="a">+;;; MIT license.</span>
+<span class="a">+</span>
+ (progn ;;init forms
+   (ros:ensure-asdf)
+<span class="d">-  #+quicklisp(ql:quickload &#x27;(:alexandria :str :uiop :let-over-lambda)</span>
+<span class="d">-                           :silent t)</span>
+<span class="d">-  (asdf:load-system :utils) ;My utilities, has the COLLECT macro.</span>
+<span class="d">-  )</span>
+<span class="a">+  #+quicklisp(ql:quickload &#x27;(:alexandria :uiop)</span>
+<span class="a">+                           :silent t))</span>
+ 
+<span class="a">+;;; EXAMPLE USAGE:</span>
+<span class="a">+;;; cd alt-hack &amp;&amp; ./generator.ros curve dot slabi</span>
+ (defpackage :ros.script.generator.3783095582
+<span class="d">-  (:use :cl)</span>
+<span class="d">-  (:import-from</span>
+<span class="d">-   :alexandria</span>
+<span class="d">-   :flatten</span>
+<span class="d">-   :compose)</span>
+<span class="d">-  (:import-from :str :concat)</span>
+<span class="d">-  (:import-from :utils :collect :group :mapatoms)</span>
+<span class="d">-  (:import-from</span>
+<span class="d">-   :uiop</span>
+<span class="d">-   :copy-file</span>
+<span class="d">-   :resolve-symlinks</span>
+<span class="d">-   :directory-files</span>
+<span class="d">-   :subdirectories</span>
+<span class="d">-   :run-program))</span>
+<span class="a">+  (:use :cl))</span>
+ (in-package :ros.script.generator.3783095582)
+<span class="d">-;;; Uses a magic symlinks to deal with directories. Make sure they exist in your</span>
+<span class="d">-;;; toplevel:</span>
+<span class="d">-;;; - tt-hinting (in hack/post_processing)</span>
+<span class="d">-;;; - glyphs (in alt-hack)</span>
+<span class="d">-;;; - source (in hack)</span>
+<span class="d">-;;; - hack</span>
+ (defvar *weights* &#x27;(&quot;Bold&quot; &quot;BoldItalic&quot; &quot;Italic&quot; &quot;Regular&quot;))
+ 
+ (defun uncomment (spec)
+<span class="h">@@ -40,34 +24,80 @@ exec ros -Q -- $0 &quot;$@&quot;</span>
+                       (= 1 (length item))))
+              spec))
+ 
+<span class="a">+(defparameter *helpful-groups*</span>
+<span class="a">+  &#x27;(</span>
+<span class="a">+    (curve &quot;u0028-curved&quot; &quot;(&quot;</span>
+<span class="a">+     &quot;u0029-curved&quot; &quot;)&quot;)</span>
+<span class="a">+    (round &quot;u0028-rounder&quot; &quot;(&quot;</span>
+<span class="a">+     &quot;u0029-rounder&quot; &quot;)&quot;)</span>
+<span class="a">+    (backslash &quot;u0030-backslash&quot; &quot;0&quot;)</span>
+<span class="a">+    (diamond &quot;u0030-diamond&quot; &quot;0&quot;)</span>
+<span class="a">+    (dot &quot;u0030-dotted&quot; &quot;0&quot;)</span>
+<span class="a">+    (forwardslash &quot;u0030-forwardslash&quot; &quot;0&quot;)</span>
+<span class="a">+    (noslab1 &quot;u0031-noslab&quot; &quot;1&quot;)</span>
+<span class="a">+    (flattop3 &quot;u0033-flattop&quot; &quot;3&quot;)</span>
+<span class="a">+    (wider &quot;u003C-wider&quot; &quot;&lt;&quot;</span>
+<span class="a">+     &quot;u003E-wider&quot; &quot;&gt;&quot;)</span>
+<span class="a">+    (knife &quot;u0066-knife&quot; &quot;f&quot;)</span>
+<span class="a">+    (slabi &quot;u0069-slab&quot; &quot;i&quot;</span>
+<span class="a">+     &quot;u00EC-slab&quot; &quot;ì&quot;</span>
+<span class="a">+     &quot;u00ED-slab&quot; &quot;í&quot;</span>
+<span class="a">+     &quot;u00EE-slab&quot; &quot;î&quot;</span>
+<span class="a">+     &quot;u00EF-slab&quot; &quot;ï&quot;</span>
+<span class="a">+     &quot;u0129-slab&quot; &quot;ĩ&quot;</span>
+<span class="a">+     &quot;u012B-slab&quot; &quot;ī&quot;</span>
+<span class="a">+     &quot;u012D-slab&quot; &quot;ĭ&quot;</span>
+<span class="a">+     &quot;u012F-slab&quot; &quot;į&quot;</span>
+<span class="a">+     &quot;u0131-slab&quot; &quot;ı&quot;</span>
+<span class="a">+     &quot;u0456-slab&quot; &quot;і&quot;</span>
+<span class="a">+     &quot;u0457-slab&quot; &quot;ї&quot;))</span>
+<span class="a">+  &quot;Groups with extra information for user help.&quot;)</span>
+<span class="a">+</span>
+<span class="a">+(defun prune (test tree)</span>
+<span class="a">+  (labels ((rec (tree acc)</span>
+<span class="a">+             (cond</span>
+<span class="a">+               ((null tree) (nreverse acc))</span>
+<span class="a">+               ((consp (car tree))</span>
+<span class="a">+                (rec (cdr tree)</span>
+<span class="a">+                     (cons (rec (car tree) nil) acc)))</span>
+<span class="a">+               (t (rec (cdr tree)</span>
+<span class="a">+                       (if (funcall test (car tree))</span>
+<span class="a">+                           acc</span>
+<span class="a">+                           (cons (car tree) acc)))))))</span>
+<span class="a">+    (rec tree nil)))</span>
+<span class="a">+</span>
+<span class="a">+(defun pprint-helpful-groups ()</span>
+<span class="a">+  (let ((more-helpful (prune #&#x27;(lambda (s)</span>
+<span class="a">+                                 (and (stringp s)</span>
+<span class="a">+                                      (&lt; 1 (length s))))</span>
+<span class="a">+                             *helpful-groups*)))</span>
+<span class="a">+    (loop for g in more-helpful</span>
+<span class="a">+          do (format t &quot;~A:~%&quot; (car g))</span>
+<span class="a">+          do (format t &quot;~{~A ~}~%&quot; (cdr g)))))</span>
+ (defparameter *groups*
+<span class="d">-  (mapcar #&#x27;uncomment</span>
+<span class="d">-   &#x27;((curve &quot;u0028-curved&quot; &quot;(&quot;</span>
+<span class="d">-      &quot;u0029-curved&quot; &quot;)&quot;)</span>
+<span class="d">-     (round &quot;u0028-rounder&quot; &quot;(&quot;</span>
+<span class="d">-      &quot;u0029-rounder&quot; &quot;)&quot;)</span>
+<span class="d">-     (backslash &quot;u0030-backslash&quot; &quot;0&quot;)</span>
+<span class="d">-     (diamond &quot;u0030-diamond&quot; &quot;0&quot;)</span>
+<span class="d">-     (dot &quot;u0030-dotted&quot; &quot;0&quot;)</span>
+<span class="d">-     (forwardslash &quot;u0030-forwardslash&quot; &quot;0&quot;)</span>
+<span class="d">-     (noslab1 &quot;u0031-noslab&quot; &quot;1&quot;)</span>
+<span class="d">-     (flattop3 &quot;u0033-flattop&quot; &quot;3&quot;)</span>
+<span class="d">-     (wider &quot;u003C-wider&quot; &quot;&lt;&quot;</span>
+<span class="d">-      &quot;u003E-wider&quot; &quot;&gt;&quot;)</span>
+<span class="d">-     (knife &quot;u0066-knife&quot; &quot;f&quot;)</span>
+<span class="d">-     (slabi &quot;u0069-slab&quot; &quot;i&quot;</span>
+<span class="d">-      &quot;u00EC-slab&quot; &quot;ì&quot;</span>
+<span class="d">-      &quot;u00ED-slab&quot; &quot;í&quot;</span>
+<span class="d">-      &quot;u00EE-slab&quot; &quot;î&quot;</span>
+<span class="d">-      &quot;u00EF-slab&quot; &quot;ï&quot;</span>
+<span class="d">-      &quot;u0129-slab&quot; &quot;ĩ&quot;</span>
+<span class="d">-      &quot;u012B-slab&quot; &quot;ī&quot;</span>
+<span class="d">-      &quot;u012D-slab&quot; &quot;ĭ&quot;</span>
+<span class="d">-      &quot;u012F-slab&quot; &quot;į&quot;</span>
+<span class="d">-      &quot;u0131-slab&quot; &quot;ı&quot;</span>
+<span class="d">-      &quot;u0456-slab&quot; &quot;і&quot;</span>
+<span class="d">-      &quot;u0457-slab&quot; &quot;ї&quot;)))</span>
+<span class="a">+  (mapcar #&#x27;uncomment *helpful-groups*)</span>
+   &quot;Things you actually want to permute together.&quot;)
+<span class="a">+(defparameter *exclusions*</span>
+<span class="a">+  &#x27;((curve round)</span>
+<span class="a">+    (backslash diamond dot forwardslash))</span>
+<span class="a">+  &quot;Things which you don&#x27;t want specified at the same time.&quot;)</span>
+<span class="a">+(defparameter *formats*</span>
+<span class="a">+  &#x27;(&quot;ttf&quot; &quot;woff&quot; &quot;woff2&quot;)</span>
+<span class="a">+  &quot;Valid parameters to call as formats.&quot;)</span>
+<span class="a">+</span>
+<span class="a">+(define-symbol-macro help</span>
+<span class="a">+    (progn (pprint-lines</span>
+<span class="a">+            &quot;generator.ros OPTIONS* {SHOW | SPEC+}&quot;)</span>
+<span class="a">+           (format t &quot;These are valid OPTIONS: ~{~A ~}~%&quot;</span>
+<span class="a">+                   (mapcar #&#x27;(lambda (f) (concatenate &#x27;string &quot;--&quot; f))</span>
+<span class="a">+                           *formats*))</span>
+<span class="a">+           (pprint-lines &quot;SPEC should be a list of:&quot;)</span>
+<span class="a">+           (pprint-helpful-groups)</span>
+<span class="a">+           (pprint-lines</span>
+<span class="a">+            &quot;Keep in mind that it makes no sense to include&quot;</span>
+<span class="a">+            &quot;the same character spec twice.&quot;</span>
+<span class="a">+            &quot;SHOW just finds all available glyphs in alt-hack.&quot;</span>
+<span class="a">+            &quot;TEST runs the test functions for ttf, woff and woff2.&quot;)))</span>
+ 
+ (defun find-keyword (keyword group)
+   (when (not (null group))
+<span class="h">@@ -79,30 +109,11 @@ exec ros -Q -- $0 &quot;$@&quot;</span>
+ (defun folders (keyword)
+   (cdr (find-keyword keyword *groups*)))
+ 
+<span class="d">-(defun pprint-letters (letter-alist)</span>
+<span class="d">-  (dolist (p letter-alist)</span>
+<span class="d">-    (format t &quot;~S ~S~%&quot;</span>
+<span class="d">-            (car p) (string (cdr p)))))</span>
+<span class="d">-</span>
+<span class="d">-(defun show-characters ()</span>
+<span class="d">-  (let ((dirs (subdirectories &quot;glyphs&quot;)))</span>
+<span class="d">-    (pprint-letters</span>
+<span class="d">-     (collect (d dirs)</span>
+<span class="d">-       (let ((mat (car (last (pathname-directory d)))))</span>
+<span class="d">-         (cons mat</span>
+<span class="d">-               (code-char (read (make-string-input-stream</span>
+<span class="d">-                                 (concat &quot;#x&quot;</span>
+<span class="d">-                                         (subseq mat 1 (search &quot;-&quot; mat))))))))))))</span>
+<span class="d">-</span>
+<span class="d">-(defun help ()</span>
+<span class="d">-  (format t &quot;~@{~A~%~}&quot;</span>
+<span class="d">-          &quot;generator.ros SPEC+&quot;</span>
+<span class="d">-          &quot;SPEC should be a list of:&quot;)</span>
+<span class="d">-  (format t &quot;~{~T~A~%~}&quot;</span>
+<span class="d">-          (remove-if #&#x27;stringp (flatten *groups*))))</span>
+<span class="a">+(defun pprint-lines (&amp;rest strings)</span>
+<span class="a">+  (format t &quot;~{~A~%~}&quot; strings))</span>
+ 
+ (defun remove-hints ()
+<span class="d">-  (let ((files (directory-files #P&quot;tt-hinting&quot;)))</span>
+<span class="a">+  (let ((files (uiop:directory-files #P&quot;Hack/postbuild_processing/tt-hinting&quot;)))</span>
+     (dolist (f files)
+       (with-open-file (si f :direction :input)
+         (with-open-file (so f :direction :output
+<span class="h">@@ -115,44 +126,104 @@ exec ros -Q -- $0 &quot;$@&quot;</span>
+   (dolist (arg ufolders)
+     (dolist (weight *weights*)
+       (dolist (f (uiop:directory-files
+<span class="d">-                  (concat &quot;glyphs/&quot; arg &quot;/&quot;</span>
+<span class="d">-                          (string-downcase weight) &quot;/&quot;)))</span>
+<span class="d">-        (copy-file f</span>
+<span class="d">-                   (concat &quot;hack/&quot; &quot;source/Hack-&quot; weight</span>
+<span class="d">-                           &quot;.ufo/glyphs/&quot;</span>
+<span class="d">-                           (concat (pathname-name f) &quot;.&quot;</span>
+<span class="d">-                                   (pathname-type f))))))))</span>
+<span class="a">+                  (concatenate &#x27;string &quot;glyphs/&quot; arg &quot;/&quot;</span>
+<span class="a">+                               (string-downcase weight) &quot;/&quot;)))</span>
+<span class="a">+        (uiop:copy-file f</span>
+<span class="a">+                   (concatenate &#x27;string</span>
+<span class="a">+                                &quot;Hack/source/Hack-&quot;</span>
+<span class="a">+                                weight</span>
+<span class="a">+                                &quot;.ufo/glyphs/&quot;</span>
+<span class="a">+                                (pathname-name f)</span>
+<span class="a">+                                &quot;.&quot;</span>
+<span class="a">+                                (pathname-type f)))))))</span>
+ (defun make-it (&amp;optional subcommand)
+   ;; Cannot use uiop:launch-program since it is asynchronous.
+<span class="d">-  (run-program (if subcommand</span>
+<span class="a">+  (uiop:run-program (if subcommand</span>
+                       (list &quot;make&quot; subcommand)
+                       &quot;make&quot;)
+                   :output *standard-output*
+<span class="d">-                  :directory (resolve-symlinks #P&quot;hack&quot;)</span>
+<span class="a">+                  :directory #P&quot;Hack&quot;</span>
+                   :error-output *standard-output*))
+ (defun build (&amp;rest make-commands)
+   (dolist (m make-commands)
+     (make-it m)))
+ 
+ (defun verify (spec)
+<span class="d">-  (not (set-difference spec (mapcar #&#x27;car *groups*))))</span>
+<span class="a">+  &quot;Ensure that the spec is not bogus.&quot;</span>
+<span class="a">+  (let ((group (not (set-difference spec (mapcar #&#x27;car *groups*))))</span>
+<span class="a">+        (exclusion (not (some #&#x27;identity</span>
+<span class="a">+                    (mapcar #&#x27;(lambda (ex)</span>
+<span class="a">+                                (&lt;= 2 (length (intersection spec ex))))</span>
+<span class="a">+                            *exclusions*)))))</span>
+<span class="a">+    (values (and group exclusion)</span>
+<span class="a">+            (if group (if exclusion &#x27;group-and-exclusion &#x27;group)</span>
+<span class="a">+                (if exclusion &#x27;exclusion &#x27;unknown)))))</span>
+<span class="a">+</span>
+<span class="a">+(defun show-characters ()</span>
+<span class="a">+  (flet ((pprint-letters (letter-alist)</span>
+<span class="a">+           (dolist (p letter-alist)</span>
+<span class="a">+             (format t &quot;~T~A~T~A~%&quot;</span>
+<span class="a">+                     (string (cdr p)) (car p)))))</span>
+<span class="a">+    (let ((dirs (uiop:subdirectories &quot;glyphs&quot;)))</span>
+<span class="a">+      (pprint-letters</span>
+<span class="a">+       (loop</span>
+<span class="a">+         for d in dirs</span>
+<span class="a">+         collecting</span>
+<span class="a">+         (let ((mat (car (last (pathname-directory d)))))</span>
+<span class="a">+           (cons</span>
+<span class="a">+            mat</span>
+<span class="a">+            (code-char (read-from-string</span>
+<span class="a">+                        (concatenate &#x27;string</span>
+<span class="a">+                                     &quot;#x&quot;</span>
+<span class="a">+                                (subseq mat 1 (search &quot;-&quot; mat))))))))))))</span>
+<span class="a">+(defun format-parser (argv)</span>
+<span class="a">+  (when argv</span>
+<span class="a">+    (let ((c (car argv)))</span>
+<span class="a">+      (when (and (&lt; 2 (length c))</span>
+<span class="a">+                 (string= &quot;--&quot; (subseq c 0 2)))</span>
+<span class="a">+       (cons (subseq c 2) (format-parser (cdr argv)))))))</span>
+<span class="a">+(defun should-help (argv)</span>
+<span class="a">+  (or (null argv)</span>
+<span class="a">+      (dolist (a argv)</span>
+<span class="a">+        (when (or (search &quot;-?&quot; a)</span>
+<span class="a">+                  (search &quot;-h&quot; a)</span>
+<span class="a">+                  (search &quot;help&quot; a))</span>
+<span class="a">+          (return t)))))</span>
+<span class="a">+(defun should-test (argv)</span>
+<span class="a">+  (string= (car argv) &quot;test&quot;))</span>
+<span class="a">+</span>
+<span class="a">+(define-symbol-macro test</span>
+<span class="a">+    (progn (format t &quot;Helping you:~%&quot;)</span>
+<span class="a">+           (main &quot;help&quot;)</span>
+<span class="a">+           (format t &quot;~%DONE. Trying TTF.&quot;)</span>
+<span class="a">+           (main &quot;--ttf&quot;)</span>
+<span class="a">+           (format t &quot;~%DONE. Trying WOFF.&quot;)</span>
+<span class="a">+           (main &quot;--woff&quot;)</span>
+<span class="a">+           (format t &quot;~%DONE. Trying WOFF2.&quot;)</span>
+<span class="a">+           (main &quot;--woff2&quot;)))</span>
+ 
+ (defun main (&amp;rest argv)
+   (declare (ignorable argv))
+<span class="d">-  (let ((f (first argv)))</span>
+<span class="d">-    (if (or (null argv)</span>
+<span class="d">-            (search &quot;-?&quot; f)</span>
+<span class="d">-            (search &quot;--help&quot; f)</span>
+<span class="d">-            (search &quot;-h&quot; f))</span>
+<span class="d">-        (help)</span>
+<span class="d">-        (let ((argv (mapcar (compose #&#x27;intern #&#x27;string-upcase) argv)))</span>
+<span class="d">-          (when (verify argv)</span>
+<span class="d">-            (remove-hints)</span>
+<span class="d">-            (mapc #&#x27;put-glyphs!</span>
+<span class="d">-                  (mapcar #&#x27;folders argv))</span>
+<span class="d">-            ;; Can&#x27;t get woff2 on my system.</span>
+<span class="d">-            ;; (make-it &quot;woff2&quot;)</span>
+<span class="d">-            ;; (make-it)</span>
+<span class="d">-            (build &quot;ttf&quot; &quot;woff&quot;))))))</span>
+<span class="a">+  (if (should-help argv)</span>
+<span class="a">+      help</span>
+<span class="a">+      (if (should-test argv)</span>
+<span class="a">+          test</span>
+<span class="a">+          (let ((formats (format-parser argv)))</span>
+<span class="a">+            (let ((argv (mapcar (lambda (g) (intern (string-upcase g)))</span>
+<span class="a">+                                (nthcdr (length formats) argv)))</span>
+<span class="a">+                  (formats (or formats &quot;ttf woff woff2&quot;)))</span>
+<span class="a">+              (if (and argv (string= &quot;SHOW&quot; (string-upcase (car argv))))</span>
+<span class="a">+                  (show-characters)</span>
+<span class="a">+                  (multiple-value-bind (bool name)</span>
+<span class="a">+                      (verify argv)</span>
+<span class="a">+                    (if bool</span>
+<span class="a">+                        (progn (remove-hints)</span>
+<span class="a">+                               (mapc #&#x27;put-glyphs!</span>
+<span class="a">+                                     (mapcar #&#x27;folders argv))</span>
+<span class="a">+                               ;; Can&#x27;t get woff2 on my system.</span>
+<span class="a">+                               (mapc #&#x27;build formats))</span>
+<span class="a">+                        (progn (format t &quot;Invalid ~S in spec: ~{~A ~}~%&quot;</span>
+<span class="a">+                                       name</span>
+<span class="a">+                                       argv))))))))))</span>
+ 
+ ;;; vim: set ft=lisp lisp:
+diff --git a/glyphs b/glyphs
+index d90c0ba..5584ac7 120000
+--- a/glyphs
++++ b/glyphs
+<span class="h">@@ -1 +1 @@</span>
+<span class="d">-/home/jose/src/gh/source-foundry/alt-hack/glyphs</span>
+\ No newline at end of file
+<span class="a">+/home/jose/src/repos/gh/source-foundry/alt-hack/glyphs</span>
+\ No newline at end of file
+diff --git a/hack b/hack
+deleted file mode 120000
+index 37532e5..0000000
+--- a/hack
++++ /dev/null
+<span class="h">@@ -1 +0,0 @@</span>
+<span class="d">-/home/jose/src/gh/source-foundry/hack</span>
+\ No newline at end of file
+diff --git a/script-default.lisp b/script-default.lisp
+new file mode 100644
+index 0000000..938b3b8
+--- /dev/null
++++ b/script-default.lisp
+<span class="h">@@ -0,0 +1,4 @@</span>
+<span class="a">+(ql:quickload :alexandria)</span>
+<span class="a">+(ql:quickload :uiop)</span>
+<span class="a">+(load &quot;all-fonts-default.lisp&quot;)</span>
+<span class="a">+(all-fonts::gen-all-fonts)</span>
+diff --git a/source b/source
+index 4742210..8c1d058 120000
+--- a/source
++++ b/source
+<span class="h">@@ -1 +1 @@</span>
+<span class="d">-/home/jose/src/gh/source-foundry/hack/source</span>
+\ No newline at end of file
+<span class="a">+/home/jose/src/repos/gh/source-foundry/hack/source</span>
+\ No newline at end of file
+diff --git a/tarflat b/tarflat
+new file mode 100755
+index 0000000..8baef2b
+--- /dev/null
++++ b/tarflat
+<span class="h">@@ -0,0 +1,16 @@</span>
+<span class="a">+#!/bin/sh</span>
+<span class="a">+PWD1=$(pwd)</span>
+<span class="a">+flatfile () {</span>
+<span class="a">+    mkdir -p out</span>
+<span class="a">+    cd out || return 1</span>
+<span class="a">+    tar -xf ../&quot;$1&quot;</span>
+<span class="a">+    cd &quot;$PWD1&quot; || return 1</span>
+<span class="a">+    cd &quot;$PWD1&quot;/out/Hack/build/ttf  || return 1</span>
+<span class="a">+    tar -cf - * | xz -12 &gt;&quot;$PWD1&quot;/&quot;$1.flat&quot;</span>
+<span class="a">+    mv &quot;$PWD1&quot;/&quot;$1.flat&quot; &quot;$PWD1&quot;/&quot;$1&quot;</span>
+<span class="a">+    cd &quot;$PWD1&quot; || return 1</span>
+<span class="a">+    rm -Rf out</span>
+<span class="a">+}</span>
+<span class="a">+</span>
+<span class="a">+# can&#x27;t use -exec on shell functions, so do this</span>
+<span class="a">+find . -name &#x27;*.tar.xz&#x27; | while read -r file ; do flatfile &quot;$(echo $file | sed &#x27;s/^\.\///&#x27;)&quot; ; done</span>
+diff --git a/tt-hinting b/tt-hinting
+index 405f0d0..63cc159 120000
+--- a/tt-hinting
++++ b/tt-hinting
+<span class="h">@@ -1 +1 @@</span>
+<span class="d">-/home/jose/src/gh/source-foundry/hack/postbuild_processing/tt-hinting</span>
+\ No newline at end of file
+<span class="a">+/home/jose/src/repos/gh/source-foundry/hack/postbuild_processing/tt-hinting</span>
+\ No newline at end of file</pre>
+</div></body></html>
diff --git a/git/alt-hack0/commit/d56aaf015c47ed3118a4ec06c7493675a9d8ffb8.html b/git/alt-hack0/commit/d56aaf015c47ed3118a4ec06c7493675a9d8ffb8.html
new file mode 100644
index 0000000..44046d7
--- /dev/null
+++ b/git/alt-hack0/commit/d56aaf015c47ed3118a4ec06c7493675a9d8ffb8.html
@@ -0,0 +1,27 @@
+<!DOCTYPE html>
+<html lang="en"><head><meta charset="UTF-8" />
+<meta name="viewport" content="width=device-width, initial-scale=1" />
+<title>alt-hack0 d56aaf01 - Recently Written</title>
+<link rel="stylesheet" href="../../stagit.css" />
+</head><body>
+<div id="top"><a href="../../../index.html">Recently Written</a> &middot; <a href="../../index.html">git</a></div>
+<h1>alt-hack0</h1><span class="desc">The Hack font family with a non-weird zero, and other variants.</span><p class="url">git clone https://github.com/equwal/alt-hack0</p><p><a href="../../alt-hack0/index.html">Log</a> | <a href="../../alt-hack0/files.html">Files</a> | <a href="../../alt-hack0/refs.html">Refs</a></p><hr/>
+<div id="content">
+<pre>commit d56aaf015c47ed3118a4ec06c7493675a9d8ffb8
+Spenser Truex &lt;truex@equwal.com&gt;
+2023-08-10 13:14:13 -0300
+
+Change glyphs dir
+
+</pre><pre> glyphs | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+</pre><pre>diff --git a/glyphs b/glyphs
+index 5584ac7..e0b60c2 120000
+--- a/glyphs
++++ b/glyphs
+<span class="h">@@ -1 +1 @@</span>
+<span class="d">-/home/jose/src/repos/gh/source-foundry/alt-hack/glyphs</span>
+\ No newline at end of file
+<span class="a">+alt-hack-new-glyphs/glyphs</span>
+\ No newline at end of file</pre>
+</div></body></html>
diff --git a/git/alt-hack0/commit/f109b78b9b2fd835ef21e266b019aa491847ef90.html b/git/alt-hack0/commit/f109b78b9b2fd835ef21e266b019aa491847ef90.html
new file mode 100644
index 0000000..a52aa7a
--- /dev/null
+++ b/git/alt-hack0/commit/f109b78b9b2fd835ef21e266b019aa491847ef90.html
@@ -0,0 +1,25 @@
+<!DOCTYPE html>
+<html lang="en"><head><meta charset="UTF-8" />
+<meta name="viewport" content="width=device-width, initial-scale=1" />
+<title>alt-hack0 f109b78b - Recently Written</title>
+<link rel="stylesheet" href="../../stagit.css" />
+</head><body>
+<div id="top"><a href="../../../index.html">Recently Written</a> &middot; <a href="../../index.html">git</a></div>
+<h1>alt-hack0</h1><span class="desc">The Hack font family with a non-weird zero, and other variants.</span><p class="url">git clone https://github.com/equwal/alt-hack0</p><p><a href="../../alt-hack0/index.html">Log</a> | <a href="../../alt-hack0/files.html">Files</a> | <a href="../../alt-hack0/refs.html">Refs</a></p><hr/>
+<div id="content">
+<pre>commit f109b78b9b2fd835ef21e266b019aa491847ef90
+Spenser Truex &lt;truex@equwal.com&gt;
+2021-01-15 17:29:03 -0800
+
+Add TODO
+
+</pre><pre> TODO | 1 +
+ 1 file changed, 1 insertion(+)
+</pre><pre>diff --git a/TODO b/TODO
+new file mode 100644
+index 0000000..597ec61
+--- /dev/null
++++ b/TODO
+<span class="h">@@ -0,0 +1 @@</span>
+<span class="a">+- Change these to be scripts which modify the existing layout from the keyboard rather than hand-coded modifications.</span></pre>
+</div></body></html>
diff --git a/git/alt-hack0/file/README.md.html b/git/alt-hack0/file/README.md.html
index 684fb0b..34bcaaa 100644
--- a/git/alt-hack0/file/README.md.html
+++ b/git/alt-hack0/file/README.md.html
@@ -7,26 +7,38 @@
 <div id="top"><a href="../../../index.html">Recently Written</a> &middot; <a href="../../index.html">git</a></div>
 <h1>alt-hack0</h1><span class="desc">The Hack font family with a non-weird zero, and other variants.</span><p class="url">git clone https://github.com/equwal/alt-hack0</p><p><a href="../../alt-hack0/index.html">Log</a> | <a href="../../alt-hack0/files.html">Files</a> | <a href="../../alt-hack0/refs.html">Refs</a></p><hr/>
 <div id="content">
-<p>README.md (781 bytes)</p><pre class="src"><a id="l1" href="#l1">1</a> # Hack with an alternative zero.
+<p>README.md (1182 bytes)</p><pre class="src"><a id="l1" href="#l1">1</a> # Hack with an alternative zero.
 <a id="l2" href="#l2">2</a> 
-<a id="l3" href="#l3">3</a> [Released font downloads](https://www.equwal.com/alt-hacks.html)
+<a id="l3" href="#l3">3</a> Warning:
 <a id="l4" href="#l4">4</a> 
-<a id="l5" href="#l5">5</a> Like [Hack](https://github.com/ryanoasis/nerd-fonts) fonts? Dislike
-<a id="l6" href="#l6">6</a> zeros with vertical strikes? Then this package is for you. Desktop (ttf)
-<a id="l7" href="#l7">7</a> and web (woff) fonts included.
-<a id="l8" href="#l8">8</a> 
-<a id="l9" href="#l9">9</a> Generated with [alt-hack](https://github.com/source-foundry/alt-hack) glyphs,
-<a id="l10" href="#l10">10</a> and [the `generator.ros` Common Lisp script](https://github.com/equwal/alt-hack/tree/generator.ros).
-<a id="l11" href="#l11">11</a> 
-<a id="l12" href="#l12">12</a> The zeros:
-<a id="l13" href="#l13">13</a> [![forward slashed zero](zero.png)]
+<a id="l5" href="#l5">5</a> Generating alt-hacks is confusing. Among the confusions:
+<a id="l6" href="#l6">6</a> - Installing binaries in your /home/user directory
+<a id="l7" href="#l7">7</a> - Undocumented dependencies (including the above!)
+<a id="l8" href="#l8">8</a> - alt-hacks script that I made is lazy about helping you and sucks. To use it:
+<a id="l9" href="#l9">9</a> $ sbcl
+<a id="l10" href="#l10">10</a> (ql:quickload :alexandria)
+<a id="l11" href="#l11">11</a> (ql:quickload :uiop)
+<a id="l12" href="#l12">12</a> (load &quot;all-fonts.lisp)
+<a id="l13" href="#l13">13</a> (all-fonts::gen-all-fonts) ; spend forever generating an assload of stuff
 <a id="l14" href="#l14">14</a> 
-<a id="l15" href="#l15">15</a> [![dotted zero](zero-doot.png)]
+<a id="l15" href="#l15">15</a> [Released font downloads](https://www.equwal.com/alt-hacks.html)
 <a id="l16" href="#l16">16</a> 
-<a id="l17" href="#l17">17</a> The old zero:
-<a id="l18" href="#l18">18</a> [![vertical slashed zero](hack-vertz.png)]
-<a id="l19" href="#l19">19</a> 
-<a id="l20" href="#l20">20</a> [Code (gist) to change your font in Emacs](https://gist.github.com/equwal/89b1ef5ac8d4d737cfd37f66e9ba4895).
-<a id="l21" href="#l21">21</a> 
-<a id="l22" href="#l22">22</a> See a site using Hack with slashed zero [equwal.com](https://www.equwal.com/).</pre>
+<a id="l17" href="#l17">17</a> Like [Hack](https://github.com/ryanoasis/nerd-fonts) fonts? Dislike
+<a id="l18" href="#l18">18</a> zeros with vertical strikes? Then this package is for you. Desktop (ttf)
+<a id="l19" href="#l19">19</a> and web (woff) fonts included.
+<a id="l20" href="#l20">20</a> 
+<a id="l21" href="#l21">21</a> Generated with [alt-hack](https://github.com/source-foundry/alt-hack) glyphs,
+<a id="l22" href="#l22">22</a> and [the `generator.ros` Common Lisp script](https://github.com/equwal/alt-hack/tree/generator.ros).
+<a id="l23" href="#l23">23</a> 
+<a id="l24" href="#l24">24</a> The zeros:
+<a id="l25" href="#l25">25</a> [![forward slashed zero](zero.png)]
+<a id="l26" href="#l26">26</a> 
+<a id="l27" href="#l27">27</a> [![dotted zero](zero-doot.png)]
+<a id="l28" href="#l28">28</a> 
+<a id="l29" href="#l29">29</a> The old zero:
+<a id="l30" href="#l30">30</a> [![vertical slashed zero](hack-vertz.png)]
+<a id="l31" href="#l31">31</a> 
+<a id="l32" href="#l32">32</a> [Code (gist) to change your font in Emacs](https://gist.github.com/equwal/89b1ef5ac8d4d737cfd37f66e9ba4895).
+<a id="l33" href="#l33">33</a> 
+<a id="l34" href="#l34">34</a> See a site using Hack with slashed zero [equwal.com](https://www.equwal.com/).</pre>
 </div></body></html>
diff --git a/git/alt-hack0/file/all-fonts-bc.lisp.html b/git/alt-hack0/file/all-fonts-bc.lisp.html
new file mode 100644
index 0000000..867b21f
--- /dev/null
+++ b/git/alt-hack0/file/all-fonts-bc.lisp.html
@@ -0,0 +1,47 @@
+<!DOCTYPE html>
+<html lang="en"><head><meta charset="UTF-8" />
+<meta name="viewport" content="width=device-width, initial-scale=1" />
+<title>alt-hack0/all-fonts-bc.lisp - Recently Written</title>
+<link rel="stylesheet" href="../../stagit.css" />
+</head><body>
+<div id="top"><a href="../../../index.html">Recently Written</a> &middot; <a href="../../index.html">git</a></div>
+<h1>alt-hack0</h1><span class="desc">The Hack font family with a non-weird zero, and other variants.</span><p class="url">git clone https://github.com/equwal/alt-hack0</p><p><a href="../../alt-hack0/index.html">Log</a> | <a href="../../alt-hack0/files.html">Files</a> | <a href="../../alt-hack0/refs.html">Refs</a></p><hr/>
+<div id="content">
+<p>all-fonts-bc.lisp (1592 bytes)</p><pre class="src"><a id="l1" href="#l1">1</a> (defpackage :all-fonts
+<a id="l2" href="#l2">2</a>   (:use :cl)
+<a id="l3" href="#l3">3</a>   (:import-from :alexandria :map-combinations)
+<a id="l4" href="#l4">4</a>   (:import-from :uiop :run-program))
+<a id="l5" href="#l5">5</a> (in-package :all-fonts)
+<a id="l6" href="#l6">6</a> 
+<a id="l7" href="#l7">7</a> (defparameter *groups*
+<a id="l8" href="#l8">8</a>   &#x27;(curve round backslash diamond dot forwardslash noslab1 flattop3 widerknife slabi slabl traditional loop nogap)
+<a id="l9" href="#l9">9</a>   &quot;Things you actually want to permute together.&quot;)
+<a id="l10" href="#l10">10</a> 
+<a id="l11" href="#l11">11</a> (defparameter *exclusions*
+<a id="l12" href="#l12">12</a>   &#x27;((curve round)
+<a id="l13" href="#l13">13</a>     (backslash diamond dot forwardslash))
+<a id="l14" href="#l14">14</a>   &quot;Things which you don&#x27;t want specified at the same time.&quot;)
+<a id="l15" href="#l15">15</a> 
+<a id="l16" href="#l16">16</a> (defun verify (spec)
+<a id="l17" href="#l17">17</a>   &quot;Ensure that the spec is not bogus.&quot;
+<a id="l18" href="#l18">18</a>   (let ((group (not (set-difference spec *groups*)))
+<a id="l19" href="#l19">19</a>         (exclusion (not (some #&#x27;identity
+<a id="l20" href="#l20">20</a>                               (mapcar #&#x27;(lambda (ex)
+<a id="l21" href="#l21">21</a>                                           (&lt;= 2 (length (intersection spec ex))))
+<a id="l22" href="#l22">22</a>                                       *exclusions*)))))
+<a id="l23" href="#l23">23</a>     (values (and group exclusion)
+<a id="l24" href="#l24">24</a>             (if group (if exclusion &#x27;group-and-exclusion &#x27;group)
+<a id="l25" href="#l25">25</a>                 (if exclusion &#x27;exclusion &#x27;unknown)))))
+<a id="l26" href="#l26">26</a> (defun gen-all-fonts ()
+<a id="l27" href="#l27">27</a>   (loop for x from 1 to (length *groups*)
+<a id="l28" href="#l28">28</a>         do (map-combinations
+<a id="l29" href="#l29">29</a>              (lambda (f)
+<a id="l30" href="#l30">30</a>                (when (verify f)
+<a id="l31" href="#l31">31</a>                  (run-program (format nil &quot;./generator-bc.ros --ttf --woff --woff2 ~(~{ ~A~}~)&quot; f) :output t)
+<a id="l32" href="#l32">32</a>                  ;; KLUDGE: Weird bug where everything ends up in the ttf folder
+<a id="l33" href="#l33">33</a>                  (run-program (format nil &quot;tar -vcf - Hack/build/ttf/* | xz -12 &gt;&#x27;~(~{~A~}~).tar.xz&#x27;&quot; f) :output t)
+<a id="l34" href="#l34">34</a>                  (run-program &quot;rm -Rf Hack/build&quot;)
+<a id="l35" href="#l35">35</a>                  (run-program &quot;mkdir Hack/build&quot;)))
+<a id="l36" href="#l36">36</a>             *groups*
+<a id="l37" href="#l37">37</a>              :length x)))</pre>
+</div></body></html>
diff --git a/git/alt-hack0/file/all-fonts-default.lisp.html b/git/alt-hack0/file/all-fonts-default.lisp.html
new file mode 100644
index 0000000..fa3dd6b
--- /dev/null
+++ b/git/alt-hack0/file/all-fonts-default.lisp.html
@@ -0,0 +1,47 @@
+<!DOCTYPE html>
+<html lang="en"><head><meta charset="UTF-8" />
+<meta name="viewport" content="width=device-width, initial-scale=1" />
+<title>alt-hack0/all-fonts-default.lisp - Recently Written</title>
+<link rel="stylesheet" href="../../stagit.css" />
+</head><body>
+<div id="top"><a href="../../../index.html">Recently Written</a> &middot; <a href="../../index.html">git</a></div>
+<h1>alt-hack0</h1><span class="desc">The Hack font family with a non-weird zero, and other variants.</span><p class="url">git clone https://github.com/equwal/alt-hack0</p><p><a href="../../alt-hack0/index.html">Log</a> | <a href="../../alt-hack0/files.html">Files</a> | <a href="../../alt-hack0/refs.html">Refs</a></p><hr/>
+<div id="content">
+<p>all-fonts-default.lisp (1560 bytes)</p><pre class="src"><a id="l1" href="#l1">1</a> (defpackage :all-fonts
+<a id="l2" href="#l2">2</a>   (:use :cl)
+<a id="l3" href="#l3">3</a>   (:import-from :alexandria :map-combinations)
+<a id="l4" href="#l4">4</a>   (:import-from :uiop :run-program))
+<a id="l5" href="#l5">5</a> (in-package :all-fonts)
+<a id="l6" href="#l6">6</a> 
+<a id="l7" href="#l7">7</a> (defparameter *groups*
+<a id="l8" href="#l8">8</a>   &#x27;(curve round backslash diamond dot forwardslash noslab1 flattop3 widerknife slabi)
+<a id="l9" href="#l9">9</a>   &quot;Things you actually want to permute together.&quot;)
+<a id="l10" href="#l10">10</a> 
+<a id="l11" href="#l11">11</a> (defparameter *exclusions*
+<a id="l12" href="#l12">12</a>   &#x27;((curve round)
+<a id="l13" href="#l13">13</a>     (backslash diamond dot forwardslash))
+<a id="l14" href="#l14">14</a>   &quot;Things which you don&#x27;t want specified at the same time.&quot;)
+<a id="l15" href="#l15">15</a> 
+<a id="l16" href="#l16">16</a> (defun verify (spec)
+<a id="l17" href="#l17">17</a>   &quot;Ensure that the spec is not bogus.&quot;
+<a id="l18" href="#l18">18</a>   (let ((group (not (set-difference spec *groups*)))
+<a id="l19" href="#l19">19</a>         (exclusion (not (some #&#x27;identity
+<a id="l20" href="#l20">20</a>                               (mapcar #&#x27;(lambda (ex)
+<a id="l21" href="#l21">21</a>                                           (&lt;= 2 (length (intersection spec ex))))
+<a id="l22" href="#l22">22</a>                                       *exclusions*)))))
+<a id="l23" href="#l23">23</a>     (values (and group exclusion)
+<a id="l24" href="#l24">24</a>             (if group (if exclusion &#x27;group-and-exclusion &#x27;group)
+<a id="l25" href="#l25">25</a>                 (if exclusion &#x27;exclusion &#x27;unknown)))))
+<a id="l26" href="#l26">26</a> (defun gen-all-fonts ()
+<a id="l27" href="#l27">27</a>   (loop for x from 1 to (length *groups*)
+<a id="l28" href="#l28">28</a>         do (map-combinations
+<a id="l29" href="#l29">29</a>              (lambda (f)
+<a id="l30" href="#l30">30</a>                (when (verify f)
+<a id="l31" href="#l31">31</a>                  (run-program (format nil &quot;./generator.ros --ttf --woff --woff2 ~(~{ ~A~}~)&quot; f) :output t)
+<a id="l32" href="#l32">32</a>                  ;; KLUDGE: Weird bug where everything ends up in the ttf folder
+<a id="l33" href="#l33">33</a>                  (run-program (format nil &quot;tar -vcf - Hack/build/ttf/* | xz -12 &gt;&#x27;~(~{~A~}~).tar.xz&#x27;&quot; f) :output t)
+<a id="l34" href="#l34">34</a>                  (run-program &quot;rm -Rf Hack/build&quot;)
+<a id="l35" href="#l35">35</a>                  (run-program &quot;mkdir Hack/build&quot;)))
+<a id="l36" href="#l36">36</a>             *groups*
+<a id="l37" href="#l37">37</a>              :length x)))</pre>
+</div></body></html>
diff --git a/git/alt-hack0/file/generator-bc.ros.html b/git/alt-hack0/file/generator-bc.ros.html
new file mode 100644
index 0000000..20a8fc0
--- /dev/null
+++ b/git/alt-hack0/file/generator-bc.ros.html
@@ -0,0 +1,253 @@
+<!DOCTYPE html>
+<html lang="en"><head><meta charset="UTF-8" />
+<meta name="viewport" content="width=device-width, initial-scale=1" />
+<title>alt-hack0/generator-bc.ros - Recently Written</title>
+<link rel="stylesheet" href="../../stagit.css" />
+</head><body>
+<div id="top"><a href="../../../index.html">Recently Written</a> &middot; <a href="../../index.html">git</a></div>
+<h1>alt-hack0</h1><span class="desc">The Hack font family with a non-weird zero, and other variants.</span><p class="url">git clone https://github.com/equwal/alt-hack0</p><p><a href="../../alt-hack0/index.html">Log</a> | <a href="../../alt-hack0/files.html">Files</a> | <a href="../../alt-hack0/refs.html">Refs</a></p><hr/>
+<div id="content">
+<p>generator-bc.ros (8345 bytes)</p><pre class="src"><a id="l1" href="#l1">1</a> #!/bin/sh
+<a id="l2" href="#l2">2</a> #|-*- mode:lisp -*-|#
+<a id="l3" href="#l3">3</a> #|
+<a id="l4" href="#l4">4</a> exec ros -Q -- $0 &quot;$@&quot;
+<a id="l5" href="#l5">5</a> |#
+<a id="l6" href="#l6">6</a> ;;; This file (c) Spenser Truex 2021
+<a id="l7" href="#l7">7</a> ;;; MIT license.
+<a id="l8" href="#l8">8</a> 
+<a id="l9" href="#l9">9</a> (progn ;;init forms
+<a id="l10" href="#l10">10</a>   (ros:ensure-asdf)
+<a id="l11" href="#l11">11</a>   #+quicklisp(ql:quickload &#x27;(:alexandria :uiop)
+<a id="l12" href="#l12">12</a>                            :silent t))
+<a id="l13" href="#l13">13</a> 
+<a id="l14" href="#l14">14</a> ;;; EXAMPLE USAGE:
+<a id="l15" href="#l15">15</a> ;;; cd alt-hack &amp;&amp; ./generator.ros curve dot slabi
+<a id="l16" href="#l16">16</a> (defpackage :ros.script.generator.3783095582
+<a id="l17" href="#l17">17</a>   (:use :cl))
+<a id="l18" href="#l18">18</a> (in-package :ros.script.generator.3783095582)
+<a id="l19" href="#l19">19</a> (defvar *weights* &#x27;(&quot;Bold&quot; &quot;BoldItalic&quot; &quot;Italic&quot; &quot;Regular&quot;))
+<a id="l20" href="#l20">20</a> 
+<a id="l21" href="#l21">21</a> (defun uncomment (spec)
+<a id="l22" href="#l22">22</a>   (remove-if #&#x27;(lambda (item)
+<a id="l23" href="#l23">23</a>                  (and (stringp item)
+<a id="l24" href="#l24">24</a>                       (= 1 (length item))))
+<a id="l25" href="#l25">25</a>              spec))
+<a id="l26" href="#l26">26</a> 
+<a id="l27" href="#l27">27</a> (defparameter *helpful-groups*
+<a id="l28" href="#l28">28</a>   &#x27;(;; Barry Cohen&#x27;s additions
+<a id="l29" href="#l29">29</a>     (slabl &quot;u006C-slab&quot; &quot;l&quot;
+<a id="l30" href="#l30">30</a>            &quot;u013C-slab&quot; &quot;ļ&quot;
+<a id="l31" href="#l31">31</a>            &quot;u013E-slab&quot; &quot;ľ&quot;
+<a id="l32" href="#l32">32</a>            &quot;u0142-slab&quot; &quot;ł&quot;
+<a id="l33" href="#l33">33</a>            &quot;u013A-slab&quot; &quot;ĺ&quot;
+<a id="l34" href="#l34">34</a>            &quot;u0140-slab&quot; &quot;ŀ&quot;)
+<a id="l35" href="#l35">35</a>     (traditional &quot;u0025-traditional&quot; &quot;%&quot;)
+<a id="l36" href="#l36">36</a>     (nogap &quot;u0026-nogap&quot; &quot;&amp;&quot;)
+<a id="l37" href="#l37">37</a>     (loop &quot;u0067-loop&quot; &quot;g&quot;
+<a id="l38" href="#l38">38</a>           &quot;u0123-loop&quot; &quot;ǵ&quot;
+<a id="l39" href="#l39">39</a>           &quot;u011F-loop&quot; &quot;ğ&quot;
+<a id="l40" href="#l40">40</a>           &quot;u01E7-loop&quot; &quot;ǧ&quot;
+<a id="l41" href="#l41">41</a>           &quot;u0121-loop&quot; &quot;ġ&quot;
+<a id="l42" href="#l42">42</a>           &quot;u011D-loop&quot; &quot;ĝ&quot;)
+<a id="l43" href="#l43">43</a>     (curve &quot;u0028-curved&quot; &quot;(&quot;
+<a id="l44" href="#l44">44</a>      &quot;u0029-curved&quot; &quot;)&quot;)
+<a id="l45" href="#l45">45</a>     (round &quot;u0028-rounder&quot; &quot;(&quot;
+<a id="l46" href="#l46">46</a>      &quot;u0029-rounder&quot; &quot;)&quot;)
+<a id="l47" href="#l47">47</a>     (backslash &quot;u0030-backslash&quot; &quot;0&quot;)
+<a id="l48" href="#l48">48</a>     (diamond &quot;u0030-diamond&quot; &quot;0&quot;)
+<a id="l49" href="#l49">49</a>     (dot &quot;u0030-dotted&quot; &quot;0&quot;)
+<a id="l50" href="#l50">50</a>     (forwardslash &quot;u0030-forwardslash&quot; &quot;0&quot;)
+<a id="l51" href="#l51">51</a>     (noslab1 &quot;u0031-noslab&quot; &quot;1&quot;)
+<a id="l52" href="#l52">52</a>     (flattop3 &quot;u0033-flattop&quot; &quot;3&quot;)
+<a id="l53" href="#l53">53</a>     (wider &quot;u003C-wider&quot; &quot;&lt;&quot;
+<a id="l54" href="#l54">54</a>      &quot;u003E-wider&quot; &quot;&gt;&quot;)
+<a id="l55" href="#l55">55</a>     (knife &quot;u0066-knife&quot; &quot;f&quot;)
+<a id="l56" href="#l56">56</a>     (slabi &quot;u0069-slab&quot; &quot;i&quot;
+<a id="l57" href="#l57">57</a>      &quot;u00EC-slab&quot; &quot;ì&quot;
+<a id="l58" href="#l58">58</a>      &quot;u00ED-slab&quot; &quot;í&quot;
+<a id="l59" href="#l59">59</a>      &quot;u00EE-slab&quot; &quot;î&quot;
+<a id="l60" href="#l60">60</a>      &quot;u00EF-slab&quot; &quot;ï&quot;
+<a id="l61" href="#l61">61</a>      &quot;u0129-slab&quot; &quot;ĩ&quot;
+<a id="l62" href="#l62">62</a>      &quot;u012B-slab&quot; &quot;ī&quot;
+<a id="l63" href="#l63">63</a>      &quot;u012D-slab&quot; &quot;ĭ&quot;
+<a id="l64" href="#l64">64</a>      &quot;u012F-slab&quot; &quot;į&quot;
+<a id="l65" href="#l65">65</a>      &quot;u0131-slab&quot; &quot;ı&quot;
+<a id="l66" href="#l66">66</a>      &quot;u0456-slab&quot; &quot;і&quot;
+<a id="l67" href="#l67">67</a>      &quot;u0457-slab&quot; &quot;ї&quot;))
+<a id="l68" href="#l68">68</a>   &quot;Groups with extra information for user help.&quot;)
+<a id="l69" href="#l69">69</a> 
+<a id="l70" href="#l70">70</a> (defun prune (test tree)
+<a id="l71" href="#l71">71</a>   (labels ((rec (tree acc)
+<a id="l72" href="#l72">72</a>              (cond
+<a id="l73" href="#l73">73</a>                ((null tree) (nreverse acc))
+<a id="l74" href="#l74">74</a>                ((consp (car tree))
+<a id="l75" href="#l75">75</a>                 (rec (cdr tree)
+<a id="l76" href="#l76">76</a>                      (cons (rec (car tree) nil) acc)))
+<a id="l77" href="#l77">77</a>                (t (rec (cdr tree)
+<a id="l78" href="#l78">78</a>                        (if (funcall test (car tree))
+<a id="l79" href="#l79">79</a>                            acc
+<a id="l80" href="#l80">80</a>                            (cons (car tree) acc)))))))
+<a id="l81" href="#l81">81</a>     (rec tree nil)))
+<a id="l82" href="#l82">82</a> 
+<a id="l83" href="#l83">83</a> (defun pprint-helpful-groups ()
+<a id="l84" href="#l84">84</a>   (let ((more-helpful (prune #&#x27;(lambda (s)
+<a id="l85" href="#l85">85</a>                                  (and (stringp s)
+<a id="l86" href="#l86">86</a>                                       (&lt; 1 (length s))))
+<a id="l87" href="#l87">87</a>                              *helpful-groups*)))
+<a id="l88" href="#l88">88</a>     (loop for g in more-helpful
+<a id="l89" href="#l89">89</a>           do (format t &quot;~A:~%&quot; (car g))
+<a id="l90" href="#l90">90</a>           do (format t &quot;~{~A ~}~%&quot; (cdr g)))))
+<a id="l91" href="#l91">91</a> (defparameter *groups*
+<a id="l92" href="#l92">92</a>   (mapcar #&#x27;uncomment *helpful-groups*)
+<a id="l93" href="#l93">93</a>   &quot;Things you actually want to permute together.&quot;)
+<a id="l94" href="#l94">94</a> (defparameter *exclusions*
+<a id="l95" href="#l95">95</a>   &#x27;((curve round)
+<a id="l96" href="#l96">96</a>     (backslash diamond dot forwardslash))
+<a id="l97" href="#l97">97</a>   &quot;Things which you don&#x27;t want specified at the same time.&quot;)
+<a id="l98" href="#l98">98</a> (defparameter *formats*
+<a id="l99" href="#l99">99</a>   &#x27;(&quot;ttf&quot; &quot;woff&quot; &quot;woff2&quot;)
+<a id="l100" href="#l100">100</a>   &quot;Valid parameters to call as formats.&quot;)
+<a id="l101" href="#l101">101</a> 
+<a id="l102" href="#l102">102</a> (define-symbol-macro help
+<a id="l103" href="#l103">103</a>     (progn (pprint-lines
+<a id="l104" href="#l104">104</a>             &quot;generator.ros OPTIONS* {SHOW | SPEC+}&quot;)
+<a id="l105" href="#l105">105</a>            (format t &quot;These are valid OPTIONS: ~{~A ~}~%&quot;
+<a id="l106" href="#l106">106</a>                    (mapcar #&#x27;(lambda (f) (concatenate &#x27;string &quot;--&quot; f))
+<a id="l107" href="#l107">107</a>                            *formats*))
+<a id="l108" href="#l108">108</a>            (pprint-lines &quot;SPEC should be a list of:&quot;)
+<a id="l109" href="#l109">109</a>            (pprint-helpful-groups)
+<a id="l110" href="#l110">110</a>            (pprint-lines
+<a id="l111" href="#l111">111</a>             &quot;Keep in mind that it makes no sense to include&quot;
+<a id="l112" href="#l112">112</a>             &quot;the same character spec twice.&quot;
+<a id="l113" href="#l113">113</a>             &quot;SHOW just finds all available glyphs in alt-hack.&quot;
+<a id="l114" href="#l114">114</a>             &quot;TEST runs the test functions for ttf, woff and woff2.&quot;)))
+<a id="l115" href="#l115">115</a> 
+<a id="l116" href="#l116">116</a> (defun find-keyword (keyword group)
+<a id="l117" href="#l117">117</a>   (when (not (null group))
+<a id="l118" href="#l118">118</a>     (let ((c (car group)))
+<a id="l119" href="#l119">119</a>       (if (eql keyword (car c))
+<a id="l120" href="#l120">120</a>           c
+<a id="l121" href="#l121">121</a>           (find-keyword keyword (cdr group))))))
+<a id="l122" href="#l122">122</a> 
+<a id="l123" href="#l123">123</a> (defun folders (keyword)
+<a id="l124" href="#l124">124</a>   (cdr (find-keyword keyword *groups*)))
+<a id="l125" href="#l125">125</a> 
+<a id="l126" href="#l126">126</a> (defun pprint-lines (&amp;rest strings)
+<a id="l127" href="#l127">127</a>   (format t &quot;~{~A~%~}&quot; strings))
+<a id="l128" href="#l128">128</a> 
+<a id="l129" href="#l129">129</a> (defun remove-hints ()
+<a id="l130" href="#l130">130</a>   (let ((files (uiop:directory-files #P&quot;Hack/postbuild_processing/tt-hinting&quot;)))
+<a id="l131" href="#l131">131</a>     (dolist (f files)
+<a id="l132" href="#l132">132</a>       (with-open-file (si f :direction :input)
+<a id="l133" href="#l133">133</a>         (with-open-file (so f :direction :output
+<a id="l134" href="#l134">134</a>                               :if-exists :supersede)
+<a id="l135" href="#l135">135</a>           (let ((line (read-line si nil nil)))
+<a id="l136" href="#l136">136</a>             (when (and line (char/= #\#(elt line 0)))
+<a id="l137" href="#l137">137</a>               (write-line (format nil &quot;# ~S~%&quot; line) so))))))))
+<a id="l138" href="#l138">138</a> 
+<a id="l139" href="#l139">139</a> (defun put-glyphs! (ufolders)
+<a id="l140" href="#l140">140</a>   (dolist (arg ufolders)
+<a id="l141" href="#l141">141</a>     (dolist (weight *weights*)
+<a id="l142" href="#l142">142</a>       (dolist (f (uiop:directory-files
+<a id="l143" href="#l143">143</a>                   (concatenate &#x27;string &quot;glyphs/&quot; arg &quot;/&quot;
+<a id="l144" href="#l144">144</a>                                (string-downcase weight) &quot;/&quot;)))
+<a id="l145" href="#l145">145</a>         (uiop:copy-file f
+<a id="l146" href="#l146">146</a>                    (concatenate &#x27;string
+<a id="l147" href="#l147">147</a>                                 &quot;Hack/source/Hack-&quot;
+<a id="l148" href="#l148">148</a>                                 weight
+<a id="l149" href="#l149">149</a>                                 &quot;.ufo/glyphs/&quot;
+<a id="l150" href="#l150">150</a>                                 (pathname-name f)
+<a id="l151" href="#l151">151</a>                                 &quot;.&quot;
+<a id="l152" href="#l152">152</a>                                 (pathname-type f)))))))
+<a id="l153" href="#l153">153</a> (defun make-it (&amp;optional subcommand)
+<a id="l154" href="#l154">154</a>   ;; Cannot use uiop:launch-program since it is asynchronous.
+<a id="l155" href="#l155">155</a>   (uiop:run-program (if subcommand
+<a id="l156" href="#l156">156</a>                       (list &quot;make&quot; subcommand)
+<a id="l157" href="#l157">157</a>                       &quot;make&quot;)
+<a id="l158" href="#l158">158</a>                   :output *standard-output*
+<a id="l159" href="#l159">159</a>                   :directory #P&quot;Hack&quot;
+<a id="l160" href="#l160">160</a>                   :error-output *standard-output*))
+<a id="l161" href="#l161">161</a> (defun build (&amp;rest make-commands)
+<a id="l162" href="#l162">162</a>   (dolist (m make-commands)
+<a id="l163" href="#l163">163</a>     (make-it m)))
+<a id="l164" href="#l164">164</a> 
+<a id="l165" href="#l165">165</a> (defun verify (spec)
+<a id="l166" href="#l166">166</a>   &quot;Ensure that the spec is not bogus.&quot;
+<a id="l167" href="#l167">167</a>   (let ((group (not (set-difference spec (mapcar #&#x27;car *groups*))))
+<a id="l168" href="#l168">168</a>         (exclusion (not (some #&#x27;identity
+<a id="l169" href="#l169">169</a>                     (mapcar #&#x27;(lambda (ex)
+<a id="l170" href="#l170">170</a>                                 (&lt;= 2 (length (intersection spec ex))))
+<a id="l171" href="#l171">171</a>                             *exclusions*)))))
+<a id="l172" href="#l172">172</a>     (values (and group exclusion)
+<a id="l173" href="#l173">173</a>             (if group (if exclusion &#x27;group-and-exclusion &#x27;group)
+<a id="l174" href="#l174">174</a>                 (if exclusion &#x27;exclusion &#x27;unknown)))))
+<a id="l175" href="#l175">175</a> 
+<a id="l176" href="#l176">176</a> (defun show-characters ()
+<a id="l177" href="#l177">177</a>   (flet ((pprint-letters (letter-alist)
+<a id="l178" href="#l178">178</a>            (dolist (p letter-alist)
+<a id="l179" href="#l179">179</a>              (format t &quot;~T~A~T~A~%&quot;
+<a id="l180" href="#l180">180</a>                      (string (cdr p)) (car p)))))
+<a id="l181" href="#l181">181</a>     (let ((dirs (uiop:subdirectories &quot;glyphs&quot;)))
+<a id="l182" href="#l182">182</a>       (pprint-letters
+<a id="l183" href="#l183">183</a>        (loop
+<a id="l184" href="#l184">184</a>          for d in dirs
+<a id="l185" href="#l185">185</a>          collecting
+<a id="l186" href="#l186">186</a>          (let ((mat (car (last (pathname-directory d)))))
+<a id="l187" href="#l187">187</a>            (cons
+<a id="l188" href="#l188">188</a>             mat
+<a id="l189" href="#l189">189</a>             (code-char (read-from-string
+<a id="l190" href="#l190">190</a>                         (concatenate &#x27;string
+<a id="l191" href="#l191">191</a>                                      &quot;#x&quot;
+<a id="l192" href="#l192">192</a>                                 (subseq mat 1 (search &quot;-&quot; mat))))))))))))
+<a id="l193" href="#l193">193</a> (defun format-parser (argv)
+<a id="l194" href="#l194">194</a>   (when argv
+<a id="l195" href="#l195">195</a>     (let ((c (car argv)))
+<a id="l196" href="#l196">196</a>       (when (and (&lt; 2 (length c))
+<a id="l197" href="#l197">197</a>                  (string= &quot;--&quot; (subseq c 0 2)))
+<a id="l198" href="#l198">198</a>        (cons (subseq c 2) (format-parser (cdr argv)))))))
+<a id="l199" href="#l199">199</a> (defun should-help (argv)
+<a id="l200" href="#l200">200</a>   (or (null argv)
+<a id="l201" href="#l201">201</a>       (dolist (a argv)
+<a id="l202" href="#l202">202</a>         (when (or (search &quot;-?&quot; a)
+<a id="l203" href="#l203">203</a>                   (search &quot;-h&quot; a)
+<a id="l204" href="#l204">204</a>                   (search &quot;help&quot; a))
+<a id="l205" href="#l205">205</a>           (return t)))))
+<a id="l206" href="#l206">206</a> (defun should-test (argv)
+<a id="l207" href="#l207">207</a>   (string= (car argv) &quot;test&quot;))
+<a id="l208" href="#l208">208</a> 
+<a id="l209" href="#l209">209</a> (define-symbol-macro test
+<a id="l210" href="#l210">210</a>     (progn (format t &quot;Helping you:~%&quot;)
+<a id="l211" href="#l211">211</a>            (main &quot;help&quot;)
+<a id="l212" href="#l212">212</a>            (format t &quot;~%DONE. Trying TTF.&quot;)
+<a id="l213" href="#l213">213</a>            (main &quot;--ttf&quot;)
+<a id="l214" href="#l214">214</a>            (format t &quot;~%DONE. Trying WOFF.&quot;)
+<a id="l215" href="#l215">215</a>            (main &quot;--woff&quot;)
+<a id="l216" href="#l216">216</a>            (format t &quot;~%DONE. Trying WOFF2.&quot;)
+<a id="l217" href="#l217">217</a>            (main &quot;--woff2&quot;)))
+<a id="l218" href="#l218">218</a> 
+<a id="l219" href="#l219">219</a> (defun main (&amp;rest argv)
+<a id="l220" href="#l220">220</a>   (declare (ignorable argv))
+<a id="l221" href="#l221">221</a>   (if (should-help argv)
+<a id="l222" href="#l222">222</a>       help
+<a id="l223" href="#l223">223</a>       (if (should-test argv)
+<a id="l224" href="#l224">224</a>           test
+<a id="l225" href="#l225">225</a>           (let ((formats (format-parser argv)))
+<a id="l226" href="#l226">226</a>             (let ((argv (mapcar (lambda (g) (intern (string-upcase g)))
+<a id="l227" href="#l227">227</a>                                 (nthcdr (length formats) argv)))
+<a id="l228" href="#l228">228</a>                   (formats (or formats &quot;ttf woff woff2&quot;)))
+<a id="l229" href="#l229">229</a>               (if (and argv (string= &quot;SHOW&quot; (string-upcase (car argv))))
+<a id="l230" href="#l230">230</a>                   (show-characters)
+<a id="l231" href="#l231">231</a>                   (multiple-value-bind (bool name)
+<a id="l232" href="#l232">232</a>                       (verify argv)
+<a id="l233" href="#l233">233</a>                     (if bool
+<a id="l234" href="#l234">234</a>                         (progn (remove-hints)
+<a id="l235" href="#l235">235</a>                                (mapc #&#x27;put-glyphs!
+<a id="l236" href="#l236">236</a>                                      (mapcar #&#x27;folders argv))
+<a id="l237" href="#l237">237</a>                                ;; Can&#x27;t get woff2 on my system.
+<a id="l238" href="#l238">238</a>                                (mapc #&#x27;build formats))
+<a id="l239" href="#l239">239</a>                         (progn (format t &quot;Invalid ~S in spec: ~{~A ~}~%&quot;
+<a id="l240" href="#l240">240</a>                                        name
+<a id="l241" href="#l241">241</a>                                        argv))))))))))
+<a id="l242" href="#l242">242</a> 
+<a id="l243" href="#l243">243</a> ;;; vim: set ft=lisp lisp:</pre>
+</div></body></html>
diff --git a/git/alt-hack0/file/generator.ros.html b/git/alt-hack0/file/generator.ros.html
index 12f1ace..8865a19 100644
--- a/git/alt-hack0/file/generator.ros.html
+++ b/git/alt-hack0/file/generator.ros.html
@@ -7,162 +7,233 @@
 <div id="top"><a href="../../../index.html">Recently Written</a> &middot; <a href="../../index.html">git</a></div>
 <h1>alt-hack0</h1><span class="desc">The Hack font family with a non-weird zero, and other variants.</span><p class="url">git clone https://github.com/equwal/alt-hack0</p><p><a href="../../alt-hack0/index.html">Log</a> | <a href="../../alt-hack0/files.html">Files</a> | <a href="../../alt-hack0/refs.html">Refs</a></p><hr/>
 <div id="content">
-<p>generator.ros (4784 bytes)</p><pre class="src"><a id="l1" href="#l1">1</a> #!/bin/sh
+<p>generator.ros (7905 bytes)</p><pre class="src"><a id="l1" href="#l1">1</a> #!/bin/sh
 <a id="l2" href="#l2">2</a> #|-*- mode:lisp -*-|#
 <a id="l3" href="#l3">3</a> #|
 <a id="l4" href="#l4">4</a> exec ros -Q -- $0 &quot;$@&quot;
 <a id="l5" href="#l5">5</a> |#
-<a id="l6" href="#l6">6</a> (progn ;;init forms
-<a id="l7" href="#l7">7</a>   (ros:ensure-asdf)
-<a id="l8" href="#l8">8</a>   #+quicklisp(ql:quickload &#x27;(:alexandria :str :uiop :let-over-lambda)
-<a id="l9" href="#l9">9</a>                            :silent t)
-<a id="l10" href="#l10">10</a>   (asdf:load-system :utils) ;My utilities, has the COLLECT macro.
-<a id="l11" href="#l11">11</a>   )
-<a id="l12" href="#l12">12</a> 
-<a id="l13" href="#l13">13</a> (defpackage :ros.script.generator.3783095582
-<a id="l14" href="#l14">14</a>   (:use :cl)
-<a id="l15" href="#l15">15</a>   (:import-from
-<a id="l16" href="#l16">16</a>    :alexandria
-<a id="l17" href="#l17">17</a>    :flatten
-<a id="l18" href="#l18">18</a>    :compose)
-<a id="l19" href="#l19">19</a>   (:import-from :str :concat)
-<a id="l20" href="#l20">20</a>   (:import-from :utils :collect :group :mapatoms)
-<a id="l21" href="#l21">21</a>   (:import-from
-<a id="l22" href="#l22">22</a>    :uiop
-<a id="l23" href="#l23">23</a>    :copy-file
-<a id="l24" href="#l24">24</a>    :resolve-symlinks
-<a id="l25" href="#l25">25</a>    :directory-files
-<a id="l26" href="#l26">26</a>    :subdirectories
-<a id="l27" href="#l27">27</a>    :run-program))
-<a id="l28" href="#l28">28</a> (in-package :ros.script.generator.3783095582)
-<a id="l29" href="#l29">29</a> ;;; Uses a magic symlinks to deal with directories. Make sure they exist in your
-<a id="l30" href="#l30">30</a> ;;; toplevel:
-<a id="l31" href="#l31">31</a> ;;; - tt-hinting (in hack/post_processing)
-<a id="l32" href="#l32">32</a> ;;; - glyphs (in alt-hack)
-<a id="l33" href="#l33">33</a> ;;; - source (in hack)
-<a id="l34" href="#l34">34</a> ;;; - hack
-<a id="l35" href="#l35">35</a> (defvar *weights* &#x27;(&quot;Bold&quot; &quot;BoldItalic&quot; &quot;Italic&quot; &quot;Regular&quot;))
-<a id="l36" href="#l36">36</a> 
-<a id="l37" href="#l37">37</a> (defun uncomment (spec)
-<a id="l38" href="#l38">38</a>   (remove-if #&#x27;(lambda (item)
-<a id="l39" href="#l39">39</a>                  (and (stringp item)
-<a id="l40" href="#l40">40</a>                       (= 1 (length item))))
-<a id="l41" href="#l41">41</a>              spec))
-<a id="l42" href="#l42">42</a> 
-<a id="l43" href="#l43">43</a> (defparameter *groups*
-<a id="l44" href="#l44">44</a>   (mapcar #&#x27;uncomment
-<a id="l45" href="#l45">45</a>    &#x27;((curve &quot;u0028-curved&quot; &quot;(&quot;
-<a id="l46" href="#l46">46</a>       &quot;u0029-curved&quot; &quot;)&quot;)
-<a id="l47" href="#l47">47</a>      (round &quot;u0028-rounder&quot; &quot;(&quot;
-<a id="l48" href="#l48">48</a>       &quot;u0029-rounder&quot; &quot;)&quot;)
-<a id="l49" href="#l49">49</a>      (backslash &quot;u0030-backslash&quot; &quot;0&quot;)
-<a id="l50" href="#l50">50</a>      (diamond &quot;u0030-diamond&quot; &quot;0&quot;)
-<a id="l51" href="#l51">51</a>      (dot &quot;u0030-dotted&quot; &quot;0&quot;)
-<a id="l52" href="#l52">52</a>      (forwardslash &quot;u0030-forwardslash&quot; &quot;0&quot;)
-<a id="l53" href="#l53">53</a>      (noslab1 &quot;u0031-noslab&quot; &quot;1&quot;)
-<a id="l54" href="#l54">54</a>      (flattop3 &quot;u0033-flattop&quot; &quot;3&quot;)
-<a id="l55" href="#l55">55</a>      (wider &quot;u003C-wider&quot; &quot;&lt;&quot;
-<a id="l56" href="#l56">56</a>       &quot;u003E-wider&quot; &quot;&gt;&quot;)
-<a id="l57" href="#l57">57</a>      (knife &quot;u0066-knife&quot; &quot;f&quot;)
-<a id="l58" href="#l58">58</a>      (slabi &quot;u0069-slab&quot; &quot;i&quot;
-<a id="l59" href="#l59">59</a>       &quot;u00EC-slab&quot; &quot;ì&quot;
-<a id="l60" href="#l60">60</a>       &quot;u00ED-slab&quot; &quot;í&quot;
-<a id="l61" href="#l61">61</a>       &quot;u00EE-slab&quot; &quot;î&quot;
-<a id="l62" href="#l62">62</a>       &quot;u00EF-slab&quot; &quot;ï&quot;
-<a id="l63" href="#l63">63</a>       &quot;u0129-slab&quot; &quot;ĩ&quot;
-<a id="l64" href="#l64">64</a>       &quot;u012B-slab&quot; &quot;ī&quot;
-<a id="l65" href="#l65">65</a>       &quot;u012D-slab&quot; &quot;ĭ&quot;
-<a id="l66" href="#l66">66</a>       &quot;u012F-slab&quot; &quot;į&quot;
-<a id="l67" href="#l67">67</a>       &quot;u0131-slab&quot; &quot;ı&quot;
-<a id="l68" href="#l68">68</a>       &quot;u0456-slab&quot; &quot;і&quot;
-<a id="l69" href="#l69">69</a>       &quot;u0457-slab&quot; &quot;ї&quot;)))
-<a id="l70" href="#l70">70</a>   &quot;Things you actually want to permute together.&quot;)
-<a id="l71" href="#l71">71</a> 
-<a id="l72" href="#l72">72</a> (defun find-keyword (keyword group)
-<a id="l73" href="#l73">73</a>   (when (not (null group))
-<a id="l74" href="#l74">74</a>     (let ((c (car group)))
-<a id="l75" href="#l75">75</a>       (if (eql keyword (car c))
-<a id="l76" href="#l76">76</a>           c
-<a id="l77" href="#l77">77</a>           (find-keyword keyword (cdr group))))))
-<a id="l78" href="#l78">78</a> 
-<a id="l79" href="#l79">79</a> (defun folders (keyword)
-<a id="l80" href="#l80">80</a>   (cdr (find-keyword keyword *groups*)))
-<a id="l81" href="#l81">81</a> 
-<a id="l82" href="#l82">82</a> (defun pprint-letters (letter-alist)
-<a id="l83" href="#l83">83</a>   (dolist (p letter-alist)
-<a id="l84" href="#l84">84</a>     (format t &quot;~S ~S~%&quot;
-<a id="l85" href="#l85">85</a>             (car p) (string (cdr p)))))
-<a id="l86" href="#l86">86</a> 
-<a id="l87" href="#l87">87</a> (defun show-characters ()
-<a id="l88" href="#l88">88</a>   (let ((dirs (subdirectories &quot;glyphs&quot;)))
-<a id="l89" href="#l89">89</a>     (pprint-letters
-<a id="l90" href="#l90">90</a>      (collect (d dirs)
-<a id="l91" href="#l91">91</a>        (let ((mat (car (last (pathname-directory d)))))
-<a id="l92" href="#l92">92</a>          (cons mat
-<a id="l93" href="#l93">93</a>                (code-char (read (make-string-input-stream
-<a id="l94" href="#l94">94</a>                                  (concat &quot;#x&quot;
-<a id="l95" href="#l95">95</a>                                          (subseq mat 1 (search &quot;-&quot; mat))))))))))))
-<a id="l96" href="#l96">96</a> 
-<a id="l97" href="#l97">97</a> (defun help ()
-<a id="l98" href="#l98">98</a>   (format t &quot;~@{~A~%~}&quot;
-<a id="l99" href="#l99">99</a>           &quot;generator.ros SPEC+&quot;
-<a id="l100" href="#l100">100</a>           &quot;SPEC should be a list of:&quot;)
-<a id="l101" href="#l101">101</a>   (format t &quot;~{~T~A~%~}&quot;
-<a id="l102" href="#l102">102</a>           (remove-if #&#x27;stringp (flatten *groups*))))
-<a id="l103" href="#l103">103</a> 
-<a id="l104" href="#l104">104</a> (defun remove-hints ()
-<a id="l105" href="#l105">105</a>   (let ((files (directory-files #P&quot;tt-hinting&quot;)))
-<a id="l106" href="#l106">106</a>     (dolist (f files)
-<a id="l107" href="#l107">107</a>       (with-open-file (si f :direction :input)
-<a id="l108" href="#l108">108</a>         (with-open-file (so f :direction :output
-<a id="l109" href="#l109">109</a>                               :if-exists :supersede)
-<a id="l110" href="#l110">110</a>           (let ((line (read-line si nil nil)))
-<a id="l111" href="#l111">111</a>             (when (and line (char/= #\#(elt line 0)))
-<a id="l112" href="#l112">112</a>               (write-line (format nil &quot;# ~S~%&quot; line) so))))))))
-<a id="l113" href="#l113">113</a> 
-<a id="l114" href="#l114">114</a> (defun put-glyphs! (ufolders)
-<a id="l115" href="#l115">115</a>   (dolist (arg ufolders)
-<a id="l116" href="#l116">116</a>     (dolist (weight *weights*)
-<a id="l117" href="#l117">117</a>       (dolist (f (uiop:directory-files
-<a id="l118" href="#l118">118</a>                   (concat &quot;glyphs/&quot; arg &quot;/&quot;
-<a id="l119" href="#l119">119</a>                           (string-downcase weight) &quot;/&quot;)))
-<a id="l120" href="#l120">120</a>         (copy-file f
-<a id="l121" href="#l121">121</a>                    (concat &quot;hack/&quot; &quot;source/Hack-&quot; weight
-<a id="l122" href="#l122">122</a>                            &quot;.ufo/glyphs/&quot;
-<a id="l123" href="#l123">123</a>                            (concat (pathname-name f) &quot;.&quot;
-<a id="l124" href="#l124">124</a>                                    (pathname-type f))))))))
-<a id="l125" href="#l125">125</a> (defun make-it (&amp;optional subcommand)
-<a id="l126" href="#l126">126</a>   ;; Cannot use uiop:launch-program since it is asynchronous.
-<a id="l127" href="#l127">127</a>   (run-program (if subcommand
-<a id="l128" href="#l128">128</a>                       (list &quot;make&quot; subcommand)
-<a id="l129" href="#l129">129</a>                       &quot;make&quot;)
-<a id="l130" href="#l130">130</a>                   :output *standard-output*
-<a id="l131" href="#l131">131</a>                   :directory (resolve-symlinks #P&quot;hack&quot;)
-<a id="l132" href="#l132">132</a>                   :error-output *standard-output*))
-<a id="l133" href="#l133">133</a> (defun build (&amp;rest make-commands)
-<a id="l134" href="#l134">134</a>   (dolist (m make-commands)
-<a id="l135" href="#l135">135</a>     (make-it m)))
-<a id="l136" href="#l136">136</a> 
-<a id="l137" href="#l137">137</a> (defun verify (spec)
-<a id="l138" href="#l138">138</a>   (not (set-difference spec (mapcar #&#x27;car *groups*))))
-<a id="l139" href="#l139">139</a> 
-<a id="l140" href="#l140">140</a> (defun main (&amp;rest argv)
-<a id="l141" href="#l141">141</a>   (declare (ignorable argv))
-<a id="l142" href="#l142">142</a>   (let ((f (first argv)))
-<a id="l143" href="#l143">143</a>     (if (or (null argv)
-<a id="l144" href="#l144">144</a>             (search &quot;-?&quot; f)
-<a id="l145" href="#l145">145</a>             (search &quot;--help&quot; f)
-<a id="l146" href="#l146">146</a>             (search &quot;-h&quot; f))
-<a id="l147" href="#l147">147</a>         (help)
-<a id="l148" href="#l148">148</a>         (let ((argv (mapcar (compose #&#x27;intern #&#x27;string-upcase) argv)))
-<a id="l149" href="#l149">149</a>           (when (verify argv)
-<a id="l150" href="#l150">150</a>             (remove-hints)
-<a id="l151" href="#l151">151</a>             (mapc #&#x27;put-glyphs!
-<a id="l152" href="#l152">152</a>                   (mapcar #&#x27;folders argv))
-<a id="l153" href="#l153">153</a>             ;; Can&#x27;t get woff2 on my system.
-<a id="l154" href="#l154">154</a>             ;; (make-it &quot;woff2&quot;)
-<a id="l155" href="#l155">155</a>             ;; (make-it)
-<a id="l156" href="#l156">156</a>             (build &quot;ttf&quot; &quot;woff&quot;))))))
-<a id="l157" href="#l157">157</a> 
-<a id="l158" href="#l158">158</a> ;;; vim: set ft=lisp lisp:</pre>
+<a id="l6" href="#l6">6</a> ;;; This file (c) Spenser Truex 2021
+<a id="l7" href="#l7">7</a> ;;; MIT license.
+<a id="l8" href="#l8">8</a> 
+<a id="l9" href="#l9">9</a> (progn ;;init forms
+<a id="l10" href="#l10">10</a>   (ros:ensure-asdf)
+<a id="l11" href="#l11">11</a>   #+quicklisp(ql:quickload &#x27;(:alexandria :uiop)
+<a id="l12" href="#l12">12</a>                            :silent t))
+<a id="l13" href="#l13">13</a> 
+<a id="l14" href="#l14">14</a> ;;; EXAMPLE USAGE:
+<a id="l15" href="#l15">15</a> ;;; cd alt-hack &amp;&amp; ./generator.ros curve dot slabi
+<a id="l16" href="#l16">16</a> (defpackage :ros.script.generator.3783095582
+<a id="l17" href="#l17">17</a>   (:use :cl))
+<a id="l18" href="#l18">18</a> (in-package :ros.script.generator.3783095582)
+<a id="l19" href="#l19">19</a> (defvar *weights* &#x27;(&quot;Bold&quot; &quot;BoldItalic&quot; &quot;Italic&quot; &quot;Regular&quot;))
+<a id="l20" href="#l20">20</a> 
+<a id="l21" href="#l21">21</a> (defun uncomment (spec)
+<a id="l22" href="#l22">22</a>   (remove-if #&#x27;(lambda (item)
+<a id="l23" href="#l23">23</a>                  (and (stringp item)
+<a id="l24" href="#l24">24</a>                       (= 1 (length item))))
+<a id="l25" href="#l25">25</a>              spec))
+<a id="l26" href="#l26">26</a> 
+<a id="l27" href="#l27">27</a> (defparameter *helpful-groups*
+<a id="l28" href="#l28">28</a>   &#x27;(
+<a id="l29" href="#l29">29</a>     (curve &quot;u0028-curved&quot; &quot;(&quot;
+<a id="l30" href="#l30">30</a>      &quot;u0029-curved&quot; &quot;)&quot;)
+<a id="l31" href="#l31">31</a>     (round &quot;u0028-rounder&quot; &quot;(&quot;
+<a id="l32" href="#l32">32</a>      &quot;u0029-rounder&quot; &quot;)&quot;)
+<a id="l33" href="#l33">33</a>     (backslash &quot;u0030-backslash&quot; &quot;0&quot;)
+<a id="l34" href="#l34">34</a>     (diamond &quot;u0030-diamond&quot; &quot;0&quot;)
+<a id="l35" href="#l35">35</a>     (dot &quot;u0030-dotted&quot; &quot;0&quot;)
+<a id="l36" href="#l36">36</a>     (forwardslash &quot;u0030-forwardslash&quot; &quot;0&quot;)
+<a id="l37" href="#l37">37</a>     (noslab1 &quot;u0031-noslab&quot; &quot;1&quot;)
+<a id="l38" href="#l38">38</a>     (flattop3 &quot;u0033-flattop&quot; &quot;3&quot;)
+<a id="l39" href="#l39">39</a>     (wider &quot;u003C-wider&quot; &quot;&lt;&quot;
+<a id="l40" href="#l40">40</a>      &quot;u003E-wider&quot; &quot;&gt;&quot;)
+<a id="l41" href="#l41">41</a>     (knife &quot;u0066-knife&quot; &quot;f&quot;)
+<a id="l42" href="#l42">42</a>     (slabi &quot;u0069-slab&quot; &quot;i&quot;
+<a id="l43" href="#l43">43</a>      &quot;u00EC-slab&quot; &quot;ì&quot;
+<a id="l44" href="#l44">44</a>      &quot;u00ED-slab&quot; &quot;í&quot;
+<a id="l45" href="#l45">45</a>      &quot;u00EE-slab&quot; &quot;î&quot;
+<a id="l46" href="#l46">46</a>      &quot;u00EF-slab&quot; &quot;ï&quot;
+<a id="l47" href="#l47">47</a>      &quot;u0129-slab&quot; &quot;ĩ&quot;
+<a id="l48" href="#l48">48</a>      &quot;u012B-slab&quot; &quot;ī&quot;
+<a id="l49" href="#l49">49</a>      &quot;u012D-slab&quot; &quot;ĭ&quot;
+<a id="l50" href="#l50">50</a>      &quot;u012F-slab&quot; &quot;į&quot;
+<a id="l51" href="#l51">51</a>      &quot;u0131-slab&quot; &quot;ı&quot;
+<a id="l52" href="#l52">52</a>      &quot;u0456-slab&quot; &quot;і&quot;
+<a id="l53" href="#l53">53</a>      &quot;u0457-slab&quot; &quot;ї&quot;))
+<a id="l54" href="#l54">54</a>   &quot;Groups with extra information for user help.&quot;)
+<a id="l55" href="#l55">55</a> 
+<a id="l56" href="#l56">56</a> (defun prune (test tree)
+<a id="l57" href="#l57">57</a>   (labels ((rec (tree acc)
+<a id="l58" href="#l58">58</a>              (cond
+<a id="l59" href="#l59">59</a>                ((null tree) (nreverse acc))
+<a id="l60" href="#l60">60</a>                ((consp (car tree))
+<a id="l61" href="#l61">61</a>                 (rec (cdr tree)
+<a id="l62" href="#l62">62</a>                      (cons (rec (car tree) nil) acc)))
+<a id="l63" href="#l63">63</a>                (t (rec (cdr tree)
+<a id="l64" href="#l64">64</a>                        (if (funcall test (car tree))
+<a id="l65" href="#l65">65</a>                            acc
+<a id="l66" href="#l66">66</a>                            (cons (car tree) acc)))))))
+<a id="l67" href="#l67">67</a>     (rec tree nil)))
+<a id="l68" href="#l68">68</a> 
+<a id="l69" href="#l69">69</a> (defun pprint-helpful-groups ()
+<a id="l70" href="#l70">70</a>   (let ((more-helpful (prune #&#x27;(lambda (s)
+<a id="l71" href="#l71">71</a>                                  (and (stringp s)
+<a id="l72" href="#l72">72</a>                                       (&lt; 1 (length s))))
+<a id="l73" href="#l73">73</a>                              *helpful-groups*)))
+<a id="l74" href="#l74">74</a>     (loop for g in more-helpful
+<a id="l75" href="#l75">75</a>           do (format t &quot;~A:~%&quot; (car g))
+<a id="l76" href="#l76">76</a>           do (format t &quot;~{~A ~}~%&quot; (cdr g)))))
+<a id="l77" href="#l77">77</a> (defparameter *groups*
+<a id="l78" href="#l78">78</a>   (mapcar #&#x27;uncomment *helpful-groups*)
+<a id="l79" href="#l79">79</a>   &quot;Things you actually want to permute together.&quot;)
+<a id="l80" href="#l80">80</a> (defparameter *exclusions*
+<a id="l81" href="#l81">81</a>   &#x27;((curve round)
+<a id="l82" href="#l82">82</a>     (backslash diamond dot forwardslash))
+<a id="l83" href="#l83">83</a>   &quot;Things which you don&#x27;t want specified at the same time.&quot;)
+<a id="l84" href="#l84">84</a> (defparameter *formats*
+<a id="l85" href="#l85">85</a>   &#x27;(&quot;ttf&quot; &quot;woff&quot; &quot;woff2&quot;)
+<a id="l86" href="#l86">86</a>   &quot;Valid parameters to call as formats.&quot;)
+<a id="l87" href="#l87">87</a> 
+<a id="l88" href="#l88">88</a> (define-symbol-macro help
+<a id="l89" href="#l89">89</a>     (progn (pprint-lines
+<a id="l90" href="#l90">90</a>             &quot;generator.ros OPTIONS* {SHOW | SPEC+}&quot;)
+<a id="l91" href="#l91">91</a>            (format t &quot;These are valid OPTIONS: ~{~A ~}~%&quot;
+<a id="l92" href="#l92">92</a>                    (mapcar #&#x27;(lambda (f) (concatenate &#x27;string &quot;--&quot; f))
+<a id="l93" href="#l93">93</a>                            *formats*))
+<a id="l94" href="#l94">94</a>            (pprint-lines &quot;SPEC should be a list of:&quot;)
+<a id="l95" href="#l95">95</a>            (pprint-helpful-groups)
+<a id="l96" href="#l96">96</a>            (pprint-lines
+<a id="l97" href="#l97">97</a>             &quot;Keep in mind that it makes no sense to include&quot;
+<a id="l98" href="#l98">98</a>             &quot;the same character spec twice.&quot;
+<a id="l99" href="#l99">99</a>             &quot;SHOW just finds all available glyphs in alt-hack.&quot;
+<a id="l100" href="#l100">100</a>             &quot;TEST runs the test functions for ttf, woff and woff2.&quot;)))
+<a id="l101" href="#l101">101</a> 
+<a id="l102" href="#l102">102</a> (defun find-keyword (keyword group)
+<a id="l103" href="#l103">103</a>   (when (not (null group))
+<a id="l104" href="#l104">104</a>     (let ((c (car group)))
+<a id="l105" href="#l105">105</a>       (if (eql keyword (car c))
+<a id="l106" href="#l106">106</a>           c
+<a id="l107" href="#l107">107</a>           (find-keyword keyword (cdr group))))))
+<a id="l108" href="#l108">108</a> 
+<a id="l109" href="#l109">109</a> (defun folders (keyword)
+<a id="l110" href="#l110">110</a>   (cdr (find-keyword keyword *groups*)))
+<a id="l111" href="#l111">111</a> 
+<a id="l112" href="#l112">112</a> (defun pprint-lines (&amp;rest strings)
+<a id="l113" href="#l113">113</a>   (format t &quot;~{~A~%~}&quot; strings))
+<a id="l114" href="#l114">114</a> 
+<a id="l115" href="#l115">115</a> (defun remove-hints ()
+<a id="l116" href="#l116">116</a>   (let ((files (uiop:directory-files #P&quot;Hack/postbuild_processing/tt-hinting&quot;)))
+<a id="l117" href="#l117">117</a>     (dolist (f files)
+<a id="l118" href="#l118">118</a>       (with-open-file (si f :direction :input)
+<a id="l119" href="#l119">119</a>         (with-open-file (so f :direction :output
+<a id="l120" href="#l120">120</a>                               :if-exists :supersede)
+<a id="l121" href="#l121">121</a>           (let ((line (read-line si nil nil)))
+<a id="l122" href="#l122">122</a>             (when (and line (char/= #\#(elt line 0)))
+<a id="l123" href="#l123">123</a>               (write-line (format nil &quot;# ~S~%&quot; line) so))))))))
+<a id="l124" href="#l124">124</a> 
+<a id="l125" href="#l125">125</a> (defun put-glyphs! (ufolders)
+<a id="l126" href="#l126">126</a>   (dolist (arg ufolders)
+<a id="l127" href="#l127">127</a>     (dolist (weight *weights*)
+<a id="l128" href="#l128">128</a>       (dolist (f (uiop:directory-files
+<a id="l129" href="#l129">129</a>                   (concatenate &#x27;string &quot;glyphs/&quot; arg &quot;/&quot;
+<a id="l130" href="#l130">130</a>                                (string-downcase weight) &quot;/&quot;)))
+<a id="l131" href="#l131">131</a>         (uiop:copy-file f
+<a id="l132" href="#l132">132</a>                    (concatenate &#x27;string
+<a id="l133" href="#l133">133</a>                                 &quot;Hack/source/Hack-&quot;
+<a id="l134" href="#l134">134</a>                                 weight
+<a id="l135" href="#l135">135</a>                                 &quot;.ufo/glyphs/&quot;
+<a id="l136" href="#l136">136</a>                                 (pathname-name f)
+<a id="l137" href="#l137">137</a>                                 &quot;.&quot;
+<a id="l138" href="#l138">138</a>                                 (pathname-type f)))))))
+<a id="l139" href="#l139">139</a> (defun make-it (&amp;optional subcommand)
+<a id="l140" href="#l140">140</a>   ;; Cannot use uiop:launch-program since it is asynchronous.
+<a id="l141" href="#l141">141</a>   (uiop:run-program (if subcommand
+<a id="l142" href="#l142">142</a>                       (list &quot;make&quot; subcommand)
+<a id="l143" href="#l143">143</a>                       &quot;make&quot;)
+<a id="l144" href="#l144">144</a>                   :output *standard-output*
+<a id="l145" href="#l145">145</a>                   :directory #P&quot;Hack&quot;
+<a id="l146" href="#l146">146</a>                   :error-output *standard-output*))
+<a id="l147" href="#l147">147</a> (defun build (&amp;rest make-commands)
+<a id="l148" href="#l148">148</a>   (dolist (m make-commands)
+<a id="l149" href="#l149">149</a>     (make-it m)))
+<a id="l150" href="#l150">150</a> 
+<a id="l151" href="#l151">151</a> (defun verify (spec)
+<a id="l152" href="#l152">152</a>   &quot;Ensure that the spec is not bogus.&quot;
+<a id="l153" href="#l153">153</a>   (let ((group (not (set-difference spec (mapcar #&#x27;car *groups*))))
+<a id="l154" href="#l154">154</a>         (exclusion (not (some #&#x27;identity
+<a id="l155" href="#l155">155</a>                     (mapcar #&#x27;(lambda (ex)
+<a id="l156" href="#l156">156</a>                                 (&lt;= 2 (length (intersection spec ex))))
+<a id="l157" href="#l157">157</a>                             *exclusions*)))))
+<a id="l158" href="#l158">158</a>     (values (and group exclusion)
+<a id="l159" href="#l159">159</a>             (if group (if exclusion &#x27;group-and-exclusion &#x27;group)
+<a id="l160" href="#l160">160</a>                 (if exclusion &#x27;exclusion &#x27;unknown)))))
+<a id="l161" href="#l161">161</a> 
+<a id="l162" href="#l162">162</a> (defun show-characters ()
+<a id="l163" href="#l163">163</a>   (flet ((pprint-letters (letter-alist)
+<a id="l164" href="#l164">164</a>            (dolist (p letter-alist)
+<a id="l165" href="#l165">165</a>              (format t &quot;~T~A~T~A~%&quot;
+<a id="l166" href="#l166">166</a>                      (string (cdr p)) (car p)))))
+<a id="l167" href="#l167">167</a>     (let ((dirs (uiop:subdirectories &quot;glyphs&quot;)))
+<a id="l168" href="#l168">168</a>       (pprint-letters
+<a id="l169" href="#l169">169</a>        (loop
+<a id="l170" href="#l170">170</a>          for d in dirs
+<a id="l171" href="#l171">171</a>          collecting
+<a id="l172" href="#l172">172</a>          (let ((mat (car (last (pathname-directory d)))))
+<a id="l173" href="#l173">173</a>            (cons
+<a id="l174" href="#l174">174</a>             mat
+<a id="l175" href="#l175">175</a>             (code-char (read-from-string
+<a id="l176" href="#l176">176</a>                         (concatenate &#x27;string
+<a id="l177" href="#l177">177</a>                                      &quot;#x&quot;
+<a id="l178" href="#l178">178</a>                                 (subseq mat 1 (search &quot;-&quot; mat))))))))))))
+<a id="l179" href="#l179">179</a> (defun format-parser (argv)
+<a id="l180" href="#l180">180</a>   (when argv
+<a id="l181" href="#l181">181</a>     (let ((c (car argv)))
+<a id="l182" href="#l182">182</a>       (when (and (&lt; 2 (length c))
+<a id="l183" href="#l183">183</a>                  (string= &quot;--&quot; (subseq c 0 2)))
+<a id="l184" href="#l184">184</a>        (cons (subseq c 2) (format-parser (cdr argv)))))))
+<a id="l185" href="#l185">185</a> (defun should-help (argv)
+<a id="l186" href="#l186">186</a>   (or (null argv)
+<a id="l187" href="#l187">187</a>       (dolist (a argv)
+<a id="l188" href="#l188">188</a>         (when (or (search &quot;-?&quot; a)
+<a id="l189" href="#l189">189</a>                   (search &quot;-h&quot; a)
+<a id="l190" href="#l190">190</a>                   (search &quot;help&quot; a))
+<a id="l191" href="#l191">191</a>           (return t)))))
+<a id="l192" href="#l192">192</a> (defun should-test (argv)
+<a id="l193" href="#l193">193</a>   (string= (car argv) &quot;test&quot;))
+<a id="l194" href="#l194">194</a> 
+<a id="l195" href="#l195">195</a> (define-symbol-macro test
+<a id="l196" href="#l196">196</a>     (progn (format t &quot;Helping you:~%&quot;)
+<a id="l197" href="#l197">197</a>            (main &quot;help&quot;)
+<a id="l198" href="#l198">198</a>            (format t &quot;~%DONE. Trying TTF.&quot;)
+<a id="l199" href="#l199">199</a>            (main &quot;--ttf&quot;)
+<a id="l200" href="#l200">200</a>            (format t &quot;~%DONE. Trying WOFF.&quot;)
+<a id="l201" href="#l201">201</a>            (main &quot;--woff&quot;)
+<a id="l202" href="#l202">202</a>            (format t &quot;~%DONE. Trying WOFF2.&quot;)
+<a id="l203" href="#l203">203</a>            (main &quot;--woff2&quot;)))
+<a id="l204" href="#l204">204</a> 
+<a id="l205" href="#l205">205</a> (defun main (&amp;rest argv)
+<a id="l206" href="#l206">206</a>   (declare (ignorable argv))
+<a id="l207" href="#l207">207</a>   (if (should-help argv)
+<a id="l208" href="#l208">208</a>       help
+<a id="l209" href="#l209">209</a>       (if (should-test argv)
+<a id="l210" href="#l210">210</a>           test
+<a id="l211" href="#l211">211</a>           (let ((formats (format-parser argv)))
+<a id="l212" href="#l212">212</a>             (let ((argv (mapcar (lambda (g) (intern (string-upcase g)))
+<a id="l213" href="#l213">213</a>                                 (nthcdr (length formats) argv)))
+<a id="l214" href="#l214">214</a>                   (formats (or formats &quot;ttf woff woff2&quot;)))
+<a id="l215" href="#l215">215</a>               (if (and argv (string= &quot;SHOW&quot; (string-upcase (car argv))))
+<a id="l216" href="#l216">216</a>                   (show-characters)
+<a id="l217" href="#l217">217</a>                   (multiple-value-bind (bool name)
+<a id="l218" href="#l218">218</a>                       (verify argv)
+<a id="l219" href="#l219">219</a>                     (if bool
+<a id="l220" href="#l220">220</a>                         (progn (remove-hints)
+<a id="l221" href="#l221">221</a>                                (mapc #&#x27;put-glyphs!
+<a id="l222" href="#l222">222</a>                                      (mapcar #&#x27;folders argv))
+<a id="l223" href="#l223">223</a>                                ;; Can&#x27;t get woff2 on my system.
+<a id="l224" href="#l224">224</a>                                (mapc #&#x27;build formats))
+<a id="l225" href="#l225">225</a>                         (progn (format t &quot;Invalid ~S in spec: ~{~A ~}~%&quot;
+<a id="l226" href="#l226">226</a>                                        name
+<a id="l227" href="#l227">227</a>                                        argv))))))))))
+<a id="l228" href="#l228">228</a> 
+<a id="l229" href="#l229">229</a> ;;; vim: set ft=lisp lisp:</pre>
 </div></body></html>
diff --git a/git/alt-hack0/file/glyphs.html b/git/alt-hack0/file/glyphs.html
index 119bc7e..90b0bdf 100644
--- a/git/alt-hack0/file/glyphs.html
+++ b/git/alt-hack0/file/glyphs.html
@@ -7,5 +7,5 @@
 <div id="top"><a href="../../../index.html">Recently Written</a> &middot; <a href="../../index.html">git</a></div>
 <h1>alt-hack0</h1><span class="desc">The Hack font family with a non-weird zero, and other variants.</span><p class="url">git clone https://github.com/equwal/alt-hack0</p><p><a href="../../alt-hack0/index.html">Log</a> | <a href="../../alt-hack0/files.html">Files</a> | <a href="../../alt-hack0/refs.html">Refs</a></p><hr/>
 <div id="content">
-<p>glyphs (57 bytes)</p><pre class="src"><a id="l1" href="#l1">1</a> /home/jose/src/github.com/source-foundry/alt-hack/glyphs/</pre>
+<p>glyphs (26 bytes)</p><pre class="src"><a id="l1" href="#l1">1</a> alt-hack-new-glyphs/glyphs</pre>
 </div></body></html>
diff --git a/git/alt-hack0/file/hack.html b/git/alt-hack0/file/hack.html
index 9261512..58fddbe 100644
--- a/git/alt-hack0/file/hack.html
+++ b/git/alt-hack0/file/hack.html
@@ -1,11 +1,11 @@
 <!DOCTYPE html>
 <html lang="en"><head><meta charset="UTF-8" />
 <meta name="viewport" content="width=device-width, initial-scale=1" />
-<title>alt-hack0/hack - Recently Written</title>
+<title>alt-hack0/Hack - Recently Written</title>
 <link rel="stylesheet" href="../../stagit.css" />
 </head><body>
 <div id="top"><a href="../../../index.html">Recently Written</a> &middot; <a href="../../index.html">git</a></div>
 <h1>alt-hack0</h1><span class="desc">The Hack font family with a non-weird zero, and other variants.</span><p class="url">git clone https://github.com/equwal/alt-hack0</p><p><a href="../../alt-hack0/index.html">Log</a> | <a href="../../alt-hack0/files.html">Files</a> | <a href="../../alt-hack0/refs.html">Refs</a></p><hr/>
 <div id="content">
-<p>hack (45 bytes)</p><pre class="src"><a id="l1" href="#l1">1</a> /home/jose/src/github.com/source-foundry/hack</pre>
+<p>Hack (43 bytes)</p><pre class="src"><a id="l1" href="#l1">1</a> /home/jose/src/repos/gh/source-foundry/hack</pre>
 </div></body></html>
diff --git a/git/alt-hack0/file/script-bc.lisp.html b/git/alt-hack0/file/script-bc.lisp.html
new file mode 100644
index 0000000..b0c3ec9
--- /dev/null
+++ b/git/alt-hack0/file/script-bc.lisp.html
@@ -0,0 +1,14 @@
+<!DOCTYPE html>
+<html lang="en"><head><meta charset="UTF-8" />
+<meta name="viewport" content="width=device-width, initial-scale=1" />
+<title>alt-hack0/script-bc.lisp - Recently Written</title>
+<link rel="stylesheet" href="../../stagit.css" />
+</head><body>
+<div id="top"><a href="../../../index.html">Recently Written</a> &middot; <a href="../../index.html">git</a></div>
+<h1>alt-hack0</h1><span class="desc">The Hack font family with a non-weird zero, and other variants.</span><p class="url">git clone https://github.com/equwal/alt-hack0</p><p><a href="../../alt-hack0/index.html">Log</a> | <a href="../../alt-hack0/files.html">Files</a> | <a href="../../alt-hack0/refs.html">Refs</a></p><hr/>
+<div id="content">
+<p>script-bc.lisp (102 bytes)</p><pre class="src"><a id="l1" href="#l1">1</a> (ql:quickload :alexandria)
+<a id="l2" href="#l2">2</a> (ql:quickload :uiop)
+<a id="l3" href="#l3">3</a> (load &quot;all-fonts-bc.lisp&quot;)
+<a id="l4" href="#l4">4</a> (all-fonts::gen-all-fonts)</pre>
+</div></body></html>
diff --git a/git/alt-hack0/file/script-default.lisp.html b/git/alt-hack0/file/script-default.lisp.html
new file mode 100644
index 0000000..6fe04b1
--- /dev/null
+++ b/git/alt-hack0/file/script-default.lisp.html
@@ -0,0 +1,14 @@
+<!DOCTYPE html>
+<html lang="en"><head><meta charset="UTF-8" />
+<meta name="viewport" content="width=device-width, initial-scale=1" />
+<title>alt-hack0/script-default.lisp - Recently Written</title>
+<link rel="stylesheet" href="../../stagit.css" />
+</head><body>
+<div id="top"><a href="../../../index.html">Recently Written</a> &middot; <a href="../../index.html">git</a></div>
+<h1>alt-hack0</h1><span class="desc">The Hack font family with a non-weird zero, and other variants.</span><p class="url">git clone https://github.com/equwal/alt-hack0</p><p><a href="../../alt-hack0/index.html">Log</a> | <a href="../../alt-hack0/files.html">Files</a> | <a href="../../alt-hack0/refs.html">Refs</a></p><hr/>
+<div id="content">
+<p>script-default.lisp (107 bytes)</p><pre class="src"><a id="l1" href="#l1">1</a> (ql:quickload :alexandria)
+<a id="l2" href="#l2">2</a> (ql:quickload :uiop)
+<a id="l3" href="#l3">3</a> (load &quot;all-fonts-default.lisp&quot;)
+<a id="l4" href="#l4">4</a> (all-fonts::gen-all-fonts)</pre>
+</div></body></html>
diff --git a/git/alt-hack0/file/source.html b/git/alt-hack0/file/source.html
index cdf2401..7d73bb0 100644
--- a/git/alt-hack0/file/source.html
+++ b/git/alt-hack0/file/source.html
@@ -7,5 +7,5 @@
 <div id="top"><a href="../../../index.html">Recently Written</a> &middot; <a href="../../index.html">git</a></div>
 <h1>alt-hack0</h1><span class="desc">The Hack font family with a non-weird zero, and other variants.</span><p class="url">git clone https://github.com/equwal/alt-hack0</p><p><a href="../../alt-hack0/index.html">Log</a> | <a href="../../alt-hack0/files.html">Files</a> | <a href="../../alt-hack0/refs.html">Refs</a></p><hr/>
 <div id="content">
-<p>source (53 bytes)</p><pre class="src"><a id="l1" href="#l1">1</a> /home/jose/src/github.com/source-foundry/hack/source/</pre>
+<p>source (50 bytes)</p><pre class="src"><a id="l1" href="#l1">1</a> /home/jose/src/repos/gh/source-foundry/hack/source</pre>
 </div></body></html>
diff --git a/git/alt-hack0/file/tarflat.html b/git/alt-hack0/file/tarflat.html
new file mode 100644
index 0000000..8a38a92
--- /dev/null
+++ b/git/alt-hack0/file/tarflat.html
@@ -0,0 +1,26 @@
+<!DOCTYPE html>
+<html lang="en"><head><meta charset="UTF-8" />
+<meta name="viewport" content="width=device-width, initial-scale=1" />
+<title>alt-hack0/tarflat - Recently Written</title>
+<link rel="stylesheet" href="../../stagit.css" />
+</head><body>
+<div id="top"><a href="../../../index.html">Recently Written</a> &middot; <a href="../../index.html">git</a></div>
+<h1>alt-hack0</h1><span class="desc">The Hack font family with a non-weird zero, and other variants.</span><p class="url">git clone https://github.com/equwal/alt-hack0</p><p><a href="../../alt-hack0/index.html">Log</a> | <a href="../../alt-hack0/files.html">Files</a> | <a href="../../alt-hack0/refs.html">Refs</a></p><hr/>
+<div id="content">
+<p>tarflat (446 bytes)</p><pre class="src"><a id="l1" href="#l1">1</a> #!/bin/sh
+<a id="l2" href="#l2">2</a> PWD1=$(pwd)
+<a id="l3" href="#l3">3</a> flatfile () {
+<a id="l4" href="#l4">4</a>     mkdir -p out
+<a id="l5" href="#l5">5</a>     cd out || return 1
+<a id="l6" href="#l6">6</a>     tar -xf ../&quot;$1&quot;
+<a id="l7" href="#l7">7</a>     cd &quot;$PWD1&quot; || return 1
+<a id="l8" href="#l8">8</a>     cd &quot;$PWD1&quot;/out/Hack/build/ttf  || return 1
+<a id="l9" href="#l9">9</a>     tar -cf - * | xz -12 &gt;&quot;$PWD1&quot;/&quot;$1.flat&quot;
+<a id="l10" href="#l10">10</a>     mv &quot;$PWD1&quot;/&quot;$1.flat&quot; &quot;$PWD1&quot;/&quot;$1&quot;
+<a id="l11" href="#l11">11</a>     cd &quot;$PWD1&quot; || return 1
+<a id="l12" href="#l12">12</a>     rm -Rf out
+<a id="l13" href="#l13">13</a> }
+<a id="l14" href="#l14">14</a> 
+<a id="l15" href="#l15">15</a> # can&#x27;t use -exec on shell functions, so do this
+<a id="l16" href="#l16">16</a> find . -name &#x27;*.tar.xz&#x27; | while read -r file ; do flatfile &quot;$(echo $file | sed &#x27;s/^\.\///&#x27;)&quot; ; done</pre>
+</div></body></html>
diff --git a/git/alt-hack0/file/tt-hinting.html b/git/alt-hack0/file/tt-hinting.html
index 0f331ed..52f5f3c 100644
--- a/git/alt-hack0/file/tt-hinting.html
+++ b/git/alt-hack0/file/tt-hinting.html
@@ -7,5 +7,5 @@
 <div id="top"><a href="../../../index.html">Recently Written</a> &middot; <a href="../../index.html">git</a></div>
 <h1>alt-hack0</h1><span class="desc">The Hack font family with a non-weird zero, and other variants.</span><p class="url">git clone https://github.com/equwal/alt-hack0</p><p><a href="../../alt-hack0/index.html">Log</a> | <a href="../../alt-hack0/files.html">Files</a> | <a href="../../alt-hack0/refs.html">Refs</a></p><hr/>
 <div id="content">
-<p>tt-hinting (77 bytes)</p><pre class="src"><a id="l1" href="#l1">1</a> /home/jose/src/github.com/source-foundry/hack/postbuild_processing/tt-hinting</pre>
+<p>tt-hinting (75 bytes)</p><pre class="src"><a id="l1" href="#l1">1</a> /home/jose/src/repos/gh/source-foundry/hack/postbuild_processing/tt-hinting</pre>
 </div></body></html>
diff --git a/git/alt-hack0/files.html b/git/alt-hack0/files.html
index c49a905..82be5f4 100644
--- a/git/alt-hack0/files.html
+++ b/git/alt-hack0/files.html
@@ -7,5 +7,5 @@
 <div id="top"><a href="../../index.html">Recently Written</a> &middot; <a href="../index.html">git</a></div>
 <h1>alt-hack0</h1><span class="desc">The Hack font family with a non-weird zero, and other variants.</span><p class="url">git clone https://github.com/equwal/alt-hack0</p><p><a href="../alt-hack0/index.html">Log</a> | <a href="../alt-hack0/files.html">Files</a> | <a href="../alt-hack0/refs.html">Refs</a></p><hr/>
 <div id="content">
-<table><thead><tr><td>Mode</td><td>Name</td><td>Size</td></tr></thead><tbody><tr><td>100644</td><td><a href="file/.gitignore.html">.gitignore</a></td><td class="num">7</td></tr><tr><td>100644</td><td><a href="file/README.md.html">README.md</a></td><td class="num">781</td></tr><tr><td>100755</td><td><a href="file/generator.ros.html">generator.ros</a></td><td class="num">4784</td></tr><tr><td>120000</td><td><a href="file/glyphs.html">glyphs</a></td><td class="num">57</td></tr><tr><td>120000</td><td><a href="file/hack.html">hack</a></td><td class="num">45</td></tr><tr><td>120000</td><td><a href="file/source.html">source</a></td><td class="num">53</td></tr><tr><td>120000</td><td><a href="file/tt-hinting.html">tt-hinting</a></td><td class="num">77</td></tr><tr><td>100644</td><td>zero-doot.png <span class="dim">(not shown)</span></td><td class="num">11214</td></tr><tr><td>100644</td><td>zero.png <span class="dim">(not shown)</span></td><td class="num">13172</td></tr></tbody></table>
+<table><thead><tr><td>Mode</td><td>Name</td><td>Size</td></tr></thead><tbody><tr><td>100644</td><td><a href="file/.gitignore.html">.gitignore</a></td><td class="num">7</td></tr><tr><td>120000</td><td><a href="file/Hack.html">Hack</a></td><td class="num">43</td></tr><tr><td>100644</td><td><a href="file/README.md.html">README.md</a></td><td class="num">1182</td></tr><tr><td>100644</td><td><a href="file/all-fonts-bc.lisp.html">all-fonts-bc.lisp</a></td><td class="num">1592</td></tr><tr><td>100644</td><td><a href="file/all-fonts-default.lisp.html">all-fonts-default.lisp</a></td><td class="num">1560</td></tr><tr><td>160000</td><td>alt-hack-new-glyphs <span class="dim">(not shown)</span></td><td class="num">0</td></tr><tr><td>100755</td><td><a href="file/generator-bc.ros.html">generator-bc.ros</a></td><td class="num">8345</td></tr><tr><td>100755</td><td><a href="file/generator.ros.html">generator.ros</a></td><td class="num">7905</td></tr><tr><td>120000</td><td><a href="file/glyphs.html">glyphs</a></td><td class="num">26</td></tr><tr><td>100644</td><td><a href="file/script-bc.lisp.html">script-bc.lisp</a></td><td class="num">102</td></tr><tr><td>100644</td><td><a href="file/script-default.lisp.html">script-default.lisp</a></td><td class="num">107</td></tr><tr><td>120000</td><td><a href="file/source.html">source</a></td><td class="num">50</td></tr><tr><td>100755</td><td><a href="file/tarflat.html">tarflat</a></td><td class="num">446</td></tr><tr><td>120000</td><td><a href="file/tt-hinting.html">tt-hinting</a></td><td class="num">75</td></tr><tr><td>100644</td><td>zero-doot.png <span class="dim">(not shown)</span></td><td class="num">11214</td></tr><tr><td>100644</td><td>zero.png <span class="dim">(not shown)</span></td><td class="num">13172</td></tr></tbody></table>
 </div></body></html>
diff --git a/git/alt-hack0/index.html b/git/alt-hack0/index.html
index 78f446e..09042a1 100644
--- a/git/alt-hack0/index.html
+++ b/git/alt-hack0/index.html
@@ -7,5 +7,5 @@
 <div id="top"><a href="../../index.html">Recently Written</a> &middot; <a href="../index.html">git</a></div>
 <h1>alt-hack0</h1><span class="desc">The Hack font family with a non-weird zero, and other variants.</span><p class="url">git clone https://github.com/equwal/alt-hack0</p><p><a href="../alt-hack0/index.html">Log</a> | <a href="../alt-hack0/files.html">Files</a> | <a href="../alt-hack0/refs.html">Refs</a></p><hr/>
 <div id="content">
-<table><thead><tr><td>Date</td><td>Commit message</td><td>Author</td></tr></thead><tbody><tr><td>2021-01-15 16:37</td><td><a href="commit/a9f0ebf66a38bde08af9550d694226d1e8159454.html">Ignore binary files in git repo.</a></td><td>Spenser Truex</td></tr><tr><td>2020-09-21 15:22</td><td><a href="commit/423ee8d7f5073caf378b80dc7353732e842da50e.html">Newline</a></td><td>Spenser Truex</td></tr><tr><td>2020-09-21 15:22</td><td><a href="commit/aef0727f84b7bcc281a58d075b3891102651f650.html">Free tarballs.</a></td><td>Spenser Truex</td></tr><tr><td>2020-09-17 08:55</td><td><a href="commit/3af3bfec4756cae6d46fec7fe72af6b6c003f586.html">Edit readme with site.</a></td><td>Spenser Truex</td></tr><tr><td>2019-11-18 23:23</td><td><a href="commit/04aea2e69186cbd8d0371d92d30bf851adcd071a.html">Note script for generation.</a></td><td>Spenser Truex</td></tr><tr><td>2019-11-18 20:48</td><td><a href="commit/096ab91b92198a27b3b4a5a5ceffe7ca57a44009.html">Successful build!</a></td><td>Spenser Truex</td></tr><tr><td>2019-11-18 19:29</td><td><a href="commit/09e104747a15c44356bf80d09b5b8e090641b108.html">Add help function.</a></td><td>Spenser Truex</td></tr><tr><td>2019-11-18 17:08</td><td><a href="commit/2ef7da977eec04f4c9dab41074d8b26a18235564.html">Roswell (not working yet) script and symlinks.</a></td><td>Spenser Truex</td></tr><tr><td>2019-11-18 11:32</td><td><a href="commit/ab24fd421f09de6867b4472a24794b034c878906.html">Merge branch &#x27;master&#x27; of github.com:equwal/alt-hack0</a></td><td>Spenser Truex</td></tr><tr><td>2019-11-18 11:32</td><td><a href="commit/d7dc00df51879fb9cb5232fce44e89c2d75c3fa1.html">Add dotted variant.</a></td><td>Spenser Truex</td></tr><tr><td>2019-11-18 10:36</td><td><a href="commit/2b752fb12d50b9662a2211a64d10c375845c1055.html">Add Emacs gist.</a></td><td>Spenser Truex</td></tr><tr><td>2019-11-18 00:32</td><td><a href="commit/dd001e236ee7fdc4c52ea057776c7679267bcbdc.html">Captions.</a></td><td>Spenser Truex</td></tr><tr><td>2019-11-18 00:31</td><td><a href="commit/ab5e0cc428f235cedd2afc35c19bdfe49a8cce1d.html">Old zero add.</a></td><td>Spenser Truex</td></tr><tr><td>2019-11-18 00:27</td><td><a href="commit/4f98a1a559c108865ce86c4b5ed3f19ae500631a.html">Add resized zero.</a></td><td>Spenser Truex</td></tr><tr><td>2019-11-18 00:27</td><td><a href="commit/759cc124441d057ea6790de5816b6758d520e636.html">Reasonable size zero.</a></td><td>Spenser Truex</td></tr><tr><td>2019-11-18 00:25</td><td><a href="commit/997ae396c437b5651468ac95f730a02ff8f80c65.html">Image.</a></td><td>Spenser Truex</td></tr><tr><td>2019-11-18 00:24</td><td><a href="commit/ef4ba9dc6a10cf11ff2085a95248b847f48bb1b9.html">Add everything.</a></td><td>Spenser Truex</td></tr></tbody></table>
+<table><thead><tr><td>Date</td><td>Commit message</td><td>Author</td></tr></thead><tbody><tr><td>2023-08-10 13:15</td><td><a href="commit/a09b18297800b617b3e407f952f0ce5ad2c999ec.html">Add bc scripts</a></td><td>Spenser Truex</td></tr><tr><td>2023-08-10 13:14</td><td><a href="commit/d56aaf015c47ed3118a4ec06c7493675a9d8ffb8.html">Change glyphs dir</a></td><td>Spenser Truex</td></tr><tr><td>2021-02-05 15:47</td><td><a href="commit/bde80c5f6759aab5ff6a61add0704a8f83f3f94b.html">Add combinatoric script</a></td><td>Spenser Truex</td></tr><tr><td>2021-01-16 02:57</td><td><a href="commit/3cc9a7d269baad7a41d252e0525f4835893334ff.html">Re-symlink.</a></td><td>Spenser Truex</td></tr><tr><td>2021-01-15 17:29</td><td><a href="commit/f109b78b9b2fd835ef21e266b019aa491847ef90.html">Add TODO</a></td><td>Spenser Truex</td></tr><tr><td>2021-01-15 16:37</td><td><a href="commit/a9f0ebf66a38bde08af9550d694226d1e8159454.html">Ignore binary files in git repo.</a></td><td>Spenser Truex</td></tr><tr><td>2020-09-21 15:22</td><td><a href="commit/423ee8d7f5073caf378b80dc7353732e842da50e.html">Newline</a></td><td>Spenser Truex</td></tr><tr><td>2020-09-21 15:22</td><td><a href="commit/aef0727f84b7bcc281a58d075b3891102651f650.html">Free tarballs.</a></td><td>Spenser Truex</td></tr><tr><td>2020-09-17 08:55</td><td><a href="commit/3af3bfec4756cae6d46fec7fe72af6b6c003f586.html">Edit readme with site.</a></td><td>Spenser Truex</td></tr><tr><td>2019-11-18 23:23</td><td><a href="commit/04aea2e69186cbd8d0371d92d30bf851adcd071a.html">Note script for generation.</a></td><td>Spenser Truex</td></tr><tr><td>2019-11-18 20:48</td><td><a href="commit/096ab91b92198a27b3b4a5a5ceffe7ca57a44009.html">Successful build!</a></td><td>Spenser Truex</td></tr><tr><td>2019-11-18 19:29</td><td><a href="commit/09e104747a15c44356bf80d09b5b8e090641b108.html">Add help function.</a></td><td>Spenser Truex</td></tr><tr><td>2019-11-18 17:08</td><td><a href="commit/2ef7da977eec04f4c9dab41074d8b26a18235564.html">Roswell (not working yet) script and symlinks.</a></td><td>Spenser Truex</td></tr><tr><td>2019-11-18 11:32</td><td><a href="commit/ab24fd421f09de6867b4472a24794b034c878906.html">Merge branch &#x27;master&#x27; of github.com:equwal/alt-hack0</a></td><td>Spenser Truex</td></tr><tr><td>2019-11-18 11:32</td><td><a href="commit/d7dc00df51879fb9cb5232fce44e89c2d75c3fa1.html">Add dotted variant.</a></td><td>Spenser Truex</td></tr><tr><td>2019-11-18 10:36</td><td><a href="commit/2b752fb12d50b9662a2211a64d10c375845c1055.html">Add Emacs gist.</a></td><td>Spenser Truex</td></tr><tr><td>2019-11-18 00:32</td><td><a href="commit/dd001e236ee7fdc4c52ea057776c7679267bcbdc.html">Captions.</a></td><td>Spenser Truex</td></tr><tr><td>2019-11-18 00:31</td><td><a href="commit/ab5e0cc428f235cedd2afc35c19bdfe49a8cce1d.html">Old zero add.</a></td><td>Spenser Truex</td></tr><tr><td>2019-11-18 00:27</td><td><a href="commit/4f98a1a559c108865ce86c4b5ed3f19ae500631a.html">Add resized zero.</a></td><td>Spenser Truex</td></tr><tr><td>2019-11-18 00:27</td><td><a href="commit/759cc124441d057ea6790de5816b6758d520e636.html">Reasonable size zero.</a></td><td>Spenser Truex</td></tr><tr><td>2019-11-18 00:25</td><td><a href="commit/997ae396c437b5651468ac95f730a02ff8f80c65.html">Image.</a></td><td>Spenser Truex</td></tr><tr><td>2019-11-18 00:24</td><td><a href="commit/ef4ba9dc6a10cf11ff2085a95248b847f48bb1b9.html">Add everything.</a></td><td>Spenser Truex</td></tr></tbody></table>
 </div></body></html>
diff --git a/git/alt-hack0/refs.html b/git/alt-hack0/refs.html
index ba5947c..dbec893 100644
--- a/git/alt-hack0/refs.html
+++ b/git/alt-hack0/refs.html
@@ -7,5 +7,5 @@
 <div id="top"><a href="../../index.html">Recently Written</a> &middot; <a href="../index.html">git</a></div>
 <h1>alt-hack0</h1><span class="desc">The Hack font family with a non-weird zero, and other variants.</span><p class="url">git clone https://github.com/equwal/alt-hack0</p><p><a href="../alt-hack0/index.html">Log</a> | <a href="../alt-hack0/files.html">Files</a> | <a href="../alt-hack0/refs.html">Refs</a></p><hr/>
 <div id="content">
-<table><thead><tr><td>Name</td><td>Type</td><td>Date</td><td>Commit</td></tr></thead><tbody><tr><td>master</td><td>commit</td><td>2021-01-15</td><td>a9f0ebf</td></tr></tbody></table>
+<table><thead><tr><td>Name</td><td>Type</td><td>Date</td><td>Commit</td></tr></thead><tbody><tr><td>master</td><td>commit</td><td>2023-08-10</td><td>a09b182</td></tr></tbody></table>
 </div></body></html>
diff --git a/git/index.html b/git/index.html
index 009d747..c166b58 100644
--- a/git/index.html
+++ b/git/index.html
@@ -7,5 +7,5 @@
 <div id="top"><a href="../index.html">Recently Written</a> &middot; <a href="index.html">git</a></div>
 
 <div id="content">
-<h1>ye olde code shoppe</h1><p>Mirror of <a href="https://github.com/equwal">github.com/equwal</a> (public, non-fork repos).</p><table><thead><tr><td>Name</td><td>Description</td><td>Owner</td><td>Last commit</td></tr></thead><tbody><tr><td><a href="alt-hack0/index.html">alt-hack0</a></td><td>The Hack font family with a non-weird zero, and other variants.</td><td>Spenser Truex</td><td>2021-01-15 16:37</td></tr><tr><td><a href="asdf-registration/index.html">asdf-registration</a></td><td>Register your asdf projects with the ASDF loader.</td><td>Spenser Truex</td><td>2019-11-09 20:40</td></tr><tr><td><a href="assistkey/index.html">assistkey</a></td><td>Hardware key remapper for the Viwoods AiPaper Reader: AI key, volume keys and power, with multi-tap, hold and chords</td><td>Spenser Truex</td><td>2026-09-21 15:52</td></tr><tr><td><a href="awesome-rebind/index.html">awesome-rebind</a></td><td>Extensions and companions for Rebind, the button remapper for e-ink readers and Android.</td><td>Spenser Truex</td><td>2026-09-21 12:40</td></tr><tr><td><a href="blaher/index.html">blaher</a></td><td>Gilbert Baumann&#x27;s blaher</td><td>Spenser Truex</td><td>2023-05-27 18:44</td></tr><tr><td><a href="cl-yag/index.html">cl-yag</a></td><td>Mirror and rewrite of Solène Rapenne&#x27;s cl-yag SSG of renown</td><td>Spenser Truex</td><td>2025-09-01 17:14</td></tr><tr><td><a href="clapt/index.html">clapt</a></td><td>Archived: generate SBCL cores for lots of libraries.</td><td>Spenser Truex</td><td>2019-11-09 20:50</td></tr><tr><td><a href="clic/index.html">clic</a></td><td>MIRROR ONLY Gopher client with pretty colours in Common Lisp</td><td>Spenser Truex</td><td>2020-06-03 11:41</td></tr><tr><td><a href="coleslaw/index.html">coleslaw</a></td><td>Emacs mode for the &quot;Coleslaw&quot; site generator written in Common Lisp.</td><td>Spenser Truex</td><td>2024-05-11 03:08</td></tr><tr><td><a href="coleslaw-mode-docs/index.html">coleslaw-mode-docs</a></td><td>Documentation to coleslaw-mode for Emacs.</td><td>Spenser Truex</td><td>2019-12-07 18:19</td></tr><tr><td><a href="coleslaw-snippets/index.html">coleslaw-snippets</a></td><td>Boilerplate for Coleslaw markdown.</td><td>Spenser Truex</td><td>2019-06-23 00:12</td></tr><tr><td><a href="common-lisp-utils/index.html">common-lisp-utils</a></td><td>My utilities for Common Lisp programming.</td><td>Spenser Truex</td><td>2019-07-02 01:51</td></tr><tr><td><a href="cores/index.html">cores</a></td><td>Save your custom core file after re-installing SBCL. Load libraries compiled into the core. Works but very rough around the edges.</td><td>Spenser Truex</td><td>2025-08-29 14:08</td></tr><tr><td><a href="CSV/index.html">CSV</a></td><td>Convert CSV (in a reader macro, or in a file) in to Lisp lists.</td><td>Spenser Truex</td><td>2019-01-07 14:05</td></tr><tr><td><a href="defsl/index.html">defsl</a></td><td>Dependencies from the lisp macro system, not the reader.</td><td>Spenser Truex</td><td>2023-06-25 20:44</td></tr><tr><td><a href="deploy-handoff/index.html">deploy-handoff</a></td><td>Claude Code plugin: the agent drives the browser to the last deploy, billing, or pull request step. You make the final click.</td><td>Spenser Truex</td><td>2026-09-21 13:27</td></tr><tr><td><a href="desktop-subtitle-replay/index.html">desktop-subtitle-replay</a></td><td></td><td>Spenser Truex</td><td>2026-08-26 19:46</td></tr><tr><td><a href="dickt.store/index.html">dickt.store</a></td><td>BYOK yomitan dictionary converter for yomidick</td><td>Spenser Truex</td><td>2026-05-09 08:51</td></tr><tr><td><a href="dmenu-scripts/index.html">dmenu-scripts</a></td><td>Ask for things</td><td>Spenser Truex</td><td>2025-09-10 23:02</td></tr><tr><td><a href="dmodurl/index.html">dmodurl</a></td><td>Convenient URL v</td><td>Spenser Truex</td><td>2025-09-01 18:48</td></tr><tr><td><a href="dpatchmail/index.html">dpatchmail</a></td><td>Patch programs with a dmenu interface</td><td>Spenser Truex</td><td>2025-09-01 18:37</td></tr><tr><td><a href="dsad/index.html">dsad</a></td><td>Dmenu interface for Simple Audio Daemon</td><td>Spenser Truex</td><td>2025-09-01 18:27</td></tr><tr><td><a href="ediff-spacemacs/index.html">ediff-spacemacs</a></td><td>Bindings fo ediff in a spacemacs layer.</td><td>Spenser Truex</td><td>2019-11-13 22:36</td></tr><tr><td><a href="encrypted-home-backups/index.html">encrypted-home-backups</a></td><td>Automated home backups, onto an encrypted partition</td><td>Spenser Truex</td><td>2019-04-20 16:47</td></tr><tr><td><a href="equwal/index.html">equwal</a></td><td></td><td>Spenser Truex</td><td>2026-09-21 20:56</td></tr><tr><td><a href="esperanto/index.html">esperanto</a></td><td>Compress natural language in Esperanto</td><td>Spenser Truex</td><td>2019-11-25 13:19</td></tr><tr><td><a href="Forthe/index.html">Forthe</a></td><td>Forth-like DSL.</td><td>Spenser Truex</td><td>2019-06-24 12:01</td></tr><tr><td><a href="gendocs/index.html">gendocs</a></td><td>Simple document generation library.</td><td>Spenser Truex</td><td>2019-04-29 19:59</td></tr><tr><td><a href="goldfish/index.html">goldfish</a></td><td>My fish init.</td><td>Spenser Truex</td><td>2020-03-07 08:31</td></tr><tr><td><a href="ideamine/index.html">ideamine</a></td><td>An idea inbox for Claude Code: /idea saves ideas at zero tokens; Claude triages them and routes each to the cheapest model that can build it.</td><td>Spenser Truex</td><td>2026-09-21 19:33</td></tr><tr><td><a href="ii-lchat-metapackage/index.html">ii-lchat-metapackage</a></td><td>Get suckless irc working for YOU</td><td>Spenser Truex</td><td>2025-09-07 11:05</td></tr><tr><td><a href="ink-dim/index.html">ink-dim</a></td><td>Ink Dim: tap to set the frontlight of a Viwoods AiPaper reader below the lowest system level. Tap again to go back.</td><td>Spenser Truex</td><td>2026-09-21 04:11</td></tr><tr><td><a href="ink-recents/index.html">ink-recents</a></td><td>Ink Recents: a recent-apps switcher drawn for e-ink readers. No animation, swipe up to close, swipe down to close the others.</td><td>Spenser Truex</td><td>2026-09-21 04:11</td></tr><tr><td><a href="ink-update/index.html">ink-update</a></td><td>Ink Update: tells you when Rebind, Ink Recents or Ink Dim has a new version. F-Droid, then Google Play, then GitHub.</td><td>Spenser Truex</td><td>2026-09-21 12:36</td></tr><tr><td><a href="len-cmp/index.html">len-cmp</a></td><td>Efficient comparsion of length in lists.</td><td>Spenser Truex</td><td>2019-09-14 14:10</td></tr><tr><td><a href="librivox/index.html">librivox</a></td><td>Automated youtube uploading of audiobooks</td><td>Spenser Truex</td><td>2020-03-10 18:51</td></tr><tr><td><a href="lisp-multithreaded-internet/index.html">lisp-multithreaded-internet</a></td><td>Multithreaded internet for Common Lisp</td><td>Spenser Truex</td><td>2019-10-27 14:44</td></tr><tr><td><a href="LispBrain/index.html">LispBrain</a></td><td>The best Brainfuck debugger available, if you know how the Common Lisp debugger works. Uses Common Lisp&#x27;s ease of debugging to make debugging Brainfuck code easy. Almost entirely useless.</td><td>Spenser Truex</td><td>2019-09-07 13:45</td></tr><tr><td><a href="minimak-tty-xkb/index.html">minimak-tty-xkb</a></td><td>&quot;Check out my awesome website dude.&quot;</td><td>Spenser Truex</td><td>2021-01-06 14:48</td></tr><tr><td><a href="minimalist-template/index.html">minimalist-template</a></td><td>Another minimalist template for quickproject</td><td>Spenser Truex</td><td>2020-01-06 12:37</td></tr><tr><td><a href="nixtoo-genux/index.html">nixtoo-genux</a></td><td>Declarative Nix package manager setup. A new linux distro.</td><td>Spenser Truex</td><td>2025-09-04 16:14</td></tr><tr><td><a href="pass-simple/index.html">pass-simple</a></td><td>fork of zerous&#x27; minimal pass rewrite with bugfixes</td><td>Spenser Truex</td><td>2025-09-02 13:59</td></tr><tr><td><a href="posix-pipes/index.html">posix-pipes</a></td><td>portable pipes straight from CLOCC</td><td>Spenser Truex</td><td>2025-09-03 15:39</td></tr><tr><td><a href="prompt-mail/index.html">prompt-mail</a></td><td>Ask mail-related questions and filter mail-related files with dmenu</td><td>Spenser Truex</td><td>2025-09-05 01:58</td></tr><tr><td><a href="proxyverif/index.html">proxyverif</a></td><td>Check socks proxies whether they are alive or non-responsive  (ping through)</td><td>Spenser Truex</td><td>2019-03-31 23:21</td></tr><tr><td><a href="quickurl/index.html">quickurl</a></td><td></td><td>Spenser Truex</td><td>2019-12-20 22:18</td></tr><tr><td><a href="r6rs-complete/index.html">r6rs-complete</a></td><td>R6RS single document.</td><td>Spenser Truex</td><td>2019-11-24 14:44</td></tr><tr><td><a href="rebind/index.html">rebind</a></td><td>Rebind: remap the hardware buttons of e-ink readers and any Android 12+ device. Free beta APK.</td><td>Spenser Truex</td><td>2026-09-21 12:39</td></tr><tr><td><a href="recentlywritten/index.html">recentlywritten</a></td><td>my writings (done recently)</td><td>Spenser Truex</td><td>2026-09-21 19:15</td></tr><tr><td><a href="rectangle/index.html">rectangle</a></td><td>Spacemacs layer for binding rectangle interaction commands.</td><td>Spenser Truex</td><td>2020-07-24 20:43</td></tr><tr><td><a href="resume-template/index.html">resume-template</a></td><td>Resume template</td><td>Spenser Truex</td><td>2020-09-14 03:30</td></tr><tr><td><a href="sacc/index.html">sacc</a></td><td>Mirror of git://bitreich.org/sacc, the sacc gopher client from bitreich.org.</td><td>Spenser Truex</td><td>2025-03-31 17:55</td></tr><tr><td><a href="sacc-ebuild/index.html">sacc-ebuild</a></td><td>Mirrored on Github for normies.</td><td>Spenser Truex</td><td>2020-04-07 00:17</td></tr><tr><td><a href="sbm/index.html">sbm</a></td><td>dmenu bookmarks. Instantly fuzzy search thousands of bookmarks and plumb them. LOOKING FOR SUCKLESS SOFTWARE EDITION? GO TO sbm-suckless INSTEAD</td><td>Spenser Truex</td><td>2026-09-21 14:06</td></tr><tr><td><a href="sbm-android/index.html">sbm-android</a></td><td>sbm bookmarks for Android: fuzzy search, share to add, sync with bm and the browser add-on</td><td>Spenser Truex</td><td>2026-09-21 05:09</td></tr><tr><td><a href="sbm-extension/index.html">sbm-extension</a></td><td>sbm bookmarks for Firefox and Chrome: fuzzy search, add the page, sync with bm and the sbm app</td><td>Spenser Truex</td><td>2026-09-21 05:09</td></tr><tr><td><a href="sbm-suckless/index.html">sbm-suckless</a></td><td>sbm before the rewrite: bookmarks in a plain file, picked with dmenu. Suckless style.</td><td>Spenser Truex</td><td>2026-09-21 14:05</td></tr><tr><td><a href="sbm-sync/index.html">sbm-sync</a></td><td>Sync server for sbm bookmark files: one small Go program, plain files, AGPL</td><td>Spenser Truex</td><td>2026-09-21 19:02</td></tr><tr><td><a href="sigil/index.html">sigil</a></td><td>A documentation preprocessor for Common Lisp docs</td><td>Spenser Truex</td><td>2020-03-26 16:25</td></tr><tr><td><a href="sl/index.html">sl</a></td><td>SL: Dependency language for Common Lisp</td><td>Spenser Truex</td><td>2019-09-11 17:08</td></tr><tr><td><a href="slurp/index.html">slurp</a></td><td>Spacemacs layer for slurping, inserting, copying, etc. of buffers (keybind layer).</td><td>Spenser Truex</td><td>2019-07-03 13:42</td></tr><tr><td><a href="stumpwm-init/index.html">stumpwm-init</a></td><td>I use dwm now. Archived.</td><td>Spenser Truex</td><td>2020-03-31 15:46</td></tr><tr><td><a href="subplz-web/index.html">subplz-web</a></td><td></td><td>Spenser Truex</td><td>2026-09-21 19:02</td></tr><tr><td><a href="subread-android/index.html">subread-android</a></td><td>SubRead for Android: times an audiobook against its ebook on the device</td><td>Spenser Truex</td><td>2026-09-21 17:55</td></tr><tr><td><a href="subread-dictionary/index.html">subread-dictionary</a></td><td>Pop-up dictionary for Android that reads Yomitan dictionaries, with local audio</td><td>Spenser Truex</td><td>2026-09-21 20:59</td></tr><tr><td><a href="subread-extension/index.html">subread-extension</a></td><td>Show your own .srt over a YouTube video, in time with it. Chrome and Firefox.</td><td>Spenser Truex</td><td>2026-09-21 03:50</td></tr><tr><td><a href="subread-overlay/index.html">subread-overlay</a></td><td>Shows the lines of an .srt over any Android media player, in time with it. Tap a word to look it up.</td><td>Spenser Truex</td><td>2026-09-21 22:12</td></tr><tr><td><a href="subread.koplugin/index.html">subread.koplugin</a></td><td>KOReader plugin: the book follows the narration of an audiobook, from an .srt made by subread.space</td><td>Spenser Truex</td><td>2026-09-21 16:49</td></tr><tr><td><a href="subread.space/index.html">subread.space</a></td><td>read subs in space</td><td>Spenser Truex</td><td>2026-05-07 08:11</td></tr><tr><td><a href="tag-gen/index.html">tag-gen</a></td><td>Generate tags for each directory and say what programming languages to look for</td><td>Spenser Truex</td><td>2025-09-05 00:09</td></tr><tr><td><a href="timeclock/index.html">timeclock</a></td><td>Spacemacs layer for tracking your time.</td><td>Spenser Truex</td><td>2020-07-24 20:46</td></tr><tr><td><a href="tiny-runlevels/index.html">tiny-runlevels</a></td><td>Using an init system for many instances of simple programs . https://therealtruex.com/posts/Using-an-init-system-for-many-instances-of-simple-programs</td><td>Spenser Truex</td><td>2025-09-07 12:16</td></tr><tr><td><a href="tmpl/index.html">tmpl</a></td><td>Insanely simple templates </td><td>Spenser Truex</td><td>2025-09-12 07:59</td></tr><tr><td><a href="tnot/index.html">tnot</a></td><td>like tmux but not</td><td>Spenser Truex</td><td>2025-09-01 22:53</td></tr><tr><td><a href="vibeslop-dickt/index.html">vibeslop-dickt</a></td><td>make your own vibeslop dickt in just a few minutes</td><td>Spenser Truex</td><td>2026-05-22 00:48</td></tr><tr><td><a href="xinput-persistence/index.html">xinput-persistence</a></td><td>xinput for mouse or keyboard configurations that work when disconnected or on boot.</td><td>Spenser Truex</td><td>2019-07-02 01:52</td></tr></tbody></table>
+<h1>ye olde code shoppe</h1><p>Mirror of <a href="https://github.com/equwal">github.com/equwal</a> (public, non-fork repos).</p><table><thead><tr><td>Name</td><td>Description</td><td>Owner</td><td>Last commit</td></tr></thead><tbody><tr><td><a href="alt-hack0/index.html">alt-hack0</a></td><td>The Hack font family with a non-weird zero, and other variants.</td><td>Spenser Truex</td><td>2023-08-10 13:15</td></tr><tr><td><a href="asdf-registration/index.html">asdf-registration</a></td><td>Register your asdf projects with the ASDF loader.</td><td>Spenser Truex</td><td>2019-11-09 20:40</td></tr><tr><td><a href="assistkey/index.html">assistkey</a></td><td>Hardware key remapper for the Viwoods AiPaper Reader: AI key, volume keys and power, with multi-tap, hold and chords</td><td>Spenser Truex</td><td>2026-09-21 15:52</td></tr><tr><td><a href="awesome-rebind/index.html">awesome-rebind</a></td><td>Extensions and companions for Rebind, the button remapper for e-ink readers and Android.</td><td>Spenser Truex</td><td>2026-09-21 12:40</td></tr><tr><td><a href="blaher/index.html">blaher</a></td><td>Gilbert Baumann&#x27;s blaher</td><td>Spenser Truex</td><td>2023-05-27 18:44</td></tr><tr><td><a href="cl-yag/index.html">cl-yag</a></td><td>Mirror and rewrite of Solène Rapenne&#x27;s cl-yag SSG of renown</td><td>Spenser Truex</td><td>2025-09-01 17:14</td></tr><tr><td><a href="clapt/index.html">clapt</a></td><td>Archived: generate SBCL cores for lots of libraries.</td><td>Spenser Truex</td><td>2019-11-09 20:50</td></tr><tr><td><a href="clic/index.html">clic</a></td><td>MIRROR ONLY Gopher client with pretty colours in Common Lisp</td><td>Spenser Truex</td><td>2020-06-03 11:41</td></tr><tr><td><a href="coleslaw/index.html">coleslaw</a></td><td>Emacs mode for the &quot;Coleslaw&quot; site generator written in Common Lisp.</td><td>Spenser Truex</td><td>2024-05-11 03:08</td></tr><tr><td><a href="coleslaw-mode-docs/index.html">coleslaw-mode-docs</a></td><td>Documentation to coleslaw-mode for Emacs.</td><td>Spenser Truex</td><td>2019-12-07 18:19</td></tr><tr><td><a href="coleslaw-snippets/index.html">coleslaw-snippets</a></td><td>Boilerplate for Coleslaw markdown.</td><td>Spenser Truex</td><td>2019-06-23 00:12</td></tr><tr><td><a href="common-lisp-utils/index.html">common-lisp-utils</a></td><td>My utilities for Common Lisp programming.</td><td>Spenser Truex</td><td>2019-07-02 01:51</td></tr><tr><td><a href="cores/index.html">cores</a></td><td>Save your custom core file after re-installing SBCL. Load libraries compiled into the core. Works but very rough around the edges.</td><td>Spenser Truex</td><td>2025-08-29 14:08</td></tr><tr><td><a href="CSV/index.html">CSV</a></td><td>Convert CSV (in a reader macro, or in a file) in to Lisp lists.</td><td>Spenser Truex</td><td>2019-01-07 14:05</td></tr><tr><td><a href="defsl/index.html">defsl</a></td><td>Dependencies from the lisp macro system, not the reader.</td><td>Spenser Truex</td><td>2023-06-25 20:44</td></tr><tr><td><a href="deploy-handoff/index.html">deploy-handoff</a></td><td>Claude Code plugin: the agent drives the browser to the last deploy, billing, or pull request step. You make the final click.</td><td>Spenser Truex</td><td>2026-09-21 13:27</td></tr><tr><td><a href="desktop-subtitle-replay/index.html">desktop-subtitle-replay</a></td><td></td><td>Spenser Truex</td><td>2026-08-26 19:46</td></tr><tr><td><a href="dickt.store/index.html">dickt.store</a></td><td>BYOK yomitan dictionary converter for yomidick</td><td>Spenser Truex</td><td>2026-05-09 08:51</td></tr><tr><td><a href="dmenu-scripts/index.html">dmenu-scripts</a></td><td>Ask for things</td><td>Spenser Truex</td><td>2025-09-10 23:02</td></tr><tr><td><a href="dmodurl/index.html">dmodurl</a></td><td>Convenient URL v</td><td>Spenser Truex</td><td>2025-09-01 18:48</td></tr><tr><td><a href="dpatchmail/index.html">dpatchmail</a></td><td>Patch programs with a dmenu interface</td><td>Spenser Truex</td><td>2025-09-01 18:37</td></tr><tr><td><a href="dsad/index.html">dsad</a></td><td>Dmenu interface for Simple Audio Daemon</td><td>Spenser Truex</td><td>2025-09-01 18:27</td></tr><tr><td><a href="ediff-spacemacs/index.html">ediff-spacemacs</a></td><td>Bindings fo ediff in a spacemacs layer.</td><td>Spenser Truex</td><td>2019-11-13 22:36</td></tr><tr><td><a href="encrypted-home-backups/index.html">encrypted-home-backups</a></td><td>Automated home backups, onto an encrypted partition</td><td>Spenser Truex</td><td>2019-04-20 16:47</td></tr><tr><td><a href="equwal/index.html">equwal</a></td><td></td><td>Spenser Truex</td><td>2026-09-21 20:56</td></tr><tr><td><a href="esperanto/index.html">esperanto</a></td><td>Compress natural language in Esperanto</td><td>Spenser Truex</td><td>2019-11-25 13:19</td></tr><tr><td><a href="Forthe/index.html">Forthe</a></td><td>Forth-like DSL.</td><td>Spenser Truex</td><td>2019-06-24 12:01</td></tr><tr><td><a href="gendocs/index.html">gendocs</a></td><td>Simple document generation library.</td><td>Spenser Truex</td><td>2019-04-29 19:59</td></tr><tr><td><a href="goldfish/index.html">goldfish</a></td><td>My fish init.</td><td>Spenser Truex</td><td>2020-03-07 08:31</td></tr><tr><td><a href="ideamine/index.html">ideamine</a></td><td>An idea inbox for Claude Code: /idea saves ideas at zero tokens; Claude triages them and routes each to the cheapest model that can build it.</td><td>Spenser Truex</td><td>2026-09-21 19:33</td></tr><tr><td><a href="ii-lchat-metapackage/index.html">ii-lchat-metapackage</a></td><td>Get suckless irc working for YOU</td><td>Spenser Truex</td><td>2025-09-07 11:05</td></tr><tr><td><a href="ink-dim/index.html">ink-dim</a></td><td>Ink Dim: tap to set the frontlight of a Viwoods AiPaper reader below the lowest system level. Tap again to go back.</td><td>Spenser Truex</td><td>2026-09-21 04:11</td></tr><tr><td><a href="ink-recents/index.html">ink-recents</a></td><td>Ink Recents: a recent-apps switcher drawn for e-ink readers. No animation, swipe up to close, swipe down to close the others.</td><td>Spenser Truex</td><td>2026-09-21 04:11</td></tr><tr><td><a href="ink-update/index.html">ink-update</a></td><td>Ink Update: tells you when Rebind, Ink Recents or Ink Dim has a new version. F-Droid, then Google Play, then GitHub.</td><td>Spenser Truex</td><td>2026-09-21 12:36</td></tr><tr><td><a href="len-cmp/index.html">len-cmp</a></td><td>Efficient comparsion of length in lists.</td><td>Spenser Truex</td><td>2019-09-14 14:10</td></tr><tr><td><a href="librivox/index.html">librivox</a></td><td>Automated youtube uploading of audiobooks</td><td>Spenser Truex</td><td>2020-03-10 18:51</td></tr><tr><td><a href="lisp-multithreaded-internet/index.html">lisp-multithreaded-internet</a></td><td>Multithreaded internet for Common Lisp</td><td>Spenser Truex</td><td>2019-10-27 14:44</td></tr><tr><td><a href="LispBrain/index.html">LispBrain</a></td><td>The best Brainfuck debugger available, if you know how the Common Lisp debugger works. Uses Common Lisp&#x27;s ease of debugging to make debugging Brainfuck code easy. Almost entirely useless.</td><td>Spenser Truex</td><td>2019-09-07 13:45</td></tr><tr><td><a href="minimak-tty-xkb/index.html">minimak-tty-xkb</a></td><td>&quot;Check out my awesome website dude.&quot;</td><td>Spenser Truex</td><td>2021-01-15 17:23</td></tr><tr><td><a href="minimalist-template/index.html">minimalist-template</a></td><td>Another minimalist template for quickproject</td><td>Spenser Truex</td><td>2020-01-06 12:37</td></tr><tr><td><a href="nixtoo-genux/index.html">nixtoo-genux</a></td><td>Declarative Nix package manager setup. A new linux distro.</td><td>Spenser Truex</td><td>2025-09-04 16:14</td></tr><tr><td><a href="pass-simple/index.html">pass-simple</a></td><td>fork of zerous&#x27; minimal pass rewrite with bugfixes</td><td>Spenser Truex</td><td>2025-09-02 13:59</td></tr><tr><td><a href="posix-pipes/index.html">posix-pipes</a></td><td>portable pipes straight from CLOCC</td><td>Spenser Truex</td><td>2025-09-03 15:39</td></tr><tr><td><a href="prompt-mail/index.html">prompt-mail</a></td><td>Ask mail-related questions and filter mail-related files with dmenu</td><td>Spenser Truex</td><td>2025-09-05 01:58</td></tr><tr><td><a href="proxyverif/index.html">proxyverif</a></td><td>Check socks proxies whether they are alive or non-responsive  (ping through)</td><td>Spenser Truex</td><td>2019-03-31 23:21</td></tr><tr><td><a href="quickurl/index.html">quickurl</a></td><td></td><td>Spenser Truex</td><td>2019-12-20 22:18</td></tr><tr><td><a href="r6rs-complete/index.html">r6rs-complete</a></td><td>R6RS single document.</td><td>Spenser Truex</td><td>2019-11-24 14:44</td></tr><tr><td><a href="rebind/index.html">rebind</a></td><td>Rebind: remap the hardware buttons of e-ink readers and any Android 12+ device. Free beta APK.</td><td>Spenser Truex</td><td>2026-09-21 12:39</td></tr><tr><td><a href="recentlywritten/index.html">recentlywritten</a></td><td>my writings (done recently)</td><td>Spenser Truex</td><td>2026-09-21 19:15</td></tr><tr><td><a href="rectangle/index.html">rectangle</a></td><td>Spacemacs layer for binding rectangle interaction commands.</td><td>Spenser Truex</td><td>2020-07-24 20:43</td></tr><tr><td><a href="resume-template/index.html">resume-template</a></td><td>Resume template</td><td>Spenser Truex</td><td>2020-09-14 03:30</td></tr><tr><td><a href="sacc/index.html">sacc</a></td><td>Mirror of git://bitreich.org/sacc, the sacc gopher client from bitreich.org.</td><td>Spenser Truex</td><td>2025-03-31 17:55</td></tr><tr><td><a href="sacc-ebuild/index.html">sacc-ebuild</a></td><td>Mirrored on Github for normies.</td><td>Spenser Truex</td><td>2020-04-07 00:17</td></tr><tr><td><a href="sbm/index.html">sbm</a></td><td>dmenu bookmarks. Instantly fuzzy search thousands of bookmarks and plumb them. LOOKING FOR SUCKLESS SOFTWARE EDITION? GO TO sbm-suckless INSTEAD</td><td>Spenser Truex</td><td>2026-09-21 14:06</td></tr><tr><td><a href="sbm-android/index.html">sbm-android</a></td><td>sbm bookmarks for Android: fuzzy search, share to add, sync with bm and the browser add-on</td><td>Spenser Truex</td><td>2026-09-21 05:09</td></tr><tr><td><a href="sbm-extension/index.html">sbm-extension</a></td><td>sbm bookmarks for Firefox and Chrome: fuzzy search, add the page, sync with bm and the sbm app</td><td>Spenser Truex</td><td>2026-09-21 05:09</td></tr><tr><td><a href="sbm-suckless/index.html">sbm-suckless</a></td><td>sbm before the rewrite: bookmarks in a plain file, picked with dmenu. Suckless style.</td><td>Spenser Truex</td><td>2026-09-21 14:05</td></tr><tr><td><a href="sbm-sync/index.html">sbm-sync</a></td><td>Sync server for sbm bookmark files: one small Go program, plain files, AGPL</td><td>Spenser Truex</td><td>2026-09-21 19:02</td></tr><tr><td><a href="sigil/index.html">sigil</a></td><td>A documentation preprocessor for Common Lisp docs</td><td>Spenser Truex</td><td>2020-03-26 16:25</td></tr><tr><td><a href="sl/index.html">sl</a></td><td>SL: Dependency language for Common Lisp</td><td>Spenser Truex</td><td>2019-09-11 17:08</td></tr><tr><td><a href="slurp/index.html">slurp</a></td><td>Spacemacs layer for slurping, inserting, copying, etc. of buffers (keybind layer).</td><td>Spenser Truex</td><td>2019-07-03 13:42</td></tr><tr><td><a href="stumpwm-init/index.html">stumpwm-init</a></td><td>I use dwm now. Archived.</td><td>Spenser Truex</td><td>2020-03-31 15:46</td></tr><tr><td><a href="subplz-web/index.html">subplz-web</a></td><td></td><td>Spenser Truex</td><td>2026-09-21 19:02</td></tr><tr><td><a href="subread-android/index.html">subread-android</a></td><td>SubRead for Android: times an audiobook against its ebook on the device</td><td>Spenser Truex</td><td>2026-09-21 17:55</td></tr><tr><td><a href="subread-dictionary/index.html">subread-dictionary</a></td><td>Pop-up dictionary for Android that reads Yomitan dictionaries, with local audio</td><td>Spenser Truex</td><td>2026-09-21 20:59</td></tr><tr><td><a href="subread-extension/index.html">subread-extension</a></td><td>Show your own .srt over a YouTube video, in time with it. Chrome and Firefox.</td><td>Spenser Truex</td><td>2026-09-21 03:50</td></tr><tr><td><a href="subread-overlay/index.html">subread-overlay</a></td><td>Shows the lines of an .srt over any Android media player, in time with it. Tap a word to look it up.</td><td>Spenser Truex</td><td>2026-09-21 22:12</td></tr><tr><td><a href="subread.koplugin/index.html">subread.koplugin</a></td><td>KOReader plugin: the book follows the narration of an audiobook, from an .srt made by subread.space</td><td>Spenser Truex</td><td>2026-09-21 16:49</td></tr><tr><td><a href="subread.space/index.html">subread.space</a></td><td>read subs in space</td><td>Spenser Truex</td><td>2026-05-07 08:11</td></tr><tr><td><a href="tag-gen/index.html">tag-gen</a></td><td>Generate tags for each directory and say what programming languages to look for</td><td>Spenser Truex</td><td>2025-09-05 00:09</td></tr><tr><td><a href="timeclock/index.html">timeclock</a></td><td>Spacemacs layer for tracking your time.</td><td>Spenser Truex</td><td>2020-07-24 20:46</td></tr><tr><td><a href="tiny-runlevels/index.html">tiny-runlevels</a></td><td>Using an init system for many instances of simple programs . https://therealtruex.com/posts/Using-an-init-system-for-many-instances-of-simple-programs</td><td>Spenser Truex</td><td>2025-09-07 12:16</td></tr><tr><td><a href="tmpl/index.html">tmpl</a></td><td>Insanely simple templates </td><td>Spenser Truex</td><td>2025-09-12 07:59</td></tr><tr><td><a href="tnot/index.html">tnot</a></td><td>like tmux but not</td><td>Spenser Truex</td><td>2025-09-01 22:53</td></tr><tr><td><a href="vibeslop-dickt/index.html">vibeslop-dickt</a></td><td>make your own vibeslop dickt in just a few minutes</td><td>Spenser Truex</td><td>2026-05-22 00:48</td></tr><tr><td><a href="xinput-persistence/index.html">xinput-persistence</a></td><td>xinput for mouse or keyboard configurations that work when disconnected or on boot.</td><td>Spenser Truex</td><td>2019-07-02 01:52</td></tr></tbody></table>
 </div></body></html>
diff --git a/git/minimak-tty-xkb/commit/008b3165de9dfeb8e6dc642c6f6f53c73ee4a994.html b/git/minimak-tty-xkb/commit/008b3165de9dfeb8e6dc642c6f6f53c73ee4a994.html
new file mode 100644
index 0000000..ab11964
--- /dev/null
+++ b/git/minimak-tty-xkb/commit/008b3165de9dfeb8e6dc642c6f6f53c73ee4a994.html
@@ -0,0 +1,81 @@
+<!DOCTYPE html>
+<html lang="en"><head><meta charset="UTF-8" />
+<meta name="viewport" content="width=device-width, initial-scale=1" />
+<title>minimak-tty-xkb 008b3165 - Recently Written</title>
+<link rel="stylesheet" href="../../stagit.css" />
+</head><body>
+<div id="top"><a href="../../../index.html">Recently Written</a> &middot; <a href="../../index.html">git</a></div>
+<h1>minimak-tty-xkb</h1><span class="desc">&quot;Check out my awesome website dude.&quot;</span><p class="url">git clone https://github.com/equwal/minimak-tty-xkb</p><p><a href="../../minimak-tty-xkb/index.html">Log</a> | <a href="../../minimak-tty-xkb/files.html">Files</a> | <a href="../../minimak-tty-xkb/refs.html">Refs</a></p><hr/>
+<div id="content">
+<pre>commit 008b3165de9dfeb8e6dc642c6f6f53c73ee4a994
+Spenser Truex &lt;truex@equwal.com&gt;
+2021-01-15 17:23:55 -0800
+
+Improve readme: plaintext only (no md)
+
+```sh
+...
+```
+is ugly.
+
+Also, that table will cause dyslexia.
+
+</pre><pre> README | 41 ++++++++++++++++++-----------------------
+ 1 file changed, 18 insertions(+), 23 deletions(-)
+</pre><pre>diff --git a/README b/README
+index 4695f83..197b54c 100644
+--- a/README
++++ b/README
+<span class="h">@@ -4,33 +4,28 @@ See minimak.org for details.</span>
+ 
+ TTYs (with .map files) and graphical X keymaps (with .xkb) are supported.
+ 
+<span class="d">-```sh</span>
+<span class="d">-# In a TTY</span>
+<span class="d">-$ sudo loadkeys minimak12.map</span>
+<span class="d">-# In an X session</span>
+<span class="d">-$ xkbcomp minimak12.xkb $DISPLAY</span>
+<span class="d">-```</span>
+<span class="a">+    # In a TTY</span>
+<span class="a">+    $ sudo loadkeys minimak12.map</span>
+<span class="a">+    # In an X session</span>
+<span class="a">+    $ xkbcomp minimak12.xkb $DISPLAY</span>
+<span class="a">+</span>
+ Also a good idea to put these commands in /etc/profile and ~/.xinitrc
+ for setting at startup.
+ 
+ Some extra layouts set Caps Lock to ESC, swap [] with (), rctrl as a &quot;compose key&quot;, and flip punctuation and numbers.
+ 
+<span class="d">-</span>
+<span class="d">-These are the supported layouts as of v1.0, feel free to submit truex ate equwal doot com.</span>
+<span class="d">-</span>
+<span class="d">-XKB layouts:                | 4 | 8 | 12|</span>
+<span class="d">-default                     | v | v | v |</span>
+<span class="d">-paren-swap                  | v | v | v |</span>
+<span class="d">-flipping                    | x | x | x |</span>
+<span class="d">-paren-swap&amp;flip             | v | v | v |</span>
+<span class="d">-paren-swap&amp;flip&amp;esc         | x | x | x |</span>
+<span class="d">-paren-swap&amp;flip&amp;esc&amp;compose | x | x | v |</span>
+<span class="d">-</span>
+<span class="d">-map layouts:        | 4 | 8 | 12|</span>
+<span class="d">-default             | v | v | v |</span>
+<span class="d">-paren-swap          | x | x | x |</span>
+<span class="d">-flipping            | x | x | x |</span>
+<span class="d">-paren-swap&amp;flip     | x | x | v |</span>
+<span class="d">-paren-swap&amp;flip&amp;esc | x | x | v |</span>
+<span class="a">+These are the supported layouts as of v1.0, feel free to submit &lt;truex@equwal.com&gt;.</span>
+<span class="a">+                            +-----------+-----------+</span>
+<span class="a">+Keymap format (X11, TTY)    |XKB layouts|Map layouts|</span>
+<span class="a">+                            +-----------+-----------+</span>
+<span class="a">+Characters swapped          | 4 | 8 | 12| 4 | 8 | 12|</span>
+<span class="a">+                            +-----------+-----------+</span>
+<span class="a">+default                     | y | y | y | y | y | y |</span>
+<span class="a">+paren-swap                  | y | y | y | n | n | n |</span>
+<span class="a">+flipping                    | n | n | n | n | n | n |</span>
+<span class="a">+paren-swap&amp;flip             | y | y | y | n | n | y |</span>
+<span class="a">+paren-swap&amp;flip&amp;esc         | n | n | n | n | n | y |</span>
+<span class="a">+paren-swap&amp;flip&amp;esc&amp;compose | n | n | y | n | n | n |</span>
+<span class="a">+                            +-----------+-----------+</span>
+ 
+ Also have a cyrillic set of layouts which keep plain Minimak 4, 8, and 12 phonetically.</pre>
+</div></body></html>
diff --git a/git/minimak-tty-xkb/file/README.html b/git/minimak-tty-xkb/file/README.html
index f263016..525d619 100644
--- a/git/minimak-tty-xkb/file/README.html
+++ b/git/minimak-tty-xkb/file/README.html
@@ -7,40 +7,35 @@
 <div id="top"><a href="../../../index.html">Recently Written</a> &middot; <a href="../../index.html">git</a></div>
 <h1>minimak-tty-xkb</h1><span class="desc">&quot;Check out my awesome website dude.&quot;</span><p class="url">git clone https://github.com/equwal/minimak-tty-xkb</p><p><a href="../../minimak-tty-xkb/index.html">Log</a> | <a href="../../minimak-tty-xkb/files.html">Files</a> | <a href="../../minimak-tty-xkb/refs.html">Refs</a></p><hr/>
 <div id="content">
-<p>README (1153 bytes)</p><pre class="src"><a id="l1" href="#l1">1</a> Keyboard layouts for Minimak 4, 8 and 12 on Linux
+<p>README (1300 bytes)</p><pre class="src"><a id="l1" href="#l1">1</a> Keyboard layouts for Minimak 4, 8 and 12 on Linux
 <a id="l2" href="#l2">2</a> 
 <a id="l3" href="#l3">3</a> See minimak.org for details.
 <a id="l4" href="#l4">4</a> 
 <a id="l5" href="#l5">5</a> TTYs (with .map files) and graphical X keymaps (with .xkb) are supported.
 <a id="l6" href="#l6">6</a> 
-<a id="l7" href="#l7">7</a> ```sh
-<a id="l8" href="#l8">8</a> # In a TTY
-<a id="l9" href="#l9">9</a> $ sudo loadkeys minimak12.map
-<a id="l10" href="#l10">10</a> # In an X session
-<a id="l11" href="#l11">11</a> $ xkbcomp minimak12.xkb $DISPLAY
-<a id="l12" href="#l12">12</a> ```
-<a id="l13" href="#l13">13</a> Also a good idea to put these commands in /etc/profile and ~/.xinitrc
-<a id="l14" href="#l14">14</a> for setting at startup.
-<a id="l15" href="#l15">15</a> 
-<a id="l16" href="#l16">16</a> Some extra layouts set Caps Lock to ESC, swap [] with (), rctrl as a &quot;compose key&quot;, and flip punctuation and numbers.
-<a id="l17" href="#l17">17</a> 
-<a id="l18" href="#l18">18</a> 
-<a id="l19" href="#l19">19</a> These are the supported layouts as of v1.0, feel free to submit truex ate equwal doot com.
-<a id="l20" href="#l20">20</a> 
-<a id="l21" href="#l21">21</a> XKB layouts:                | 4 | 8 | 12|
-<a id="l22" href="#l22">22</a> default                     | v | v | v |
-<a id="l23" href="#l23">23</a> paren-swap                  | v | v | v |
-<a id="l24" href="#l24">24</a> flipping                    | x | x | x |
-<a id="l25" href="#l25">25</a> paren-swap&amp;flip             | v | v | v |
-<a id="l26" href="#l26">26</a> paren-swap&amp;flip&amp;esc         | x | x | x |
-<a id="l27" href="#l27">27</a> paren-swap&amp;flip&amp;esc&amp;compose | x | x | v |
-<a id="l28" href="#l28">28</a> 
-<a id="l29" href="#l29">29</a> map layouts:        | 4 | 8 | 12|
-<a id="l30" href="#l30">30</a> default             | v | v | v |
-<a id="l31" href="#l31">31</a> paren-swap          | x | x | x |
-<a id="l32" href="#l32">32</a> flipping            | x | x | x |
-<a id="l33" href="#l33">33</a> paren-swap&amp;flip     | x | x | v |
-<a id="l34" href="#l34">34</a> paren-swap&amp;flip&amp;esc | x | x | v |
-<a id="l35" href="#l35">35</a> 
-<a id="l36" href="#l36">36</a> Also have a cyrillic set of layouts which keep plain Minimak 4, 8, and 12 phonetically.</pre>
+<a id="l7" href="#l7">7</a>     # In a TTY
+<a id="l8" href="#l8">8</a>     $ sudo loadkeys minimak12.map
+<a id="l9" href="#l9">9</a>     # In an X session
+<a id="l10" href="#l10">10</a>     $ xkbcomp minimak12.xkb $DISPLAY
+<a id="l11" href="#l11">11</a> 
+<a id="l12" href="#l12">12</a> Also a good idea to put these commands in /etc/profile and ~/.xinitrc
+<a id="l13" href="#l13">13</a> for setting at startup.
+<a id="l14" href="#l14">14</a> 
+<a id="l15" href="#l15">15</a> Some extra layouts set Caps Lock to ESC, swap [] with (), rctrl as a &quot;compose key&quot;, and flip punctuation and numbers.
+<a id="l16" href="#l16">16</a> 
+<a id="l17" href="#l17">17</a> These are the supported layouts as of v1.0, feel free to submit &lt;truex@equwal.com&gt;.
+<a id="l18" href="#l18">18</a>                             +-----------+-----------+
+<a id="l19" href="#l19">19</a> Keymap format (X11, TTY)    |XKB layouts|Map layouts|
+<a id="l20" href="#l20">20</a>                             +-----------+-----------+
+<a id="l21" href="#l21">21</a> Characters swapped          | 4 | 8 | 12| 4 | 8 | 12|
+<a id="l22" href="#l22">22</a>                             +-----------+-----------+
+<a id="l23" href="#l23">23</a> default                     | y | y | y | y | y | y |
+<a id="l24" href="#l24">24</a> paren-swap                  | y | y | y | n | n | n |
+<a id="l25" href="#l25">25</a> flipping                    | n | n | n | n | n | n |
+<a id="l26" href="#l26">26</a> paren-swap&amp;flip             | y | y | y | n | n | y |
+<a id="l27" href="#l27">27</a> paren-swap&amp;flip&amp;esc         | n | n | n | n | n | y |
+<a id="l28" href="#l28">28</a> paren-swap&amp;flip&amp;esc&amp;compose | n | n | y | n | n | n |
+<a id="l29" href="#l29">29</a>                             +-----------+-----------+
+<a id="l30" href="#l30">30</a> 
+<a id="l31" href="#l31">31</a> Also have a cyrillic set of layouts which keep plain Minimak 4, 8, and 12 phonetically.</pre>
 </div></body></html>
diff --git a/git/minimak-tty-xkb/files.html b/git/minimak-tty-xkb/files.html
index ed1f746..07f2a67 100644
--- a/git/minimak-tty-xkb/files.html
+++ b/git/minimak-tty-xkb/files.html
@@ -7,5 +7,5 @@
 <div id="top"><a href="../../index.html">Recently Written</a> &middot; <a href="../index.html">git</a></div>
 <h1>minimak-tty-xkb</h1><span class="desc">&quot;Check out my awesome website dude.&quot;</span><p class="url">git clone https://github.com/equwal/minimak-tty-xkb</p><p><a href="../minimak-tty-xkb/index.html">Log</a> | <a href="../minimak-tty-xkb/files.html">Files</a> | <a href="../minimak-tty-xkb/refs.html">Refs</a></p><hr/>
 <div id="content">
-<table><thead><tr><td>Mode</td><td>Name</td><td>Size</td></tr></thead><tbody><tr><td>100644</td><td><a href="file/.gitignore.html">.gitignore</a></td><td class="num">12</td></tr><tr><td>100644</td><td><a href="file/README.html">README</a></td><td class="num">1153</td></tr><tr><td>100644</td><td><a href="file/ru-xkb/ru-phon-minimak12.xkb.html">ru-xkb/ru-phon-minimak12.xkb</a></td><td class="num">4576</td></tr><tr><td>100644</td><td><a href="file/ru-xkb/ru-phon-minimak4.xkb.html">ru-xkb/ru-phon-minimak4.xkb</a></td><td class="num">4576</td></tr><tr><td>100644</td><td><a href="file/ru-xkb/ru-phon-minimak8.xkb.html">ru-xkb/ru-phon-minimak8.xkb</a></td><td class="num">4576</td></tr><tr><td>100644</td><td><a href="file/ru-xkb/ru-phon.xkb.html">ru-xkb/ru-phon.xkb</a></td><td class="num">4588</td></tr><tr><td>100644</td><td><a href="file/us-minimak12-paren-swap-flipping-esc.map.html">us-minimak12-paren-swap-flipping-esc.map</a></td><td class="num">3405</td></tr><tr><td>100644</td><td><a href="file/us-minimak12-paren-swap-flipping-rctrl-compose-esc-caps.xkb.html">us-minimak12-paren-swap-flipping-rctrl-compose-esc-caps.xkb</a></td><td class="num">62434</td></tr><tr><td>100644</td><td><a href="file/us-minimak12-paren-swap-flipping.map.html">us-minimak12-paren-swap-flipping.map</a></td><td class="num">3402</td></tr><tr><td>100644</td><td><a href="file/us-minimak12-paren-swap-flipping.xkb.html">us-minimak12-paren-swap-flipping.xkb</a></td><td class="num">62736</td></tr><tr><td>100644</td><td><a href="file/us-minimak12-paren-swap.xkb.html">us-minimak12-paren-swap.xkb</a></td><td class="num">62736</td></tr><tr><td>100644</td><td><a href="file/us-minimak12.map.html">us-minimak12.map</a></td><td class="num">3423</td></tr><tr><td>100644</td><td><a href="file/us-minimak12.xkb.html">us-minimak12.xkb</a></td><td class="num">62740</td></tr><tr><td>100644</td><td><a href="file/us-minimak4-paren-swap-flipping.xkb.html">us-minimak4-paren-swap-flipping.xkb</a></td><td class="num">62736</td></tr><tr><td>100644</td><td><a href="file/us-minimak4-paren-swap.xkb.html">us-minimak4-paren-swap.xkb</a></td><td class="num">62736</td></tr><tr><td>100644</td><td><a href="file/us-minimak4.map.html">us-minimak4.map</a></td><td class="num">2508</td></tr><tr><td>100644</td><td><a href="file/us-minimak4.xkb.html">us-minimak4.xkb</a></td><td class="num">62740</td></tr><tr><td>100644</td><td><a href="file/us-minimak8-paren-swap-flipping.xkb.html">us-minimak8-paren-swap-flipping.xkb</a></td><td class="num">62736</td></tr><tr><td>100644</td><td><a href="file/us-minimak8-paren-swap.xkb.html">us-minimak8-paren-swap.xkb</a></td><td class="num">62736</td></tr><tr><td>100644</td><td><a href="file/us-minimak8.map.html">us-minimak8.map</a></td><td class="num">3011</td></tr><tr><td>100644</td><td><a href="file/us-minimak8.xkb.html">us-minimak8.xkb</a></td><td class="num">62740</td></tr></tbody></table>
+<table><thead><tr><td>Mode</td><td>Name</td><td>Size</td></tr></thead><tbody><tr><td>100644</td><td><a href="file/.gitignore.html">.gitignore</a></td><td class="num">12</td></tr><tr><td>100644</td><td><a href="file/README.html">README</a></td><td class="num">1300</td></tr><tr><td>100644</td><td><a href="file/ru-xkb/ru-phon-minimak12.xkb.html">ru-xkb/ru-phon-minimak12.xkb</a></td><td class="num">4576</td></tr><tr><td>100644</td><td><a href="file/ru-xkb/ru-phon-minimak4.xkb.html">ru-xkb/ru-phon-minimak4.xkb</a></td><td class="num">4576</td></tr><tr><td>100644</td><td><a href="file/ru-xkb/ru-phon-minimak8.xkb.html">ru-xkb/ru-phon-minimak8.xkb</a></td><td class="num">4576</td></tr><tr><td>100644</td><td><a href="file/ru-xkb/ru-phon.xkb.html">ru-xkb/ru-phon.xkb</a></td><td class="num">4588</td></tr><tr><td>100644</td><td><a href="file/us-minimak12-paren-swap-flipping-esc.map.html">us-minimak12-paren-swap-flipping-esc.map</a></td><td class="num">3405</td></tr><tr><td>100644</td><td><a href="file/us-minimak12-paren-swap-flipping-rctrl-compose-esc-caps.xkb.html">us-minimak12-paren-swap-flipping-rctrl-compose-esc-caps.xkb</a></td><td class="num">62434</td></tr><tr><td>100644</td><td><a href="file/us-minimak12-paren-swap-flipping.map.html">us-minimak12-paren-swap-flipping.map</a></td><td class="num">3402</td></tr><tr><td>100644</td><td><a href="file/us-minimak12-paren-swap-flipping.xkb.html">us-minimak12-paren-swap-flipping.xkb</a></td><td class="num">62736</td></tr><tr><td>100644</td><td><a href="file/us-minimak12-paren-swap.xkb.html">us-minimak12-paren-swap.xkb</a></td><td class="num">62736</td></tr><tr><td>100644</td><td><a href="file/us-minimak12.map.html">us-minimak12.map</a></td><td class="num">3423</td></tr><tr><td>100644</td><td><a href="file/us-minimak12.xkb.html">us-minimak12.xkb</a></td><td class="num">62740</td></tr><tr><td>100644</td><td><a href="file/us-minimak4-paren-swap-flipping.xkb.html">us-minimak4-paren-swap-flipping.xkb</a></td><td class="num">62736</td></tr><tr><td>100644</td><td><a href="file/us-minimak4-paren-swap.xkb.html">us-minimak4-paren-swap.xkb</a></td><td class="num">62736</td></tr><tr><td>100644</td><td><a href="file/us-minimak4.map.html">us-minimak4.map</a></td><td class="num">2508</td></tr><tr><td>100644</td><td><a href="file/us-minimak4.xkb.html">us-minimak4.xkb</a></td><td class="num">62740</td></tr><tr><td>100644</td><td><a href="file/us-minimak8-paren-swap-flipping.xkb.html">us-minimak8-paren-swap-flipping.xkb</a></td><td class="num">62736</td></tr><tr><td>100644</td><td><a href="file/us-minimak8-paren-swap.xkb.html">us-minimak8-paren-swap.xkb</a></td><td class="num">62736</td></tr><tr><td>100644</td><td><a href="file/us-minimak8.map.html">us-minimak8.map</a></td><td class="num">3011</td></tr><tr><td>100644</td><td><a href="file/us-minimak8.xkb.html">us-minimak8.xkb</a></td><td class="num">62740</td></tr></tbody></table>
 </div></body></html>
diff --git a/git/minimak-tty-xkb/index.html b/git/minimak-tty-xkb/index.html
index d20ea4c..2be1c50 100644
--- a/git/minimak-tty-xkb/index.html
+++ b/git/minimak-tty-xkb/index.html
@@ -7,5 +7,5 @@
 <div id="top"><a href="../../index.html">Recently Written</a> &middot; <a href="../index.html">git</a></div>
 <h1>minimak-tty-xkb</h1><span class="desc">&quot;Check out my awesome website dude.&quot;</span><p class="url">git clone https://github.com/equwal/minimak-tty-xkb</p><p><a href="../minimak-tty-xkb/index.html">Log</a> | <a href="../minimak-tty-xkb/files.html">Files</a> | <a href="../minimak-tty-xkb/refs.html">Refs</a></p><hr/>
 <div id="content">
-<table><thead><tr><td>Date</td><td>Commit message</td><td>Author</td></tr></thead><tbody><tr><td>2021-01-06 14:48</td><td><a href="commit/3726312f428aa4dee73579cb57c39ede0f13ab34.html">Initial commit: lots of minimak layouts.</a></td><td>Spenser Truex</td></tr></tbody></table>
+<table><thead><tr><td>Date</td><td>Commit message</td><td>Author</td></tr></thead><tbody><tr><td>2021-01-15 17:23</td><td><a href="commit/008b3165de9dfeb8e6dc642c6f6f53c73ee4a994.html">Improve readme: plaintext only (no md)</a></td><td>Spenser Truex</td></tr><tr><td>2021-01-06 14:48</td><td><a href="commit/3726312f428aa4dee73579cb57c39ede0f13ab34.html">Initial commit: lots of minimak layouts.</a></td><td>Spenser Truex</td></tr></tbody></table>
 </div></body></html>
diff --git a/git/minimak-tty-xkb/refs.html b/git/minimak-tty-xkb/refs.html
index 6d16aea..d86e562 100644
--- a/git/minimak-tty-xkb/refs.html
+++ b/git/minimak-tty-xkb/refs.html
@@ -7,5 +7,5 @@
 <div id="top"><a href="../../index.html">Recently Written</a> &middot; <a href="../index.html">git</a></div>
 <h1>minimak-tty-xkb</h1><span class="desc">&quot;Check out my awesome website dude.&quot;</span><p class="url">git clone https://github.com/equwal/minimak-tty-xkb</p><p><a href="../minimak-tty-xkb/index.html">Log</a> | <a href="../minimak-tty-xkb/files.html">Files</a> | <a href="../minimak-tty-xkb/refs.html">Refs</a></p><hr/>
 <div id="content">
-<table><thead><tr><td>Name</td><td>Type</td><td>Date</td><td>Commit</td></tr></thead><tbody><tr><td>master</td><td>commit</td><td>2021-01-06</td><td>3726312</td></tr></tbody></table>
+<table><thead><tr><td>Name</td><td>Type</td><td>Date</td><td>Commit</td></tr></thead><tbody><tr><td>master</td><td>commit</td><td>2021-01-15</td><td>008b316</td></tr></tbody></table>
 </div></body></html>