<?xml version="1.0" encoding="utf-8"?>
<?xml-stylesheet href="/atom.xsl" type="text/xsl"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
  <title>mmmeon</title>
  <subtitle>a soft--------neer interested in simple software.</subtitle>
  <link href="https://mmmeon.com/atom.xml" rel="self" />
  <link href="https://mmmeon.com/" />
  <updated>2026-03-14T12:58:14Z</updated>
  <id>https://mmmeon.com/</id>
  <author>
    <name>mmmeon</name>
    <email>si [at] mmmeon [dot] com</email>
  </author>
  <entry>
    <title>lab</title>
    <link href="https://mmmeon.com/lab/" />
    <updated>2026-03-14T12:58:14Z</updated>
    <id>https://mmmeon.com/lab/</id>
    <content type="html">&lt;section&gt;&lt;h1&gt;lab&lt;/h1&gt;&lt;p&gt;&lt;i&gt;web experiments.&lt;/i&gt;&lt;/p&gt;&lt;/section&gt;&lt;div class=&quot;visible-grid&quot;&gt;&lt;figure class=&quot;x2y1&quot;&gt;&lt;figcaption&gt;&lt;a href=&quot;https://mmmeon.com/dtlstbl&quot;&gt;details table&lt;/a&gt;&lt;/figcaption&gt;&lt;div class=&quot;detable&quot;&gt;&lt;div class=&quot;detable-head&quot;&gt;&lt;div&gt;a&lt;/div&gt;&lt;div&gt;b&lt;/div&gt;&lt;div&gt;c&lt;/div&gt;&lt;/div&gt;&lt;details&gt;&lt;div&gt;blah blah&lt;/div&gt;&lt;summary&gt;&lt;div&gt;1&lt;/div&gt;&lt;div&gt;2&lt;/div&gt;&lt;div&gt;three&lt;/div&gt;&lt;/summary&gt;&lt;/details&gt;&lt;details&gt;&lt;div&gt;blah blah&lt;/div&gt;&lt;summary&gt;&lt;div&gt;1&lt;/div&gt;&lt;div&gt;2&lt;/div&gt;&lt;div&gt;three&lt;/div&gt;&lt;div&gt;4&lt;/div&gt;&lt;div&gt;5&lt;/div&gt;&lt;div&gt;6&lt;/div&gt;&lt;div&gt;seven&lt;/div&gt;&lt;/summary&gt;&lt;/details&gt;&lt;details&gt;&lt;div&gt;blah blah&lt;/div&gt;&lt;summary&gt;&lt;div&gt;1&lt;/div&gt;&lt;div&gt;2&lt;/div&gt;&lt;div&gt;5&lt;/div&gt;&lt;div&gt;6&lt;/div&gt;&lt;div&gt;seven&lt;/div&gt;&lt;/summary&gt;&lt;/details&gt;&lt;/div&gt;&lt;div class=&quot;detable&quot;&gt;&lt;/div&gt;&lt;/figure&gt;&lt;figure class=&quot;x2y1&quot;&gt;&lt;figcaption&gt;&lt;a href=&quot;https://mmmeon.com/dtlstbs&quot;&gt;details tabs&lt;/a&gt;&lt;/figcaption&gt;&lt;div class=&quot;detabs&quot;&gt;&lt;details name=&quot;*&quot;&gt;&lt;summary&gt;&quot;hi&quot;&lt;/summary&gt;&quot;bye&quot;&lt;/details&gt;&lt;details name=&quot;*&quot;&gt;&lt;summary&gt;&quot;hi&quot;&lt;/summary&gt;&quot;hi!&quot;&lt;/details&gt;&lt;details open=&quot;&quot; name=&quot;*&quot;&gt;&lt;summary&gt;&quot;hi&quot;&lt;/summary&gt;&quot;what&#39;s up?&quot;&lt;/details&gt;&lt;/div&gt;&lt;/figure&gt;&lt;figure class=&quot;x1y2&quot;&gt;&lt;figcaption&gt;&lt;a href=&quot;https://mmmeon.com/dtlslzymbd&quot;&gt;details lazy embed&lt;/a&gt;&lt;/figcaption&gt;&lt;details class=&quot;dembed&quot;&gt;&lt;summary&gt;&lt;span&gt;click to load &lt;span class=&quot;dembed-title&quot;&gt;are.na&lt;/span&gt; embed&lt;/span&gt;&lt;/summary&gt;&lt;iframe loading=&quot;lazy&quot; src=&quot;https://www.are.na/mmmeon/s-t-o-r-i-e-s/embed&quot;&gt;&lt;/iframe&gt;&lt;/details&gt;&lt;/figure&gt;&lt;figure class=&quot;x2y3&quot;&gt;&lt;figcaption&gt;&lt;a href=&quot;https://mmmeon.com/dtlslzymbd&quot;&gt;details lazy embed with image&lt;/a&gt;&lt;/figcaption&gt;&lt;details class=&quot;dembed&quot;&gt;&lt;summary style=&quot;--ratio: 1; aspect-ratio: 1; background-image: url(https://f4.bcbits.com/img/a3589746424_2.jpg)&quot; class=&quot;dembed-preview&quot;&gt;&lt;/summary&gt;&lt;iframe loading=&quot;lazy&quot; src=&quot;https://bandcamp.com/EmbeddedPlayer/album=3011890020/size=large/bgcol=333333/linkcol=ffffff/minimal=true/transparent=true/&quot; seamless=&quot;&quot;&gt;&amp;lt;a href=&quot;https://godspeedyoublackemperor.bandcamp.com/album/f-a&quot;&amp;gt;F# A# ∞ by Godspeed You Black Emperor!&amp;lt;/a&amp;gt;&lt;/iframe&gt;&lt;/details&gt;&lt;/figure&gt;&lt;/div&gt;</content>
  </entry>
  <entry>
    <title>.files</title>
    <link href="https://mmmeon.com/dotfiles/" />
    <updated>2026-03-14T12:58:14Z</updated>
    <id>https://mmmeon.com/dotfiles/</id>
    <content type="html">&lt;p&gt;my linux configuration files.&lt;/p&gt;&lt;pre class=&quot;language-shell-session&quot;&gt;&lt;code class=&quot;language-shell-session&quot;&gt;&lt;span class=&quot;token output&quot;&gt;} ls $DOTFILES
