{
  "version": "https://jsonfeed.org/version/1.1",
  "title": "Today I Learned",
  "home_page_url": "https://go.waylonwalker.com/til/",
  "feed_url": "https://go.waylonwalker.com/til/feed.json",
  "description": "Short TIL posts",
  "authors": [
    {
      "name": "Waylon Walker"
    }
  ],
  "items": [
    {
      "id": "https://go.waylonwalker.com/unlock-a-locked-gpg-key/",
      "url": "https://go.waylonwalker.com/unlock-a-locked-gpg-key/",
      "title": "unlock a locked gpg key",
      "content_html": "\u003cp\u003eI ran into an issue where my \u003ccode\u003epinentry\u003c/code\u003e was unable to connect, blocking me from\ndoing commits.  You can use this to continue signing commits.\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nb\"\u003eexport\u003c/span\u003e \u003cspan class=\"nv\"\u003eGPG_TTY\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"k\"\u003e$(\u003c/span\u003etty\u003cspan class=\"k\"\u003e)\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003egpg-connect-agent updatestartuptty /bye\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nb\"\u003eprintf\u003c/span\u003e \u003cspan class=\"nb\"\u003etest\u003c/span\u003e \u003cspan class=\"p\"\u003e|\u003c/span\u003e gpg \u003cspan class=\"se\"\u003e\\\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  --local-user 9A47900E81415D65C32C630066E2BF2B4190EFE4 \u003cspan class=\"se\"\u003e\\\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  --pinentry-mode loopback \u003cspan class=\"se\"\u003e\\\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  --sign \u0026gt;/dev/nul\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e",
      "content_text": "\nI ran into an issue where my `pinentry` was unable to connect, blocking me from\ndoing commits.  You can use this to continue signing commits.\n\n``` bash\nexport GPG_TTY=$(tty)\ngpg-connect-agent updatestartuptty /bye\n\nprintf test | gpg \\\n  --local-user 9A47900E81415D65C32C630066E2BF2B4190EFE4 \\\n  --pinentry-mode loopback \\\n  --sign \u003e/dev/nul\n```\n",
      "summary": "I ran into an issue where my was unable to connect, blocking me from doing commits. You can use this to continue signing commits.",
      "date_published": "2026-07-10T14:26:00Z",
      "date_modified": "2026-07-10T14:26:00Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "python"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/rpm-ostree-status/",
      "url": "https://go.waylonwalker.com/rpm-ostree-status/",
      "title": "rpm ostree status",
      "content_html": "\u003cp\u003eI’ve been running fedora coreos on my home servers for awhile.  I really liked\nthe stability I got from bazzite, and have since enjoyed the stability of\nfedora coreos.  Since it’s an immutable system I’ve never quite known if I need\nto reboot or not, and was unsure how to check for updates. Today I learned you\ncan use \u003ccode\u003erpm-ostree status\u003c/code\u003e to see if your\nfedora coreos system is up to date.\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003erpm-ostree status\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003cp\u003eFor me it listed security advisories with a count of each severity unknown, low, moderate, and important.\u003c/p\u003e\n",
      "content_text": "\nI've been running fedora coreos on my home servers for awhile.  I really liked\nthe stability I got from bazzite, and have since enjoyed the stability of\nfedora coreos.  Since it's an immutable system I've never quite known if I need\nto reboot or not, and was unsure how to check for updates. Today I learned you\ncan use `rpm-ostree status` to see if your\nfedora coreos system is up to date.\n\n``` bash\nrpm-ostree status\n```\n\nFor me it listed security advisories with a count of each severity unknown, low, moderate, and important.\n",
      "summary": "I've been running fedora coreos on my home servers for awhile. I really liked the stability I got from bazzite, and have since enjoyed the stability of...",
      "date_published": "2026-07-05T17:16:21Z",
      "date_modified": "2026-07-05T17:16:21Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "linux"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/fixing-a-corrupt-zsh_history/",
      "url": "https://go.waylonwalker.com/fixing-a-corrupt-zsh_history/",
      "title": "fixing a corrupt zshrc",
      "content_html": "\u003cp\u003eThis morning I had a machine crash on me and came back to an error.\u003c/p\u003e\n\u003cdiv class=\"admonition warning\"\u003e\n\u003cp class=\"admonition-title\"\u003eError\u003c/p\u003e\n\u003cp\u003ezsh: corrupt history file /home/u_walkews/.zsh_history\u003c/p\u003e\n\u003c/div\u003e\n\u003cp\u003eDammit I don’t want to redo my shell history, I checked with a clanker and they\ncame up with this solution using \u003ccode\u003estrings\u003c/code\u003e that only prints printable\ncharacters.\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003ecp ~/.zsh_history ~/.zsh_history.bak\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003emv ~/.zsh_history ~/.zsh_history.corrupt\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003etouch ~/.zsh_history\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003echmod \u003cspan class=\"m\"\u003e600\u003c/span\u003e ~/.zsh_history\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003estrings ~/.zsh_history.corrupt \u0026gt; ~/.zsh_history\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003echmod \u003cspan class=\"m\"\u003e600\u003c/span\u003e ~/.zsh_history\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e",
      "content_text": "\nThis morning I had a machine crash on me and came back to an error.\n\n!!! Warning \"Error\"\n\n    zsh: corrupt history file /home/u_walkews/.zsh_history\n\nDammit I don't want to redo my shell history, I checked with a clanker and they\ncame up with this solution using `strings` that only prints printable\ncharacters.\n\n``` bash\ncp ~/.zsh_history ~/.zsh_history.bak\nmv ~/.zsh_history ~/.zsh_history.corrupt\ntouch ~/.zsh_history\nchmod 600 ~/.zsh_history\nstrings ~/.zsh_history.corrupt \u003e ~/.zsh_history\nchmod 600 ~/.zsh_history\n```\n",
      "summary": "This morning I had a machine crash on me and came back to an error.",
      "date_published": "2026-06-29T08:39:59Z",
      "date_modified": "2026-06-29T08:39:59Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "bash",
        "cli",
        "linux",
        "zsh"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/one-eyed-fighting-kirby/",
      "url": "https://go.waylonwalker.com/one-eyed-fighting-kirby/",
      "title": "one eyed fighting kirby",
      "content_html": "\u003cblockquote\u003e\n\u003cp\u003eJust give em the ol one eyed fighting Kirby\u003c/p\u003e\n\u003c/blockquote\u003e\n\u003cp\u003eThis is a vim substitution technique to capture the rest of the line as a\ncapture group.\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"s1\"\u003e\u0026#39;\u0026lt;,\u0026#39;\u003c/span\u003e\u003cspan class=\"p\"\u003e\u0026gt;\u003c/span\u003e\u003cspan class=\"nx\"\u003es\u003c/span\u003e\u003cspan class=\"sr\"\u003e/longhorn\\(.*\\)/\u003c/span\u003e\u003cspan class=\"nx\"\u003elonghorn\u003c/span\u003e\\\u003cspan class=\"m\"\u003e1\u003c/span\u003e\u003cspan class=\"p\"\u003e-\u003c/span\u003e\u003cspan class=\"nx\"\u003erwx\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003cp\u003eThis one captures pesky optional \u003ccode\u003e\u0026#34;\u003c/code\u003e and places it back at the end if it found\none.\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"s1\"\u003e\u0026#39;\u0026lt;,\u0026#39;\u003c/span\u003e\u003cspan class=\"p\"\u003e\u0026gt;\u003c/span\u003e\u003cspan class=\"nx\"\u003es\u003c/span\u003e\u003cspan class=\"sr\"\u003e/longhorn\\(\u0026#34;\\?\\)\\(.*\\)/\u003c/span\u003e\u003cspan class=\"nx\"\u003elonghorn\u003c/span\u003e\\\u003cspan class=\"m\"\u003e2\u003c/span\u003e\u003cspan class=\"p\"\u003e-\u003c/span\u003e\u003cspan class=\"nx\"\u003erwx\u003c/span\u003e\\\u003cspan class=\"m\"\u003e1\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003cp\u003e!!! see-also\u003c/p\u003e\n\u003cpre\u003e\u003ccode\u003e\u0026lt;a href=\u0026#34;/thought-200/\u0026#34; class=\u0026#34;wikilink\u0026#34; data-title=\u0026#34;The One Eyed Fighting Kirby\u0026#34; data-description=\u0026#34;!https://www.youtube.com/watch?v=9_Ekt1PZBzQ\u0026amp;amp;t=351s\u0026#34; data-date=\u0026#34;2024-01-26\u0026#34;\u0026gt;The One Eyed Fighting Kirby\u0026lt;/a\u0026gt;\n\u003c/code\u003e\u003c/pre\u003e\n",
      "content_text": "\n\u003e Just give em the ol one eyed fighting Kirby\n\nThis is a vim substitution technique to capture the rest of the line as a\ncapture group.\n\n``` vim\n:'\u003c,'\u003es/longhorn\\(.*\\)/longhorn\\1-rwx\n```\n\nThis one captures pesky optional `\"` and places it back at the end if it found\none.\n\n``` vim\n:'\u003c,'\u003es/longhorn\\(\"\\?\\)\\(.*\\)/longhorn\\2-rwx\\1\n```\n\n!!! see-also\n\n    \u003ca href=\"/thought-200/\" class=\"wikilink\" data-title=\"The One Eyed Fighting Kirby\" data-description=\"!https://www.youtube.com/watch?v=9_Ekt1PZBzQ\u0026amp;t=351s\" data-date=\"2024-01-26\"\u003eThe One Eyed Fighting Kirby\u003c/a\u003e\n\n",
      "summary": "Just give em the ol one eyed fighting Kirby",
      "date_published": "2026-06-11T11:49:41Z",
      "date_modified": "2026-06-11T11:49:41Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "vim"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/rsync-delays/",
      "url": "https://go.waylonwalker.com/rsync-delays/",
      "title": "rsync delays",
      "content_html": "\u003cp\u003eI’ve been deploying my site old school for most of this year, rsync to a volume\nmounted to nginx.  I ran into an issue today where I updated my site and all of\nthe pages updated first, followed by upload.  The issue this created was that\nthe new cache busted css files were not up yet and the site had no styles for a\nbrief period during upload.\u003c/p\u003e\n\u003cp\u003eI found that delaying updates and delaying deletes until the new content exists\nfirst solves this problem pretty well.  Theres still possiblility of jank while\nuploading to a live directory and not doing some sort of hot swap, but I’m good\nwith this low budget option for now.\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003esync:\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\trsync -rlt --delete --omit-dir-times \u003cspan class=\"se\"\u003e\\\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\t--info\u003cspan class=\"o\"\u003e=\u003c/span\u003eprogress2 \u003cspan class=\"se\"\u003e\\\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\t--delay-updates \u003cspan class=\"se\"\u003e\\\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\t--delete-delay \u003cspan class=\"se\"\u003e\\\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\t./output/ \u003cspan class=\"se\"\u003e\\\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\tserver:/mnt/mysite\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e",
      "content_text": "\nI've been deploying my site old school for most of this year, rsync to a volume\nmounted to nginx.  I ran into an issue today where I updated my site and all of\nthe pages updated first, followed by upload.  The issue this created was that\nthe new cache busted css files were not up yet and the site had no styles for a\nbrief period during upload.\n\nI found that delaying updates and delaying deletes until the new content exists\nfirst solves this problem pretty well.  Theres still possiblility of jank while\nuploading to a live directory and not doing some sort of hot swap, but I'm good\nwith this low budget option for now.\n\n``` bash\nsync:\n\trsync -rlt --delete --omit-dir-times \\\n\t--info=progress2 \\\n\t--delay-updates \\\n\t--delete-delay \\\n\t./output/ \\\n\tserver:/mnt/mysite\n```\n",
      "summary": "I've been deploying my site old school for most of this year, rsync to a volume mounted to nginx. I ran into an issue today where I updated my site and all...",
      "date_published": "2026-06-04T17:31:53Z",
      "date_modified": "2026-06-04T17:31:53Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "bash",
        "cli"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/zsh-source-env/",
      "url": "https://go.waylonwalker.com/zsh-source-env/",
      "title": "zsh source .env",
      "content_text": "\n",
      "date_published": "2026-05-29T08:19:41Z",
      "date_modified": "2026-05-29T08:19:41Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "bash",
        "cli"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/setopt-hist_ignore_space/",
      "url": "https://go.waylonwalker.com/setopt-hist_ignore_space/",
      "title": "setopt HIST_IGNORE_SPACE",
      "content_html": "\u003cp\u003eTo ignore commands that start with a space character, use the\n\u003ccode\u003eHIST_IGNORE_SPACE\u003c/code\u003e option in bash or zsh.\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003esetopt HIST_IGNORE_SPACE\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e",
      "content_text": "\nTo ignore commands that start with a space character, use the\n`HIST_IGNORE_SPACE` option in bash or zsh.\n\n``` bash\nsetopt HIST_IGNORE_SPACE\n```\n",
      "summary": "To ignore commands that start with a space character, use the option in bash or zsh.",
      "date_published": "2026-05-24T20:15:37Z",
      "date_modified": "2026-05-24T20:15:37Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "bash",
        "cli"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/forgejo-push-to-create/",
      "url": "https://go.waylonwalker.com/forgejo-push-to-create/",
      "title": "forgejo push to create",
      "content_html": "\u003cp\u003eI just learned that forgejo has a push to create repo feature and it is a\ngamechanger.  Upon first try it didn’t work, with just a couple of environment\nvariables I was up and running with push to create.\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003enotify.wayl.one on  main is 📦 v0.1.62  v3.14.4  NO PYTHON VENV SET  USING SYSTEM NVIM\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e❯ git remote add origin https://git.waylonwalker.com/waylon/notify.wayl.one\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003enotify.wayl.one on  main is 📦 v0.1.62  v3.14.4  NO PYTHON VENV SET  USING SYSTEM NVIM\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e❯ git push\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eremote: Push to create is not enabled \u003cspan class=\"k\"\u003efor\u003c/span\u003e users.\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003efatal: unable to access \u003cspan class=\"s1\"\u003e\u0026#39;https://git.waylonwalker.com/waylon/notify.wayl.one/\u0026#39;\u003c/span\u003e: The requested URL returned error: \u003cspan class=\"m\"\u003e403\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003cp\u003eSo I added the following environment variables.\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eAuthor: Waylon S. Walker \u0026lt;waylon@waylonwalker.com\u0026gt;\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eDate:   Wed May 6 21:56:53 2026 -0500\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    enable push to create\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"gh\"\u003ediff --git a/k8s/forgejo/deployment.yaml b/k8s/forgejo/deployment.yaml\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"gh\"\u003eindex d77daab..9346763 100644\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"gd\"\u003e--- a/k8s/forgejo/deployment.yaml\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"gi\"\u003e+++ b/k8s/forgejo/deployment.yaml\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"gu\"\u003e@@ -91,6 +91,10 @@ spec:\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e               value: \u0026#34;0.0.0.0\u0026#34;\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e             - name: FORGEJO__server__HTTP_PORT\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e               value: \u0026#34;3000\u0026#34;\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"gi\"\u003e+            - name: FORGEJO__repository__ENABLE_PUSH_CREATE_USER\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"gi\"\u003e+              value: \u0026#34;true\u0026#34;\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"gi\"\u003e+            - name: FORGEJO__repository__ENABLE_PUSH_CREATE_ORG\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"gi\"\u003e+              value: \u0026#34;true\u0026#34;\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e             - name: FORGEJO__database__DB_TYPE\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e               value: postgres\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e             - name: FORGEJO__database__HOST\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003cp\u003e\u003ca href=\"https://github.com/WaylonWalker/homelab-argo/commit/b2e953bc12\" style=\"--favicon-url: url(\u0026#39;/assets/markata/link-avatars/github.com.ico\u0026#39;);\" data-favicon=\"/assets/markata/link-avatars/github.com.ico\" class=\"has-avatar  has-avatar-before\"\u003ehttps://github.com/WaylonWalker/homelab-argo/commit/b2e953bc12\u003c/a\u003e\u003c/p\u003e\n\u003cp\u003eTried again, and it just worked!\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003enotify.wayl.one on  main is 📦 v0.1.62  v3.14.4  NO PYTHON VENV SET  USING SYSTEM NVIM\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e❯ git push\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eEnumerating objects: 171, \u003cspan class=\"k\"\u003edone\u003c/span\u003e.\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eCounting objects: 100% \u003cspan class=\"o\"\u003e(\u003c/span\u003e171/171\u003cspan class=\"o\"\u003e)\u003c/span\u003e, \u003cspan class=\"k\"\u003edone\u003c/span\u003e.\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eDelta compression using up to \u003cspan class=\"m\"\u003e12\u003c/span\u003e threads\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eCompressing objects: 100% \u003cspan class=\"o\"\u003e(\u003c/span\u003e169/169\u003cspan class=\"o\"\u003e)\u003c/span\u003e, \u003cspan class=\"k\"\u003edone\u003c/span\u003e.\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eWriting objects: 100% \u003cspan class=\"o\"\u003e(\u003c/span\u003e171/171\u003cspan class=\"o\"\u003e)\u003c/span\u003e, 176.22 KiB \u003cspan class=\"p\"\u003e|\u003c/span\u003e 16.02 MiB/s, \u003cspan class=\"k\"\u003edone\u003c/span\u003e.\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eTotal \u003cspan class=\"m\"\u003e171\u003c/span\u003e \u003cspan class=\"o\"\u003e(\u003c/span\u003edelta 99\u003cspan class=\"o\"\u003e)\u003c/span\u003e, reused \u003cspan class=\"m\"\u003e0\u003c/span\u003e \u003cspan class=\"o\"\u003e(\u003c/span\u003edelta 0\u003cspan class=\"o\"\u003e)\u003c/span\u003e, pack-reused \u003cspan class=\"m\"\u003e0\u003c/span\u003e \u003cspan class=\"o\"\u003e(\u003c/span\u003efrom 0\u003cspan class=\"o\"\u003e)\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eremote: Resolving deltas: 100% \u003cspan class=\"o\"\u003e(\u003c/span\u003e99/99\u003cspan class=\"o\"\u003e)\u003c/span\u003e, \u003cspan class=\"k\"\u003edone\u003c/span\u003e.\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eTo https://git.waylonwalker.com/waylon/notify.wayl.one\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e * \u003cspan class=\"o\"\u003e[\u003c/span\u003enew branch\u003cspan class=\"o\"\u003e]\u003c/span\u003e      main -\u0026gt; main\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e",
      "content_text": "\nI just learned that forgejo has a push to create repo feature and it is a\ngamechanger.  Upon first try it didn't work, with just a couple of environment\nvariables I was up and running with push to create.\n\n``` bash\nnotify.wayl.one on  main is 📦 v0.1.62  v3.14.4  NO PYTHON VENV SET  USING SYSTEM NVIM\n❯ git remote add origin https://git.waylonwalker.com/waylon/notify.wayl.one\nnotify.wayl.one on  main is 📦 v0.1.62  v3.14.4  NO PYTHON VENV SET  USING SYSTEM NVIM\n❯ git push\nremote: Push to create is not enabled for users.\nfatal: unable to access 'https://git.waylonwalker.com/waylon/notify.wayl.one/': The requested URL returned error: 403\n```\n\nSo I added the following environment variables.\n\n``` diff\nAuthor: Waylon S. Walker \u003cwaylon@waylonwalker.com\u003e\nDate:   Wed May 6 21:56:53 2026 -0500\n\n    enable push to create\n\ndiff --git a/k8s/forgejo/deployment.yaml b/k8s/forgejo/deployment.yaml\nindex d77daab..9346763 100644\n--- a/k8s/forgejo/deployment.yaml\n+++ b/k8s/forgejo/deployment.yaml\n@@ -91,6 +91,10 @@ spec:\n               value: \"0.0.0.0\"\n             - name: FORGEJO__server__HTTP_PORT\n               value: \"3000\"\n+            - name: FORGEJO__repository__ENABLE_PUSH_CREATE_USER\n+              value: \"true\"\n+            - name: FORGEJO__repository__ENABLE_PUSH_CREATE_ORG\n+              value: \"true\"\n             - name: FORGEJO__database__DB_TYPE\n               value: postgres\n             - name: FORGEJO__database__HOST\n```\n\nhttps://github.com/WaylonWalker/homelab-argo/commit/b2e953bc12\n\nTried again, and it just worked!\n\n``` bash\nnotify.wayl.one on  main is 📦 v0.1.62  v3.14.4  NO PYTHON VENV SET  USING SYSTEM NVIM\n❯ git push\nEnumerating objects: 171, done.\nCounting objects: 100% (171/171), done.\nDelta compression using up to 12 threads\nCompressing objects: 100% (169/169), done.\nWriting objects: 100% (171/171), 176.22 KiB | 16.02 MiB/s, done.\nTotal 171 (delta 99), reused 0 (delta 0), pack-reused 0 (from 0)\nremote: Resolving deltas: 100% (99/99), done.\nTo https://git.waylonwalker.com/waylon/notify.wayl.one\n * [new branch]      main -\u003e main\n ```\n",
      "summary": "I just learned that forgejo has a push to create repo feature and it is a gamechanger. Upon first try it didn't work, with just a couple of environment...",
      "date_published": "2026-05-06T21:58:55Z",
      "date_modified": "2026-05-06T21:58:55Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "git"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/nless/",
      "url": "https://go.waylonwalker.com/nless/",
      "title": "nless",
      "content_html": "\u003cp\u003enless is a seriously sick tui for exploring streaming data.  It makes it\nseriously simple to pivot (U), drill in (Enter), sort (s).  It leave\nbreadcrumbs as you go and you can press q to back out.\u003c/p\u003e\n\u003cp\u003ePlay with your kubernetes events.  Ya, my \u003ca href=\"/homelab/\" class=\"glossary-term\" title=\"A place to self host applications. For me this is primarily self built web applications, and applications for sharing files with my family. Techno Tim has a...\"\u003ehomelab\u003c/a\u003e is far from perfect, dont judge.\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003ekubectl get events -A -w \u003cspan class=\"p\"\u003e|\u003c/span\u003e uvx --from nothing-less nless\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003cfigure\u003e\n\u003ca href=\"http://dropper.wayl.one/file/ceda8873-cb08-4436-a3ac-b5bf4a0b2379.mp4\" class=\"glightbox-link\" aria-label=\"ceda8873-cb08-4436-a3ac-b5bf4a0b2379.mp4\"\u003e\u003cvideo autoplay loop muted playsinline controls preload=\"metadata\" class=\"md-video\" poster=\"https://dropper.wayl.one/file/ceda8873-cb08-4436-a3ac-b5bf4a0b2379.webp?h=675\u0026w=1200\"\u003e\u003csource src=\"http://dropper.wayl.one/file/ceda8873-cb08-4436-a3ac-b5bf4a0b2379.mp4\" type=\"video/mp4\"\u003eceda8873-cb08-4436-a3ac-b5bf4a0b2379.mp4\u003c/video\u003e\u003c/a\u003e\n\u003c/figure\u003e\n",
      "content_text": "\nnless is a seriously sick tui for exploring streaming data.  It makes it\nseriously simple to pivot (U), drill in (Enter), sort (s).  It leave\nbreadcrumbs as you go and you can press q to back out.\n\nPlay with your kubernetes events.  Ya, my homelab is far from perfect, dont judge.\n\n``` bash\nkubectl get events -A -w | uvx --from nothing-less nless\n```\n\n![ceda8873-cb08-4436-a3ac-b5bf4a0b2379.mp4](http://dropper.wayl.one/file/ceda8873-cb08-4436-a3ac-b5bf4a0b2379.mp4)\n",
      "summary": "nless is a seriously sick tui for exploring streaming data. It makes it seriously simple to pivot (U), drill in (Enter), sort (s). It leave breadcrumbs as...",
      "date_published": "2026-05-06T20:45:01Z",
      "date_modified": "2026-05-06T20:45:01Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "python"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/image-compare-in-markata-go/",
      "url": "https://go.waylonwalker.com/image-compare-in-markata-go/",
      "title": "image compare in markata go",
      "content_html": "\u003cp\u003e\u003ccode\u003emarkata-go\u003c/code\u003e now has web awesome integration for image compare.  It renders a\nnice web component with a slider to compare two images.\u003c/p\u003e\n\u003cwa-comparison class=\"markata-webawesome-comparison\"\u003e\u003cimg slot=\"after\" src=\"https://dropper.wayl.one/file/d628ffba-de18-4fff-91a8-700f037df119.webp\" alt=\"d628ffba-de18-4fff-91a8-700f037df119.webp\" loading=\"lazy\"\u003e\u003cimg slot=\"before\" src=\"https://dropper.waylonwalker.com/file/ca30665f-1a15-453e-aab8-221901c7df99.webp\" alt=\"\" loading=\"lazy\"\u003e\u003c/wa-comparison\u003e\n\u003cp\u003eIt’s done with a class wrapper around the image components.\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e::: wa-comparison\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e![\u003cspan class=\"nt\"\u003ed628ffba-de18-4fff-91a8-700f037df119.webp\u003c/span\u003e](\u003cspan class=\"na\"\u003ehttps://dropper.wayl.one/file/d628ffba-de18-4fff-91a8-700f037df119.webp\u003c/span\u003e)\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e![](https://dropper.waylonwalker.com/file/ca30665f-1a15-453e-aab8-221901c7df99.webp)\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e:::\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003cp\u003eWithout \u003ccode\u003emarkata-go\u003c/code\u003e’s web awesome integration, the above would look like:\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"p\"\u003e\u0026lt;\u003c/span\u003e\u003cspan class=\"nt\"\u003escript\u003c/span\u003e \u003cspan class=\"na\"\u003etype\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"s\"\u003e\u0026#34;module\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e\u0026gt;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"kr\"\u003eimport\u003c/span\u003e \u003cspan class=\"s1\"\u003e\u0026#39;https://ka-f.webawesome.com/webawesome@3.6.0/components/comparison/comparison.js\u0026#39;\u003c/span\u003e\u003cspan class=\"p\"\u003e;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"p\"\u003e\u0026lt;/\u003c/span\u003e\u003cspan class=\"nt\"\u003escript\u003c/span\u003e\u003cspan class=\"p\"\u003e\u0026gt;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"p\"\u003e\u0026lt;\u003c/span\u003e\u003cspan class=\"nt\"\u003ewa-comparison\u003c/span\u003e\u003cspan class=\"p\"\u003e\u0026gt;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"p\"\u003e\u0026lt;\u003c/span\u003e\u003cspan class=\"nt\"\u003eimg\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"na\"\u003eslot\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"s\"\u003e\u0026#34;before\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"na\"\u003esrc\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"s\"\u003e\u0026#34;https://dropper.wayl.one/file/d628ffba-de18-4fff-91a8-700f037df119.webp\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"na\"\u003ealt\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"s\"\u003e\u0026#34;Grayscale version of kittens in a basket looking around.\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"p\"\u003e/\u0026gt;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"p\"\u003e\u0026lt;\u003c/span\u003e\u003cspan class=\"nt\"\u003eimg\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"na\"\u003eslot\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"s\"\u003e\u0026#34;after\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"na\"\u003esrc\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"s\"\u003e\u0026#34;https://dropper.waylonwalker.com/file/ca30665f-1a15-453e-aab8-221901c7df99.webp\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"na\"\u003ealt\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"s\"\u003e\u0026#34;Color version of kittens in a basket looking around.\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"p\"\u003e/\u0026gt;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"p\"\u003e\u0026lt;/\u003c/span\u003e\u003cspan class=\"nt\"\u003ewa-comparison\u003c/span\u003e\u003cspan class=\"p\"\u003e\u0026gt;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e",
      "content_text": "\n`markata-go` now has web awesome integration for image compare.  It renders a\nnice web component with a slider to compare two images.\n\n::: wa-comparison\n![d628ffba-de18-4fff-91a8-700f037df119.webp](https://dropper.wayl.one/file/d628ffba-de18-4fff-91a8-700f037df119.webp)\n![](https://dropper.waylonwalker.com/file/ca30665f-1a15-453e-aab8-221901c7df99.webp)\n:::\n\nIt's done with a class wrapper around the image components.\n\n``` md\n::: wa-comparison\n![d628ffba-de18-4fff-91a8-700f037df119.webp](https://dropper.wayl.one/file/d628ffba-de18-4fff-91a8-700f037df119.webp)\n![](https://dropper.waylonwalker.com/file/ca30665f-1a15-453e-aab8-221901c7df99.webp)\n:::\n```\n\nWithout `markata-go`'s web awesome integration, the above would look like:\n\n``` html\n\u003cscript type=\"module\"\u003e\n  import 'https://ka-f.webawesome.com/webawesome@3.6.0/components/comparison/comparison.js';\n\u003c/script\u003e\n\n\u003cwa-comparison\u003e\n  \u003cimg\n    slot=\"before\"\n    src=\"https://dropper.wayl.one/file/d628ffba-de18-4fff-91a8-700f037df119.webp\"\n    alt=\"Grayscale version of kittens in a basket looking around.\"\n  /\u003e\n  \u003cimg\n    slot=\"after\"\n    src=\"https://dropper.waylonwalker.com/file/ca30665f-1a15-453e-aab8-221901c7df99.webp\"\n    alt=\"Color version of kittens in a basket looking around.\"\n  /\u003e\n\u003c/wa-comparison\u003e\n```\n\n",
      "summary": "now has web awesome integration for image compare. It renders a nice web component with a slider to compare two images.",
      "date_published": "2026-05-01T07:40:44Z",
      "date_modified": "2026-05-01T07:40:44Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "dev",
        "webdev"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/testing-copilot-model-flag/",
      "url": "https://go.waylonwalker.com/testing-copilot-model-flag/",
      "title": "testing copilot model flag",
      "content_html": "\u003cp\u003eToday I found a way to test model syntax, cause the clankers always get the\nexact model name that copilot wants wrong.\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003ecopilot --model claude-sonnet-4.5 -p \u003cspan class=\"s2\"\u003e\u0026#34;Reply with OK\u0026#34;\u003c/span\u003e --allow-all --no-ask-user -s\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003ecopilot --model gpt-5.4 -p \u003cspan class=\"s2\"\u003e\u0026#34;Reply with OK\u0026#34;\u003c/span\u003e --allow-all --no-ask-user -s\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e",
      "content_text": "\nToday I found a way to test model syntax, cause the clankers always get the\nexact model name that copilot wants wrong.\n\n``` bash\ncopilot --model claude-sonnet-4.5 -p \"Reply with OK\" --allow-all --no-ask-user -s\ncopilot --model gpt-5.4 -p \"Reply with OK\" --allow-all --no-ask-user -s\n```\n",
      "summary": "Today I found a way to test model syntax, cause the clankers always get the exact model name that copilot wants wrong.",
      "date_published": "2026-04-29T11:05:39Z",
      "date_modified": "2026-04-29T11:05:39Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "cli"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/move-zmk-keyboard-to-new-bluetooth-adapter/",
      "url": "https://go.waylonwalker.com/move-zmk-keyboard-to-new-bluetooth-adapter/",
      "title": "move zmk keyboard to new bluetooth adapter",
      "content_html": "\u003cp\u003eI’ve been having issue with my keyboard disconnecting to my main desktop for\nawhile.  Today I got a cheap bluetooh dongle in and am giving it a run this\nweek to see how things go.  The first step was to move it to the new adapter.\nI’ve never had multiple adapters installed so this was a new to me process.\u003c/p\u003e\n\u003cp\u003eI was able to do it all with the same keyboard, It did require some juggling\nbetween usb and bluetooth modes pluging and unplugging, two keyboards would be\nsimpler to reason about.\u003c/p\u003e\n\u003cp\u003eI can’t be bothered to change my brain to think about this machine on a\ndifferent zmk profile it is of absolute importance for it to remain on the same\nprofile, otherwise this would be a simple bind to another empty profile.\u003c/p\u003e\n\u003cdiv class=\"admonition note\"\u003e\n\u003cp class=\"admonition-title\"\u003eWhy not use a cable on desktop?\u003c/p\u003e\n\u003cp\u003eI dont mind cable, and have used one on this setup for years, but I have\nactually been picking up and moving this keyboard and using it with\ndifferent devices.\u003c/p\u003e\n\u003cp\u003eI’ve got a big battery and performace cranked up, unless my machine is\nunder load I do not notice any key lag.\u003c/p\u003e\n\u003c/div\u003e\n\u003cp\u003eI did it with bluetoothctl, I’m sure it could have been done with a gui like\n\u003ccode\u003eblueberry\u003c/code\u003e or \u003ccode\u003eblueman\u003c/code\u003e.\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003ebluetoothctl\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e# list adapters\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003elist\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"k\"\u003eselect\u003c/span\u003e \u0026lt;old-adapter\u0026gt;\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003edevices\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e# fin the MAC address of the device 42BLOCK\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eremove \u0026lt;42BLOCK_MAC\u0026gt;\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003cp\u003eNow I plugged into usb. And \u003cstrong\u003eimportantly\u003c/strong\u003e cleared out the zmk profile.  If\nyou do not clear the profile your board does not go into pairing mode.\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003ebluetoothctl\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e# switch adapters\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"k\"\u003eselect\u003c/span\u003e \u0026lt;new-adapter\u0026gt;\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003epower on\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eagent on\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003edefault-agent\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003escan on\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003ePut 42Block in pairing mode, \u003cspan class=\"k\"\u003ethen\u003c/span\u003e:\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003epair \u0026lt;42BLOCK_MAC\u0026gt;\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003etrust \u0026lt;42BLOCK_MAC\u0026gt;\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003cp\u003eAt this pint I saw this show up in the logs, I think there was some masking\nissues or something in zmk, output kept going out usb no matter what so I\ndisconnected the keyboard and typed the passkey in, and it worked.\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"o\"\u003e[\u003c/span\u003eagent\u003cspan class=\"o\"\u003e]\u003c/span\u003e Passkey: \u003cspan class=\"m\"\u003e540044\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003cp\u003eBoom, it just started working right away.\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003ebluetoothctl\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003econnect \u0026lt;42BLOCK_MAC\u0026gt;\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003einfo \u0026lt;42BLOCK_MAC\u0026gt;\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003escan off\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nb\"\u003eexit\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e",
      "content_text": "\nI've been having issue with my keyboard disconnecting to my main desktop for\nawhile.  Today I got a cheap bluetooh dongle in and am giving it a run this\nweek to see how things go.  The first step was to move it to the new adapter.\nI've never had multiple adapters installed so this was a new to me process.\n\nI was able to do it all with the same keyboard, It did require some juggling\nbetween usb and bluetooth modes pluging and unplugging, two keyboards would be\nsimpler to reason about.\n\nI can't be bothered to change my brain to think about this machine on a\ndifferent zmk profile it is of absolute importance for it to remain on the same\nprofile, otherwise this would be a simple bind to another empty profile.\n\n!!! note \"Why not use a cable on desktop?\"\n\n    I dont mind cable, and have used one on this setup for years, but I have\n    actually been picking up and moving this keyboard and using it with\n    different devices.\n\n    I've got a big battery and performace cranked up, unless my machine is\n    under load I do not notice any key lag.\n\nI did it with bluetoothctl, I'm sure it could have been done with a gui like\n`blueberry` or `blueman`.\n\n``` bash\nbluetoothctl\n# list adapters\nlist\nselect \u003cold-adapter\u003e\ndevices\n# fin the MAC address of the device 42BLOCK\nremove \u003c42BLOCK_MAC\u003e\n```\n\nNow I plugged into usb. And **importantly** cleared out the zmk profile.  If\nyou do not clear the profile your board does not go into pairing mode.\n\n``` bash\nbluetoothctl\n# switch adapters\nselect \u003cnew-adapter\u003e\npower on\nagent on\ndefault-agent\nscan on\nPut 42Block in pairing mode, then:\npair \u003c42BLOCK_MAC\u003e\ntrust \u003c42BLOCK_MAC\u003e\n```\n\nAt this pint I saw this show up in the logs, I think there was some masking\nissues or something in zmk, output kept going out usb no matter what so I\ndisconnected the keyboard and typed the passkey in, and it worked.\n\n``` bash\n[agent] Passkey: 540044\n```\n\nBoom, it just started working right away.\n\n``` bash\nbluetoothctl\nconnect \u003c42BLOCK_MAC\u003e\ninfo \u003c42BLOCK_MAC\u003e\nscan off\nexit\n```\n",
      "summary": "I've been having issue with my keyboard disconnecting to my main desktop for awhile. Today I got a cheap bluetooh dongle in and am giving it a run this week...",
      "date_published": "2026-03-23T17:59:59Z",
      "date_modified": "2026-03-23T17:59:59Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "keeb",
        "zmk"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/dot-dockerenv/",
      "url": "https://go.waylonwalker.com/dot-dockerenv/",
      "title": "dot dockerenv",
      "content_html": "\u003cp\u003eToday I learned that docker creates an empty \u003ccode\u003e/.dockerenv\u003c/code\u003e file to indicate that\nyou are running in a docker container.  Other runtimes like podman commonly use\n\u003ccode\u003e/run/.containerenv\u003c/code\u003e.  kubernetes uses neither of these, the most common way to\ndetect if you are running in kubernetes is to check for the presence of the\n\u003ccode\u003eKUBERNETES_SERVICE_HOST\u003c/code\u003e environment variable.  There will also be a directory\nat \u003ccode\u003e/var/run/secrets/kubernetes.io/serviceaccount\u003c/code\u003e that contains the service\naccount credentials if you are running in kubernetes.\u003c/p\u003e\n",
      "content_text": "\nToday I learned that docker creates an empty `/.dockerenv` file to indicate that\nyou are running in a docker container.  Other runtimes like podman commonly use\n`/run/.containerenv`.  kubernetes uses neither of these, the most common way to\ndetect if you are running in kubernetes is to check for the presence of the\n`KUBERNETES_SERVICE_HOST` environment variable.  There will also be a directory\nat `/var/run/secrets/kubernetes.io/serviceaccount` that contains the service\naccount credentials if you are running in kubernetes.\n\n",
      "summary": "Today I learned that docker creates an empty file to indicate that you are running in a docker container. Other runtimes like podman commonly use ....",
      "date_published": "2026-03-18T10:07:16Z",
      "date_modified": "2026-03-18T10:07:16Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "containers",
        "docker",
        "kubernetes"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/gh-do-i-have-a-pr/",
      "url": "https://go.waylonwalker.com/gh-do-i-have-a-pr/",
      "title": "gh do I have a pr",
      "content_html": "\u003cp\u003eIn the age of agents sometimes work gets done on so many different worktrees\nand branches its hard to tell if there is already a PR or any of them or not,\nthe great \u003ccode\u003egh\u003c/code\u003e cli has us covered.\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003egh pr list --head fix/markata-go-connections-graph\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e",
      "content_text": "\nIn the age of agents sometimes work gets done on so many different worktrees\nand branches its hard to tell if there is already a PR or any of them or not,\nthe great `gh` cli has us covered.\n\n``` bash\ngh pr list --head fix/markata-go-connections-graph\n```\n",
      "summary": "In the age of agents sometimes work gets done on so many different worktrees and branches its hard to tell if there is already a PR or any of them or not,...",
      "date_published": "2026-03-02T08:47:44Z",
      "date_modified": "2026-03-02T08:47:44Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "cli"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/double-gutter/",
      "url": "https://go.waylonwalker.com/double-gutter/",
      "title": "double gutter",
      "content_html": "\u003cp\u003eI keep forgetting about the double gutter problem with nested containers.  When\nyou put padding on a parent and the child also has padding, you get twice the\nspacing you wanted.\u003c/p\u003e\n\u003ch2 id=\"the-problem\"\u003eThe Problem \u003ca href=\"#the-problem\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"p\"\u003e.\u003c/span\u003e\u003cspan class=\"nc\"\u003econtainer\u003c/span\u003e \u003cspan class=\"p\"\u003e{\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"k\"\u003epadding\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"mi\"\u003e2\u003c/span\u003e\u003cspan class=\"kt\"\u003erem\u003c/span\u003e\u003cspan class=\"p\"\u003e;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"p\"\u003e}\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"p\"\u003e.\u003c/span\u003e\u003cspan class=\"nc\"\u003echild\u003c/span\u003e \u003cspan class=\"p\"\u003e{\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"k\"\u003epadding\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"mi\"\u003e2\u003c/span\u003e\u003cspan class=\"kt\"\u003erem\u003c/span\u003e\u003cspan class=\"p\"\u003e;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"p\"\u003e}\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003cp\u003eNow your content is 4rem from the edge.  Not what I meant at all.\u003c/p\u003e\n\u003ch2 id=\"the-fix\"\u003eThe Fix \u003ca href=\"#the-fix\" class=\"heading-anchor\"\u003e#\u003c/a\u003e\u003c/h2\u003e\n\u003cp\u003eEither remove padding from the parent or use \u003ccode\u003ebox-sizing: border-box\u003c/code\u003e and plan\nfor it.  I usually just drop the parent padding when I realize what I have done.\u003c/p\u003e\n",
      "content_text": "\nI keep forgetting about the double gutter problem with nested containers.  When\nyou put padding on a parent and the child also has padding, you get twice the\nspacing you wanted.\n\n## The Problem\n\n```css\n.container {\n  padding: 2rem;\n}\n\n.child {\n  padding: 2rem;\n}\n```\n\nNow your content is 4rem from the edge.  Not what I meant at all.\n\n## The Fix\n\nEither remove padding from the parent or use `box-sizing: border-box` and plan\nfor it.  I usually just drop the parent padding when I realize what I have done.",
      "summary": "I keep forgetting about the double gutter problem with nested containers. When you put padding on a parent and the child also has padding, you get twice the...",
      "date_published": "2026-02-14T09:12:42Z",
      "date_modified": "2026-02-14T09:12:42Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "dev",
        "webdev"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/diff-kubernetes-manifest-with-cluster/",
      "url": "https://go.waylonwalker.com/diff-kubernetes-manifest-with-cluster/",
      "title": "diff kubernetes manifest with cluster",
      "content_html": "\u003cp\u003eLike a dufus this morning I did a hard reset on a \u003ca href=\"/glossary/git/\" class=\"glossary-term\" title=\"Git is a version control system for tracking changes in source code during software development. In the beginning there were many, some were licensed. As...\"\u003egit\u003c/a\u003e repo for getting I was\nworking on a manifest for.  You see I generally use argo, but occasionally I\nhave no idea what I am doing or want yet and I start raw doggin it, fully aware\nthat I’m going to just nuke this namespace before getting it into a proper\nargocd.\u003c/p\u003e\n\u003cp\u003eI was overjoyed when I found out that you can diff your manifests with live\nproduction using the \u003ccode\u003ekubectl diff\u003c/code\u003e command.  It uses standard diff so you can\nbring all your fancy diff viewers you like.\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e# regular manifest\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003ekubectl diff -f k8s/shots -n shot\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e# kustomize\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003ekubectl diff -k k8s -n go-waylonwalker-com\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e# using a fancy diff viewer\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003ekubectl diff -f k8s/shots -n shot \u003cspan class=\"p\"\u003e|\u003c/span\u003e delta\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e# using an even fancier diff viewer\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e# pinkies out for this one\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003ekubectl diff -f k8s/shots -n shot \u003cspan class=\"p\"\u003e|\u003c/span\u003e delta --diff-so-fancy\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003cp\u003eNow I can get those changes back that I thought I lost, and apply updates with\nconfidence knowing what is about to change.\u003c/p\u003e\n",
      "content_text": "\nLike a dufus this morning I did a hard reset on a git repo for getting I was\nworking on a manifest for.  You see I generally use argo, but occasionally I\nhave no idea what I am doing or want yet and I start raw doggin it, fully aware\nthat I'm going to just nuke this namespace before getting it into a proper\nargocd.\n\nI was overjoyed when I found out that you can diff your manifests with live\nproduction using the `kubectl diff` command.  It uses standard diff so you can\nbring all your fancy diff viewers you like.\n\n``` bash\n# regular manifest\nkubectl diff -f k8s/shots -n shot\n# kustomize\nkubectl diff -k k8s -n go-waylonwalker-com\n# using a fancy diff viewer\nkubectl diff -f k8s/shots -n shot | delta\n# using an even fancier diff viewer\n# pinkies out for this one\nkubectl diff -f k8s/shots -n shot | delta --diff-so-fancy\n```\n\nNow I can get those changes back that I thought I lost, and apply updates with\nconfidence knowing what is about to change.\n",
      "summary": "Like a dufus this morning I did a hard reset on a git repo for getting I was working on a manifest for. You see I generally use argo, but occasionally I have...",
      "date_published": "2026-02-05T09:37:39Z",
      "date_modified": "2026-02-05T09:37:39Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "containers",
        "kubernetes"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/format-markdown-with-mdformat/",
      "url": "https://go.waylonwalker.com/format-markdown-with-mdformat/",
      "title": "format markdown with mdformat",
      "content_html": "\u003cp\u003eI really wish I would have got this right a few years ago. Theres a couple of\nflags I had to use to get mdformat to do hard wraps at 80 characters and not\nwreck tables. This mix of flags and plugins is workign really well for me so\nfar.\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003emdfmt\u003cspan class=\"o\"\u003e()\u003c/span\u003e \u003cspan class=\"o\"\u003e{\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    uvx \u003cspan class=\"se\"\u003e\\\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        --with \u003cspan class=\"s2\"\u003e\u0026#34;mdformat-ruff\u0026#34;\u003c/span\u003e \u003cspan class=\"se\"\u003e\\\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        --with \u003cspan class=\"s2\"\u003e\u0026#34;mdformat-beautysh\u0026#34;\u003c/span\u003e \u003cspan class=\"se\"\u003e\\\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        --with \u003cspan class=\"s2\"\u003e\u0026#34;mdformat-web\u0026#34;\u003c/span\u003e \u003cspan class=\"se\"\u003e\\\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        --with \u003cspan class=\"s2\"\u003e\u0026#34;mdformat-config\u0026#34;\u003c/span\u003e \u003cspan class=\"se\"\u003e\\\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        --with \u003cspan class=\"s2\"\u003e\u0026#34;mdformat-gfm\u0026#34;\u003c/span\u003e \u003cspan class=\"se\"\u003e\\\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        --with \u003cspan class=\"s2\"\u003e\u0026#34;mdformat-front-matters\u0026#34;\u003c/span\u003e \u003cspan class=\"se\"\u003e\\\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        --with \u003cspan class=\"s2\"\u003e\u0026#34;mdformat-wikilink\u0026#34;\u003c/span\u003e \u003cspan class=\"se\"\u003e\\\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        --with \u003cspan class=\"s2\"\u003e\u0026#34;mdformat-simple-breaks\u0026#34;\u003c/span\u003e \u003cspan class=\"se\"\u003e\\\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        mdformat \u003cspan class=\"se\"\u003e\\\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        --wrap \u003cspan class=\"m\"\u003e80\u003c/span\u003e \u003cspan class=\"se\"\u003e\\\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        --end-of-line lf \u003cspan class=\"se\"\u003e\\\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        --codeformatters python \u003cspan class=\"se\"\u003e\\\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        --codeformatters bash \u003cspan class=\"se\"\u003e\\\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        \u003cspan class=\"s2\"\u003e\u0026#34;\u003c/span\u003e\u003cspan class=\"nv\"\u003e$@\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"o\"\u003e}\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003cp\u003eAnd as pre-commmit.\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"l\"\u003erepos\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e  \u003c/span\u003e- \u003cspan class=\"nt\"\u003erepo\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"w\"\u003e \u003c/span\u003e\u003cspan class=\"l\"\u003ehttps://github.com/hukkin/mdformat\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e    \u003c/span\u003e\u003cspan class=\"nt\"\u003erev\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"w\"\u003e \u003c/span\u003e\u003cspan class=\"m\"\u003e1.0.0\u003c/span\u003e\u003cspan class=\"w\"\u003e  \u003c/span\u003e\u003cspan class=\"c\"\u003e# pin to the version you want\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e    \u003c/span\u003e\u003cspan class=\"nt\"\u003ehooks\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e      \u003c/span\u003e- \u003cspan class=\"nt\"\u003eid\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"w\"\u003e \u003c/span\u003e\u003cspan class=\"l\"\u003emdformat\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e        \u003c/span\u003e\u003cspan class=\"nt\"\u003eargs\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e          \u003c/span\u003e- --\u003cspan class=\"l\"\u003ewrap\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e          \u003c/span\u003e- \u003cspan class=\"s2\"\u003e\u0026#34;80\u0026#34;\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e          \u003c/span\u003e- --\u003cspan class=\"l\"\u003eend-of-line\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e          \u003c/span\u003e- \u003cspan class=\"l\"\u003elf\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e          \u003c/span\u003e- --\u003cspan class=\"l\"\u003ecodeformatters\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e          \u003c/span\u003e- \u003cspan class=\"l\"\u003epython\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e          \u003c/span\u003e- --\u003cspan class=\"l\"\u003ecodeformatters\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e          \u003c/span\u003e- \u003cspan class=\"l\"\u003ebash\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e        \u003c/span\u003e\u003cspan class=\"nt\"\u003eadditional_dependencies\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e          \u003c/span\u003e- \u003cspan class=\"l\"\u003emdformat-ruff\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e          \u003c/span\u003e- \u003cspan class=\"l\"\u003emdformat-beautysh\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e          \u003c/span\u003e- \u003cspan class=\"l\"\u003emdformat-web\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e          \u003c/span\u003e- \u003cspan class=\"l\"\u003emdformat-config\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e          \u003c/span\u003e- \u003cspan class=\"l\"\u003emdformat-gfm\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e          \u003c/span\u003e- \u003cspan class=\"l\"\u003emdformat-front-matters\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e          \u003c/span\u003e- \u003cspan class=\"l\"\u003emdformat-wikilink\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e          \u003c/span\u003e- \u003cspan class=\"l\"\u003emdformat-simple-breaks\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e",
      "content_text": "\nI really wish I would have got this right a few years ago. Theres a couple of\nflags I had to use to get mdformat to do hard wraps at 80 characters and not\nwreck tables. This mix of flags and plugins is workign really well for me so\nfar.\n\n```bash\nmdfmt() {\n    uvx \\\n        --with \"mdformat-ruff\" \\\n        --with \"mdformat-beautysh\" \\\n        --with \"mdformat-web\" \\\n        --with \"mdformat-config\" \\\n        --with \"mdformat-gfm\" \\\n        --with \"mdformat-front-matters\" \\\n        --with \"mdformat-wikilink\" \\\n        --with \"mdformat-simple-breaks\" \\\n        mdformat \\\n        --wrap 80 \\\n        --end-of-line lf \\\n        --codeformatters python \\\n        --codeformatters bash \\\n        \"$@\"\n}\n```\n\nAnd as pre-commmit.\n\n```yaml\nrepos\n  - repo: https://github.com/hukkin/mdformat\n    rev: 1.0.0  # pin to the version you want\n    hooks:\n      - id: mdformat\n        args:\n          - --wrap\n          - \"80\"\n          - --end-of-line\n          - lf\n          - --codeformatters\n          - python\n          - --codeformatters\n          - bash\n        additional_dependencies:\n          - mdformat-ruff\n          - mdformat-beautysh\n          - mdformat-web\n          - mdformat-config\n          - mdformat-gfm\n          - mdformat-front-matters\n          - mdformat-wikilink\n          - mdformat-simple-breaks\n```\n",
      "summary": "I really wish I would have got this right a few years ago. Theres a couple of flags I had to use to get mdformat to do hard wraps at 80 characters and not...",
      "date_published": "2026-01-19T20:41:14Z",
      "date_modified": "2026-01-19T20:41:14Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "python"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/opencode-variants/",
      "url": "https://go.waylonwalker.com/opencode-variants/",
      "title": "opencode variants",
      "content_html": "\u003cp\u003eOpencode is changing on the daily right now, today I noticed the word \u003ccode\u003elow\u003c/code\u003e pop\nup in Orange text in my opencode window.  Looking into this they are exposing\n\u003ca href=\"https://opencode.ai/docs/models/#variants\" style=\"--favicon-url: url(\u0026#39;/assets/markata/link-avatars/opencode.ai.ico\u0026#39;);\" data-favicon=\"/assets/markata/link-avatars/opencode.ai.ico\" class=\"has-avatar  has-avatar-before\"\u003evariants\u003c/a\u003e to the user.  This allows\nyou to change between fast or slow and thinking, the later taking more time to\nprepare before doing an action.\u003c/p\u003e\n\u003cfigure\u003e\n\u003ca href=\"https://dropper.waylonwalker.com/file/0b6bfe5e-41b0-4e44-8c5a-ff88739a770e.mp4\" class=\"glightbox-link\" aria-label=\"Swapping Variants in opencode\"\u003e\u003cvideo autoplay loop muted playsinline controls preload=\"metadata\" class=\"md-video\" poster=\"https://dropper.waylonwalker.com/file/0b6bfe5e-41b0-4e44-8c5a-ff88739a770e.webp?h=675\u0026w=1200\"\u003e\u003csource src=\"https://dropper.waylonwalker.com/file/0b6bfe5e-41b0-4e44-8c5a-ff88739a770e.mp4\" type=\"video/mp4\"\u003eSwapping Variants in opencode\u003c/video\u003e\u003c/a\u003e\n\u003c/figure\u003e\n\u003cp\u003eIt looks like this toggle may have been here for awhile and I’m just now\ndiscovering it. Potentially because its a new feature of the free Zen provider.\u003c/p\u003e\n\u003cblockquote\u003e\n\u003cp\u003eVariants\nMany models support multiple variants with different configurations. OpenCode ships with built-in default variants for popular providers.\u003c/p\u003e\n\u003cp\u003eBuilt-in variants\nOpenCode ships with default variants for many providers:\u003c/p\u003e\n\u003cp\u003eAnthropic:\u003c/p\u003e\n\u003cp\u003ehigh - High thinking budget (default)\nmax - Maximum thinking budget\nOpenAI:\u003c/p\u003e\n\u003cp\u003eVaries by model but roughly:\u003c/p\u003e\n\u003cp\u003enone - No reasoning\nminimal - Minimal reasoning effort\nlow - Low reasoning effort\nmedium - Medium reasoning effort\nhigh - High reasoning effort\nxhigh - Extra high reasoning effort\nGoogle:\u003c/p\u003e\n\u003cp\u003elow - Lower effort/token budget\nhigh - Higher effort/token budget\u003c/p\u003e\n\u003c/blockquote\u003e\n",
      "content_text": "\nOpencode is changing on the daily right now, today I noticed the word `low` pop\nup in Orange text in my opencode window.  Looking into this they are exposing\n[variants](https://opencode.ai/docs/models/#variants) to the user.  This allows\nyou to change between fast or slow and thinking, the later taking more time to\nprepare before doing an action.\n\n![Swapping Variants in opencode](https://dropper.waylonwalker.com/file/0b6bfe5e-41b0-4e44-8c5a-ff88739a770e.mp4)\n\nIt looks like this toggle may have been here for awhile and I'm just now\ndiscovering it. Potentially because its a new feature of the free Zen provider.\n\n\u003e Variants\nMany models support multiple variants with different configurations. OpenCode ships with built-in default variants for popular providers.\n\u003e \n\u003e Built-in variants\n\u003e OpenCode ships with default variants for many providers:\n\u003e \n\u003e Anthropic:\n\u003e \n\u003e high - High thinking budget (default)\n\u003e max - Maximum thinking budget\n\u003e OpenAI:\n\u003e \n\u003e Varies by model but roughly:\n\u003e \n\u003e none - No reasoning\n\u003e minimal - Minimal reasoning effort\n\u003e low - Low reasoning effort\n\u003e medium - Medium reasoning effort\n\u003e high - High reasoning effort\n\u003e xhigh - Extra high reasoning effort\n\u003e Google:\n\u003e \n\u003e low - Lower effort/token budget\n\u003e high - Higher effort/token budget\n",
      "summary": "Opencode is changing on the daily right now, today I noticed the word pop up in Orange text in my opencode window. Looking into this they are exposing...",
      "date_published": "2026-01-13T08:53:36Z",
      "date_modified": "2026-01-13T08:53:36Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "ai",
        "llm",
        "opencode"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/opencode-init-prompt/",
      "url": "https://go.waylonwalker.com/opencode-init-prompt/",
      "title": "opencode init prompt",
      "content_html": "\u003cp\u003eThis is opencode’s init prompt.\u003c/p\u003e\n\u003cpre class=\"chroma\"\u003e\u003ccode\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003ePlease analyze this codebase and create an AGENTS.md file containing:\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"k\"\u003e1.\u003c/span\u003e Build/lint/test commands - especially for running a single test\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"k\"\u003e2.\u003c/span\u003e Code style guidelines including imports, formatting, types, naming conventions, error handling, etc.\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eThe file you create will be given to agentic coding agents (such as yourself) that operate in this repository. Make it about 150 lines long.\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eIf there are Cursor rules (in .cursor/rules/ or .cursorrules) or Copilot rules (in .github/copilot-instructions.md), make sure to include them.\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eIf there\u0026#39;s already an AGENTS.md, improve it if it\u0026#39;s located in \u0026lt;dir\u0026gt;\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e",
      "content_text": "\n\nThis is opencode's init prompt.\n\n``` markdown\nPlease analyze this codebase and create an AGENTS.md file containing:\n1. Build/lint/test commands - especially for running a single test\n2. Code style guidelines including imports, formatting, types, naming conventions, error handling, etc.\nThe file you create will be given to agentic coding agents (such as yourself) that operate in this repository. Make it about 150 lines long.\nIf there are Cursor rules (in .cursor/rules/ or .cursorrules) or Copilot rules (in .github/copilot-instructions.md), make sure to include them.\nIf there's already an AGENTS.md, improve it if it's located in \u003cdir\u003e\n```\n",
      "summary": "This is opencode's init prompt.",
      "date_published": "2026-01-09T13:32:12Z",
      "date_modified": "2026-01-09T13:32:12Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "ai",
        "llm"
      ]
    },
    {
      "id": "https://go.waylonwalker.com/til/tpope-vim-speeddating/",
      "url": "https://go.waylonwalker.com/til/tpope-vim-speeddating/",
      "title": "tpope vim-speeddating",
      "content_html": "\u003cp\u003eToday I discovered \u003ca href=\"https://github.com/tpope/vim-speeddating\" style=\"--favicon-url: url(\u0026#39;/assets/markata/link-avatars/github.com.ico\u0026#39;);\" data-favicon=\"/assets/markata/link-avatars/github.com.ico\" class=\"has-avatar  has-avatar-before\"\u003evim-speeddating\u003c/a\u003e\nby tpope.  I’m sure I’ve seen years ago but it did not click for my workflow\nuntil today.  I often go through pictures from my phone for the past few days\nand make \u003ca class=\"wikilink\" data-description=\"All posts with the tag \u0026#34;shots\u0026#34;\" data-title=\"Posts tagged: shots\" href=\"/tags/shots/\" data-preview=\"All posts with the tag \u0026#34;shots\u0026#34;\"\u003ePosts tagged: shots\u003c/a\u003e posts, but I want to date them to about when the image was\ntaken most of the time.  This allows me to quickly bump days up and down using\n\u003ccode\u003ec-a\u003c/code\u003e and \u003ccode\u003ec-x\u003c/code\u003e even around the new year.\u003c/p\u003e\n\u003cfigure\u003e\n\u003ca href=\"https://dropper.waylonwalker.com/file/18c876c3-02ea-4c77-9f62-cdbb1bb759a1.mp4\" class=\"glightbox-link\" aria-label=\"Open image\"\u003e\u003cvideo autoplay loop muted playsinline controls preload=\"metadata\" class=\"md-video\" poster=\"https://dropper.waylonwalker.com/file/18c876c3-02ea-4c77-9f62-cdbb1bb759a1.webp?h=675\u0026w=1200\"\u003e\u003csource src=\"https://dropper.waylonwalker.com/file/18c876c3-02ea-4c77-9f62-cdbb1bb759a1.mp4\" type=\"video/mp4\"\u003eYour browser does not support the video tag.\u003c/video\u003e\u003c/a\u003e\n\u003cfigcaption\u003e\u003cp\u003eSound on, listen to those new switches.\u003c/p\u003e\u003c/figcaption\u003e\u003c/figure\u003e\n",
      "content_text": "\nToday I discovered [vim-speeddating](https://github.com/tpope/vim-speeddating)\nby tpope.  I'm sure I've seen years ago but it did not click for my workflow\nuntil today.  I often go through pictures from my phone for the past few days\nand make \u003ca href=\"/tags/shots/\" class=\"wikilink\" data-title=\"Posts tagged: shots\" data-description=\"All posts with the tag \u0026#34;shots\u0026#34;\"\u003ePosts tagged: shots\u003c/a\u003e posts, but I want to date them to about when the image was\ntaken most of the time.  This allows me to quickly bump days up and down using\n`c-a` and `c-x` even around the new year.\n\n![](https://dropper.waylonwalker.com/file/18c876c3-02ea-4c77-9f62-cdbb1bb759a1.mp4)\n\n\u003e Sound on, listen to those new switches.\n\n\n",
      "summary": "Today I discovered vim-speeddating by tpope. I'm sure I've seen years ago but it did not click for my workflow until today. I often go through pictures from...",
      "date_published": "2026-01-04T16:59:33Z",
      "date_modified": "2026-01-04T16:59:33Z",
      "authors": [
        {
          "name": "Waylon Walker",
          "url": "https://waylonwalker.com",
          "avatar": "/8bitcc.png"
        }
      ],
      "tags": [
        "vim"
      ]
    }
  ]
}