]> git.eshelyaron.com Git - esy-publish.git/commitdiff
New post
authorEshel Yaron <me@eshelyaron.com>
Sat, 1 Apr 2023 14:03:28 +0000 (17:03 +0300)
committerEshel Yaron <me@eshelyaron.com>
Sat, 1 Apr 2023 14:03:28 +0000 (17:03 +0300)
26 files changed:
.gitignore
Makefile
assets/favicon.ico [new file with mode: 0644]
assets/home.svg [new file with mode: 0644]
assets/mail.svg [new file with mode: 0644]
assets/mastodon.svg [new file with mode: 0644]
assets/rss.svg [new file with mode: 0644]
assets/style.css [new file with mode: 0644]
assets/style.css~ [new file with mode: 0644]
dotfiles
org/favicon.ico [deleted file]
org/html_postamble.html [deleted file]
org/index.org
org/modus-operandi-theme.css [deleted file]
org/posts/2023-03-27-foo.org [new file with mode: 0644]
org/posts/2023-03-31-bar.org [new file with mode: 0644]
org/posts/2023-04-01-a-post-about-nothing.org [new file with mode: 0644]
org/posts/2023-04-01-take-on-recursion.org [new file with mode: 0644]
org/posts/index.org [new file with mode: 0644]
org/sitemap.org [new file with mode: 0644]
org/style.css [deleted file]
org/sweep.org [new symlink]
org/theindex.inc [new file with mode: 0644]
org/theindex.org [new file with mode: 0644]
publish.el
sweep

index 302bd862d72b6dab841a7ca72cff5b943ce70107..e8587e3edaff6fec19003bbe6b143cb538f8dfc6 100644 (file)
@@ -2,3 +2,5 @@
 /org/index.html
 /org/index.pdf
 /org/index.tex
+/out/
+*~
index 9976be3fbc2b66a63612bbf99ead6ee756635bac..f7dd4c0a6456d154946d6ef65273d27fee603eae 100644 (file)
--- a/Makefile
+++ b/Makefile
@@ -1,10 +1,16 @@
-.PHONY: update local remote
+.PHONY: update local remote new
+
+new: sweep
+       emacs -Q --batch -l publish.el -f esy/publish
+
+sweep:
+       git submodule update --remote -- sweep
 
 update:
        git submodule update --remote -- dotfiles
        git submodule update --remote -- sweep
 
-local: update
+local:
        emacs -Q --batch -l publish.el --eval '(org-publish "eshelyaron.local" t)'
 
 remote: update