aerc    do.sh      gitui      kitty     mise     newsboat  README.md  w3m
asdf    fastfetch  gpg        lf        mpv      nsxiv     remind     wezterm
atuin   firefox    gurk       LICENSE   ncmpcpp  opencode  ssh        wm
bin     gamemode   iwctl      mangohud  neomutt  prettier  tmux       zathura
browsh  git        keepassxc  mcphub    neovim   rbw       vale       zsh
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div class=&quot;any-width&quot;&gt;&lt;/div&gt;&lt;h2&gt;lnko, or stow&lt;/h2&gt;&lt;p&gt;there are many ways to manage dotfiles, i previously used a bare git repository that directly placed all files in respective locations. as i regularly switched between devices, i ended up with varied configurations for each device. managing this with branches or multiple repositories in git seemed inconvenient, so i looked for an alternative method.&lt;/p&gt;&lt;p&gt;since then i chose to use &lt;a href=&quot;https://www.gnu.org/software/stow&quot;&gt;gnu stow&lt;/a&gt; to manage my configuration. stow manages symlinks using directories as packages. a directory holds files in a structure mirroring their target destination.&lt;/p&gt;&lt;p&gt;so a configuration file at &lt;code&gt;package/.config/package/config&lt;/code&gt; can be stowed to &lt;code&gt;~&lt;/code&gt;; this file is now accessible at &lt;code&gt;~/.config/package/config&lt;/code&gt;, as expected by the respective program.&lt;/p&gt;&lt;p&gt;i recently found out about &lt;a href=&quot;https://github.com/luanvil/lnko&quot;&gt;lnko&lt;/a&gt;, a &amp;quot;simple stow-like dotfile linker&amp;quot; which i prefer to use. the status and orphan cleanup have been the most useful features for me.&lt;/p&gt;&lt;pre class=&quot;language-shell-session&quot;&gt;&lt;code class=&quot;language-shell-session&quot;&gt;&lt;span class=&quot;token output&quot;&gt;} lnko status
ok           aerc (8 items)
not linked   asdf (2 items)
ok           bin (16 items)
not linked   browsh (1 item)
not linked   curl (1 item)
ok           fastfetch (1 item)
not linked   firefox (1 item)
not linked   gamemode (1 item)
ok           git (1 item)
ok           gitui (2 items)
ok           gpg (6 items)
ok           gurk (1 item)
ok           iwctl (1 item)
ok           keepassxc (1 item)
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div class=&quot;any-width&quot;&gt;&lt;/div&gt;&lt;h2&gt;neovim&lt;a href=&quot;https://git.sr.ht/~mmmeon/dot/tree/main/item/neovim&quot;&gt;.&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;using &lt;a href=&quot;https://github.com/folke/lazy.nvim&quot;&gt;lazy.nvim&lt;/a&gt; as my plugin manager. also a lot of &lt;a href=&quot;https://github.com/echasnovski/mini.nvim&quot;&gt;mini.nvim&lt;/a&gt; modules by &lt;a href=&quot;https://www.youtube.com/watch?v=DkkitZA-wjE&quot;&gt;evgeni chasnovski&lt;/a&gt;. &lt;a href=&quot;https://github.com/epwalsh/obsidian.nvim&quot;&gt;obsidian.nvim&lt;/a&gt; has been great as a heavy obsidian user. my neovim configuration changes frequently, &lt;a href=&quot;https://git.sr.ht/~mmmeon/dot/tree/main/item/neovim/.config/nvim/lua/plugins&quot;&gt;these are the packages i currently use&lt;/a&gt;.&lt;/p&gt;&lt;pre class=&quot;language-shell-session&quot;&gt;&lt;code class=&quot;language-shell-session&quot;&gt;&lt;span class=&quot;token output&quot;&gt;   11
   10 o.showmatch = true
    9 o.scrolloff = 10
    8 o.ignorecase = true
    7 o.clipboard = &quot;unnamedplus&quot;
    6 o.conceallevel = 1
    5 o.termguicolors = false
    4
    3 o.autoindent = true
    2 o.smartindent = true
    1 o.expandtab = false
  17  o.tabstop = 4
    1 o.shiftwidth = 4
    2
    3 o.list = true
    4
    5 o.mouse = &quot;&quot;
    6
    7 wo.number = true
    8 wo.relativenumber = true
    9 wo.wrap = false
   10
 NORMAL  󰀪 5 󰌶 2  settings.lua            utf-8  unix   lua  t  m  54%   17:1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div class=&quot;any-width&quot;&gt;&lt;/div&gt;&lt;p&gt;i also configured neovim to use the terminal colors by default. thanks to &lt;a href=&quot;https://github.com/echasnovski/mini.nvim/blob/main/readmes/mini-base16.md&quot;&gt;mini.base16&lt;/a&gt; syntax highlighting and the like work properly.&lt;/p&gt;&lt;h2&gt;fastfetch&lt;a href=&quot;https://git.sr.ht/~mmmeon/dot/tree/main/item/fastfetch&quot;&gt;.&lt;/a&gt;&lt;/h2&gt;&lt;pre class=&quot;language-shell-session&quot;&gt;&lt;code class=&quot;language-shell-session&quot;&gt;&lt;span class=&quot;token output&quot;&gt;} ff
