<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>buildx.sh</title><link>https://buildx.sh/</link><description>Recent content on buildx.sh</description><generator>Hugo</generator><language>en</language><copyright>© buildx.sh — built with effect, performance, and fun</copyright><lastBuildDate>Sun, 17 May 2026 00:00:00 +0000</lastBuildDate><atom:link href="https://buildx.sh/index.xml" rel="self" type="application/rss+xml"/><item><title>Deploy a Hugo site to Codeberg Pages</title><link>https://buildx.sh/snippets/deploy-hugo-to-codeberg-pages/</link><pubDate>Sun, 17 May 2026 00:00:00 +0000</pubDate><guid>https://buildx.sh/snippets/deploy-hugo-to-codeberg-pages/</guid><description>&lt;p&gt;Codeberg Pages publishes whatever sits on a branch named &lt;code&gt;pages&lt;/code&gt;. So a deploy is just: build, then force-push the output to that branch. No CI runner, no API tokens — your existing SSH key does the auth.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#75715e"&gt;#!/usr/bin/env bash
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#75715e"&gt;&lt;/span&gt;&lt;span style="color:#75715e"&gt;# Build a Hugo site and deploy it to Codeberg Pages by force-pushing the&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#75715e"&gt;# built public/ directory to the `pages` branch of the pages repo.&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;set -euo pipefail
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;cd &lt;span style="color:#e6db74"&gt;&amp;#34;&lt;/span&gt;&lt;span style="color:#66d9ef"&gt;$(&lt;/span&gt;dirname &lt;span style="color:#e6db74"&gt;&amp;#34;&lt;/span&gt;$0&lt;span style="color:#e6db74"&gt;&amp;#34;&lt;/span&gt;&lt;span style="color:#66d9ef"&gt;)&lt;/span&gt;&lt;span style="color:#e6db74"&gt;/..&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;SITE_URL&lt;span style="color:#f92672"&gt;=&lt;/span&gt;&lt;span style="color:#e6db74"&gt;&amp;#34;https://USER.codeberg.page/&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;REMOTE&lt;span style="color:#f92672"&gt;=&lt;/span&gt;&lt;span style="color:#e6db74"&gt;&amp;#34;git@codeberg.org:USER/pages.git&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;BRANCH&lt;span style="color:#f92672"&gt;=&lt;/span&gt;&lt;span style="color:#e6db74"&gt;&amp;#34;pages&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#75715e"&gt;# Build with the live baseURL so absolute asset links resolve correctly.&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;hugo --minify --gc --cleanDestinationDir --baseURL &lt;span style="color:#e6db74"&gt;&amp;#34;&lt;/span&gt;$SITE_URL&lt;span style="color:#e6db74"&gt;&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#75715e"&gt;# Publish public/ as a single fresh commit, force-pushed to the pages branch.&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#75715e"&gt;# Force-push means the branch always mirrors the latest build — no stale files.&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;rm -rf public/.git
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;git -C public init -q
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;git -C public checkout -q -B &lt;span style="color:#e6db74"&gt;&amp;#34;&lt;/span&gt;$BRANCH&lt;span style="color:#e6db74"&gt;&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;git -C public add -A
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;git -C public &lt;span style="color:#ae81ff"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#ae81ff"&gt;&lt;/span&gt; -c user.name&lt;span style="color:#f92672"&gt;=&lt;/span&gt;&lt;span style="color:#e6db74"&gt;&amp;#34;deploy&amp;#34;&lt;/span&gt; &lt;span style="color:#ae81ff"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#ae81ff"&gt;&lt;/span&gt; -c user.email&lt;span style="color:#f92672"&gt;=&lt;/span&gt;&lt;span style="color:#e6db74"&gt;&amp;#34;deploy@example.com&amp;#34;&lt;/span&gt; &lt;span style="color:#ae81ff"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#ae81ff"&gt;&lt;/span&gt; commit -q -m &lt;span style="color:#e6db74"&gt;&amp;#34;deploy: &lt;/span&gt;&lt;span style="color:#66d9ef"&gt;$(&lt;/span&gt;date -u +%Y-%m-%dT%H:%M:%SZ&lt;span style="color:#66d9ef"&gt;)&lt;/span&gt;&lt;span style="color:#e6db74"&gt;&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;git -C public push -q -f &lt;span style="color:#e6db74"&gt;&amp;#34;&lt;/span&gt;$REMOTE&lt;span style="color:#e6db74"&gt;&amp;#34;&lt;/span&gt; &lt;span style="color:#e6db74"&gt;&amp;#34;HEAD:&lt;/span&gt;&lt;span style="color:#e6db74"&gt;${&lt;/span&gt;BRANCH&lt;span style="color:#e6db74"&gt;}&lt;/span&gt;&lt;span style="color:#e6db74"&gt;&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;rm -rf public/.git
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;echo &lt;span style="color:#e6db74"&gt;&amp;#34;deployed -&amp;gt; &lt;/span&gt;$SITE_URL&lt;span style="color:#e6db74"&gt;&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Swap &lt;code&gt;USER&lt;/code&gt; for your Codeberg user or org. Three things have to be true first:&lt;/p&gt;</description></item><item><title>Find the largest objects in git history</title><link>https://buildx.sh/snippets/largest-objects-in-git-history/</link><pubDate>Sat, 16 May 2026 00:00:00 +0000</pubDate><guid>https://buildx.sh/snippets/largest-objects-in-git-history/</guid><description>&lt;p&gt;A repo feels heavy and &lt;code&gt;du&lt;/code&gt; on the working tree shows nothing. The weight is in history — a committed binary, a stray dump, a vendored archive. This lists the 20 biggest blobs across &lt;em&gt;all&lt;/em&gt; commits, including deleted ones.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#75715e"&gt;#!/usr/bin/env bash
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#75715e"&gt;&lt;/span&gt;&lt;span style="color:#75715e"&gt;# git-fat — list the 20 largest objects in git history, human-readable.&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;set -euo pipefail
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;git rev-list --objects --all |
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; git cat-file --batch-check&lt;span style="color:#f92672"&gt;=&lt;/span&gt;&lt;span style="color:#e6db74"&gt;&amp;#39;%(objecttype) %(objectname) %(objectsize) %(rest)&amp;#39;&lt;/span&gt; |
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; awk &lt;span style="color:#e6db74"&gt;&amp;#39;$1 == &amp;#34;blob&amp;#34; { print $3, $4 }&amp;#39;&lt;/span&gt; |
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; sort -rn |
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; head -20 |
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; numfmt --to&lt;span style="color:#f92672"&gt;=&lt;/span&gt;iec --field&lt;span style="color:#f92672"&gt;=&lt;/span&gt;&lt;span style="color:#ae81ff"&gt;1&lt;/span&gt; |
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; column -t
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Output is &lt;code&gt;size path&lt;/code&gt;, biggest first:&lt;/p&gt;</description></item><item><title>Retry a command with exponential backoff</title><link>https://buildx.sh/snippets/retry-with-backoff/</link><pubDate>Thu, 14 May 2026 00:00:00 +0000</pubDate><guid>https://buildx.sh/snippets/retry-with-backoff/</guid><description>&lt;p&gt;Network calls fail for a second and then work fine. A script shouldn&amp;rsquo;t die over that. This wraps any command, retrying with a doubling delay.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#75715e"&gt;# retry — run a command up to N times with exponential backoff.&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#75715e"&gt;# Usage: retry 5 curl -sf https://example.com&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;retry&lt;span style="color:#f92672"&gt;()&lt;/span&gt; &lt;span style="color:#f92672"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; local max&lt;span style="color:#f92672"&gt;=&lt;/span&gt;&lt;span style="color:#e6db74"&gt;&amp;#34;&lt;/span&gt;$1&lt;span style="color:#e6db74"&gt;&amp;#34;&lt;/span&gt;; shift
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; local n&lt;span style="color:#f92672"&gt;=&lt;/span&gt;&lt;span style="color:#ae81ff"&gt;1&lt;/span&gt; delay&lt;span style="color:#f92672"&gt;=&lt;/span&gt;&lt;span style="color:#ae81ff"&gt;1&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#66d9ef"&gt;until&lt;/span&gt; &lt;span style="color:#e6db74"&gt;&amp;#34;&lt;/span&gt;$@&lt;span style="color:#e6db74"&gt;&amp;#34;&lt;/span&gt;; &lt;span style="color:#66d9ef"&gt;do&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#66d9ef"&gt;if&lt;/span&gt; &lt;span style="color:#f92672"&gt;((&lt;/span&gt; n &amp;gt;&lt;span style="color:#f92672"&gt;=&lt;/span&gt; max &lt;span style="color:#f92672"&gt;))&lt;/span&gt;; &lt;span style="color:#66d9ef"&gt;then&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; echo &lt;span style="color:#e6db74"&gt;&amp;#34;retry: &amp;#39;&lt;/span&gt;$*&lt;span style="color:#e6db74"&gt;&amp;#39; failed after &lt;/span&gt;$max&lt;span style="color:#e6db74"&gt; attempts&amp;#34;&lt;/span&gt; &amp;gt;&amp;amp;&lt;span style="color:#ae81ff"&gt;2&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#66d9ef"&gt;return&lt;/span&gt; &lt;span style="color:#ae81ff"&gt;1&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#66d9ef"&gt;fi&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; echo &lt;span style="color:#e6db74"&gt;&amp;#34;retry: attempt &lt;/span&gt;$n&lt;span style="color:#e6db74"&gt; failed; sleeping &lt;/span&gt;&lt;span style="color:#e6db74"&gt;${&lt;/span&gt;delay&lt;span style="color:#e6db74"&gt;}&lt;/span&gt;&lt;span style="color:#e6db74"&gt;s&amp;#34;&lt;/span&gt; &amp;gt;&amp;amp;&lt;span style="color:#ae81ff"&gt;2&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; sleep &lt;span style="color:#e6db74"&gt;&amp;#34;&lt;/span&gt;$delay&lt;span style="color:#e6db74"&gt;&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f92672"&gt;((&lt;/span&gt; n++, delay *&lt;span style="color:#f92672"&gt;=&lt;/span&gt; &lt;span style="color:#ae81ff"&gt;2&lt;/span&gt; &lt;span style="color:#f92672"&gt;))&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#66d9ef"&gt;done&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#f92672"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;It returns the command&amp;rsquo;s success once it passes, or &lt;code&gt;1&lt;/code&gt; after exhausting the attempts — so it drops straight into a &lt;code&gt;set -e&lt;/code&gt; script:&lt;/p&gt;</description></item><item><title>Read one secret from a SOPS file</title><link>https://buildx.sh/snippets/read-a-secret-from-sops/</link><pubDate>Tue, 12 May 2026 00:00:00 +0000</pubDate><guid>https://buildx.sh/snippets/read-a-secret-from-sops/</guid><description>&lt;p&gt;&lt;code&gt;sops -d&lt;/code&gt; prints the entire decrypted file. Most of the time you want exactly one value — and you don&amp;rsquo;t want it landing in shell history or a temp file. &lt;code&gt;--extract&lt;/code&gt; does that.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#75715e"&gt;# secret — print one key from a SOPS-encrypted YAML file.&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#75715e"&gt;# Usage: secret CODEBERG_TOKEN [path/to/secrets.enc.yaml]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;secret&lt;span style="color:#f92672"&gt;()&lt;/span&gt; &lt;span style="color:#f92672"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; local key&lt;span style="color:#f92672"&gt;=&lt;/span&gt;&lt;span style="color:#e6db74"&gt;&amp;#34;&lt;/span&gt;$1&lt;span style="color:#e6db74"&gt;&amp;#34;&lt;/span&gt; file&lt;span style="color:#f92672"&gt;=&lt;/span&gt;&lt;span style="color:#e6db74"&gt;&amp;#34;&lt;/span&gt;&lt;span style="color:#e6db74"&gt;${&lt;/span&gt;2&lt;span style="color:#66d9ef"&gt;:-&lt;/span&gt;secrets.enc.yaml&lt;span style="color:#e6db74"&gt;}&lt;/span&gt;&lt;span style="color:#e6db74"&gt;&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; sops -d --extract &lt;span style="color:#e6db74"&gt;&amp;#34;[\&amp;#34;&lt;/span&gt;&lt;span style="color:#e6db74"&gt;${&lt;/span&gt;key&lt;span style="color:#e6db74"&gt;}&lt;/span&gt;&lt;span style="color:#e6db74"&gt;\&amp;#34;]&amp;#34;&lt;/span&gt; &lt;span style="color:#e6db74"&gt;&amp;#34;&lt;/span&gt;$file&lt;span style="color:#e6db74"&gt;&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#f92672"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Use it inline so the plaintext never touches disk and an env var still wins:&lt;/p&gt;</description></item><item><title>Auto-load a Nix flake dev shell with direnv</title><link>https://buildx.sh/snippets/nix-flake-dev-shell-with-direnv/</link><pubDate>Sat, 09 May 2026 00:00:00 +0000</pubDate><guid>https://buildx.sh/snippets/nix-flake-dev-shell-with-direnv/</guid><description>&lt;p&gt;A project&amp;rsquo;s tools should appear when you enter its directory and vanish when you leave. &lt;code&gt;direnv&lt;/code&gt; + &lt;code&gt;nix-direnv&lt;/code&gt; does exactly that — this &lt;code&gt;.envrc&lt;/code&gt; loads a named flake dev shell on &lt;code&gt;cd&lt;/code&gt;.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#75715e"&gt;# .envrc — auto-load a named Nix flake dev shell.&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#75715e"&gt;# Needs direnv + nix-direnv: https://github.com/nix-community/nix-direnv&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#66d9ef"&gt;if&lt;/span&gt; ! has nix_direnv_version &lt;span style="color:#f92672"&gt;||&lt;/span&gt; ! nix_direnv_version 3.0.0; &lt;span style="color:#66d9ef"&gt;then&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; source_url &lt;span style="color:#e6db74"&gt;&amp;#34;https://raw.githubusercontent.com/nix-community/nix-direnv/3.0.0/direnvrc&amp;#34;&lt;/span&gt; &lt;span style="color:#ae81ff"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#ae81ff"&gt;&lt;/span&gt; &lt;span style="color:#e6db74"&gt;&amp;#34;sha256-21TMnI2xWX7HkSTjFFri2UaohXVj854mgvWapWrxRXg=&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#66d9ef"&gt;fi&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#75715e"&gt;# Loads devShells.&amp;lt;system&amp;gt;.myshell — drop the suffix for the default shell.&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;use flake .#myshell
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#75715e"&gt;# Untracked local overrides, if any.&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#f92672"&gt;[&lt;/span&gt; -f .envrc.local &lt;span style="color:#f92672"&gt;]&lt;/span&gt; &lt;span style="color:#f92672"&gt;&amp;amp;&amp;amp;&lt;/span&gt; source_env .envrc.local
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Run &lt;code&gt;direnv allow&lt;/code&gt; once; after that the shell rebuilds itself whenever &lt;code&gt;flake.nix&lt;/code&gt; changes.&lt;/p&gt;</description></item><item><title>About</title><link>https://buildx.sh/about/</link><pubDate>Wed, 06 May 2026 00:00:00 +0000</pubDate><guid>https://buildx.sh/about/</guid><description>&lt;p&gt;&lt;strong&gt;buildx.sh&lt;/strong&gt; is a notebook for building things.&lt;/p&gt;
&lt;p&gt;The mental model is simple: build with &lt;strong&gt;effect&lt;/strong&gt;, with &lt;strong&gt;performance&lt;/strong&gt;, and with &lt;strong&gt;fun&lt;/strong&gt;. If a project loses any of the three, it stops being worth doing.&lt;/p&gt;
&lt;h2 id="why-this-exists"&gt;Why this exists&lt;/h2&gt;
&lt;p&gt;Most &amp;ldquo;how I built X&amp;rdquo; posts skip the parts that actually matter — the trade-offs, the failed attempts, the moment you realize the architecture is wrong. This site keeps those parts in.&lt;/p&gt;
&lt;h2 id="what-lives-here"&gt;What lives here&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Build logs for side projects&lt;/li&gt;
&lt;li&gt;Performance experiments and benchmarks&lt;/li&gt;
&lt;li&gt;Short opinions on tools and tradeoffs&lt;/li&gt;
&lt;li&gt;The occasional rant, kept brief&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="get-in-touch"&gt;Get in touch&lt;/h2&gt;
&lt;p&gt;Open a thread, send a message, or just borrow an idea. Building is more fun together.&lt;/p&gt;</description></item><item><title>Hello, buildx</title><link>https://buildx.sh/posts/welcome/</link><pubDate>Wed, 06 May 2026 00:00:00 +0000</pubDate><guid>https://buildx.sh/posts/welcome/</guid><description>&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"&gt;&lt;code class="language-sh" data-lang="sh"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;$ buildx --help
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;Usage: buildx &lt;span style="color:#f92672"&gt;[&lt;/span&gt;thing&lt;span style="color:#f92672"&gt;]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;Build everything. With effect. With speed. With fun.
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Welcome to &lt;strong&gt;buildx.sh&lt;/strong&gt; — a place to build things and write down what worked.&lt;/p&gt;
&lt;h2 id="the-mental-model"&gt;The mental model&lt;/h2&gt;
&lt;p&gt;Three knobs, always tuned together:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Effective&lt;/strong&gt; — does it solve the actual problem, end to end?&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;High performance&lt;/strong&gt; — is it fast enough to enjoy using?&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Fun&lt;/strong&gt; — would you reach for it again on a Saturday?&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Drop any one of them and the project quietly dies. Keep all three honest, and small projects start compounding into a craft.&lt;/p&gt;</description></item></channel></rss>