This commit is contained in:
fido-node 2024-06-22 11:50:08 +00:00
parent d1d9a87ab0
commit 8a93bd4f9a
6 changed files with 635 additions and 96 deletions

View File

@ -1,9 +1,10 @@
<!DOCTYPE html><html lang="en"><head><meta charset="utf-8"/><meta author="Alex Mikhailov"/><meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no"/><meta name="color-scheme" content="light dark"/><meta http-equiv="content-language" content="en-us"/><meta name="description" content="Personal page with a blog about my technical adventures"/><link rel="icon" type="image/x-icon" href="/resources/favicon.ico"/><link rel="stylesheet" href="/resources/css/pico.sand.min.css"/><script defer="true" src="https://umami.dokutsu.xyz/script.js" data-website-id="d52d9af1-0c7d-4531-84c6-0b9c2850011f"></script><title>Alex Mikhailov - Blog</title></head><body><main class="container"><header class="header"><nav><ul><li><strong>Alex Mikhailov - Blog</strong></li></ul><ul><li><a href="/index.html">About</a></li><li><a href="/blog.html">Blog</a></li><li><a href="/rss.xml">RSS</a></li></ul></nav></header> <!DOCTYPE html><html lang="en"><head><meta charset="utf-8"/><meta author="Alex Mikhailov"/><meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no"/><meta name="color-scheme" content="light dark"/><meta http-equiv="content-language" content="en-us"/><meta name="description" content="Personal page with a blog about my technical adventures"/><link rel="icon" type="image/x-icon" href="/resources/favicon.ico"/><link rel="stylesheet" href="/resources/css/pico.sand.min.css"/><script defer="true" src="https://umami.dokutsu.xyz/script.js" data-website-id="d52d9af1-0c7d-4531-84c6-0b9c2850011f"></script><title>Alex Mikhailov - Blog</title></head><body><main class="container"><header class="header"><nav><ul><li><strong>Alex Mikhailov - Blog</strong></li></ul><ul><li><a href="/index.html">About</a></li><li><a href="/blog.html">Blog</a></li><li><a href="/rss.xml">RSS</a></li></ul></nav></header>
<div id="outline-container-org275e98a" class="outline-2"> <div id="outline-container-orgebf720e" class="outline-2">
<h2 id="org275e98a">Posts</h2> <h2 id="orgebf720e">Posts</h2>
<div class="outline-text-2" id="text-org275e98a"> <div class="outline-text-2" id="text-orgebf720e">
<ul class="org-ul"> <ul class="org-ul">
<li><a href="./posts/keeb.html">Keyboard journey</a></li> <li><a href="./posts/keeb.html">Keyboard journey</a></li>
<li><a href="./posts/about_blog.html">Org to HTML and back</a></li>
</ul> </ul>
</div> </div>
</div> </div>

View File

@ -3,9 +3,9 @@
<p><img src="./resources/images/index/avatar.jpg" alt="avatar.jpg" /> <p><img src="./resources/images/index/avatar.jpg" alt="avatar.jpg" />
</p> </p>
</div> </div>
<div id="outline-container-orga1cad29" class="outline-2"> <div id="outline-container-org59c4749" class="outline-2">
<h2 id="orga1cad29">&nbsp;</h2> <h2 id="org59c4749">&nbsp;</h2>
<div class="outline-text-2" id="text-orga1cad29"> <div class="outline-text-2" id="text-org59c4749">
<p> <p>
Full stack engineer Full stack engineer
FP-curious | λ-affected FP-curious | λ-affected
@ -13,9 +13,9 @@ Wanna be rustacean 🦀 and/or secops guy 🔒
</p> </p>
</div> </div>
</div> </div>
<div id="outline-container-orgd7b5d47" class="outline-2"> <div id="outline-container-orgcee66c8" class="outline-2">
<h2 id="orgd7b5d47">Experience</h2> <h2 id="orgcee66c8">Experience</h2>
<div class="outline-text-2" id="text-orgd7b5d47"> <div class="outline-text-2" id="text-orgcee66c8">
<ul class="org-ul"> <ul class="org-ul">
<li>Current position <a href="https://www.samsungfood.com/">@SamsungFood</a>. <li>Current position <a href="https://www.samsungfood.com/">@SamsungFood</a>.
Internal tools engineer for data platform ➡ Internal tools engineer for developers.</li> Internal tools engineer for data platform ➡ Internal tools engineer for developers.</li>
@ -24,9 +24,9 @@ Fullstack engineer.</li>
</ul> </ul>
</div> </div>
</div> </div>
<div id="outline-container-org86d497c" class="outline-2"> <div id="outline-container-orgfe726a9" class="outline-2">
<h2 id="org86d497c">Technologies</h2> <h2 id="orgfe726a9">Technologies</h2>
<div class="outline-text-2" id="text-org86d497c"> <div class="outline-text-2" id="text-orgfe726a9">
<p> <p>
Work with: Work with:
</p> </p>
@ -43,9 +43,9 @@ Work with:
</ul> </ul>
</div> </div>
</div> </div>
<div id="outline-container-orgf7918f7" class="outline-2"> <div id="outline-container-orgc7648e8" class="outline-2">
<h2 id="orgf7918f7">Contacts</h2> <h2 id="orgc7648e8">Contacts</h2>
<div class="outline-text-2" id="text-orgf7918f7"> <div class="outline-text-2" id="text-orgc7648e8">
<p> <p>
Contact me via: Contact me via:
</p> </p>

View File