user@test
-------
sh  zsh 5.9
wm  awesome (X11)
hos Laptop 13 (AMD Ryzen 7040Series) (A5)
ker Linux 6.15.9-arch1-1
upt 2 hours, 20 mins
pkg 1065 (pacman)
mem 5.16 GiB / 14.93 GiB (35%)
bat 72% (3 hours, 23 mins remaining) [Discharging]
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;h2&gt;newsboat&lt;a href=&quot;https://git.sr.ht/~mmmeon/dot/tree/main/item/newsboat&quot;&gt;.&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;my rss reader of choice. i&#39;ve updated keybind and macros to have navigation other TUIs that i use. importantly, i&#39;ve added keybinds to open articles in different programs. i find this necessary, since i follow youtube channels and podcasts with rss.&lt;/p&gt;&lt;p&gt;the external &amp;quot;readers&amp;quot; i use include &lt;a href=&quot;https://mpv.io&quot;&gt;mpv&lt;/a&gt;, &lt;a href=&quot;https://w3m.sourceforge.net&quot;&gt;w3m&lt;/a&gt;, &lt;a href=&quot;https://github.com/eafer/rdrview&quot;&gt;rdrview&lt;/a&gt; &amp;amp; &lt;a href=&quot;https://github.com/pasky/speedread&quot;&gt;speedread&lt;/a&gt;.&lt;/p&gt;&lt;pre class=&quot;language-shell-session&quot;&gt;&lt;code class=&quot;language-shell-session&quot;&gt;&lt;span class=&quot;token output&quot;&gt;  18        (0/11) build times
  40        (0/11) geoffrey litt
  47        (0/52) halestrom
  50        (0/27) henry (from online)
  52       (0/108) heydon
  53         (0/3) hold the robot
  60        (0/77) josh comeau
  66       (0/118) maggie appleton
  67        (0/47) manuel moreale
  72         (0/4) mmmeon
  73        (0/61) mu-an&#39;s notes
  74        (0/10) mu-an&#39;s posts
  77        (0/33) nayuki
  79        (0/15) neil panchal
  83        (0/22) nrk
  84         (0/2) oddlama
  96       (0/106) rachelbythebay
 106       (0/645) simon willison
 111        (0/17) svnscha
 112        (0/25) tanner&#39;s site (t0.vc)
 124       (0/101) una kravets online
 131        (0/10) xe iaso
 134        (0/11) yobibyte
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;h2&gt;aerc&lt;a href=&quot;https://git.sr.ht/~mmmeon/dot/tree/main/item/aerc&quot;&gt;.&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;my favourite email client.&lt;/p&gt;&lt;pre class=&quot;language-shell-session&quot;&gt;&lt;code class=&quot;language-shell-session&quot;&gt;&lt;span class=&quot;token output&quot;&gt;si
inbox       (0)                              (empty)
archive   (179)
spam        (0)
sent       (21)
drafts      (3)
trash       (0)
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;h2&gt;tmux&lt;a href=&quot;https://git.sr.ht/~mmmeon/dot/tree/main/item/tmux&quot;&gt;.&lt;/a&gt;&lt;/h2&gt;&lt;pre class=&quot;language-shell-session&quot;&gt;&lt;code class=&quot;language-shell-session&quot;&gt;&lt;span class=&quot;token output&quot;&gt;(0) + mail: 1 windows
(1) + notes: 1 windows
(2) + mmmeon: 3 windows (attached)
(3) + atm: 3 windows
(4) + repos: 1 windows
(5) + feeds: 1 windows
.
┌ mmmeon (sort: index) ────────────────────────────────────────────────────────┐
│ } npm run s             │&gt;   &gt;   ...collectionsAp│    3                      │
│                         │&gt;   ]);                 │    2 # stow               │
│ &gt; s                     │&gt;   eleventyConfig.addFi│    1                      │
│ &gt; npx --node-options=&#39;--│&gt;   &gt;   const date = new│E 30  there are many ways  │
│ iet --in┌───────┐       │&gt;   &gt; ┌──────────┐entDat│W   1 i ┌────────┐ used a  │
│         │ 1:npm │       │&gt;   &gt; │ 2:[tmux] │etYear│    2 as│ 3:nvim │ly switc │
│ [11ty] C└───────┘rote 18│&gt;   &gt; └──────────┘ date.│    3 i └────────┘ith vari │
│ [11ty] Watching…        │&gt;   &gt;   &gt;   &gt;   timeZone│W   4 managing this with b │
│ [11ty] Server at http://│&gt;   &gt;   &gt;   &gt;   year: &quot;n│    5 so i looked for an a │
│                         │&gt;   &gt;   &gt;   });         │    6                      │
└──────────────────────────────────────────────────────────────────────────────┘
 1) npm   2) tree-mode) [tmux]   3) nvim                              user@test
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div class=&quot;any-width&quot;&gt;&lt;/div&gt;&lt;h2&gt;mpv&lt;a href=&quot;https://git.sr.ht/~mmmeon/dot/tree/main/item/mpv&quot;&gt;.&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;mpv is the best video player i&#39;ve ever used. minimal, highly configurable, open source and a rich plugin ecosystem.&lt;/p&gt;&lt;h2&gt;awesomewm&lt;a href=&quot;https://git.sr.ht/~mmmeon/whi&quot;&gt;.&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;core part of my computing experience, i use awesomewm on all of my personal computers. &lt;a href=&quot;https://mmmeon.com/awm&quot;&gt;i have a separate post about it.&lt;/a&gt;&lt;/p&gt;</content>
  </entry>
  <entry>
    <title>colophon</title>
    <link href="https://mmmeon.com/colophon/" />
    <updated>2026-03-14T12:58:14Z</updated>
    <id>https://mmmeon.com/colophon/</id>
    <content type="html">&lt;p&gt;behind this site.&lt;/p&gt;&lt;h2&gt;tools used&lt;/h2&gt;&lt;ul&gt;&lt;li&gt;&lt;a href=&quot;https://www.11ty.dev&quot;&gt;11ty&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://github.com/11ty/webc&quot;&gt;webc&lt;/a&gt;&lt;/li&gt;&lt;li&gt;markdown&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://sass-lang.com&quot;&gt;sass&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://openstories.fyi&quot;&gt;openstories&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://are.na&quot;&gt;are.na&lt;/a&gt;&#39;s &lt;a href=&quot;https://www.are.na/developers/explore&quot;&gt;api&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;h2&gt;inspiration&lt;/h2&gt;&lt;p&gt;&lt;a href=&quot;https://gemmacope.land&quot;&gt;gemma copeland&lt;/a&gt; has a nice display of their are.na channels. her site is open source and built with 11ty, so i took the source to experiment with how i&#39;d do something similar here. ended up handwriting my own are.na integration. can&#39;t say it looks nicer than hers.&lt;/p&gt;&lt;p&gt;&lt;a href=&quot;https://muan.co&quot;&gt;mu-an chiou&lt;/a&gt;&#39;s site is the first (and only) place i&#39;ve seen openstories. although i decided to do something similar, turns out my goal breaks the spec in a few ways.&lt;/p&gt;&lt;p&gt;i took &lt;a href=&quot;https://nrk.neocities.org&quot;&gt;nrk&lt;/a&gt;&#39;s email styling after spam led me to remove my mailto link.&lt;/p&gt;&lt;p&gt;the &lt;a href=&quot;https://slashpages.net&quot;&gt;slashpages&lt;/a&gt; directory informed me of &lt;a href=&quot;https://aboutideasnow.com&quot;&gt;now&lt;/a&gt;, &lt;a href=&quot;https://slashai.page&quot;&gt;ai&lt;/a&gt;, &lt;a href=&quot;https://uses.tech&quot;&gt;uses&lt;/a&gt;, &lt;a href=&quot;https://bukmark.club&quot;&gt;links&lt;/a&gt; and others.&lt;/p&gt;&lt;p&gt;&lt;a href=&quot;https://linusrogge.com&quot;&gt;linus rogge&lt;/a&gt;&#39;s &lt;a href=&quot;https://linusrogge.com/info&quot;&gt;info&lt;/a&gt; page helped me structure my &lt;a href=&quot;https://mmmeon.com/about&quot;&gt;about&lt;/a&gt; page. their &lt;a href=&quot;https://linusrogge.com/log&quot;&gt;log&lt;/a&gt; page &lt;em&gt;was&lt;/em&gt; nice.&lt;/p&gt;&lt;p&gt;i keep an updated collection of inspiration on are.na.&lt;/p&gt;</content>
  </entry>
  <entry>
    <title>awesomewm</title>
    <link href="https://mmmeon.com/awm/" />
    <updated>2026-03-14T12:58:14Z</updated>
    <id>https://mmmeon.com/awm/</id>
    <content type="html">&lt;p&gt;&lt;a href=&quot;https://awesomewm.org&quot;&gt;awesomewm&lt;/a&gt; is a window manager framework with a widget system. using lua, i have configured awesomewm to a enjoyable and minimally viable desktop environment. my configuration currently supports multiple monitors, spaces, tiling &amp;amp; floating window management, media control, notifications, system tray and some small utilities.&lt;/p&gt;&lt;p&gt;the original plan was to have most elements attached to the menubar at the bottom of the screen, like notifications and control panel.&lt;/p&gt;&lt;p&gt;i&#39;ve since been inspired by the dynamic island on ios. currently changing the menubar to become similarly small, expandable and contextual.&lt;/p&gt;&lt;p&gt;i run this window manager on multiple devices. a desktop, which is often connected to a 27&amp;quot; (2560x1440) display, and a laptop with a 13&amp;quot; (2256x1504) display. i don&#39;t have a steam deck, but that has a 7.4&amp;quot; (1280x800) screen.&lt;/p&gt;</content>
  </entry>
  <entry>
    <title>webc:scoped</title>
    <link href="https://mmmeon.com/scoped/" />
    <updated>2026-03-14T12:58:14Z</updated>
    <id>https://mmmeon.com/scoped/</id>
    <content type="html">&lt;h2&gt;tldr&lt;/h2&gt;&lt;p&gt;Use &lt;code&gt;&amp;lt;style webc:nokeep&amp;gt;&lt;/code&gt; without the &lt;code&gt;:host&lt;/code&gt; selector to keep component tags out of bundled html.&lt;/p&gt;&lt;figure class=&quot;snippet&quot;&gt;&lt;figcaption class=&quot;bg-text&quot;&gt;random-component.webc&lt;/figcaption&gt;&lt;pre class=&quot;language-html&quot;&gt;&lt;code class=&quot;language-html&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;random-component&lt;/span&gt; &lt;span class=&quot;token attr-name&quot;&gt;class&lt;/span&gt;&lt;span class=&quot;token attr-value&quot;&gt;&lt;span class=&quot;token punctuation attr-equals&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;random-component&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;
  &lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;slot&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;fallback&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;/&lt;/span&gt;slot&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;/&lt;/span&gt;random-component&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;style&lt;/span&gt; &lt;span class=&quot;token attr-name&quot;&gt;&lt;span class=&quot;token namespace&quot;&gt;webc:&lt;/span&gt;nokeep&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token style&quot;&gt;&lt;span class=&quot;token language-css&quot;&gt;
  &lt;span class=&quot;token selector&quot;&gt;.random-component&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
      ...
  &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;/&lt;/span&gt;style&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;&lt;h2&gt;background&lt;/h2&gt;&lt;p&gt;scoped components in webc sounds like a good way to create small webpages. the scoped styles and scripts are bundled alongside the component, and are only requested by webpages that use the component. here&#39;s a webc file based on the scoped component example from the &lt;a href=&quot;https://www.11ty.dev/docs/languages/webc/#webcscoped&quot;&gt;documentation&lt;/a&gt;:&lt;/p&gt;&lt;figure class=&quot;snippet&quot;&gt;&lt;figcaption class=&quot;bg-text&quot;&gt;random-component.webc&lt;/figcaption&gt;&lt;pre class=&quot;language-html&quot;&gt;&lt;code class=&quot;language-html&quot;&gt;random