diff --git a/assets/favicon.ico b/assets/favicon.ico
new file mode 100644 (file)
index 0000000..f744115
Binary files /dev/null and b/assets/favicon.ico differ
diff --git a/assets/home.svg b/assets/home.svg
new file mode 100644 (file)
index 0000000..222fdec
--- /dev/null
@@ -0,0 +1,25 @@
+<svg width="400" height="400" xmlns="http://www.w3.org/2000/svg" data-background-color="#111111" preserveAspectRatio="xMidYMid meet">
+ <g>
+  <title>Layer 1</title>
+  <rect width="400" height="400" x="0.00002" y="0" fill="#111111" data-fill-palette-color="background" id="background"/>
+  <g id="tight-bounds" transform="matrix(1.42967, 0, 0, 1.43769, 244.049, 9.88795)">
+   <svg viewBox="0 0 154.0987012987013 247.2" height="247.2" width="154.0987" id="svg_1" x="-110.21414" y="7.95458">
+    <svg viewBox="0 0 154.0987012987013 247.2" height="247.2" width="154.0987" id="svg_10">
+     <svg viewBox="0 0 154.0987012987013 247.2" height="247.2" width="154.0987" id="svg_18">
+      <svg viewBox="0 0 154.0987012987013 247.2" height="247.2" width="154.0987" id="svg_26">
+       <svg viewBox="0 0 154.0987012987013 247.2" height="247.2" width="154.0987" id="svg_32">
+        <svg width="154.0987" viewBox="2.049999952316284 -37.599998474121094 24 38.5" height="247.2" data-palette-color="#cfdfd5" id="svg_37">
+         <g class="undefined-text-0" data-fill-palette-color="primary" id="svg_38">
+          <path d="m24.8,-9l1.25,0.5q-0.55,2.25 -1.75,4q-1.2,1.75 -2.9,2.95q-1.7,1.2 -3.75,1.83q-2.05,0.62 -4.3,0.62l0,0q-2.85,0 -4.95,-0.93q-2.1,-0.92 -3.52,-2.47q-1.43,-1.55 -2.13,-3.55q-0.7,-2 -0.7,-4.15l0,0q0,-1.65 0.43,-3.35q0.42,-1.7 1.27,-3.18q0.85,-1.47 2.13,-2.57q1.27,-1.1 2.97,-1.55l0,0q-2.4,-1.5 -3.47,-3.45q-1.08,-1.95 -1.08,-4.1l0,0q0,-1.7 0.65,-3.38q0.65,-1.67 1.93,-2.95q1.27,-1.27 3.15,-2.07q1.87,-0.8 4.27,-0.8l0,0q1.45,0 2.75,0.33q1.3,0.32 2.3,1.07q1,0.75 1.6,1.93q0.6,1.17 0.6,2.87l0,0q0,1.75 -0.65,3.05q-0.65,1.3 -1.95,1.3l0,0q-0.55,0 -1.2,-0.28q-0.65,-0.27 -1.35,-0.97l0,0q0.7,-0.25 1.13,-1.28q0.42,-1.02 0.42,-2.07l0,0q0,-0.95 -0.32,-1.55q-0.33,-0.6 -0.83,-0.93q-0.5,-0.32 -1.05,-0.42q-0.55,-0.1 -1,-0.1l0,0q-1.1,0 -1.9,0.45q-0.8,0.45 -1.3,1.2q-0.5,0.75 -0.75,1.75q-0.25,1 -0.25,2.05l0,0q0,1.4 0.4,2.7q0.4,1.3 1.23,2.4q0.82,1.1 2.07,1.92q1.25,0.83 2.95,1.28l0,0q-1.6,0.4 -2.85,1.42q-1.25,1.03 -2.07,2.45q-0.83,1.43 -1.25,3.08q-0.43,1.65 -0.43,3.2l0,0q0,1.35 0.35,2.6q0.35,1.25 1.08,2.17q0.72,0.93 1.85,1.5q1.12,0.58 2.72,0.58l0,0q1.2,0 2.5,-0.35q1.3,-0.35 2.43,-1q1.12,-0.65 2,-1.6q0.87,-0.95 1.27,-2.15l0,0z" fill="#cfdfd5" data-fill-palette-color="primary" id="svg_39"/>
+         </g>
+        </svg>
+       </svg>
+      </svg>
+     </svg>
+    </svg>
+   </svg>
+   <rect width="154.0987" height="247.2" fill="none" visibility="hidden" id="svg_23" y="7.95458" x="-110.21414"/>
+  </g>
+ </g>
+
+</svg>
\ No newline at end of file
diff --git a/assets/mail.svg b/assets/mail.svg
new file mode 100644 (file)
index 0000000..5752d47
--- /dev/null
@@ -0,0 +1 @@
+<svg viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg"><g id="SVGRepo_bgCarrier" stroke-width="0"></g><g id="SVGRepo_tracerCarrier" stroke-linecap="round" stroke-linejoin="round"></g><g id="SVGRepo_iconCarrier"> <path d="M3 8C3 7.06812 3 6.60218 3.15224 6.23463C3.35523 5.74458 3.74458 5.35523 4.23463 5.15224C4.60218 5 5.06812 5 6 5V5H18V5C18.9319 5 19.3978 5 19.7654 5.15224C20.2554 5.35523 20.6448 5.74458 20.8478 6.23463C21 6.60218 21 7.06812 21 8V16C21 16.9319 21 17.3978 20.8478 17.7654C20.6448 18.2554 20.2554 18.6448 19.7654 18.8478C19.3978 19 18.9319 19 18 19V19H6V19C5.06812 19 4.60218 19 4.23463 18.8478C3.74458 18.6448 3.35523 18.2554 3.15224 17.7654C3 17.3978 3 16.9319 3 16V8Z" stroke="#cfdfd5" stroke-width="2" stroke-linejoin="round"></path> <path d="M4 6L10.683 11.8476C11.437 12.5074 12.563 12.5074 13.317 11.8476L20 6" stroke="#cfdfd5" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"></path> </g></svg>
\ No newline at end of file
diff --git a/assets/mastodon.svg b/assets/mastodon.svg
new file mode 100644 (file)
index 0000000..350c222
--- /dev/null
@@ -0,0 +1 @@
+<svg fill="#000000" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg" xml:space="preserve"><g id="SVGRepo_bgCarrier" stroke-width="0"></g><g id="SVGRepo_tracerCarrier" stroke-linecap="round" stroke-linejoin="round" stroke="#CCCCCC" stroke-width="4.8"><path d="M21.327 8.566c0-4.339-2.843-5.61-2.843-5.61-1.433-.658-3.894-.935-6.451-.956h-.063c-2.557.021-5.016.298-6.45.956 0 0-2.843 1.272-2.843 5.61 0 .993-.019 2.181.012 3.441.103 4.243.778 8.425 4.701 9.463 1.809.479 3.362.579 4.612.51 2.268-.126 3.541-.809 3.541-.809l-.075-1.646s-1.621.511-3.441.449c-1.804-.062-3.707-.194-3.999-2.409a4.523 4.523 0 0 1-.04-.621s1.77.433 4.014.536c1.372.063 2.658-.08 3.965-.236 2.506-.299 4.688-1.843 4.962-3.254.434-2.223.398-5.424.398-5.424zm-3.353 5.59h-2.081V9.057c0-1.075-.452-1.62-1.357-1.62-1 0-1.501.647-1.501 1.927v2.791h-2.069V9.364c0-1.28-.501-1.927-1.502-1.927-.905 0-1.357.546-1.357 1.62v5.099H6.026V8.903c0-1.074.273-1.927.823-2.558.566-.631 1.307-.955 2.228-.955 1.065 0 1.872.409 2.405 1.228l.518.869.519-.869c.533-.819 1.34-1.228 2.405-1.228.92 0 1.662.324 2.228.955.549.631.822 1.484.822 2.558v5.253z"></path></g><g id="SVGRepo_iconCarrier"><path d="M21.327 8.566c0-4.339-2.843-5.61-2.843-5.61-1.433-.658-3.894-.935-6.451-.956h-.063c-2.557.021-5.016.298-6.45.956 0 0-2.843 1.272-2.843 5.61 0 .993-.019 2.181.012 3.441.103 4.243.778 8.425 4.701 9.463 1.809.479 3.362.579 4.612.51 2.268-.126 3.541-.809 3.541-.809l-.075-1.646s-1.621.511-3.441.449c-1.804-.062-3.707-.194-3.999-2.409a4.523 4.523 0 0 1-.04-.621s1.77.433 4.014.536c1.372.063 2.658-.08 3.965-.236 2.506-.299 4.688-1.843 4.962-3.254.434-2.223.398-5.424.398-5.424zm-3.353 5.59h-2.081V9.057c0-1.075-.452-1.62-1.357-1.62-1 0-1.501.647-1.501 1.927v2.791h-2.069V9.364c0-1.28-.501-1.927-1.502-1.927-.905 0-1.357.546-1.357 1.62v5.099H6.026V8.903c0-1.074.273-1.927.823-2.558.566-.631 1.307-.955 2.228-.955 1.065 0 1.872.409 2.405 1.228l.518.869.519-.869c.533-.819 1.34-1.228 2.405-1.228.92 0 1.662.324 2.228.955.549.631.822 1.484.822 2.558v5.253z"></path></g></svg>
\ No newline at end of file
diff --git a/assets/rss.svg b/assets/rss.svg
new file mode 100644 (file)
index 0000000..3ea2cd9
--- /dev/null
@@ -0,0 +1 @@
+<svg version="1.1" id="Capa_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" viewBox="0 0 455.731 455.731" xml:space="preserve" fill="#000000"><g id="SVGRepo_bgCarrier" stroke-width="0"></g><g id="SVGRepo_tracerCarrier" stroke-linecap="round" stroke-linejoin="round"></g><g id="SVGRepo_iconCarrier"> <g> <rect x="0" y="0" style="fill:#111111;" width="455.731" height="455.731"></rect> <g> <path style="fill:#cfdfd5;" d="M296.208,159.16C234.445,97.397,152.266,63.382,64.81,63.382v64.348 c70.268,0,136.288,27.321,185.898,76.931c49.609,49.61,76.931,115.63,76.931,185.898h64.348 C391.986,303.103,357.971,220.923,296.208,159.16z"></path> <path style="fill:#cfdfd5;" d="M64.143,172.273v64.348c84.881,0,153.938,69.056,153.938,153.939h64.348 C282.429,270.196,184.507,172.273,64.143,172.273z"></path> <circle style="fill:#cfdfd5;" cx="109.833" cy="346.26" r="46.088"></circle> </g> </g> </g></svg>
\ No newline at end of file
diff --git a/assets/style.css b/assets/style.css
new file mode 100644 (file)
index 0000000..253ee29
--- /dev/null
@@ -0,0 +1,226 @@
+body {
+    color: #cfdfd5;
+    background-color: #111111;
+    margin-left: auto;
+    margin-right: auto;
+    width: 90%;
+    max-width: 90ch;
+    /* font-size: 1.1em; */
+    font-family: "Helvetica Neue", sans-serif;
+}
+
+a:link {
+    color: #00c089;
+}
+
+a:visited {
+    color: #5dc0aa;
+}
+
+time {
+    color: #9ac8e0;
+}
+
+.home-link {
+    float: left;
+}
+
+.other-links {
+    float: right;
+}
+
+footer {
+    font-size: smaller;
+    text-align: center;
+}
+
+.icon-links {
+    height: 40px;
+    text-decoration: none;
+}
+
+blockquote {
+    border-left-style: solid;
+    padding-left: 1em;
+}
+
+dt {
+    font-weight: bold;
+}
+
+pre {
+    overflow: auto;
+    border-top-style:    solid;
+    border-top-width:    2px;
+    border-left-style:   solid;
+    border-left-width:   2px;
+    border-right-style:  solid;
+    border-right-width:  1px;
+    border-bottom-style: solid;
+    border-bottom-width: 1px;
+    padding: 0.8em;
+    background-color: #222522;
+}
+
+.footpara {
+    display: inline;
+}
+
+code {
+    color: #78afff;
+    font-family: Hack,monospace;
+}
+
+h2 {
+  color: #7fc500;
+}
+h3 {
+  color: #5dc0aa;
+}
+h4 {
+  color: #af9fff;
+}
+h5 {
+  color: #7fcfdf;
+}
+h6 {
+  color: #cfc04f;
+}
+
+/*
+Generated with `M-x org-html-htmlize-generate-css` after loading the
+`ef-bio` theme by Protesilaos Stavrou.
+*/
+.org-builtin {
+    /* font-lock-builtin-face */
+    color: #3fb83f;
+    font-weight: bold;
+}
+.org-comment {
+    /* font-lock-comment-face */
+    color: #b7a07f;
+    font-style: italic;
+}
+.org-comment-delimiter {
+    /* font-lock-comment-delimiter-face */
+    color: #b7a07f;
+    font-style: italic;
+}
+.org-constant {
+    /* font-lock-constant-face */
+    color: #37aff6;
+}
+.org-doc {
+    /* font-lock-doc-face */
+    color: #7fc07f;
+    font-style: italic;
+}
+.org-doc-markup {
+    /* font-lock-doc-markup-face */
+    color: #37aff6;
+}
+.org-escape {
+    /* font-lock-escape-face */
+    color: #cfc04f;
+}
+.org-function-call {
+    /* font-lock-function-call-face */
+    color: #7fc500;
+}
+.org-function-name {
+    /* font-lock-function-name-face */
+    color: #7fc500;
+}
+.org-preprocessor {
+    /* font-lock-preprocessor-face */
+    color: #3fb83f;
+}
+.org-property-name {
+    /* font-lock-property-name-face */
+    color: #78afff;
+}
+.org-property-use {
+    /* font-lock-property-use-face */
+    color: #78afff;
+}
+.org-rainbow-delimiters-depth-1 {
+    /* rainbow-delimiters-depth-1-face */
+    color: #00c089;
+}
+.org-rainbow-delimiters-depth-2 {
+    /* rainbow-delimiters-depth-2-face */
+    color: #7fc500;
+}
+.org-rainbow-delimiters-depth-3 {
+    /* rainbow-delimiters-depth-3-face */
+    color: #5dc0aa;
+}
+.org-rainbow-delimiters-depth-4 {
+    /* rainbow-delimiters-depth-4-face */
+    color: #af9fff;
+}
+.org-rainbow-delimiters-depth-5 {
+    /* rainbow-delimiters-depth-5-face */
+    color: #7fcfdf;
+}
+.org-rainbow-delimiters-depth-6 {
+    /* rainbow-delimiters-depth-6-face */
+    color: #cfc04f;
+}
+.org-rainbow-delimiters-depth-7 {
+    /* rainbow-delimiters-depth-7-face */
+    color: #37aff6;
+}
+.org-rainbow-delimiters-depth-8 {
+    /* rainbow-delimiters-depth-8-face */
+    color: #6fc5ef;
+}
+.org-rainbow-delimiters-depth-9 {
+    /* rainbow-delimiters-depth-9-face */
+    color: #d38faf;
+}
+.org-rainbow-delimiters-mismatched {
+    /* rainbow-delimiters-mismatched-face */
+    color: #ffffff;
+    background-color: #bd1f30;
+}
+.org-string {
+    /* font-lock-string-face */
+    color: #af9fff;
+}
+.org-type {
+    /* font-lock-type-face */
+    color: #7fcfdf;
+}
+.org-variable-name {
+    /* font-lock-variable-name-face */
+    color: #78afff;
+}
+.org-variable-use {
+    /* font-lock-variable-use-face */
+    color: #78afff;
+}
+.org-warning-1 {
+    /* font-lock-warning-face */
+    color: #cfc04f;
+}
+.org-negation-char {
+  /* font-lock-negation-char-face */
+  font-weight: bold;
+}
+.org-regexp {
+  /* font-lock-regexp-face */
+  color: #af9fff;
+}
+.org-regexp-grouping-backslash {
+  /* font-lock-regexp-grouping-backslash */
+  color: #cfc04f;
+}
+.org-regexp-grouping-construct {
+  /* font-lock-regexp-grouping-construct */
+  color: #3fb83f;
+}
+
+.timestamp {
+    color: #5dc0aa;
+}
diff --git a/assets/style.css~ b/assets/style.css~
new file mode 100644 (file)
index 0000000..d0f5a81
--- /dev/null
@@ -0,0 +1,231 @@
+body {
+    color: #cfdfd5;
+    background-color: #111111;
+    margin-left: auto;
+    margin-right: auto;
+    width: 90%;
+    max-width: 90ch;
+    /* font-size: 1.1em; */
+    font-family: "Helvetica Neue", sans-serif;
+}
+
+a:link {
+    color: #00c089;
+}
+
+a:visited {
+    color: #5dc0aa;
+}
+
+time {
+    color: #9ac8e0;
+}
+
+.home-link {
+    float: left;
+}
+
+.other-links {
+    float: right;
+}
+
+footer {
+    font-size: smaller;
+    text-align: center;
+}
+
+.icon-links {
+    height: 40px;
+    text-decoration: none;
+}
+
+blockquote {
+    border-left-style: solid;
+    padding-left: 1em;
+}
+
+dt {
+    font-weight: bold;
+}
+
+pre {
+    overflow: auto;
+    border-top-style:    solid;
+    border-top-width:    2px;
+    border-left-style:   solid;
+    border-left-width:   2px;
+    border-right-style:  solid;
+    border-right-width:  1px;
+    border-bottom-style: solid;
+    border-bottom-width: 1px;
+    padding: 0.8em;
+    background-color: #222522;
+}
+
+.footpara {
+    display: inline;
+}
+
+code {
+    color: #78afff;
+    font-family: Hack,monospace;
+}
+
+h1 {
+    color: #00c089;
+    font-weight: bold;
+}
+h2 {
+  color: #7fc500;
+  font-weight: bold;
+}
+h3 {
+  color: #5dc0aa;
+  font-weight: bold;
+}
+h4 {
+  color: #af9fff;
+  font-weight: bold;
+}
+h5 {
+  color: #7fcfdf;
+  font-weight: bold;
+}
+h6 {
+  color: #cfc04f;
+  font-weight: bold;
+}
+
+/*
+Generated with `M-x org-html-htmlize-generate-css` after loading the
+`ef-bio` theme by Protesilaos Stavrou.
+*/
+.org-builtin {
+    /* font-lock-builtin-face */
+    color: #3fb83f;
+    font-weight: bold;
+}
+.org-comment {
+    /* font-lock-comment-face */
+    color: #b7a07f;
+    font-style: italic;
+}
+.org-comment-delimiter {
+    /* font-lock-comment-delimiter-face */
+    color: #b7a07f;
+    font-style: italic;
+}
+.org-constant {
+    /* font-lock-constant-face */
+    color: #37aff6;
+}
+.org-doc {
+    /* font-lock-doc-face */
+    color: #7fc07f;
+    font-style: italic;
+}
+.org-doc-markup {
+    /* font-lock-doc-markup-face */
+    color: #37aff6;
+}
+.org-escape {
+    /* font-lock-escape-face */
+    color: #cfc04f;
+}
+.org-function-call {
+    /* font-lock-function-call-face */
+    color: #7fc500;
+}
+.org-function-name {
+    /* font-lock-function-name-face */
+    color: #7fc500;
+}
+.org-preprocessor {
+    /* font-lock-preprocessor-face */
+    color: #3fb83f;
+}
+.org-property-name {
+    /* font-lock-property-name-face */
+    color: #78afff;
+}
+.org-property-use {
+    /* font-lock-property-use-face */
+    color: #78afff;
+}
+.org-rainbow-delimiters-depth-1 {
+    /* rainbow-delimiters-depth-1-face */
+    color: #00c089;
+}
+.org-rainbow-delimiters-depth-2 {
+    /* rainbow-delimiters-depth-2-face */
+    color: #7fc500;
+}
+.org-rainbow-delimiters-depth-3 {
+    /* rainbow-delimiters-depth-3-face */
+    color: #5dc0aa;
+}
+.org-rainbow-delimiters-depth-4 {
+    /* rainbow-delimiters-depth-4-face */
+    color: #af9fff;
+}
+.org-rainbow-delimiters-depth-5 {
+    /* rainbow-delimiters-depth-5-face */
+    color: #7fcfdf;
+}
+.org-rainbow-delimiters-depth-6 {
+    /* rainbow-delimiters-depth-6-face */
+    color: #cfc04f;
+}
+.org-rainbow-delimiters-depth-7 {
+    /* rainbow-delimiters-depth-7-face */
+    color: #37aff6;
+}
+.org-rainbow-delimiters-depth-8 {
+    /* rainbow-delimiters-depth-8-face */
+    color: #6fc5ef;
+}
+.org-rainbow-delimiters-depth-9 {
+    /* rainbow-delimiters-depth-9-face */
+    color: #d38faf;
+}
+.org-rainbow-delimiters-mismatched {
+    /* rainbow-delimiters-mismatched-face */
+    color: #ffffff;
+    background-color: #bd1f30;
+}
+.org-string {
+    /* font-lock-string-face */
+    color: #af9fff;
+}
+.org-type {
+    /* font-lock-type-face */
+    color: #7fcfdf;
+}
+.org-variable-name {
+    /* font-lock-variable-name-face */
+    color: #78afff;
+}
+.org-variable-use {
+    /* font-lock-variable-use-face */
+    color: #78afff;
+}
+.org-warning-1 {
+    /* font-lock-warning-face */
+    color: #cfc04f;
+}
+.org-negation-char {
+  /* font-lock-negation-char-face */
+  font-weight: bold;
+}
+.org-regexp {
+  /* font-lock-regexp-face */
+  color: #af9fff;
+}
+.org-regexp-grouping-backslash {
+  /* font-lock-regexp-grouping-backslash */
+  color: #cfc04f;
+}
+.org-regexp-grouping-construct {
+  /* font-lock-regexp-grouping-construct */
+  color: #3fb83f;
+}
index 9dfe58a7f79a90d8398c745bb6c57fe0df54e909..58ef0679439d4a756235774c5357e97859469911 160000 (submodule)
--- a/dotfiles
+++ b/dotfiles
@@ -1 +1 @@
-Subproject commit 9dfe58a7f79a90d8398c745bb6c57fe0df54e909
+Subproject commit 58ef0679439d4a756235774c5357e97859469911
diff --git a/org/favicon.ico b/org/favicon.ico
deleted file mode 100644 (file)
index 5143802..0000000
Binary files a/org/favicon.ico and /dev/null differ
diff --git a/org/html_postamble.html b/org/html_postamble.html
deleted file mode 100644 (file)
index 5c872a7..0000000
+++ /dev/null
@@ -1,35 +0,0 @@
-<footer>
-  <hr/>
-  <div class="links-container">
-    <div class="links-first">
-      <p>
-        <a href="https://eshelyaron.com">Home</a>
-      </p>
-    </div>
-    <div class="links-second">
-      <p>
-        <a rel="me" href="https://emacs.ch/@eshel">emacs.ch</a>
-      </p>
-    </div>
-    <div class="links-third">
-      <p>
-        <a href="https://sr.ht/~eshel/">sr.ht</a>
-      </p>
-    </div>
-    <div class="links-fourth">
-      <p>
-        <a href="mailto:me@eshelyaron.com">mail</a>
-      </p>
-    </div>
-    <div class="links-fifth">
-      <p>
-        <a href="./pub.html">🔑</a>
-      </p>
-    </div>
-    <div class="links-sixth">
-      <p>
-        <a href="http://adifriedman.com">❤️</a>
-      </p>
-    </div>
-  </div>
-</footer>
index f12d2f333808bb0baad0b03008775e866ce1c3d3..f02c566acee10c8b837edee3b4d02bc0716c56cc 100644 (file)
@@ -18,6 +18,14 @@ Welcome to [[./index.org][my website]], the one true source of reliable curated
   Stuff = 'free software'.
 #+end_src
 
+* Recent Posts
+:PROPERTIES:
+:CUSTOM_ID: recent-posts
+:END:
+#+BEGIN: posts :dir "/Users/eshelyaron/checkouts/eshelyaron.com/org/posts" :limit 5
+#+END:
+
+
 * Projects
 :PROPERTIES:
 :CUSTOM_ID: projects
@@ -28,10 +36,10 @@ Welcome to [[./index.org][my website]], the one true source of reliable curated
 :CUSTOM_ID: sweep
 :END:
 