@ -2,23 +2,564 @@
<h2>Table of Contents</h2> <h2>Table of Contents</h2>
<div id="text-table-of-contents"> <div id="text-table-of-contents">
<ul> <ul>
<li><a href="#orgc02584c">What is Org Mode?</a></li> <li><a href="#org5c8592e">Disclaimer</a></li>
<li><a href="#org113a31a">Why Org Mode?</a></li> <li><a href="#org9d1c8e9">What is Org?</a></li>
<li><a href="#org5e11ee9">Render Org to HTML</a></li> <li><a href="#org52de49a">Why Org Mode?</a></li>
<li><a href="#org29e4c5a">Publish through Github Action</a></li> <li><a href="#org19bf959">Render Org to blog or whatever</a>
<ul>
<li><a href="#org9b68e36">Render HTML</a></li>
<li><a href="#orgc9cedbe">Static files</a></li>
<li><a href="#org848650a">Whole build script</a></li>
</ul>
</li>
<li><a href="#org28ea185">Publish through GitHub Action</a>
<ul>
<li><a href="#orgac5aad7">Install Emacs</a></li>
<li><a href="#org50e163d">Just bring everything</a></li>
<li><a href="#org223a57a">BTW I use GNU Emacs</a></li>
</ul>
</li>
<li><a href="#orgdf8adf9">What is next</a>
<ul>
<li><a href="#orgc40ddde">RSS</a></li>
<li><a href="#org6cb2e70">Sitemap</a></li>
<li><a href="#org1a29aed">Code highlighting</a></li>
</ul>
</li>
</ul> </ul>
</div> </div>
</div> </div>
<div id="outline-container-orgc02584c" class="outline-2"> <div id="outline-container-org5c8592e" class="outline-2">
<h2 id="orgc02584c">What is Org Mode?</h2> <h2 id="org5c8592e">Disclaimer</h2>
<div class="outline-text-2" id="text-org5c8592e">
<p>
I'm neither proficient in Org Mode (further on "Org"), nor a good front-end engineer. I think that a simple solution is better than no solution. If you see a mistake, you can contact me via <a href="mailto:iam@fidonode.me">iam@fidonode.me</a>.
</p>
</div> </div>
<div id="outline-container-org113a31a" class="outline-2">
<h2 id="org113a31a">Why Org Mode?</h2>
</div> </div>
<div id="outline-container-org5e11ee9" class="outline-2"> <div id="outline-container-org9d1c8e9" class="outline-2">
<h2 id="org5e11ee9">Render Org to HTML</h2> <h2 id="org9d1c8e9">What is Org?</h2>
<div class="outline-text-2" id="text-org9d1c8e9">
<blockquote>
<p>
Your life in plain text
</p>
<p>
A GNU Emacs major mode for keeping notes, authoring documents, computational notebooks, literate programming, maintaining to-do lists, planning projects, and more — in a fast and effective plain text system.
</p>
</blockquote>
<p>
Everything you can do in Org is to write a text. With a special markup, of course. This makes it versatile and extensible.
</p>
</div>
</div>
<div id="outline-container-org52de49a" class="outline-2">
<h2 id="org52de49a">Why Org Mode?</h2>
<div class="outline-text-2" id="text-org52de49a">
<ol class="org-ol">
<li>Plain text.
Plain text as a data source offers significant versatility. You can read and understand what happens in org files without needing Emacs.</li>
<li>Everything tool.
Org Mode is a planner with an agenda, a to-do list, a note-taking app, a Jupyter Notebook-like tool, and a zettelkasten tool. You can manage almost every aspect of your life with Org Mode.</li>
<li>The only way to eat an elephant is piece by piece.
I do not have a habit of collecting and keeping information. I believe that discovering other aspects of Org Mode will lead me to better note-taking practices.</li>
</ol>
</div>
</div>
<div id="outline-container-org19bf959" class="outline-2">
<h2 id="org19bf959">Render Org to blog or whatever</h2>
<div class="outline-text-2" id="text-org19bf959">
<p>
Org already has a way to render files into HTML, allowing you to create simple HTML files with minimal styling. I'm not interesting in styling from org, so I decide to use <a href="https://picocss.com">picocss</a> framework.
</p>
</div>
<div id="outline-container-org9b68e36" class="outline-3">
<h3 id="org9b68e36">Render HTML</h3>
<div class="outline-text-3" id="text-org9b68e36">
<p>
I want to change some templates here and there. I've found <code>esxml</code> package. It is a decent DSL for writing XML/HTML.
Here is how page header and footer look in this DSL.
</p>
<div class="org-src-container">
<pre class="src src-elisp">(<span style="font-weight: bold;">defun</span> <span style="font-weight: bold;">my/header</span> (info)
`(header (@ (class <span style="font-style: italic;">"header"</span>))
(nav
(ul
(li
(strong
,(org-export-data (plist-get info <span style="font-weight: bold;">:title</span>) info))))
(ul
(li (a (@ (href <span style="font-style: italic;">"/index.html"</span>)) <span style="font-style: italic;">"About"</span>))
(li (a (@ (href <span style="font-style: italic;">"/blog.html"</span>)) <span style="font-style: italic;">"Blog"</span>))
(li (a (@ (href <span style="font-style: italic;">"/rss.xml"</span>)) <span style="font-style: italic;">"RSS"</span>))
)
))
)
(<span style="font-weight: bold;">defun</span> <span style="font-weight: bold;">my/footer</span> (info)
`(footer (@ (class <span style="font-style: italic;">"footer"</span>))
(hr)
(p <span style="font-style: italic;">"Alex Mikhailov"</span>)
(p <span style="font-style: italic;">"Built with: "</span>
(a (@ (href <span style="font-style: italic;">"https://www.gnu.org/software/emacs/"</span>)) <span style="font-style: italic;">"GNU Emacs"</span>) <span style="font-style: italic;">" "</span>
(a (@ (href <span style="font-style: italic;">"https://orgmode.org/"</span>)) <span style="font-style: italic;">"Org Mode"</span>) <span style="font-style: italic;">" "</span>
(a (@ (href <span style="font-style: italic;">"https://picocss.com/"</span>)) <span style="font-style: italic;">"picocss"</span>)
)
))
</pre>
</div>
<p>
Looks neat for me. At least I don't need to mess with string concatenation.
Whole template wiring looks like that. Not much, but it works and easy to maintain.
</p>
<div class="org-src-container">
<pre class="src src-elisp">(<span style="font-weight: bold;">defun</span> <span style="font-weight: bold;">my/template</span> (contents info)
(concat
<span style="font-style: italic;">"&lt;!DOCTYPE html&gt;"</span>
(sxml-to-xml
`(html (@ (lang <span style="font-style: italic;">"en"</span>))
(head
(meta (@ (charset <span style="font-style: italic;">"utf-8"</span>)))
(meta (@ (author <span style="font-style: italic;">"Alex Mikhailov"</span>)))
(meta (@ (name <span style="font-style: italic;">"viewport"</span>)
(content <span style="font-style: italic;">"width=device-width, initial-scale=1, shrink-to-fit=no"</span>)))
(meta (@ (name <span style="font-style: italic;">"color-scheme"</span>) (content <span style="font-style: italic;">"light dark"</span>)))
(meta (@ (http-equiv <span style="font-style: italic;">"content-language"</span>) (content <span style="font-style: italic;">"en-us"</span>)))
(meta (@ (name <span style="font-style: italic;">"description"</span>) (content <span style="font-style: italic;">"Personal page with a blog about my technical adventures"</span>)))
(link (@ (rel <span style="font-style: italic;">"icon"</span>) (type <span style="font-style: italic;">"image/x-icon"</span>) (href <span style="font-style: italic;">"/resources/favicon.ico"</span>)))
(link (@ (rel <span style="font-style: italic;">"stylesheet"</span>) (href <span style="font-style: italic;">"/resources/css/pico.sand.min.css"</span>)))
(script (@ (defer <span style="font-style: italic;">"true"</span>) (src <span style="font-style: italic;">"https://umami.dokutsu.xyz/script.js"</span>) (data-website-id <span style="font-style: italic;">"d52d9af1-0c7d-4531-84c6-0b9c2850011f"</span>)) ())
(title ,(org-export-data (plist-get info <span style="font-weight: bold;">:title</span>) info)))
(body
(main (@ (class <span style="font-style: italic;">"container"</span>))
,(my/header info)
(*RAW-STRING* ,contents)
,(my/footer info)
)
))
))
)
</pre>
</div>
<p>
Ok, now we need some additional steps to wire these templating function.
</p>
<div class="org-src-container">
<pre class="src src-elisp"><span style="font-weight: bold; font-style: italic;">;; </span><span style="font-weight: bold; font-style: italic;">Derive new backend with our custom tepmplating function</span>
<span style="font-weight: bold; font-style: italic;">;; </span><span style="font-weight: bold; font-style: italic;">We derive it from regular HTML backend</span>
(org-export-define-derived-backend 'my-html 'html
<span style="font-weight: bold;">:translate-alist</span> '((template . my/template)
))
<span style="font-weight: bold; font-style: italic;">;; </span><span style="font-weight: bold; font-style: italic;">Define publish function which uses our freshly derived backend</span>
(<span style="font-weight: bold;">defun</span> <span style="font-weight: bold;">my/publish-to-html</span> (plist filename pub-dir)
<span style="font-style: italic;">"Publish an Org file to HTML using the custom backend."</span>
(org-publish-org-to 'my-html filename <span style="font-style: italic;">".html"</span> plist pub-dir))
</pre>
</div>
<p>
So everything is almost done. Time to use our custom publishing function in projects list.
</p>
<div class="org-src-container">
<pre class="src src-elisp">(<span style="font-weight: bold;">setq</span> org-publish-project-alist
(list
(list <span style="font-style: italic;">"blog"</span>
<span style="font-weight: bold;">:recursive</span> t
<span style="font-weight: bold;">:base-directory</span> my/blog-src-path
<span style="font-weight: bold;">:publishing-directory</span> my/web-export-path
<span style="font-weight: bold;">:publishing-function</span> 'my/publish-to-html
<span style="font-weight: bold;">:html-html5-fancy</span> t
<span style="font-weight: bold;">:htmlized-source</span> t
<span style="font-weight: bold;">:with-author</span> nil
<span style="font-weight: bold;">:with-creator</span> t
<span style="font-weight: bold;">:with-toc</span> t
<span style="font-weight: bold;">:section-numbers</span> nil
<span style="font-weight: bold;">:time-stamp-file</span> nil
)
))
</pre>
</div>
</div>
</div>
<div id="outline-container-orgc9cedbe" class="outline-3">
<h3 id="orgc9cedbe">Static files</h3>
<div class="outline-text-3" id="text-orgc9cedbe">
<p>
Yep, you may want to publish some photos with your blog or any other static files.
</p>
<pre class="example">
(setq org-publish-project-alist
(list
(list "static"
:base-directory my/blog-src-path
:base-extension "css\\|js\\|png\\|jpg\\|jpeg\\|gif\\|pdf\\|ico\\|txt"
:publishing-directory my/web-export-path
:recursive t
:publishing-function 'org-publish-attachment
)
))
</pre>
<p>
Looks self explanatory.
</p>
</div>
</div>
<div id="outline-container-org848650a" class="outline-3">
<h3 id="org848650a">Whole build script</h3>
<div class="outline-text-3" id="text-org848650a">
<p>
Here is the whole elisp script which I use to publish my blog. It have some additional quirks to work with <code class="src src-sh">doomscript ./build-site.el</code>.
</p>
<div class="org-src-container">
<pre class="src src-elisp"><span style="font-weight: bold; font-style: italic;">;; </span><span style="font-weight: bold; font-style: italic;">Load the publishing system</span>
<span style="font-weight: bold; font-style: italic;">;; </span><span style="font-weight: bold; font-style: italic;">Configure environment</span>
<span style="font-weight: bold; font-style: italic;">;;</span>
(<span style="font-weight: bold;">setq</span> debug-on-error t)
(<span style="font-weight: bold;">let</span> ((default-directory (concat <span style="font-style: italic;">"~/.config/emacs/.local/straight/build-"</span> emacs-version <span style="font-style: italic;">"/"</span>)))
(normal-top-level-add-subdirs-to-load-path))
(add-to-list 'custom-theme-load-path
(concat <span style="font-style: italic;">"~/.config/emacs/.local/straight/build-"</span> emacs-version <span style="font-style: italic;">"/doom-themes"</span>))
(add-to-list 'custom-theme-load-path (concat <span style="font-style: italic;">"~/.config/emacs/.local/straight/build-"</span> emacs-version <span style="font-style: italic;">"/base16-theme"</span>))
(add-to-list 'custom-theme-load-path (concat <span style="font-style: italic;">"~/.config/emacs/.local/straight/build-"</span> emacs-version <span style="font-style: italic;">"/moe-theme"</span>))
(<span style="font-weight: bold;">require</span> '<span style="font-weight: bold; text-decoration: underline;">xml</span>)
(<span style="font-weight: bold;">require</span> '<span style="font-weight: bold; text-decoration: underline;">dom</span>)
(<span style="font-weight: bold;">require</span> '<span style="font-weight: bold; text-decoration: underline;">ox-publish</span>)
(<span style="font-weight: bold;">require</span> '<span style="font-weight: bold; text-decoration: underline;">ox-rss</span>)
(<span style="font-weight: bold;">require</span> '<span style="font-weight: bold; text-decoration: underline;">org</span>)
(<span style="font-weight: bold;">require</span> '<span style="font-weight: bold; text-decoration: underline;">esxml</span>)
<span style="font-weight: bold; font-style: italic;">;;</span>
<span style="font-weight: bold; font-style: italic;">;;</span><span style="font-weight: bold; font-style: italic;">Variables</span>
<span style="font-weight: bold; font-style: italic;">;;</span>
(<span style="font-weight: bold;">setq</span>
my/url <span style="font-style: italic;">"https://fidonode.me"</span>
my/web-export-path <span style="font-style: italic;">"./public"</span>
my/blog-src-path <span style="font-style: italic;">"./home/05 Blog"</span>
org-html-validation-link nil <span style="font-weight: bold; font-style: italic;">;; </span><span style="font-weight: bold; font-style: italic;">Don't show validation link</span>
org-html-htmlize-output-type 'inline-css
org-src-fontify-natively t)
<span style="font-weight: bold; font-style: italic;">;;</span>
<span style="font-weight: bold; font-style: italic;">;;</span><span style="font-weight: bold; font-style: italic;">Templates</span>
<span style="font-weight: bold; font-style: italic;">;;</span>
(<span style="font-weight: bold;">defun</span> <span style="font-weight: bold;">my/footer</span> (info)
`(footer (@ (class <span style="font-style: italic;">"footer"</span>))
(hr)
(p <span style="font-style: italic;">"Alex Mikhailov"</span>)
(p <span style="font-style: italic;">"Built with: "</span>
(a (@ (href <span style="font-style: italic;">"https://www.gnu.org/software/emacs/"</span>)) <span style="font-style: italic;">"GNU Emacs"</span>) <span style="font-style: italic;">" "</span>
(a (@ (href <span style="font-style: italic;">"https://orgmode.org/"</span>)) <span style="font-style: italic;">"Org Mode"</span>) <span style="font-style: italic;">" "</span>
(a (@ (href <span style="font-style: italic;">"https://picocss.com/"</span>)) <span style="font-style: italic;">"picocss"</span>)
)
))
(<span style="font-weight: bold;">defun</span> <span style="font-weight: bold;">my/header</span> (info)
`(header (@ (class <span style="font-style: italic;">"header"</span>))
(nav
(ul
(li
(strong
,(org-export-data (plist-get info <span style="font-weight: bold;">:title</span>) info))))
(ul
(li (a (@ (href <span style="font-style: italic;">"/index.html"</span>)) <span style="font-style: italic;">"About"</span>))
(li (a (@ (href <span style="font-style: italic;">"/blog.html"</span>)) <span style="font-style: italic;">"Blog"</span>))
(li (a (@ (href <span style="font-style: italic;">"/rss.xml"</span>)) <span style="font-style: italic;">"RSS"</span>))
)
))
)
(<span style="font-weight: bold;">defun</span> <span style="font-weight: bold;">my/template</span> (contents info)
(concat
<span style="font-style: italic;">"&lt;!DOCTYPE html&gt;"</span>
(sxml-to-xml
`(html (@ (lang <span style="font-style: italic;">"en"</span>))
(head
(meta (@ (charset <span style="font-style: italic;">"utf-8"</span>)))
(meta (@ (author <span style="font-style: italic;">"Alex Mikhailov"</span>)))
(meta (@ (name <span style="font-style: italic;">"viewport"</span>)
(content <span style="font-style: italic;">"width=device-width, initial-scale=1, shrink-to-fit=no"</span>)))
(meta (@ (name <span style="font-style: italic;">"color-scheme"</span>) (content <span style="font-style: italic;">"light dark"</span>)))
(meta (@ (http-equiv <span style="font-style: italic;">"content-language"</span>) (content <span style="font-style: italic;">"en-us"</span>)))
(meta (@ (name <span style="font-style: italic;">"description"</span>) (content <span style="font-style: italic;">"Personal page with a blog about my technical adventures"</span>)))
(link (@ (rel <span style="font-style: italic;">"icon"</span>) (type <span style="font-style: italic;">"image/x-icon"</span>) (href <span style="font-style: italic;">"/resources/favicon.ico"</span>)))
(link (@ (rel <span style="font-style: italic;">"stylesheet"</span>) (href <span style="font-style: italic;">"/resources/css/pico.sand.min.css"</span>)))
(script (@ (defer <span style="font-style: italic;">"true"</span>) (src <span style="font-style: italic;">"https://umami.dokutsu.xyz/script.js"</span>) (data-website-id <span style="font-style: italic;">"d52d9af1-0c7d-4531-84c6-0b9c2850011f"</span>)) ())
(title ,(org-export-data (plist-get info <span style="font-weight: bold;">:title</span>) info)))
(body
(main (@ (class <span style="font-style: italic;">"container"</span>))
,(my/header info)
(*RAW-STRING* ,contents)
,(my/footer info)
)
))
))
)
(org-export-define-derived-backend 'my-html 'html
<span style="font-weight: bold;">:translate-alist</span> '((template . my/template)
))
(<span style="font-weight: bold;">defun</span> <span style="font-weight: bold;">my/publish-to-html</span> (plist filename pub-dir)
<span style="font-style: italic;">"Publish an Org file to HTML using the custom backend."</span>
(org-publish-org-to 'my-html filename <span style="font-style: italic;">".html"</span> plist pub-dir))
<span style="font-weight: bold; font-style: italic;">;;</span>
<span style="font-weight: bold; font-style: italic;">;;</span><span style="font-weight: bold; font-style: italic;">Helpers</span>
<span style="font-weight: bold; font-style: italic;">;;</span>
(<span style="font-weight: bold;">defun</span> <span style="font-weight: bold;">my/format-date-subtitle</span> (file project)
<span style="font-style: italic;">"Format the date found in FILE of PROJECT."</span>
(format-time-string <span style="font-style: italic;">"posted on %Y-%m-%d"</span> (org-publish-find-date file project)))
<span style="font-weight: bold; font-style: italic;">;;</span>
<span style="font-weight: bold; font-style: italic;">;;</span><span style="font-weight: bold; font-style: italic;">Clear folder with results</span>
<span style="font-weight: bold; font-style: italic;">;;</span>
(<span style="font-weight: bold;">when</span> (file-directory-p my/web-export-path)
(delete-directory my/web-export-path t))
(mkdir my/web-export-path)
<span style="font-weight: bold; font-style: italic;">;;</span>
<span style="font-weight: bold; font-style: italic;">;;</span><span style="font-weight: bold; font-style: italic;">Main blog configuration</span>
<span style="font-weight: bold; font-style: italic;">;;</span>
(<span style="font-weight: bold;">setq</span> org-publish-project-alist
(list
(list <span style="font-style: italic;">"static"</span>
<span style="font-weight: bold;">:base-directory</span> my/blog-src-path
<span style="font-weight: bold;">:base-extension</span> <span style="font-style: italic;">"css</span><span style="font-weight: bold; font-style: italic;">\\</span><span style="font-weight: bold; font-style: italic;">|</span><span style="font-style: italic;">js</span><span style="font-weight: bold; font-style: italic;">\\</span><span style="font-weight: bold; font-style: italic;">|</span><span style="font-style: italic;">png</span><span style="font-weight: bold; font-style: italic;">\\</span><span style="font-weight: bold; font-style: italic;">|</span><span style="font-style: italic;">jpg</span><span style="font-weight: bold; font-style: italic;">\\</span><span style="font-weight: bold; font-style: italic;">|</span><span style="font-style: italic;">jpeg</span><span style="font-weight: bold; font-style: italic;">\\</span><span style="font-weight: bold; font-style: italic;">|</span><span style="font-style: italic;">gif</span><span style="font-weight: bold; font-style: italic;">\\</span><span style="font-weight: bold; font-style: italic;">|</span><span style="font-style: italic;">pdf</span><span style="font-weight: bold; font-style: italic;">\\</span><span style="font-weight: bold; font-style: italic;">|</span><span style="font-style: italic;">ico</span><span style="font-weight: bold; font-style: italic;">\\</span><span style="font-weight: bold; font-style: italic;">|</span><span style="font-style: italic;">txt"</span>
<span style="font-weight: bold;">:publishing-directory</span> my/web-export-path
<span style="font-weight: bold;">:recursive</span> t
<span style="font-weight: bold;">:publishing-function</span> 'org-publish-attachment
)
(list <span style="font-style: italic;">"blog"</span>
<span style="font-weight: bold;">:recursive</span> t
<span style="font-weight: bold;">:base-directory</span> my/blog-src-path
<span style="font-weight: bold;">:publishing-directory</span> my/web-export-path
<span style="font-weight: bold;">:publishing-function</span> 'my/publish-to-html
<span style="font-weight: bold;">:html-html5-fancy</span> t
<span style="font-weight: bold;">:htmlized-source</span> t
<span style="font-weight: bold;">:with-author</span> nil
<span style="font-weight: bold;">:with-creator</span> t
<span style="font-weight: bold;">:with-toc</span> t
<span style="font-weight: bold;">:section-numbers</span> nil
<span style="font-weight: bold;">:time-stamp-file</span> nil
)
))
<span style="font-weight: bold; font-style: italic;">;; </span><span style="font-weight: bold; font-style: italic;">Generate the site output</span>
(org-publish-all t)
(message <span style="font-style: italic;">"Build complete!"</span>)
</pre>
</div>
</div>
</div>
</div>
<div id="outline-container-org28ea185" class="outline-2">
<h2 id="org28ea185">Publish through GitHub Action</h2>
<div class="outline-text-2" id="text-org28ea185">
<p>
With all previous preparations, this step sounds simple like: <code class="src src-sh">emacs -Q --script ./build-site.el</code>
I've chosen a pretty standard way to publish static sites through GitHub Pages. Since I keep my Org files in a private repo, I need some additional steps to address it. I use the <code>peaceiris/actions-gh-pages@v3</code> action to publish from my Org repo to the Pages repo.
However, since I use <code>Doom Emacs</code> as my configuration framework, we need to address some more problems.
</p>
</div>
<div id="outline-container-orgac5aad7" class="outline-3">
<h3 id="orgac5aad7">Install Emacs</h3>
<div class="outline-text-3" id="text-orgac5aad7">
<p>
If you want to run <code>Emacs Lisp</code>, you need the whole Emacs, at least without GUI. In a GitHub Action, you can simply run:
</p>
<div class="org-src-container">
<pre class="src src-sh">sudo apt install emacs-nox --yes
</pre>
</div>
<p>
This way has a downside - you will install Emacs on each action run since the system state is disposable.
</p>
</div>
</div>
<div id="outline-container-org50e163d" class="outline-3">
<h3 id="org50e163d">Just bring everything</h3>
<div class="outline-text-3" id="text-org50e163d">
<p>
I need to take extra steps since I use Doom Emacs and have my configs in Org. You may also need to install dependencies for your configuration.
</p>
<p>
Fetch doom guts
</p>
<div class="org-src-container">
<pre class="src src-sh">git clone --depth 1 https://github.com/doomemacs/doomemacs ~/.config/emacs
</pre>
</div>
<p>
Prepare minimal config for rendering Org file to config.
</p>
<div class="org-src-container">
<pre class="src src-sh"><span style="font-weight: bold;">echo</span> <span style="font-style: italic;">'(doom! :config literate)'</span> &gt; ~/.config/doom/init.el
<span style="font-weight: bold;">echo</span> <span style="font-style: italic;">'(setq +literate-config-file "'</span>$(<span style="font-weight: bold;">pwd</span>)<span style="font-style: italic;">'/config/config.org")'</span> &gt; ~/.config/doom/cli.el
</pre>
</div>
<p>
Finally, install all dependencies according to my config. Yes, it is overhead, but I can be sure that I have the same dependencies as on my dev machine.
</p>
<div class="org-src-container">
<pre class="src src-sh">~/.config/emacs/bin/doom sync -B
</pre>
</div>
<p>
Of course, I use a caching step to make the whole process faster:
</p>
<div class="org-src-container">
<pre class="src src-yaml">- name: Cache doom-emacs
uses: actions/cache@v4
id: cache-doom-save
with:
path: ~/.config/emacs
key: ${{ runner.os }}-doom
</pre>
</div>
</div>
</div>
<div id="outline-container-org223a57a" class="outline-3">
<h3 id="org223a57a">BTW I use GNU Emacs</h3>
<div class="outline-text-3" id="text-org223a57a">
<p>
Here's the whole publishing workflow.
</p>
<div class="org-src-container">
<pre class="src src-yaml">name: pages
on:
push:
branches:
- "main"
# Do not trigger build on changes in other folders
paths-ignore:
- "./home/02 Action"
- "./home/03 PKM"
- "./home/04 Log"
- "./home/06 Projects"
workflow_dispatch:
jobs:
build:
runs-on: ubuntu-latest
steps:
- name: Check out
uses: actions/checkout@v1
#Install emacs without GUI components
- name: Install Emacs
run: sudo apt install emacs-nox --yes
#Clone doomemacs. Yep, always the most fresh master. Let it fire.
- name: Install doom
run: git clone --depth 1 https://github.com/doomemacs/doomemacs ~/.config/emacs
# Use cached files to shave some time
- name: Restore cached doom-emacs
id: cache-doom-restore
uses: actions/cache/restore@v4
with:
path: ~/.config/emacs
key: ${{ runner.os }}-doom
- name: Create folder
run: mkdir -p ~/.config/doom/
# I use literate config, so we need some extra steps to botstrap my config
- name: Put template for literate config
run: echo '(doom! :config literate)' &gt; ~/.config/doom/init.el
# Yep. I also keep my emacs config in org in my org repo
- name: Propagate org conf
run: echo '(setq +literate-config-file "'$(pwd)'/config/config.org")' &gt; ~/.config/doom/cli.el
# Build doomemacs deps. Should be relativelly fast, cause almost everything cached.
- name: Sync doom
run: ~/.config/emacs/bin/doom sync -B
#Put files into cache
- name: Cache doom-emacs
uses: actions/cache@v4
id: cache-doom-save
with:
path: ~/.config/emacs
key: ${{ runner.os }}-doom
- name: Build the site
run: ~/.config/emacs/bin/doomscript ./build-site.el
# Deploy from this repo to that ~external_repository~
- name: Deploy
uses: peaceiris/actions-gh-pages@v3
with:
deploy_key: ${{ secrets.PRIVATE_KEY }}
external_repository: fido-node/fido-node.github.io
publish_branch: gh-pages
publish_dir: ./public
</pre>
</div>
</div>
</div>
</div>
<div id="outline-container-orgdf8adf9" class="outline-2">
<h2 id="orgdf8adf9">What is next</h2>
<div class="outline-text-2" id="text-orgdf8adf9">
<p>
I have a plans to make posts about next features:
</p>
</div>
<div id="outline-container-orgc40ddde" class="outline-3">
<h3 id="orgc40ddde">RSS</h3>
<div class="outline-text-3" id="text-orgc40ddde">
<p>
Already implemented. Need to document process.
</p>
</div>
</div>
<div id="outline-container-org6cb2e70" class="outline-3">
<h3 id="org6cb2e70">Sitemap</h3>
<div class="outline-text-3" id="text-org6cb2e70">
<p>
Not implemented yet.
</p>
</div>
</div>
<div id="outline-container-org1a29aed" class="outline-3">
<h3 id="org1a29aed">Code highlighting</h3>
<div class="outline-text-3" id="text-org1a29aed">
<p>
Only rudimentary highlight. Want something fancier.
</p>
</div>
</div> </div>
<div id="outline-container-org29e4c5a" class="outline-2">
<h2 id="org29e4c5a">Publish through Github Action</h2>
</div> </div>
<footer class="footer"><hr/><p>Alex Mikhailov</p><p>Built with: <a href="https://www.gnu.org/software/emacs/">GNU Emacs</a> <a href="https://orgmode.org/">Org Mode</a> <a href="https://picocss.com/">picocss</a></p></footer></main></body></html> <footer class="footer"><hr/><p>Alex Mikhailov</p><p>Built with: <a href="https://www.gnu.org/software/emacs/">GNU Emacs</a> <a href="https://orgmode.org/">Org Mode</a> <a href="https://picocss.com/">picocss</a></p></footer></main></body></html>

View File

@ -2,51 +2,51 @@
<h2>Table of Contents</h2> <h2>Table of Contents</h2>
<div id="text-table-of-contents"> <div id="text-table-of-contents">
<ul> <ul>
<li><a href="#org6911359">My end-game (at least I hope) keyboard</a> <li><a href="#orga36c269">My end-game (at least I hope) keyboard</a>
<ul> <ul>
<li><a href="#org1542794">Keebs path</a> <li><a href="#orgd5b32ce">Keebs path</a>
<ul> <ul>
<li><a href="#org14e9694">Dactyl manuform</a></li> <li><a href="#org00ba7c0">Dactyl manuform</a></li>
<li><a href="#org88423d0">Moonlander</a></li> <li><a href="#orgb39c74f">Moonlander</a></li>
<li><a href="#org5a8ebcc">Custom Corne</a></li> <li><a href="#orgf658c1f">Custom Corne</a></li>
<li><a href="#org7e7fd47">Dactyl manuform again</a></li> <li><a href="#org139fe00">Dactyl manuform again</a></li>
</ul> </ul>
</li> </li>
<li><a href="#orgd6543bd">Hardware</a> <li><a href="#orgb920717">Hardware</a>
<ul> <ul>
<li><a href="#orgc33afa7">Body</a></li> <li><a href="#orge168561">Body</a></li>
<li><a href="#org023bee8">Switches and caps</a></li> <li><a href="#org494db86">Switches and caps</a></li>
<li><a href="#orgf9df5ce">Controllers</a></li> <li><a href="#org17001ce">Controllers</a></li>
<li><a href="#org2248c0e">Amoeba things</a></li> <li><a href="#org6c2c7db">Amoeba things</a></li>
</ul> </ul>
</li> </li>
<li><a href="#orgdafd1dc">Software</a> <li><a href="#org719fa2c">Software</a>
<ul> <ul>
<li><a href="#orgf0a0dc5">Plain default - QMK</a></li> <li><a href="#orgaa447ab">Plain default - QMK</a></li>
<li><a href="#orgd6167e6">Make own layout</a></li> <li><a href="#orge6971ad">Make own layout</a></li>
</ul> </ul>
</li> </li>
<li><a href="#orgda11d84">Whats next?</a></li> <li><a href="#orgf364e4d">Whats next?</a></li>
</ul> </ul>
</li> </li>
</ul> </ul>
</div> </div>
</div> </div>
<div id="outline-container-org6911359" class="outline-2"> <div id="outline-container-orga36c269" class="outline-2">
<h2 id="org6911359">My end-game (at least I hope) keyboard</h2> <h2 id="orga36c269">My end-game (at least I hope) keyboard</h2>
<div class="outline-text-2" id="text-org6911359"> <div class="outline-text-2" id="text-orga36c269">
</div> </div>
<div id="outline-container-org1542794" class="outline-3"> <div id="outline-container-orgd5b32ce" class="outline-3">
<h3 id="org1542794">Keebs path</h3> <h3 id="orgd5b32ce">Keebs path</h3>
<div class="outline-text-3" id="text-org1542794"> <div class="outline-text-3" id="text-orgd5b32ce">
<p> <p>
Sometimes I think about the long journey I've made with keebs. In childhood, I had decent membrane keyboards, most of which had an ergonomic profile like the MS. Not sure if it somehow affected my taste because I started my career with the simplest, cheapest board and typed countless lines of code on such keebs. Then I heard about clickity-clack mechanical keyboards and decided to try one. It was a simple Chinese keeb with a thick metal body, double-shot caps, and Cherry Brown switches. A decent thing to annoy everyone around you. I think this purchase marked my dive into mech keebs Sometimes I think about the long journey I've made with keebs. In childhood, I had decent membrane keyboards, most of which had an ergonomic profile like the MS. Not sure if it somehow affected my taste because I started my career with the simplest, cheapest board and typed countless lines of code on such keebs. Then I heard about clickity-clack mechanical keyboards and decided to try one. It was a simple Chinese keeb with a thick metal body, double-shot caps, and Cherry Brown switches. A decent thing to annoy everyone around you. I think this purchase marked my dive into mech keebs
I'm not a geeky aficionado who thinks you can fix everything with a new keyboard, but I built a couple of them. I hope I've finally built the last one for quite some time. I'm not a geeky aficionado who thinks you can fix everything with a new keyboard, but I built a couple of them. I hope I've finally built the last one for quite some time.
</p> </p>
</div> </div>
<div id="outline-container-org14e9694" class="outline-4"> <div id="outline-container-org00ba7c0" class="outline-4">
<h4 id="org14e9694">Dactyl manuform</h4> <h4 id="org00ba7c0">Dactyl manuform</h4>
<div class="outline-text-4" id="text-org14e9694"> <div class="outline-text-4" id="text-org00ba7c0">
<p> <p>
Almost all of the time, I struggle with my maximalism. So I decided to build the ultimate mechanical ergonomic split keyboard and chose the Dactyl Manuform. Sounds like a crazy idea. Zero experience with QMK, zero experience with hand-wired keyboards, and zero experience in 3D printing. Almost all of the time, I struggle with my maximalism. So I decided to build the ultimate mechanical ergonomic split keyboard and chose the Dactyl Manuform. Sounds like a crazy idea. Zero experience with QMK, zero experience with hand-wired keyboards, and zero experience in 3D printing.
The last problem was the easiest one; I just asked my friend to print the bodies from PETG polymer, and Bob's your uncle. I got two pieces of rough-layered plastic with all the support structures. God, it was a nightmare to clean these prints from supports and small artifacts, but I was happy. The last problem was the easiest one; I just asked my friend to print the bodies from PETG polymer, and Bob's your uncle. I got two pieces of rough-layered plastic with all the support structures. God, it was a nightmare to clean these prints from supports and small artifacts, but I was happy.
@ -92,9 +92,9 @@ To be honest, this keeb was ugly, and I decided that I wanted a beautiful factor
</p> </p>
</div> </div>
</div> </div>
<div id="outline-container-org88423d0" class="outline-4"> <div id="outline-container-orgb39c74f" class="outline-4">
<h4 id="org88423d0">Moonlander</h4> <h4 id="orgb39c74f">Moonlander</h4>
<div class="outline-text-4" id="text-org88423d0"> <div class="outline-text-4" id="text-orgb39c74f">
<p> <p>
Nothing special. Ordered, paid, got it, tried it. Everything worked. Looked good. Happy year of typing. Bored. Annoyed. Too big and chunky. No concave. Quality not the best. Started planning the next one. Nothing special. Ordered, paid, got it, tried it. Everything worked. Looked good. Happy year of typing. Bored. Annoyed. Too big and chunky. No concave. Quality not the best. Started planning the next one.
</p> </p>
@ -107,9 +107,9 @@ Nothing special. Ordered, paid, got it, tried it. Everything worked. Looked good
</div> </div>
</div> </div>
<div id="outline-container-org5a8ebcc" class="outline-4"> <div id="outline-container-orgf658c1f" class="outline-4">
<h4 id="org5a8ebcc">Custom Corne</h4> <h4 id="orgf658c1f">Custom Corne</h4>
<div class="outline-text-4" id="text-org5a8ebcc"> <div class="outline-text-4" id="text-orgf658c1f">
<p> <p>
This journey started with discovering the Jian keyboard. It is a niche keeb from the Ru community focused on full support of the whole Russian layout. It was originally created by KGOH. I missed the group buy and decided that I could easily patch a Corne board with two additional keys to mimic the Jian. This journey started with discovering the Jian keyboard. It is a niche keeb from the Ru community focused on full support of the whole Russian layout. It was originally created by KGOH. I missed the group buy and decided that I could easily patch a Corne board with two additional keys to mimic the Jian.
Interesting journey. I learned how to use KiCad, and how to export gerbers. Interesting journey. I learned how to use KiCad, and how to export gerbers.
@ -158,9 +158,9 @@ Daily driver for ~6 months. Then the world changed, and I decided to leave my ho
</p> </p>
</div> </div>
</div> </div>
<div id="outline-container-org7e7fd47" class="outline-4"> <div id="outline-container-org139fe00" class="outline-4">
<h4 id="org7e7fd47">Dactyl manuform again</h4> <h4 id="org139fe00">Dactyl manuform again</h4>
<div class="outline-text-4" id="text-org7e7fd47"> <div class="outline-text-4" id="text-org139fe00">
<p> <p>
Two years late I've settled down in new country and decide that I want to bring back my dactyl manuform experience. Two years late I've settled down in new country and decide that I want to bring back my dactyl manuform experience.
</p> </p>
@ -174,13 +174,13 @@ Two years late I've settled down in new country and decide that I want to bring
</div> </div>
</div> </div>
<div id="outline-container-orgd6543bd" class="outline-3"> <div id="outline-container-orgb920717" class="outline-3">
<h3 id="orgd6543bd">Hardware</h3> <h3 id="orgb920717">Hardware</h3>
<div class="outline-text-3" id="text-orgd6543bd"> <div class="outline-text-3" id="text-orgb920717">
</div> </div>
<div id="outline-container-orgc33afa7" class="outline-4"> <div id="outline-container-orge168561" class="outline-4">
<h4 id="orgc33afa7">Body</h4> <h4 id="orge168561">Body</h4>
<div class="outline-text-4" id="text-orgc33afa7"> <div class="outline-text-4" id="text-orge168561">
<p> <p>
I've choose to use a <a href="https://ryanis.cool/dactyl/#manuform">Ryan's generator</a> and generate body on top of Corne preset with all keys in last row and disabled stagger for the last two columns. <a href="https://ryanis.cool/dactyl/#manuform:CiUIBhAEGgp0aHJlZS1taW5pIgRmdWxsKgNib3gyBm5vcm1pZTgAGgoIARIEbm9uZRgAIhdVAACAQBgAIABdAADgQGUAAEBAQABIADL5AZUDAAAgQJ0DAACAP4ADAIgDAA0AAAAAFQAAAAAdMzMzQCUAANDALQAAUME1AADAQD0AAAAARQAAAABNAADAQFUAAEDAXQAA4EBlMzNhwm0zMy3CdQAAvMF45wKAAc0YiAHIJJUBMzMXwp0BMzNdwqUBZmbKwagBnwuwAZkXuAH8JcUBAABQws0BAADQwdUBAABAwdgBnATgAfMX6AGQHPUBAADowf0BAAAkwoUCAABQwYgCmwSQAvMXmALgIaUCAAAMwq0CAABwwbUCAAAAwLgChAfAApUQyAKEB9UCAABAwd0CAACAweUCAABAQOgChAfwApUQ+AKEBw==">Generator preset</a> I've choose to use a <a href="https://ryanis.cool/dactyl/#manuform">Ryan's generator</a> and generate body on top of Corne preset with all keys in last row and disabled stagger for the last two columns. <a href="https://ryanis.cool/dactyl/#manuform:CiUIBhAEGgp0aHJlZS1taW5pIgRmdWxsKgNib3gyBm5vcm1pZTgAGgoIARIEbm9uZRgAIhdVAACAQBgAIABdAADgQGUAAEBAQABIADL5AZUDAAAgQJ0DAACAP4ADAIgDAA0AAAAAFQAAAAAdMzMzQCUAANDALQAAUME1AADAQD0AAAAARQAAAABNAADAQFUAAEDAXQAA4EBlMzNhwm0zMy3CdQAAvMF45wKAAc0YiAHIJJUBMzMXwp0BMzNdwqUBZmbKwagBnwuwAZkXuAH8JcUBAABQws0BAADQwdUBAABAwdgBnATgAfMX6AGQHPUBAADowf0BAAAkwoUCAABQwYgCmwSQAvMXmALgIaUCAAAMwq0CAABwwbUCAAAAwLgChAfAApUQyAKEB9UCAABAwd0CAACAweUCAABAQOgChAfwApUQ+AKEBw==">Generator preset</a>
The body was printed by JLC3DP (JLCPCB printing department). I've choose <a href="https://jlc3dp.com/help/article/502-Precimid-1172-Pro">SLS from nylon</a>. Print has minor artifacts; I expected better quality. The body was printed by JLC3DP (JLCPCB printing department). I've choose <a href="https://jlc3dp.com/help/article/502-Precimid-1172-Pro">SLS from nylon</a>. Print has minor artifacts; I expected better quality.
@ -216,9 +216,9 @@ Overall, I'm happy with results. I also printed bottom plates and <a href="https
</div> </div>
</div> </div>
<div id="outline-container-org023bee8" class="outline-4"> <div id="outline-container-org494db86" class="outline-4">
<h4 id="org023bee8">Switches and caps</h4> <h4 id="org494db86">Switches and caps</h4>
<div class="outline-text-4" id="text-org023bee8"> <div class="outline-text-4" id="text-org494db86">
<p> <p>
I've chosen Kailh BOX Navy switches. I really like the clickity-clack sound. They have a dedicated clickbar to produce this sound, and the box profile helps with moving down perpendicularly. I've chosen Kailh BOX Navy switches. I really like the clickity-clack sound. They have a dedicated clickbar to produce this sound, and the box profile helps with moving down perpendicularly.
</p> </p>
@ -234,9 +234,9 @@ The caps are inherited from the Moonlander. They are thick, double-shot caps wit
</p> </p>
</div> </div>
</div> </div>
<div id="outline-container-orgf9df5ce" class="outline-4"> <div id="outline-container-org17001ce" class="outline-4">
<h4 id="orgf9df5ce">Controllers</h4> <h4 id="org17001ce">Controllers</h4>
<div class="outline-text-4" id="text-orgf9df5ce"> <div class="outline-text-4" id="text-org17001ce">
<p> <p>
I used a bootleg Pro Micro called Tenstar Robot, based on the ATmega32u4. It's perfectly supported by QMK, pin-to-pin and size-compatible with the Pro Micro. I used a bootleg Pro Micro called Tenstar Robot, based on the ATmega32u4. It's perfectly supported by QMK, pin-to-pin and size-compatible with the Pro Micro.
</p> </p>
@ -249,9 +249,9 @@ I used a bootleg Pro Micro called Tenstar Robot, based on the ATmega32u4. It's p
</div> </div>
</div> </div>
<div id="outline-container-org2248c0e" class="outline-4"> <div id="outline-container-org6c2c7db" class="outline-4">
<h4 id="org2248c0e">Amoeba things</h4> <h4 id="org6c2c7db">Amoeba things</h4>
<div class="outline-text-4" id="text-org2248c0e"> <div class="outline-text-4" id="text-org6c2c7db">
<p> <p>
During this build, I decided that I did not want to make a big mess of wires and chose Amoeba single-switch PCBs. During this build, I decided that I did not want to make a big mess of wires and chose Amoeba single-switch PCBs.
</p> </p>
@ -281,13 +281,13 @@ They are nice, have diodes on board, and simplify wiring. However, they have the
</div> </div>
</div> </div>
<div id="outline-container-orgdafd1dc" class="outline-3"> <div id="outline-container-org719fa2c" class="outline-3">
<h3 id="orgdafd1dc">Software</h3> <h3 id="org719fa2c">Software</h3>
<div class="outline-text-3" id="text-orgdafd1dc"> <div class="outline-text-3" id="text-org719fa2c">
</div> </div>
<div id="outline-container-orgf0a0dc5" class="outline-4"> <div id="outline-container-orgaa447ab" class="outline-4">
<h4 id="orgf0a0dc5">Plain default - QMK</h4> <h4 id="orgaa447ab">Plain default - QMK</h4>
<div class="outline-text-4" id="text-orgf0a0dc5"> <div class="outline-text-4" id="text-orgaa447ab">
<p> <p>
Prerequiremets: Prerequiremets:
<a href="https://docs.qmk.fm/cli">QMK CLI</a> <a href="https://docs.qmk.fm/cli">QMK CLI</a>
@ -313,9 +313,9 @@ You may want to create a separate keyboard entry in QMK.
</div> </div>
</div> </div>
<div id="outline-container-orgd6167e6" class="outline-4"> <div id="outline-container-orge6971ad" class="outline-4">
<h4 id="orgd6167e6">Make own layout</h4> <h4 id="orge6971ad">Make own layout</h4>
<div class="outline-text-4" id="text-orgd6167e6"> <div class="outline-text-4" id="text-orge6971ad">
<p> <p>
I'll try to go through setting of my personal layout. It is based on <a href="http://www.keyboard-layout-editor.com/#/gists/4b6c2af67148f58ddd6c6b2976c4370f">Jian layout</a>. I'll try to go through setting of my personal layout. It is based on <a href="http://www.keyboard-layout-editor.com/#/gists/4b6c2af67148f58ddd6c6b2976c4370f">Jian layout</a>.
</p> </p>
@ -487,8 +487,8 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
</div> </div>
</div> </div>
</div> </div>
<div id="outline-container-orgda11d84" class="outline-3"> <div id="outline-container-orgf364e4d" class="outline-3">
<h3 id="orgda11d84">Whats next?</h3> <h3 id="orgf364e4d">Whats next?</h3>
</div> </div>
</div> </div>
<footer class="footer"><hr/><p>Alex Mikhailov</p><p>Built with: <a href="https://www.gnu.org/software/emacs/">GNU Emacs</a> <a href="https://orgmode.org/">Org Mode</a> <a href="https://picocss.com/">picocss</a></p></footer></main></body></html> <footer class="footer"><hr/><p>Alex Mikhailov</p><p>Built with: <a href="https://www.gnu.org/software/emacs/">GNU Emacs</a> <a href="https://orgmode.org/">Org Mode</a> <a href="https://picocss.com/">picocss</a></p></footer></main></body></html>

View File

@ -2,17 +2,14 @@
<h2>Table of Contents</h2> <h2>Table of Contents</h2>
<div id="text-table-of-contents"> <div id="text-table-of-contents">
<ul> <ul>
<li><a href="#orge9ad76c">My keyboard journey</a></li> <li><a href="#org2c01a78">My keyboard journey</a></li>
</ul> </ul>
</div> </div>
</div> </div>
<div id="outline-container-orge9ad76c" class="outline-2"> <div id="outline-container-org2c01a78" class="outline-2">
<h2 id="orge9ad76c"><a href="file:///home/fido-node/org/home/05 Blog/posts/keeb.html">My keyboard journey</a></h2> <h2 id="org2c01a78"><a href="file:///home/fido-node/org/home/05 Blog/posts/keeb.html">My keyboard journey</a></h2>
<div class="outline-text-2" id="text-orge9ad76c"> <div class="outline-text-2" id="text-org2c01a78">
<p>
My end-game (at least I hope) keyboard&#x2026;
</p>
</div> </div>
</div> </div>
<footer class="footer"><hr/><p>Alex Mikhailov</p><p>Built with: <a href="https://www.gnu.org/software/emacs/">GNU Emacs</a> <a href="https://orgmode.org/">Org Mode</a> <a href="https://picocss.com/">picocss</a></p></footer></main></body></html> <footer class="footer"><hr/><p>Alex Mikhailov</p><p>Built with: <a href="https://www.gnu.org/software/emacs/">GNU Emacs</a> <a href="https://orgmode.org/">Org Mode</a> <a href="https://picocss.com/">picocss</a></p></footer></main></body></html>

View File

@ -14,8 +14,8 @@
<link>https://fidonode.me</link> <link>https://fidonode.me</link>
<description><![CDATA[]]></description> <description><![CDATA[]]></description>
<language>en</language> <language>en</language>
<pubDate>Sat, 15 Jun 2024 15:24:44 +0000</pubDate> <pubDate>Sat, 22 Jun 2024 11:50:06 +0000</pubDate>
<lastBuildDate>Sat, 15 Jun 2024 15:24:44 +0000</lastBuildDate> <lastBuildDate>Sat, 22 Jun 2024 11:50:06 +0000</lastBuildDate>
<generator>Emacs 27.1 Org-mode 9.3</generator> <generator>Emacs 27.1 Org-mode 9.3</generator>
<webMaster>iam@fidonode.me (Alex M)</webMaster> <webMaster>iam@fidonode.me (Alex M)</webMaster>
<image> <image>
@ -30,7 +30,7 @@
<link>https://fidonode.me/posts/keeb.html</link> <link>https://fidonode.me/posts/keeb.html</link>
<author>iam@fidonode.me (Alex M)</author> <author>iam@fidonode.me (Alex M)</author>
<guid isPermaLink="false">https://fidonode.me/posts/keeb.html</guid> <guid isPermaLink="false">https://fidonode.me/posts/keeb.html</guid>
<pubDate>Sat, 15 Jun 2024 00:00:00 +0000</pubDate> <pubDate>Sat, 22 Jun 2024 00:00:00 +0000</pubDate>
<description><![CDATA[]]></description> <description><![CDATA[]]></description>
</item> </item>