&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;style&lt;/span&gt; &lt;span class=&quot;token attr-name&quot;&gt;&lt;span class=&quot;token namespace&quot;&gt;webc:&lt;/span&gt;scoped&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token style&quot;&gt;&lt;span class=&quot;token language-css&quot;&gt;
  &lt;span class=&quot;token selector&quot;&gt;:host&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
    &lt;span class=&quot;token property&quot;&gt;color&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; blue&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
  &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;/&lt;/span&gt;style&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;&lt;p&gt;that produces something similar to:&lt;/p&gt;&lt;pre class=&quot;language-html&quot;&gt;&lt;code class=&quot;language-html&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;random-component&lt;/span&gt; &lt;span class=&quot;token attr-name&quot;&gt;class&lt;/span&gt;&lt;span class=&quot;token attr-value&quot;&gt;&lt;span class=&quot;token punctuation attr-equals&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;wcl2xedjk&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;random&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;/&lt;/span&gt;random-component&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;since it wasn&#39;t defined with &lt;code&gt;webc:scoped=&amp;quot;desired-name&amp;quot;&lt;/code&gt;, the component&#39;s class was randomly generated. the component tag (&lt;code&gt;&amp;lt;random-component ... &amp;gt;&lt;/code&gt;) remains in the final html, including its attributes. since data is passed to components via attributes, this may result in some &lt;code&gt;attribute=&amp;quot;[object Object]&amp;quot;&lt;/code&gt; in the final html.&lt;/p&gt;&lt;p&gt;to show both of these problems, here&#39;s the markup of my old footer once built.&lt;/p&gt;&lt;pre class=&quot;language-html&quot;&gt;&lt;code class=&quot;language-html&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;footer&lt;/span&gt; &lt;span class=&quot;token attr-name&quot;&gt;class&lt;/span&gt;&lt;span class=&quot;token attr-value&quot;&gt;&lt;span class=&quot;token punctuation attr-equals&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;footer&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt; &lt;span class=&quot;token attr-name&quot;&gt;primaries&lt;/span&gt;&lt;span class=&quot;token attr-value&quot;&gt;&lt;span class=&quot;token punctuation attr-equals&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;[object Object], [object Object], [object Object], [object Object], [object Object], [object Object], [object Object], [object Object]&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt; &lt;span class=&quot;token attr-name&quot;&gt;me&lt;/span&gt;&lt;span class=&quot;token attr-value&quot;&gt;&lt;span class=&quot;token punctuation attr-equals&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;[object Object]&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt; &lt;span class=&quot;token attr-name&quot;&gt;metadata&lt;/span&gt;&lt;span class=&quot;token attr-value&quot;&gt;&lt;span class=&quot;token punctuation attr-equals&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;[object Object]&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt; &lt;span class=&quot;token attr-name&quot;&gt;links&lt;/span&gt;&lt;span class=&quot;token attr-value&quot;&gt;&lt;span class=&quot;token punctuation attr-equals&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;[object Object], [object Object], [object Object], [object Object], [object Object], [object Object], [object Object], [object Object], [object Object], [object Object]&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;
    &lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;footer&lt;/span&gt; &lt;span class=&quot;token attr-name&quot;&gt;class&lt;/span&gt;&lt;span class=&quot;token attr-value&quot;&gt;&lt;span class=&quot;token punctuation attr-equals&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;h-card&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;
        &lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;div&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt; ... &lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;/&lt;/span&gt;div&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;
        &lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;nav&lt;/span&gt; &lt;span class=&quot;token attr-name&quot;&gt;class&lt;/span&gt;&lt;span class=&quot;token attr-value&quot;&gt;&lt;span class=&quot;token punctuation attr-equals&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;sitemap&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt; ... &lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;/&lt;/span&gt;nav&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;
    &lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;/&lt;/span&gt;footer&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;/&lt;/span&gt;footer&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div class=&quot;pre-wrap&quot;&gt;&lt;/div&gt;&lt;h2&gt;resolution&lt;/h2&gt;&lt;p&gt;all of those side effects could be avoided if these were &lt;a href=&quot;https://www.11ty.dev/docs/languages/webc/#html-only-components&quot;&gt;html-only components&lt;/a&gt;. that can simply be done by adding &lt;code&gt;webc:nokeep&lt;/code&gt; to the style and script tags.&lt;/p&gt;&lt;ol&gt;&lt;li&gt;moved the styles to a separate webc file.&lt;/li&gt;&lt;li&gt;replaced the host selector with a class.&lt;/li&gt;&lt;li&gt;imported css with &lt;code&gt;&amp;lt;style webc:is=&amp;quot;css.webc&amp;quot; webc:nokeep&amp;gt;&lt;/code&gt;.&lt;/li&gt;&lt;/ol&gt;&lt;div style=&quot;max-inline-size: var(--measure);&quot;&gt;&lt;detabs&gt;&lt;details name=&quot;code&quot; class=&quot;snippet&quot; open=&quot;&quot;&gt;&lt;summary class=&quot;bg-text&quot;&gt;random-component.webc&lt;/summary&gt;&lt;pre class=&quot;language-html&quot;&gt;&lt;code class=&quot;language-html&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;random-component&lt;/span&gt; &lt;span class=&quot;token attr-name&quot;&gt;class&lt;/span&gt;&lt;span class=&quot;token attr-value&quot;&gt;&lt;span class=&quot;token punctuation attr-equals&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;random-component&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt; ... &lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;/&lt;/span&gt;random-component&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;style&lt;/span&gt; &lt;span class=&quot;token attr-name&quot;&gt;&lt;span class=&quot;token namespace&quot;&gt;webc:&lt;/span&gt;is&lt;/span&gt;&lt;span class=&quot;token attr-value&quot;&gt;&lt;span class=&quot;token punctuation attr-equals&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;css.random-component&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt; &lt;span class=&quot;token attr-name&quot;&gt;&lt;span class=&quot;token namespace&quot;&gt;webc:&lt;/span&gt;nokeep&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token style&quot;&gt;&lt;/span&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;/&lt;/span&gt;style&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/details&gt;&lt;details name=&quot;code&quot; class=&quot;snippet&quot;&gt;&lt;summary class=&quot;bg-text&quot;&gt;css.random-component.webc&lt;/summary&gt;&lt;pre class=&quot;language-html&quot;&gt;&lt;code class=&quot;language-html&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;style&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token style&quot;&gt;&lt;span class=&quot;token language-css&quot;&gt;
  &lt;span class=&quot;token selector&quot;&gt;.random-component&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
      ...
  &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;/&lt;/span&gt;style&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/details&gt;&lt;/detabs&gt;&lt;/div&gt;&lt;h2&gt;single-file&lt;/h2&gt;&lt;p&gt;this can be done in a single file, by adding &lt;code&gt;webc:nokeep&lt;/code&gt; to the style tag.&lt;/p&gt;&lt;h2&gt;trade offs&lt;/h2&gt;&lt;p&gt;well, this isn&#39;t webc:scoped. so no styles deduplication or &lt;code&gt;:host&lt;/code&gt; selector available.&lt;/p&gt;</content>
  </entry>
  <entry>
    <title>obtainium</title>
    <link href="https://mmmeon.com/obtainium/" />
    <updated>2026-03-14T12:58:14Z</updated>
    <id>https://mmmeon.com/obtainium/</id>
    <content type="html">&lt;p&gt;i use &lt;a href=&quot;https://obtainium.imranr.dev&quot;&gt;obtainium&lt;/a&gt; to manage most of the apps installed on my android phone. a table of the apps in my obtainium export is below, and the the file itself at &lt;a href=&quot;https://mmmeon.com/obtainium.json&quot;&gt;obtainium.json&lt;/a&gt;.&lt;/p&gt;&lt;p&gt;&lt;obtainium :sort=&quot;obtainium.apps.sort((a,b) =&gt; a.name.localeCompare(b.name))&quot; :obtainium=&quot;obtainium&quot; :overrides=&quot;overrides&quot;&gt;&lt;/obtainium&gt;&lt;/p&gt;&lt;p&gt;some apps are only distributed through the google play store. these apps are managed by &lt;a href=&quot;https://store.auroraoss.com&quot;&gt;aurora store&lt;/a&gt; on my device.&lt;/p&gt;&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;app&lt;/th&gt;&lt;th&gt;notes&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;&lt;a href=&quot;https://play.google.com/store/apps/details?id=na.are.aredotna&quot;&gt;Are.na&lt;/a&gt;&lt;/td&gt;&lt;td&gt;great for adding media to &lt;a href=&quot;https://are.na&quot;&gt;are.na&lt;/a&gt; with share integration&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;a href=&quot;https://www.symfonium.app&quot;&gt;Symfonium&lt;/a&gt;&lt;/td&gt;&lt;td&gt;the best audio player i&#39;ve ever used on android, works with (open)subsonic &amp;amp; more&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;</content>
  </entry>
  <entry>
    <title>html day</title>
    <link href="https://mmmeon.com/html/" />
    <updated>2026-03-14T12:58:14Z</updated>
    <id>https://mmmeon.com/html/</id>
    <content type="html">&lt;h1&gt;2025&lt;/h1&gt;&lt;p&gt;i participated in &lt;a href=&quot;https://html.energy/html-day/2025&quot;&gt;html day&lt;/a&gt; this year. after seeing its &lt;a href=&quot;https://www.are.na/html-energy/august-2nd-2025-html-days-worldwide&quot;&gt;are.na&lt;/a&gt;, i decided to take the train to&lt;redacted chars=&quot;10&quot;&gt;&lt;/redacted&gt;last minute.&lt;/p&gt;&lt;p&gt;on the way, i decided to build an interface for openstories on this site. the resulting demo page webpage is &lt;a href=&quot;https://mmmeon.com/html/2025&quot;&gt;here&lt;/a&gt; and shown below.&lt;/p&gt;&lt;p&gt;&lt;picture&gt;&lt;source type=&quot;image/avif&quot; srcset=&quot;https://mmmeon.com/html/rw_TKQpEMC-100.avif 100w, https://mmmeon.com/html/rw_TKQpEMC-200.avif 200w, https://mmmeon.com/html/rw_TKQpEMC-400.avif 400w, https://mmmeon.com/html/rw_TKQpEMC-800.avif 800w, https://mmmeon.com/html/rw_TKQpEMC-2560.avif 2560w&quot; sizes=&quot;auto&quot;&gt;&lt;source type=&quot;image/webp&quot; srcset=&quot;https://mmmeon.com/html/rw_TKQpEMC-100.webp 100w, https://mmmeon.com/html/rw_TKQpEMC-200.webp 200w, https://mmmeon.com/html/rw_TKQpEMC-400.webp 400w, https://mmmeon.com/html/rw_TKQpEMC-800.webp 800w, https://mmmeon.com/html/rw_TKQpEMC-2560.webp 2560w&quot; sizes=&quot;auto&quot;&gt;&lt;img loading=&quot;lazy&quot; decoding=&quot;async&quot; src=&quot;https://mmmeon.com/html/rw_TKQpEMC-100.jpeg&quot; alt=&quot;screenshot of my html day 2025 webpage.&quot; width=&quot;2560&quot; height=&quot;1440&quot; srcset=&quot;https://mmmeon.com/html/rw_TKQpEMC-100.jpeg 100w, https://mmmeon.com/html/rw_TKQpEMC-200.jpeg 200w, https://mmmeon.com/html/rw_TKQpEMC-400.jpeg 400w, https://mmmeon.com/html/rw_TKQpEMC-800.jpeg 800w, https://mmmeon.com/html/rw_TKQpEMC-2560.jpeg 2560w&quot; sizes=&quot;auto&quot;&gt;&lt;/picture&gt;&lt;/p&gt;&lt;div class=&quot;invert light&quot;&gt;&lt;/div&gt;&lt;p&gt;now to get this configured with openstories and 11ty...&lt;/p&gt;</content>
  </entry>
  <entry>
    <title>gpg, ssh &amp; git</title>
    <link href="https://mmmeon.com/gpg-ssh-git/" />
    <updated>2026-03-14T12:58:14Z</updated>
    <id>https://mmmeon.com/gpg-ssh-git/</id>
    <content type="html">&lt;figure class=&quot;snippet&quot;&gt;```shell-session ┌──────────────────────────────────────────────────────┐ │ Please enter the passphrase for the ssh key │ │ SHA256:AbCd3FgHiJ8Lm84nOpQrStuVwxYz1234567890aBceL │ │ │ │ │ │ Passphrase: ________________________________________ │ │ │ │&lt;ok&gt;&lt;cancel&gt;│ └──────────────────────────────────────────────────────┘ ```&lt;div class=&quot;any-width&quot;&gt;&lt;/div&gt;&lt;/cancel&gt;&lt;/ok&gt;&lt;/figure&gt;&lt;h2&gt;the ugh&lt;/h2&gt;&lt;p&gt;i was having some issues with using multiple accounts in git while managing ssh and pgp keys with gpg-agent. gpg-agent picked ssh keys based on fixed priority, so the selected didn&#39;t always have access to my current repository. pinentry-curses, which i otherwise like, doesn&#39;t show the name or email of the identity when prompting for ssh key. pinentry frequently prompted for a password of a key that didn&#39;t have access to the remote repository.&lt;/p&gt;&lt;p&gt;i needed to ensure that ssh key always corresponds to the repository.&lt;/p&gt;&lt;h2&gt;what&#39;s working.&lt;/h2&gt;&lt;p&gt;a login script searches for gpg keys based on any identifier, enables ssh for those keys with gpg-agent and exports the public ssh keys for use in the ssh configuration.&lt;/p&gt;&lt;figure class=&quot;snippet&quot;&gt;&lt;figcaption class=&quot;bg-text&quot;&gt;$XDG_CONFIG_HOME/login/gpg&lt;/figcaption&gt;&lt;pre class=&quot;language-bash&quot;&gt;&lt;code class=&quot;language-bash&quot;&gt;&lt;span class=&quot;token keyword&quot;&gt;if&lt;/span&gt; &lt;span class=&quot;token builtin class-name&quot;&gt;command&lt;/span&gt; &lt;span class=&quot;token parameter variable&quot;&gt;-v&lt;/span&gt; gpg-agent &lt;span class=&quot;token operator&quot;&gt;&gt;&lt;/span&gt; /dev/null&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;then&lt;/span&gt;
	gpg-connect-agent updatestartuptty /bye &lt;span class=&quot;token operator&quot;&gt;&gt;&lt;/span&gt; /dev/null &lt;span class=&quot;token operator&quot;&gt;&lt;span class=&quot;token file-descriptor important&quot;&gt;2&lt;/span&gt;&gt;&lt;/span&gt;&lt;span class=&quot;token file-descriptor important&quot;&gt;&amp;amp;1&lt;/span&gt;
    &lt;span class=&quot;token assign-left variable&quot;&gt;sshs_location&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&quot;&lt;span class=&quot;token variable&quot;&gt;$GNUPGHOME&lt;/span&gt;/sshs&quot;&lt;/span&gt;
    &lt;span class=&quot;token assign-left variable&quot;&gt;key_directory&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&quot;&lt;span class=&quot;token environment constant&quot;&gt;$HOME&lt;/span&gt;/.ssh/public&quot;&lt;/span&gt;
	&lt;span class=&quot;token keyword&quot;&gt;if&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt; &lt;span class=&quot;token parameter variable&quot;&gt;-f&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&quot;&lt;span class=&quot;token variable&quot;&gt;$sshs_location&lt;/span&gt;&quot;&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;then&lt;/span&gt;
		&lt;span class=&quot;token keyword&quot;&gt;while&lt;/span&gt; &lt;span class=&quot;token assign-left variable&quot;&gt;&lt;span class=&quot;token environment constant&quot;&gt;IFS&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token builtin class-name&quot;&gt;read&lt;/span&gt; &lt;span class=&quot;token parameter variable&quot;&gt;-r&lt;/span&gt; line&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;do&lt;/span&gt;
			&lt;span class=&quot;token assign-left variable&quot;&gt;keygrip&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token variable&quot;&gt;&lt;span class=&quot;token variable&quot;&gt;$(&lt;/span&gt;gpg --list-secret-keys --with-keygrip --with-colons &lt;span class=&quot;token string&quot;&gt;&quot;&lt;span class=&quot;token variable&quot;&gt;$line&lt;/span&gt;&quot;&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;&lt;span class=&quot;token file-descriptor important&quot;&gt;2&lt;/span&gt;&gt;&lt;/span&gt;/dev/null &lt;span class=&quot;token operator&quot;&gt;|&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;awk&lt;/span&gt; -F: &#39;
				BEGIN &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt; found_auth &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;0&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;
				&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;$1 &lt;span class=&quot;token operator&quot;&gt;==&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&quot;sub&quot;&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;||&lt;/span&gt; $1 &lt;span class=&quot;token operator&quot;&gt;==&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&quot;ssb&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
					&lt;span class=&quot;token keyword&quot;&gt;if&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;index&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;$12, &lt;span class=&quot;token string&quot;&gt;&quot;a&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;&gt;&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;token variable&quot;&gt;)&lt;/span&gt;&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
						found_auth &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;1&lt;/span&gt;
					&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;else&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
						found_auth &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;0&lt;/span&gt;
					&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;
				&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;
				&lt;span class=&quot;token variable&quot;&gt;$1&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;==&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&quot;grp&quot;&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;&amp;amp;&amp;amp;&lt;/span&gt; found_auth &lt;span class=&quot;token operator&quot;&gt;==&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;1&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
					print &lt;span class=&quot;token variable&quot;&gt;$10&lt;/span&gt;
					&lt;span class=&quot;token builtin class-name&quot;&gt;exit&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;0&lt;/span&gt;
				&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;
			&#39;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
			&lt;span class=&quot;token keyword&quot;&gt;if&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt; &lt;span class=&quot;token parameter variable&quot;&gt;-n&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&quot;&lt;span class=&quot;token variable&quot;&gt;$keygrip&lt;/span&gt;&quot;&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;then&lt;/span&gt;
				gpg-connect-agent &lt;span class=&quot;token string&quot;&gt;&quot;keyattr &lt;span class=&quot;token variable&quot;&gt;$keygrip&lt;/span&gt; Use-for-ssh: true&quot;&lt;/span&gt; /bye &lt;span class=&quot;token operator&quot;&gt;&gt;&lt;/span&gt; /dev/null
				&lt;span class=&quot;token keyword&quot;&gt;if&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;!&lt;/span&gt; &lt;span class=&quot;token parameter variable&quot;&gt;-f&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&quot;&lt;span class=&quot;token variable&quot;&gt;$key_directory&lt;/span&gt;/&lt;span class=&quot;token variable&quot;&gt;$line&lt;/span&gt;.ssh&quot;&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;then&lt;/span&gt;
					gpg --export-ssh-key &lt;span class=&quot;token string&quot;&gt;&quot;&lt;span class=&quot;token variable&quot;&gt;$line&lt;/span&gt;&quot;&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;&gt;&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&quot;&lt;span class=&quot;token variable&quot;&gt;$key_directory&lt;/span&gt;/&lt;span class=&quot;token variable&quot;&gt;$line&lt;/span&gt;.ssh&quot;&lt;/span&gt;
				&lt;span class=&quot;token keyword&quot;&gt;fi&lt;/span&gt;
			&lt;span class=&quot;token keyword&quot;&gt;fi&lt;/span&gt;
		&lt;span class=&quot;token keyword&quot;&gt;done&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;&amp;lt;&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&quot;&lt;span class=&quot;token variable&quot;&gt;$sshs_location&lt;/span&gt;&quot;&lt;/span&gt;
	&lt;span class=&quot;token keyword&quot;&gt;fi&lt;/span&gt;