-[[https://git.sr.ht/~eshel/sweep][sweep]] is an Emacs module which uses the C interfaces of both
+[[https://git.sr.ht/~eshel/sweep][Sweep]] is an Emacs module which uses the C interfaces of both
 SWI-Prolog and Emacs to bring the two together into one address space.
 
-For more details, see [[file:sweep.org][the =sweep= manual]].
+For more details, see [[file:sweep.org][the Sweep manual]].
 
 ** Sourcehut GraphQL client for SWI-Prolog
 :PROPERTIES:
@@ -51,24 +59,6 @@ tag of a git repository from within SWI-Prolog:
      sourcehut_git_upload_artifact(RepoId, "v0.1.2", "/tmp/foo/baz.txt", Artifact, []).
 #+end_src
 
-** [[https://git.sr.ht/~eshel/dotfiles][GNU Emacs literate configuration]]
-:PROPERTIES:
-:CUSTOM_ID: emacsconf
-:END:
-
-My personal configuration for GNU Emacs, written in as a [[https://en.wikipedia.org/wiki/Literate_programming][Literate
-Program]] with =Org-mode= and =Babel=. An online version is also
-published as [[file:esy.org][an HTML webpage on this website]].
-
-** [[https://github.com/eshelyaron/debug_adapter][SWI-Prolog Debug Adapter Protocol Server]]
-:PROPERTIES:
-:CUSTOM_ID: debug-adapter
-:END:
-
-An implementation of the [[https://microsoft.github.io/debug-adapter-protocol/][Debug Adapter Protocol]] (DAP) for [[https://www.swi-prolog.org][SWI-Prolog]],
-facilitating an advanced debugging experience for Prolog from the
-comfort of GNU Emacs (and other editors, as well).
-
 ** [[https://git.sr.ht/~eshel/eshellisp][eshellisp]]
 :PROPERTIES:
 :CUSTOM_ID: eshellisp
diff --git a/org/modus-operandi-theme.css b/org/modus-operandi-theme.css
deleted file mode 100644 (file)
index 0f3ab0a..0000000
+++ /dev/null
@@ -1,2257 +0,0 @@
-/* Modus Operandi CSS Theme
- *
- * Modus Operandi is an accessible Emacs theme created by Protesilaos Stavrou.
- * It is released  under the GNU GPLv3 and its source code can be retrieved
- * from: https://gitlab.com/protesilaos/modus-themes
- *
- * CSS created using the Emacs `org-html-htmlize-generate-css'
- * function with some manual tweaks
- */
-
-.org-bold {
-  /* bold */
-  font-weight: bold;
-}
-.org-bold-italic {
-  /* bold-italic */
-  font-weight: bold;
-  font-style: italic;
-}
-.org-bookmark-menu-bookmark {
-  /* bookmark-menu-bookmark */
-  font-weight: bold;
-}
-.org-bookmark-menu-heading {
-  /* bookmark-menu-heading */
-  color: #8f0075;
-}
-.org-border {
-}
-.org-browse-url-button {
-  /* browse-url-button */
-  color: #0000bb;
-  text-decoration: underline;
-}
-.org-buffer-menu-buffer {
-  /* buffer-menu-buffer */
-  font-weight: bold;
-}
-.org-builtin {
-  /* font-lock-builtin-face */
-  color: #f78fe7;
-}
-.org-button {
-  /* button */
-  color: #0000bb;
-  text-decoration: underline;
-}
-.org-c-annotation {
-  /* c-annotation-face */
-  color: #0000bb;
-}
-.org-c-nonbreakable-space {
-  /* c-nonbreakable-space-face */
-  background-color: #703700;
-}
-.org-calc-nonselected {
-  /* calc-nonselected-face */
-  color: #505050;
-  font-style: italic;
-}
-.org-calc-selected {
-  /* calc-selected-face */
-  font-weight: bold;
-}
-.org-calendar-month-header {
-  /* calendar-month-header */
-  color: #000000;
-  font-weight: bold;
-}
-.org-calendar-today {
-  /* calendar-today */
-  text-decoration: underline;
-}
-.org-calendar-weekday-header {
-  /* calendar-weekday-header */
-  color: #282828;
-}
-.org-calendar-weekend-header {
-  /* calendar-weekend-header */
-  color: #505050;
-}
-.org-clang-include-fixer-highlight {
-  /* clang-include-fixer-highlight */
-  background-color: #00ff00;
-}
-.org-comint-highlight-input {
-  /* comint-highlight-input */
-  font-weight: bold;
-}
-.org-comint-highlight-prompt {
-  /* comint-highlight-prompt */
-  color: #00538b;
-}
-.org-comment {
-  /* font-lock-comment-face */
-  color: #a8a8a8;
-}
-.org-comment-delimiter {
-  /* font-lock-comment-delimiter-face */
-  color: #a8a8a8;
-}
-.org-company-echo {
-}
-.org-company-echo-common {
-  /* company-echo-common */
-  color: #5317ac;
-}
-.org-company-preview {
-  /* company-preview */
-  color: #282828;
-  background-color: #f8f8f8;
-}
-.org-company-preview-common {
-  /* company-preview-common */
-  color: #223fbf;
-}
-.org-company-preview-search {
-  /* company-preview-search */
-  color: #61284f;
-  background-color: #f8ddea;
-}
-.org-company-scrollbar-bg {
-  /* company-scrollbar-bg */
-  background-color: #e0e0e0;
-}
-.org-company-scrollbar-fg {
-  /* company-scrollbar-fg */
-  background-color: #191919;
-}
-.org-company-template-field {
-  /* company-template-field */
-  color: #000000;
-  background-color: #d5baff;
-}
-.org-company-tooltip {
-  /* company-tooltip */
-  color: #505050;
-  background-color: #f0f0f0;
-}
-.org-company-tooltip-annotation {
-  /* company-tooltip-annotation */
-  color: #093060;
-}
-.org-company-tooltip-annotation-selection {
-  /* company-tooltip-annotation-selection */
-  color: #000000;
-  font-weight: bold;
-}
-.org-company-tooltip-common {
-  /* company-tooltip-common */
-  color: #223fbf;
-  font-weight: bold;
-}
-.org-company-tooltip-common-selection {
-  /* company-tooltip-common-selection */
-  color: #000000;
-}
-.org-company-tooltip-mouse {
-  /* company-tooltip-mouse */
-  color: #000000;
-  background-color: #6aaeff;
-}
-.org-compilation-column-number {
-  /* compilation-column-number */
-  color: #5317ac;
-}
-.org-compilation-error {
-  /* compilation-error */
-  color: #a60000;
-}
-.org-compilation-info {
-  /* compilation-info */
-  color: #093060;
-}
-.org-compilation-line-number {
-  /* compilation-line-number */
-  color: #5d3026;
-}
-.org-compilation-mode-line-exit {
-  /* compilation-mode-line-exit */
-  color: #0033c0;
-}
-.org-compilation-mode-line-fail {
-  /* compilation-mode-line-fail */
-  color: #930000;
-}
-.org-compilation-mode-line-run {
-  /* compilation-mode-line-run */
-  color: #6320a0;
-}
-.org-compilation-warning {
-  /* compilation-warning */
-  color: #813e00;
-}
-.org-completions-annotations {
-  /* completions-annotations */
-  color: #093060;
-}
-.org-completions-common-part {
-  /* completions-common-part */
-  color: #005a5f;
-}
-.org-completions-first-difference {
-  /* completions-first-difference */
-  color: #0000bb;
-  font-weight: bold;
-}
-.org-constant {
-  /* font-lock-constant-face */
-  color: #00bcff;
-}
-.org-css-property {
-  /* css-property */
-  color: #5317ac;
-}
-.org-css-selector {
-  /* css-selector */
-  color: #721045;
-}
-.org-cua-global-mark {
-  /* cua-global-mark */
-  color: #000000;
-  background-color: #ffff00;
-}
-.org-cua-rectangle {
-  /* cua-rectangle */
-  color: #ffffff;
-  background-color: #b03060;
-}
-.org-cua-rectangle-noselect {
-  /* cua-rectangle-noselect */
-  color: #ffffff;
-  background-color: #696969;
-}
-.org-cursor {
-  /* cursor */
-  background-color: #000000;
-}
-.org-custom-button {
-  /* custom-button */
-  color: #000000;
-  background-color: #e0e0e0;
-}
-.org-custom-button-mouse {
-  /* custom-button-mouse */
-  color: #191919;
-  background-color: #e0e0e0;
-}
-.org-custom-button-pressed {
-  /* custom-button-pressed */
-  color: #000000;
-  background-color: #e0e0e0;
-}
-.org-custom-button-pressed-unraised {
-  /* custom-button-pressed-unraised */
-  color: #8b008b;
-  text-decoration: underline;
-}
-.org-custom-button-unraised {
-  /* custom-button-unraised */
-  text-decoration: underline;
-}
-.org-custom-changed {
-  /* custom-changed */
-  color: #282828;
-  background-color: #c0efff;
-}
-.org-custom-comment {
-  /* custom-comment */
-  color: #505050;
-}
-.org-custom-comment-tag {
-  /* custom-comment-tag */
-  color: #863927;
-  background-color: #f0f0f0;
-}
-.org-custom-documentation {
-}
-.org-custom-face-tag {
-  /* custom-face-tag */
-  color: #1111ee;
-  font-weight: bold;
-}
-.org-custom-group-subtitle {
-  /* custom-group-subtitle */
-  font-weight: bold;
-}
-.org-custom-group-tag {
-  /* custom-group-tag */
-  color: #006800;
-  font-weight: bold;
-}
-.org-custom-group-tag-1 {
-  /* custom-group-tag-1 */
-  color: #5d3026;
-  background-color: #f0e0d4;
-}
-.org-custom-link {
-  /* custom-link */
-  color: #0000bb;
-  text-decoration: underline;
-}
-.org-custom-modified {
-  /* custom-modified */
-  color: #282828;
-  background-color: #c0efff;
-}
-.org-custom-rogue {
-  /* custom-rogue */
-  color: #770077;
-  background-color: #ffccff;
-}
-.org-custom-saved {
-  /* custom-saved */
-  text-decoration: underline;
-}
-.org-custom-set {
-  /* custom-set */
-  color: #223fbf;
-}
-.org-custom-state {
-  /* custom-state */
-  color: #005a5f;
-}
-.org-custom-themed {
-  /* custom-themed */
-  color: #282828;
-  background-color: #b5d0ff;
-}
-.org-custom-variable-button {
-  /* custom-variable-button */
-  font-weight: bold;
-  text-decoration: underline;
-}
-.org-custom-variable-obsolete {
-  /* custom-variable-obsolete */
-  color: #0000ff;
-}
-.org-custom-variable-tag {
-  /* custom-variable-tag */
-  color: #00538b;
-  font-weight: bold;
-}
-.org-custom-visibility {
-  /* custom-visibility */
-  color: #0000bb;
-  font-size: 80%;
-  text-decoration: underline;
-}
-.org-diary {
-  /* diary */
-  color: #005a5f;
-}
-.org-diff-added {
-  /* diff-added */
-  color: #002c00;
-  background-color: #bbeabb;
-}
-.org-diff-changed {
-  /* diff-changed */
-  color: #392900;
-  background-color: #ecdfbf;
-}
-.org-diff-context {
-  /* diff-context */
-  color: #56576d;
-}
-.org-diff-file-header {
-  /* diff-file-header */
-  color: #0030a6;
-  font-weight: bold;
-}
-.org-diff-function {
-  /* diff-function */
-  color: #093060;
-}
-.org-diff-header {
-  /* diff-header */
-  color: #201f55;
-}
-.org-diff-hunk-header {
-  /* diff-hunk-header */
-  color: #043355;
-  background-color: #b7c2dd;
-}
-.org-diff-index {
-  /* diff-index */
-  color: #223fbf;
-  font-weight: bold;
-}
-.org-diff-indicator-added {
-  /* diff-indicator-added */
-  color: #002c00;
-  background-color: #bbeabb;
-}
-.org-diff-indicator-changed {
-  /* diff-indicator-changed */
-  color: #392900;
-  background-color: #ecdfbf;
-}
-.org-diff-indicator-removed {
-  /* diff-indicator-removed */
-  color: #4a0000;
-  background-color: #efcbcf;
-}
-.org-diff-refine-added {
-  /* diff-refine-added */
-  color: #002a00;
-  background-color: #94cf94;
-}
-.org-diff-refine-changed {
-  /* diff-refine-changed */
-  color: #302010;
-  background-color: #cccf8f;
-}
-.org-diff-refine-removed {
-  /* diff-refine-removed */
-  color: #400000;
-  background-color: #daa2b0;
-}
-.org-diff-removed {
-  /* diff-removed */
-  color: #4a0000;
-  background-color: #efcbcf;
-}
-.org-dired-directory {
-  /* dired-directory */
-  color: #0030a6;
-}
-.org-dired-flagged {
-  /* dired-flagged */
-  color: #840040;
-  background-color: #ffccbb;
-  font-weight: bold;
-}
-.org-dired-header {
-  /* dired-header */
-  color: #000000;
-  font-weight: bold;
-}
-.org-dired-ignored {
-  /* dired-ignored */
-  color: #505050;
-}
-.org-dired-mark {
-  /* dired-mark */
-  color: #223fbf;
-  font-weight: bold;
-}
-.org-dired-marked {
-  /* dired-marked */
-  color: #005040;
-  background-color: #a0f0cf;
-  font-weight: bold;
-}
-.org-dired-perm-write {
-  /* dired-perm-write */
-  color: #5d3026;
-}
-.org-dired-set-id {
-  /* dired-set-id */
-  color: #703700;
-}
-.org-dired-special {
-  /* dired-special */
-  color: #00538b;
-}
-.org-dired-symlink {
-  /* dired-symlink */
-  color: #30517f;
-  text-decoration: underline;
-}
-.org-dired-warning {
-  /* dired-warning */
-  color: #813e00;
-  font-weight: bold;
-}
-.org-doc {
-  /* font-lock-doc-face */
-  color: #b0d6f5;
-}
-.org-eldoc-highlight-function-argument {
-  /* eldoc-highlight-function-argument */
-  color: #0000bb;
-  font-weight: bold;
-}
-.org-epa-field-body {
-  /* epa-field-body */
-  color: #000000;
-}
-.org-epa-field-name {
-  /* epa-field-name */
-  color: #282828;
-  font-weight: bold;
-}
-.org-epa-mark {
-  /* epa-mark */
-  color: #721045;
-  font-weight: bold;
-}
-.org-epa-string {
-  /* epa-string */
-  color: #223fbf;
-}
-.org-epa-validity-disabled {
-  /* epa-validity-disabled */
-  color: #780000;
-  background-color: #ffcccc;
-}
-.org-epa-validity-high {
-  /* epa-validity-high */
-  color: #145c33;
-  font-weight: bold;
-}
-.org-epa-validity-low {
-  /* epa-validity-low */
-  color: #505050;
-}
-.org-epa-validity-medium {
-  /* epa-validity-medium */
-  color: #315b00;
-}
-.org-error {
-  /* error */
-  color: #a60000;
-  font-weight: bold;
-}
-.org-escape-glyph {
-  /* escape-glyph */
-  color: #8b1030;
-}
-.org-eww-form-checkbox {
-  /* eww-form-checkbox */
-  color: #000000;
-  background-color: #efedef;
-}
-.org-eww-form-file {
-  /* eww-form-file */
-  color: #000000;
-  background-color: #e0e0e0;
-}
-.org-eww-form-select {
-  /* eww-form-select */
-  color: #000000;
-  background-color: #efedef;
-}
-.org-eww-form-submit {
-  /* eww-form-submit */
-  color: #000000;
-  background-color: #e0e0e0;
-}
-.org-eww-form-text {
-  /* eww-form-text */
-  color: #191919;
-  background-color: #e0e0e0;
-}
-.org-eww-form-textarea {
-  /* eww-form-textarea */
-  color: #000000;
-  background-color: #f0f0f0;
-}
-.org-eww-invalid-certificate {
-  /* eww-invalid-certificate */
-  color: #930000;
-}
-.org-eww-valid-certificate {
-  /* eww-valid-certificate */
-  color: #005300;
-}
-.org-ffap {
-  /* ffap */
-  color: #282828;
-  background-color: #b5d0ff;
-}
-.org-file-name-shadow {
-  /* file-name-shadow */
-  color: #56576d;
-}
-.org-fill-column-indicator {
-  /* fill-column-indicator */
-  color: #505050;
-}
-.org-fixed-pitch {
-}
-.org-fixed-pitch-serif {
-}
-.org-flymake-error {
-  /* flymake-error */
-  text-decoration: underline;
-}
-.org-flymake-note {
-  /* flymake-note */
-  text-decoration: underline;
-}
-.org-flymake-warning {
-  /* flymake-warning */
-  text-decoration: underline;
-}
-.org-flyspell-duplicate {
-  /* flyspell-duplicate */
-  text-decoration: underline;
-}
-.org-flyspell-incorrect {
-  /* flyspell-incorrect */
-  text-decoration: underline;
-}
-.org-fringe {
-  /* fringe */
-  color: #000000;
-}
-.org-function-name {
-    /* font-lock-function-name-face */
-    color: #f08be0;
-}
-
-.org-elixir-atom {
-    color: #f78fe7;
-}
-
-.org-rainbow-delimiters-depth-2 {
-    color: #ff62d4;
-}
-
-.org-rainbow-delimiters-depth-3 {
-    color: #3fdfd0;
-}
-
-.org-rainbow-delimiters-depth-4 {
-    color: #fba849;
-}
-
-.org-rainbow-delimiters-depth-5 {
-    color: #9f80ff;
-}
-
-.org-rainbow-delimiters-depth-6 {
-    color: #4fe42f;
-}
-
-.org-glyphless-char {
-  /* glyphless-char */
-  font-size: 60%;
-}
-.org-gnus-button {
-  /* gnus-button */
-  color: #0000bb;
-  text-decoration: underline;
-}
-.org-gnus-emphasis-bold {
-  /* gnus-emphasis-bold */
-  font-weight: bold;
-}
-.org-gnus-emphasis-bold-italic {
-  /* gnus-emphasis-bold-italic */
-  font-weight: bold;
-  font-style: italic;
-}
-.org-gnus-emphasis-highlight-words {
-  /* gnus-emphasis-highlight-words */
-  color: #604000;
-  background-color: #fff29a;
-}
-.org-gnus-emphasis-italic {
-  /* gnus-emphasis-italic */
-  font-style: italic;
-}
-.org-gnus-emphasis-strikethru {
-  /* gnus-emphasis-strikethru */
-  text-decoration: line-through;
-}
-.org-gnus-emphasis-underline {
-  /* gnus-emphasis-underline */
-  text-decoration: underline;
-}
-.org-gnus-emphasis-underline-bold {
-  /* gnus-emphasis-underline-bold */
-  font-weight: bold;
-  text-decoration: underline;
-}
-.org-gnus-emphasis-underline-bold-italic {
-  /* gnus-emphasis-underline-bold-italic */
-  font-weight: bold;
-  font-style: italic;
-  text-decoration: underline;
-}
-.org-gnus-emphasis-underline-italic {
-  /* gnus-emphasis-underline-italic */
-  font-style: italic;
-  text-decoration: underline;
-}
-.org-gnus-group-mail-1 {
-  /* gnus-group-mail-1 */
-  color: #8f0075;
-  font-weight: bold;
-}
-.org-gnus-group-mail-1-empty {
-  /* gnus-group-mail-1-empty */
-  color: #8f0075;
-}
-.org-gnus-group-mail-2 {
-  /* gnus-group-mail-2 */
-  color: #721045;
-  font-weight: bold;
-}
-.org-gnus-group-mail-2-empty {
-  /* gnus-group-mail-2-empty */
-  color: #721045;
-}
-.org-gnus-group-mail-3 {
-  /* gnus-group-mail-3 */
-  color: #5317ac;
-  font-weight: bold;
-}
-.org-gnus-group-mail-3-empty {
-  /* gnus-group-mail-3-empty */
-  color: #5317ac;
-}
-.org-gnus-group-mail-low {
-  /* gnus-group-mail-low */
-  color: #541f4f;
-  font-weight: bold;
-}
-.org-gnus-group-mail-low-empty {
-  /* gnus-group-mail-low-empty */
-  color: #541f4f;
-}
-.org-gnus-group-news-1 {
-  /* gnus-group-news-1 */
-  color: #005e00;
-  font-weight: bold;
-}
-.org-gnus-group-news-1-empty {
-  /* gnus-group-news-1-empty */
-  color: #005e00;
-}
-.org-gnus-group-news-2 {
-  /* gnus-group-news-2 */
-  color: #00538b;
-  font-weight: bold;
-}
-.org-gnus-group-news-2-empty {
-  /* gnus-group-news-2-empty */
-  color: #00538b;
-}
-.org-gnus-group-news-3 {
-  /* gnus-group-news-3 */
-  color: #3f3000;
-  font-weight: bold;
-}
-.org-gnus-group-news-3-empty {
-  /* gnus-group-news-3-empty */
-  color: #3f3000;
-}
-.org-gnus-group-news-4 {
-  /* gnus-group-news-4 */
-  color: #0f3360;
-  font-weight: bold;
-}
-.org-gnus-group-news-4-empty {
-  /* gnus-group-news-4-empty */
-  color: #0f3360;
-}
-.org-gnus-group-news-5 {
-  /* gnus-group-news-5 */
-  color: #5f0000;
-  font-weight: bold;
-}
-.org-gnus-group-news-5-empty {
-  /* gnus-group-news-5-empty */
-  color: #5f0000;
-}
-.org-gnus-group-news-6 {
-  /* gnus-group-news-6 */
-  color: #505050;
-  font-weight: bold;
-}
-.org-gnus-group-news-6-empty {
-  /* gnus-group-news-6-empty */
-  color: #505050;
-}
-.org-gnus-group-news-low {
-  /* gnus-group-news-low */
-  color: #004000;
-  font-weight: bold;
-}
-.org-gnus-group-news-low-empty {
-  /* gnus-group-news-low-empty */
-  color: #004000;
-}
-.org-gnus-header-content {
-  /* gnus-header-content */
-  color: #61284f;
-}
-.org-gnus-header-from {
-  /* gnus-header-from */
-  color: #30517f;
-  font-weight: bold;
-}
-.org-gnus-header-name {
-  /* gnus-header-name */
-  color: #005a5f;
-}
-.org-gnus-header-newsgroups {
-  /* gnus-header-newsgroups */
-  color: #223fbf;
-  font-weight: bold;
-}
-.org-gnus-header-subject {
-  /* gnus-header-subject */
-  color: #5317ac;
-  font-weight: bold;
-}
-.org-gnus-signature {
-  /* gnus-signature */
-  color: #093060;
-  font-style: italic;
-}
-.org-gnus-splash {
-  /* gnus-splash */
-  color: #505050;
-}
-.org-gnus-summary-cancelled {
-  /* gnus-summary-cancelled */
-  color: #782900;
-  background-color: #f5d88f;
-  font-weight: bold;
-}
-.org-gnus-summary-high-ancient {
-  /* gnus-summary-high-ancient */
-  color: #505050;
-  font-weight: bold;
-}
-.org-gnus-summary-high-read {
-  /* gnus-summary-high-read */
-  color: #093060;
-  font-weight: bold;
-}
-.org-gnus-summary-high-ticked {
-  /* gnus-summary-high-ticked */
-  color: #a0132f;
-  font-weight: bold;
-}
-.org-gnus-summary-high-undownloaded {
-  /* gnus-summary-high-undownloaded */
-  color: #813e00;
-  font-weight: bold;
-}
-.org-gnus-summary-high-unread {
-  /* gnus-summary-high-unread */
-  color: #000000;
-  font-weight: bold;
-}
-.org-gnus-summary-low-ancient {
-  /* gnus-summary-low-ancient */
-  color: #505050;
-  font-style: italic;
-}
-.org-gnus-summary-low-read {
-  /* gnus-summary-low-read */
-  color: #093060;
-  font-style: italic;
-}
-.org-gnus-summary-low-ticked {
-  /* gnus-summary-low-ticked */
-  color: #780000;
-  font-style: italic;
-}
-.org-gnus-summary-low-undownloaded {
-  /* gnus-summary-low-undownloaded */
-  color: #604000;
-  font-style: italic;
-}
-.org-gnus-summary-low-unread {
-  /* gnus-summary-low-unread */
-  color: #093060;
-  font-weight: bold;
-}
-.org-gnus-summary-normal-ancient {
-  /* gnus-summary-normal-ancient */
-  color: #61284f;
-}
-.org-gnus-summary-normal-read {
-  /* gnus-summary-normal-read */
-  color: #093060;
-}
-.org-gnus-summary-normal-ticked {
-  /* gnus-summary-normal-ticked */
-  color: #a0132f;
-}
-.org-gnus-summary-normal-undownloaded {
-  /* gnus-summary-normal-undownloaded */
-  color: #813e00;
-}
-.org-gnus-summary-normal-unread {
-  /* gnus-summary-normal-unread */
-  color: #000000;
-}
-.org-gnus-summary-selected {
-  /* gnus-summary-selected */
-  color: #282828;
-  background-color: #b5d0ff;
-}
-.org-go-coverage-0 {
-  /* go-coverage-0 */
-  color: #c00000;
-}
-.org-go-coverage-1 {
-  /* go-coverage-1 */
-  color: #808080;
-}
-.org-go-coverage-10 {
-  /* go-coverage-10 */
-  color: #14ec9b;
-}
-.org-go-coverage-2 {
-  /* go-coverage-2 */
-  color: #748c83;
-}
-.org-go-coverage-3 {
-  /* go-coverage-3 */
-  color: #689886;
-}
-.org-go-coverage-4 {
-  /* go-coverage-4 */
-  color: #5ca489;
-}
-.org-go-coverage-5 {
-  /* go-coverage-5 */
-  color: #50b08c;
-}
-.org-go-coverage-6 {
-  /* go-coverage-6 */
-  color: #44bc8f;
-}
-.org-go-coverage-7 {
-  /* go-coverage-7 */
-  color: #38c892;
-}
-.org-go-coverage-8 {
-  /* go-coverage-8 */
-  color: #2cd495;
-}
-.org-go-coverage-9 {
-  /* go-coverage-9 */
-  color: #20e098;
-}
-.org-go-coverage-covered {
-  /* go-coverage-covered */
-  color: #2cd495;
-}
-.org-go-coverage-untracked {
-  /* go-coverage-untracked */
-  color: #505050;
-}
-.org-go-dot-mod-module-name {
-  /* go-dot-mod-module-name */
-  color: #000000;
-  background-color: #ffffff;
-}
-.org-go-dot-mod-module-semver {
-  /* go-dot-mod-module-semver */
-  color: #000000;
-  background-color: #ffffff;
-}
-.org-go-dot-mod-module-version {
-  /* go-dot-mod-module-version */
-  color: #000000;
-  background-color: #ffffff;
-}
-.org-header-line {
-  /* header-line */
-  color: #2a2a2a;
-  background-color: #e5e5e5;
-}
-.org-header-line-highlight {
-  /* header-line-highlight */
-  color: #e0e0e0;
-  background-color: #0033c0;
-}
-.org-help-argument-name {
-  /* help-argument-name */
-  font-style: italic;
-}
-.org-highlight {
-  /* highlight */
-  color: #282828;
-  background-color: #b5d0ff;
-}
-.org-holiday {
-  /* holiday */
-  color: #8f0075;
-}
-.org-homoglyph {
-  /* homoglyph */
-  color: #8b1030;
-}
-.org-ibuffer-locked-buffer {
-  /* ibuffer-locked-buffer */
-  color: #863927;
-}
-.org-info-header-node {
-  /* info-header-node */
-  color: #505050;
-  font-weight: bold;
-}
-.org-info-header-xref {
-  /* info-header-xref */
-  color: #0033c0;
-}
-.org-info-index-match {
-  /* info-index-match */
-  color: #61284f;
-  background-color: #f8ddea;
-}
-.org-info-menu-star {
-  /* info-menu-star */
-  color: #a60000;
-}
-.org-info-node {
-  /* info-node */
-  font-weight: bold;
-}
-.org-info-quoted {
-  /* Info-quoted */
-  color: #721045;
-}
-.org-info-xref {
-  /* info-xref */
-  color: #0000bb;
-  text-decoration: underline;
-}
-.org-internal-border {
-}
-.org-isearch-fail {
-  /* isearch-fail */
-  color: #780000;
-  background-color: #ffcccc;
-}
-.org-italic {
-  /* italic */
-  font-style: italic;
-}
-.org-keyword {
-  /* font-lock-keyword-face */
-  color: #b6a0ff;
-}
-.org-lazy-highlight {
-  /* lazy-highlight */
-  color: #004850;
-  background-color: #8eecf4;
-}
-.org-line-number {
-  /* line-number */
-  color: #505050;
-  background-color: #f8f8f8;
-}
-.org-line-number-current-line {
-  /* line-number-current-line */
-  color: #191919;
-  background-color: #e0e0e0;
-  font-weight: bold;
-}
-.org-line-number-major-tick {
-  /* line-number-major-tick */
-  color: #3f3000;
-  background-color: #fff3da;
-}
-.org-line-number-minor-tick {
-  /* line-number-minor-tick */
-  color: #0f3360;
-  background-color: #ebf6fa;
-}
-.org-link {
-  /* link */
-  color: #0000bb;
-  text-decoration: underline;
-}
-.org-link-visited {
-  /* link-visited */
-  color: #5317ac;
-  text-decoration: underline;
-}
-.org-match {
-  /* match */
-  color: #61284f;
-  background-color: #f8ddea;
-}
-.org-menu {
-}
-.org-message-cited-text-1 {
-  /* message-cited-text-1 */
-  color: #223fbf;
-}
-.org-message-cited-text-2 {
-  /* message-cited-text-2 */
-  color: #972500;
-}
-.org-message-cited-text-3 {
-  /* message-cited-text-3 */
-  color: #315b00;
-}
-.org-message-cited-text-4 {
-  /* message-cited-text-4 */
-  color: #8f0075;
-}
-.org-message-header-cc {
-  /* message-header-cc */
-  color: #223fbf;
-}
-.org-message-header-name {
-  /* message-header-name */
-  color: #145c33;
-}
-.org-message-header-newsgroups {
-  /* message-header-newsgroups */
-  color: #0030a6;
-  font-weight: bold;
-}
-.org-message-header-other {
-  /* message-header-other */
-  color: #005a5f;
-  font-weight: bold;
-}
-.org-message-header-subject {
-  /* message-header-subject */
-  color: #5317ac;
-  font-weight: bold;
-}
-.org-message-header-to {
-  /* message-header-to */
-  color: #8f0075;
-  font-weight: bold;
-}
-.org-message-header-xheader {
-  /* message-header-xheader */
-  color: #0000bb;
-}
-.org-message-mml {
-  /* message-mml */
-  color: #315b00;
-}
-.org-message-separator {
-  /* message-separator */
-  color: #5d3026;
-  background-color: #e0e0e0;
-}
-.org-minibuffer-prompt {
-  /* minibuffer-prompt */
-  color: #005a5f;
-}
-.org-mm-command-output {
-  /* mm-command-output */
-  color: #a0132f;
-}
-.org-mm-uu-extract {
-  /* mm-uu-extract */
-  color: #184034;
-  background-color: #f8f8f8;
-}
-.org-mode-line {
-  /* mode-line */
-  color: #191919;
-  background-color: #e0e0e0;
-}
-.org-mode-line-buffer-id {
-  /* mode-line-buffer-id */
-  font-weight: bold;
-}
-.org-mode-line-emphasis {
-  /* mode-line-emphasis */
-  color: #0033c0;
-  font-weight: bold;
-}
-.org-mode-line-highlight {
-  /* mode-line-highlight */
-  color: #e0e0e0;
-  background-color: #0033c0;
-}
-.org-mode-line-inactive {
-  /* mode-line-inactive */
-  color: #424242;
-  background-color: #efedef;
-}
-.org-modus-theme-active-blue {
-  /* modus-theme-active-blue */
-  color: #e0e0e0;
-  background-color: #0033c0;
-}
-.org-modus-theme-active-cyan {
-  /* modus-theme-active-cyan */
-  color: #e0e0e0;
-  background-color: #004882;
-}
-.org-modus-theme-active-green {
-  /* modus-theme-active-green */
-  color: #e0e0e0;
-  background-color: #005300;
-}
-.org-modus-theme-active-magenta {
-  /* modus-theme-active-magenta */
-  color: #e0e0e0;
-  background-color: #6320a0;
-}
-.org-modus-theme-active-red {
-  /* modus-theme-active-red */
-  color: #e0e0e0;
-  background-color: #930000;
-}
-.org-modus-theme-active-yellow {
-  /* modus-theme-active-yellow */
-  color: #e0e0e0;
-  background-color: #703700;
-}
-.org-modus-theme-diff-added {
-  /* modus-theme-diff-added */
-  color: #004500;
-  background-color: #d4fad4;
-}
-.org-modus-theme-diff-changed {
-  /* modus-theme-diff-changed */
-  color: #524200;
-  background-color: #fcefcf;
-}
-.org-modus-theme-diff-focus-added {
-  /* modus-theme-diff-focus-added */
-  color: #002c00;
-  background-color: #bbeabb;
-}
-.org-modus-theme-diff-focus-changed {
-  /* modus-theme-diff-focus-changed */
-  color: #392900;
-  background-color: #ecdfbf;
-}
-.org-modus-theme-diff-focus-removed {
-  /* modus-theme-diff-focus-removed */
-  color: #4a0000;
-  background-color: #efcbcf;
-}
-.org-modus-theme-diff-heading {
-  /* modus-theme-diff-heading */
-  color: #043355;
-  background-color: #b7c2dd;
-}
-.org-modus-theme-diff-refine-added {
-  /* modus-theme-diff-refine-added */
-  color: #002a00;
-  background-color: #94cf94;
-}
-.org-modus-theme-diff-refine-changed {
-  /* modus-theme-diff-refine-changed */
-  color: #302010;
-  background-color: #cccf8f;
-}
-.org-modus-theme-diff-refine-removed {
-  /* modus-theme-diff-refine-removed */
-  color: #400000;
-  background-color: #daa2b0;
-}
-.org-modus-theme-diff-removed {
-  /* modus-theme-diff-removed */
-  color: #691616;
-  background-color: #ffe8ef;
-}
-.org-modus-theme-fringe-blue {
-  /* modus-theme-fringe-blue */
-  color: #282828;
-  background-color: #82afff;
-}
-.org-modus-theme-fringe-cyan {
-  /* modus-theme-fringe-cyan */
-  color: #282828;
-  background-color: #00d6e0;
-}
-.org-modus-theme-fringe-green {
-  /* modus-theme-fringe-green */
-  color: #282828;
-  background-color: #86cf86;
-}
-.org-modus-theme-fringe-magenta {
-  /* modus-theme-fringe-magenta */
-  color: #282828;
-  background-color: #f0a3ff;
-}
-.org-modus-theme-fringe-red {
-  /* modus-theme-fringe-red */
-  color: #282828;
-  background-color: #ff9a9a;
-}
-.org-modus-theme-fringe-yellow {
-  /* modus-theme-fringe-yellow */
-  color: #282828;
-  background-color: #e0c050;
-}
-.org-modus-theme-header {
-  /* modus-theme-header */
-  color: #000000;
-  font-weight: bold;
-}
-.org-modus-theme-hl-line {
-  /* modus-theme-hl-line */
-  background-color: #f2eff3;
-}
-.org-modus-theme-intense-blue {
-  /* modus-theme-intense-blue */
-  color: #000000;
-  background-color: #6aaeff;
-}
-.org-modus-theme-intense-cyan {
-  /* modus-theme-intense-cyan */
-  color: #000000;
-  background-color: #42cbd4;
-}
-.org-modus-theme-intense-green {
-  /* modus-theme-intense-green */
-  color: #000000;
-  background-color: #5ada88;
-}
-.org-modus-theme-intense-magenta {
-  /* modus-theme-intense-magenta */
-  color: #000000;
-  background-color: #d5baff;
-}
-.org-modus-theme-intense-neutral {
-  /* modus-theme-intense-neutral */
-  color: #000000;
-  background-color: #e0e0e0;
-}
-.org-modus-theme-intense-red {
-  /* modus-theme-intense-red */
-  color: #000000;
-  background-color: #ff8892;
-}
-.org-modus-theme-intense-yellow {
-  /* modus-theme-intense-yellow */
-  color: #000000;
-  background-color: #f5df23;
-}
-.org-modus-theme-mark-alt {
-  /* modus-theme-mark-alt */
-  color: #782900;
-  background-color: #f5d88f;
-  font-weight: bold;
-}
-.org-modus-theme-mark-del {
-  /* modus-theme-mark-del */
-  color: #840040;
-  background-color: #ffccbb;
-  font-weight: bold;
-}
-.org-modus-theme-mark-sel {
-  /* modus-theme-mark-sel */
-  color: #005040;
-  background-color: #a0f0cf;
-  font-weight: bold;
-}
-.org-modus-theme-mark-symbol {
-  /* modus-theme-mark-symbol */
-  color: #223fbf;
-  font-weight: bold;
-}
-.org-modus-theme-nuanced-blue {
-  /* modus-theme-nuanced-blue */
-  background-color: #f3f3ff;
-}
-.org-modus-theme-nuanced-cyan {
-  /* modus-theme-nuanced-cyan */
-  background-color: #ebf6fa;
-}
-.org-modus-theme-nuanced-green {
-  /* modus-theme-nuanced-green */
-  background-color: #ecf7ed;
-}
-.org-modus-theme-nuanced-magenta {
-  /* modus-theme-nuanced-magenta */
-  background-color: #fdf0ff;
-}
-.org-modus-theme-nuanced-red {
-  /* modus-theme-nuanced-red */
-  background-color: #fff1f0;
-}
-.org-modus-theme-nuanced-yellow {
-  /* modus-theme-nuanced-yellow */
-  background-color: #fff3da;
-}
-.org-modus-theme-refine-blue {
-  /* modus-theme-refine-blue */
-  color: #002288;
-  background-color: #8ac7ff;
-}
-.org-modus-theme-refine-cyan {
-  /* modus-theme-refine-cyan */
-  color: #004850;
-  background-color: #8eecf4;
-}
-.org-modus-theme-refine-green {
-  /* modus-theme-refine-green */
-  color: #004c00;
-  background-color: #aceaac;
-}
-.org-modus-theme-refine-magenta {
-  /* modus-theme-refine-magenta */
-  color: #770077;
-  background-color: #ffccff;
-}
-.org-modus-theme-refine-red {
-  /* modus-theme-refine-red */
-  color: #780000;
-  background-color: #ffcccc;
-}
-.org-modus-theme-refine-yellow {
-  /* modus-theme-refine-yellow */
-  color: #604000;
-  background-color: #fff29a;
-}
-.org-modus-theme-special-calm {
-  /* modus-theme-special-calm */
-  color: #61284f;
-  background-color: #f8ddea;
-}
-.org-modus-theme-special-cold {
-  /* modus-theme-special-cold */
-  color: #093060;
-  background-color: #dde3f4;
-}
-.org-modus-theme-special-mild {
-  /* modus-theme-special-mild */
-  color: #184034;
-  background-color: #c4ede0;
-}
-.org-modus-theme-special-warm {
-  /* modus-theme-special-warm */
-  color: #5d3026;
-  background-color: #f0e0d4;
-}
-.org-modus-theme-subtle-blue {
-  /* modus-theme-subtle-blue */
-  color: #282828;
-  background-color: #b5d0ff;
-}
-.org-modus-theme-subtle-cyan {
-  /* modus-theme-subtle-cyan */
-  color: #282828;
-  background-color: #c0efff;
-}
-.org-modus-theme-subtle-green {
-  /* modus-theme-subtle-green */
-  color: #282828;
-  background-color: #aecf90;
-}
-.org-modus-theme-subtle-magenta {
-  /* modus-theme-subtle-magenta */
-  color: #282828;
-  background-color: #f0d3ff;
-}
-.org-modus-theme-subtle-neutral {
-  /* modus-theme-subtle-neutral */
-  color: #424242;
-  background-color: #efedef;
-}
-.org-modus-theme-subtle-red {
-  /* modus-theme-subtle-red */
-  color: #282828;
-  background-color: #f2b0a2;
-}
-.org-modus-theme-subtle-yellow {
-  /* modus-theme-subtle-yellow */
-  color: #282828;
-  background-color: #e4c340;
-}
-.org-mouse {
-}
-.org-mouse-drag-and-drop-region {
-  /* mouse-drag-and-drop-region */
-  color: #000000;
-  background-color: #bcbcbc;
-}
-.org-negation-char {
-  /* font-lock-negation-char-face */
-  color: #813e00;
-}
-.org-next-error {
-  /* next-error */
-  color: #282828;
-  background-color: #f2b0a2;
-}
-.org-nobreak-hyphen {
-  /* nobreak-hyphen */
-  color: #8b1030;
-}
-.org-nobreak-space {
-  /* nobreak-space */
-  color: #8b1030;
-  text-decoration: underline;
-}
-.org-org-agenda-calendar-event {
-  /* org-agenda-calendar-event */
-  color: #000000;
-}
-.org-org-agenda-calendar-sexp {
-  /* org-agenda-calendar-sexp */
-  color: #30517f;
-}
-.org-org-agenda-clocking {
-  /* org-agenda-clocking */
-  color: #093060;
-  background-color: #dde3f4;
-}
-.org-org-agenda-column-dateline {
-  /* org-agenda-column-dateline */
-  background-color: #f0f0f0;
-}
-.org-org-agenda-current-time {
-  /* org-agenda-current-time */
-  color: #282828;
-  background-color: #c0efff;
-}
-.org-org-agenda-diary {
-  /* org-agenda-diary */
-  color: #000000;
-}
-.org-org-agenda-dimmed-todo {
-  /* org-agenda-dimmed-todo-face */
-  color: #424242;
-  background-color: #efedef;
-}
-.org-org-agenda-done {
-  /* org-agenda-done */
-  color: #315b00;
-}
-.org-org-agenda-filter-category {
-  /* org-agenda-filter-category */
-  color: #6320a0;
-  font-weight: bold;
-}
-.org-org-agenda-filter-effort {
-  /* org-agenda-filter-effort */
-  color: #6320a0;
-  font-weight: bold;
-}
-.org-org-agenda-filter-regexp {
-  /* org-agenda-filter-regexp */
-  color: #6320a0;
-  font-weight: bold;
-}
-.org-org-agenda-filter-tags {
-  /* org-agenda-filter-tags */
-  color: #6320a0;
-  font-weight: bold;
-}
-.org-org-agenda-restriction-lock {
-  /* org-agenda-restriction-lock */
-  color: #282828;
-  background-color: #f8f8f8;
-}
-.org-org-agenda-structure {
-  /* org-agenda-structure */
-  color: #184034;
-  background-color: #ffffff;
-}
-.org-org-archived {
-  /* org-archived */
-  color: #505050;
-  background-color: #f0f0f0;
-}
-.org-org-block {
-  /* org-block */
-  color: #000000;
-}
-.org-org-block-begin-line {
-  /* org-block-begin-line */
-  color: #184034;
-  background-color: #f0f0f0;
-}
-.org-org-block-end-line {
-  /* org-block-end-line */
-  color: #184034;
-  background-color: #f0f0f0;
-}
-.org-org-checkbox {
-  /* org-checkbox */
-  color: #191919;
-  background-color: #efedef;
-}
-.org-org-checkbox-statistics-done {
-  /* org-checkbox-statistics-done */
-  color: #005e00;
-  background-color: #f8f8f8;
-}
-.org-org-checkbox-statistics-todo {
-  /* org-checkbox-statistics-todo */
-  color: #972500;
-  background-color: #f8f8f8;
-}
-.org-org-clock-overlay {
-  /* org-clock-overlay */
-  color: #093060;
-  background-color: #dde3f4;
-}
-.org-org-code {
-  /* org-code */
-  color: #721045;
-}
-.org-org-column {
-  /* org-column */
-  background-color: #f0f0f0;
-}
-.org-org-column-title {
-  /* org-column-title */
-  background-color: #f0f0f0;
-  font-weight: bold;
-  text-decoration: underline;
-}
-.org-org-date {
-  /* org-date */
-  color: #005a5f;
-  text-decoration: underline;
-}
-.org-org-date-selected {
-  /* org-date-selected */
-  color: #223fbf;
-  font-weight: bold;
-}
-.org-org-default {
-  /* org-default */
-  color: #000000;
-  background-color: #ffffff;
-}
-.org-org-document-info {
-  /* org-document-info */
-  color: #093060;
-}
-.org-org-document-info-keyword {
-  /* org-document-info-keyword */
-  color: #505050;
-}
-.org-org-done {
-  /* org-done */
-  color: #005e00;
-  background-color: #f8f8f8;
-}
-.org-org-drawer {
-  /* org-drawer */
-  color: #00538b;
-  background-color: #ffffff;
-}
-.org-org-ellipsis {
-}
-.org-org-footnote {
-  /* org-footnote */
-  color: #223fbf;
-  text-decoration: underline;
-}
-.org-org-formula {
-  /* org-formula */
-  color: #972500;
-}
-.org-org-habit-alert {
-  /* org-habit-alert-face */
-  color: #000000;
-  background-color: #f5df23;
-}
-.org-org-habit-alert-future {
-  /* org-habit-alert-future-face */
-  color: #604000;
-  background-color: #fff29a;
-}
-.org-org-habit-clear {
-  /* org-habit-clear-face */
-  color: #000000;
-  background-color: #d5baff;
-}
-.org-org-habit-clear-future {
-  /* org-habit-clear-future-face */
-  color: #770077;
-  background-color: #ffccff;
-}
-.org-org-habit-overdue {
-  /* org-habit-overdue-face */
-  color: #000000;
-  background-color: #ff8892;
-}
-.org-org-habit-overdue-future {
-  /* org-habit-overdue-future-face */
-  color: #780000;
-  background-color: #ffcccc;
-}
-.org-org-habit-ready {
-  /* org-habit-ready-face */
-  color: #000000;
-  background-color: #6aaeff;
-}
-.org-org-habit-ready-future {
-  /* org-habit-ready-future-face */
-  color: #002288;
-  background-color: #8ac7ff;
-}
-.org-org-headline-done {
-  /* org-headline-done */
-  color: #004000;
-  background-color: #ffffff;
-}
-.org-org-hide {
-  /* org-hide */
-  color: #ffffff;
-}
-.org-org-latex-and-related {
-  /* org-latex-and-related */
-  color: #770077;
-}
-.org-org-link {
-  /* org-link */
-  color: #0000bb;
-  text-decoration: underline;
-}
-.org-org-list-dt {
-  /* org-list-dt */
-  font-weight: bold;
-}
-.org-org-macro {
-  /* org-macro */
-  color: #5317ac;
-  background-color: #f3f3ff;
-}
-.org-org-meta-line {
-  /* org-meta-line */
-  color: #0f3360;
-  background-color: #ebf6fa;
-}
-.org-org-mode-line-clock {
-  /* org-mode-line-clock */
-  color: #000000;
-}
-.org-org-mode-line-clock-overrun {
-  /* org-mode-line-clock-overrun */
-  color: #e0e0e0;
-  background-color: #930000;
-}
-.org-org-priority {
-  /* org-priority */
-  color: #721045;
-  background-color: #f8f8f8;
-}
-.org-org-property-value {
-  /* org-property-value */
-  color: #005a5f;
-}
-.org-org-quote {
-  /* org-quote */
-  color: #61284f;
-}
-.org-org-scheduled {
-  /* org-scheduled */
-  color: #5d3026;
-}
-.org-org-scheduled-previously {
-  /* org-scheduled-previously */
-  color: #863927;
-}
-.org-org-scheduled-today {
-  /* org-scheduled-today */
-  color: #5317ac;
-}
-.org-org-sexp-date {
-  /* org-sexp-date */
-  color: #005a5f;
-  text-decoration: underline;
-}
-.org-org-special-keyword {
-  /* org-special-keyword */
-  color: #201f55;
-  background-color: #ffffff;
-}
-.org-org-table {
-  /* org-table */
-  color: #093060;
-}
-.org-org-tag {
-  /* org-tag */
-  color: #541f4f;
-}
-.org-org-tag-group {
-  /* org-tag-group */
-  color: #0f3360;
-  font-weight: bold;
-}
-.org-org-target {
-  /* org-target */
-  text-decoration: underline;
-}
-.org-org-time-grid {
-  /* org-time-grid */
-  color: #56576d;
-}
-.org-org-todo {
-  /* org-todo */
-  color: #972500;
-  background-color: #f8f8f8;
-}
-.org-org-upcoming-deadline {
-  /* org-upcoming-deadline */
-  color: #a0132f;
-}
-.org-org-upcoming-distant-deadline {
-  /* org-upcoming-distant-deadline */
-  color: #5f0000;
-}
-.org-org-verbatim {
-  /* org-verbatim */
-  color: #61284f;
-  background-color: #f0f0f0;
-}
-.org-org-verse {
-  /* org-verse */
-  color: #61284f;
-}
-.org-org-warning {
-  /* org-warning */
-  color: #a0132f;
-  font-weight: bold;
-}
-.org-package-description {
-  /* package-description */
-  color: #093060;
-}
-.org-package-help-section-name {
-  /* package-help-section-name */
-  color: #5317ac;
-  font-weight: bold;
-}
-.org-package-name {
-  /* package-name */
-  color: #0000bb;
-  text-decoration: underline;
-}
-.org-package-status-avail-obso {
-  /* package-status-avail-obso */
-  color: #a60000;
-  font-weight: bold;
-}
-.org-package-status-available {
-  /* package-status-available */
-  color: #184034;
-}
-.org-package-status-built-in {
-  /* package-status-built-in */
-  color: #721045;
-}
-.org-package-status-dependency {
-  /* package-status-dependency */
-  color: #5317ac;
-}
-.org-package-status-disabled {
-  /* package-status-disabled */
-  color: #282828;
-  background-color: #f2b0a2;
-}
-.org-package-status-external {
-  /* package-status-external */
-  color: #005a5f;
-}
-.org-package-status-held {
-  /* package-status-held */
-  color: #70480f;
-}
-.org-package-status-incompat {
-  /* package-status-incompat */
-  color: #813e00;
-  font-weight: bold;
-}
-.org-package-status-installed {
-  /* package-status-installed */
-  color: #5d3026;
-}
-.org-package-status-new {
-  /* package-status-new */
-  color: #005e00;
-  font-weight: bold;
-}
-.org-package-status-unsigned {
-  /* package-status-unsigned */
-  color: #972500;
-  font-weight: bold;
-}
-.org-preprocessor {
-  /* font-lock-preprocessor-face */
-  color: #a0132f;
-}
-.org-read-multiple-choice {
-  /* read-multiple-choice-face */
-  font-weight: bold;
-  text-decoration: underline;
-}
-.org-rectangle-preview {
-  /* rectangle-preview */
-  color: #184034;
-  background-color: #c4ede0;
-}
-.org-regexp-grouping-backslash {
-  /* font-lock-regexp-grouping-backslash */
-  color: #654d0f;
-  font-weight: bold;
-}
-.org-regexp-grouping-construct {
-  /* font-lock-regexp-grouping-construct */
-  color: #8b1030;
-  font-weight: bold;
-}
-.org-region {
-  /* region */
-  color: #000000;
-  background-color: #bcbcbc;
-}
-.org-rmail-header-name {
-  /* rmail-header-name */
-  color: #005a5f;
-}
-.org-rmail-highlight {
-  /* rmail-highlight */
-  color: #8f0075;
-  font-weight: bold;
-}
-.org-scroll-bar {
-}
-.org-secondary-selection {
-  /* secondary-selection */
-  color: #093060;
-  background-color: #dde3f4;
-}
-.org-sgml-namespace {
-  /* sgml-namespace */
-  color: #8f0075;
-}
-.org-sh-escaped-newline {
-  /* sh-escaped-newline */
-  color: #223fbf;
-}
-.org-sh-heredoc {
-  /* sh-heredoc */
-  color: #223fbf;
-}
-.org-sh-quoted-exec {
-  /* sh-quoted-exec */
-  color: #8f0075;
-}
-.org-shadow {
-  /* shadow */
-  color: #505050;
-}
-.org-show-paren-match {
-  /* show-paren-match */
-  color: #000000;
-  background-color: #e0af82;
-}
-.org-show-paren-match-expression {
-  /* show-paren-match-expression */
-  color: #61284f;
-  background-color: #f8ddea;
-}
-.org-show-paren-mismatch {
-  /* show-paren-mismatch */
-  color: #000000;
-  background-color: #ff8892;
-}
-.org-shr-abbreviation {
-  /* shr-abbreviation */
-  text-decoration: underline;
-}
-.org-shr-link {
-  /* shr-link */
-  color: #0000bb;
-  text-decoration: underline;
-}
-.org-shr-selected-link {
-  /* shr-selected-link */
-  color: #0000bb;
-  background-color: #ff0000;
-  text-decoration: underline;
-}
-.org-shr-strike-through {
-  /* shr-strike-through */
-  text-decoration: line-through;
-}
-.org-speedbar-button {
-  /* speedbar-button-face */
-  color: #0000bb;
-  text-decoration: underline;
-}
-.org-speedbar-directory {
-  /* speedbar-directory-face */
-  color: #0030a6;
-  font-weight: bold;
-}
-.org-speedbar-file {
-  /* speedbar-file-face */
-  color: #000000;
-}
-.org-speedbar-highlight {
-  /* speedbar-highlight-face */
-  color: #282828;
-  background-color: #b5d0ff;
-}
-.org-speedbar-selected {
-  /* speedbar-selected-face */
-  color: #00538b;
-  font-weight: bold;
-}
-.org-speedbar-separator {
-  /* speedbar-separator-face */
-  color: #000000;
-  background-color: #e0e0e0;
-}
-.org-speedbar-tag {
-  /* speedbar-tag-face */
-  color: #863927;
-}
-.org-string {
-  /* font-lock-string-face */
-  color: #79a8ff;
-}
-.org-success {
-  /* success */
-  color: #005e00;
-  font-weight: bold;
-}
-.org-tab-bar {
-  /* tab-bar */
-  color: #000000;
-  background-color: #d5d5d5;
-}
-.org-tab-bar-tab {
-  /* tab-bar-tab */
-  color: #000000;
-  background-color: #f6f6f6;
-  font-weight: bold;
-}
-.org-tab-bar-tab-inactive {
-  /* tab-bar-tab-inactive */
-  color: #282828;
-  background-color: #bdbdbd;
-}
-.org-tab-line {
-  /* tab-line */
-  color: #000000;
-  background-color: #d5d5d5;
-  font-size: 95%;
-}
-.org-table-cell {
-  /* table-cell */
-  background-color: #f3f3ff;
-}
-.org-tabulated-list-fake-header {
-  /* tabulated-list-fake-header */
-  font-weight: bold;
-  text-decoration: underline;
-  text-decoration: overline;
-}
-.org-term {
-  /* term */
-  color: #000000;
-  background-color: #ffffff;
-}
-.org-term-bold {
-  /* term-bold */
-  font-weight: bold;
-}
-.org-term-color-black {
-  /* term-color-black */
-  color: #000000;
-  background-color: #000000;
-}
-.org-term-color-blue {
-  /* term-color-blue */
-  color: #0030a6;
-  background-color: #0030a6;
-}
-.org-term-color-cyan {
-  /* term-color-cyan */
-  color: #00538b;
-  background-color: #00538b;
-}
-.org-term-color-green {
-  /* term-color-green */
-  color: #005e00;
-  background-color: #005e00;
-}
-.org-term-color-magenta {
-  /* term-color-magenta */
-  color: #721045;
-  background-color: #721045;
-}
-.org-term-color-red {
-  /* term-color-red */
-  color: #a60000;
-  background-color: #a60000;
-}
-.org-term-color-white {
-  /* term-color-white */
-  color: #ffffff;
-  background-color: #ffffff;
-}
-.org-term-color-yellow {
-  /* term-color-yellow */
-  color: #813e00;
-  background-color: #813e00;
-}
-.org-term-underline {
-  /* term-underline */
-  text-decoration: underline;
-}
-.org-tool-bar {
-  /* tool-bar */
-  color: #000000;
-  background-color: #bfbfbf;
-}
-.org-tooltip {
-  /* tooltip */
-  color: #000000;
-  background-color: #dde3f4;
-}
-.org-trailing-whitespace {
-  /* trailing-whitespace */
-  background-color: #ff8892;
-}
-.org-tty-menu-disabled {
-  /* tty-menu-disabled-face */
-  color: #505050;
-  background-color: #f0f0f0;
-}
-.org-tty-menu-enabled {
-  /* tty-menu-enabled-face */
-  color: #000000;
-  background-color: #f0f0f0;
-  font-weight: bold;
-}
-.org-tty-menu-selected {
-  /* tty-menu-selected-face */
-  color: #000000;
-  background-color: #6aaeff;
-}
-.org-type {
-  /* font-lock-type-face */
-  color: #6ae4b9;
-}
-.org-underline {
-  /* underline */
-  text-decoration: underline;
-}
-.org-variable-name {
-  /* font-lock-variable-name-face */
-  color: #00d3d0;
-}
-.org-variable-pitch {
-}
-.org-vc-conflict-state {
-  /* vc-conflict-state */
-  color: #930000;
-}
-.org-vc-edited-state {
-  /* vc-edited-state */
-  color: #5d3026;
-}
-.org-vc-locally-added-state {
-  /* vc-locally-added-state */
-  color: #004882;
-}
-.org-vc-locked-state {
-  /* vc-locked-state */
-  color: #6320a0;
-}
-.org-vc-missing-state {
-  /* vc-missing-state */
-  color: #703700;
-}
-.org-vc-needs-update-state {
-  /* vc-needs-update-state */
-  color: #184034;
-}
-.org-vc-removed-state {
-  /* vc-removed-state */
-  color: #930000;
-}
-.org-vc-state-base {
-  /* vc-state-base */
-  color: #191919;
-}
-.org-vc-up-to-date-state {
-  /* vc-up-to-date-state */
-  color: #093060;
-}
-.org-vertical-border {
-  /* vertical-border */
-  color: #888888;
-}
-.org-warning {
-  /* warning */
-  color: #813e00;
-  font-weight: bold;
-}
-.org-warning-1 {
-  /* font-lock-warning-face */
-  color: #703700;
-}
-.org-widget-button {
-  /* widget-button */
-  color: #0000bb;
-  text-decoration: underline;
-}
-.org-widget-button-pressed {
-  /* widget-button-pressed */
-  color: #721045;
-  text-decoration: underline;
-}
-.org-widget-documentation {
-  /* widget-documentation */
-  color: #005e00;
-}
-.org-widget-field {
-  /* widget-field */
-  color: #282828;
-  background-color: #f0f0f0;
-}
-.org-widget-inactive {
-  /* widget-inactive */
-  color: #424242;
-  background-color: #efedef;
-}
-.org-widget-single-line-field {
-  /* widget-single-line-field */
-  color: #282828;
-  background-color: #f0f0f0;
-}
-.org-window-divider {
-  /* window-divider */
-  color: #888888;
-}
-.org-window-divider-first-pixel {
-  /* window-divider-first-pixel */
-  color: #585858;
-}
-.org-window-divider-last-pixel {
-  /* window-divider-last-pixel */
-  color: #585858;
-}
-.org-xref-file-header {
-  /* xref-file-header */
-  color: #093060;
-  font-weight: bold;
-}
-.org-xref-line-number {
-  /* xref-line-number */
-  color: #505050;
-}
-.org-xref-match {
-  /* xref-match */
-  color: #61284f;
-  background-color: #f8ddea;
-}
diff --git a/org/posts/2023-03-27-foo.org b/org/posts/2023-03-27-foo.org
new file mode 100644 (file)
index 0000000..1c0bc06
--- /dev/null
@@ -0,0 +1,10 @@
+#+TITLE:       Foo
+#+SUBTITLE:    Bar
+#+DESCRIPTION: Baz
+#+KEYWORDS:    spam
+#+DATE:        2023-03-28
+
+* An exercise in recursion courtesy of Jeremy Friesen
+#+INDEX: CV
+
+Foo bar baz.
diff --git a/org/posts/2023-03-31-bar.org b/org/posts/2023-03-31-bar.org
new file mode 100644 (file)
index 0000000..14f6e64
--- /dev/null
@@ -0,0 +1,9 @@
+#+TITLE:       Bar
+#+SUBTITLE:    Foo
+#+DESCRIPTION: Baz
+#+KEYWORDS:    spam
+#+DATE:        2023-03-31
+
+* An exercise in recursion courtesy of Jeremy Friesen
+
+Foo bar baz.
diff --git a/org/posts/2023-04-01-a-post-about-nothing.org b/org/posts/2023-04-01-a-post-about-nothing.org
new file mode 100644 (file)
index 0000000..2005d4c
--- /dev/null
@@ -0,0 +1,14 @@
+#+TITLE:       A post about nothing
+#+SUBTITLE:    John von Neumann once said...
+#+DESCRIPTION: A post about nothing at all
+#+KEYWORDS:    personal
+#+DATE:        2023-04-01
+
+* What's this post all about?
+
+#+begin_quote
+There is no point in being precise if you do not even know what you
+are talking about.
+#+end_quote
+
+I don't know.
diff --git a/org/posts/2023-04-01-take-on-recursion.org b/org/posts/2023-04-01-take-on-recursion.org
new file mode 100644 (file)
index 0000000..bd463d5
--- /dev/null
@@ -0,0 +1,111 @@
+#+TITLE:       Take on Recursion
+#+SUBTITLE:    My take on a recursive Elisp function for accumulating a list while walking up an AST
+#+DESCRIPTION: A post by Eshel Yaron describing his take on a recursive Elisp function for accumulating a list while walking up an AST
+#+KEYWORDS:    emacs
+#+DATE:        2023-04-01
+
+Over at [[https://takeonrules.com]], Jeremy Friesen has [[https://takeonrules.com/2023/03/25/using-built-in-emacs-29-tree-sitter-package-to-get-qualified-ruby-function-name/][a couple of]] [[https://takeonrules.com/2023/03/25/using-built-in-emacs-29-tree-sitter-package-to-get-qualified-ruby-function-name/][recent posts]]
+about an Emacs command he wrote for grabbing the qualified name of the function
+at point in Ruby files.
+
+I don't know much about Ruby, but the way he implemented this command caught my
+attention because he's relying on the new =treesit= package from Emacs 29 to
+examine the syntax tree of his Ruby code, and I've been playing around with this
+nice parsing framework myself recently.
+
+Apparently, Ruby /functions/ can reside within nested /modules/.  Jeremy's
+command thus leverages the function ~treesit-defun-at-point~ to obtain the
+syntax tree node corresponding to the Ruby function at point, and calls a
+recursive helper function called ~jf/treesit/module_space~ that walks up the
+syntax tree and accumulates the names of the enclosing modules it finds along
+the way to the root of the syntax tree.  There's just a tiny problem which is
+that this helper function accumulates the module names in a rather awkward
+manner... As Jeremy notes:
+
+#+begin_quote
+The list returned by ~jf/treesit/module_space~ is ~'(nil ("Hello" ("World")))~;
+which is a ugly but workable. Perhaps someone will write to me with a refactor
+of this code.
+#+end_quote
+
+Let's have a look at this function's implementation:
+
+#+begin_src emacs-lisp
+  (defun jf/treesit/module_space (node)
+    (when-let* ((parent (treesit-parent-until
+                         node
+                         (lambda (n) (member (treesit-node-type n)
+                                             '("class" "module" "assignment")))))
+                (parent_name (treesit-node-text
+                              (car
+                               (treesit-filter-child
+                                parent
+                                (lambda (n)
+                                  (member (treesit-node-type n)
+                                          '("constant" "scope_resolution"))))))))
+      (list (jf/treesit/module_space parent) parent_name)))
+#+end_src
+
+Basically what this does is climbing up the syntax tree with
+~treesit-parent-until~ to find the next module boundary (if there is one) and
+then grabbing its name with ~treesit-node-text~.  Now all that's left is to
+perform a recursive call and return its result along with the found module name,
+but the way it bundles them together as two elements of a ~list~ causes the
+result to be a nested tree structure, instead of a simple list.  Then, to obtain
+the desired list of module names, the calling command needs to apply the
+~-flatten~ function to the tree that ~jf/treesit/module_space~ returns.
+
+Here's my take on this function:
+
+#+begin_src emacs-lisp
+  (defun esy/treesit/module_space (node &optional acc)
+    (if-let ((parent (treesit-parent-until
+                      node
+                      (lambda (n) (member (treesit-node-type n)
+                                          '("class" "module" "assignment")))))
+             (parent_name (treesit-node-text
+                           (car
+                            (treesit-filter-child
+                             parent
+                             (lambda (n)
+                               (member (treesit-node-type n)
+                                       '("constant" "scope_resolution"))))))))
+        (esy/treesit/module_space parent (cons parent_name acc))
+      acc))
+#+end_src
+
+It's extremely similar to the original version, but the crucial difference is
+that we use an accumulator argument ~ACC~ to hold the result of our syntax tree
+traversal as we climb up to the root.  At each step in the way, ~ACC~ holds a
+list of module names which is the ~cdr~ of the list that we'll eventually
+return.  We extend this list with the name of the next parent module during the
+recursive call, and when we reach the root of the syntax tree we simply return
+the accumulated list.
+
+For example, if we have Ruby code that looks something like this:
+
+#+begin_src ruby
+module Foo
+  module Bar
+    module Baz
+      def spam
+        :true
+      end
+    end
+  end
+end
+#+end_src
+
+With point inside the function definition we get a simple list:
+
+#+begin_src emacs-lisp
+  (esy/treesit/module_space (treesit-defun-at-point))
+  ⇒ ("Foo" "Bar" "Baz")
+#+end_src
+
+Which is a little cleaner than what we get with ~jf/treesit/module_space~:
+
+#+begin_src emacs-lisp
+  (jf/treesit/module_space (treesit-defun-at-point))
+  ⇒ (((nil "Foo") "Bar") "Baz")
+#+end_src
diff --git a/org/posts/index.org b/org/posts/index.org
new file mode 100644 (file)
index 0000000..1002c95
--- /dev/null
@@ -0,0 +1,6 @@
+#+TITLE: Posts
+#+DESCRIPTION: Eshel Yaron's blog posts
+#+KEYWORDS: eshel language emacs programming prolog
+
+#+BEGIN: posts :dir "/Users/eshelyaron/checkouts/eshelyaron.com/org/posts" :limit nil
+#+END:
diff --git a/org/sitemap.org b/org/sitemap.org
new file mode 100644 (file)
index 0000000..fd69e04
--- /dev/null
@@ -0,0 +1,12 @@
+#+TITLE: Sitemap for project org
+
+- [[file:index.org][Eshel Yaron]]
+- [[file:theindex.org][Index]]
+- [[file:pub.org][Public PGP Key]]
+- [[file:sweep.org][Sweep: SWI-Prolog Embedded in Emacs]]
+- posts
+  - [[file:posts/2023-04-01-a-post-about-nothing.org][A post about nothing]]
+  - [[file:posts/2023-03-31-bar.org][Bar]]
+  - [[file:posts/2023-03-27-foo.org][Foo]]
+  - [[file:posts/index.org][Posts]]
+  - [[file:posts/2023-04-01-take-on-recursion.org][Take on Recursion]]
\ No newline at end of file
diff --git a/org/style.css b/org/style.css
deleted file mode 100644 (file)
index 3424f57..0000000
+++ /dev/null
@@ -1,284 +0,0 @@
-@import 'modus-operandi-theme.css';
-
-:root {
-       --color-scheme-background: black;
-       --color-scheme-text: white;
-       --color-scheme-secondary: #eee;
-       --color-scheme-shadow: #333;
-}
-
-a:link    { color: lightblue }
-a:visited { color: lightblue }
-a:hover   { color: lightblue }
-
-body {
-    margin-top: 0;
-    margin-left: auto;
-    margin-right: auto;
-    padding-left: 1em;
-    padding-right: 1em;
-    max-width: 52rem;
-    color: var(--color-scheme-text);
-    background: var(--color-scheme-background);
-}
-
-#content {
-    max-width: 50rem;
-    margin-left: auto;
-    margin-right: auto;
-}
-
-@media  (min-width: 43em) {
-    #profile {
-       float: right;
-    }
-}
-
-#preamble {
-    display: flex;
-    justify-content: space-between;
-    flex-direction: row-reverse;
-    align-items: flex-start;
-    padding-bottom: 0.25em;
-}
-
-#updated {
-    font-family: monospace;
-    font-size: 1em;
-    color: var(--color-scheme-secondary);
-    padding-top: 2em;
-    padding-bottom: 0.75em;
-    padding-left: 1em;
-    padding-right: 1em;
-    border-bottom: 1px dotted var(--color-scheme-secondary);
-}
-
-#preamble a {
-    text-transform: uppercase;
-    border: 1px solid var(--color-scheme-secondary);
-    padding: 0.2em;
-    padding-left: 0.3em;
-    padding-right: 0.3em;
-}
-
-nav a:link { font-size: large; }
-nav h2 { font-size: 2em; }
-
-figure {
-    border: 2px solid var(--color-scheme-text);
-    box-shadow: 4px 4px 6px var(--color-scheme-shadow);
-    display: inline-block;
-    font-family: monospace;
-}
-
-img {
-    padding: 0.9em;
-    vertical-align: center;
-}
-
-figcaption {
-    padding-left: 0.9em;
-    padding-bottom: 0.9em;
-}
-
-blockquote {
-    border-left-style: solid;
-    padding-left: 1em;
-}
-
-.todo   { font-family: monospace; color: red; }
-.done   { font-family: monospace; color: green; }
-
-
-.timestamp {
-    font-family: monospace;
-    color: var(--color-scheme-secondary);
-}
-
-.timestamp:after {
-    concontent: '\A';
-}
-
-li {
-    padding-bottom: 0.3em;
-}
-
-dd, dt, li, a, p, h1, h2, h3, h4, h5, h6 {
-    font-family: "Helvetica Neue", sans-serif;
-}
-
-dt {
-    font-weight: bold;
-}
-
-h1 {
-    font-size: 2.5em;
-}
-
-h2 {
-    font-size: 2em;
-    margin-bottom: 0.2em;
-}
-
-h3 {
-    font-size: 1.5em;
-    margin-bottom: 0.2em;
-}
-
-h4 {
-    font-size: 1.4em;
-}
-
-h5 {
-    font-size: 1.2em;
-}
-
-h6 {
-    font-size: 1em;
-}
-
-table {
-    border-collapse: collapse;
-    border: 2px solid var(--color-scheme-text);
-    box-shadow: 4px 4px 6px var(--color-scheme-shadow);
-}
-
-th, td {
-    padding: 0.25em;
-    border: 1px solid var(--color-scheme-secondary);
-}
-
-pre {
-    font-size: 1.25em;
-    overflow: auto;
-    border: 2px solid var(--color-scheme-text);
-    box-shadow: 4px 4px 6px var(--color-scheme-shadow);
-    padding: 1em;
-}
-
-
-.published {
-    font-family: monospace;
-    font-size: 1.3em;
-    color: var(--color-scheme-secondary);
-}
-
-.right-justify {
-    float: right;
-}
-
-
-.comma-list ul {
-    list-style: none;
-}
-
-.comma-list li {
-    display: inline;
-}
-
-.comma-list li:after {
-    content: ", ";
-}
-
-.comma-list li:last-child:before {
-    content: "and ";
-}
-
-.comma-list li:last-child:after {
-    content: "";
-}
-
-.license-notice {
-    display: flex;
-    align-content: center;
-    align-items: center;
-    justify-content: center;
-    background: lightyellow;
-    padding: 0 1em;
-    border: 1px dotted var(--color-scheme-secondary);
-    border-radius: 1em;
-}
-
-.blog-entries ul {
-    list-style: none;
-    padding-left: 0;
-}
-
-.blog-entries li {
-    padding-bottom: 5mm;
-}
-
-.blog-entries a {
-    font-family: monospace;
-    font-size: 1.8em;
-    font-weight: bold;
-}
-
-.blog-entries span {
-    display: block;
-}
-
-.footdef {
-    padding-top: 0.5em;
-    padding-bottom: 0.5em;
-}
-
-.footpara {
-    display: inline;
-}
-
-footer {
-    font-size: 80%;
-    line-height: 1.5em;
-}
-
-.copyright-container {
-    display: flex;
-    justify-content: space-between;
-    align-items: center;
-    flex-wrap: wrap;
-}
-
-.banner {
-    text-align: center;
-}
-
-.generated {
-    font-family: monospace;
-    text-align: center;
-    padding: 1em;
-}
-
-a {
-    outline: none;
-    text-decoration: none;
-}
-
-p {
-    font-size: large;
-}
-
-.links-container {
-  width: 100%;
-  display: flex;
-  flex-direction: row;
-  justify-content: center;
-}
-
-.links-first, .links-second, .links-third, .links-fourth {
-  width: 20%;
-}
-
-.links-fifth, links-sixth {
-  width: 10%;
-}
-
-span.tag {
-    font-size: small;
-    color: #4aa64a;
-}
-
-code {
-    color: #f78fe7;
-    font-family: Hack,monospace;
-}
diff --git a/org/sweep.org b/org/sweep.org
new file mode 120000 (symlink)
index 0000000..b077d19
--- /dev/null
@@ -0,0 +1 @@
+../sweep/README.org
\ No newline at end of file
diff --git a/org/theindex.inc b/org/theindex.inc
new file mode 100644 (file)
index 0000000..6453c73
--- /dev/null
@@ -0,0 +1,2 @@
+* C
+  - [[file:posts/2023-03-27-foo.org::*An exercise in recursion courtesy of Jeremy Friesen][CV]]
diff --git a/org/theindex.org b/org/theindex.org
new file mode 100644 (file)
index 0000000..9ac19f8
--- /dev/null
@@ -0,0 +1,4 @@
+#+TITLE: Index
+
+#+INCLUDE: "theindex.inc"
+
index e9ae293ce806ff68efa313d7e13d48f1b45f296f..51172c5021fd4d2c20c66d561bbe859b30b625e6 100644 (file)
 
 ;;; Code:
 
-(require 'package)
-(setq package-selected-packages '(htmlize rainbow-delimiters))
-(package-install-selected-packages)
 (package-initialize)
+
+(use-package htmlize            :ensure t :demand t)
+(use-package rainbow-delimiters :ensure t :demand t)
+
 (add-hook 'prog-mode-hook #'rainbow-delimiters-mode)
 
+(require 'org)
 (require 'ox-publish)
 (require 'ox-html)
-(require 'htmlize)
-(require 'f)
-(require 'tramp)
+(require 'dom)
 
 (org-babel-do-load-languages
  'org-babel-load-languages
- '((shell . t)))
-
-(setq tramp-cache-read-persistent-data t
-      tramp-allow-unsafe-temporary-files t)
-
-(defconst esy/source-path "~/checkouts/eshelyaron.com/dotfiles/.emacs.d/"
-  "Local path of my GNU Emacs configuration.")
-
-(defconst esy/website-source-root "~/checkouts/eshelyaron.com"
-  "Local path of my website sources.")
-
-(defconst esy/website-source-org (expand-file-name "org"
-                                                   esy/website-source-root)
-  "Local path of my website Org files.")
-
-(defconst esy/website-target-root "/ssh:root@direct.eshelyaron.com:/var/www"
-  "Remote path of my website pages.")
-
-(defconst esy/website-target-html (concat esy/website-target-root "/html")
-  "Remote path of my website pages.")
-
-(defconst esy/website-html-header
-  "<link rel=\"stylesheet\" href=\"/style.css\" type=\"text/css\"/>"
-  "HTML Header of my website pages.")
-
-(defconst esy/website-html-postamble
-  (f-read-text (expand-file-name "html_postamble.html" esy/website-source-org))
-  "HTML Postamble of my website pages.")
-
-(defun esy/publish-project-make-org-template (dir file)
-  "Return an `org-publish-project-alist' value template for Org FILE in DIR."
-  `( :base-extension "org"
-     :base-directory ,dir
-     :exclude ".*"
-     :include (,file)
-     :publishing-function org-html-publish-to-html
-     :html-head ,esy/website-html-header
-     :html-postamble ,esy/website-html-postamble))
-
-(defconst esy/publish-project-index-template
-  (esy/publish-project-make-org-template esy/website-source-org "index.org")
-  "Template for the index page of my website.")
-
-(defconst esy/publish-project-pub-template
-  (esy/publish-project-make-org-template esy/website-source-org "pub.org")
-  "Template for the GPG key page of my website.")
-
-(defconst esy/publish-project-config-template
-  (esy/publish-project-make-org-template
-   (expand-file-name "dotfiles/.emacs.d" esy/website-source-root)
-   "esy.org")
-  "Template for the index page of my website.")
-
-(defconst esy/publish-project-sweep-template
-  (esy/publish-project-make-org-template
-   (expand-file-name "sweep" esy/website-source-root)
-   "README.org")
-  "Template for the `sweep' manual page of my website.")
-
-(defconst esy/publish-project-static-template
-  `( :base-directory ,esy/website-source-org
-     :base-extension "ico\\|css\\|jpg\\|gif\\|png\\|txt\\|pdf"
-     :recursive t
-     :publishing-function org-publish-attachment)
-  "Template for the static assets of my website.")
-
-(with-eval-after-load 'ox-publish
-  (require 'ox-html)
-  (require 'htmlize)
-  (setq org-export-with-section-numbers nil
-        org-html-html5-fancy t
-        org-html-doctype "html5"
-        org-html-head-include-default-style nil
-        org-html-head-include-scripts nil
-        org-html-htmlize-output-type 'css
-        org-publish-project-alist
-        `(("index"
-           :publishing-directory ,esy/website-target-html
-           .
-           ,esy/publish-project-index-template)
-          ("pub"
-           :publishing-directory ,esy/website-target-html
-           .
-           ,esy/publish-project-pub-template)
-          ("static"
-           :publishing-directory ,esy/website-target-html
-           .
-           ,esy/publish-project-static-template)
-          ("config"
-           :publishing-directory ,esy/website-target-html
-           .
-           ,esy/publish-project-config-template)
-          ("sweep"
-           :publishing-directory ,esy/website-target-html
-           .
-           ,esy/publish-project-sweep-template)
-          ("eshelyaron.com" :components ("index"
-                                         "pub"
-                                         "sweep"
-                                         "static"
-                                         "config"))
-          ("index.local"
-           :publishing-directory ,(expand-file-name "html"
-                                                    esy/website-source-root)
-           .
-           ,esy/publish-project-index-template)
-          ("pub.local"
-           :publishing-directory ,(expand-file-name "html"
-                                                    esy/website-source-root)
-           .
-           ,esy/publish-project-pub-template)
-          ("config.local"
-           :publishing-directory ,(expand-file-name "html"
-                                                    esy/website-source-root)
-           .
-           ,esy/publish-project-config-template)
-          ("sweep.local"
-           :publishing-directory ,(expand-file-name "html"
-                                                    esy/website-source-root)
-           .
-           ,esy/publish-project-sweep-template)
-          ("static.local"
-           :publishing-directory ,(expand-file-name "html"
-                                                    esy/website-source-root)
-           .
-           ,esy/publish-project-static-template)
-          ("eshelyaron.local" :components ("index.local"
-                                           "pub.local"
-                                           "sweep.local"
-                                           "static.local"
-                                           "config.local")))))
+ '((emacs-lisp . t)
+   (shell      . t)))
+
 (setq org-confirm-babel-evaluate nil)
 
+(defun esy/dom-to-string (&rest doms)
+  (with-temp-buffer
+    (mapc #'dom-print doms)
+    (buffer-string)))
+
+(defun esy/publish-post-to-dom (file)
+  (with-current-buffer (find-file-noselect (expand-file-name file "/Users/eshelyaron/checkouts/eshelyaron.com/out/posts"))
+    (let ((dom (libxml-parse-html-region (point-min) (point-max))))
+      `(item nil
+             (title nil ,(string-join (dom-strings (car (dom-by-tag dom 'title)))))
+             (author nil ,user-full-name)
+             (category nil ,(car (string-split (dom-attr (seq-find (lambda (m) (pcase m (`(meta ((name . "keywords") . ,_)) t))) (dom-by-tag dom 'meta)) 'content) " ")))
+             (link nil ,(concat "https://eshelyaron.com/posts/" file))
+             (guid ((isPermaLink . "true")) ,(concat "https://eshelyaron.com/posts/" file))
+             (pubDate nil ,(substring file 0 10))
+             (description nil ,(format "<![CDATA[%s]]>" (esy/dom-to-string (car (dom-by-id dom "content")))))))))
+
+(defun esy/publish-posts (&rest _)
+  (let ((posts (reverse (directory-files "/Users/eshelyaron/checkouts/eshelyaron.com/out/posts" nil (rx bos digit (+ any) ".html" eos)))))
+    (with-temp-buffer
+      (insert "<?xml version=\"1.0\" encoding=\"UTF-8\" ?>\n")
+      (dom-print `(rss ((version . "2.0"))
+                       (channel nil
+                                (title nil ,user-full-name)
+                                (generator nil "GNU Emacs")
+                                (link nil "https://eshelyaron.com")
+                                (description nil "RSS Feed of eshelyaron.com")
+                                (pubDate nil ,(format-time-string "%F"))
+                                ,@(mapcar #'esy/publish-post-to-dom posts)))
+                 t t)
+      (write-file "/Users/eshelyaron/checkouts/eshelyaron.com/out/rss.xml"))))
+
+(defun esy/org-dblock-insert-posts (limit)
+  (interactive (list (when current-prefix-arg
+                       (prefix-numeric-value current-prefix-arg))))
+  (org-create-dblock (list :name "posts"
+                           :dir  "/Users/eshelyaron/checkouts/eshelyaron.com/org/posts"
+                           :limit limit))
+  (org-update-dblock))
+
+(org-dynamic-block-define "posts" #'esy/org-dblock-insert-posts)
+
+(defun org-dblock-write:posts (params)
+  (let* ((dir   (plist-get params :dir))
+         (limit (plist-get params :limit))
+         (all-posts (reverse (directory-files dir nil (rx bos digit (+ any) ".org" eos))))
+         (posts (if limit (take limit all-posts) all-posts)))
+    (dolist (post posts)
+      (let ((file (expand-file-name post dir)))
+        (insert "- [[file:" (file-relative-name file) "][" (substring post 0 10) " ~ " (org-get-title file) "]]"))
+      (newline))
+    (when (and limit (< limit (length all-posts)))
+      (insert "- [[file:" (file-relative-name dir) "][...older posts]]"))
+    (delete-blank-lines)))
+
+(defun esy/publish-posts-prepare-index (&rest _)
+  (dolist (file '("/Users/eshelyaron/checkouts/eshelyaron.com/org/posts/index.org"
+                  "/Users/eshelyaron/checkouts/eshelyaron.com/org/index.org"))
+    (with-current-buffer (find-file-noselect file)
+      (org-update-all-dblocks))))
+
+(defun esy/publish (&optional modified-only)
+  (interactive "P")
+  (let* ((publishing-directory "/Users/eshelyaron/checkouts/eshelyaron.com/out")
+         (org-export-with-sub-superscripts '{})
+         (org-export-with-section-numbers nil)
+         (org-export-with-toc nil)
+         (org-html-htmlize-output-type 'css)
+         (org-publish-project-alist
+          (list '("all" :components ("org" "assets"))
+                (list "assets"
+                      :base-directory "/Users/eshelyaron/checkouts/eshelyaron.com/assets"
+                      :publishing-directory publishing-directory
+                      :preparation-function #'ignore
+                      :completion-function #'ignore
+                      :base-extension "svg\\|ico\\|css"
+                      :publishing-function #'org-publish-attachment)
+                (list "org"
+                      :completion-function #'esy/publish-posts
+                      :base-directory "/Users/eshelyaron/checkouts/eshelyaron.com/org"
+                      :publishing-directory publishing-directory
+                      :preparation-function #'esy/publish-posts-prepare-index
+                      :completion-function #'ignore
+                      :base-extension "org"
+                      :recursive t
+                      :exclude nil
+                      :include nil
+                      :publishing-function #'org-html-publish-to-html
+                      :html-doctype "html5"
+                      :html-html5-fancy t
+                      :auto-sitemap t
+                      :makeindex t
+                      :with-date t
+                      :html-head-include-default-style nil
+                      :html-head-include-scripts nil
+                      :html-use-infojs nil
+                      :html-link-org-files-as-html t
+                      :html-head       (esy/dom-to-string '(link ((rel . "stylesheet")
+                                                                  (href . "/style.css")
+                                                                  (type . "text/css"))))
+                      :html-head-extra (esy/dom-to-string '(link ((rel . "alternate")
+                                                                  (href . "/rss.xml")
+                                                                  (type . "application/rss+xml")
+                                                                  (title . "RSS feed of eshelyaron.com"))))
+                      :html-preamble-format
+                      (list
+                       (list
+                        "en"
+                        (esy/dom-to-string
+                         '(nav ((id . "icon-links")
+                                (class . "icon-links"))
+                               (div ((class . "home-link"))
+                                    (a ((href . "/"))
+                                       (img ((src . "/home.svg")
+                                             (height . "35")
+                                             (width . "35")
+                                             (alt . "Home")))))
+                               (div ((class . "other-links"))
+                                    (a ((href . "mailto:me@eshelyaron.com"))
+                                       (img ((src . "/mail.svg")
+                                             (height . "30")
+                                             (width . "30")
+                                             (alt . "Mail"))))
+                                    " "
+                                    (a ((href . "https://emacs.ch/@eshel"))
+                                       (img ((src . "/mastodon.svg")
+                                             (height . "28")
+                                             (width . "28")
+                                             (alt . "Mastodon"))))
+                                    " "
+                                    (a ((href . "/rss.xml"))
+                                       (img ((src . "/rss.svg")
+                                             (height . "30")
+                                             (width . "30")
+                                             (alt . "RSS Feed"))))))
+                         '(hr nil))))
+                      :html-postamble t
+                      :html-postamble-format
+                      (list
+                       (list
+                        "en"
+                        (esy/dom-to-string
+                         '(footer ((id . "footer")
+                                   (class . "footer"))
+                                  (hr nil)
+                                  "© "
+                                  (time ((class . "copyright-year")) "2023")
+                                  " %a"))))))))
+    (org-publish "all" (not modified-only))))
+
+
 (provide 'publish)
 ;;; publish.el ends here
diff --git a/sweep b/sweep
index eedc3fa93fbe83b96636bfcf1f77933c73f713e7..41c40c0e1f26903ab16f65605e83a33563058fc8 160000 (submodule)
--- a/sweep
+++ b/sweep
@@ -1 +1 @@
-Subproject commit eedc3fa93fbe83b96636bfcf1f77933c73f713e7
+Subproject commit 41c40c0e1f26903ab16f65605e83a33563058fc8