<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Posts on NakuRei's Notes</title><link>https://notes.nakurei.com/en/post/</link><description>Recent content in Posts on NakuRei's Notes</description><generator>Hugo -- gohugo.io</generator><language>en</language><copyright>NakuRei</copyright><lastBuildDate>Sat, 17 Oct 2026 09:04:30 +0000</lastBuildDate><atom:link href="https://notes.nakurei.com/en/post/index.xml" rel="self" type="application/rss+xml"/><item><title>Notes on Migrating from Volta to mise</title><link>https://notes.nakurei.com/en/post/migrate-volta-to-mise/</link><pubDate>Sat, 17 Oct 2026 10:04:13 +0900</pubDate><guid>https://notes.nakurei.com/en/post/migrate-volta-to-mise/</guid><description>&lt;img src="https://notes.nakurei.com/post/migrate-volta-to-mise/image.png" alt="Featured image of post Notes on Migrating from Volta to mise" /&gt;&lt;h2 id="what-is-this"&gt;&#10; What is this&lt;a href="#what-is-this"&gt;&#10; &lt;img src="https://notes.nakurei.com/icons/link.svg" width="44" height="44" style="width: 0.9em; margin-left: 0.25em; margin-bottom: -0.12em;" alt="Link to this heading" /&gt;&#10; &lt;/a&gt;&lt;/h2&gt;&#10;&lt;p&gt;Notes on migrating from Volta to mise.&lt;/p&gt;&#10;&lt;p&gt;I knew that &lt;a class="link" href="https://github.com/volta-cli/volta" target="_blank" rel="noopener"&#10; &gt;Volta is no longer maintained&lt;/a&gt;, but it was still sitting on a PC I had not booted up in a while, so I migrated to mise.&lt;/p&gt;&#10;&lt;h2 id="removing-volta"&gt;&#10; Removing Volta&lt;a href="#removing-volta"&gt;&#10; &lt;img src="https://notes.nakurei.com/icons/link.svg" width="44" height="44" style="width: 0.9em; margin-left: 0.25em; margin-bottom: -0.12em;" alt="Link to this heading" /&gt;&#10; &lt;/a&gt;&lt;/h2&gt;&#10;&lt;p&gt;Follow the official instructions.&lt;/p&gt;&#10;&#10; &#10; &#10; &lt;div&#10; class="url-card"&#10; style="&#10; display: flex;&#10; height: 100%;&#10; width: 100%;&#10; margin-top: 10px;&#10; margin-bottom: 10px;&#10; padding: 10px;&#10; border: solid 1px var(--table-border-color);&#10; border-radius: 0.5rem;&#10; overflow: hidden;&#10; "&#10; &gt;&#10; &lt;a&#10; href="https://docs.volta.sh/advanced/uninstall"&#10; target="_blank"&#10; rel="noopener noreferrer"&#10; style="&#10; display: flex;&#10; width: 100%;&#10; height: 100%;&#10; text-decoration: none;&#10; "&#10; class="linkcard"&#10; &gt;&#10; &#10; &lt;img&#10; src="https://notes.nakurei.com/icons/photo-off.svg"&#10; alt="Uninstalling Volta | Volta image"&#10; width="120"&#10; height="120"&#10; loading="lazy"&#10; decoding="async"&#10; style="&#10; max-width: 200px;&#10; max-height: 120px;&#10; object-fit: cover;&#10; margin: 0;&#10; flex-shrink: 0;&#10; "&gt;&#10; &#10;&#10; &lt;div&#10; style="&#10; display: flex;&#10; flex-direction: column;&#10; align-items: start;&#10; justify-content: center;&#10; margin-left: 12px;&#10; "&#10; &gt;&#10; &lt;p style="margin: 0; padding-left: 0; padding-bottom: 3px; border: none"&gt;&#10; &#10; Uninstalling Volta | Volta&#10; &#10; &lt;/p&gt;&#10; &lt;p&#10; style="&#10; margin: 0;&#10; font-size: 12px;&#10; word-break: break-word;&#10; display: -webkit-box;&#10; display: box;&#10; -webkit-box-orient: vertical;&#10; box-orient: vertical;&#10; -webkit-line-clamp: 3;&#10; line-clamp: 3;&#10; overflow: hidden;&#10; "&#10; &gt;Uninstalling Volta&lt;/p&gt;&#10; &lt;div&#10; style="&#10; display: flex;&#10; flex-direction: row;&#10; align-items: center;&#10; gap: 2px;&#10; "&#10; &gt;&lt;img&#10; src="https://notes.nakurei.com/remote/favicon-355c6027dee89063b435acf1c90892f40fbd1cfa.png"&#10; width="14"&#10; height="14"&#10; style="margin-right: 2px;"&#10; alt="docs.volta.sh favicon image"&#10; /&gt;&lt;span style="font-size: small; color: var(--card-text-color-tertiary);"&gt;&#10; docs.volta.sh&#10; &lt;/span&gt;&#10; &lt;/div&gt;&#10; &lt;/div&gt;&#10; &lt;/a&gt;&#10; &lt;/div&gt;&lt;style&gt;&#10; .url-card:hover {&#10; box-shadow: 0 0 0 1px var(--card-text-color-tertiary);&#10; }&#10;&lt;/style&gt;&#10;&#10;&lt;p&gt;Before you start, check what you had installed with &lt;code&gt;volta list&lt;/code&gt;.&lt;/p&gt;&#10;&lt;style&gt;&#10; .code-block-filename {&#10; --code-filename-fontsize: calc(0.96em * 0.9);&#10;&#10; display: table;&#10; max-width: 100%;&#10; background: var(--accent-color-darker);&#10; color: var(--accent-color-text);&#10; font-size: var(--code-filename-fontsize);&#10; line-height: 1;&#10; padding-top: calc(var(--code-filename-fontsize) * 0.5);&#10; padding-left: calc(var(--code-filename-fontsize) * 0.7);&#10; padding-right: calc(var(--code-filename-fontsize) * 0.7);&#10; padding-bottom: calc(var(--code-filename-fontsize) * 0.7);&#10; border-radius: calc(var(--code-filename-fontsize) * 0.5)&#10; calc(var(--code-filename-fontsize) * 0.5) 0 0;&#10; }&#10; .code-block-content {&#10; padding-top: 0px;&#10; }&#10;&lt;/style&gt;&#10;&#10;&lt;div&gt;&#10; &lt;div class="code-block-content"&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-sh" data-lang="sh"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;volta list&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&#10; &lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;details&gt;&#10; &lt;summary&gt;Log from the time&lt;/summary&gt;&#10; &lt;p&gt;&lt;style&gt;&#10; .code-block-filename {&#10; --code-filename-fontsize: calc(0.96em * 0.9);&#10;&#10; display: table;&#10; max-width: 100%;&#10; background: var(--accent-color-darker);&#10; color: var(--accent-color-text);&#10; font-size: var(--code-filename-fontsize);&#10; line-height: 1;&#10; padding-top: calc(var(--code-filename-fontsize) * 0.5);&#10; padding-left: calc(var(--code-filename-fontsize) * 0.7);&#10; padding-right: calc(var(--code-filename-fontsize) * 0.7);&#10; padding-bottom: calc(var(--code-filename-fontsize) * 0.7);&#10; border-radius: calc(var(--code-filename-fontsize) * 0.5)&#10; calc(var(--code-filename-fontsize) * 0.5) 0 0;&#10; }&#10; .code-block-content {&#10; padding-top: 0px;&#10; }&#10;&lt;/style&gt;&#10;&#10;&lt;div&gt;&#10; &lt;div class="code-block-content"&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-sh" data-lang="sh"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;$ volta list&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;⚡️ Currently active tools:&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; Node: v22.21.0 &lt;span class="o"&gt;(&lt;/span&gt;default&lt;span class="o"&gt;)&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; Tool binaries available:&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; codex &lt;span class="o"&gt;(&lt;/span&gt;default&lt;span class="o"&gt;)&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;See options &lt;span class="k"&gt;for&lt;/span&gt; more detailed reports by running &lt;span class="sb"&gt;`&lt;/span&gt;volta list --help&lt;span class="sb"&gt;`&lt;/span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&#10; &lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;/p&gt;&#10;&lt;/details&gt;&#10;&#10;&lt;p&gt;Then uninstall it. First, delete the whole directory with &lt;code&gt;rm -rf ~/.volta&lt;/code&gt;.&lt;/p&gt;&#10;&lt;style&gt;&#10; .code-block-filename {&#10; --code-filename-fontsize: calc(0.96em * 0.9);&#10;&#10; display: table;&#10; max-width: 100%;&#10; background: var(--accent-color-darker);&#10; color: var(--accent-color-text);&#10; font-size: var(--code-filename-fontsize);&#10; line-height: 1;&#10; padding-top: calc(var(--code-filename-fontsize) * 0.5);&#10; padding-left: calc(var(--code-filename-fontsize) * 0.7);&#10; padding-right: calc(var(--code-filename-fontsize) * 0.7);&#10; padding-bottom: calc(var(--code-filename-fontsize) * 0.7);&#10; border-radius: calc(var(--code-filename-fontsize) * 0.5)&#10; calc(var(--code-filename-fontsize) * 0.5) 0 0;&#10; }&#10; .code-block-content {&#10; padding-top: 0px;&#10; }&#10;&lt;/style&gt;&#10;&#10;&lt;div&gt;&#10; &lt;div class="code-block-content"&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-sh" data-lang="sh"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;rm -rf ~/.volta&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&#10; &lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;p&gt;Next, remove the Volta-related lines from your shell profile, such as &lt;code&gt;.bashrc&lt;/code&gt; or &lt;code&gt;.bash_profile&lt;/code&gt;.&#10;In my environment, I removed the following from &lt;code&gt;.bashrc&lt;/code&gt; and &lt;code&gt;.profile&lt;/code&gt;.&lt;/p&gt;&#10;&lt;style&gt;&#10; .code-block-filename {&#10; --code-filename-fontsize: calc(0.96em * 0.9);&#10;&#10; display: table;&#10; max-width: 100%;&#10; background: var(--accent-color-darker);&#10; color: var(--accent-color-text);&#10; font-size: var(--code-filename-fontsize);&#10; line-height: 1;&#10; padding-top: calc(var(--code-filename-fontsize) * 0.5);&#10; padding-left: calc(var(--code-filename-fontsize) * 0.7);&#10; padding-right: calc(var(--code-filename-fontsize) * 0.7);&#10; padding-bottom: calc(var(--code-filename-fontsize) * 0.7);&#10; border-radius: calc(var(--code-filename-fontsize) * 0.5)&#10; calc(var(--code-filename-fontsize) * 0.5) 0 0;&#10; }&#10; .code-block-content {&#10; padding-top: 0px;&#10; }&#10;&lt;/style&gt;&#10;&#10;&lt;div&gt;&#10; &lt;div class="code-block-content"&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-sh" data-lang="sh"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nb"&gt;export&lt;/span&gt; &lt;span class="nv"&gt;VOLTA_HOME&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;&lt;/span&gt;&lt;span class="nv"&gt;$HOME&lt;/span&gt;&lt;span class="s2"&gt;/.volta&amp;#34;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nb"&gt;export&lt;/span&gt; &lt;span class="nv"&gt;PATH&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;&lt;/span&gt;&lt;span class="nv"&gt;$VOLTA_HOME&lt;/span&gt;&lt;span class="s2"&gt;/bin:&lt;/span&gt;&lt;span class="nv"&gt;$PATH&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&#10; &lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;p&gt;If needed, restart your shell or run something like &lt;code&gt;source ~/.bashrc&lt;/code&gt; to apply the changes.&lt;/p&gt;&#10;&lt;h2 id="installing-mise"&gt;&#10; Installing mise&lt;a href="#installing-mise"&gt;&#10; &lt;img src="https://notes.nakurei.com/icons/link.svg" width="44" height="44" style="width: 0.9em; margin-left: 0.25em; margin-bottom: -0.12em;" alt="Link to this heading" /&gt;&#10; &lt;/a&gt;&lt;/h2&gt;&#10;&lt;p&gt;Follow the official instructions.&lt;/p&gt;&#10;&#10; &#10; &lt;div&#10; class="url-card"&#10; style="&#10; display: flex;&#10; height: 100%;&#10; width: 100%;&#10; margin-top: 10px;&#10; margin-bottom: 10px;&#10; padding: 10px;&#10; border: solid 1px var(--table-border-color);&#10; border-radius: 0.5rem;&#10; overflow: hidden;&#10; "&#10; &gt;&#10; &lt;a&#10; href="https://mise.jdx.dev/installing-mise.html"&#10; target="_blank"&#10; rel="noopener noreferrer"&#10; style="&#10; display: flex;&#10; width: 100%;&#10; height: 100%;&#10; text-decoration: none;&#10; "&#10; class="linkcard"&#10; &gt;&#10; &#10; &lt;img&#10; src="https://notes.nakurei.com/remote/d59e43d36ef11fea26e497ae5e0d6d159c5220e4_hu_137bce5aadf95e57.webp"&#10; alt="Installing mise | mise-en-place image"&#10; width="120"&#10; height="120"&#10; loading="lazy"&#10; decoding="async"&#10; style="&#10; max-width: 200px;&#10; max-height: 120px;&#10; object-fit: cover;&#10; margin: 0;&#10; flex-shrink: 0;&#10; "&gt;&#10; &#10;&#10; &lt;div&#10; style="&#10; display: flex;&#10; flex-direction: column;&#10; align-items: start;&#10; justify-content: center;&#10; margin-left: 12px;&#10; "&#10; &gt;&#10; &lt;p style="margin: 0; padding-left: 0; padding-bottom: 3px; border: none"&gt;&#10; &#10; Installing mise | mise-en-place&#10; &#10; &lt;/p&gt;&#10; &lt;p&#10; style="&#10; margin: 0;&#10; font-size: 12px;&#10; word-break: break-word;&#10; display: -webkit-box;&#10; display: box;&#10; -webkit-box-orient: vertical;&#10; box-orient: vertical;&#10; -webkit-line-clamp: 3;&#10; line-clamp: 3;&#10; overflow: hidden;&#10; "&#10; &gt;Install mise on macOS, Linux, or Windows, verify the executable, and keep it up to date.&lt;/p&gt;&#10; &lt;div&#10; style="&#10; display: flex;&#10; flex-direction: row;&#10; align-items: center;&#10; gap: 2px;&#10; "&#10; &gt;&lt;img&#10; src="https://notes.nakurei.com/remote/favicon-ebca40a56bd78d971c44234ebe0717e91a0eb3d1.png"&#10; width="14"&#10; height="14"&#10; style="margin-right: 2px;"&#10; alt="mise.jdx.dev favicon image"&#10; /&gt;&lt;span style="font-size: small; color: var(--card-text-color-tertiary);"&gt;&#10; mise.jdx.dev&#10; &lt;/span&gt;&#10; &lt;/div&gt;&#10; &lt;/div&gt;&#10; &lt;/a&gt;&#10; &lt;/div&gt;&lt;style&gt;&#10; .url-card:hover {&#10; box-shadow: 0 0 0 1px var(--card-text-color-tertiary);&#10; }&#10;&lt;/style&gt;&#10;&#10;&lt;p&gt;Install mise.&lt;/p&gt;&#10;&lt;style&gt;&#10; .code-block-filename {&#10; --code-filename-fontsize: calc(0.96em * 0.9);&#10;&#10; display: table;&#10; max-width: 100%;&#10; background: var(--accent-color-darker);&#10; color: var(--accent-color-text);&#10; font-size: var(--code-filename-fontsize);&#10; line-height: 1;&#10; padding-top: calc(var(--code-filename-fontsize) * 0.5);&#10; padding-left: calc(var(--code-filename-fontsize) * 0.7);&#10; padding-right: calc(var(--code-filename-fontsize) * 0.7);&#10; padding-bottom: calc(var(--code-filename-fontsize) * 0.7);&#10; border-radius: calc(var(--code-filename-fontsize) * 0.5)&#10; calc(var(--code-filename-fontsize) * 0.5) 0 0;&#10; }&#10; .code-block-content {&#10; padding-top: 0px;&#10; }&#10;&lt;/style&gt;&#10;&#10;&lt;div&gt;&#10; &lt;div class="code-block-content"&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-sh" data-lang="sh"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;curl -fsSL https://mise.run &lt;span class="p"&gt;|&lt;/span&gt; sh&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&#10; &lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;details&gt;&#10; &lt;summary&gt;Log from the time&lt;/summary&gt;&#10; &lt;p&gt;&lt;style&gt;&#10; .code-block-filename {&#10; --code-filename-fontsize: calc(0.96em * 0.9);&#10;&#10; display: table;&#10; max-width: 100%;&#10; background: var(--accent-color-darker);&#10; color: var(--accent-color-text);&#10; font-size: var(--code-filename-fontsize);&#10; line-height: 1;&#10; padding-top: calc(var(--code-filename-fontsize) * 0.5);&#10; padding-left: calc(var(--code-filename-fontsize) * 0.7);&#10; padding-right: calc(var(--code-filename-fontsize) * 0.7);&#10; padding-bottom: calc(var(--code-filename-fontsize) * 0.7);&#10; border-radius: calc(var(--code-filename-fontsize) * 0.5)&#10; calc(var(--code-filename-fontsize) * 0.5) 0 0;&#10; }&#10; .code-block-content {&#10; padding-top: 0px;&#10; }&#10;&lt;/style&gt;&#10;&#10;&lt;div&gt;&#10; &lt;div class="code-block-content"&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-sh" data-lang="sh"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;$ curl -fsSL https://mise.run &lt;span class="p"&gt;|&lt;/span&gt; sh&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;mise: selected 2026.10.11 &lt;span class="o"&gt;(&lt;/span&gt;minimum release age: 24h&lt;span class="o"&gt;)&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;mise: installing mise...&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;######################################################################## 100.0%&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;mise: installed successfully to /home/user/.local/bin/mise&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;mise: run the following to activate mise in your shell:&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nb"&gt;echo&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;eval \&amp;#34;\$(/home/user/.local/bin/mise activate bash)\&amp;#34;&amp;#34;&lt;/span&gt; &amp;gt;&amp;gt; ~/.bashrc&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;mise: run &lt;span class="sb"&gt;`&lt;/span&gt;mise doctor&lt;span class="sb"&gt;`&lt;/span&gt; to verify this is &lt;span class="nb"&gt;set&lt;/span&gt; up correctly&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&#10; &lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;/p&gt;&#10;&lt;/details&gt;&#10;&#10;&lt;p&gt;The installation log says &lt;code&gt;run the following to activate mise in your shell:&lt;/code&gt;, so run that too.&lt;/p&gt;&#10;&lt;style&gt;&#10; .code-block-filename {&#10; --code-filename-fontsize: calc(0.96em * 0.9);&#10;&#10; display: table;&#10; max-width: 100%;&#10; background: var(--accent-color-darker);&#10; color: var(--accent-color-text);&#10; font-size: var(--code-filename-fontsize);&#10; line-height: 1;&#10; padding-top: calc(var(--code-filename-fontsize) * 0.5);&#10; padding-left: calc(var(--code-filename-fontsize) * 0.7);&#10; padding-right: calc(var(--code-filename-fontsize) * 0.7);&#10; padding-bottom: calc(var(--code-filename-fontsize) * 0.7);&#10; border-radius: calc(var(--code-filename-fontsize) * 0.5)&#10; calc(var(--code-filename-fontsize) * 0.5) 0 0;&#10; }&#10; .code-block-content {&#10; padding-top: 0px;&#10; }&#10;&lt;/style&gt;&#10;&#10;&lt;div&gt;&#10; &lt;div class="code-block-content"&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-sh" data-lang="sh"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nb"&gt;echo&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;eval \&amp;#34;\$(/home/user/.local/bin/mise activate bash)\&amp;#34;&amp;#34;&lt;/span&gt; &amp;gt;&amp;gt; ~/.bashrc&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&#10; &lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;p&gt;Since &lt;code&gt;.bashrc&lt;/code&gt; has been edited, apply the changes.&lt;/p&gt;&#10;&lt;style&gt;&#10; .code-block-filename {&#10; --code-filename-fontsize: calc(0.96em * 0.9);&#10;&#10; display: table;&#10; max-width: 100%;&#10; background: var(--accent-color-darker);&#10; color: var(--accent-color-text);&#10; font-size: var(--code-filename-fontsize);&#10; line-height: 1;&#10; padding-top: calc(var(--code-filename-fontsize) * 0.5);&#10; padding-left: calc(var(--code-filename-fontsize) * 0.7);&#10; padding-right: calc(var(--code-filename-fontsize) * 0.7);&#10; padding-bottom: calc(var(--code-filename-fontsize) * 0.7);&#10; border-radius: calc(var(--code-filename-fontsize) * 0.5)&#10; calc(var(--code-filename-fontsize) * 0.5) 0 0;&#10; }&#10; .code-block-content {&#10; padding-top: 0px;&#10; }&#10;&lt;/style&gt;&#10;&#10;&lt;div&gt;&#10; &lt;div class="code-block-content"&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-sh" data-lang="sh"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nb"&gt;source&lt;/span&gt; ~/.bashrc&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&#10; &lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;p&gt;After that, run &lt;code&gt;mise doctor&lt;/code&gt; to check the setup. If it prints &lt;code&gt;No problems found&lt;/code&gt;, you are good to go.&lt;/p&gt;&#10;&lt;h2 id="installing-global-tools"&gt;&#10; Installing global tools&lt;a href="#installing-global-tools"&gt;&#10; &lt;img src="https://notes.nakurei.com/icons/link.svg" width="44" height="44" style="width: 0.9em; margin-left: 0.25em; margin-bottom: -0.12em;" alt="Link to this heading" /&gt;&#10; &lt;/a&gt;&lt;/h2&gt;&#10;&lt;p&gt;Reinstall the global tools you had under Volta with mise.&lt;/p&gt;&#10;&lt;p&gt;For example, to install &lt;code&gt;node&lt;/code&gt;, do the following.&lt;/p&gt;&#10;&lt;style&gt;&#10; .code-block-filename {&#10; --code-filename-fontsize: calc(0.96em * 0.9);&#10;&#10; display: table;&#10; max-width: 100%;&#10; background: var(--accent-color-darker);&#10; color: var(--accent-color-text);&#10; font-size: var(--code-filename-fontsize);&#10; line-height: 1;&#10; padding-top: calc(var(--code-filename-fontsize) * 0.5);&#10; padding-left: calc(var(--code-filename-fontsize) * 0.7);&#10; padding-right: calc(var(--code-filename-fontsize) * 0.7);&#10; padding-bottom: calc(var(--code-filename-fontsize) * 0.7);&#10; border-radius: calc(var(--code-filename-fontsize) * 0.5)&#10; calc(var(--code-filename-fontsize) * 0.5) 0 0;&#10; }&#10; .code-block-content {&#10; padding-top: 0px;&#10; }&#10;&lt;/style&gt;&#10;&#10;&lt;div&gt;&#10; &lt;div class="code-block-content"&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-sh" data-lang="sh"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;mise use -g node@latest&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&#10; &lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;p&gt;You can check the installed global tools with &lt;code&gt;mise list&lt;/code&gt;.&lt;/p&gt;&#10;&lt;style&gt;&#10; .code-block-filename {&#10; --code-filename-fontsize: calc(0.96em * 0.9);&#10;&#10; display: table;&#10; max-width: 100%;&#10; background: var(--accent-color-darker);&#10; color: var(--accent-color-text);&#10; font-size: var(--code-filename-fontsize);&#10; line-height: 1;&#10; padding-top: calc(var(--code-filename-fontsize) * 0.5);&#10; padding-left: calc(var(--code-filename-fontsize) * 0.7);&#10; padding-right: calc(var(--code-filename-fontsize) * 0.7);&#10; padding-bottom: calc(var(--code-filename-fontsize) * 0.7);&#10; border-radius: calc(var(--code-filename-fontsize) * 0.5)&#10; calc(var(--code-filename-fontsize) * 0.5) 0 0;&#10; }&#10; .code-block-content {&#10; padding-top: 0px;&#10; }&#10;&lt;/style&gt;&#10;&#10;&lt;div&gt;&#10; &lt;div class="code-block-content"&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-sh" data-lang="sh"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;mise list&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&#10; &lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;p&gt;For example, it looks like this.&lt;/p&gt;&#10;&lt;style&gt;&#10; .code-block-filename {&#10; --code-filename-fontsize: calc(0.96em * 0.9);&#10;&#10; display: table;&#10; max-width: 100%;&#10; background: var(--accent-color-darker);&#10; color: var(--accent-color-text);&#10; font-size: var(--code-filename-fontsize);&#10; line-height: 1;&#10; padding-top: calc(var(--code-filename-fontsize) * 0.5);&#10; padding-left: calc(var(--code-filename-fontsize) * 0.7);&#10; padding-right: calc(var(--code-filename-fontsize) * 0.7);&#10; padding-bottom: calc(var(--code-filename-fontsize) * 0.7);&#10; border-radius: calc(var(--code-filename-fontsize) * 0.5)&#10; calc(var(--code-filename-fontsize) * 0.5) 0 0;&#10; }&#10; .code-block-content {&#10; padding-top: 0px;&#10; }&#10;&lt;/style&gt;&#10;&#10;&lt;div&gt;&#10; &lt;div class="code-block-content"&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-sh" data-lang="sh"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;$ mise list&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Tool Version Source Requested&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;codex 0.163.0 ~/.config/mise/config.toml latest&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;node 26.12.0 ~/.config/mise/config.toml latest&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&#10; &lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;h2 id="references-and-urls"&gt;&#10; References and URLs&lt;a href="#references-and-urls"&gt;&#10; &lt;img src="https://notes.nakurei.com/icons/link.svg" width="44" height="44" style="width: 0.9em; margin-left: 0.25em; margin-bottom: -0.12em;" alt="Link to this heading" /&gt;&#10; &lt;/a&gt;&lt;/h2&gt;&#10;&lt;p&gt;&#10; &#10; &#10; &lt;div&#10; class="url-card"&#10; style="&#10; display: flex;&#10; height: 100%;&#10; width: 100%;&#10; margin-top: 10px;&#10; margin-bottom: 10px;&#10; padding: 10px;&#10; border: solid 1px var(--table-border-color);&#10; border-radius: 0.5rem;&#10; overflow: hidden;&#10; "&#10; &gt;&#10; &lt;a&#10; href="https://docs.volta.sh/advanced/uninstall"&#10; target="_blank"&#10; rel="noopener noreferrer"&#10; style="&#10; display: flex;&#10; width: 100%;&#10; height: 100%;&#10; text-decoration: none;&#10; "&#10; class="linkcard"&#10; &gt;&#10; &#10; &lt;img&#10; src="https://notes.nakurei.com/icons/photo-off.svg"&#10; alt="Uninstalling Volta | Volta image"&#10; width="120"&#10; height="120"&#10; loading="lazy"&#10; decoding="async"&#10; style="&#10; max-width: 200px;&#10; max-height: 120px;&#10; object-fit: cover;&#10; margin: 0;&#10; flex-shrink: 0;&#10; "&gt;&#10; &#10;&#10; &lt;div&#10; style="&#10; display: flex;&#10; flex-direction: column;&#10; align-items: start;&#10; justify-content: center;&#10; margin-left: 12px;&#10; "&#10; &gt;&#10; &lt;p style="margin: 0; padding-left: 0; padding-bottom: 3px; border: none"&gt;&#10; &#10; Uninstalling Volta | Volta&#10; &#10; &lt;/p&gt;&#10; &lt;p&#10; style="&#10; margin: 0;&#10; font-size: 12px;&#10; word-break: break-word;&#10; display: -webkit-box;&#10; display: box;&#10; -webkit-box-orient: vertical;&#10; box-orient: vertical;&#10; -webkit-line-clamp: 3;&#10; line-clamp: 3;&#10; overflow: hidden;&#10; "&#10; &gt;Uninstalling Volta&lt;/p&gt;&#10; &lt;div&#10; style="&#10; display: flex;&#10; flex-direction: row;&#10; align-items: center;&#10; gap: 2px;&#10; "&#10; &gt;&lt;img&#10; src="https://notes.nakurei.com/remote/favicon-355c6027dee89063b435acf1c90892f40fbd1cfa.png"&#10; width="14"&#10; height="14"&#10; style="margin-right: 2px;"&#10; alt="docs.volta.sh favicon image"&#10; /&gt;&lt;span style="font-size: small; color: var(--card-text-color-tertiary);"&gt;&#10; docs.volta.sh&#10; &lt;/span&gt;&#10; &lt;/div&gt;&#10; &lt;/div&gt;&#10; &lt;/a&gt;&#10; &lt;/div&gt;&lt;style&gt;&#10; .url-card:hover {&#10; box-shadow: 0 0 0 1px var(--card-text-color-tertiary);&#10; }&#10;&lt;/style&gt;&#10;&#10;&#10; &#10; &lt;div&#10; class="url-card"&#10; style="&#10; display: flex;&#10; height: 100%;&#10; width: 100%;&#10; margin-top: 10px;&#10; margin-bottom: 10px;&#10; padding: 10px;&#10; border: solid 1px var(--table-border-color);&#10; border-radius: 0.5rem;&#10; overflow: hidden;&#10; "&#10; &gt;&#10; &lt;a&#10; href="https://mise.jdx.dev/installing-mise.html"&#10; target="_blank"&#10; rel="noopener noreferrer"&#10; style="&#10; display: flex;&#10; width: 100%;&#10; height: 100%;&#10; text-decoration: none;&#10; "&#10; class="linkcard"&#10; &gt;&#10; &#10; &lt;img&#10; src="https://notes.nakurei.com/remote/d59e43d36ef11fea26e497ae5e0d6d159c5220e4_hu_137bce5aadf95e57.webp"&#10; alt="Installing mise | mise-en-place image"&#10; width="120"&#10; height="120"&#10; loading="lazy"&#10; decoding="async"&#10; style="&#10; max-width: 200px;&#10; max-height: 120px;&#10; object-fit: cover;&#10; margin: 0;&#10; flex-shrink: 0;&#10; "&gt;&#10; &#10;&#10; &lt;div&#10; style="&#10; display: flex;&#10; flex-direction: column;&#10; align-items: start;&#10; justify-content: center;&#10; margin-left: 12px;&#10; "&#10; &gt;&#10; &lt;p style="margin: 0; padding-left: 0; padding-bottom: 3px; border: none"&gt;&#10; &#10; Installing mise | mise-en-place&#10; &#10; &lt;/p&gt;&#10; &lt;p&#10; style="&#10; margin: 0;&#10; font-size: 12px;&#10; word-break: break-word;&#10; display: -webkit-box;&#10; display: box;&#10; -webkit-box-orient: vertical;&#10; box-orient: vertical;&#10; -webkit-line-clamp: 3;&#10; line-clamp: 3;&#10; overflow: hidden;&#10; "&#10; &gt;Install mise on macOS, Linux, or Windows, verify the executable, and keep it up to date.&lt;/p&gt;&#10; &lt;div&#10; style="&#10; display: flex;&#10; flex-direction: row;&#10; align-items: center;&#10; gap: 2px;&#10; "&#10; &gt;&lt;img&#10; src="https://notes.nakurei.com/remote/favicon-ebca40a56bd78d971c44234ebe0717e91a0eb3d1.png"&#10; width="14"&#10; height="14"&#10; style="margin-right: 2px;"&#10; alt="mise.jdx.dev favicon image"&#10; /&gt;&lt;span style="font-size: small; color: var(--card-text-color-tertiary);"&gt;&#10; mise.jdx.dev&#10; &lt;/span&gt;&#10; &lt;/div&gt;&#10; &lt;/div&gt;&#10; &lt;/a&gt;&#10; &lt;/div&gt;&lt;style&gt;&#10; .url-card:hover {&#10; box-shadow: 0 0 0 1px var(--card-text-color-tertiary);&#10; }&#10;&lt;/style&gt;&#10;&lt;/p&gt;&#10;</description></item><item><title>Fixing Voicemeeter Banana's AUX Input Showing "no driver present" and Producing No Sound</title><link>https://notes.nakurei.com/en/post/voicemeeter-aux-no-driver-present/</link><pubDate>Sat, 26 Sep 2026 16:29:38 +0900</pubDate><guid>https://notes.nakurei.com/en/post/voicemeeter-aux-no-driver-present/</guid><description>&lt;img src="https://notes.nakurei.com/post/voicemeeter-aux-no-driver-present/image.webp" alt="Featured image of post Fixing Voicemeeter Banana's AUX Input Showing "no driver present" and Producing No Sound" /&gt;&lt;h2 id="what-this-is"&gt;&#10; What this is&lt;a href="#what-this-is"&gt;&#10; &lt;img src="https://notes.nakurei.com/icons/link.svg" width="44" height="44" style="width: 0.9em; margin-left: 0.25em; margin-bottom: -0.12em;" alt="Link to this heading" /&gt;&#10; &lt;/a&gt;&lt;/h2&gt;&#10;&lt;p&gt;This is a note on how I fixed an issue with &lt;a class="link" href="https://vb-audio.com/Voicemeeter/banana.htm" target="_blank" rel="noopener"&#10; &gt;Voicemeeter Banana&lt;/a&gt; where its virtual audio I/O, Voicemeeter AUX Input, suddenly started showing &amp;ldquo;no driver present&amp;rdquo; in red and stopped producing any sound.&lt;/p&gt;&#10;&lt;p&gt;&lt;img alt="Voicemeeter AUX Input showing “no driver present” in red" class="gallery-image" data-flex-basis="397px" data-flex-grow="165" height="619" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://notes.nakurei.com/post/voicemeeter-aux-no-driver-present/2026-09-12_203643.png" srcset="https://notes.nakurei.com/post/voicemeeter-aux-no-driver-present/2026-09-12_203643_hu_ee5a210bc8f20ef3.png 800w, https://notes.nakurei.com/post/voicemeeter-aux-no-driver-present/2026-09-12_203643.png 1024w" width="1024"&gt;&lt;/p&gt;&#10;&lt;h2 id="environment"&gt;&#10; Environment&lt;a href="#environment"&gt;&#10; &lt;img src="https://notes.nakurei.com/icons/link.svg" width="44" height="44" style="width: 0.9em; margin-left: 0.25em; margin-bottom: -0.12em;" alt="Link to this heading" /&gt;&#10; &lt;/a&gt;&lt;/h2&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;OS: Windows 11 Pro 25H2&lt;/li&gt;&#10;&lt;li&gt;Voicemeeter Banana: I don&amp;rsquo;t remember the exact version&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;h2 id="symptoms"&gt;&#10; Symptoms&lt;a href="#symptoms"&gt;&#10; &lt;img src="https://notes.nakurei.com/icons/link.svg" width="44" height="44" style="width: 0.9em; margin-left: 0.25em; margin-bottom: -0.12em;" alt="Link to this heading" /&gt;&#10; &lt;/a&gt;&lt;/h2&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;As shown in the screenshot above, &amp;ldquo;no driver present&amp;rdquo; appeared in red under Voicemeeter AUX Input.&lt;/li&gt;&#10;&lt;li&gt;No sound came through Voicemeeter AUX Input, regardless of what I routed to it.&lt;/li&gt;&#10;&lt;li&gt;The Voicemeeter application itself remained responsive and could be operated normally.&lt;/li&gt;&#10;&lt;li&gt;Voicemeeter Input, the other Virtual Input, continued to work normally and produced audio without any issues.&lt;/li&gt;&#10;&lt;li&gt;The HARDWARE INPUT section also worked normally and received audio as expected.&lt;/li&gt;&#10;&lt;li&gt;I could run Restart Audio Engine, but it did not resolve the issue.&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;h2 id="cause"&gt;&#10; Cause&lt;a href="#cause"&gt;&#10; &lt;img src="https://notes.nakurei.com/icons/link.svg" width="44" height="44" style="width: 0.9em; margin-left: 0.25em; margin-bottom: -0.12em;" alt="Link to this heading" /&gt;&#10; &lt;/a&gt;&lt;/h2&gt;&#10;&lt;p&gt;The issue appears to have been caused by an incomplete Voicemeeter Banana update, which left the old VAIO drivers installed alongside the current Voicemeeter configuration.&lt;/p&gt;&#10;&lt;p&gt;In other words, the application and its virtual audio drivers were no longer in a consistent state.&lt;/p&gt;&#10;&lt;h2 id="what-i-checked"&gt;&#10; What I checked&lt;a href="#what-i-checked"&gt;&#10; &lt;img src="https://notes.nakurei.com/icons/link.svg" width="44" height="44" style="width: 0.9em; margin-left: 0.25em; margin-bottom: -0.12em;" alt="Link to this heading" /&gt;&#10; &lt;/a&gt;&lt;/h2&gt;&#10;&lt;p&gt;I opened the Sound control panel by pressing &lt;code&gt;Windows + R&lt;/code&gt; and running &lt;code&gt;mmsys.cpl&lt;/code&gt;&lt;sup id="fnref:1"&gt;&lt;a href="#fn:1" class="footnote-ref" role="doc-noteref"&gt;1&lt;/a&gt;&lt;/sup&gt;, then checked the Playback tab to see whether both &amp;ldquo;VoiceMeeter Input&amp;rdquo; and &amp;ldquo;VoiceMeeter Aux Input&amp;rdquo; were present.&lt;/p&gt;&#10;&lt;p&gt;At this point, only &amp;ldquo;VoiceMeeter Input&amp;rdquo; was listed. &amp;ldquo;VoiceMeeter Aux Input&amp;rdquo; was completely missing.&lt;/p&gt;&#10;&lt;p&gt;&lt;img alt="The Playback tab in the Sound control panel. VoiceMeeter Aux Input is missing." class="gallery-image" data-flex-basis="187px" data-flex-grow="78" height="847" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://notes.nakurei.com/post/voicemeeter-aux-no-driver-present/2026-09-12_203711.png" width="661"&gt;&lt;/p&gt;&#10;&lt;p&gt;I also confirmed that the device was not simply hidden because it was disabled or disconnected.&lt;/p&gt;&#10;&lt;p&gt;&lt;img alt="Both “Show Disabled Devices” and “Show Disconnected Devices” are enabled." class="gallery-image" data-flex-basis="488px" data-flex-grow="203" height="360" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://notes.nakurei.com/post/voicemeeter-aux-no-driver-present/2026-09-12_203846.png" width="732"&gt;&lt;/p&gt;&#10;&lt;p&gt;This indicated that Windows was not recognizing the virtual audio device for Voicemeeter AUX Input at all, which suggested that the problem was caused by an inconsistency in the virtual audio drivers.&lt;/p&gt;&#10;&lt;h2 id="research"&gt;&#10; Research&lt;a href="#research"&gt;&#10; &lt;img src="https://notes.nakurei.com/icons/link.svg" width="44" height="44" style="width: 0.9em; margin-left: 0.25em; margin-bottom: -0.12em;" alt="Link to this heading" /&gt;&#10; &lt;/a&gt;&lt;/h2&gt;&#10;&lt;p&gt;After looking into the issue, I found that Voicemeeter changed the architecture of its VAIO drivers in 2024.&lt;/p&gt;&#10;&lt;p&gt;Previously, VAIO, AUX, and VAIO3 were handled as separate drivers. With the newer architecture, a single VAIO driver can provide up to eight Virtual I/O devices.&lt;/p&gt;&#10;&lt;p&gt;I suspect this change was related to the problem. The Voicemeeter application itself had been updated, but some of the old VAIO/AUX drivers remained installed, leaving the application and drivers in an inconsistent state.&lt;/p&gt;&#10;&lt;h2 id="fix"&gt;&#10; Fix&lt;a href="#fix"&gt;&#10; &lt;img src="https://notes.nakurei.com/icons/link.svg" width="44" height="44" style="width: 0.9em; margin-left: 0.25em; margin-bottom: -0.12em;" alt="Link to this heading" /&gt;&#10; &lt;/a&gt;&lt;/h2&gt;&#10;&lt;p&gt;Since the application and drivers appeared to be out of sync, I removed both and performed a clean reinstall.&lt;/p&gt;&#10;&lt;p&gt;These are the steps I followed:&lt;/p&gt;&#10;&lt;ol&gt;&#10;&lt;li&gt;Save your Voicemeeter settings first if you want to keep them.&lt;/li&gt;&#10;&lt;li&gt;Download the latest Voicemeeter Setup from the &lt;a class="link" href="https://vb-audio.com/Voicemeeter/banana.htm" target="_blank" rel="noopener"&#10; &gt;official website&lt;/a&gt;.&lt;/li&gt;&#10;&lt;li&gt;Run the downloaded Voicemeeter Setup as administrator, select &lt;strong&gt;REMOVE&lt;/strong&gt;, and uninstall Voicemeeter.&lt;/li&gt;&#10;&lt;li&gt;Restart the PC.&lt;/li&gt;&#10;&lt;li&gt;Open Device Manager and select &lt;strong&gt;View → Show hidden devices&lt;/strong&gt;.&lt;/li&gt;&#10;&lt;li&gt;Check the following categories in Device Manager for any old VB-Audio Voicemeeter devices. If any remain, uninstall them.&#10;&lt;ul&gt;&#10;&lt;li&gt;Sound, video and game controllers&lt;/li&gt;&#10;&lt;li&gt;Audio inputs and outputs&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;/li&gt;&#10;&lt;li&gt;Run Voicemeeter Setup as administrator and install Voicemeeter again.&lt;/li&gt;&#10;&lt;li&gt;Restart the PC.&lt;/li&gt;&#10;&lt;/ol&gt;&#10;&lt;p&gt;After completing these steps, the &amp;ldquo;no driver present&amp;rdquo; message disappeared, and Voicemeeter AUX Input started working normally again.&lt;/p&gt;&#10;&lt;div class="footnotes" role="doc-endnotes"&gt;&#10;&lt;hr&gt;&#10;&lt;ol&gt;&#10;&lt;li id="fn:1"&gt;&#10;&lt;p&gt;You can also open it from Settings → System → Sound → More sound settings.&amp;#160;&lt;a href="#fnref:1" class="footnote-backref" role="doc-backlink"&gt;&amp;#x21a9;&amp;#xfe0e;&lt;/a&gt;&lt;/p&gt;&#10;&lt;/li&gt;&#10;&lt;/ol&gt;&#10;&lt;/div&gt;&#10;</description></item><item><title>Fixing the `code` Command Not Opening VS Code in WSL Remote Mode</title><link>https://notes.nakurei.com/en/post/wsl2-code-command-not-remote/</link><pubDate>Wed, 23 Sep 2026 12:29:10 +0900</pubDate><guid>https://notes.nakurei.com/en/post/wsl2-code-command-not-remote/</guid><description>&lt;img src="https://notes.nakurei.com/post/wsl2-code-command-not-remote/image.webp" alt="Featured image of post Fixing the `code` Command Not Opening VS Code in WSL Remote Mode" /&gt;&lt;h2 id="the-problem"&gt;&#10; The problem&lt;a href="#the-problem"&gt;&#10; &lt;img src="https://notes.nakurei.com/icons/link.svg" width="44" height="44" style="width: 0.9em; margin-left: 0.25em; margin-bottom: -0.12em;" alt="Link to this heading" /&gt;&#10; &lt;/a&gt;&lt;/h2&gt;&#10;&lt;p&gt;When I launched VS Code by running the &lt;code&gt;code&lt;/code&gt; command inside WSL2, the folder did not open in WSL Remote mode. Instead, VS Code opened it using a Windows UNC path such as &lt;code&gt;\\wsl.localhost\Ubuntu-24.04\home\user&lt;/code&gt;.&lt;/p&gt;&#10;&lt;p&gt;As a result, I had to select &amp;ldquo;Reopen Folder in WSL&amp;rdquo; in VS Code every time.&lt;/p&gt;&#10;&lt;h2 id="the-cause"&gt;&#10; The cause&lt;a href="#the-cause"&gt;&#10; &lt;img src="https://notes.nakurei.com/icons/link.svg" width="44" height="44" style="width: 0.9em; margin-left: 0.25em; margin-bottom: -0.12em;" alt="Link to this heading" /&gt;&#10; &lt;/a&gt;&lt;/h2&gt;&#10;&lt;p&gt;When the &lt;code&gt;code&lt;/code&gt; command inside WSL resolves to &lt;code&gt;/mnt/c/Program Files/Microsoft VS Code/bin/code&lt;/code&gt;, it first asks the VS Code CLI for the location of the WSL extension. If the extension is found, the folder is opened in WSL Remote mode. If it is not found, VS Code falls back to opening the folder with the Windows &lt;code&gt;Code.exe&lt;/code&gt;.&lt;/p&gt;&#10;&lt;p&gt;In my case, the problem was that &lt;strong&gt;the VS Code CLI could not locate the installed WSL extension&lt;/strong&gt;.&lt;/p&gt;&#10;&lt;p&gt;The WSL extension itself was installed on the Windows side under &lt;code&gt;C:\Users\&amp;lt;username&amp;gt;\.vscode\extensions&lt;/code&gt;, but the VS Code CLI apparently only checks the extensions associated with the default profile&lt;sup id="fnref:1"&gt;&lt;a href="#fn:1" class="footnote-ref" role="doc-noteref"&gt;1&lt;/a&gt;&lt;/sup&gt;.&lt;/p&gt;&#10;&lt;p&gt;This means that even if the WSL extension is installed in another VS Code profile, the &lt;code&gt;code&lt;/code&gt; command launched from WSL may not be able to find it unless the extension is also installed in the default profile.&lt;/p&gt;&#10;&lt;h2 id="the-fix"&gt;&#10; The fix&lt;a href="#the-fix"&gt;&#10; &lt;img src="https://notes.nakurei.com/icons/link.svg" width="44" height="44" style="width: 0.9em; margin-left: 0.25em; margin-bottom: -0.12em;" alt="Link to this heading" /&gt;&#10; &lt;/a&gt;&lt;/h2&gt;&#10;&lt;p&gt;The solution is simple: install the WSL extension in the default VS Code profile.&lt;/p&gt;&#10;&lt;div class="footnotes" role="doc-endnotes"&gt;&#10;&lt;hr&gt;&#10;&lt;ol&gt;&#10;&lt;li id="fn:1"&gt;&#10;&lt;p&gt;More specifically, it appears to only read &lt;code&gt;C:\Users\&amp;lt;username&amp;gt;\.vscode\extensions\extensions.json&lt;/code&gt;.&amp;#160;&lt;a href="#fnref:1" class="footnote-backref" role="doc-backlink"&gt;&amp;#x21a9;&amp;#xfe0e;&lt;/a&gt;&lt;/p&gt;&#10;&lt;/li&gt;&#10;&lt;/ol&gt;&#10;&lt;/div&gt;&#10;</description></item><item><title>Notes from Reviewing My GitHub Repository Security Settings</title><link>https://notes.nakurei.com/en/post/github-repo-security-settings/</link><pubDate>Tue, 22 Sep 2026 22:28:36 +0900</pubDate><guid>https://notes.nakurei.com/en/post/github-repo-security-settings/</guid><description>&lt;img src="https://notes.nakurei.com/post/github-repo-security-settings/image.webp" alt="Featured image of post Notes from Reviewing My GitHub Repository Security Settings" /&gt;&lt;hr&gt;&#10;&lt;h2 id="what-is-this"&gt;&#10; What is this?&lt;a href="#what-is-this"&gt;&#10; &lt;img src="https://notes.nakurei.com/icons/link.svg" width="44" height="44" style="width: 0.9em; margin-left: 0.25em; margin-bottom: -0.12em;" alt="Link to this heading" /&gt;&#10; &lt;/a&gt;&lt;/h2&gt;&#10;&lt;p&gt;These are some notes on what I did and what I learned while reviewing my GitHub repository security settings, following the article below.&lt;/p&gt;&#10;&lt;p&gt;When GitHub itself says these are settings &amp;ldquo;every GitHub maintainer should enable,&amp;rdquo; you kind of have to check, right?&lt;/p&gt;&#10;&#10; &#10; &lt;div&#10; class="url-card"&#10; style="&#10; display: flex;&#10; height: 100%;&#10; width: 100%;&#10; margin-top: 10px;&#10; margin-bottom: 10px;&#10; padding: 10px;&#10; border: solid 1px var(--table-border-color);&#10; border-radius: 0.5rem;&#10; overflow: hidden;&#10; "&#10; &gt;&#10; &lt;a&#10; href="https://github.blog/security/6-security-settings-every-github-maintainer-should-enable-this-week/"&#10; target="_blank"&#10; rel="noopener noreferrer"&#10; style="&#10; display: flex;&#10; width: 100%;&#10; height: 100%;&#10; text-decoration: none;&#10; "&#10; class="linkcard"&#10; &gt;&#10; &#10; &lt;img&#10; src="https://notes.nakurei.com/remote/65c698676d78fb82df829db5a3e730ffc1fc78f6_hu_378beff90b7640a4.webp"&#10; alt="6 security settings every GitHub maintainer should enable this week image"&#10; width="120"&#10; height="120"&#10; loading="lazy"&#10; decoding="async"&#10; style="&#10; max-width: 200px;&#10; max-height: 120px;&#10; object-fit: cover;&#10; margin: 0;&#10; flex-shrink: 0;&#10; "&gt;&#10; &#10;&#10; &lt;div&#10; style="&#10; display: flex;&#10; flex-direction: column;&#10; align-items: start;&#10; justify-content: center;&#10; margin-left: 12px;&#10; "&#10; &gt;&#10; &lt;p style="margin: 0; padding-left: 0; padding-bottom: 3px; border: none"&gt;&#10; &#10; 6 security settings every GitHub maintainer should enable this week&#10; &#10; &lt;/p&gt;&#10; &lt;p&#10; style="&#10; margin: 0;&#10; font-size: 12px;&#10; word-break: break-word;&#10; display: -webkit-box;&#10; display: box;&#10; -webkit-box-orient: vertical;&#10; box-orient: vertical;&#10; -webkit-line-clamp: 3;&#10; line-clamp: 3;&#10; overflow: hidden;&#10; "&#10; &gt;These six free settings will not make your project unhackable. Nothing will. What they will do is close the easy doors.&lt;/p&gt;&#10; &lt;div&#10; style="&#10; display: flex;&#10; flex-direction: row;&#10; align-items: center;&#10; gap: 2px;&#10; "&#10; &gt;&lt;img&#10; src="https://notes.nakurei.com/remote/favicon-3cb553f4b0354317ce70ea043be4d52c3ddc3ff4.png"&#10; width="14"&#10; height="14"&#10; style="margin-right: 2px;"&#10; alt="github.blog favicon image"&#10; /&gt;&lt;span style="font-size: small; color: var(--card-text-color-tertiary);"&gt;&#10; github.blog&#10; &lt;/span&gt;&#10; &lt;/div&gt;&#10; &lt;/div&gt;&#10; &lt;/a&gt;&#10; &lt;/div&gt;&lt;style&gt;&#10; .url-card:hover {&#10; box-shadow: 0 0 0 1px var(--card-text-color-tertiary);&#10; }&#10;&lt;/style&gt;&#10;&#10;&lt;p&gt;There are six settings in total, and apparently you can get through all of them in under 30 minutes. Really?&lt;/p&gt;&#10;&lt;h2 id="conclusion"&gt;&#10; Conclusion&lt;a href="#conclusion"&gt;&#10; &lt;img src="https://notes.nakurei.com/icons/link.svg" width="44" height="44" style="width: 0.9em; margin-left: 0.25em; margin-bottom: -0.12em;" alt="Link to this heading" /&gt;&#10; &lt;/a&gt;&lt;/h2&gt;&#10;&lt;p&gt;For public repositories, enabling all of the relevant settings under &amp;ldquo;Security and quality&amp;rdquo; improves the security of the repository.&lt;/p&gt;&#10;&lt;p&gt;For personal private repositories, however, only the following settings are available:&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;Dependabot alerts&lt;/li&gt;&#10;&lt;li&gt;Secret scanning alerts&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;h2 id="1-add-a-securitymd-file"&gt;&#10; 1. Add a SECURITY.md file&lt;a href="#1-add-a-securitymd-file"&gt;&#10; &lt;img src="https://notes.nakurei.com/icons/link.svg" width="44" height="44" style="width: 0.9em; margin-left: 0.25em; margin-bottom: -0.12em;" alt="Link to this heading" /&gt;&#10; &lt;/a&gt;&lt;/h2&gt;&#10;&lt;p&gt;This is mainly useful for public repositories.&lt;/p&gt;&#10;&lt;p&gt;A &lt;code&gt;SECURITY.md&lt;/code&gt; file is &lt;strong&gt;used to tell users how to report security vulnerabilities in your project&lt;/strong&gt;. According to the &lt;a class="link" href="https://docs.github.com/en/code-security/how-tos/report-and-fix-vulnerabilities/configure-vulnerability-reporting/add-security-policy?ref=devtoanmolbaranwal" target="_blank" rel="noopener"&#10; &gt;official documentation&lt;/a&gt;, it lets you &amp;ldquo;add information about supported versions of your project and how to report a vulnerability.&amp;rdquo; The &lt;a class="link" href="https://github.blog/security/6-security-settings-every-github-maintainer-should-enable-this-week/" target="_blank" rel="noopener"&#10; &gt;article referenced above&lt;/a&gt; uses &lt;a class="link" href="https://github.com/systemd/systemd/security/policy" target="_blank" rel="noopener"&#10; &gt;systemd&amp;rsquo;s security policy&lt;/a&gt; as an example.&lt;/p&gt;&#10;&#10; &#10; &lt;div&#10; class="url-card"&#10; style="&#10; display: flex;&#10; height: 100%;&#10; width: 100%;&#10; margin-top: 10px;&#10; margin-bottom: 10px;&#10; padding: 10px;&#10; border: solid 1px var(--table-border-color);&#10; border-radius: 0.5rem;&#10; overflow: hidden;&#10; "&#10; &gt;&#10; &lt;a&#10; href="https://docs.github.com/ja/code-security/how-tos/report-and-fix-vulnerabilities/configure-vulnerability-reporting/add-security-policy"&#10; target="_blank"&#10; rel="noopener noreferrer"&#10; style="&#10; display: flex;&#10; width: 100%;&#10; height: 100%;&#10; text-decoration: none;&#10; "&#10; class="linkcard"&#10; &gt;&#10; &#10; &lt;img&#10; src="https://notes.nakurei.com/remote/db564214c86173a155f04b50162541dea44d7c0c_hu_824cae58e9b59c9c.webp"&#10; alt="リポジトリへのセキュリティ ポリシーの追加 - GitHubドキュメント image"&#10; width="120"&#10; height="120"&#10; loading="lazy"&#10; decoding="async"&#10; style="&#10; max-width: 200px;&#10; max-height: 120px;&#10; object-fit: cover;&#10; margin: 0;&#10; flex-shrink: 0;&#10; "&gt;&#10; &#10;&#10; &lt;div&#10; style="&#10; display: flex;&#10; flex-direction: column;&#10; align-items: start;&#10; justify-content: center;&#10; margin-left: 12px;&#10; "&#10; &gt;&#10; &lt;p style="margin: 0; padding-left: 0; padding-bottom: 3px; border: none"&gt;&#10; &#10; リポジトリへのセキュリティ ポリシーの追加 - GitHubドキュメント&#10; &#10; &lt;/p&gt;&#10; &lt;p&#10; style="&#10; margin: 0;&#10; font-size: 12px;&#10; word-break: break-word;&#10; display: -webkit-box;&#10; display: box;&#10; -webkit-box-orient: vertical;&#10; box-orient: vertical;&#10; -webkit-line-clamp: 3;&#10; line-clamp: 3;&#10; overflow: hidden;&#10; "&#10; &gt;セキュリティポリシーをリポジトリに追加することによって、プロジェクト内のセキュリティ脆弱性を報告する方法の手順を示すことができます。&lt;/p&gt;&#10; &lt;div&#10; style="&#10; display: flex;&#10; flex-direction: row;&#10; align-items: center;&#10; gap: 2px;&#10; "&#10; &gt;&lt;img&#10; src="https://notes.nakurei.com/remote/favicon-93e8494b5705d47fd44472eac39f114eda44f780.png"&#10; width="14"&#10; height="14"&#10; style="margin-right: 2px;"&#10; alt="docs.github.com favicon image"&#10; /&gt;&lt;span style="font-size: small; color: var(--card-text-color-tertiary);"&gt;&#10; docs.github.com&#10; &lt;/span&gt;&#10; &lt;/div&gt;&#10; &lt;/div&gt;&#10; &lt;/a&gt;&#10; &lt;/div&gt;&lt;style&gt;&#10; .url-card:hover {&#10; box-shadow: 0 0 0 1px var(--card-text-color-tertiary);&#10; }&#10;&lt;/style&gt;&#10;&#10;&lt;p&gt;If vulnerability details are posted in a public issue, malicious users may be able to exploit them. For that reason, it is important to provide a reporting channel separate from public issues. Clearly specifying where vulnerabilities should be reported helps improve the security of the repository.&lt;/p&gt;&#10;&lt;p&gt;The &lt;code&gt;SECURITY.md&lt;/code&gt; file can be placed in any of the following locations&lt;sup id="fnref:1"&gt;&lt;a href="#fn:1" class="footnote-ref" role="doc-noteref"&gt;1&lt;/a&gt;&lt;/sup&gt;:&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;The &lt;code&gt;.github&lt;/code&gt; directory&lt;/li&gt;&#10;&lt;li&gt;The repository root&lt;/li&gt;&#10;&lt;li&gt;The &lt;code&gt;docs&lt;/code&gt; directory&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;p&gt;This corresponds to the &amp;ldquo;Security policy&amp;rdquo; section under a repository&amp;rsquo;s &amp;ldquo;Security and quality&amp;rdquo; settings. If it shows as Disabled, as in the image below, it means that the repository does not have a &lt;code&gt;SECURITY.md&lt;/code&gt; file.&lt;/p&gt;&#10;&lt;p&gt;&lt;img alt="An example of Security policy showing as Disabled" class="gallery-image" data-flex-basis="710px" data-flex-grow="296" height="358" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://notes.nakurei.com/post/github-repo-security-settings/2026-08-16-220941.png" srcset="https://notes.nakurei.com/post/github-repo-security-settings/2026-08-16-220941_hu_ba87d827c0225f8c.png 800w, https://notes.nakurei.com/post/github-repo-security-settings/2026-08-16-220941.png 1060w" width="1060"&gt;&lt;/p&gt;&#10;&lt;p&gt;Clicking &amp;ldquo;Set up a security policy&amp;rdquo; in the screen above lets you create a &lt;code&gt;SECURITY.md&lt;/code&gt; file in the repository root directly from GitHub.&lt;/p&gt;&#10;&lt;p&gt;This is just my opinion, but for a personal project, I think a security policy should include at least the following:&lt;/p&gt;&#10;&lt;ol&gt;&#10;&lt;li&gt;Which versions receive security fixes&lt;/li&gt;&#10;&lt;li&gt;Where vulnerabilities should be reported&lt;/li&gt;&#10;&lt;li&gt;What information should be included in a report&lt;/li&gt;&#10;&lt;li&gt;What should not be posted in a public issue&lt;/li&gt;&#10;&lt;li&gt;An approximate response time&lt;/li&gt;&#10;&lt;/ol&gt;&#10;&lt;p&gt;For vulnerability reports, GitHub&amp;rsquo;s &lt;a class="link" href="https://docs.github.com/ja/code-security/how-tos/report-and-fix-vulnerabilities/report-privately" target="_blank" rel="noopener"&#10; &gt;Private Vulnerability Reporting (PVR)&lt;/a&gt; is convenient. I will cover that in the next section.&lt;/p&gt;&#10;&lt;p&gt;For example, in &lt;a class="link" href="https://github.com/NakuRei/ticko" target="_blank" rel="noopener"&#10; &gt;ticko&lt;/a&gt;, a Python package I maintain, I created the following &lt;code&gt;SECURITY.md&lt;/code&gt; file.&lt;/p&gt;&#10;&lt;div class="block-highlight-warning"&gt;&#10; &lt;span class="icon-warning"&gt;&lt;svg xmlns="http://www.w3.org/2000/svg" class="icon icon-tabler icon-tabler-alert-triangle" width="44" height="44" viewBox="0 0 24 24" stroke-width="1.5" stroke="currentColor" fill="none" stroke-linecap="round" stroke-linejoin="round"&gt;&#10; &lt;path stroke="none" d="M0 0h24v24H0z" fill="none"/&gt;&#10; &lt;path d="M12 9v2m0 4v.01" /&gt;&#10; &lt;path d="M5 19h14a2 2 0 0 0 1.84 -2.75l-7.1 -12.25a2 2 0 0 0 -3.5 0l-7.1 12.25a2 2 0 0 0 1.75 2.75" /&gt;&#10;&lt;/svg&gt;&#10;&lt;/span&gt;&#10; &lt;span&gt;The example below assumes that PVR, which is explained in the next section, is enabled.&lt;/span&gt;&#10;&lt;/div&gt;&#10;&#10;&lt;style&gt;&#10; .code-block-filename {&#10; --code-filename-fontsize: calc(0.96em * 0.9);&#10;&#10; display: table;&#10; max-width: 100%;&#10; background: var(--accent-color-darker);&#10; color: var(--accent-color-text);&#10; font-size: var(--code-filename-fontsize);&#10; line-height: 1;&#10; padding-top: calc(var(--code-filename-fontsize) * 0.5);&#10; padding-left: calc(var(--code-filename-fontsize) * 0.7);&#10; padding-right: calc(var(--code-filename-fontsize) * 0.7);&#10; padding-bottom: calc(var(--code-filename-fontsize) * 0.7);&#10; border-radius: calc(var(--code-filename-fontsize) * 0.5)&#10; calc(var(--code-filename-fontsize) * 0.5) 0 0;&#10; }&#10; .code-block-content {&#10; padding-top: 0px;&#10; }&#10;&lt;/style&gt;&#10;&#10;&lt;div&gt;&#10; &lt;div class="code-block-content"&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-markdown" data-lang="markdown"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="gh"&gt;# Security Policy&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="gu"&gt;## Supported Versions&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Security updates are provided for the latest major version of ticko.&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;| Version | Supported |&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;| ------- | ------------------ |&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;| 2.x | :white_check_mark: |&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;| 1.x | :x: |&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Users are encouraged to upgrade to the latest release available on PyPI.&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="gu"&gt;## Reporting a Vulnerability&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;If you discover a security vulnerability in ticko, please do not report it&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;through a public GitHub issue.&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Instead, please report it privately using GitHub&amp;#39;s private vulnerability&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;reporting feature.&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;When submitting a report, please include as much of the following information&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;as possible:&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;-&lt;/span&gt; A description of the vulnerability&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;-&lt;/span&gt; The affected version(s) of ticko&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;-&lt;/span&gt; Steps to reproduce the issue&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;-&lt;/span&gt; A minimal proof of concept, if applicable&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;-&lt;/span&gt; The potential security impact&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;-&lt;/span&gt; Any suggested mitigation or fix, if available&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;You can expect an initial response within 14 days.&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Please allow reasonable time for the issue to be investigated and fixed before&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;publicly disclosing the vulnerability.&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="gu"&gt;## Scope&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Security reports should describe issues that have a meaningful security impact&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;on applications using ticko.&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;General bugs, timing inaccuracies, performance issues, feature requests, and&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;other problems without a security impact should be reported through the public&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;GitHub issue tracker instead.&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&#10; &lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;p&gt;Writing the &lt;code&gt;SECURITY.md&lt;/code&gt; file itself does not take very long, since you can give an LLM the repository URL and have it draft one for you. You can also use security policies from other well-maintained projects as references.&lt;/p&gt;&#10;&lt;h2 id="2-enable-pvr-private-vulnerability-reporting"&gt;&#10; 2. Enable PVR (Private Vulnerability Reporting)&lt;a href="#2-enable-pvr-private-vulnerability-reporting"&gt;&#10; &lt;img src="https://notes.nakurei.com/icons/link.svg" width="44" height="44" style="width: 0.9em; margin-left: 0.25em; margin-bottom: -0.12em;" alt="Link to this heading" /&gt;&#10; &lt;/a&gt;&lt;/h2&gt;&#10;&lt;p&gt;This is mainly useful for public repositories.&lt;/p&gt;&#10;&lt;p&gt;&lt;a class="link" href="https://docs.github.com/ja/code-security/how-tos/report-and-fix-vulnerabilities/report-privately" target="_blank" rel="noopener"&#10; &gt;Private Vulnerability Reporting (PVR)&lt;/a&gt; is a GitHub feature that allows vulnerabilities in a repository to be reported privately. If you publish a project on GitHub, vulnerability reports should generally go through PVR rather than public issues.&lt;/p&gt;&#10;&#10; &#10; &lt;div&#10; class="url-card"&#10; style="&#10; display: flex;&#10; height: 100%;&#10; width: 100%;&#10; margin-top: 10px;&#10; margin-bottom: 10px;&#10; padding: 10px;&#10; border: solid 1px var(--table-border-color);&#10; border-radius: 0.5rem;&#10; overflow: hidden;&#10; "&#10; &gt;&#10; &lt;a&#10; href="https://docs.github.com/ja/code-security/how-tos/report-and-fix-vulnerabilities/configure-vulnerability-reporting/configure-for-a-repository"&#10; target="_blank"&#10; rel="noopener noreferrer"&#10; style="&#10; display: flex;&#10; width: 100%;&#10; height: 100%;&#10; text-decoration: none;&#10; "&#10; class="linkcard"&#10; &gt;&#10; &#10; &lt;img&#10; src="https://notes.nakurei.com/remote/db564214c86173a155f04b50162541dea44d7c0c_hu_824cae58e9b59c9c.webp"&#10; alt="リポジトリのプライベート脆弱性レポートの構成 - GitHubドキュメント image"&#10; width="120"&#10; height="120"&#10; loading="lazy"&#10; decoding="async"&#10; style="&#10; max-width: 200px;&#10; max-height: 120px;&#10; object-fit: cover;&#10; margin: 0;&#10; flex-shrink: 0;&#10; "&gt;&#10; &#10;&#10; &lt;div&#10; style="&#10; display: flex;&#10; flex-direction: column;&#10; align-items: start;&#10; justify-content: center;&#10; margin-left: 12px;&#10; "&#10; &gt;&#10; &lt;p style="margin: 0; padding-left: 0; padding-bottom: 3px; border: none"&gt;&#10; &#10; リポジトリのプライベート脆弱性レポートの構成 - GitHubドキュメント&#10; &#10; &lt;/p&gt;&#10; &lt;p&#10; style="&#10; margin: 0;&#10; font-size: 12px;&#10; word-break: break-word;&#10; display: -webkit-box;&#10; display: box;&#10; -webkit-box-orient: vertical;&#10; box-orient: vertical;&#10; -webkit-line-clamp: 3;&#10; line-clamp: 3;&#10; overflow: hidden;&#10; "&#10; &gt;パブリック リポジトリの所有者と管理者は、プライベート脆弱性レポートを有効にすることで、セキュリティ リサーチャーがリポジトリ内の脆弱性を安全に報告できるようにすることができます。&lt;/p&gt;&#10; &lt;div&#10; style="&#10; display: flex;&#10; flex-direction: row;&#10; align-items: center;&#10; gap: 2px;&#10; "&#10; &gt;&lt;img&#10; src="https://notes.nakurei.com/remote/favicon-93e8494b5705d47fd44472eac39f114eda44f780.png"&#10; width="14"&#10; height="14"&#10; style="margin-right: 2px;"&#10; alt="docs.github.com favicon image"&#10; /&gt;&lt;span style="font-size: small; color: var(--card-text-color-tertiary);"&gt;&#10; docs.github.com&#10; &lt;/span&gt;&#10; &lt;/div&gt;&#10; &lt;/div&gt;&#10; &lt;/a&gt;&#10; &lt;/div&gt;&lt;style&gt;&#10; .url-card:hover {&#10; box-shadow: 0 0 0 1px var(--card-text-color-tertiary);&#10; }&#10;&lt;/style&gt;&#10;&#10;&lt;p&gt;To use PVR, you need to &lt;a class="link" href="https://docs.github.com/ja/code-security/how-tos/report-and-fix-vulnerabilities/configure-vulnerability-reporting/configure-for-a-repository" target="_blank" rel="noopener"&#10; &gt;enable it in the repository settings&lt;/a&gt;. This only takes a moment.&lt;/p&gt;&#10;&lt;p&gt;First, open the repository&amp;rsquo;s &amp;ldquo;Security and quality&amp;rdquo; settings and find the &amp;ldquo;Private vulnerability reporting&amp;rdquo; section. If it shows as Disabled, as in the image below, PVR is currently turned off.&lt;/p&gt;&#10;&lt;p&gt;&lt;img alt="An example of Private vulnerability reporting showing as Disabled" class="gallery-image" data-flex-basis="570px" data-flex-grow="237" height="301" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://notes.nakurei.com/post/github-repo-security-settings/2026-08-17-225433.png" width="715"&gt;&lt;/p&gt;&#10;&lt;p&gt;Clicking &amp;ldquo;Enable vulnerability reporting&amp;rdquo; opens the configuration screen shown below.&lt;/p&gt;&#10;&lt;p&gt;&lt;img alt="The PVR settings screen" class="gallery-image" data-flex-basis="594px" data-flex-grow="247" height="315" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://notes.nakurei.com/post/github-repo-security-settings/2026-08-17-225617.png" width="780"&gt;&lt;/p&gt;&#10;&lt;p&gt;Click &amp;ldquo;Enable&amp;rdquo; to turn it on.&lt;/p&gt;&#10;&lt;p&gt;Once both steps 1 and 2 are configured, the repository&amp;rsquo;s &amp;ldquo;Security and quality&amp;rdquo; page will show the contents of the &lt;code&gt;SECURITY.md&lt;/code&gt; file created in step 1, along with a &amp;ldquo;Report a vulnerability&amp;rdquo; button.&lt;/p&gt;&#10;&lt;p&gt;&lt;img alt="The Security and quality page after completing steps 1 and 2" class="gallery-image" data-flex-basis="561px" data-flex-grow="234" height="658" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://notes.nakurei.com/post/github-repo-security-settings/2026-08-17-230234.png" srcset="https://notes.nakurei.com/post/github-repo-security-settings/2026-08-17-230234_hu_48925f9004b74fd5.png 800w, https://notes.nakurei.com/post/github-repo-security-settings/2026-08-17-230234.png 1540w" width="1540"&gt;&lt;/p&gt;&#10;&lt;h2 id="3-enable-secret-scanning-alerts"&gt;&#10; 3. Enable Secret scanning alerts&lt;a href="#3-enable-secret-scanning-alerts"&gt;&#10; &lt;img src="https://notes.nakurei.com/icons/link.svg" width="44" height="44" style="width: 0.9em; margin-left: 0.25em; margin-bottom: -0.12em;" alt="Link to this heading" /&gt;&#10; &lt;/a&gt;&lt;/h2&gt;&#10;&lt;p&gt;This setting is available for public repositories, as well as private or internal repositories owned by an organization.&lt;/p&gt;&#10;&lt;p&gt;Secret scanning checks repositories for values that should remain secret, such as API keys and tokens, and alerts you if they have accidentally made their way into the repository. Think of it as one more line of defense against leaked credentials.&lt;/p&gt;&#10;&#10; &#10; &lt;div&#10; class="url-card"&#10; style="&#10; display: flex;&#10; height: 100%;&#10; width: 100%;&#10; margin-top: 10px;&#10; margin-bottom: 10px;&#10; padding: 10px;&#10; border: solid 1px var(--table-border-color);&#10; border-radius: 0.5rem;&#10; overflow: hidden;&#10; "&#10; &gt;&#10; &lt;a&#10; href="https://docs.github.com/en/code-security/concepts/secret-security/about-alerts"&#10; target="_blank"&#10; rel="noopener noreferrer"&#10; style="&#10; display: flex;&#10; width: 100%;&#10; height: 100%;&#10; text-decoration: none;&#10; "&#10; class="linkcard"&#10; &gt;&#10; &#10; &lt;img&#10; src="https://notes.nakurei.com/remote/db564214c86173a155f04b50162541dea44d7c0c_hu_824cae58e9b59c9c.webp"&#10; alt="About secret scanning alerts - GitHub Docs image"&#10; width="120"&#10; height="120"&#10; loading="lazy"&#10; decoding="async"&#10; style="&#10; max-width: 200px;&#10; max-height: 120px;&#10; object-fit: cover;&#10; margin: 0;&#10; flex-shrink: 0;&#10; "&gt;&#10; &#10;&#10; &lt;div&#10; style="&#10; display: flex;&#10; flex-direction: column;&#10; align-items: start;&#10; justify-content: center;&#10; margin-left: 12px;&#10; "&#10; &gt;&#10; &lt;p style="margin: 0; padding-left: 0; padding-bottom: 3px; border: none"&gt;&#10; &#10; About secret scanning alerts - GitHub Docs&#10; &#10; &lt;/p&gt;&#10; &lt;p&#10; style="&#10; margin: 0;&#10; font-size: 12px;&#10; word-break: break-word;&#10; display: -webkit-box;&#10; display: box;&#10; -webkit-box-orient: vertical;&#10; box-orient: vertical;&#10; -webkit-line-clamp: 3;&#10; line-clamp: 3;&#10; overflow: hidden;&#10; "&#10; &gt;Learn about the different types of secret scanning alerts.&lt;/p&gt;&#10; &lt;div&#10; style="&#10; display: flex;&#10; flex-direction: row;&#10; align-items: center;&#10; gap: 2px;&#10; "&#10; &gt;&lt;img&#10; src="https://notes.nakurei.com/remote/favicon-93e8494b5705d47fd44472eac39f114eda44f780.png"&#10; width="14"&#10; height="14"&#10; style="margin-right: 2px;"&#10; alt="docs.github.com favicon image"&#10; /&gt;&lt;span style="font-size: small; color: var(--card-text-color-tertiary);"&gt;&#10; docs.github.com&#10; &lt;/span&gt;&#10; &lt;/div&gt;&#10; &lt;/div&gt;&#10; &lt;/a&gt;&#10; &lt;/div&gt;&lt;style&gt;&#10; .url-card:hover {&#10; box-shadow: 0 0 0 1px var(--card-text-color-tertiary);&#10; }&#10;&lt;/style&gt;&#10;&#10;&lt;p&gt;According to the &lt;a class="link" href="https://github.blog/security/6-security-settings-every-github-maintainer-should-enable-this-week/" target="_blank" rel="noopener"&#10; &gt;article referenced above&lt;/a&gt;, AI-assisted commits leak secrets at roughly twice the usual rate. That&amp;rsquo;s a little scary.&lt;/p&gt;&#10;&lt;p&gt;To enable it, first open the repository&amp;rsquo;s &amp;ldquo;Security and quality&amp;rdquo; settings and find the &amp;ldquo;Secret scanning alerts&amp;rdquo; section. If it shows as Enabled, as in the image below, the feature is active.&lt;/p&gt;&#10;&lt;p&gt;&lt;img alt="An example of Secret scanning alerts being enabled" class="gallery-image" data-flex-basis="430px" data-flex-grow="179" height="582" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://notes.nakurei.com/post/github-repo-security-settings/2026-08-18-010614.png" srcset="https://notes.nakurei.com/post/github-repo-security-settings/2026-08-18-010614_hu_1afe8a1dd462b467.png 800w, https://notes.nakurei.com/post/github-repo-security-settings/2026-08-18-010614.png 1045w" width="1045"&gt;&lt;/p&gt;&#10;&lt;p&gt;When this feature is enabled, GitHub will apparently raise an alert if it detects a leaked secret&lt;sup id="fnref:2"&gt;&lt;a href="#fn:2" class="footnote-ref" role="doc-noteref"&gt;2&lt;/a&gt;&lt;/sup&gt;.&lt;/p&gt;&#10;&lt;p&gt;If a leaked secret is actually detected, the official documentation below looks like a useful reference for how to respond.&lt;/p&gt;&#10;&#10; &#10; &lt;div&#10; class="url-card"&#10; style="&#10; display: flex;&#10; height: 100%;&#10; width: 100%;&#10; margin-top: 10px;&#10; margin-bottom: 10px;&#10; padding: 10px;&#10; border: solid 1px var(--table-border-color);&#10; border-radius: 0.5rem;&#10; overflow: hidden;&#10; "&#10; &gt;&#10; &lt;a&#10; href="https://docs.github.com/en/code-security/how-tos/manage-security-alerts/manage-secret-scanning-alerts/resolving-alerts"&#10; target="_blank"&#10; rel="noopener noreferrer"&#10; style="&#10; display: flex;&#10; width: 100%;&#10; height: 100%;&#10; text-decoration: none;&#10; "&#10; class="linkcard"&#10; &gt;&#10; &#10; &lt;img&#10; src="https://notes.nakurei.com/remote/db564214c86173a155f04b50162541dea44d7c0c_hu_824cae58e9b59c9c.webp"&#10; alt="Resolving alerts from secret scanning - GitHub Docs image"&#10; width="120"&#10; height="120"&#10; loading="lazy"&#10; decoding="async"&#10; style="&#10; max-width: 200px;&#10; max-height: 120px;&#10; object-fit: cover;&#10; margin: 0;&#10; flex-shrink: 0;&#10; "&gt;&#10; &#10;&#10; &lt;div&#10; style="&#10; display: flex;&#10; flex-direction: column;&#10; align-items: start;&#10; justify-content: center;&#10; margin-left: 12px;&#10; "&#10; &gt;&#10; &lt;p style="margin: 0; padding-left: 0; padding-bottom: 3px; border: none"&gt;&#10; &#10; Resolving alerts from secret scanning - GitHub Docs&#10; &#10; &lt;/p&gt;&#10; &lt;p&#10; style="&#10; margin: 0;&#10; font-size: 12px;&#10; word-break: break-word;&#10; display: -webkit-box;&#10; display: box;&#10; -webkit-box-orient: vertical;&#10; box-orient: vertical;&#10; -webkit-line-clamp: 3;&#10; line-clamp: 3;&#10; overflow: hidden;&#10; "&#10; &gt;After reviewing the details of a secret scanning alert, you should fix and then close the alert.&lt;/p&gt;&#10; &lt;div&#10; style="&#10; display: flex;&#10; flex-direction: row;&#10; align-items: center;&#10; gap: 2px;&#10; "&#10; &gt;&lt;img&#10; src="https://notes.nakurei.com/remote/favicon-93e8494b5705d47fd44472eac39f114eda44f780.png"&#10; width="14"&#10; height="14"&#10; style="margin-right: 2px;"&#10; alt="docs.github.com favicon image"&#10; /&gt;&lt;span style="font-size: small; color: var(--card-text-color-tertiary);"&gt;&#10; docs.github.com&#10; &lt;/span&gt;&#10; &lt;/div&gt;&#10; &lt;/div&gt;&#10; &lt;/a&gt;&#10; &lt;/div&gt;&lt;style&gt;&#10; .url-card:hover {&#10; box-shadow: 0 0 0 1px var(--card-text-color-tertiary);&#10; }&#10;&lt;/style&gt;&#10;&#10;&lt;h2 id="4-enable-dependabot"&gt;&#10; 4. Enable Dependabot&lt;a href="#4-enable-dependabot"&gt;&#10; &lt;img src="https://notes.nakurei.com/icons/link.svg" width="44" height="44" style="width: 0.9em; margin-left: 0.25em; margin-bottom: -0.12em;" alt="Link to this heading" /&gt;&#10; &lt;/a&gt;&lt;/h2&gt;&#10;&lt;p&gt;This setting is useful for both public and private repositories.&lt;/p&gt;&#10;&lt;p&gt;Dependabot warns you when an external library or package your repository depends on contains a known vulnerability.&lt;/p&gt;&#10;&lt;p&gt;For example, it checks dependencies listed in files such as &lt;code&gt;package.json&lt;/code&gt; and alerts you when a security issue is found. By default, these alerts are also sent by email.&lt;/p&gt;&#10;&#10; &#10; &lt;div&#10; class="url-card"&#10; style="&#10; display: flex;&#10; height: 100%;&#10; width: 100%;&#10; margin-top: 10px;&#10; margin-bottom: 10px;&#10; padding: 10px;&#10; border: solid 1px var(--table-border-color);&#10; border-radius: 0.5rem;&#10; overflow: hidden;&#10; "&#10; &gt;&#10; &lt;a&#10; href="https://docs.github.com/en/code-security/concepts/supply-chain-security/dependabot-alerts"&#10; target="_blank"&#10; rel="noopener noreferrer"&#10; style="&#10; display: flex;&#10; width: 100%;&#10; height: 100%;&#10; text-decoration: none;&#10; "&#10; class="linkcard"&#10; &gt;&#10; &#10; &lt;img&#10; src="https://notes.nakurei.com/remote/db564214c86173a155f04b50162541dea44d7c0c_hu_824cae58e9b59c9c.webp"&#10; alt="Dependabot alerts - GitHub Docs image"&#10; width="120"&#10; height="120"&#10; loading="lazy"&#10; decoding="async"&#10; style="&#10; max-width: 200px;&#10; max-height: 120px;&#10; object-fit: cover;&#10; margin: 0;&#10; flex-shrink: 0;&#10; "&gt;&#10; &#10;&#10; &lt;div&#10; style="&#10; display: flex;&#10; flex-direction: column;&#10; align-items: start;&#10; justify-content: center;&#10; margin-left: 12px;&#10; "&#10; &gt;&#10; &lt;p style="margin: 0; padding-left: 0; padding-bottom: 3px; border: none"&gt;&#10; &#10; Dependabot alerts - GitHub Docs&#10; &#10; &lt;/p&gt;&#10; &lt;p&#10; style="&#10; margin: 0;&#10; font-size: 12px;&#10; word-break: break-word;&#10; display: -webkit-box;&#10; display: box;&#10; -webkit-box-orient: vertical;&#10; box-orient: vertical;&#10; -webkit-line-clamp: 3;&#10; line-clamp: 3;&#10; overflow: hidden;&#10; "&#10; &gt;Dependabot alerts help you find and fix vulnerable dependencies before they become security risks.&lt;/p&gt;&#10; &lt;div&#10; style="&#10; display: flex;&#10; flex-direction: row;&#10; align-items: center;&#10; gap: 2px;&#10; "&#10; &gt;&lt;img&#10; src="https://notes.nakurei.com/remote/favicon-93e8494b5705d47fd44472eac39f114eda44f780.png"&#10; width="14"&#10; height="14"&#10; style="margin-right: 2px;"&#10; alt="docs.github.com favicon image"&#10; /&gt;&lt;span style="font-size: small; color: var(--card-text-color-tertiary);"&gt;&#10; docs.github.com&#10; &lt;/span&gt;&#10; &lt;/div&gt;&#10; &lt;/div&gt;&#10; &lt;/a&gt;&#10; &lt;/div&gt;&lt;style&gt;&#10; .url-card:hover {&#10; box-shadow: 0 0 0 1px var(--card-text-color-tertiary);&#10; }&#10;&lt;/style&gt;&#10;&#10;&lt;p&gt;At the time of writing, Dependabot has five related features:&lt;/p&gt;&#10;&lt;table&gt;&#10;&#9;&lt;thead&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;th style="text-align: left"&gt;Feature&lt;/th&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;th style="text-align: left"&gt;Description&lt;/th&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&lt;/thead&gt;&#10;&#9;&lt;tbody&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td style="text-align: left"&gt;Dependency graph&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td style="text-align: left"&gt;Allows GitHub to identify and track the repository&amp;rsquo;s dependencies&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td style="text-align: left"&gt;Dependabot alerts&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td style="text-align: left"&gt;Warns you when a known vulnerability is found in a dependency&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td style="text-align: left"&gt;Dependabot security updates&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td style="text-align: left"&gt;Automatically opens PRs to update vulnerable dependencies to patched versions&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td style="text-align: left"&gt;Grouped security updates&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td style="text-align: left"&gt;Groups multiple security updates into a single PR&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td style="text-align: left"&gt;Dependabot version updates&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td style="text-align: left"&gt;Opens PRs periodically to update dependencies to newer versions&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&lt;/tbody&gt;&#10;&lt;/table&gt;&#10;&lt;p&gt;Of these, Dependabot version updates is the only one that creates update PRs regardless of whether a vulnerability exists.&lt;/p&gt;&#10;&lt;p&gt;Personally, I consider Dependabot alerts to be the bare minimum. Because Dependabot alerts requires the Dependency graph, I decided to enable both.&lt;/p&gt;&#10;&lt;p&gt;To configure it, first open the &amp;ldquo;Security and quality&amp;rdquo; settings for the repository. If you see an &amp;ldquo;Enable Dependabot alerts&amp;rdquo; button like the one below, the feature is not currently enabled.&lt;/p&gt;&#10;&lt;p&gt;&lt;img alt="Dependabot alerts is not enabled" class="gallery-image" data-flex-basis="433px" data-flex-grow="180" height="585" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://notes.nakurei.com/post/github-repo-security-settings/2026-09-19-235705.png" srcset="https://notes.nakurei.com/post/github-repo-security-settings/2026-09-19-235705_hu_7e37057b00763d95.png 800w, https://notes.nakurei.com/post/github-repo-security-settings/2026-09-19-235705.png 1056w" width="1056"&gt;&lt;/p&gt;&#10;&lt;p&gt;Clicking the button takes you to the Advanced Security settings page shown below. From there, click &amp;ldquo;Enable&amp;rdquo; in the Dependabot alerts section.&lt;/p&gt;&#10;&lt;p&gt;&lt;img alt="Click this Enable button to enable Dependabot alerts" class="gallery-image" data-flex-basis="223px" data-flex-grow="93" height="793" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://notes.nakurei.com/post/github-repo-security-settings/2026-09-22_215315.png" width="739"&gt;&lt;/p&gt;&#10;&lt;p&gt;If the Dependency graph has not yet been enabled, GitHub will show a warning like the one below. There is no problem with this, so click &amp;ldquo;Enable.&amp;rdquo;&lt;/p&gt;&#10;&lt;p&gt;&lt;img alt="A warning appears saying that Dependabot alerts requires the Dependency graph" class="gallery-image" data-flex-basis="537px" data-flex-grow="224" height="229" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://notes.nakurei.com/post/github-repo-security-settings/2026-09-22_215536.png" width="513"&gt;&lt;/p&gt;&#10;&lt;p&gt;If the button now says &amp;ldquo;Disable,&amp;rdquo; as shown below, Dependabot alerts has been enabled successfully.&lt;/p&gt;&#10;&lt;p&gt;&lt;img alt="Dependabot alerts is enabled" class="gallery-image" data-flex-basis="352px" data-flex-grow="146" height="501" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://notes.nakurei.com/post/github-repo-security-settings/2026-09-22_215943.png" width="735"&gt;&lt;/p&gt;&#10;&lt;p&gt;The &amp;ldquo;Dependabot malware alerts&amp;rdquo; option shown in the same screen also looked useful, so I enabled that as well.&lt;/p&gt;&#10;&lt;h2 id="5-enable-code-scanning"&gt;&#10; 5. Enable Code scanning&lt;a href="#5-enable-code-scanning"&gt;&#10; &lt;img src="https://notes.nakurei.com/icons/link.svg" width="44" height="44" style="width: 0.9em; margin-left: 0.25em; margin-bottom: -0.12em;" alt="Link to this heading" /&gt;&#10; &lt;/a&gt;&lt;/h2&gt;&#10;&lt;p&gt;This can be enabled for public repositories or repositories owned by an organization.&lt;/p&gt;&#10;&lt;p&gt;Code scanning performs static analysis on the code in your repository to identify security vulnerabilities and coding errors. For example, it can flag issues such as SQL injection vulnerabilities.&lt;/p&gt;&#10;&#10; &#10; &lt;div&#10; class="url-card"&#10; style="&#10; display: flex;&#10; height: 100%;&#10; width: 100%;&#10; margin-top: 10px;&#10; margin-bottom: 10px;&#10; padding: 10px;&#10; border: solid 1px var(--table-border-color);&#10; border-radius: 0.5rem;&#10; overflow: hidden;&#10; "&#10; &gt;&#10; &lt;a&#10; href="https://docs.github.com/ja/code-security/concepts/code-scanning/code-scanning"&#10; target="_blank"&#10; rel="noopener noreferrer"&#10; style="&#10; display: flex;&#10; width: 100%;&#10; height: 100%;&#10; text-decoration: none;&#10; "&#10; class="linkcard"&#10; &gt;&#10; &#10; &lt;img&#10; src="https://notes.nakurei.com/remote/db564214c86173a155f04b50162541dea44d7c0c_hu_824cae58e9b59c9c.webp"&#10; alt="コード スキャン - GitHubドキュメント image"&#10; width="120"&#10; height="120"&#10; loading="lazy"&#10; decoding="async"&#10; style="&#10; max-width: 200px;&#10; max-height: 120px;&#10; object-fit: cover;&#10; margin: 0;&#10; flex-shrink: 0;&#10; "&gt;&#10; &#10;&#10; &lt;div&#10; style="&#10; display: flex;&#10; flex-direction: column;&#10; align-items: start;&#10; justify-content: center;&#10; margin-left: 12px;&#10; "&#10; &gt;&#10; &lt;p style="margin: 0; padding-left: 0; padding-bottom: 3px; border: none"&gt;&#10; &#10; コード スキャン - GitHubドキュメント&#10; &#10; &lt;/p&gt;&#10; &lt;p&#10; style="&#10; margin: 0;&#10; font-size: 12px;&#10; word-break: break-word;&#10; display: -webkit-box;&#10; display: box;&#10; -webkit-box-orient: vertical;&#10; box-orient: vertical;&#10; -webkit-line-clamp: 3;&#10; line-clamp: 3;&#10; overflow: hidden;&#10; "&#10; &gt;code scanningを使用して、GitHubのプロジェクトのコードでセキュリティの脆弱性とエラーを見つけることができます。&lt;/p&gt;&#10; &lt;div&#10; style="&#10; display: flex;&#10; flex-direction: row;&#10; align-items: center;&#10; gap: 2px;&#10; "&#10; &gt;&lt;img&#10; src="https://notes.nakurei.com/remote/favicon-93e8494b5705d47fd44472eac39f114eda44f780.png"&#10; width="14"&#10; height="14"&#10; style="margin-right: 2px;"&#10; alt="docs.github.com favicon image"&#10; /&gt;&lt;span style="font-size: small; color: var(--card-text-color-tertiary);"&gt;&#10; docs.github.com&#10; &lt;/span&gt;&#10; &lt;/div&gt;&#10; &lt;/div&gt;&#10; &lt;/a&gt;&#10; &lt;/div&gt;&lt;style&gt;&#10; .url-card:hover {&#10; box-shadow: 0 0 0 1px var(--card-text-color-tertiary);&#10; }&#10;&lt;/style&gt;&#10;&#10;&lt;p&gt;Code scanning with CodeQL can also detect insecure GitHub Actions workflows. GitHub now provides a default CodeQL configuration that can be enabled with just a few clicks. Very convenient.&lt;/p&gt;&#10;&lt;p&gt;With the default setup, configuration is straightforward. First, check &amp;ldquo;Code scanning alerts&amp;rdquo; under &amp;ldquo;Security and quality&amp;rdquo; for the repository you want to configure.&lt;/p&gt;&#10;&lt;p&gt;If you see a &amp;ldquo;Set up code scanning&amp;rdquo; button like the one below, Code scanning has not yet been enabled.&lt;/p&gt;&#10;&lt;p&gt;&lt;img alt="Code scanning is not enabled yet" class="gallery-image" data-flex-basis="322px" data-flex-grow="134" height="519" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://notes.nakurei.com/post/github-repo-security-settings/2026-09-22_221046.png" width="697"&gt;&lt;/p&gt;&#10;&lt;p&gt;Clicking &amp;ldquo;Set up code scanning&amp;rdquo; takes you to the Advanced Security settings page. You can customize the configuration, but the simplest option is to use CodeQL with the default setup. If it has not yet been configured, you should see something like the screen below. Select &amp;ldquo;Default&amp;rdquo; from &amp;ldquo;Set up.&amp;rdquo;&lt;/p&gt;&#10;&lt;p&gt;&lt;img alt="Setting up CodeQL" class="gallery-image" data-flex-basis="624px" data-flex-grow="260" height="285" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://notes.nakurei.com/post/github-repo-security-settings/2026-09-22_221254.png" width="742"&gt;&lt;/p&gt;&#10;&lt;p&gt;GitHub then analyzes the repository automatically and generates a default configuration. If anything looks incorrect, you can edit it here.&lt;/p&gt;&#10;&lt;p&gt;&lt;img alt="Automatic analysis results for ticko, a Python package I maintain. Since ticko is a Python package and is published to PyPI through GitHub Actions, the detected configuration is correct." class="gallery-image" data-flex-basis="193px" data-flex-grow="80" height="604" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://notes.nakurei.com/post/github-repo-security-settings/2026-09-22_221511.png" width="487"&gt;&lt;/p&gt;&#10;&lt;p&gt;If the configuration looks correct, click &amp;ldquo;Enable CodeQL.&amp;rdquo; Setup takes a few minutes to complete.&lt;/p&gt;&#10;&lt;p&gt;Once CodeQL is enabled and the scan has run successfully, the status will be shown in the settings.&lt;/p&gt;&#10;&lt;p&gt;&lt;img alt="Code scanning is enabled and a scan has completed" class="gallery-image" data-flex-basis="1854px" data-flex-grow="772" height="91" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://notes.nakurei.com/post/github-repo-security-settings/2026-09-22_221912.png" width="703"&gt;&lt;/p&gt;&#10;&lt;p&gt;You can check the scan results from the Actions tab on GitHub.&lt;/p&gt;&#10;&lt;p&gt;&lt;img alt="Scan results in the GitHub Actions tab" class="gallery-image" data-flex-basis="484px" data-flex-grow="201" height="510" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://notes.nakurei.com/post/github-repo-security-settings/2026-09-22_222101.png" srcset="https://notes.nakurei.com/post/github-repo-security-settings/2026-09-22_222101_hu_6c46544d0e154cce.png 800w, https://notes.nakurei.com/post/github-repo-security-settings/2026-09-22_222101.png 1030w" width="1030"&gt;&lt;/p&gt;&#10;&lt;h2 id="6-protect-the-default-branch"&gt;&#10; 6. Protect the default branch&lt;a href="#6-protect-the-default-branch"&gt;&#10; &lt;img src="https://notes.nakurei.com/icons/link.svg" width="44" height="44" style="width: 0.9em; margin-left: 0.25em; margin-bottom: -0.12em;" alt="Link to this heading" /&gt;&#10; &lt;/a&gt;&lt;/h2&gt;&#10;&lt;p&gt;For most repositories, the default branch is probably &lt;code&gt;main&lt;/code&gt;. You can protect this branch so that changes cannot be pushed directly to it. For example, you can require changes to go through a pull request and require at least one approval before merging.&lt;/p&gt;&#10;&lt;p&gt;Personally, I find this more annoying than useful for private repositories that I work on alone. For public repositories, however, simply preventing direct pushes to the default branch provides a significant benefit.&lt;/p&gt;&#10;&lt;p&gt;You can also make security checks part of the merge requirements, allowing Dependabot alerts or code scanning results to block a merge when necessary.&lt;/p&gt;&#10;&lt;p&gt;I had already configured this in the past, so see the article below for the details.&lt;/p&gt;&#10;&#10; &#10; &#10; &lt;div&#10; class="url-card"&#10; style="&#10; display: flex;&#10; height: 100%;&#10; width: 100%;&#10; margin-top: 10px;&#10; margin-bottom: 10px;&#10; padding: 10px;&#10; border: solid 1px var(--table-border-color);&#10; border-radius: 0.5rem;&#10; overflow: hidden;&#10; "&#10; &gt;&#10; &lt;a&#10; href="https://notes.nakurei.com/post/github-branching-rules-notes/"&#10; target="_blank"&#10; rel="noopener noreferrer"&#10; style="&#10; display: flex;&#10; width: 100%;&#10; height: 100%;&#10; text-decoration: none;&#10; "&#10; class="linkcard"&#10; &gt;&#10; &#10; &lt;img&#10; src="https://notes.nakurei.com/icons/photo-off.svg"&#10; alt="GitHubのブランチ保護のルールについて調べたときのメモ image"&#10; width="120"&#10; height="120"&#10; loading="lazy"&#10; decoding="async"&#10; style="&#10; max-width: 200px;&#10; max-height: 120px;&#10; object-fit: cover;&#10; margin: 0;&#10; flex-shrink: 0;&#10; "&gt;&#10; &#10;&#10; &lt;div&#10; style="&#10; display: flex;&#10; flex-direction: column;&#10; align-items: start;&#10; justify-content: center;&#10; margin-left: 12px;&#10; "&#10; &gt;&#10; &lt;p style="margin: 0; padding-left: 0; padding-bottom: 3px; border: none"&gt;&#10; &#10; GitHubのブランチ保護のルールについて調べたときのメモ&#10; &#10; &lt;/p&gt;&#10; &lt;p&#10; style="&#10; margin: 0;&#10; font-size: 12px;&#10; word-break: break-word;&#10; display: -webkit-box;&#10; display: box;&#10; -webkit-box-orient: vertical;&#10; box-orient: vertical;&#10; -webkit-line-clamp: 3;&#10; line-clamp: 3;&#10; overflow: hidden;&#10; "&#10; &gt;&lt;/p&gt;&#10; &lt;div&#10; style="&#10; display: flex;&#10; flex-direction: row;&#10; align-items: center;&#10; gap: 2px;&#10; "&#10; &gt;&lt;img&#10; src="https://notes.nakurei.com/remote/favicon-1eff5ad74ed7b442dfa6826d07982b3bff45afb2.png"&#10; width="14"&#10; height="14"&#10; style="margin-right: 2px;"&#10; alt="notes.nakurei.com favicon image"&#10; /&gt;&lt;span style="font-size: small; color: var(--card-text-color-tertiary);"&gt;&#10; notes.nakurei.com&#10; &lt;/span&gt;&#10; &lt;/div&gt;&#10; &lt;/div&gt;&#10; &lt;/a&gt;&#10; &lt;/div&gt;&lt;style&gt;&#10; .url-card:hover {&#10; box-shadow: 0 0 0 1px var(--card-text-color-tertiary);&#10; }&#10;&lt;/style&gt;&#10;&#10;&lt;h2 id="wrapping-up"&gt;&#10; Wrapping up&lt;a href="#wrapping-up"&gt;&#10; &lt;img src="https://notes.nakurei.com/icons/link.svg" width="44" height="44" style="width: 0.9em; margin-left: 0.25em; margin-bottom: -0.12em;" alt="Link to this heading" /&gt;&#10; &lt;/a&gt;&lt;/h2&gt;&#10;&lt;p&gt;It took me a while because I was researching each setting as I went, but in the end, the only parts that really take any time are writing the &lt;code&gt;SECURITY.md&lt;/code&gt; file and protecting the default branch. Everything else is mostly just a matter of clicking &amp;ldquo;Enable&amp;rdquo; on a settings page.&lt;/p&gt;&#10;&lt;p&gt;So yes, apparently you really can get through all of this in under 30 minutes.&lt;/p&gt;&#10;&lt;div class="footnotes" role="doc-endnotes"&gt;&#10;&lt;hr&gt;&#10;&lt;ol&gt;&#10;&lt;li id="fn:1"&gt;&#10;&lt;p&gt;Any of these locations is fine. According to the &lt;a class="link" href="https://docs.github.com/en/communities/setting-up-your-project-for-healthy-contributions/creating-a-default-community-health-file" target="_blank" rel="noopener"&#10; &gt;official documentation&lt;/a&gt;, GitHub checks them in the following order of precedence: &lt;code&gt;.github&lt;/code&gt; directory -&amp;gt; repository root -&amp;gt; &lt;code&gt;docs&lt;/code&gt; directory.&amp;#160;&lt;a href="#fnref:1" class="footnote-backref" role="doc-backlink"&gt;&amp;#x21a9;&amp;#xfe0e;&lt;/a&gt;&lt;/p&gt;&#10;&lt;/li&gt;&#10;&lt;li id="fn:2"&gt;&#10;&lt;p&gt;I say &amp;ldquo;apparently&amp;rdquo; because this has never actually happened to me, so I have not seen it firsthand. Better that way, of course.&amp;#160;&lt;a href="#fnref:2" class="footnote-backref" role="doc-backlink"&gt;&amp;#x21a9;&amp;#xfe0e;&lt;/a&gt;&lt;/p&gt;&#10;&lt;/li&gt;&#10;&lt;/ol&gt;&#10;&lt;/div&gt;&#10;</description></item><item><title>Testing a Linux Tauri App on a Hyper-V Ubuntu VM</title><link>https://notes.nakurei.com/en/post/tauri-deb-test-on-hyperv-ubuntu/</link><pubDate>Sun, 13 Sep 2026 22:43:26 +0900</pubDate><guid>https://notes.nakurei.com/en/post/tauri-deb-test-on-hyperv-ubuntu/</guid><description>&lt;img src="https://notes.nakurei.com/post/tauri-deb-test-on-hyperv-ubuntu/image.webp" alt="Featured image of post Testing a Linux Tauri App on a Hyper-V Ubuntu VM" /&gt;&lt;h2 id="what-is-this"&gt;&#10; What is this&lt;a href="#what-is-this"&gt;&#10; &lt;img src="https://notes.nakurei.com/icons/link.svg" width="44" height="44" style="width: 0.9em; margin-left: 0.25em; margin-bottom: -0.12em;" alt="Link to this heading" /&gt;&#10; &lt;/a&gt;&lt;/h2&gt;&#10;&lt;p&gt;Notes on the steps I follow to try out a Tauri app built on a Windows host machine on an Ubuntu virtual machine (VM) running on Hyper-V.&lt;/p&gt;&#10;&lt;h2 id="environment"&gt;&#10; Environment&lt;a href="#environment"&gt;&#10; &lt;img src="https://notes.nakurei.com/icons/link.svg" width="44" height="44" style="width: 0.9em; margin-left: 0.25em; margin-bottom: -0.12em;" alt="Link to this heading" /&gt;&#10; &lt;/a&gt;&lt;/h2&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;Windows 11 Pro&lt;/li&gt;&#10;&lt;li&gt;Ubuntu VM on Hyper-V: Ubuntu 26.04 LTS&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;h2 id="preparation"&gt;&#10; Preparation&lt;a href="#preparation"&gt;&#10; &lt;img src="https://notes.nakurei.com/icons/link.svg" width="44" height="44" style="width: 0.9em; margin-left: 0.25em; margin-bottom: -0.12em;" alt="Link to this heading" /&gt;&#10; &lt;/a&gt;&lt;/h2&gt;&#10;&lt;h3 id="on-the-windows-host"&gt;&#10; On the Windows host&lt;a href="#on-the-windows-host"&gt;&#10; &lt;img src="https://notes.nakurei.com/icons/link.svg" width="44" height="44" style="width: 0.9em; margin-left: 0.25em; margin-bottom: -0.12em;" alt="Link to this heading" /&gt;&#10; &lt;/a&gt;&lt;/h3&gt;&#10;&lt;p&gt;Build for Linux ahead of time. I use Docker for the build.&#10;As long as you end up with a &lt;code&gt;.deb&lt;/code&gt; file, you are good to go.&lt;/p&gt;&#10;&lt;h3 id="on-the-ubuntu-vm"&gt;&#10; On the Ubuntu VM&lt;a href="#on-the-ubuntu-vm"&gt;&#10; &lt;img src="https://notes.nakurei.com/icons/link.svg" width="44" height="44" style="width: 0.9em; margin-left: 0.25em; margin-bottom: -0.12em;" alt="Link to this heading" /&gt;&#10; &lt;/a&gt;&lt;/h3&gt;&#10;&lt;p&gt;Install an SSH server on the Ubuntu VM.&lt;/p&gt;&#10;&lt;style&gt;&#10; .code-block-filename {&#10; --code-filename-fontsize: calc(0.96em * 0.9);&#10;&#10; display: table;&#10; max-width: 100%;&#10; background: var(--accent-color-darker);&#10; color: var(--accent-color-text);&#10; font-size: var(--code-filename-fontsize);&#10; line-height: 1;&#10; padding-top: calc(var(--code-filename-fontsize) * 0.5);&#10; padding-left: calc(var(--code-filename-fontsize) * 0.7);&#10; padding-right: calc(var(--code-filename-fontsize) * 0.7);&#10; padding-bottom: calc(var(--code-filename-fontsize) * 0.7);&#10; border-radius: calc(var(--code-filename-fontsize) * 0.5)&#10; calc(var(--code-filename-fontsize) * 0.5) 0 0;&#10; }&#10; .code-block-content {&#10; padding-top: 0px;&#10; }&#10;&lt;/style&gt;&#10;&#10;&lt;div&gt;&#10; &lt;div class="code-block-content"&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;sudo apt update&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;sudo apt install openssh-server&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;sudo systemctl &lt;span class="nb"&gt;enable&lt;/span&gt; --now ssh&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&#10; &lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;p&gt;Check the IP address of the Ubuntu VM.&lt;/p&gt;&#10;&lt;style&gt;&#10; .code-block-filename {&#10; --code-filename-fontsize: calc(0.96em * 0.9);&#10;&#10; display: table;&#10; max-width: 100%;&#10; background: var(--accent-color-darker);&#10; color: var(--accent-color-text);&#10; font-size: var(--code-filename-fontsize);&#10; line-height: 1;&#10; padding-top: calc(var(--code-filename-fontsize) * 0.5);&#10; padding-left: calc(var(--code-filename-fontsize) * 0.7);&#10; padding-right: calc(var(--code-filename-fontsize) * 0.7);&#10; padding-bottom: calc(var(--code-filename-fontsize) * 0.7);&#10; border-radius: calc(var(--code-filename-fontsize) * 0.5)&#10; calc(var(--code-filename-fontsize) * 0.5) 0 0;&#10; }&#10; .code-block-content {&#10; padding-top: 0px;&#10; }&#10;&lt;/style&gt;&#10;&#10;&lt;div&gt;&#10; &lt;div class="code-block-content"&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;ip addr&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&#10; &lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;p&gt;The address like &lt;code&gt;172.XX.XX.XX&lt;/code&gt; shown under &lt;code&gt;inet&lt;/code&gt; for &lt;code&gt;eth0&lt;/code&gt; is the VM&amp;rsquo;s IP.&lt;/p&gt;&#10;&lt;h2 id="installing-on-the-vm"&gt;&#10; Installing on the VM&lt;a href="#installing-on-the-vm"&gt;&#10; &lt;img src="https://notes.nakurei.com/icons/link.svg" width="44" height="44" style="width: 0.9em; margin-left: 0.25em; margin-bottom: -0.12em;" alt="Link to this heading" /&gt;&#10; &lt;/a&gt;&lt;/h2&gt;&#10;&lt;p&gt;Copy the &lt;code&gt;.deb&lt;/code&gt; file from the Windows host to the Ubuntu VM. The easiest way is to run &lt;code&gt;scp&lt;/code&gt; from the directory that contains the &lt;code&gt;.deb&lt;/code&gt; file.&#10;Replace &lt;code&gt;your-app.deb&lt;/code&gt; with the name of the &lt;code&gt;.deb&lt;/code&gt; file you are copying, &lt;code&gt;username&lt;/code&gt; with the user name on the Ubuntu VM, and &lt;code&gt;172.XX.XX.XX&lt;/code&gt; with the IP address of the Ubuntu VM.&lt;/p&gt;&#10;&lt;style&gt;&#10; .code-block-filename {&#10; --code-filename-fontsize: calc(0.96em * 0.9);&#10;&#10; display: table;&#10; max-width: 100%;&#10; background: var(--accent-color-darker);&#10; color: var(--accent-color-text);&#10; font-size: var(--code-filename-fontsize);&#10; line-height: 1;&#10; padding-top: calc(var(--code-filename-fontsize) * 0.5);&#10; padding-left: calc(var(--code-filename-fontsize) * 0.7);&#10; padding-right: calc(var(--code-filename-fontsize) * 0.7);&#10; padding-bottom: calc(var(--code-filename-fontsize) * 0.7);&#10; border-radius: calc(var(--code-filename-fontsize) * 0.5)&#10; calc(var(--code-filename-fontsize) * 0.5) 0 0;&#10; }&#10; .code-block-content {&#10; padding-top: 0px;&#10; }&#10;&lt;/style&gt;&#10;&#10;&lt;div&gt;&#10; &lt;div class="code-block-filename"&gt;Run on the Windows host&lt;/div&gt;&#10; &#10; &lt;div class="code-block-content"&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;scp your-app.deb username@172.XX.XX.XX:/tmp/&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&#10; &lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;p&gt;If &lt;code&gt;scp&lt;/code&gt; asks &lt;code&gt;Are you sure you want to continue connecting (yes/no/[fingerprint])?&lt;/code&gt;, answer &lt;code&gt;yes&lt;/code&gt;.&#10;It then prompts for a password, so enter the login password of the Ubuntu VM.&lt;/p&gt;&#10;&lt;p&gt;Once the copy succeeds, you can confirm it with the &lt;code&gt;ls&lt;/code&gt; command.&lt;/p&gt;&#10;&lt;style&gt;&#10; .code-block-filename {&#10; --code-filename-fontsize: calc(0.96em * 0.9);&#10;&#10; display: table;&#10; max-width: 100%;&#10; background: var(--accent-color-darker);&#10; color: var(--accent-color-text);&#10; font-size: var(--code-filename-fontsize);&#10; line-height: 1;&#10; padding-top: calc(var(--code-filename-fontsize) * 0.5);&#10; padding-left: calc(var(--code-filename-fontsize) * 0.7);&#10; padding-right: calc(var(--code-filename-fontsize) * 0.7);&#10; padding-bottom: calc(var(--code-filename-fontsize) * 0.7);&#10; border-radius: calc(var(--code-filename-fontsize) * 0.5)&#10; calc(var(--code-filename-fontsize) * 0.5) 0 0;&#10; }&#10; .code-block-content {&#10; padding-top: 0px;&#10; }&#10;&lt;/style&gt;&#10;&#10;&lt;div&gt;&#10; &lt;div class="code-block-filename"&gt;Run on the Ubuntu VM&lt;/div&gt;&#10; &#10; &lt;div class="code-block-content"&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;ls /tmp/&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&#10; &lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;p&gt;With the file in place, install it.&lt;/p&gt;&#10;&lt;style&gt;&#10; .code-block-filename {&#10; --code-filename-fontsize: calc(0.96em * 0.9);&#10;&#10; display: table;&#10; max-width: 100%;&#10; background: var(--accent-color-darker);&#10; color: var(--accent-color-text);&#10; font-size: var(--code-filename-fontsize);&#10; line-height: 1;&#10; padding-top: calc(var(--code-filename-fontsize) * 0.5);&#10; padding-left: calc(var(--code-filename-fontsize) * 0.7);&#10; padding-right: calc(var(--code-filename-fontsize) * 0.7);&#10; padding-bottom: calc(var(--code-filename-fontsize) * 0.7);&#10; border-radius: calc(var(--code-filename-fontsize) * 0.5)&#10; calc(var(--code-filename-fontsize) * 0.5) 0 0;&#10; }&#10; .code-block-content {&#10; padding-top: 0px;&#10; }&#10;&lt;/style&gt;&#10;&#10;&lt;div&gt;&#10; &lt;div class="code-block-filename"&gt;Run on the Ubuntu VM&lt;/div&gt;&#10; &#10; &lt;div class="code-block-content"&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;sudo apt install /tmp/your-app.deb&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&#10; &lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;p&gt;If the installation succeeds, you can launch the app and check that it works.&lt;/p&gt;&#10;&lt;h2 id="uninstalling-on-the-vm"&gt;&#10; Uninstalling on the VM&lt;a href="#uninstalling-on-the-vm"&gt;&#10; &lt;img src="https://notes.nakurei.com/icons/link.svg" width="44" height="44" style="width: 0.9em; margin-left: 0.25em; margin-bottom: -0.12em;" alt="Link to this heading" /&gt;&#10; &lt;/a&gt;&lt;/h2&gt;&#10;&lt;p&gt;To uninstall the app you installed, run the following command.&#10;Replace &lt;code&gt;your-app&lt;/code&gt; with the name of the app you installed.&lt;/p&gt;&#10;&lt;style&gt;&#10; .code-block-filename {&#10; --code-filename-fontsize: calc(0.96em * 0.9);&#10;&#10; display: table;&#10; max-width: 100%;&#10; background: var(--accent-color-darker);&#10; color: var(--accent-color-text);&#10; font-size: var(--code-filename-fontsize);&#10; line-height: 1;&#10; padding-top: calc(var(--code-filename-fontsize) * 0.5);&#10; padding-left: calc(var(--code-filename-fontsize) * 0.7);&#10; padding-right: calc(var(--code-filename-fontsize) * 0.7);&#10; padding-bottom: calc(var(--code-filename-fontsize) * 0.7);&#10; border-radius: calc(var(--code-filename-fontsize) * 0.5)&#10; calc(var(--code-filename-fontsize) * 0.5) 0 0;&#10; }&#10; .code-block-content {&#10; padding-top: 0px;&#10; }&#10;&lt;/style&gt;&#10;&#10;&lt;div&gt;&#10; &lt;div class="code-block-filename"&gt;Run on the Ubuntu VM&lt;/div&gt;&#10; &#10; &lt;div class="code-block-content"&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;sudo apt remove your-app&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&#10; &lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;p&gt;If you also want to remove the configuration files, use &lt;code&gt;purge&lt;/code&gt; instead.&lt;/p&gt;&#10;&lt;style&gt;&#10; .code-block-filename {&#10; --code-filename-fontsize: calc(0.96em * 0.9);&#10;&#10; display: table;&#10; max-width: 100%;&#10; background: var(--accent-color-darker);&#10; color: var(--accent-color-text);&#10; font-size: var(--code-filename-fontsize);&#10; line-height: 1;&#10; padding-top: calc(var(--code-filename-fontsize) * 0.5);&#10; padding-left: calc(var(--code-filename-fontsize) * 0.7);&#10; padding-right: calc(var(--code-filename-fontsize) * 0.7);&#10; padding-bottom: calc(var(--code-filename-fontsize) * 0.7);&#10; border-radius: calc(var(--code-filename-fontsize) * 0.5)&#10; calc(var(--code-filename-fontsize) * 0.5) 0 0;&#10; }&#10; .code-block-content {&#10; padding-top: 0px;&#10; }&#10;&lt;/style&gt;&#10;&#10;&lt;div&gt;&#10; &lt;div class="code-block-filename"&gt;Run on the Ubuntu VM&lt;/div&gt;&#10; &#10; &lt;div class="code-block-content"&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;sudo apt purge your-app&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&#10; &lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;p&gt;After that, run the following command to remove dependency packages that are no longer needed.&lt;/p&gt;&#10;&lt;style&gt;&#10; .code-block-filename {&#10; --code-filename-fontsize: calc(0.96em * 0.9);&#10;&#10; display: table;&#10; max-width: 100%;&#10; background: var(--accent-color-darker);&#10; color: var(--accent-color-text);&#10; font-size: var(--code-filename-fontsize);&#10; line-height: 1;&#10; padding-top: calc(var(--code-filename-fontsize) * 0.5);&#10; padding-left: calc(var(--code-filename-fontsize) * 0.7);&#10; padding-right: calc(var(--code-filename-fontsize) * 0.7);&#10; padding-bottom: calc(var(--code-filename-fontsize) * 0.7);&#10; border-radius: calc(var(--code-filename-fontsize) * 0.5)&#10; calc(var(--code-filename-fontsize) * 0.5) 0 0;&#10; }&#10; .code-block-content {&#10; padding-top: 0px;&#10; }&#10;&lt;/style&gt;&#10;&#10;&lt;div&gt;&#10; &lt;div class="code-block-filename"&gt;Run on the Ubuntu VM&lt;/div&gt;&#10; &#10; &lt;div class="code-block-content"&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;sudo apt autoremove&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&#10; &lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;p&gt;The installer can be deleted with &lt;code&gt;rm&lt;/code&gt;.&lt;/p&gt;&#10;&lt;style&gt;&#10; .code-block-filename {&#10; --code-filename-fontsize: calc(0.96em * 0.9);&#10;&#10; display: table;&#10; max-width: 100%;&#10; background: var(--accent-color-darker);&#10; color: var(--accent-color-text);&#10; font-size: var(--code-filename-fontsize);&#10; line-height: 1;&#10; padding-top: calc(var(--code-filename-fontsize) * 0.5);&#10; padding-left: calc(var(--code-filename-fontsize) * 0.7);&#10; padding-right: calc(var(--code-filename-fontsize) * 0.7);&#10; padding-bottom: calc(var(--code-filename-fontsize) * 0.7);&#10; border-radius: calc(var(--code-filename-fontsize) * 0.5)&#10; calc(var(--code-filename-fontsize) * 0.5) 0 0;&#10; }&#10; .code-block-content {&#10; padding-top: 0px;&#10; }&#10;&lt;/style&gt;&#10;&#10;&lt;div&gt;&#10; &lt;div class="code-block-filename"&gt;Run on the Ubuntu VM&lt;/div&gt;&#10; &#10; &lt;div class="code-block-content"&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;rm /tmp/your-app.deb&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&#10; &lt;/div&gt;&#10;&lt;/div&gt;&#10;</description></item><item><title>When Paste Suddenly Stopped Working in tmux on WSL: Notes on the Fix</title><link>https://notes.nakurei.com/en/post/wsl-tmux-paste-not-working/</link><pubDate>Mon, 07 Sep 2026 23:03:16 +0900</pubDate><guid>https://notes.nakurei.com/en/post/wsl-tmux-paste-not-working/</guid><description>&lt;img src="https://notes.nakurei.com/post/wsl-tmux-paste-not-working/image.webp" alt="Featured image of post When Paste Suddenly Stopped Working in tmux on WSL: Notes on the Fix" /&gt;&lt;h2 id="what-this-is"&gt;&#10; What this is&lt;a href="#what-this-is"&gt;&#10; &lt;img src="https://notes.nakurei.com/icons/link.svg" width="44" height="44" style="width: 0.9em; margin-left: 0.25em; margin-bottom: -0.12em;" alt="Link to this heading" /&gt;&#10; &lt;/a&gt;&lt;/h2&gt;&#10;&lt;p&gt;Some notes on how I fixed an issue where I couldn&amp;rsquo;t paste text into tmux on WSL.&lt;/p&gt;&#10;&lt;h2 id="what-happened"&gt;&#10; What happened&lt;a href="#what-happened"&gt;&#10; &lt;img src="https://notes.nakurei.com/icons/link.svg" width="44" height="44" style="width: 0.9em; margin-left: 0.25em; margin-bottom: -0.12em;" alt="Link to this heading" /&gt;&#10; &lt;/a&gt;&lt;/h2&gt;&#10;&lt;p&gt;When I tried to paste text copied from Notepad on Windows into tmux on WSL, nothing would paste, no matter what I copied.&lt;/p&gt;&#10;&lt;h2 id="environment"&gt;&#10; Environment&lt;a href="#environment"&gt;&#10; &lt;img src="https://notes.nakurei.com/icons/link.svg" width="44" height="44" style="width: 0.9em; margin-left: 0.25em; margin-bottom: -0.12em;" alt="Link to this heading" /&gt;&#10; &lt;/a&gt;&lt;/h2&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;Windows 11 + WSL2 (Ubuntu 24.04) + tmux&lt;/li&gt;&#10;&lt;li&gt;I was using the VS Code integrated terminal&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;h2 id="cause"&gt;&#10; Cause&lt;a href="#cause"&gt;&#10; &lt;img src="https://notes.nakurei.com/icons/link.svg" width="44" height="44" style="width: 0.9em; margin-left: 0.25em; margin-bottom: -0.12em;" alt="Link to this heading" /&gt;&#10; &lt;/a&gt;&lt;/h2&gt;&#10;&lt;p&gt;The cause turned out to be broken WSL interop.&lt;/p&gt;&#10;&lt;h3 id="investigating-the-cause"&gt;&#10; Investigating the cause&lt;a href="#investigating-the-cause"&gt;&#10; &lt;img src="https://notes.nakurei.com/icons/link.svg" width="44" height="44" style="width: 0.9em; margin-left: 0.25em; margin-bottom: -0.12em;" alt="Link to this heading" /&gt;&#10; &lt;/a&gt;&lt;/h3&gt;&#10;&lt;p&gt;I tried a test where I put a known string on the clipboard and then pasted it.&lt;/p&gt;&#10;&lt;style&gt;&#10; .code-block-filename {&#10; --code-filename-fontsize: calc(0.96em * 0.9);&#10;&#10; display: table;&#10; max-width: 100%;&#10; background: var(--accent-color-darker);&#10; color: var(--accent-color-text);&#10; font-size: var(--code-filename-fontsize);&#10; line-height: 1;&#10; padding-top: calc(var(--code-filename-fontsize) * 0.5);&#10; padding-left: calc(var(--code-filename-fontsize) * 0.7);&#10; padding-right: calc(var(--code-filename-fontsize) * 0.7);&#10; padding-bottom: calc(var(--code-filename-fontsize) * 0.7);&#10; border-radius: calc(var(--code-filename-fontsize) * 0.5)&#10; calc(var(--code-filename-fontsize) * 0.5) 0 0;&#10; }&#10; .code-block-content {&#10; padding-top: 0px;&#10; }&#10;&lt;/style&gt;&#10;&#10;&lt;div&gt;&#10; &lt;div class="code-block-content"&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nb"&gt;printf&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;PASTE_TEST_OK_123&amp;#39;&lt;/span&gt; &lt;span class="p"&gt;|&lt;/span&gt; clip.exe &lt;span class="c1"&gt;# Put a known value on the clipboard&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# Press Ctrl+V immediately afterward. If everything is working,&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# PASTE_TEST_OK_123 should be pasted.&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&#10; &lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;p&gt;The result was that something completely different was pasted.&#10;From this behavior, I suspected that the problem was with writing to the clipboard, before the paste operation itself.&lt;/p&gt;&#10;&lt;p&gt;After some investigation, I found that while this problem was occurring, Windows executables in WSL were all failing like this:&lt;/p&gt;&#10;&lt;style&gt;&#10; .code-block-filename {&#10; --code-filename-fontsize: calc(0.96em * 0.9);&#10;&#10; display: table;&#10; max-width: 100%;&#10; background: var(--accent-color-darker);&#10; color: var(--accent-color-text);&#10; font-size: var(--code-filename-fontsize);&#10; line-height: 1;&#10; padding-top: calc(var(--code-filename-fontsize) * 0.5);&#10; padding-left: calc(var(--code-filename-fontsize) * 0.7);&#10; padding-right: calc(var(--code-filename-fontsize) * 0.7);&#10; padding-bottom: calc(var(--code-filename-fontsize) * 0.7);&#10; border-radius: calc(var(--code-filename-fontsize) * 0.5)&#10; calc(var(--code-filename-fontsize) * 0.5) 0 0;&#10; }&#10; .code-block-content {&#10; padding-top: 0px;&#10; }&#10;&lt;/style&gt;&#10;&#10;&lt;div&gt;&#10; &lt;div class="code-block-content"&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-sh" data-lang="sh"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;$ powershell.exe&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;/mnt/c/.../powershell.exe: 1: MZ����: not found&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;/mnt/c/.../powershell.exe: 9: Syntax error: &lt;span class="s2"&gt;&amp;#34;(&amp;#34;&lt;/span&gt; unexpected&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&#10; &lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;p&gt;I asked an AI about this, and apparently &lt;code&gt;MZ&lt;/code&gt; is the magic number used by Windows executables.An error like &lt;code&gt;MZ����: not found&lt;/code&gt; apparently means that the exe file is being interpreted and executed as a shell script.&#10;According to the AI, this is a characteristic symptom of the WSL interop execution handler having disappeared.&lt;/p&gt;&#10;&lt;p&gt;Apparently, the reason Windows binaries can be launched from within WSL in the first place is that the Linux kernel&amp;rsquo;s binfmt_misc mechanism has a registration rule that says, roughly, &amp;ldquo;if the first bytes of a file match this particular magic number, pass it to this particular interpreter.&amp;rdquo;&#10;Normally, when a file starts with &lt;code&gt;MZ&lt;/code&gt;, it&amp;rsquo;s handed to the WSL interop bridge, which starts the process on the Windows side. This time, however, that registration had disappeared, so &lt;code&gt;clip.exe&lt;/code&gt; was being interpreted as a shell script, which is why pasting stopped working.&lt;/p&gt;&#10;&lt;p&gt;I wasn&amp;rsquo;t able to determine exactly why the registration disappeared. The registrations under &lt;code&gt;/proc/sys/fs/binfmt_misc/&lt;/code&gt;, which are used by binfmt_misc, are not persistent.&#10;At least in my environment, I found the following in the logs:&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;A Docker Desktop crash followed by the WSL integration distro being unmounted&lt;/li&gt;&#10;&lt;li&gt;Repeated &lt;code&gt;Clock change detected&lt;/code&gt; messages, which I assume were traces of the system waking from sleep&lt;/li&gt;&#10;&lt;li&gt;A &lt;code&gt;cannot create /proc/sys/fs/binfmt_misc/WSLInterop: Permission denied&lt;/code&gt; message, apparently from a failed registration attempt caused by a conflict&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;p&gt;Personally, I suspect the Docker Desktop crash was the cause.&lt;/p&gt;&#10;&lt;h2 id="solution"&gt;&#10; Solution&lt;a href="#solution"&gt;&#10; &lt;img src="https://notes.nakurei.com/icons/link.svg" width="44" height="44" style="width: 0.9em; margin-left: 0.25em; margin-bottom: -0.12em;" alt="Link to this heading" /&gt;&#10; &lt;/a&gt;&lt;/h2&gt;&#10;&lt;p&gt;You can use the following commands to check whether broken WSL interop is really the cause.&lt;/p&gt;&#10;&lt;style&gt;&#10; .code-block-filename {&#10; --code-filename-fontsize: calc(0.96em * 0.9);&#10;&#10; display: table;&#10; max-width: 100%;&#10; background: var(--accent-color-darker);&#10; color: var(--accent-color-text);&#10; font-size: var(--code-filename-fontsize);&#10; line-height: 1;&#10; padding-top: calc(var(--code-filename-fontsize) * 0.5);&#10; padding-left: calc(var(--code-filename-fontsize) * 0.7);&#10; padding-right: calc(var(--code-filename-fontsize) * 0.7);&#10; padding-bottom: calc(var(--code-filename-fontsize) * 0.7);&#10; border-radius: calc(var(--code-filename-fontsize) * 0.5)&#10; calc(var(--code-filename-fontsize) * 0.5) 0 0;&#10; }&#10; .code-block-content {&#10; padding-top: 0px;&#10; }&#10;&lt;/style&gt;&#10;&#10;&lt;div&gt;&#10; &lt;div class="code-block-filename"&gt;Commands for diagnosing the cause&lt;/div&gt;&#10; &#10; &lt;div class="code-block-content"&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# Check whether the registration exists:&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# if WSLInterop is listed, it is registered&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;ls /proc/sys/fs/binfmt_misc/&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# Check whether it actually works:&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# if interop-alive is printed, everything is working&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;cmd.exe /c &lt;span class="s2"&gt;&amp;#34;echo interop-alive&amp;#34;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&#10; &lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;p&gt;If the second command fails with an &lt;code&gt;MZ...: not found&lt;/code&gt; error, restoring the registration is enough to fix the problem. Since all you&amp;rsquo;re doing is restoring the registration, pasting starts working again without restarting the shell.&lt;/p&gt;&#10;&lt;style&gt;&#10; .code-block-filename {&#10; --code-filename-fontsize: calc(0.96em * 0.9);&#10;&#10; display: table;&#10; max-width: 100%;&#10; background: var(--accent-color-darker);&#10; color: var(--accent-color-text);&#10; font-size: var(--code-filename-fontsize);&#10; line-height: 1;&#10; padding-top: calc(var(--code-filename-fontsize) * 0.5);&#10; padding-left: calc(var(--code-filename-fontsize) * 0.7);&#10; padding-right: calc(var(--code-filename-fontsize) * 0.7);&#10; padding-bottom: calc(var(--code-filename-fontsize) * 0.7);&#10; border-radius: calc(var(--code-filename-fontsize) * 0.5)&#10; calc(var(--code-filename-fontsize) * 0.5) 0 0;&#10; }&#10; .code-block-content {&#10; padding-top: 0px;&#10; }&#10;&lt;/style&gt;&#10;&#10;&lt;div&gt;&#10; &lt;div class="code-block-filename"&gt;Command to write the registration back&lt;/div&gt;&#10; &#10; &lt;div class="code-block-content"&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;sudo sh -c &lt;span class="s2"&gt;&amp;#34;echo &amp;#39;:WSLInterop:M::MZ::/init:PF&amp;#39; &amp;gt; /proc/sys/fs/binfmt_misc/register&amp;#34;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&#10; &lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;div class="block-highlight-warning"&gt;&#10; &lt;span class="icon-warning"&gt;&lt;svg xmlns="http://www.w3.org/2000/svg" class="icon icon-tabler icon-tabler-alert-triangle" width="44" height="44" viewBox="0 0 24 24" stroke-width="1.5" stroke="currentColor" fill="none" stroke-linecap="round" stroke-linejoin="round"&gt;&#10; &lt;path stroke="none" d="M0 0h24v24H0z" fill="none"/&gt;&#10; &lt;path d="M12 9v2m0 4v.01" /&gt;&#10; &lt;path d="M5 19h14a2 2 0 0 0 1.84 -2.75l-7.1 -12.25a2 2 0 0 0 -3.5 0l-7.1 12.25a2 2 0 0 0 1.75 2.75" /&gt;&#10;&lt;/svg&gt;&#10;&lt;/span&gt;&#10; &lt;span&gt;If you run this command when everything is working normally, it will fail with an &lt;code&gt;echo: I/O error&lt;/code&gt;. This is because writing to the register rejects a duplicate entry with the same name, so the error does not indicate that anything is wrong.&lt;/span&gt;&#10;&lt;/div&gt;&#10;&#10;&lt;p&gt;By the way, you can combine the check and the fix into a single line like this:&lt;/p&gt;&#10;&lt;style&gt;&#10; .code-block-filename {&#10; --code-filename-fontsize: calc(0.96em * 0.9);&#10;&#10; display: table;&#10; max-width: 100%;&#10; background: var(--accent-color-darker);&#10; color: var(--accent-color-text);&#10; font-size: var(--code-filename-fontsize);&#10; line-height: 1;&#10; padding-top: calc(var(--code-filename-fontsize) * 0.5);&#10; padding-left: calc(var(--code-filename-fontsize) * 0.7);&#10; padding-right: calc(var(--code-filename-fontsize) * 0.7);&#10; padding-bottom: calc(var(--code-filename-fontsize) * 0.7);&#10; border-radius: calc(var(--code-filename-fontsize) * 0.5)&#10; calc(var(--code-filename-fontsize) * 0.5) 0 0;&#10; }&#10; .code-block-content {&#10; padding-top: 0px;&#10; }&#10;&lt;/style&gt;&#10;&#10;&lt;div&gt;&#10; &lt;div class="code-block-content"&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="o"&gt;[&lt;/span&gt; -e /proc/sys/fs/binfmt_misc/WSLInterop &lt;span class="o"&gt;]&lt;/span&gt; &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class="nb"&gt;echo&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;No repair needed&amp;#34;&lt;/span&gt; &lt;span class="o"&gt;||&lt;/span&gt; sudo sh -c &lt;span class="s2"&gt;&amp;#34;echo &amp;#39;:WSLInterop:M::MZ::/init:PF&amp;#39; &amp;gt; /proc/sys/fs/binfmt_misc/register&amp;#34;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&#10; &lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;h2 id="wrapping-up"&gt;&#10; Wrapping up&lt;a href="#wrapping-up"&gt;&#10; &lt;img src="https://notes.nakurei.com/icons/link.svg" width="44" height="44" style="width: 0.9em; margin-left: 0.25em; margin-bottom: -0.12em;" alt="Link to this heading" /&gt;&#10; &lt;/a&gt;&lt;/h2&gt;&#10;&lt;p&gt;Thanks, Claude Code.&lt;/p&gt;&#10;</description></item><item><title>Notes on Migrating the Hugo Stack Theme from v3 to v4</title><link>https://notes.nakurei.com/en/post/hugo-stack-v4-migration/</link><pubDate>Thu, 03 Sep 2026 23:32:21 +0900</pubDate><guid>https://notes.nakurei.com/en/post/hugo-stack-v4-migration/</guid><description>&lt;img src="https://notes.nakurei.com/post/hugo-stack-v4-migration/image.webp" alt="Featured image of post Notes on Migrating the Hugo Stack Theme from v3 to v4" /&gt;&lt;h2 id="overview"&gt;&#10; Overview&lt;a href="#overview"&gt;&#10; &lt;img src="https://notes.nakurei.com/icons/link.svg" width="44" height="44" style="width: 0.9em; margin-left: 0.25em; margin-bottom: -0.12em;" alt="Link to this heading" /&gt;&#10; &lt;/a&gt;&lt;/h2&gt;&#10;&lt;p&gt;Notes on the changes I made and the issues I ran into while migrating the Hugo Stack theme used on this site from v3 to v4.&lt;/p&gt;&#10;&lt;p&gt;I mostly followed the official migration guide below.&lt;/p&gt;&#10;&#10; &#10; &#10; &lt;div&#10; class="url-card"&#10; style="&#10; display: flex;&#10; height: 100%;&#10; width: 100%;&#10; margin-top: 10px;&#10; margin-bottom: 10px;&#10; padding: 10px;&#10; border: solid 1px var(--table-border-color);&#10; border-radius: 0.5rem;&#10; overflow: hidden;&#10; "&#10; &gt;&#10; &lt;a&#10; href="https://stack.cai.im/guide/upgrade-to-v4"&#10; target="_blank"&#10; rel="noopener noreferrer"&#10; style="&#10; display: flex;&#10; width: 100%;&#10; height: 100%;&#10; text-decoration: none;&#10; "&#10; class="linkcard"&#10; &gt;&#10; &#10; &lt;img&#10; src="https://notes.nakurei.com/icons/photo-off.svg"&#10; alt="Upgrade to v4 | Stack image"&#10; width="120"&#10; height="120"&#10; loading="lazy"&#10; decoding="async"&#10; style="&#10; max-width: 200px;&#10; max-height: 120px;&#10; object-fit: cover;&#10; margin: 0;&#10; flex-shrink: 0;&#10; "&gt;&#10; &#10;&#10; &lt;div&#10; style="&#10; display: flex;&#10; flex-direction: column;&#10; align-items: start;&#10; justify-content: center;&#10; margin-left: 12px;&#10; "&#10; &gt;&#10; &lt;p style="margin: 0; padding-left: 0; padding-bottom: 3px; border: none"&gt;&#10; &#10; Upgrade to v4 | Stack&#10; &#10; &lt;/p&gt;&#10; &lt;p&#10; style="&#10; margin: 0;&#10; font-size: 12px;&#10; word-break: break-word;&#10; display: -webkit-box;&#10; display: box;&#10; -webkit-box-orient: vertical;&#10; box-orient: vertical;&#10; -webkit-line-clamp: 3;&#10; line-clamp: 3;&#10; overflow: hidden;&#10; "&#10; &gt;Card-style Hugo theme designed for bloggers&lt;/p&gt;&#10; &lt;div&#10; style="&#10; display: flex;&#10; flex-direction: row;&#10; align-items: center;&#10; gap: 2px;&#10; "&#10; &gt;&lt;img&#10; src="https://notes.nakurei.com/remote/favicon-15ef2612c8539fa0bc64df6e88fe5ca9add753f8.png"&#10; width="14"&#10; height="14"&#10; style="margin-right: 2px;"&#10; alt="stack.cai.im favicon image"&#10; /&gt;&lt;span style="font-size: small; color: var(--card-text-color-tertiary);"&gt;&#10; stack.cai.im&#10; &lt;/span&gt;&#10; &lt;/div&gt;&#10; &lt;/div&gt;&#10; &lt;/a&gt;&#10; &lt;/div&gt;&lt;style&gt;&#10; .url-card:hover {&#10; box-shadow: 0 0 0 1px var(--card-text-color-tertiary);&#10; }&#10;&lt;/style&gt;&#10;&#10;&lt;h2 id="environment"&gt;&#10; Environment&lt;a href="#environment"&gt;&#10; &lt;img src="https://notes.nakurei.com/icons/link.svg" width="44" height="44" style="width: 0.9em; margin-left: 0.25em; margin-bottom: -0.12em;" alt="Link to this heading" /&gt;&#10; &lt;/a&gt;&lt;/h2&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;OS: Windows 11 Pro 25H2&lt;/li&gt;&#10;&lt;li&gt;Hugo: v0.155.3 → v0.165.0&lt;/li&gt;&#10;&lt;li&gt;hugo-theme-stack: v3.31.0 → v4.0.3&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;h2 id="upgrade-hugo"&gt;&#10; Upgrade Hugo&lt;a href="#upgrade-hugo"&gt;&#10; &lt;img src="https://notes.nakurei.com/icons/link.svg" width="44" height="44" style="width: 0.9em; margin-left: 0.25em; margin-bottom: -0.12em;" alt="Link to this heading" /&gt;&#10; &lt;/a&gt;&lt;/h2&gt;&#10;&lt;p&gt;Stack v4 requires Hugo v0.157.0 or later. My local version was v0.155.3, so I had to upgrade. I went with the latest version at the time (v0.165.0).&lt;/p&gt;&#10;&lt;p&gt;Hugo binaries are available from &lt;a class="link" href="https://github.com/gohugoio/hugo/releases/" target="_blank" rel="noopener"&#10; &gt;Hugo&amp;rsquo;s GitHub releases page&lt;/a&gt;.&lt;/p&gt;&#10;&#10; &#10; &lt;div&#10; class="url-card"&#10; style="&#10; display: flex;&#10; height: 100%;&#10; width: 100%;&#10; margin-top: 10px;&#10; margin-bottom: 10px;&#10; padding: 10px;&#10; border: solid 1px var(--table-border-color);&#10; border-radius: 0.5rem;&#10; overflow: hidden;&#10; "&#10; &gt;&#10; &lt;a&#10; href="https://github.com/gohugoio/hugo/releases/"&#10; target="_blank"&#10; rel="noopener noreferrer"&#10; style="&#10; display: flex;&#10; width: 100%;&#10; height: 100%;&#10; text-decoration: none;&#10; "&#10; class="linkcard"&#10; &gt;&#10; &#10; &lt;img&#10; src="https://notes.nakurei.com/remote/c8bdcda78b982d0798ce77655bd61fc6d3a21c94_hu_3d76e475ce60c803.webp"&#10; alt="Releases · gohugoio/hugo image"&#10; width="120"&#10; height="120"&#10; loading="lazy"&#10; decoding="async"&#10; style="&#10; max-width: 200px;&#10; max-height: 120px;&#10; object-fit: cover;&#10; margin: 0;&#10; flex-shrink: 0;&#10; "&gt;&#10; &#10;&#10; &lt;div&#10; style="&#10; display: flex;&#10; flex-direction: column;&#10; align-items: start;&#10; justify-content: center;&#10; margin-left: 12px;&#10; "&#10; &gt;&#10; &lt;p style="margin: 0; padding-left: 0; padding-bottom: 3px; border: none"&gt;&#10; &#10; Releases · gohugoio/hugo&#10; &#10; &lt;/p&gt;&#10; &lt;p&#10; style="&#10; margin: 0;&#10; font-size: 12px;&#10; word-break: break-word;&#10; display: -webkit-box;&#10; display: box;&#10; -webkit-box-orient: vertical;&#10; box-orient: vertical;&#10; -webkit-line-clamp: 3;&#10; line-clamp: 3;&#10; overflow: hidden;&#10; "&#10; &gt;The world’s fastest framework for building websites. - gohugoio/hugo&lt;/p&gt;&#10; &lt;div&#10; style="&#10; display: flex;&#10; flex-direction: row;&#10; align-items: center;&#10; gap: 2px;&#10; "&#10; &gt;&lt;img&#10; src="https://notes.nakurei.com/remote/favicon-ffd1aa80239afc78c1628dfb5e08cff1205f22d5.png"&#10; width="14"&#10; height="14"&#10; style="margin-right: 2px;"&#10; alt="github.com favicon image"&#10; /&gt;&lt;span style="font-size: small; color: var(--card-text-color-tertiary);"&gt;&#10; github.com&#10; &lt;/span&gt;&#10; &lt;/div&gt;&#10; &lt;/div&gt;&#10; &lt;/a&gt;&#10; &lt;/div&gt;&lt;style&gt;&#10; .url-card:hover {&#10; box-shadow: 0 0 0 1px var(--card-text-color-tertiary);&#10; }&#10;&lt;/style&gt;&#10;&#10;&lt;p&gt;Stack requires the extended version of Hugo in both v3 and v4, so download a release with &lt;code&gt;extended&lt;/code&gt; in its name. Extract the downloaded file and put its contents somewhere on your PATH. I&amp;rsquo;m on Windows, so I put it in &lt;code&gt;C:\HugoExtended\bin&lt;/code&gt; and added &lt;code&gt;C:\HugoExtended\bin&lt;/code&gt; to the &lt;code&gt;PATH&lt;/code&gt; environment variable.&lt;/p&gt;&#10;&lt;style&gt;&#10; .code-block-filename {&#10; --code-filename-fontsize: calc(0.96em * 0.9);&#10;&#10; display: table;&#10; max-width: 100%;&#10; background: var(--accent-color-darker);&#10; color: var(--accent-color-text);&#10; font-size: var(--code-filename-fontsize);&#10; line-height: 1;&#10; padding-top: calc(var(--code-filename-fontsize) * 0.5);&#10; padding-left: calc(var(--code-filename-fontsize) * 0.7);&#10; padding-right: calc(var(--code-filename-fontsize) * 0.7);&#10; padding-bottom: calc(var(--code-filename-fontsize) * 0.7);&#10; border-radius: calc(var(--code-filename-fontsize) * 0.5)&#10; calc(var(--code-filename-fontsize) * 0.5) 0 0;&#10; }&#10; .code-block-content {&#10; padding-top: 0px;&#10; }&#10;&lt;/style&gt;&#10;&#10;&lt;div&gt;&#10; &lt;div class="code-block-filename"&gt;Checking the Hugo version&lt;/div&gt;&#10; &#10; &lt;div class="code-block-content"&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;$ hugo version&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;hugo v0.165.0-76a5e1880ab46688155b02e99bab9be2a6134492+extended windows/amd64 &lt;span class="nv"&gt;BuildDate&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;2026-08-12T14:26:28Z &lt;span class="nv"&gt;VendorInfo&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;gohugoio&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&#10; &lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;p&gt;This site is hosted on &lt;a class="link" href="https://www.netlify.com/" target="_blank" rel="noopener"&#10; &gt;Netlify&lt;/a&gt;, so I also had to bump Netlify&amp;rsquo;s build environment to Hugo v0.165.0.&#10;If you set &lt;code&gt;HUGO_VERSION&lt;/code&gt; in &lt;code&gt;netlify.toml&lt;/code&gt;, or as an environment variable in the Netlify dashboard, change that too.&lt;/p&gt;&#10;&lt;h2 id="fix-the-x-shortcode"&gt;&#10; Fix the X shortcode&lt;a href="#fix-the-x-shortcode"&gt;&#10; &lt;img src="https://notes.nakurei.com/icons/link.svg" width="44" height="44" style="width: 0.9em; margin-left: 0.25em; margin-bottom: -0.12em;" alt="Link to this heading" /&gt;&#10; &lt;/a&gt;&lt;/h2&gt;&#10;&lt;p&gt;This one comes from upgrading Hugo rather than from the Stack theme itself: Hugo&amp;rsquo;s built-in &lt;code&gt;tweet&lt;/code&gt; shortcode was removed in Hugo v0.156. Use the &lt;code&gt;x&lt;/code&gt; shortcode instead.&lt;/p&gt;&#10;&lt;style&gt;&#10; .code-block-filename {&#10; --code-filename-fontsize: calc(0.96em * 0.9);&#10;&#10; display: table;&#10; max-width: 100%;&#10; background: var(--accent-color-darker);&#10; color: var(--accent-color-text);&#10; font-size: var(--code-filename-fontsize);&#10; line-height: 1;&#10; padding-top: calc(var(--code-filename-fontsize) * 0.5);&#10; padding-left: calc(var(--code-filename-fontsize) * 0.7);&#10; padding-right: calc(var(--code-filename-fontsize) * 0.7);&#10; padding-bottom: calc(var(--code-filename-fontsize) * 0.7);&#10; border-radius: calc(var(--code-filename-fontsize) * 0.5)&#10; calc(var(--code-filename-fontsize) * 0.5) 0 0;&#10; }&#10; .code-block-content {&#10; padding-top: 0px;&#10; }&#10;&lt;/style&gt;&#10;&#10;&lt;div&gt;&#10; &lt;div class="code-block-filename"&gt;Example of the shortcode change&lt;/div&gt;&#10; &#10; &lt;div class="code-block-content"&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-diff" data-lang="diff"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="gd"&gt;- {{&amp;lt; tweet user=&amp;#34;username&amp;#34; id=&amp;#34;1234567890&amp;#34; &amp;gt;}}&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="gi"&gt;+ {{&amp;lt; x user=&amp;#34;username&amp;#34; id=&amp;#34;1234567890&amp;#34; &amp;gt;}}&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&#10; &lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;h2 id="replace-sitedata-with-hugodata"&gt;&#10; Replace &lt;code&gt;.Site.Data&lt;/code&gt; with &lt;code&gt;hugo.Data&lt;/code&gt;&lt;a href="#replace-sitedata-with-hugodata"&gt;&#10; &lt;img src="https://notes.nakurei.com/icons/link.svg" width="44" height="44" style="width: 0.9em; margin-left: 0.25em; margin-bottom: -0.12em;" alt="Link to this heading" /&gt;&#10; &lt;/a&gt;&lt;/h2&gt;&#10;&lt;p&gt;This is another change caused by the Hugo upgrade: Hugo&amp;rsquo;s built-in &lt;code&gt;.Site.Data&lt;/code&gt; was deprecated in Hugo v0.156.&#10;Use &lt;code&gt;hugo.Data&lt;/code&gt; instead.&#10;In my case a custom shortcode I had written used &lt;code&gt;.Site.Data&lt;/code&gt;, so I replaced it.&lt;/p&gt;&#10;&lt;h2 id="temporarily-move-custom-files-aside"&gt;&#10; Temporarily move custom files aside&lt;a href="#temporarily-move-custom-files-aside"&gt;&#10; &lt;img src="https://notes.nakurei.com/icons/link.svg" width="44" height="44" style="width: 0.9em; margin-left: 0.25em; margin-bottom: -0.12em;" alt="Link to this heading" /&gt;&#10; &lt;/a&gt;&lt;/h2&gt;&#10;&lt;p&gt;Going from v3 to v4, the way the theme is written and how its files are split up have both changed. So if you have &lt;code&gt;layouts&lt;/code&gt; or &lt;code&gt;assets&lt;/code&gt; directories that override the theme, move them aside temporarily.&lt;/p&gt;&#10;&lt;p&gt;One caveat: shortcodes (&lt;code&gt;layouts/shortcodes&lt;/code&gt; in v3) must exist or the build will fail, so if you want builds to keep succeeding during the migration, move just the shortcodes to &lt;code&gt;layouts/_shortcodes/&lt;/code&gt;.&lt;/p&gt;&#10;&lt;h2 id="migrate-the-config-files"&gt;&#10; Migrate the config files&lt;a href="#migrate-the-config-files"&gt;&#10; &lt;img src="https://notes.nakurei.com/icons/link.svg" width="44" height="44" style="width: 0.9em; margin-left: 0.25em; margin-bottom: -0.12em;" alt="Link to this heading" /&gt;&#10; &lt;/a&gt;&lt;/h2&gt;&#10;&lt;p&gt;The config files were YAML in v3, but v4 switched to TOML. Hugo converts YAML automatically, so it seems that sticking with YAML should be fine. Since I was going to review the settings anyway, I took the opportunity to switch to TOML.&lt;/p&gt;&#10;&lt;p&gt;&lt;a class="link" href="https://github.com/CaiJimmy/hugo-theme-stack-starter/tree/master/config/_default" target="_blank" rel="noopener"&#10; &gt;hugo-theme-stack-starter&lt;/a&gt; is a good reference for how to write the config. The &lt;a class="link" href="https://github.com/CaiJimmy/hugo-theme-stack/tree/master/demo/config/_default" target="_blank" rel="noopener"&#10; &gt;Stack theme demo&lt;/a&gt; works too. Judging by &lt;a class="link" href="https://stack.cai.im/guide/getting-started" target="_blank" rel="noopener"&#10; &gt;Stack&amp;rsquo;s Getting Started&lt;/a&gt;, hugo-theme-stack-starter seems to be the official template, so that&amp;rsquo;s what I used as my reference. Create a &lt;code&gt;config/_default&lt;/code&gt; directory and put the following files in it.&lt;/p&gt;&#10;&lt;h3 id="configtoml"&gt;&#10; config.toml&lt;a href="#configtoml"&gt;&#10; &lt;img src="https://notes.nakurei.com/icons/link.svg" width="44" height="44" style="width: 0.9em; margin-left: 0.25em; margin-bottom: -0.12em;" alt="Link to this heading" /&gt;&#10; &lt;/a&gt;&lt;/h3&gt;&#10;&lt;p&gt;&lt;code&gt;config.toml&lt;/code&gt; holds the basic information about the site. I changed the following from the official template.&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;Added &lt;code&gt;theme = &amp;quot;hugo-theme-stack&amp;quot;&lt;/code&gt;&lt;/li&gt;&#10;&lt;li&gt;Changed &lt;code&gt;baseurl&lt;/code&gt; to my own site&amp;rsquo;s URL&lt;/li&gt;&#10;&lt;li&gt;Changed &lt;code&gt;locale&lt;/code&gt; and &lt;code&gt;defaultContentLanguage&lt;/code&gt; to Japanese, and accordingly set &lt;code&gt;hasCJKLanguage&lt;/code&gt; to &lt;code&gt;true&lt;/code&gt;&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;div class="block-highlight-warning"&gt;&#10; &lt;span class="icon-warning"&gt;&lt;svg xmlns="http://www.w3.org/2000/svg" class="icon icon-tabler icon-tabler-alert-triangle" width="44" height="44" viewBox="0 0 24 24" stroke-width="1.5" stroke="currentColor" fill="none" stroke-linecap="round" stroke-linejoin="round"&gt;&#10; &lt;path stroke="none" d="M0 0h24v24H0z" fill="none"/&gt;&#10; &lt;path d="M12 9v2m0 4v.01" /&gt;&#10; &lt;path d="M5 19h14a2 2 0 0 0 1.84 -2.75l-7.1 -12.25a2 2 0 0 0 -3.5 0l-7.1 12.25a2 2 0 0 0 1.75 2.75" /&gt;&#10;&lt;/svg&gt;&#10;&lt;/span&gt;&#10; &lt;span&gt;I manage the Hugo theme as a Git Submodule rather than a Hugo Module, which is why &lt;code&gt;theme = &amp;quot;hugo-theme-stack&amp;quot;&lt;/code&gt; is needed. If you manage it as a Hugo Module, you don&amp;rsquo;t need &lt;code&gt;theme&lt;/code&gt;.&lt;/span&gt;&#10;&lt;/div&gt;&#10;&#10;&lt;div class="block-highlight-warning"&gt;&#10; &lt;span class="icon-warning"&gt;&lt;svg xmlns="http://www.w3.org/2000/svg" class="icon icon-tabler icon-tabler-alert-triangle" width="44" height="44" viewBox="0 0 24 24" stroke-width="1.5" stroke="currentColor" fill="none" stroke-linecap="round" stroke-linejoin="round"&gt;&#10; &lt;path stroke="none" d="M0 0h24v24H0z" fill="none"/&gt;&#10; &lt;path d="M12 9v2m0 4v.01" /&gt;&#10; &lt;path d="M5 19h14a2 2 0 0 0 1.84 -2.75l-7.1 -12.25a2 2 0 0 0 -3.5 0l-7.1 12.25a2 2 0 0 0 1.75 2.75" /&gt;&#10;&lt;/svg&gt;&#10;&lt;/span&gt;&#10; &lt;span&gt;In TOML, settings that don&amp;rsquo;t belong to any table won&amp;rsquo;t take effect unless you write them first.&lt;/span&gt;&#10;&lt;/div&gt;&#10;&#10;&lt;details&gt;&#10; &lt;summary&gt;config.toml after the changes&lt;/summary&gt;&#10; &lt;p&gt;&lt;style&gt;&#10; .code-block-filename {&#10; --code-filename-fontsize: calc(0.96em * 0.9);&#10;&#10; display: table;&#10; max-width: 100%;&#10; background: var(--accent-color-darker);&#10; color: var(--accent-color-text);&#10; font-size: var(--code-filename-fontsize);&#10; line-height: 1;&#10; padding-top: calc(var(--code-filename-fontsize) * 0.5);&#10; padding-left: calc(var(--code-filename-fontsize) * 0.7);&#10; padding-right: calc(var(--code-filename-fontsize) * 0.7);&#10; padding-bottom: calc(var(--code-filename-fontsize) * 0.7);&#10; border-radius: calc(var(--code-filename-fontsize) * 0.5)&#10; calc(var(--code-filename-fontsize) * 0.5) 0 0;&#10; }&#10; .code-block-content {&#10; padding-top: 0px;&#10; }&#10;&lt;/style&gt;&#10;&#10;&lt;div&gt;&#10; &lt;div class="code-block-filename"&gt;config.toml&lt;/div&gt;&#10; &#10; &lt;div class="code-block-content"&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-toml" data-lang="toml"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nx"&gt;theme&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;hugo-theme-stack&amp;#34;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nx"&gt;baseurl&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;https://notes.nakurei.com/&amp;#34;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nx"&gt;locale&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;ja-JP&amp;#34;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nx"&gt;title&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;NakuRei&amp;#39;s Notes&amp;#34;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nx"&gt;copyright&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;NakuRei&amp;#34;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c"&gt;# Theme i18n support&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c"&gt;# See all available values at https://github.com/CaiJimmy/hugo-theme-stack/tree/master/i18n&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nx"&gt;defaultContentLanguage&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;ja&amp;#34;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c"&gt;# Set hasCJKLanguage to true if DefaultContentLanguage is in [zh-cn ja ko]&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c"&gt;# This will make .Summary and .WordCount behave correctly for CJK languages.&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nx"&gt;hasCJKLanguage&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="kc"&gt;true&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nx"&gt;enableRobotsTXT&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="kc"&gt;true&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nx"&gt;enableGitInfo&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="kc"&gt;true&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nx"&gt;timeout&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;300s&amp;#34;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;services&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;googleAnalytics&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nx"&gt;ID&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;G-XXXXXXXXXX&amp;#34;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;pagination&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nx"&gt;pagerSize&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;10&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;frontmatter&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nx"&gt;lastmod&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;lastmod&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;:git&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;date&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;publishDate&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&#10; &lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;/p&gt;&#10;&lt;/details&gt;&#10;&#10;&lt;h3 id="languagestoml"&gt;&#10; languages.toml&lt;a href="#languagestoml"&gt;&#10; &lt;img src="https://notes.nakurei.com/icons/link.svg" width="44" height="44" style="width: 0.9em; margin-left: 0.25em; margin-bottom: -0.12em;" alt="Link to this heading" /&gt;&#10; &lt;/a&gt;&lt;/h3&gt;&#10;&lt;p&gt;&lt;code&gt;languages.toml&lt;/code&gt; holds the multilingual settings. These options are the same as &lt;code&gt;languages&lt;/code&gt; in v3.&lt;/p&gt;&#10;&lt;div class="block-highlight-warning"&gt;&#10; &lt;span class="icon-warning"&gt;&lt;svg xmlns="http://www.w3.org/2000/svg" class="icon icon-tabler icon-tabler-alert-triangle" width="44" height="44" viewBox="0 0 24 24" stroke-width="1.5" stroke="currentColor" fill="none" stroke-linecap="round" stroke-linejoin="round"&gt;&#10; &lt;path stroke="none" d="M0 0h24v24H0z" fill="none"/&gt;&#10; &lt;path d="M12 9v2m0 4v.01" /&gt;&#10; &lt;path d="M5 19h14a2 2 0 0 0 1.84 -2.75l-7.1 -12.25a2 2 0 0 0 -3.5 0l-7.1 12.25a2 2 0 0 0 1.75 2.75" /&gt;&#10;&lt;/svg&gt;&#10;&lt;/span&gt;&#10; &lt;span&gt;In the hugo-theme-stack-starter template the file is named &lt;code&gt;_languages.toml&lt;/code&gt;; the leading underscore is there to keep the settings from being applied. So when you actually configure this, create it as &lt;code&gt;languages.toml&lt;/code&gt; with the underscore removed.&lt;/span&gt;&#10;&lt;/div&gt;&#10;&#10;&lt;details&gt;&#10; &lt;summary&gt;languages.toml after the changes&lt;/summary&gt;&#10; &lt;p&gt;&lt;style&gt;&#10; .code-block-filename {&#10; --code-filename-fontsize: calc(0.96em * 0.9);&#10;&#10; display: table;&#10; max-width: 100%;&#10; background: var(--accent-color-darker);&#10; color: var(--accent-color-text);&#10; font-size: var(--code-filename-fontsize);&#10; line-height: 1;&#10; padding-top: calc(var(--code-filename-fontsize) * 0.5);&#10; padding-left: calc(var(--code-filename-fontsize) * 0.7);&#10; padding-right: calc(var(--code-filename-fontsize) * 0.7);&#10; padding-bottom: calc(var(--code-filename-fontsize) * 0.7);&#10; border-radius: calc(var(--code-filename-fontsize) * 0.5)&#10; calc(var(--code-filename-fontsize) * 0.5) 0 0;&#10; }&#10; .code-block-content {&#10; padding-top: 0px;&#10; }&#10;&lt;/style&gt;&#10;&#10;&lt;div&gt;&#10; &lt;div class="code-block-filename"&gt;languages.toml&lt;/div&gt;&#10; &#10; &lt;div class="code-block-content"&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-toml" data-lang="toml"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;ja&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nx"&gt;label&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;日本語&amp;#34;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nx"&gt;locale&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;ja&amp;#34;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nx"&gt;weight&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;ja&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;params&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nx"&gt;description&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;努力の積み重ねを記録しておくためのサイト。&amp;#34;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;ja&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;params&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;sidebar&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nx"&gt;subtitle&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;努力の積み重ねを記録しておくだけ&amp;#34;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;en&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nx"&gt;label&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;English&amp;#34;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nx"&gt;locale&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;en&amp;#34;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nx"&gt;weight&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;2&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;en&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;params&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nx"&gt;description&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;A website to keep track of my efforts.&amp;#34;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;en&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;params&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;sidebar&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nx"&gt;subtitle&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;Just keep track of my efforts.&amp;#34;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&#10; &lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;/p&gt;&#10;&lt;/details&gt;&#10;&#10;&lt;h3 id="markuptoml"&gt;&#10; markup.toml&lt;a href="#markuptoml"&gt;&#10; &lt;img src="https://notes.nakurei.com/icons/link.svg" width="44" height="44" style="width: 0.9em; margin-left: 0.25em; margin-bottom: -0.12em;" alt="Link to this heading" /&gt;&#10; &lt;/a&gt;&lt;/h3&gt;&#10;&lt;p&gt;&lt;code&gt;markup.toml&lt;/code&gt; holds the settings for Markdown rendering. There&amp;rsquo;s no change from what I had under &lt;code&gt;markup&lt;/code&gt; in v3, so it ports over as-is.&lt;/p&gt;&#10;&lt;details&gt;&#10; &lt;summary&gt;markup.toml after the changes&lt;/summary&gt;&#10; &lt;p&gt;&lt;style&gt;&#10; .code-block-filename {&#10; --code-filename-fontsize: calc(0.96em * 0.9);&#10;&#10; display: table;&#10; max-width: 100%;&#10; background: var(--accent-color-darker);&#10; color: var(--accent-color-text);&#10; font-size: var(--code-filename-fontsize);&#10; line-height: 1;&#10; padding-top: calc(var(--code-filename-fontsize) * 0.5);&#10; padding-left: calc(var(--code-filename-fontsize) * 0.7);&#10; padding-right: calc(var(--code-filename-fontsize) * 0.7);&#10; padding-bottom: calc(var(--code-filename-fontsize) * 0.7);&#10; border-radius: calc(var(--code-filename-fontsize) * 0.5)&#10; calc(var(--code-filename-fontsize) * 0.5) 0 0;&#10; }&#10; .code-block-content {&#10; padding-top: 0px;&#10; }&#10;&lt;/style&gt;&#10;&#10;&lt;div&gt;&#10; &lt;div class="code-block-filename"&gt;markup.toml&lt;/div&gt;&#10; &#10; &lt;div class="code-block-content"&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-toml" data-lang="toml"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c"&gt;# Markdown renderer configuration&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;goldmark&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;renderer&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nx"&gt;unsafe&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="kc"&gt;false&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;goldmark&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;extensions&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;passthrough&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nx"&gt;enable&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="kc"&gt;true&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;goldmark&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;extensions&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;passthrough&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;delimiters&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nx"&gt;block&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[[&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;\[&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;\]&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;$$&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;$$&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;]]&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nx"&gt;inline&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[[&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;\(&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;\)&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;]]&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;tableOfContents&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nx"&gt;endLevel&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;4&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nx"&gt;ordered&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="kc"&gt;true&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nx"&gt;startLevel&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;2&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;highlight&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nx"&gt;noClasses&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="kc"&gt;false&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nx"&gt;codeFences&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="kc"&gt;true&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nx"&gt;guessSyntax&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="kc"&gt;true&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nx"&gt;lineNoStart&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nx"&gt;lineNos&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="kc"&gt;false&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nx"&gt;lineNumbersInTable&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="kc"&gt;true&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nx"&gt;tabWidth&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;4&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&#10; &lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;/p&gt;&#10;&lt;/details&gt;&#10;&#10;&lt;h3 id="menutoml"&gt;&#10; menu.toml&lt;a href="#menutoml"&gt;&#10; &lt;img src="https://notes.nakurei.com/icons/link.svg" width="44" height="44" style="width: 0.9em; margin-left: 0.25em; margin-bottom: -0.12em;" alt="Link to this heading" /&gt;&#10; &lt;/a&gt;&lt;/h3&gt;&#10;&lt;p&gt;&lt;code&gt;menu.toml&lt;/code&gt; holds the settings for the main menu and the social menu. I only configure the social menu on this site, but at least for that menu, the options are the same as in v3.&lt;/p&gt;&#10;&lt;details&gt;&#10; &lt;summary&gt;menu.toml after the changes&lt;/summary&gt;&#10; &lt;p&gt;&lt;style&gt;&#10; .code-block-filename {&#10; --code-filename-fontsize: calc(0.96em * 0.9);&#10;&#10; display: table;&#10; max-width: 100%;&#10; background: var(--accent-color-darker);&#10; color: var(--accent-color-text);&#10; font-size: var(--code-filename-fontsize);&#10; line-height: 1;&#10; padding-top: calc(var(--code-filename-fontsize) * 0.5);&#10; padding-left: calc(var(--code-filename-fontsize) * 0.7);&#10; padding-right: calc(var(--code-filename-fontsize) * 0.7);&#10; padding-bottom: calc(var(--code-filename-fontsize) * 0.7);&#10; border-radius: calc(var(--code-filename-fontsize) * 0.5)&#10; calc(var(--code-filename-fontsize) * 0.5) 0 0;&#10; }&#10; .code-block-content {&#10; padding-top: 0px;&#10; }&#10;&lt;/style&gt;&#10;&#10;&lt;div&gt;&#10; &lt;div class="code-block-filename"&gt;menu.toml&lt;/div&gt;&#10; &#10; &lt;div class="code-block-content"&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-toml" data-lang="toml"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;[[&lt;/span&gt;&lt;span class="nx"&gt;social&lt;/span&gt;&lt;span class="p"&gt;]]&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nx"&gt;identifier&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;github&amp;#34;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nx"&gt;name&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;GitHub&amp;#34;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nx"&gt;url&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;https://github.com/NakuRei&amp;#34;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;social&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;params&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nx"&gt;icon&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;brand-github&amp;#34;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;[[&lt;/span&gt;&lt;span class="nx"&gt;social&lt;/span&gt;&lt;span class="p"&gt;]]&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nx"&gt;identifier&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;x&amp;#34;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nx"&gt;name&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;X&amp;#34;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nx"&gt;url&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;https://x.com/nakurei7901&amp;#34;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;social&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;params&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nx"&gt;icon&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;brand-twitter&amp;#34;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;[[&lt;/span&gt;&lt;span class="nx"&gt;social&lt;/span&gt;&lt;span class="p"&gt;]]&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nx"&gt;identifier&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;rss&amp;#34;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nx"&gt;name&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;RSS&amp;#34;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nx"&gt;url&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;https://notes.nakurei.com/index.xml&amp;#34;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;social&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;params&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nx"&gt;icon&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;rss&amp;#34;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;[[&lt;/span&gt;&lt;span class="nx"&gt;social&lt;/span&gt;&lt;span class="p"&gt;]]&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nx"&gt;identifier&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;zenn&amp;#34;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nx"&gt;name&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;Zenn&amp;#34;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nx"&gt;url&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;https://zenn.dev/nakurei&amp;#34;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;social&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;params&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nx"&gt;icon&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;link&amp;#34;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&#10; &lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;/p&gt;&#10;&lt;/details&gt;&#10;&#10;&lt;h3 id="moduletoml"&gt;&#10; module.toml&lt;a href="#moduletoml"&gt;&#10; &lt;img src="https://notes.nakurei.com/icons/link.svg" width="44" height="44" style="width: 0.9em; margin-left: 0.25em; margin-bottom: -0.12em;" alt="Link to this heading" /&gt;&#10; &lt;/a&gt;&lt;/h3&gt;&#10;&lt;p&gt;&lt;code&gt;module.toml&lt;/code&gt; holds the Hugo Module settings. I manage the theme as a Git Submodule rather than a Hugo Module, so I didn&amp;rsquo;t create &lt;code&gt;module.toml&lt;/code&gt;.&lt;/p&gt;&#10;&lt;h3 id="paramstoml"&gt;&#10; params.toml&lt;a href="#paramstoml"&gt;&#10; &lt;img src="https://notes.nakurei.com/icons/link.svg" width="44" height="44" style="width: 0.9em; margin-left: 0.25em; margin-bottom: -0.12em;" alt="Link to this heading" /&gt;&#10; &lt;/a&gt;&lt;/h3&gt;&#10;&lt;p&gt;&lt;code&gt;params.toml&lt;/code&gt; holds site-wide parameters — what used to live under &lt;code&gt;params&lt;/code&gt; in v3. The following &lt;code&gt;params&lt;/code&gt; changed in v4.&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;&lt;code&gt;dateFormat&lt;/code&gt; moved from Go format strings like &lt;code&gt;Jan 02, 2006&lt;/code&gt; to &lt;a class="link" href="https://gohugo.io/functions/time/format/#localization" target="_blank" rel="noopener"&#10; &gt;Hugo format strings&lt;/a&gt; like &lt;code&gt;:date_full&lt;/code&gt; and &lt;code&gt;:date_medium&lt;/code&gt;&lt;/li&gt;&#10;&lt;li&gt;&lt;a class="link" href="https://stack.cai.im/guide/upgrade-to-v4#custom-sorting-order" target="_blank" rel="noopener"&#10; &gt;&lt;code&gt;SortBy&lt;/code&gt;&lt;/a&gt; was added&lt;/li&gt;&#10;&lt;li&gt;&lt;code&gt;featuredImageField&lt;/code&gt; was removed: v4 always uses &lt;code&gt;image&lt;/code&gt;&lt;/li&gt;&#10;&lt;li&gt;&lt;a class="link" href="https://stack.cai.im/guide/upgrade-to-v4#default-opengraph-image" target="_blank" rel="noopener"&#10; &gt;&lt;code&gt;defaultImage.opengraph&lt;/code&gt; was removed&lt;/a&gt;&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;details&gt;&#10; &lt;summary&gt;params.toml after the changes&lt;/summary&gt;&#10; &lt;p&gt;&lt;style&gt;&#10; .code-block-filename {&#10; --code-filename-fontsize: calc(0.96em * 0.9);&#10;&#10; display: table;&#10; max-width: 100%;&#10; background: var(--accent-color-darker);&#10; color: var(--accent-color-text);&#10; font-size: var(--code-filename-fontsize);&#10; line-height: 1;&#10; padding-top: calc(var(--code-filename-fontsize) * 0.5);&#10; padding-left: calc(var(--code-filename-fontsize) * 0.7);&#10; padding-right: calc(var(--code-filename-fontsize) * 0.7);&#10; padding-bottom: calc(var(--code-filename-fontsize) * 0.7);&#10; border-radius: calc(var(--code-filename-fontsize) * 0.5)&#10; calc(var(--code-filename-fontsize) * 0.5) 0 0;&#10; }&#10; .code-block-content {&#10; padding-top: 0px;&#10; }&#10;&lt;/style&gt;&#10;&#10;&lt;div&gt;&#10; &lt;div class="code-block-filename"&gt;params.toml&lt;/div&gt;&#10; &#10; &lt;div class="code-block-content"&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-toml" data-lang="toml"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c"&gt;# Pages placed under these sections will be shown on homepage and archive page.&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nx"&gt;mainSections&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;post&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c"&gt;# Output page&amp;#39;s full content in RSS.&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nx"&gt;rssFullContent&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="kc"&gt;true&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nx"&gt;favicon&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;img/favicon.png&amp;#34;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c"&gt;# Accepted values: &amp;#34;default&amp;#34;, &amp;#34;lastmod&amp;#34;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c"&gt;# default = see https://gohugo.io/quick-reference/glossary/#default-sort-order&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c"&gt;# lastmod = sort by last modified date, in descending order&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nx"&gt;SortBy&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;lastmod&amp;#34;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;author&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nx"&gt;name&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;NakuRei&amp;#34;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nx"&gt;url&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;https://notes.nakurei.com/&amp;#34;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;footer&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nx"&gt;since&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;2022&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nx"&gt;customText&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;&amp;#34;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;dateFormat&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nx"&gt;published&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;:date_medium&amp;#34;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nx"&gt;lastUpdated&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;:date_medium&amp;#34;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;sidebar&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nx"&gt;compact&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="kc"&gt;false&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nx"&gt;emoji&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;🐢&amp;#34;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nx"&gt;subtitle&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;&amp;#34;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nx"&gt;avatar&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;img/avatar.png&amp;#34;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;article&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nx"&gt;headingAnchor&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="kc"&gt;true&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nx"&gt;math&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="kc"&gt;false&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nx"&gt;toc&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="kc"&gt;true&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nx"&gt;readingTime&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="kc"&gt;true&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;article&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;license&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nx"&gt;enabled&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="kc"&gt;true&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nx"&gt;default&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;Licensed under CC BY-NC-SA 4.0&amp;#34;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;widgets&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nx"&gt;homepage&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;type&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;search&amp;#34;&lt;/span&gt; &lt;span class="p"&gt;},&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;type&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;categories&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;params&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;limit&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;10&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="p"&gt;},&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;type&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;tag-cloud&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;params&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;limit&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;10&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="p"&gt;},&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;type&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;archives&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;params&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;limit&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;5&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="p"&gt;},&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;]&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nx"&gt;page&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;type&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;toc&amp;#34;&lt;/span&gt; &lt;span class="p"&gt;},&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;type&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;categories&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;params&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;limit&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;10&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="p"&gt;},&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;type&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;tag-cloud&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;params&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;limit&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;10&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="p"&gt;},&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;]&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;opengraph&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;twitter&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nx"&gt;site&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;nakurei7901&amp;#34;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nx"&gt;card&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;summary_large_image&amp;#34;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;colorScheme&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nx"&gt;toggle&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="kc"&gt;true&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nx"&gt;default&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;auto&amp;#34;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c"&gt;## Comments&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;comments&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nx"&gt;enabled&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="kc"&gt;false&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nx"&gt;provider&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;disqus&amp;#34;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="c"&gt;# See all the available configurations at https://github.com/CaiJimmy/hugo-theme-stack/blob/master/config/_default/params.toml&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="c"&gt;# Copy the configurations you need from there and paste it here.&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c"&gt;## Original url-card shortcode&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nx"&gt;defaultNoImage&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;icons/photo-off.svg&amp;#34;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nx"&gt;defaultNoLinkImage&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;/icons/link-off.svg&amp;#34;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nx"&gt;imageQuality&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;80&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&#10; &lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;/p&gt;&#10;&lt;/details&gt;&#10;&#10;&lt;h3 id="permalinkstoml"&gt;&#10; permalinks.toml&lt;a href="#permalinkstoml"&gt;&#10; &lt;img src="https://notes.nakurei.com/icons/link.svg" width="44" height="44" style="width: 0.9em; margin-left: 0.25em; margin-bottom: -0.12em;" alt="Link to this heading" /&gt;&#10; &lt;/a&gt;&lt;/h3&gt;&#10;&lt;p&gt;&lt;code&gt;permalinks.toml&lt;/code&gt; contains the same settings that were under &lt;code&gt;permalinks&lt;/code&gt; in v3.&lt;/p&gt;&#10;&lt;details&gt;&#10; &lt;summary&gt;permalinks.toml after the changes&lt;/summary&gt;&#10; &lt;p&gt;&lt;style&gt;&#10; .code-block-filename {&#10; --code-filename-fontsize: calc(0.96em * 0.9);&#10;&#10; display: table;&#10; max-width: 100%;&#10; background: var(--accent-color-darker);&#10; color: var(--accent-color-text);&#10; font-size: var(--code-filename-fontsize);&#10; line-height: 1;&#10; padding-top: calc(var(--code-filename-fontsize) * 0.5);&#10; padding-left: calc(var(--code-filename-fontsize) * 0.7);&#10; padding-right: calc(var(--code-filename-fontsize) * 0.7);&#10; padding-bottom: calc(var(--code-filename-fontsize) * 0.7);&#10; border-radius: calc(var(--code-filename-fontsize) * 0.5)&#10; calc(var(--code-filename-fontsize) * 0.5) 0 0;&#10; }&#10; .code-block-content {&#10; padding-top: 0px;&#10; }&#10;&lt;/style&gt;&#10;&#10;&lt;div&gt;&#10; &lt;div class="code-block-filename"&gt;permalinks.toml&lt;/div&gt;&#10; &#10; &lt;div class="code-block-content"&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-toml" data-lang="toml"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nx"&gt;post&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;/post/:slug/&amp;#34;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nx"&gt;page&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;/:slug/&amp;#34;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&#10; &lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;/p&gt;&#10;&lt;/details&gt;&#10;&#10;&lt;h3 id="relatedtoml"&gt;&#10; related.toml&lt;a href="#relatedtoml"&gt;&#10; &lt;img src="https://notes.nakurei.com/icons/link.svg" width="44" height="44" style="width: 0.9em; margin-left: 0.25em; margin-bottom: -0.12em;" alt="Link to this heading" /&gt;&#10; &lt;/a&gt;&lt;/h3&gt;&#10;&lt;p&gt;&lt;code&gt;related.toml&lt;/code&gt; contains the same settings that were under &lt;code&gt;related&lt;/code&gt; in v3. There are no new options.&lt;/p&gt;&#10;&lt;details&gt;&#10; &lt;summary&gt;related.toml after the changes&lt;/summary&gt;&#10; &lt;p&gt;&lt;style&gt;&#10; .code-block-filename {&#10; --code-filename-fontsize: calc(0.96em * 0.9);&#10;&#10; display: table;&#10; max-width: 100%;&#10; background: var(--accent-color-darker);&#10; color: var(--accent-color-text);&#10; font-size: var(--code-filename-fontsize);&#10; line-height: 1;&#10; padding-top: calc(var(--code-filename-fontsize) * 0.5);&#10; padding-left: calc(var(--code-filename-fontsize) * 0.7);&#10; padding-right: calc(var(--code-filename-fontsize) * 0.7);&#10; padding-bottom: calc(var(--code-filename-fontsize) * 0.7);&#10; border-radius: calc(var(--code-filename-fontsize) * 0.5)&#10; calc(var(--code-filename-fontsize) * 0.5) 0 0;&#10; }&#10; .code-block-content {&#10; padding-top: 0px;&#10; }&#10;&lt;/style&gt;&#10;&#10;&lt;div&gt;&#10; &lt;div class="code-block-filename"&gt;related.toml&lt;/div&gt;&#10; &#10; &lt;div class="code-block-content"&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-toml" data-lang="toml"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c"&gt;# Related contents configuration&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nx"&gt;includeNewer&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="kc"&gt;true&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nx"&gt;threshold&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;60&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nx"&gt;toLower&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="kc"&gt;false&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nx"&gt;indices&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;name&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;tags&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;weight&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;100&lt;/span&gt; &lt;span class="p"&gt;},&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;name&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;categories&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;weight&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;200&lt;/span&gt; &lt;span class="p"&gt;},&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&#10; &lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;/p&gt;&#10;&lt;/details&gt;&#10;&#10;&lt;h2 id="move-the-favicon"&gt;&#10; Move the favicon&lt;a href="#move-the-favicon"&gt;&#10; &lt;img src="https://notes.nakurei.com/icons/link.svg" width="44" height="44" style="width: 0.9em; margin-left: 0.25em; margin-bottom: -0.12em;" alt="Link to this heading" /&gt;&#10; &lt;/a&gt;&lt;/h2&gt;&#10;&lt;p&gt;The favicon and avatar images lived in &lt;code&gt;static/&lt;/code&gt; in v3, but v4 expects them in &lt;code&gt;assets/&lt;/code&gt;. On this site the avatar was already in &lt;code&gt;assets/img/&lt;/code&gt;, but the favicon was in &lt;code&gt;static/img/&lt;/code&gt;, so I moved the favicon image to &lt;code&gt;assets/img/&lt;/code&gt;.&lt;/p&gt;&#10;&lt;h2 id="fix-the-front-matter-of-your-pages"&gt;&#10; Fix the front matter of your pages&lt;a href="#fix-the-front-matter-of-your-pages"&gt;&#10; &lt;img src="https://notes.nakurei.com/icons/link.svg" width="44" height="44" style="width: 0.9em; margin-left: 0.25em; margin-bottom: -0.12em;" alt="Link to this heading" /&gt;&#10; &lt;/a&gt;&lt;/h2&gt;&#10;&lt;p&gt;The front matter of articles changed between v3 and v4. What was &lt;code&gt;hidden&lt;/code&gt; in v3 &lt;a class="link" href="https://stack.cai.im/guide/upgrade-to-v4#page-visibility-hidden" target="_blank" rel="noopener"&#10; &gt;became &lt;code&gt;build.list&lt;/code&gt; in v4&lt;/a&gt;. So if you were setting &lt;code&gt;hidden = true&lt;/code&gt;, you need to change &lt;code&gt;build.list&lt;/code&gt; to &lt;code&gt;never&lt;/code&gt; like this.&lt;/p&gt;&#10;&lt;style&gt;&#10; .code-block-filename {&#10; --code-filename-fontsize: calc(0.96em * 0.9);&#10;&#10; display: table;&#10; max-width: 100%;&#10; background: var(--accent-color-darker);&#10; color: var(--accent-color-text);&#10; font-size: var(--code-filename-fontsize);&#10; line-height: 1;&#10; padding-top: calc(var(--code-filename-fontsize) * 0.5);&#10; padding-left: calc(var(--code-filename-fontsize) * 0.7);&#10; padding-right: calc(var(--code-filename-fontsize) * 0.7);&#10; padding-bottom: calc(var(--code-filename-fontsize) * 0.7);&#10; border-radius: calc(var(--code-filename-fontsize) * 0.5)&#10; calc(var(--code-filename-fontsize) * 0.5) 0 0;&#10; }&#10; .code-block-content {&#10; padding-top: 0px;&#10; }&#10;&lt;/style&gt;&#10;&#10;&lt;div&gt;&#10; &lt;div class="code-block-filename"&gt;Example of the front matter change&lt;/div&gt;&#10; &#10; &lt;div class="code-block-content"&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-diff" data-lang="diff"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="gs"&gt;---&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="gd"&gt;- hidden: true&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="gi"&gt;+ build:&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="gi"&gt;+ list: never&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="gs"&gt;---&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&#10; &lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;p&gt;If you were setting &lt;code&gt;hidden = false&lt;/code&gt;, set &lt;code&gt;build.list&lt;/code&gt; to &lt;code&gt;always&lt;/code&gt;.&lt;/p&gt;&#10;&lt;style&gt;&#10; .code-block-filename {&#10; --code-filename-fontsize: calc(0.96em * 0.9);&#10;&#10; display: table;&#10; max-width: 100%;&#10; background: var(--accent-color-darker);&#10; color: var(--accent-color-text);&#10; font-size: var(--code-filename-fontsize);&#10; line-height: 1;&#10; padding-top: calc(var(--code-filename-fontsize) * 0.5);&#10; padding-left: calc(var(--code-filename-fontsize) * 0.7);&#10; padding-right: calc(var(--code-filename-fontsize) * 0.7);&#10; padding-bottom: calc(var(--code-filename-fontsize) * 0.7);&#10; border-radius: calc(var(--code-filename-fontsize) * 0.5)&#10; calc(var(--code-filename-fontsize) * 0.5) 0 0;&#10; }&#10; .code-block-content {&#10; padding-top: 0px;&#10; }&#10;&lt;/style&gt;&#10;&#10;&lt;div&gt;&#10; &lt;div class="code-block-filename"&gt;Example of the front matter change&lt;/div&gt;&#10; &#10; &lt;div class="code-block-content"&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-diff" data-lang="diff"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="gs"&gt;---&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="gd"&gt;- hidden: false&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="gi"&gt;+ build:&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="gi"&gt;+ list: always&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="gs"&gt;---&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&#10; &lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;h2 id="migrate-your-layout-customizations"&gt;&#10; Migrate your layout customizations&lt;a href="#migrate-your-layout-customizations"&gt;&#10; &lt;img src="https://notes.nakurei.com/icons/link.svg" width="44" height="44" style="width: 0.9em; margin-left: 0.25em; margin-bottom: -0.12em;" alt="Link to this heading" /&gt;&#10; &lt;/a&gt;&lt;/h2&gt;&#10;&lt;p&gt;In Hugo, you can override a theme&amp;rsquo;s files by placing a file with the same name in the same location.&#10;Between v3 and v4, the Stack theme changed both how the theme is written and how its files are split up.&#10;So if you customized the theme, you need to fix the location, name and content of your customized files to match v4.&lt;/p&gt;&#10;&lt;h3 id="move-the-contents-of-layouts_default-into-layouts"&gt;&#10; Move the contents of &lt;code&gt;layouts/_default/&lt;/code&gt; into &lt;code&gt;layouts/&lt;/code&gt;&lt;a href="#move-the-contents-of-layouts_default-into-layouts"&gt;&#10; &lt;img src="https://notes.nakurei.com/icons/link.svg" width="44" height="44" style="width: 0.9em; margin-left: 0.25em; margin-bottom: -0.12em;" alt="Link to this heading" /&gt;&#10; &lt;/a&gt;&lt;/h3&gt;&#10;&lt;p&gt;With the Modern Template System introduced in Hugo v0.146.0, organizing files under a &lt;code&gt;layouts/_default/&lt;/code&gt; folder was deprecated and consolidated into placing them directly under &lt;code&gt;layouts/&lt;/code&gt;.&#10;The Stack theme followed suit: in v4 the contents of &lt;code&gt;layouts/_default/&lt;/code&gt; moved into &lt;code&gt;layouts/&lt;/code&gt;.&#10;So if you were using &lt;code&gt;layouts/_default/&lt;/code&gt;, move it to &lt;code&gt;layouts/&lt;/code&gt;.&lt;/p&gt;&#10;&lt;p&gt;In my case I had modified the theme&amp;rsquo;s &lt;code&gt;layouts/_default/_markup&lt;/code&gt;, so I moved &lt;code&gt;layouts/_default/_markup&lt;/code&gt; to &lt;code&gt;layouts/_markup&lt;/code&gt;.&lt;/p&gt;&#10;&lt;h3 id="move-the-contents-of-layoutspartials-into-layouts_partials"&gt;&#10; Move the contents of &lt;code&gt;layouts/partials&lt;/code&gt; into &lt;code&gt;layouts/_partials&lt;/code&gt;&lt;a href="#move-the-contents-of-layoutspartials-into-layouts_partials"&gt;&#10; &lt;img src="https://notes.nakurei.com/icons/link.svg" width="44" height="44" style="width: 0.9em; margin-left: 0.25em; margin-bottom: -0.12em;" alt="Link to this heading" /&gt;&#10; &lt;/a&gt;&lt;/h3&gt;&#10;&lt;p&gt;This is another consequence of the Modern Template System introduced in Hugo v0.146.0.&#10;Stack v4 follows it and changed &lt;code&gt;layouts/partials&lt;/code&gt; to &lt;code&gt;layouts/_partials&lt;/code&gt;.&#10;So if you customized the theme, you need to move the contents of &lt;code&gt;layouts/partials&lt;/code&gt; into &lt;code&gt;layouts/_partials&lt;/code&gt;.&lt;/p&gt;&#10;&lt;h2 id="change-the-header-image-height"&gt;&#10; Change the header image height&lt;a href="#change-the-header-image-height"&gt;&#10; &lt;img src="https://notes.nakurei.com/icons/link.svg" width="44" height="44" style="width: 0.9em; margin-left: 0.25em; margin-bottom: -0.12em;" alt="Link to this heading" /&gt;&#10; &lt;/a&gt;&lt;/h2&gt;&#10;&lt;p&gt;In Stack v4 you can change the header image height in &lt;code&gt;assets/scss/custom.scss&lt;/code&gt;&lt;sup id="fnref:1"&gt;&lt;a href="#fn:1" class="footnote-ref" role="doc-noteref"&gt;1&lt;/a&gt;&lt;/sup&gt;. The defaults are 150px on mobile, 200px in between, and 250px on large screens.&#10;In v3 I had customized these to 100px on mobile, 150px in between and 150px on large screens, so I created &lt;code&gt;assets/scss/custom.scss&lt;/code&gt; with the following.&lt;/p&gt;&#10;&lt;style&gt;&#10; .code-block-filename {&#10; --code-filename-fontsize: calc(0.96em * 0.9);&#10;&#10; display: table;&#10; max-width: 100%;&#10; background: var(--accent-color-darker);&#10; color: var(--accent-color-text);&#10; font-size: var(--code-filename-fontsize);&#10; line-height: 1;&#10; padding-top: calc(var(--code-filename-fontsize) * 0.5);&#10; padding-left: calc(var(--code-filename-fontsize) * 0.7);&#10; padding-right: calc(var(--code-filename-fontsize) * 0.7);&#10; padding-bottom: calc(var(--code-filename-fontsize) * 0.7);&#10; border-radius: calc(var(--code-filename-fontsize) * 0.5)&#10; calc(var(--code-filename-fontsize) * 0.5) 0 0;&#10; }&#10; .code-block-content {&#10; padding-top: 0px;&#10; }&#10;&lt;/style&gt;&#10;&#10;&lt;div&gt;&#10; &lt;div class="code-block-filename"&gt;assets/scss/custom.scss&lt;/div&gt;&#10; &#10; &lt;div class="code-block-content"&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-scss" data-lang="scss"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nd"&gt;:root&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="na"&gt;--article-image-height&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;100&lt;/span&gt;&lt;span class="kt"&gt;px&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;@include&lt;/span&gt;&lt;span class="nd"&gt; respond&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;md&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="na"&gt;--article-image-height&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;150&lt;/span&gt;&lt;span class="kt"&gt;px&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;}&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;@include&lt;/span&gt;&lt;span class="nd"&gt; respond&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;xl&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="na"&gt;--article-image-height&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;150&lt;/span&gt;&lt;span class="kt"&gt;px&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;}&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&#10; &lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;h2 id="remove-var--zh-font-family"&gt;&#10; Remove &lt;code&gt;var(--zh-font-family)&lt;/code&gt;&lt;a href="#remove-var--zh-font-family"&gt;&#10; &lt;img src="https://notes.nakurei.com/icons/link.svg" width="44" height="44" style="width: 0.9em; margin-left: 0.25em; margin-bottom: -0.12em;" alt="Link to this heading" /&gt;&#10; &lt;/a&gt;&lt;/h2&gt;&#10;&lt;p&gt;In v3 I had customized the CSS on this site to change the font, but Stack v4 removed &lt;code&gt;var(--zh-font-family)&lt;/code&gt;, so my existing setting was ignored if left as-is. I removed &lt;code&gt;var(--zh-font-family)&lt;/code&gt;. Referencing an undefined CSS variable invalidates the whole property, so just deleting it brought my customization back.&lt;/p&gt;&#10;&lt;h2 id="references-and-urls"&gt;&#10; References and URLs&lt;a href="#references-and-urls"&gt;&#10; &lt;img src="https://notes.nakurei.com/icons/link.svg" width="44" height="44" style="width: 0.9em; margin-left: 0.25em; margin-bottom: -0.12em;" alt="Link to this heading" /&gt;&#10; &lt;/a&gt;&lt;/h2&gt;&#10;&#10; &#10; &#10; &lt;div&#10; class="url-card"&#10; style="&#10; display: flex;&#10; height: 100%;&#10; width: 100%;&#10; margin-top: 10px;&#10; margin-bottom: 10px;&#10; padding: 10px;&#10; border: solid 1px var(--table-border-color);&#10; border-radius: 0.5rem;&#10; overflow: hidden;&#10; "&#10; &gt;&#10; &lt;a&#10; href="https://stack.cai.im/guide/upgrade-to-v4"&#10; target="_blank"&#10; rel="noopener noreferrer"&#10; style="&#10; display: flex;&#10; width: 100%;&#10; height: 100%;&#10; text-decoration: none;&#10; "&#10; class="linkcard"&#10; &gt;&#10; &#10; &lt;img&#10; src="https://notes.nakurei.com/icons/photo-off.svg"&#10; alt="Upgrade to v4 | Stack image"&#10; width="120"&#10; height="120"&#10; loading="lazy"&#10; decoding="async"&#10; style="&#10; max-width: 200px;&#10; max-height: 120px;&#10; object-fit: cover;&#10; margin: 0;&#10; flex-shrink: 0;&#10; "&gt;&#10; &#10;&#10; &lt;div&#10; style="&#10; display: flex;&#10; flex-direction: column;&#10; align-items: start;&#10; justify-content: center;&#10; margin-left: 12px;&#10; "&#10; &gt;&#10; &lt;p style="margin: 0; padding-left: 0; padding-bottom: 3px; border: none"&gt;&#10; &#10; Upgrade to v4 | Stack&#10; &#10; &lt;/p&gt;&#10; &lt;p&#10; style="&#10; margin: 0;&#10; font-size: 12px;&#10; word-break: break-word;&#10; display: -webkit-box;&#10; display: box;&#10; -webkit-box-orient: vertical;&#10; box-orient: vertical;&#10; -webkit-line-clamp: 3;&#10; line-clamp: 3;&#10; overflow: hidden;&#10; "&#10; &gt;Card-style Hugo theme designed for bloggers&lt;/p&gt;&#10; &lt;div&#10; style="&#10; display: flex;&#10; flex-direction: row;&#10; align-items: center;&#10; gap: 2px;&#10; "&#10; &gt;&lt;img&#10; src="https://notes.nakurei.com/remote/favicon-15ef2612c8539fa0bc64df6e88fe5ca9add753f8.png"&#10; width="14"&#10; height="14"&#10; style="margin-right: 2px;"&#10; alt="stack.cai.im favicon image"&#10; /&gt;&lt;span style="font-size: small; color: var(--card-text-color-tertiary);"&gt;&#10; stack.cai.im&#10; &lt;/span&gt;&#10; &lt;/div&gt;&#10; &lt;/div&gt;&#10; &lt;/a&gt;&#10; &lt;/div&gt;&lt;style&gt;&#10; .url-card:hover {&#10; box-shadow: 0 0 0 1px var(--card-text-color-tertiary);&#10; }&#10;&lt;/style&gt;&#10;&#10;&#10; &#10; &lt;div&#10; class="url-card"&#10; style="&#10; display: flex;&#10; height: 100%;&#10; width: 100%;&#10; margin-top: 10px;&#10; margin-bottom: 10px;&#10; padding: 10px;&#10; border: solid 1px var(--table-border-color);&#10; border-radius: 0.5rem;&#10; overflow: hidden;&#10; "&#10; &gt;&#10; &lt;a&#10; href="https://github.com/CaiJimmy/hugo-theme-stack-starter/tree/master/config/_default"&#10; target="_blank"&#10; rel="noopener noreferrer"&#10; style="&#10; display: flex;&#10; width: 100%;&#10; height: 100%;&#10; text-decoration: none;&#10; "&#10; class="linkcard"&#10; &gt;&#10; &#10; &lt;img&#10; src="https://notes.nakurei.com/remote/7543790f365d5802765a8321802fc9c681ab1420_hu_d9f61d9a8b48f3bb.webp"&#10; alt="hugo-theme-stack-starter/config/_default at master · CaiJimmy/hugo-theme-stack-starter image"&#10; width="120"&#10; height="120"&#10; loading="lazy"&#10; decoding="async"&#10; style="&#10; max-width: 200px;&#10; max-height: 120px;&#10; object-fit: cover;&#10; margin: 0;&#10; flex-shrink: 0;&#10; "&gt;&#10; &#10;&#10; &lt;div&#10; style="&#10; display: flex;&#10; flex-direction: column;&#10; align-items: start;&#10; justify-content: center;&#10; margin-left: 12px;&#10; "&#10; &gt;&#10; &lt;p style="margin: 0; padding-left: 0; padding-bottom: 3px; border: none"&gt;&#10; &#10; hugo-theme-stack-starter/config/_default at master · CaiJimmy/hugo-theme-stack-starter&#10; &#10; &lt;/p&gt;&#10; &lt;p&#10; style="&#10; margin: 0;&#10; font-size: 12px;&#10; word-break: break-word;&#10; display: -webkit-box;&#10; display: box;&#10; -webkit-box-orient: vertical;&#10; box-orient: vertical;&#10; -webkit-line-clamp: 3;&#10; line-clamp: 3;&#10; overflow: hidden;&#10; "&#10; &gt;A quickstart template to create a Hugo blog using hugo-theme-stack - CaiJimmy/hugo-theme-stack-starter&lt;/p&gt;&#10; &lt;div&#10; style="&#10; display: flex;&#10; flex-direction: row;&#10; align-items: center;&#10; gap: 2px;&#10; "&#10; &gt;&lt;img&#10; src="https://notes.nakurei.com/remote/favicon-ffd1aa80239afc78c1628dfb5e08cff1205f22d5.png"&#10; width="14"&#10; height="14"&#10; style="margin-right: 2px;"&#10; alt="github.com favicon image"&#10; /&gt;&lt;span style="font-size: small; color: var(--card-text-color-tertiary);"&gt;&#10; github.com&#10; &lt;/span&gt;&#10; &lt;/div&gt;&#10; &lt;/div&gt;&#10; &lt;/a&gt;&#10; &lt;/div&gt;&lt;style&gt;&#10; .url-card:hover {&#10; box-shadow: 0 0 0 1px var(--card-text-color-tertiary);&#10; }&#10;&lt;/style&gt;&#10;&#10;&lt;div class="footnotes" role="doc-endnotes"&gt;&#10;&lt;hr&gt;&#10;&lt;ol&gt;&#10;&lt;li id="fn:1"&gt;&#10;&lt;p&gt;In Stack v3 you had to override &lt;code&gt;assets/scss/partials/article.scss&lt;/code&gt; to change this, so personally I&amp;rsquo;m glad about this change.&amp;#160;&lt;a href="#fnref:1" class="footnote-backref" role="doc-backlink"&gt;&amp;#x21a9;&amp;#xfe0e;&lt;/a&gt;&lt;/p&gt;&#10;&lt;/li&gt;&#10;&lt;/ol&gt;&#10;&lt;/div&gt;&#10;</description></item></channel></rss>