&lt;span class=&quot;token keyword&quot;&gt;fi&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;&lt;p&gt;this improves on the deprecated but convenient &lt;code&gt;sshcontrol&lt;/code&gt; file that requires a list of keygrips. instead &lt;code&gt;sshs&lt;/code&gt; can use any identifier as long as it results in one key.&lt;/p&gt;&lt;figure class=&quot;snippet&quot;&gt;&lt;figcaption class=&quot;bg-text&quot;&gt;$GNUPGHOME/sshs&lt;/figcaption&gt;&lt;pre class=&quot;language-txt&quot;&gt;&lt;code class=&quot;language-txt&quot;&gt;si@mmmeon
n@users.noreply.github.com
0x30FDAS89S1K50&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;&lt;p&gt;finally, the ssh configuration needs to use these ssh keys. fake hosts specify a unique host &amp;amp; identity file combination. the configuration doesn&#39;t need this when each provider maps has one account.&lt;/p&gt;&lt;figure class=&quot;snippet&quot;&gt;&lt;figcaption class=&quot;bg-text&quot;&gt;$HOME/.ssh/config&lt;/figcaption&gt;&lt;pre class=&quot;language-diff&quot;&gt;&lt;code class=&quot;language-diff&quot;&gt;&lt;span class=&quot;token inserted-sign inserted&quot;&gt;&lt;span class=&quot;token prefix inserted&quot;&gt;+&lt;/span&gt; Host mmm.sr.ht
&lt;span class=&quot;token prefix inserted&quot;&gt;+&lt;/span&gt;    HostName git.sr.ht
&lt;span class=&quot;token prefix inserted&quot;&gt;+&lt;/span&gt;    User git
&lt;span class=&quot;token prefix inserted&quot;&gt;+&lt;/span&gt;    IdentityFile ~/.ssh/public/si@mmmeon.ssh
&lt;span class=&quot;token prefix inserted&quot;&gt;+&lt;/span&gt;    IdentitiesOnly yes
&lt;/span&gt;&lt;span class=&quot;token deleted-sign deleted&quot;&gt;&lt;span class=&quot;token prefix deleted&quot;&gt;-&lt;/span&gt; Host git.sr.ht
&lt;span class=&quot;token prefix deleted&quot;&gt;-&lt;/span&gt;    User git
&lt;span class=&quot;token prefix deleted&quot;&gt;-&lt;/span&gt;    IdentityFile ~/.ssh/public/si@mmmeon.ssh
&lt;span class=&quot;token prefix deleted&quot;&gt;-&lt;/span&gt;    IdentitiesOnly yes
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;&lt;p&gt;in the multi-account setup &lt;code&gt;git@git.sr.ht:~mmmeon/dot&lt;/code&gt; intuitively becomes &lt;code&gt;mmm.sr.ht:~/mmmeon/dot&lt;/code&gt;.&lt;/p&gt;</content>
  </entry>
</feed>