Recent changes to this wiki. Not to be confused with my history.

Complete source to the wiki is available on GitLab:

git clone http://gitlab.com/anarcat/anarc.at.git
another cd rescue operation
diff --git a/services/archive/rescue.mdwn b/services/archive/rescue.mdwn
index 75c16211..9a5db6f7 100644
--- a/services/archive/rescue.mdwn
+++ b/services/archive/rescue.mdwn
@@ -563,6 +563,10 @@ here is a summary of what's in the box.
 | **total** | 69 | |
 | **not processed** | ~100 | visual estimate |
 
+Note that this might be poor storage on my part, others have had more
+luck with their CDs, see [this report from a fellow Debian
+developer](https://k1024.org/posts/2024/2024-10-15-optical-media-lifetime/) for example.
+
 References
 ==========
 

more framework mods
diff --git a/hardware/laptop/framework-12th-gen.md b/hardware/laptop/framework-12th-gen.md
index d5653cc8..ad7683fb 100644
--- a/hardware/laptop/framework-12th-gen.md
+++ b/hardware/laptop/framework-12th-gen.md
@@ -2042,6 +2042,9 @@ USB-C|blog/2023-02-10-usb-c]]. I'm considering a Dell
  * [gaming handheld mod](https://www.youtube.com/watch?v=zd6WtTUf-30) (!!!)
  * [cyberdeck](https://github.com/BenMakesEverything/cyberdeck/), [video](https://www.youtube.com/watch?v=qzEd50uzdF0)
  * [Framedeck](https://community.frame.work/t/my-open-source-framework-powered-handheld/43151), [video part 1](https://www.youtube.com/watch?v=XlbybcZxy6A&t=4s), [part 2](https://www.youtube.com/watch?v=zO6Jn7tTwc8), [GitHub](https://github.com/redglitch2/FrameDeck)
+ * [Cyberdock](https://www.printables.com/model/976685-project-cyberdock), pelican case kit with tool storage, power bar, hub,
+   etc, similar to the [recovery kit](https://www.doscher.com/recovery-kit-version-2/), but missing a battery,
+   network hub, and keyboard
  * [keyboard mod](https://www.tindie.com/products/crimier/framework-input-cover-controller/) (i.e. turn the Framework keyboard, touch pad,
    fingerprint reader and power buttons into a "normal" USB keyboard
    and hub)
@@ -2078,7 +2081,9 @@ USB-C|blog/2023-02-10-usb-c]]. I'm considering a Dell
  * [RTL SDR](https://community.frame.work/t/rtl-sdr-expansion-card/37098)
  * [joystick](https://community.frame.work/t/framework-joystick-modules-turning-your-frame-work-13-into-an-handheld-coming-soon/39011)
  * [logitech dongle hider with USB-A output](https://github.com/LeoDJ/FW-EC-DongleHiderPlus)
-* check out [this forum category](https://community.frame.work/c/developer-program/expansion-card/90) for a cornucopia of those
+ * [lego brick expansion card](https://www.printables.com/model/1031374-brick-system-expansion-card)
+
+Check out [this forum category](https://community.frame.work/c/developer-program/expansion-card/90) for a cornucopia of those.
 
 ## Sleeves and cases
 

more trixie stuff
diff --git a/blog/2024-08-15-why-trixie.md b/blog/2024-08-15-why-trixie.md
index 6ece53b9..9b382d3d 100644
--- a/blog/2024-08-15-why-trixie.md
+++ b/blog/2024-08-15-why-trixie.md
@@ -87,9 +87,10 @@ Those are packages that *are* in Debian stable (Bookworm) already, but
 that are somewhat lacking and could benefit from an upgrade.
 
 - [firmware-iwlwifi](https://git.kernel.org/cgit/linux/kernel/git/firmware/linux-firmware.git): out of date, can install from unstable
-- [fuzzel][] / [foot][]: log level noises [A][], [B][], fuzzel [fix
-  not in debian yet][], and if we get to 1.11, my [scripts](https://gitlab.com/anarcat/scripts/) in `~/bin`
-  should be patched to use `--cache`
+- [fuzzel][]: [log level noises][A],, paste support
+  and my [scripts](https://gitlab.com/anarcat/scripts/) in `~/bin` should be patched to use `--cache`
+- [foot][]: [log level noises][B], [quotes selection][], [keyboard
+  selection mode](https://codeberg.org/dnkl/foot/issues/419)
 - nomacs: non-trivial backport, out of date version in sid
 - [pandoc](https://pandoc.org/): [3.0](https://github.com/jgm/pandoc/releases/tag/3.0) is ridiculously huge, but particularly [remove
   spaces after list marker](https://github.com/jgm/pandoc/issues/7172)
@@ -103,7 +104,7 @@ that are somewhat lacking and could benefit from an upgrade.
 [foot]: https://codeberg.org/dnkl/foot
 [A]: https://codeberg.org/dnkl/fuzzel/pulls/266
 [B]: https://codeberg.org/dnkl/foot/pulls/1215
-[fix not in debian yet]: https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=1078784
+[quotes selection]: https://codeberg.org/dnkl/foot/issues/1364
 
 # Last words
 

monitor status update
diff --git a/hardware/monitor.mdwn b/hardware/monitor.mdwn
index 9a1a94ad..16a7a01b 100644
--- a/hardware/monitor.mdwn
+++ b/hardware/monitor.mdwn
@@ -190,13 +190,14 @@ squeeze in places and so on.
 ## The great 4k dance
 
 I ended up buying <del>two</del> <del>three</del> *four* Dell
-monitors. I first ordered the [Dell 27" 4k
-UHD Monitor S2722QC][] but it couldn't daisy chain with the
-[Dell U2723QE][] , so I downgraded to the [Dell 27" 4K UHD Monitor -
-S2721QS][]. Dell had *excellent* support and gave me a return label to
-refund me the other monitor. But unfortunately, the S2722QC only
-supports DP1.2, not DP1.4, which means it's capped at 1080p. So I had
-to return that one as well.
+monitors. I first ordered the [Dell 27" 4k UHD Monitor S2722QC][] but
+it couldn't daisy chain with the [Dell U2723QE][], as the latter
+doesn't have an outgoing DisplayPort USB-C port. So I downgraded to
+the [Dell 27" 4K UHD Monitor - S2721QS][], on their advice. Dell had
+*excellent* support and gave me a return label to refund me the other
+monitor. But unfortunately, the S2721QS only supports DP1.2, not
+DP1.4, which means it's capped at 1080p. So I had to return that one
+as well.
 
 A key problem with the [Dell U2723QE][] is that it has no downstream
 USB-C port with DP support, so you *have* to use a DP cable to connect

more references all over
diff --git a/blog/2022-06-17-matrix-notes.md b/blog/2022-06-17-matrix-notes.md
index 40a306ef..f76c5178 100644
--- a/blog/2022-06-17-matrix-notes.md
+++ b/blog/2022-06-17-matrix-notes.md
@@ -835,6 +835,15 @@ system.
 Update: I'm now (2024) using FluffyChat on desktop (through Flatpak)
 and Android (through F-Droid).
 
+Other interesting clients:
+
+ - [ement.el](https://github.com/alphapapa/ement.el): Emacs clietn
+ - [gomuks][]: TUI, golang, E2E
+ - [iamb](https://iamb.chat/): TUI, threads, spaces, E2E, image previews, bell
+   notification, message redaction, multiple profiles, vim keybindings
+
+[gomuks]: https://github.com/tulir/gomuks/
+
 ## Bots
 
 This falls a little aside the "usability" section, but I didn't know
@@ -846,7 +855,10 @@ there's still a good variety:
 
  * [maubot](https://github.com/maubot/maubot): generic bot with tons of usual plugins like sed, dice,
    karma, xkcd, echo, rss, reminder, translate, react, exec,
-   gitlab/github webhook receivers, weather, etc
+   gitlab/github webhook receivers, weather, etc, see [this huge
+   list](https://plugins.mau.bot/), related bots:
+   - [mautrix-telegram](https://github.com/mautrix/telegram): [recommended by sergiodj](https://blog.sergiodj.net/posts/chatting-21st-century/)
+   - [gitlab](https://github.com/maubot/gitlab): same
  * [matrix-nio](https://github.com/poljar/matrix-nio): another framework, used to build [lots more
    bots](https://matrix-nio.readthedocs.io/en/latest/examples.html) like:
    * [hemppa](https://github.com/vranki/hemppa): generic bot with various functionality like weather,
@@ -867,6 +879,7 @@ there's still a good variety:
  * [hookshot](https://github.com/Half-Shot/matrix-hookshot): bridge with GitLab/GitHub
  * [matrix-monitor-bot](https://github.com/turt2live/matrix-monitor-bot): latency monitor
  * [matrix-debate-bot](https://gitlab.com/imbev/matrix-debate-bot): simple timer
+ * [nimb](https://github.com/susam/nimb): NIMB IRC Matrix Bridge, sock puppet
  * [gh-bot](https://git.sr.ht/~jae/gh-bot): GitHub, GitLab, Gitea webhook processor
  * [buscarron](https://gitlab.com/etke.cc/buscarron): web form (HTTP POST) to Matrix
  * [honoroit](https://gitlab.com/etke.cc/honoroit): help desk bot
diff --git a/blog/2024-05-29-playing-with-fonts-again.md b/blog/2024-05-29-playing-with-fonts-again.md
index bb07ab91..2f55ca62 100644
--- a/blog/2024-05-29-playing-with-fonts-again.md
+++ b/blog/2024-05-29-playing-with-fonts-again.md
@@ -235,6 +235,8 @@ I'm not using them:
   rendering box drawing, em dash bigger than en dash, packaged as
   [fonts-mononoki](https://tracker.debian.org/fonts-mononoki)
 
+- [Server mono](https://servermono.com/): no ligatures, italics, old school
+
 - [Source Code Pro](http://adobe-fonts.github.io/source-code-pro/): italics, looks good, but dash metrics look
   whacky, [not in Debian](https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=736681)
 
diff --git a/software/desktop/calibre.mdwn b/software/desktop/calibre.mdwn
index e2ae6e5e..2abed170 100644
--- a/software/desktop/calibre.mdwn
+++ b/software/desktop/calibre.mdwn
@@ -175,6 +175,7 @@ replace Calibre here:
  * [sioyek][] is a powerful, extensible and keyboard-driven PDF (and
    ePUB!) viewer mostly aimed at academic paper review, but it has all
    sorts of nice features like highlights, bookmarks, and more
+ * [Thorium][], OPDS, ePUBs, Electron thing
  * [xreader][] GTK-only viewer based on Atril, [not in Debian](https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=958981)
  * [zathura][] supports ePUBs with the [MuPDF][] [backend][], but that
    backend is [not in Debian](https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=731447)
@@ -211,6 +212,7 @@ See also the [pdf-viewer metapackage](https://packages.debian.org/sid/pdf-viewer
 [Peruse]: https://peruse.kde.org/
 [kavita]: https://github.com/Kareadita/Kavita
 [flow]: https://www.flowoss.com/
+[Thorium]: https://github.com/edrlab/thorium-reader
 
 ## ebook editor
 

trippy entered debian
diff --git a/blog/2024-08-15-why-trixie.md b/blog/2024-08-15-why-trixie.md
index c0962c29..6ece53b9 100644
--- a/blog/2024-08-15-why-trixie.md
+++ b/blog/2024-08-15-why-trixie.md
@@ -53,6 +53,7 @@ interesting enough to list here.
 - [sfwbar](https://github.com/LBCrion/sfwbar): pretty status bar, may replace waybar, which i am
   somewhat unhappy with (my UTC clock disappears randomly)
 - [spytrap-adb](https://github.com/spytrap-org/spytrap-adb): cool spy gear
+- [trippy](https://github.com/fujiapple852/trippy): trippy network analysis tool, kind of an improved MTR
 
 # New packages I won't use
 

another registrar
diff --git a/services/dns.mdwn b/services/dns.mdwn
index 6f29afb0..efc5b78a 100644
--- a/services/dns.mdwn
+++ b/services/dns.mdwn
@@ -76,6 +76,7 @@ n'y sont pas listés.
 | namesilo.com      | 13.95USD | 10.79USD | 11.79USD | 9.99USD  | 11.99USD | 18.49USD |                                                                 |
 | nic.at            | N/A      | N/A      | N/A      | N/A      | 40.80EUR | N/A      |                                                                 |
 | njal.la           | 16.09USD | 16.09USD | 16.09USD | N/A      | N/A      | 32.19USD | 16.09USD=15EUR pas un registry, anonyme                         |
+| openprovider.com  | 16.98USD | 19.99USD | 19.99USD | 20.10USD | 21.03USD | 32.20USD | has a "member" price, suggested by a coworker                   |
 | opensrs.net       | 13.75USD | 15.00USD | 15.50USD | 16.00USD | 17.00USD | 22.00USD | reseller, bulk pricing, 95$ minimum                             |
 | porkbun.com       | 10.37USD | 10.72USD | 11.48USD | 9.20USD  | N/A      | 16.97USD |                                                                 |
 

more dark mode woes
diff --git a/software/desktop/firefox.mdwn b/software/desktop/firefox.mdwn
index 931de629..95bb4216 100644
--- a/software/desktop/firefox.mdwn
+++ b/software/desktop/firefox.mdwn
@@ -304,7 +304,8 @@ that I version-control into git:
    1 (no third-party cookies)
  * `browser.in-content.dark-mode`: true (prefer dark CSS, see [this
    discussion](https://css-tricks.com/dark-modes-with-css/), [new in FF 67](https://blog.logrocket.com/whats-new-in-firefox-67-prefers-color-scheme-and-more-195be81df03f/)), also set
-   `ui.systemUsesDarkTheme` to `1`. see [this doc](https://developer.mozilla.org/en-US/docs/Web/CSS/@media/prefers-color-scheme)
+   `ui.systemUsesDarkTheme` to `1`. see [this doc](https://developer.mozilla.org/en-US/docs/Web/CSS/@media/prefers-color-scheme), also set
+   "theme" to be "dark", flipping to "automatic" when i need "light"
  * `privacy.resistFingerprinting`: true (helps with
    [fingerprinting](https://www.bitestring.com/posts/2023-03-19-web-fingerprinting-is-worse-than-I-thought.html5), but [breaks dark mode](https://bugzilla.mozilla.org/show_bug.cgi?id=1535189), see also [this TB
    bug](https://gitlab.torproject.org/tpo/applications/tor-browser/-/issues/40337))

swayOSD is *not* quite in debian yet
diff --git a/software/desktop/wayland.md b/software/desktop/wayland.md
index 92f8bf80..f165f75c 100644
--- a/software/desktop/wayland.md
+++ b/software/desktop/wayland.md
@@ -1555,13 +1555,13 @@ bookworm) that replaces dunst and also provides sliders for
 backlight. Default config is almost useless, good stuff in the
 [discussion forum](https://github.com/ErikReider/SwayNotificationCenter/discussions/183). Still very GUI-y and mouse driven, not enough
 text... e.g. we don't see the actual volume or brightness in
-percentage.
+percentage, so i still have a brightness module in waybar.
 
 Other alternatives:
 
  * [Avizo][], not in Debian, requires keybinding wrapper
- * [SwayOSD][], [entered Debian in Trixie](https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=1057301), requires keybinding
-   wrapper or libinput access
+ * [SwayOSD][], [entered Debian NEW, hopefully in trixie](https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=1057301), requires
+   keybinding wrapper or libinput access, [sample sway config](https://codeberg.org/werdahias/graffe/src/commit/76c109b2ead688fad2ab5ddbe81419d5acbf270e/.config/sway/config#L58-L67)
 
 [Avizo]: https://github.com/misterdanb/avizo
 [SwayOSD]: https://github.com/ErikReider/SwayOSD

swayOSD in debian
diff --git a/software/desktop/wayland.md b/software/desktop/wayland.md
index 70d0954b..92f8bf80 100644
--- a/software/desktop/wayland.md
+++ b/software/desktop/wayland.md
@@ -1560,7 +1560,8 @@ percentage.
 Other alternatives:
 
  * [Avizo][], not in Debian, requires keybinding wrapper
- * [SwayOSD][], [not in Debian](https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=1057301), requires keybinding wrapper or libinput access
+ * [SwayOSD][], [entered Debian in Trixie](https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=1057301), requires keybinding
+   wrapper or libinput access
 
 [Avizo]: https://github.com/misterdanb/avizo
 [SwayOSD]: https://github.com/ErikReider/SwayOSD

moar fonts stuff
diff --git a/blog/2024-05-29-playing-with-fonts-again.md b/blog/2024-05-29-playing-with-fonts-again.md
index 9357f2e7..bb07ab91 100644
--- a/blog/2024-05-29-playing-with-fonts-again.md
+++ b/blog/2024-05-29-playing-with-fonts-again.md
@@ -173,6 +173,8 @@ My requirements are:
 - *no* ligatures: yes, in the previous post, I *wanted* ligatures but
   I have changed my mind. after testing this, I find them distracting,
   confusing, and they often break the monospace nature of the display
+  (note that some folks wrote [emacs code to selectively enable
+  ligatures](https://github.com/mickeynp/ligature.el) which is an interesting compromise)z
 - monospace: this is to display code
 - italics: often used when writing Markdown, where I do make use of
   italics... Emacs falls back to underlining text when lacking italics
@@ -267,6 +269,10 @@ Fonts](fonts.google.com/), amazingly. Other such tools:
  * [Google Fonts](fonts.google.com/)
  * [Programming fonts](https://www.programmingfonts.org/)
 
+Also note that there is now a package in Debian called [fnt](https://github.com/alexmyczko/fnt) to
+manage fonts like this locally, including in-line previews (that don't
+work in bookworm but should be improved in trixie and later).
+
 [[!tag debian-planet python-planet typography meta theming usability]]
 
 <!-- posted to the federation on 2024-05-29T17:44:57.933852 -->

new trixie packages
diff --git a/blog/2024-08-15-why-trixie.md b/blog/2024-08-15-why-trixie.md
index 762b76b2..c0962c29 100644
--- a/blog/2024-08-15-why-trixie.md
+++ b/blog/2024-08-15-why-trixie.md
@@ -28,6 +28,7 @@ Those tools are shiny new things available in unstable or perhaps
 Trixie (testing) already that I am not using yet, but I find
 interesting enough to list here.
 
+- [backdown](https://github.com/Canop/backdown/): clever file deduplicator
 - [codesearch](https://code.google.com/p/codesearch/): search all of Debian's source code (tens of
   thousands of packages) from the commandline! (see also [dcs-cli](https://github.com/jwilk/dcs-cli),
   not in Debian)
@@ -41,6 +42,10 @@ interesting enough to list here.
 - [hyprland](https://hyprland.org): possible Sway replacement, but there are [rumors of a
   toxic community](https://drewdevault.com/2023/09/17/Hyprland-toxicity.html) ([rebuttal](https://blog.vaxry.net/articles/2023-hyprlandsCommunity), I haven't reviewed either in
   detail), so approach carefully)
+- [kooha](https://github.com/SeaDve/Kooha): simple screen recorder with audio support, currently
+  using `wf-recorder` which is a more.. minimalist option
+- [linescroll](https://www.usenix.org.uk/content/linescroll.html): rate graphs on live logs, mostly useful on servers
+  though
 - [ruff](https://github.com/charliermarsh/ruff/): faster Python formatter and linter, flake8/black/isort
   replacement, alas not mypy/LSP unfortunately, designed to be ran
   *alongside* such a tool, which is [not possible in Emacs eglot right

more tablet/eink stuff
diff --git a/hardware/tablet.mdwn b/hardware/tablet.mdwn
index 14d2e7d5..9f2beaec 100644
--- a/hardware/tablet.mdwn
+++ b/hardware/tablet.mdwn
@@ -98,6 +98,9 @@ Android. They [publish some of their source on GitHub][], mostly as a
 also have a neat [community forum][]. They are based in China so
 products will ship from there.
 
+Update: they seem to actually have significant GPL-compliance issues,
+from what I've read on hacker news.
+
 [Onyx]: https://en.wikipedia.org/wiki/Onyx_Boox
 [community forum]: http://bbs.onyx-international.com/
 [publish some of their source on GitHub]: https://github.com/onyx-intl/
@@ -330,6 +333,34 @@ They also make a weird [not-ereader](https://www.indiegogo.com/projects/not-erea
 that's designed to be a "phone monitor" but that also runs Android
 (6!) and can act as a standalone e-reader.
 
+## Supernote
+
+https://supernote.com/
+
+interesting devices, "paperlike", no backlight, handwriting
+recognition, mark/review system, PDF annotations, wacom pen,
+dropbox/drive backups, screencast support, USB transfer, no backlight.
+(.xps) formats".
+
+10.3" device replacement "in development", for now 7.3" device
+available ([Supernote Nomad](https://supernote.com/products/supernote-nomad)) for 300$USD:
+
+- 191.85 mm x 139.2 mm x 6.8 mm
+- 266g
+- 7.8" display, 300 PPI, 1404 × 1872
+- 4GB RAM
+- 32GB storage
+- MicroSD card support
+- CPU: RK3566 Quad-Core 1.8 GHz
+- battery: 2700 mAh
+- Android 11
+- USB-C 2.0, support Charger/Earphone/OTG
+- Wi-Fi 2.4 GHz + 5 GHz, 802.11a/b/g/n/ac
+- Bluetooth 5.0
+- Note (.note), PDF, EPUB, Word, Text (.txt), PNG, JPG, WebP, CBZ, FB2 and XPS, and integrate with Kindle app which supports MOBI and other formats
+- pen is an extra 60-90$USD depending on model
+- 50-70$ extra for case
+
 # Tablets
 
 Tablets are basically like ebook-readers, except they use a normal,
@@ -601,5 +632,7 @@ are either 10" or 12".
    not all) tablets (and no e-readers)
  * [Wikipedia](https://en.wikipedia.org/wiki/Comparison_of_e-readers) has a pretty exhaustive table of e-readers'
    specifications
+ * [Ewritable](https://ewritable.com/) has good reviews and comparison
+   charts of e-readers
 
 [[!tag research]]

update monitor status, add a nice 16:10 monitor
diff --git a/hardware/monitor.mdwn b/hardware/monitor.mdwn
index 49fe9540..9a1a94ad 100644
--- a/hardware/monitor.mdwn
+++ b/hardware/monitor.mdwn
@@ -20,7 +20,11 @@ be capped at "1440p at 60Hz", which I assume is 2560×1440 or
 Update: I [[ditched the Purism laptop
 completely|blog/2022-08-25-one-dead-purism-laptop]] and should
 definitely be able to do 4k now, even dual 4k, thanks to the
-[[awesome Framework laptop|hardware/laptop/framework-12th-gen]].
+[[awesome Framework laptop|hardware/laptop/framework-12th-gen]]. I
+currently work with 2x[Dell U2723QE][] monitors, over a single USB-C
+cable, it's awesome, but the monitor is quite "wide" and I wonder if I
+might not be better served by a 16:10 aspect ratio instead of the
+"standard" 16:9 aspect ratio.
 
 # Specifications
 
@@ -185,7 +189,8 @@ squeeze in places and so on.
 
 ## The great 4k dance
 
-I ended up buying two Dell monitors. I first ordered the [Dell 27" 4k
+I ended up buying <del>two</del> <del>three</del> *four* Dell
+monitors. I first ordered the [Dell 27" 4k
 UHD Monitor S2722QC][] but it couldn't daisy chain with the
 [Dell U2723QE][] , so I downgraded to the [Dell 27" 4K UHD Monitor -
 S2721QS][]. Dell had *excellent* support and gave me a return label to
@@ -231,6 +236,9 @@ cry from the 750$ sale at dell.com.
 
 For now, it's a cool-down period.
 
+Update: I ended up with two [Dell U2723QE][] monitor, one is vertical,
+to the right, and there's the main one in front.
+
 ## Retired
 
 Those monitors have problems and will be scrapped eventually:
@@ -366,6 +374,9 @@ Another option is portable monitors, to have multiple monitors on the
 road or outputting full-size video from a phone. Example this [full HD
 Asus USB-C monitor](https://www.asus.com/za/displays-desktops/monitors/zenscreen/zenscreen-go-mb16ahp/) ([review](https://grep.be/blog//en/computer/hardware/New_toy:_ASUS_ZenScreen_Go_MB16AHP/)).
 
+A friend bought a "coding monitor" ([BenQ RD240Q](https://www.benq.com/en-us/monitor/programming/rd240q.html)) that has the
+interesting 16:10 aspect ratio.
+
 # Old research
 
 See also this discussion:

more reasoning behind names
diff --git a/services/dns.mdwn b/services/dns.mdwn
index f1a9cc4c..6f29afb0 100644
--- a/services/dns.mdwn
+++ b/services/dns.mdwn
@@ -182,8 +182,8 @@ circulation, généralement parce que les machines auxquelles ils ont
 été attitrés ont été retirés, mais aussi parce que les noms ne sont
 plus compatibles avec la nouvelle convention.
 
- * [[hardware/server/lenny]] - origin forgotten
- * marvin - origin forgotten
+ * [[hardware/server/lenny]] ([[!wikipedia Leonard Peltier]])
+ * marvin (the [paranoid android](https://en.wikipedia.org/wiki/Marvin_the_Paranoid_Android))
  * mumia ([Abu Jamal][])
  * orange
  * tangerine

more matrix crap
diff --git a/blog/2022-06-17-matrix-notes.md b/blog/2022-06-17-matrix-notes.md
index e8da1388..40a306ef 100644
--- a/blog/2022-06-17-matrix-notes.md
+++ b/blog/2022-06-17-matrix-notes.md
@@ -1118,8 +1118,29 @@ file *did* get posted on the homeserver, so there *was* a
 link. Problem though: when I deleted the message from FluffyChat, the
 attachment was still there, and will presumably be present forever.
 
+(Update: that specific issue is being addressed in Matrix 1.11,
+deployed slowly across the federation starting in August 2024,
+presumably, see [this announcement](https://matrix.org/blog/2024/06/26/sunsetting-unauthenticated-media/).)
+
 Ouch. Watch out what you upload to Matrix.
 
+## External research on Matrix, exhibit C
+
+[This furry](https://soatok.blog/2024/08/14/security-issues-in-matrixs-olm-library/) published a pretty damning review of the fundamental
+E2E library used in most Matrix clients, libolm. It's vulnerable to
+*significant* security issues like cache-timing attacks, malleable
+signatures and, critically, private key material leakage.
+
+Matrix's response to this was appalling: they simply (and rather
+silently) [deprecated the library](https://gitlab.matrix.org/matrix-org/olm/-/commit/6d4b5b07887821a95b144091c8497d09d377f985), and [dug their heels in](https://news.ycombinator.com/item?id=41249371)
+when confronted about those security issues.
+
+At this point, one cannot really trust the cryptography in
+Matrix. Even though the newer E2E library was audited, it's only used
+by Element (and therefore not the client *I* am currently using). And
+besides, with such attitude, I doubt we can trust Matrix security at
+all going forward.
+
 [[!tag matrix irc history debian-planet python-planet review
 internet]]
 

remove EmitLLDP stuff
We don't *really* need it in our builders, it's more useful for "real"
VMs to identify who's who and where...
diff --git a/blog/2022-04-27-sbuild-qemu.md b/blog/2022-04-27-sbuild-qemu.md
index 87ce79ab..ac3a616c 100644
--- a/blog/2022-04-27-sbuild-qemu.md
+++ b/blog/2022-04-27-sbuild-qemu.md
@@ -247,7 +247,6 @@ Type=ether
 
 [Network]
 DHCP=yes
-EmitLLDP=true
 ```
 
 Then to switch:

cosmetic sbuild notes
diff --git a/blog/2022-04-27-sbuild-qemu.md b/blog/2022-04-27-sbuild-qemu.md
index 55c3d0fb..87ce79ab 100644
--- a/blog/2022-04-27-sbuild-qemu.md
+++ b/blog/2022-04-27-sbuild-qemu.md
@@ -233,17 +233,22 @@ Note that this at least partially overlaps with [[services/hosting]].
     echo 'GRUB_TIMEOUT=1' > /etc/default/grub.d/grub_timeout.cfg
     update-grub
 
+Note that this is now the default, at least from bookworm, see
+`/usr/share/sbuild/sbuild-qemu-create-modscript`.
+
 ### systemd-networkd
 
 In `/etc/systemd/network/ether.network`:
 
-    [Match]
-    Type=ether
-    # Could also be Name=eth0 or Name=!lo
-    
-    [Network]
-    DHCP=yes
-    EmitLLDP=true
+```
+[Match]
+Type=ether
+# Could also be Name=eth0 or Name=!lo
+
+[Network]
+DHCP=yes
+EmitLLDP=true
+```
 
 Then to switch:
 
@@ -251,6 +256,9 @@ Then to switch:
     systemctl disable --now networking.service ; \
     systemctl enable --now systemd-networkd
 
+That is *not* done automatically, and ifupdown is still the default in
+Debian as of this writing (2024-08-19).
+
 # Nitty-gritty details no one cares about
 
 ## Fixing hang in sbuild cleanup

nomacs/feh issues
diff --git a/blog/2024-08-15-why-trixie.md b/blog/2024-08-15-why-trixie.md
index d0904e63..762b76b2 100644
--- a/blog/2024-08-15-why-trixie.md
+++ b/blog/2024-08-15-why-trixie.md
@@ -84,6 +84,7 @@ that are somewhat lacking and could benefit from an upgrade.
 - [fuzzel][] / [foot][]: log level noises [A][], [B][], fuzzel [fix
   not in debian yet][], and if we get to 1.11, my [scripts](https://gitlab.com/anarcat/scripts/) in `~/bin`
   should be patched to use `--cache`
+- nomacs: non-trivial backport, out of date version in sid
 - [pandoc](https://pandoc.org/): [3.0](https://github.com/jgm/pandoc/releases/tag/3.0) is ridiculously huge, but particularly [remove
   spaces after list marker](https://github.com/jgm/pandoc/issues/7172)
 - [podman](https://github.com/containers/podman): [better systemd integration](https://www.redhat.com/sysadmin/quadlet-podman)
diff --git a/software/desktop/wayland.md b/software/desktop/wayland.md
index 13defeaf..70d0954b 100644
--- a/software/desktop/wayland.md
+++ b/software/desktop/wayland.md
@@ -734,7 +734,8 @@ My main frustration with *all* image viewers I could find out there is
 that they fail in one or multiple of those ways:
 
  * too slow (e.g. Darktable used to be fast, but now fails at "just
-   scroll quickly through the collection)
+   scroll quickly through the collection, feh takes over 30 seconds to
+   render a mere 187 thumbnails)
 
  * too roomy grids (e.g. geeqie has huge gaps around images, darktable
    is better, but also has big gaps, no image viewer I know correctly
@@ -746,7 +747,8 @@ that they fail in one or multiple of those ways:
    between full screen preview of an image and the light table, that's
    gone and I don't know how to find it again; geeqie's side panel is
    stuck to the image, and i keep struggling to find ways to get rid
-   of it)
+   of it; feh is just too hard to use, it's like learning vim except
+   it's not the same keybinding, and they don't make much more sense)
 
  * requires rescan (e.g. Digikam required a couple of hours to even
    *start* showing me thumbnails)
@@ -763,6 +765,13 @@ through hundreds of images with the flick of a finger, without any
 prior scanning. Aves fits all images in squares, which is an
 acceptable compromise for me.
 
+nomacs (which [this thread reminded me of](https://forums.linuxmint.com/viewtopic.php?t=321730)) is *pretty* close: it
+loads 180 images almost instantly, and displays them without gaps. one
+problem is it [doesn't recurse into folders](https://github.com/nomacs/nomacs/issues/297), it's really weird;
+when you select a folder in the file explorer on the right, it only
+goes down one level, which means i can only browse one day at a
+time. The are also security concerns and [sustainability](https://github.com/nomacs/nomacs/issues/987).
+
 Alternatives:
 
  * [GNOME Photos][]: stock GNOME image viewer, requires

update photo galleries status, reviewed photoview
diff --git a/blog/mobile-massive-gallery.md b/blog/mobile-massive-gallery.md
index fd343fb0..f8f81f7b 100644
--- a/blog/mobile-massive-gallery.md
+++ b/blog/mobile-massive-gallery.md
@@ -45,6 +45,14 @@ https://github.com/photoprism/photoprism/issues/1666
 incompatible flutter app
 https://github.com/thielepaul/photoprism-mobile
 
+new app in f-droid works somewhat
+okay. https://f-droid.org/en/packages/ua.com.radiokot.photoprism/
+([source code](https://github.com/Radiokot/photoprism-android-client)) problems are mostly that images that don't load and
+there are performance issues, and jumping around dates is
+confusing. there's no offline mode either.
+
+whole thing has an opencore vibe, some features are locked behind
+paywall, including in the above mobile app.
 
 requires mariadb, sqlite not recommended
 
@@ -92,6 +100,30 @@ rescan --force
 INFO[2023-02-20T17:54:11Z] indexed 82,692 files in 1h10m28.674348629s   
 ```
 
+somehow failed to find photos from my camera (but found my phone!) in
+august 2021, possibly missing all high quality photos from that
+camera. possibly an issue with https://docs.photoprism.app/getting-started/troubleshooting/#missing-pictures
+
+bumped two settings, then:
+
+INFO[2024-08-17T14:35:52Z] faces: updated 231 markers, recognized 151 faces, 81 unknown [16.252126634s]
+INFO[2024-08-17T14:35:52Z] index: updated 5,047 files [30m47.140279115s]
+INFO[2024-08-17T14:37:57Z] indexed 100,808 files in 32m51.738153382s
+
+
+      PHOTOPRISM_ORIGINALS_LIMIT: -1               # file size limit for originals in MB (increase for high-res video)
+      PHOTOPRISM_RESOLUTION_LIMIT: -1
+
+added videos, amazingly, it was super fast:
+
+```
+INFO[2024-08-17T20:15:07Z] indexed 101,914 files in 20m37.481057559s
+```
+
+INFO[2024-08-17T22:14:28Z] purge: removed 82 files and 12 photos [2m26.029346119s] 
+INFO[2024-08-17T22:14:28Z] indexed 102,615 files in 1h48m21.693727003s  
+
+
 ## others
 
 https://arstechnica.com/gadgets/2021/06/the-big-alternatives-to-google-photos-showdown/
@@ -123,24 +155,6 @@ dragging the images around lets you drag into nothingness, it's
 really, really hard to use. I haven't actually attempted to generate
 the thumbnails.
 
-another solution I tried is to use the plain [Simple Gallery](https://github.com/SimpleMobileTools/Simple-Gallery/) to
-browse a remote folder, but this is [explicitely not supported](https://github.com/SimpleMobileTools/Simple-Gallery/issues/2422) as
-they don't want their app to access the network (and rightly so, I
-guess). But there was [this comment](https://github.com/SimpleMobileTools/Simple-Gallery/issues/2422#issuecomment-1126840645) which pointed me at the [Amaze
-file manager](https://f-droid.org/en/packages/com.amaze.filemanager/) which actually supports SFTP! Unfortunately, in my
-tests it didn't work so well and of course didn't leverage existing
-thumbnails...
-
-
-photoprism it is... compose-photoprism.yml in my home, new app in
-f-droid works somewhat okay. https://f-droid.org/en/packages/ua.com.radiokot.photoprism/
-([source code](https://github.com/Radiokot/photoprism-android-client)) problems are mostly images that don't load and
-there are performance issues. there's no offline mode either.
-
-consider tls client certs.
-
-update: https://apps.nextcloud.com/apps/memories seems to do what we need
-
 ## ente
 
 [ente](https://ente.io/) just (March 2024) just open-sourced their server and it's
@@ -182,4 +196,53 @@ PostgreSQL).
 complicated, lots of microservices, unsure if i want to embark on
 testing again.
 
+## photoview
+
+refreshing: single go binary
+
+setup complicated for no good reason, separate .env file complicates
+things, stripped it down to just a docker-compose with sqlite (which
+should really just be default).
+
+started scan at 2024/08/17 00:38:23 local ended around 2:54:11, but no
+clear "scan finished" message that i could find - end of the log is
+flooded with SQL queries.
+
+had to fiddle with user permissions in /srv/Photos because that was
+just accessilbe to my user, made a photoview user/group, photoprism
+container now uses the same group which has +rx on the folder.
+
+interface much more minimalist than photoprism.
+
+no mobile app, on the roadmap at least
+https://github.com/photoview/photoview/issues/701, prototype in
+https://github.com/photoview/photoview-android
+
+nice in-site progress bar after about 10-20 minutes... lots of errors
+about videos.
+
+each folder is treated as an album, which in my case is a bad match as
+each folder is a *day*, typically, which makes it hard to share all
+images from "a trip", say.
+
+ultimately went back to photoprism after figuring out fix for missing
+images. deal breaker is lack of arbitrary album sharing and mobile
+app.
+
+## current status
+
+another solution I tried is to use the plain [Simple Gallery](https://github.com/SimpleMobileTools/Simple-Gallery/) to
+browse a remote folder, but this is [explicitely not supported](https://github.com/SimpleMobileTools/Simple-Gallery/issues/2422) as
+they don't want their app to access the network (and rightly so, I
+guess). But there was [this comment](https://github.com/SimpleMobileTools/Simple-Gallery/issues/2422#issuecomment-1126840645) which pointed me at the [Amaze
+file manager](https://f-droid.org/en/packages/com.amaze.filemanager/) which actually supports SFTP! Unfortunately, in my
+tests it didn't work so well and of course didn't leverage existing
+thumbnails...
+
+for now, photoprism it is...  big blocker with missing images.
+
+consider tls client certs.
+
+update: https://apps.nextcloud.com/apps/memories seems to do what we need
+
 [[!tag draft]]

delete temporary file committed by mistake
diff --git a/blog/sync-conflicts.md b/blog/sync-conflicts.md
deleted file mode 100644
index 6cc24749..00000000
--- a/blog/sync-conflicts.md
+++ /dev/null
@@ -1,240 +0,0 @@
-
-# Book one
-
-## Conflict 20240802-232230-P2R7L33.lua
-
-```
-3,4c3,19
-<     ["annotations"] = {},
-<     ["bookmarks"] = {},
----
->     ["annotations"] = {
->         [1] = {
->             ["chapter"] = "Chapter 7",
->             ["datetime"] = "2024-07-26 02:43:05",
->             ["page"] = "/body/DocFragment[10]/body/div/section/p[33]/text()[1].295",
->             ["pageno"] = 110,
->             ["text"] = "in Chapter 7",
->         },
->     },
->     ["bookmarks"] = {
->         [1] = {
->             ["chapter"] = "Chapter 7",
->             ["datetime"] = "2024-07-26 02:43:05",
->             ["notes"] = "in Chapter 7",
->             ["page"] = "/body/DocFragment[10]/body/div/section/p[33]/text()[1].295",
->         },
->     },
-66c81
-<     ["last_xpointer"] = "/body/DocFragment[4]/body/div/section/h1/a[2]/text().0",
----
->     ["last_xpointer"] = "/body/DocFragment[27]/body/div/section/h1.0",
-70c85
-<     ["percent_finished"] = 0.011834319526627,
----
->     ["percent_finished"] = 0.90532544378698,
-```
-
-A is the conflict file, B is the good version. good version has more
-percent and extra annotations.
-
-## Conflict 20240803-022141-P2R7L33.lua and 20240803-022217-P2R7L33.lua
-
-Identical diff. 
-
-## .old conflict files
-
-We assume those are useless (and, by the way, find the
-`metadata.lua.old` to be equally garbage).
-
-# book 2
-
-## Conflict 20240802-232233-P2R7L33.opf
-
-```
-anarcat@angela:Mastering Emacs (1668)[1]$ diff  metadata.sync-conflict-20240802-232233-P2R7L33.opf metadata.opf
-8c8
-<         <dc:contributor opf:file-as="calibre" opf:role="bkp">calibre (6.26.0) [https://calibre-ebook.com]</dc:contributor>
----
->         <dc:contributor opf:file-as="calibre" opf:role="bkp">calibre (6.13.0) [https://calibre-ebook.com]</dc:contributor>
-11a12,14
->         <meta name="calibre:author_link_map" content="{&quot;Mickey Petersen&quot;: &quot;&quot;}"/>
->         <meta name="calibre:series" content="Mastering Emacs"/>
->         <meta name="calibre:series_index" content="28"/>
-19c22
-<         <reference type="cover" title="Couverture" href="cover.jpg"/>
----
->         <reference type="cover" title="Cover" href="cover.jpg"/>
-```
-
-spurious calibre metadata changes, latter has more fields, deleted
-conflict.
-
-`20240803-022300-P2R7L33.opf ` and `20240803-022211-P2R7L33`
-identical.
-
-# book 3
-
-## -conflict-20240724-090036-CVJZX7H.lua 
-
-```
-1c1
-< -- /mnt/onboard/Ben Collier/Tor (1724)/Tor - Ben Collier.sdr/metadata.epub.lua
----
-> -- /storage/emulated/0/books/Ben Collier/Tor (1724)/Tor - Ben Collier.sdr/metadata.epub.lua
-2a3
->     ["annotations"] = {},
-6c7
-<     ["cache_file_path"] = "./cache/cr3cache/Tor_-_Ben_Collier.epub.a8bfab68.1.cr3",
----
->     ["cache_file_path"] = "/storage/emulated/0/koreader/cache/cr3cache/Tor_-_Ben_Collier.epub.a8bfab68.1.cr3",
-17c18
-<     ["copt_font_size"] = 24,
----
->     ["copt_font_size"] = 34,
-39,40c40,41
-<     ["doc_pages"] = 373,
-<     ["doc_path"] = "/mnt/onboard/Ben Collier/Tor (1724)/Tor - Ben Collier.epub",
----
->     ["doc_pages"] = 470,
->     ["doc_path"] = "/storage/emulated/0/books/Ben Collier/Tor (1724)/Tor - Ben Collier.epub",
-52d52
-<     ["fulltext_search_last_search_text"] = "redacted",
-66c66
-<     ["last_xpointer"] = "/body/DocFragment[18]/body/section/section[19]/ul/li[75]/text().0",
----
->     ["last_xpointer"] = "/body/DocFragment[12]/body/section/p[21]/text().0",
-72c72
-<     ["percent_finished"] = 1,
----
->     ["percent_finished"] = 0.4936170212766,
-74c74
-<     ["readermenu_tab_index"] = 1,
----
->     ["readermenu_tab_index"] = 7,
-81c81
-<         ["pages"] = 373,
----
->         ["pages"] = 470,
-87c87
-<         ["modified"] = "2024-07-22",
----
->         ["modified"] = "2024-07-23",
-```
-
-harder. conflicted version is marked as finished while current one
-isn't, which is wrong. Note that the latter comes from the Android
-device (`/storage/emulated`) and has a later timestamp: it's likely
-the file was open there *after* the book was finished and that
-erroneous state was saved.
-
-Conflict file moved in place instead of actual file.
-
-# book
-
-## conflict-20240810-010430-P2R7L33
-
-```
-3c3,6
-<     ["annotations"] = {},
----
->     ["book_style_tweak"] = "\
-> p.chapopeningtextno-indentcotx::before {content: '●'; display: block; text-align: center; font-size: 50%; margin: 1em}\
-> h1 + p.chapopeningtextno-indentcotx::before {content: ''; display: block; text-align: center; font-size: 50%; margin: 1em}",
->     ["book_style_tweak_enabled"] = true,
-6c9,20
-<         [2] = 1,
----
->         [2] = 176,
->     },
->     ["bookmarks"] = {
->         [1] = {
->             ["chapter"] = "Chapter Five: Breakout",
->             ["datetime"] = "2024-08-04 23:51:03",
->             ["highlighted"] = true,
->             ["notes"] = "Now, at risk of being accused of sexist stereotyping, I’d like to note that a lot of retail psychology (and sales) depends on the fact that men and women shop (or are trained to shop) in different ways. Broadly: women forage while men hunt. This is especially true of clothing, where I’ve noticed Mo can spend all afternoon searching for exactly the right pair of shoes and end up with a jacket, two bras, a skirt, and an umbrella—while I begin to sweat bullets and edge close to a panic attack if I can’t find exactly the correct size of plain black tee-shirt in Marks and Spencer within thirty seconds of entering the front door.",
->             ["page"] = "/body/DocFragment[13]/body/section/div/p[37]/text()[1].0",
->             ["pos0"] = "/body/DocFragment[13]/body/section/div/p[37]/text()[1].0",
->             ["pos1"] = "/body/DocFragment[13]/body/section/div/p[37]/text()[2].372",
->         },
-8d21
-<     ["bookmarks"] = {},
-11,12c24,25
-<     ["cache_file_path"] = "/storage/emulated/0/koreader/cache/cr3cache/The_Delirium-_Stross.epub.b1bcea22.1.cr3",
-<     ["config_panel_index"] = 1,
----
->     ["cache_file_path"] = "./cache/cr3cache/The_Delirium-_Stross.epub.b1bcea22.1.cr3",
->     ["config_panel_index"] = 6,
-14c27
-<     ["copt_block_rendering_mode"] = 3,
----
->     ["copt_block_rendering_mode"] = 2,
-43,45c56,58
-<     ["css"] = "./data/epub.css",
-<     ["doc_pages"] = 413,
-<     ["doc_path"] = "/storage/emulated/0/books/Charles Stross/The Delirium Brief (1705)/The Delirium Brief - Charles Stross.epub",
----
->     ["css"] = "./data/html5.css",
->     ["doc_pages"] = 634,
->     ["doc_path"] = "/mnt/onboard/Charles Stross/The Delirium Brief (1705)/The Delirium Brief - Charles Stross.epub",
-56c69
-<     ["floating_punctuation"] = 1,
----
->     ["floating_punctuation"] = 0,
-64c77,88
-<     ["highlight"] = {},
----
->     ["highlight"] = {
->         [255] = {
->             [1] = {
->                 ["chapter"] = "Chapter Five: Breakout",
->                 ["datetime"] = "2024-08-04 23:51:03",
->                 ["drawer"] = "lighten",
->                 ["pos0"] = "/body/DocFragment[13]/body/section/div/p[37]/text()[1].0",
->                 ["pos1"] = "/body/DocFragment[13]/body/section/div/p[37]/text()[2].372",

(Diff truncated)
tentative fixes for syncthing clusterfuckery
Here are the notes i painfully wrote down to get there, then realizing
those conflicts *kept* coming and I had to fix the underlying
issues. this is kept here in case they come back.
# Sample sync problems
## Book 1
### Conflict 20240802-232230-P2R7L33.lua
```
3,4c3,19
< ["annotations"] = {},
< ["bookmarks"] = {},
---
> ["annotations"] = {
> [1] = {
> ["chapter"] = "Chapter 7",
> ["datetime"] = "2024-07-26 02:43:05",
> ["page"] = "/body/DocFragment[10]/body/div/section/p[33]/text()[1].295",
> ["pageno"] = 110,
> ["text"] = "in Chapter 7",
> },
> },
> ["bookmarks"] = {
> [1] = {
> ["chapter"] = "Chapter 7",
> ["datetime"] = "2024-07-26 02:43:05",
> ["notes"] = "in Chapter 7",
> ["page"] = "/body/DocFragment[10]/body/div/section/p[33]/text()[1].295",
> },
> },
66c81
< ["last_xpointer"] = "/body/DocFragment[4]/body/div/section/h1/a[2]/text().0",
---
> ["last_xpointer"] = "/body/DocFragment[27]/body/div/section/h1.0",
70c85
< ["percent_finished"] = 0.011834319526627,
---
> ["percent_finished"] = 0.90532544378698,
```
A is the conflict file, B is the good version. good version has more
percent and extra annotations.
### Conflict 20240803-022141-P2R7L33.lua and 20240803-022217-P2R7L33.lua
Identical diff.
### .old conflict files
We assume those are useless (and, by the way, find the
`metadata.lua.old` to be equally garbage).
## Book 2
### Conflict 20240802-232233-P2R7L33.opf
```
anarcat@angela:Mastering Emacs (1668)[1]$ diff metadata.sync-conflict-20240802-232233-P2R7L33.opf metadata.opf
8c8
< <dc:contributor opf:file-as="calibre" opf:role="bkp">calibre (6.26.0) [https://calibre-ebook.com]</dc:contributor>
---
> <dc:contributor opf:file-as="calibre" opf:role="bkp">calibre (6.13.0) [https://calibre-ebook.com]</dc:contributor>
11a12,14
> <meta name="calibre:author_link_map" content="{&quot;Mickey Petersen&quot;: &quot;&quot;}"/>
> <meta name="calibre:series" content="Mastering Emacs"/>
> <meta name="calibre:series_index" content="28"/>
19c22
< <reference type="cover" title="Couverture" href="cover.jpg"/>
---
> <reference type="cover" title="Cover" href="cover.jpg"/>
```
spurious calibre metadata changes, latter has more fields, deleted
conflict.
`20240803-022300-P2R7L33.opf ` and `20240803-022211-P2R7L33`
identical.
## Book 3
### -conflict-20240724-090036-CVJZX7H.lua
```
1c1
< -- /mnt/onboard/Ben Collier/Tor (1724)/Tor - Ben Collier.sdr/metadata.epub.lua
---
> -- /storage/emulated/0/books/Ben Collier/Tor (1724)/Tor - Ben Collier.sdr/metadata.epub.lua
2a3
> ["annotations"] = {},
6c7
< ["cache_file_path"] = "./cache/cr3cache/Tor_-_Ben_Collier.epub.a8bfab68.1.cr3",
---
> ["cache_file_path"] = "/storage/emulated/0/koreader/cache/cr3cache/Tor_-_Ben_Collier.epub.a8bfab68.1.cr3",
17c18
< ["copt_font_size"] = 24,
---
> ["copt_font_size"] = 34,
39,40c40,41
< ["doc_pages"] = 373,
< ["doc_path"] = "/mnt/onboard/Ben Collier/Tor (1724)/Tor - Ben Collier.epub",
---
> ["doc_pages"] = 470,
> ["doc_path"] = "/storage/emulated/0/books/Ben Collier/Tor (1724)/Tor - Ben Collier.epub",
52d52
< ["fulltext_search_last_search_text"] = "redacted",
66c66
< ["last_xpointer"] = "/body/DocFragment[18]/body/section/section[19]/ul/li[75]/text().0",
---
> ["last_xpointer"] = "/body/DocFragment[12]/body/section/p[21]/text().0",
72c72
< ["percent_finished"] = 1,
---
> ["percent_finished"] = 0.4936170212766,
74c74
< ["readermenu_tab_index"] = 1,
---
> ["readermenu_tab_index"] = 7,
81c81
< ["pages"] = 373,
---
> ["pages"] = 470,
87c87
< ["modified"] = "2024-07-22",
---
> ["modified"] = "2024-07-23",
```
harder. conflicted version is marked as finished while current one
isn't, which is wrong. Note that the latter comes from the Android
device (`/storage/emulated`) and has a later timestamp: it's likely
the file was open there *after* the book was finished and that
erroneous state was saved.
Conflict file moved in place instead of actual file.
## Book 3
### conflict-20240810-010430-P2R7L33
```
3c3,6
< ["annotations"] = {},
---
> ["book_style_tweak"] = "\
> p.chapopeningtextno-indentcotx::before {content: '●'; display: block; text-align: center; font-size: 50%; margin: 1em}\
> h1 + p.chapopeningtextno-indentcotx::before {content: ''; display: block; text-align: center; font-size: 50%; margin: 1em}",
> ["book_style_tweak_enabled"] = true,
6c9,20
< [2] = 1,
---
> [2] = 176,
> },
> ["bookmarks"] = {
> [1] = {
> ["chapter"] = "Chapter Five: Breakout",
> ["datetime"] = "2024-08-04 23:51:03",
> ["highlighted"] = true,
> ["notes"] = "Now, at risk of being accused of sexist stereotyping, I’d like to note that a lot of retail psychology (and sales) depends on the fact that men and women shop (or are trained to shop) in different ways. Broadly: women forage while men hunt. This is especially true of clothing, where I’ve noticed Mo can spend all afternoon searching for exactly the right pair of shoes and end up with a jacket, two bras, a skirt, and an umbrella—while I begin to sweat bullets and edge close to a panic attack if I can’t find exactly the correct size of plain black tee-shirt in Marks and Spencer within thirty seconds of entering the front door.",
> ["page"] = "/body/DocFragment[13]/body/section/div/p[37]/text()[1].0",
> ["pos0"] = "/body/DocFragment[13]/body/section/div/p[37]/text()[1].0",
> ["pos1"] = "/body/DocFragment[13]/body/section/div/p[37]/text()[2].372",
> },
8d21
< ["bookmarks"] = {},
11,12c24,25
< ["cache_file_path"] = "/storage/emulated/0/koreader/cache/cr3cache/The_Delirium-_Stross.epub.b1bcea22.1.cr3",
< ["config_panel_index"] = 1,
---
> ["cache_file_path"] = "./cache/cr3cache/The_Delirium-_Stross.epub.b1bcea22.1.cr3",
> ["config_panel_index"] = 6,
14c27
< ["copt_block_rendering_mode"] = 3,
---
> ["copt_block_rendering_mode"] = 2,
43,45c56,58
< ["css"] = "./data/epub.css",
< ["doc_pages"] = 413,
< ["doc_path"] = "/storage/emulated/0/books/Charles Stross/The Delirium Brief (1705)/The Delirium Brief - Charles Stross.epub",
---
> ["css"] = "./data/html5.css",
> ["doc_pages"] = 634,
> ["doc_path"] = "/mnt/onboard/Charles Stross/The Delirium Brief (1705)/The Delirium Brief - Charles Stross.epub",
56c69
< ["floating_punctuation"] = 1,
---
> ["floating_punctuation"] = 0,
64c77,88
< ["highlight"] = {},
---
> ["highlight"] = {
> [255] = {
> [1] = {
> ["chapter"] = "Chapter Five: Breakout",
> ["datetime"] = "2024-08-04 23:51:03",
> ["drawer"] = "lighten",
> ["pos0"] = "/body/DocFragment[13]/body/section/div/p[37]/text()[1].0",
> ["pos1"] = "/body/DocFragment[13]/body/section/div/p[37]/text()[2].372",
> ["text"] = "Now, at risk of being accused of sexist stereotyping, I’d like to note that a lot of retail psychology (and sales) depends on the fact that men and women shop (or are trained to shop) in different ways. Broadly: women forage while men hunt. This is especially true of clothing, where I’ve noticed Mo can spend all afternoon searching for exactly the right pair of shoes and end up with a jacket, two bras, a skirt, and an umbrella—while I begin to sweat bullets and edge close to a panic attack if I can’t find exactly the correct size of plain black tee-shirt in Marks and Spencer within thirty seconds of entering the front door.",
> },
> },
> },
69c93
< ["hyph_trust_soft_hyphens"] = true,
---
> ["hyph_trust_soft_hyphens"] = false,
72c96
< ["last_xpointer"] = "/body/DocFragment[10]/body/section/div/h1/a/text().0",
---
> ["last_xpointer"] = "/body/DocFragment[23]/body/section/div/p[1]/text().0",
76c100
< ["percent_finished"] = 0.19128329297821,
---
> ["percent_finished"] = 1,
78c102
< ["readermenu_tab_index"] = 2,
---
> ["readermenu_tab_index"] = 1,
82c106
< ["highlights"] = 0,
---
> ["highlights"] = 1,
85c109
< ["pages"] = 413,
---
> ["pages"] = 634,
91c115,118
< ["font_family_all_inherit"] = true,
---
> ["footnote-inpage_classic_classnames_smaller"] = true,
> ["footnote-inpage_epub_smaller"] = false,
> ["footnote-inpage_fb2"] = false,
> ["text_align_most_justify"] = true,
94,95c121,122
< ["modified"] = "2024-07-29",
< ["status"] = "reading",
---
> ["modified"] = "2024-08-06",
> ["status"] = "complete",
```
compatibility problem? one uses highlight, the other bookmarks. latter
is finished, other isn't, and latter has a book style tweak. kept
latter (normal version).
`sync-conflict-20240810-133125-P2R7L33.lua` and `conflict-20240810-115213-P2R7L33.lua` identical.
## Book 4
### conflicts on covers
opened a file browser, looked at thumbnails, deleted garbage.
Note that there were similar conflicts on similar files here:
```
cover.jpg
cover.sync-conflict-20240802-232234-P2R7L33.jpg
cover.sync-conflict-20240803-022210-P2R7L33.jpg
cover.sync-conflict-20240803-022300-P2R7L33.jpg
metadata.opf
metadata.sync-conflict-20240802-232231-P2R7L33.opf
metadata.sync-conflict-20240803-022210-P2R7L33.opf
metadata.sync-conflict-20240803-022300-P2R7L33.opf
```
Assumed the OPF conflicts were like the cover.
## Book 5
### conflict-20240802-232235-P2R7L33.opf
```
16c16
< <meta name="calibre:timestamp" content="2024-02-21T02:50:30.862801+00:00"/>
---
> <meta name="calibre:timestamp" content="2024-02-21T02:50:30+00:00"/>
```
spurious calibre metadata change (timestamp *resolution*!),
deleted. two more sync conflicts
(`metadata.sync-conflict-20240803-022210-P2R7L33.opf`
`metadata.sync-conflict-20240803-022300-P2R7L33.opf`) were of
identical checksum
## Book 6
### conflict-20240802-232231-P2R7L33.opf
```
2c2
< <package xmlns="http://www.idpf.org/2007/opf" unique-identifier="uuid_id">
---
> <package xmlns="http://www.idpf.org/2007/opf" unique-identifier="uuid_id" version="2.0">
8c8
< <dc:contributor opf:file-as="calibre" opf:role="bkp">calibre (0.8.51) [http://calibre-ebook.com]</dc:contributor>
---
> <dc:contributor opf:file-as="calibre" opf:role="bkp">calibre (6.13.0) [https://calibre-ebook.com]</dc:contributor>
13,17c13,18
< <meta content="{&quot;Émile Nelligan&quot;: &quot;&quot;}" name="calibre:author_link_map"/>
< <meta content="2012-09-22T03:01:11+00:00" name="calibre:timestamp"/>
< <meta content="Poésies complètes" name="calibre:title_sort"/>
< <meta name="calibre:user_metadata:#emprunteur" content="{&quot;is_category&quot;: true, &quot;#extra#&quot;: null, &quot;kind&quot;: &quot;field&quot;, &quot;is_custom&quot;: true, &quot;is_csp&quot;: false, &quot;colnum&quot;: 1, &quot;column&quot;: &quot;value&quot;, &quot;rec_index&quot;: 22, &quot;search_terms&quot;: [&quot;#emprunteur&quot;], &quot;link_column&quot;: &quot;value&quot;, &quot;is_multiple2&quot;: {&quot;cache_to_list&quot;: &quot;|&quot;, &quot;ui_to_list&quot;: &quot;&amp;&quot;, &quot;list_to_ui&quot;: &quot; &amp; &quot;}, &quot;is_multiple&quot;: &quot;|&quot;, &quot;datatype&quot;: &quot;text&quot;, &quot;#value#&quot;: [], &quot;category_sort&quot;: &quot;value&quot;, &quot;table&quot;: &quot;custom_column_1&quot;, &quot;is_editable&quot;: true, &quot;label&quot;: &quot;emprunteur&quot;, &quot;display&quot;: {&quot;is_names&quot;: true}, &quot;name&quot;: &quot;Emprunté par&quot;}"/>
< <meta name="calibre:user_metadata:#read" content="{&quot;is_category&quot;: false, &quot;#extra#&quot;: null, &quot;kind&quot;: &quot;field&quot;, &quot;is_custom&quot;: true, &quot;is_csp&quot;: false, &quot;colnum&quot;: 2, &quot;column&quot;: &quot;value&quot;, &quot;rec_index&quot;: 23, &quot;search_terms&quot;: [&quot;#read&quot;], &quot;link_column&quot;: &quot;value&quot;, &quot;is_multiple2&quot;: {}, &quot;is_multiple&quot;: null, &quot;datatype&quot;: &quot;bool&quot;, &quot;#value#&quot;: false, &quot;category_sort&quot;: &quot;value&quot;, &quot;table&quot;: &quot;custom_column_2&quot;, &quot;is_editable&quot;: true, &quot;label&quot;: &quot;read&quot;, &quot;display&quot;: {}, &quot;name&quot;: &quot;Lu&quot;}"/>
---
> <meta name="calibre:author_link_map" content="{&quot;Émile Nelligan&quot;: &quot;&quot;}"/>
> <meta name="calibre:timestamp" content="2012-09-22T03:01:11+00:00"/>
> <meta name="calibre:title_sort" content="Poésies complètes"/>
> <meta name="calibre:user_metadata:#emprunteur" content="{&quot;table&quot;: &quot;custom_column_1&quot;, &quot;column&quot;: &quot;value&quot;, &quot;datatype&quot;: &quot;text&quot;, &quot;is_multiple&quot;: &quot;|&quot;, &quot;kind&quot;: &quot;field&quot;, &quot;name&quot;: &quot;Emprunté par&quot;, &quot;search_terms&quot;: [&quot;#emprunteur&quot;], &quot;label&quot;: &quot;emprunteur&quot;, &quot;colnum&quot;: 1, &quot;display&quot;: {&quot;is_names&quot;: true}, &quot;is_custom&quot;: true, &quot;is_category&quot;: true, &quot;link_column&quot;: &quot;value&quot;, &quot;category_sort&quot;: &quot;value&quot;, &quot;is_csp&quot;: false, &quot;is_editable&quot;: true, &quot;rec_index&quot;: 22, &quot;#value#&quot;: [], &quot;#extra#&quot;: null, &quot;is_multiple2&quot;: {&quot;cache_to_list&quot;: &quot;|&quot;, &quot;ui_to_list&quot;: &quot;&amp;&quot;, &quot;list_to_ui&quot;: &quot; &amp; &quot;}}"/>
> <meta name="calibre:user_metadata:#mm_annotations" content="{&quot;table&quot;: &quot;custom_column_3&quot;, &quot;column&quot;: &quot;value&quot;, &quot;datatype&quot;: &quot;comments&quot;, &quot;is_multiple&quot;: null, &quot;kind&quot;: &quot;field&quot;, &quot;name&quot;: &quot;Annotations&quot;, &quot;search_terms&quot;: [&quot;#mm_annotations&quot;], &quot;label&quot;: &quot;mm_annotations&quot;, &quot;colnum&quot;: 3, &quot;display&quot;: {}, &quot;is_custom&quot;: true, &quot;is_category&quot;: false, &quot;link_column&quot;: &quot;value&quot;, &quot;category_sort&quot;: &quot;value&quot;, &quot;is_csp&quot;: false, &quot;is_editable&quot;: true, &quot;rec_index&quot;: 23, &quot;#value#&quot;: null, &quot;#extra#&quot;: null, &quot;is_multiple2&quot;: {}}"/>
> <meta name="calibre:user_metadata:#read" content="{&quot;table&quot;: &quot;custom_column_2&quot;, &quot;column&quot;: &quot;value&quot;, &quot;datatype&quot;: &quot;bool&quot;, &quot;is_multiple&quot;: null, &quot;kind&quot;: &quot;field&quot;, &quot;name&quot;: &quot;Lu&quot;, &quot;search_terms&quot;: [&quot;#read&quot;], &quot;label&quot;: &quot;read&quot;, &quot;colnum&quot;: 2, &quot;display&quot;: {}, &quot;is_custom&quot;: true, &quot;is_category&quot;: false, &quot;link_column&quot;: &quot;value&quot;, &quot;category_sort&quot;: &quot;value&quot;, &quot;is_csp&quot;: false, &quot;is_editable&quot;: true, &quot;rec_index&quot;: 24, &quot;#value#&quot;: false, &quot;#extra#&quot;: null, &quot;is_multiple2&quot;: {}}"/>
20c21
< <reference href="cover.jpg" type="cover" title="Couverture"/>
---
> <reference type="cover" title="Cover" href="cover.jpg"/>
```
seems like metadata garbage, unreadable. other sync conflicts
identical
`metadata.sync-conflict-20240802-232231-P2R7L33.opf`
`metadata.sync-conflict-20240803-022210-P2R7L33.opf`
`metadata.sync-conflict-20240803-022300-P2R7L33.opf`
## Book 7
Another book was similar.
# Other notes
After dealing with *all* those conflicts, for some reason conflict
files *returned*. Again with the device ID `P2R7L3` which is, no
surprise, the kobo reader. That device has this weird issue that it
seems to rescan all files at each restart, and treats *all* of them as
new. This takes a ridiculously long time, of course, but more
crucially, is likely the cause of those conflicts.
In fact, while being on both devices, I cannot convince the kobo to
accept certain changes, namely deleting files.
diff --git a/blog/sync-conflicts.md b/blog/sync-conflicts.md
new file mode 100644
index 00000000..6cc24749
--- /dev/null
+++ b/blog/sync-conflicts.md
@@ -0,0 +1,240 @@
+
+# Book one
+
+## Conflict 20240802-232230-P2R7L33.lua
+
+```
+3,4c3,19
+<     ["annotations"] = {},
+<     ["bookmarks"] = {},
+---
+>     ["annotations"] = {
+>         [1] = {
+>             ["chapter"] = "Chapter 7",
+>             ["datetime"] = "2024-07-26 02:43:05",
+>             ["page"] = "/body/DocFragment[10]/body/div/section/p[33]/text()[1].295",
+>             ["pageno"] = 110,
+>             ["text"] = "in Chapter 7",
+>         },
+>     },
+>     ["bookmarks"] = {
+>         [1] = {
+>             ["chapter"] = "Chapter 7",
+>             ["datetime"] = "2024-07-26 02:43:05",
+>             ["notes"] = "in Chapter 7",
+>             ["page"] = "/body/DocFragment[10]/body/div/section/p[33]/text()[1].295",
+>         },
+>     },
+66c81
+<     ["last_xpointer"] = "/body/DocFragment[4]/body/div/section/h1/a[2]/text().0",
+---
+>     ["last_xpointer"] = "/body/DocFragment[27]/body/div/section/h1.0",
+70c85
+<     ["percent_finished"] = 0.011834319526627,
+---
+>     ["percent_finished"] = 0.90532544378698,
+```
+
+A is the conflict file, B is the good version. good version has more
+percent and extra annotations.
+
+## Conflict 20240803-022141-P2R7L33.lua and 20240803-022217-P2R7L33.lua
+
+Identical diff. 
+
+## .old conflict files
+
+We assume those are useless (and, by the way, find the
+`metadata.lua.old` to be equally garbage).
+
+# book 2
+
+## Conflict 20240802-232233-P2R7L33.opf
+
+```
+anarcat@angela:Mastering Emacs (1668)[1]$ diff  metadata.sync-conflict-20240802-232233-P2R7L33.opf metadata.opf
+8c8
+<         <dc:contributor opf:file-as="calibre" opf:role="bkp">calibre (6.26.0) [https://calibre-ebook.com]</dc:contributor>
+---
+>         <dc:contributor opf:file-as="calibre" opf:role="bkp">calibre (6.13.0) [https://calibre-ebook.com]</dc:contributor>
+11a12,14
+>         <meta name="calibre:author_link_map" content="{&quot;Mickey Petersen&quot;: &quot;&quot;}"/>
+>         <meta name="calibre:series" content="Mastering Emacs"/>
+>         <meta name="calibre:series_index" content="28"/>
+19c22
+<         <reference type="cover" title="Couverture" href="cover.jpg"/>
+---
+>         <reference type="cover" title="Cover" href="cover.jpg"/>
+```
+
+spurious calibre metadata changes, latter has more fields, deleted
+conflict.
+
+`20240803-022300-P2R7L33.opf ` and `20240803-022211-P2R7L33`
+identical.
+
+# book 3
+
+## -conflict-20240724-090036-CVJZX7H.lua 
+
+```
+1c1
+< -- /mnt/onboard/Ben Collier/Tor (1724)/Tor - Ben Collier.sdr/metadata.epub.lua
+---
+> -- /storage/emulated/0/books/Ben Collier/Tor (1724)/Tor - Ben Collier.sdr/metadata.epub.lua
+2a3
+>     ["annotations"] = {},
+6c7
+<     ["cache_file_path"] = "./cache/cr3cache/Tor_-_Ben_Collier.epub.a8bfab68.1.cr3",
+---
+>     ["cache_file_path"] = "/storage/emulated/0/koreader/cache/cr3cache/Tor_-_Ben_Collier.epub.a8bfab68.1.cr3",
+17c18
+<     ["copt_font_size"] = 24,
+---
+>     ["copt_font_size"] = 34,
+39,40c40,41
+<     ["doc_pages"] = 373,
+<     ["doc_path"] = "/mnt/onboard/Ben Collier/Tor (1724)/Tor - Ben Collier.epub",
+---
+>     ["doc_pages"] = 470,
+>     ["doc_path"] = "/storage/emulated/0/books/Ben Collier/Tor (1724)/Tor - Ben Collier.epub",
+52d52
+<     ["fulltext_search_last_search_text"] = "redacted",
+66c66
+<     ["last_xpointer"] = "/body/DocFragment[18]/body/section/section[19]/ul/li[75]/text().0",
+---
+>     ["last_xpointer"] = "/body/DocFragment[12]/body/section/p[21]/text().0",
+72c72
+<     ["percent_finished"] = 1,
+---
+>     ["percent_finished"] = 0.4936170212766,
+74c74
+<     ["readermenu_tab_index"] = 1,
+---
+>     ["readermenu_tab_index"] = 7,
+81c81
+<         ["pages"] = 373,
+---
+>         ["pages"] = 470,
+87c87
+<         ["modified"] = "2024-07-22",
+---
+>         ["modified"] = "2024-07-23",
+```
+
+harder. conflicted version is marked as finished while current one
+isn't, which is wrong. Note that the latter comes from the Android
+device (`/storage/emulated`) and has a later timestamp: it's likely
+the file was open there *after* the book was finished and that
+erroneous state was saved.
+
+Conflict file moved in place instead of actual file.
+
+# book
+
+## conflict-20240810-010430-P2R7L33
+
+```
+3c3,6
+<     ["annotations"] = {},
+---
+>     ["book_style_tweak"] = "\
+> p.chapopeningtextno-indentcotx::before {content: '●'; display: block; text-align: center; font-size: 50%; margin: 1em}\
+> h1 + p.chapopeningtextno-indentcotx::before {content: ''; display: block; text-align: center; font-size: 50%; margin: 1em}",
+>     ["book_style_tweak_enabled"] = true,
+6c9,20
+<         [2] = 1,
+---
+>         [2] = 176,
+>     },
+>     ["bookmarks"] = {
+>         [1] = {
+>             ["chapter"] = "Chapter Five: Breakout",
+>             ["datetime"] = "2024-08-04 23:51:03",
+>             ["highlighted"] = true,
+>             ["notes"] = "Now, at risk of being accused of sexist stereotyping, I’d like to note that a lot of retail psychology (and sales) depends on the fact that men and women shop (or are trained to shop) in different ways. Broadly: women forage while men hunt. This is especially true of clothing, where I’ve noticed Mo can spend all afternoon searching for exactly the right pair of shoes and end up with a jacket, two bras, a skirt, and an umbrella—while I begin to sweat bullets and edge close to a panic attack if I can’t find exactly the correct size of plain black tee-shirt in Marks and Spencer within thirty seconds of entering the front door.",
+>             ["page"] = "/body/DocFragment[13]/body/section/div/p[37]/text()[1].0",
+>             ["pos0"] = "/body/DocFragment[13]/body/section/div/p[37]/text()[1].0",
+>             ["pos1"] = "/body/DocFragment[13]/body/section/div/p[37]/text()[2].372",
+>         },
+8d21
+<     ["bookmarks"] = {},
+11,12c24,25
+<     ["cache_file_path"] = "/storage/emulated/0/koreader/cache/cr3cache/The_Delirium-_Stross.epub.b1bcea22.1.cr3",
+<     ["config_panel_index"] = 1,
+---
+>     ["cache_file_path"] = "./cache/cr3cache/The_Delirium-_Stross.epub.b1bcea22.1.cr3",
+>     ["config_panel_index"] = 6,
+14c27
+<     ["copt_block_rendering_mode"] = 3,
+---
+>     ["copt_block_rendering_mode"] = 2,
+43,45c56,58
+<     ["css"] = "./data/epub.css",
+<     ["doc_pages"] = 413,
+<     ["doc_path"] = "/storage/emulated/0/books/Charles Stross/The Delirium Brief (1705)/The Delirium Brief - Charles Stross.epub",
+---
+>     ["css"] = "./data/html5.css",
+>     ["doc_pages"] = 634,
+>     ["doc_path"] = "/mnt/onboard/Charles Stross/The Delirium Brief (1705)/The Delirium Brief - Charles Stross.epub",
+56c69
+<     ["floating_punctuation"] = 1,
+---
+>     ["floating_punctuation"] = 0,
+64c77,88
+<     ["highlight"] = {},
+---
+>     ["highlight"] = {
+>         [255] = {
+>             [1] = {
+>                 ["chapter"] = "Chapter Five: Breakout",
+>                 ["datetime"] = "2024-08-04 23:51:03",
+>                 ["drawer"] = "lighten",
+>                 ["pos0"] = "/body/DocFragment[13]/body/section/div/p[37]/text()[1].0",
+>                 ["pos1"] = "/body/DocFragment[13]/body/section/div/p[37]/text()[2].372",

(Diff truncated)
add link to dcs-cli
diff --git a/blog/2024-08-15-why-trixie.md b/blog/2024-08-15-why-trixie.md
index df326510..d0904e63 100644
--- a/blog/2024-08-15-why-trixie.md
+++ b/blog/2024-08-15-why-trixie.md
@@ -29,7 +29,8 @@ Trixie (testing) already that I am not using yet, but I find
 interesting enough to list here.
 
 - [codesearch](https://code.google.com/p/codesearch/): search all of Debian's source code (tens of
-  thousands of packages) from the commandline!
+  thousands of packages) from the commandline! (see also [dcs-cli](https://github.com/jwilk/dcs-cli),
+  not in Debian)
 - [dasel](https://github.com/tomwright/dasel): JSON/YML/XML/CSV parser, similar to jq, but different
   syntax, not sure I'd grow into it, but often need to parse YML like
   JSON and failing

fix broken link
diff --git a/blog/2024-08-15-why-trixie.md b/blog/2024-08-15-why-trixie.md
index 76332e52..df326510 100644
--- a/blog/2024-08-15-why-trixie.md
+++ b/blog/2024-08-15-why-trixie.md
@@ -70,8 +70,8 @@ that can just be installed from unstable:
 - [asn](https://github.com/nitefood/asn/): IP address forensics
 - [markdownlint](https://github.com/markdownlint/markdownlint): markdown linter, I use that *a lot*
 - [poweralertd](https://sr.ht/~kennylevinsen/poweralertd): pops up "your battery is almost empty" messages
-- [swaync]( (stuck to a libc update)): used as part of my status bar, yet another status bar
-  basically, a little noisy
+- [sway-notification-center](https://github.com/ErikReider/SwayNotificationCenter): used as part of my status bar, yet another status bar
+  basically, a little noisy, stuck in a libc dep update
 - [tailspin](https://github.com/bensadeh/tailspin): used to color logs
 
 # Out of date packages

done with freebsd upgrades
diff --git a/services/upgrades.mdwn b/services/upgrades.mdwn
index 41ea1907..d1002201 100644
--- a/services/upgrades.mdwn
+++ b/services/upgrades.mdwn
@@ -2,7 +2,7 @@ Oui, je peux vous aider à faire des mises à jour de votre ordinateur, si:
 
  1. si je vous connais
  2. si j'ai le temps
- 3. si c'est une machine Debian ou FreeBSD
+ 3. si c'est une machine Debian <del>ou FreeBSD</del>
  4. si vous pouvez pas vous payer [koumbit.org](http://koumbit.org/)
 
 # Documentation locale

cross-ref upgrades pages
diff --git a/blog/2024-08-15-why-trixie.md b/blog/2024-08-15-why-trixie.md
index 9f7f6244..76332e52 100644
--- a/blog/2024-08-15-why-trixie.md
+++ b/blog/2024-08-15-why-trixie.md
@@ -16,7 +16,9 @@ But at this point, on my laptop, I am feeling like I'm [missing
 out](https://en.wikipedia.org/wiki/Fear_of_missing_out). This page, therefore, is an evolving document that is a twist
 on the classic [NewIn](https://wiki.debian.org/NewIn) game. Last time I played seems to be
 [[#newinwheezy|2013-05-01-new-debian-release-my-contributions-newinwheezy-game]]
-(2013!), so really, I'm due for an update.
+(2013!), so really, I'm due for an update. (To be fair to myself, I do
+keep tabs on upgrades quite well at [[home|services/upgrades]] and
+[work](https://gitlab.torproject.org/tpo/tpa/team/-/wikis/howto/upgrades), which do have their share of "new in", just after the fact.)
 
 [[!toc]]
 
@@ -117,4 +119,4 @@ it's easy to prepare for that (just pin testing).
 
 
 <!-- posted to the federation on 2024-08-15T23:41:37.435834 -->
-[[!mastodon "https://kolektiva.social/@Anarcat/112969626239564922"]]
\ No newline at end of file
+[[!mastodon "https://kolektiva.social/@Anarcat/112969626239564922"]]

Merge remote-tracking branch 'origin/main'
post to mastodon
diff --git a/blog/2024-08-15-why-trixie.md b/blog/2024-08-15-why-trixie.md
index 93a7d594..63f0e763 100644
--- a/blog/2024-08-15-why-trixie.md
+++ b/blog/2024-08-15-why-trixie.md
@@ -97,3 +97,7 @@ If you know of cool things I'm missing out of, then by all means let
 me know!
 
 [[!tag debian-planet python-planet debian packaging upgrade]]
+
+
+<!-- posted to the federation on 2024-08-15T23:41:37.435834 -->
+[[!mastodon "https://kolektiva.social/@Anarcat/112969626239564922"]]
\ No newline at end of file

link to scripts
diff --git a/blog/2024-08-15-why-trixie.md b/blog/2024-08-15-why-trixie.md
index 69b49686..14f6091d 100644
--- a/blog/2024-08-15-why-trixie.md
+++ b/blog/2024-08-15-why-trixie.md
@@ -79,7 +79,7 @@ that are somewhat lacking and could benefit from an upgrade.
 
 - [firmware-iwlwifi](https://git.kernel.org/cgit/linux/kernel/git/firmware/linux-firmware.git): out of date, can install from unstable
 - [fuzzel][] / [foot][]: log level noises [A][], [B][], fuzzel [fix
-  not in debian yet][], and if we get to 1.11, scripts in `~/bin`
+  not in debian yet][], and if we get to 1.11, my [scripts](https://gitlab.com/anarcat/scripts/) in `~/bin`
   should be patched to use `--cache`
 - [pandoc](https://pandoc.org/): [3.0](https://github.com/jgm/pandoc/releases/tag/3.0) is ridiculously huge, but particularly [remove
   spaces after list marker](https://github.com/jgm/pandoc/issues/7172)

toc, last words
diff --git a/blog/2024-08-15-why-trixie.md b/blog/2024-08-15-why-trixie.md
index ba8c3fe9..69b49686 100644
--- a/blog/2024-08-15-why-trixie.md
+++ b/blog/2024-08-15-why-trixie.md
@@ -18,6 +18,8 @@ on the classic [NewIn](https://wiki.debian.org/NewIn) game. Last time I played s
 [[#newinwheezy|2013-05-01-new-debian-release-my-contributions-newinwheezy-game]]
 (2013!), so really, I'm due for an update.
 
+[[!toc]]
+
 # New packages to explore
 
 Those tools are shiny new things available in unstable or perhaps
@@ -93,6 +95,8 @@ that are somewhat lacking and could benefit from an upgrade.
 [B]: https://codeberg.org/dnkl/foot/pulls/1215
 [fix not in debian yet]: https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=1078784
 
+# Last words
+
 If you know of cool things I'm missing out of, then by all means let
 me know!
 
@@ -102,4 +106,11 @@ think I'd be doing the jump now. But considering how easier it is to
 develop Debian (and how important it is to test the next release!),
 I'll probably upgrade soon.
 
+Previously, I was running Debian testing (which why the slug on that
+article is `why-trixie`), but now I'm actually considering just
+running unstable on my laptop directly anyways. It's been a long time
+since we had any significant instability there, and I can typically
+deal with whatever happens, except maybe when I'm traveling, and then
+it's easy to prepare for that (just pin testing).
+
 [[!tag debian-planet python-planet debian packaging upgrade]]

upgrading soon
diff --git a/blog/2024-08-15-why-trixie.md b/blog/2024-08-15-why-trixie.md
index 93a7d594..ba8c3fe9 100644
--- a/blog/2024-08-15-why-trixie.md
+++ b/blog/2024-08-15-why-trixie.md
@@ -96,4 +96,10 @@ that are somewhat lacking and could benefit from an upgrade.
 If you know of cool things I'm missing out of, then by all means let
 me know!
 
+That said, overall, this is a pretty short list! I have most of what I
+need in stable right now, and if I wasn't a Debian developer, I don't
+think I'd be doing the jump now. But considering how easier it is to
+develop Debian (and how important it is to test the next release!),
+I'll probably upgrade soon.
+
 [[!tag debian-planet python-planet debian packaging upgrade]]

fomo
diff --git a/blog/2024-08-15-why-trixie.md b/blog/2024-08-15-why-trixie.md
new file mode 100644
index 00000000..93a7d594
--- /dev/null
+++ b/blog/2024-08-15-why-trixie.md
@@ -0,0 +1,99 @@
+[[!meta title="Why I should be running Debian unstable right now"]]
+
+So a common theme on the Internet about Debian is [so old](https://workaround.org/debian-packages-are-so-old/). And
+right, I am getting close to the stage that I feel a little laggy: I
+am using a bunch of backports for packages I need, and I'm missing a
+bunch of *other* packages that just landed in unstable and didn't make
+it to backports for various reasons.
+
+I disagree that "old" is a bad thing: we definitely run Debian stable
+on a fleet of about 100 servers and can barely keep up, I would make
+it *older*. And "old" is a good thing: (port) wine and (any) beer
+needs time to age properly, and so do humans, although some humans
+never seem to grow old enough to find wisdom.
+
+But at this point, on my laptop, I am feeling like I'm [missing
+out](https://en.wikipedia.org/wiki/Fear_of_missing_out). This page, therefore, is an evolving document that is a twist
+on the classic [NewIn](https://wiki.debian.org/NewIn) game. Last time I played seems to be
+[[#newinwheezy|2013-05-01-new-debian-release-my-contributions-newinwheezy-game]]
+(2013!), so really, I'm due for an update.
+
+# New packages to explore
+
+Those tools are shiny new things available in unstable or perhaps
+Trixie (testing) already that I am not using yet, but I find
+interesting enough to list here.
+
+- [codesearch](https://code.google.com/p/codesearch/): search all of Debian's source code (tens of
+  thousands of packages) from the commandline!
+- [dasel](https://github.com/tomwright/dasel): JSON/YML/XML/CSV parser, similar to jq, but different
+  syntax, not sure I'd grow into it, but often need to parse YML like
+  JSON and failing
+- [fyi](https://codeberg.org/dnkl/fyi): notify-send replacement
+- [git-subrepo](https://github.com/ingydotnet/git-subrepo): git-submodule replacement I am considering
+- [gtklock](https://github.com/jovanlanik/gtklock): swaylock replacement with bells and whistles,
+  particularly interested in showing time, battery and so on
+- [hyprland](https://hyprland.org): possible Sway replacement, but there are [rumors of a
+  toxic community](https://drewdevault.com/2023/09/17/Hyprland-toxicity.html) ([rebuttal](https://blog.vaxry.net/articles/2023-hyprlandsCommunity), I haven't reviewed either in
+  detail), so approach carefully)
+- [ruff](https://github.com/charliermarsh/ruff/): faster Python formatter and linter, flake8/black/isort
+  replacement, alas not mypy/LSP unfortunately, designed to be ran
+  *alongside* such a tool, which is [not possible in Emacs eglot right
+  now](https://github.com/joaotavora/eglot/discussions/1429#discussioncomment-10149990), but [is possible in lsp-mode](https://github.com/emacs-lsp/lsp-mode/pull/469)
+- [sfwbar](https://github.com/LBCrion/sfwbar): pretty status bar, may replace waybar, which i am
+  somewhat unhappy with (my UTC clock disappears randomly)
+- [spytrap-adb](https://github.com/spytrap-org/spytrap-adb): cool spy gear
+
+# New packages I won't use
+
+Those are packages that I *have* tested because I found them
+interesting, but ended up not using, but I think people could find
+interesting anyways.
+
+- [kew](https://github.com/ravachol/kew): surprisingly fast music player, parsed my entire library
+  (which is huge) instantaneously and just started playing (I still
+  use [Supersonic](https://github.com/dweymouth/supersonic/), for which I maintain a [flatpak](https://github.com/flathub/io.github.dweymouth.supersonic) on my
+  [Navidrome](https://www.navidrome.org/) server)
+- [mdformat](https://tracker.debian.org/mdformat): good markdown formatter, think `black` or `gofmt` but
+  for markdown), but it [didn't actually do what I needed](https://github.com/executablebooks/mdformat/issues/420), and
+  it's not quite as opinionated as it should (or could) be)
+
+# Backports already in use
+
+Those are packages I already use regularly, which have backports or
+that can just be installed from unstable:
+
+- [asn](https://github.com/nitefood/asn/): IP address forensics
+- [markdownlint](https://github.com/markdownlint/markdownlint): markdown linter, I use that *a lot*
+- [poweralertd](https://sr.ht/~kennylevinsen/poweralertd): pops up "your battery is almost empty" messages
+- [swaync]( (stuck to a libc update)): used as part of my status bar, yet another status bar
+  basically, a little noisy
+- [tailspin](https://github.com/bensadeh/tailspin): used to color logs
+
+# Out of date packages
+
+Those are packages that *are* in Debian stable (Bookworm) already, but
+that are somewhat lacking and could benefit from an upgrade.
+
+- [firmware-iwlwifi](https://git.kernel.org/cgit/linux/kernel/git/firmware/linux-firmware.git): out of date, can install from unstable
+- [fuzzel][] / [foot][]: log level noises [A][], [B][], fuzzel [fix
+  not in debian yet][], and if we get to 1.11, scripts in `~/bin`
+  should be patched to use `--cache`
+- [pandoc](https://pandoc.org/): [3.0](https://github.com/jgm/pandoc/releases/tag/3.0) is ridiculously huge, but particularly [remove
+  spaces after list marker](https://github.com/jgm/pandoc/issues/7172)
+- [podman](https://github.com/containers/podman): [better systemd integration](https://www.redhat.com/sysadmin/quadlet-podman)
+- [pubpaste](https://gitlab.com/anarcat/pubpaste/): out of date, can install from unstable
+- [tremotesf](https://github.com/equeim/tremotesf2): out of date backport
+- [undertime](https://gitlab.com/anarcat/undertime): out of date, can install from unstable
+- [yt-dlp](https://github.com/yt-dlp/yt-dlp): out of date, can install from unstable
+
+[fuzzel]: https://codeberg.org/dnkl/fuzzel
+[foot]: https://codeberg.org/dnkl/foot
+[A]: https://codeberg.org/dnkl/fuzzel/pulls/266
+[B]: https://codeberg.org/dnkl/foot/pulls/1215
+[fix not in debian yet]: https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=1078784
+
+If you know of cool things I'm missing out of, then by all means let
+me know!
+
+[[!tag debian-planet python-planet debian packaging upgrade]]

another month, another font
diff --git a/blog/2024-05-29-playing-with-fonts-again.md b/blog/2024-05-29-playing-with-fonts-again.md
index 3b708785..9357f2e7 100644
--- a/blog/2024-05-29-playing-with-fonts-again.md
+++ b/blog/2024-05-29-playing-with-fonts-again.md
@@ -243,6 +243,10 @@ I'm not using them:
   dotted, relied on metrics for legibility, spacing issue in box
   drawing, not in Debian
 
+- [victor mono](https://rubjo.github.io/victor-mono/): italics are cursive by default (distracting),
+  ligatures by default, looks good, more compressed than commit mono,
+  good candidate otherwise, has a [nice and compact proof sheet](https://rubjo.github.io/victor-mono/img/styles-dark.42978ce3.png)
+
 So, if I get tired of Commit Mono, I might probably try, in order:
 
 1. Hack

some research on tablets
diff --git a/hardware/tablet.mdwn b/hardware/tablet.mdwn
index a8509063..14d2e7d5 100644
--- a/hardware/tablet.mdwn
+++ b/hardware/tablet.mdwn
@@ -338,6 +338,33 @@ direct sunlight. It's also not good for your eyes and your sleep, but
 those are generally cheaper and more powerful than ebook readers
 because the technology is more common.
 
+## 2024 update
+
+Right now, I am considering a new tablet since I bricked the Samsung
+(!). My main concern with that tablet was that it was stuck in
+Samsung's crap Android OS, and updates were locked behind a login
+wall. It was also annoying not to be able to install my own firmware
+or at least clean up the spyware.
+
+Besides, now I'm considering perhaps using a normal Linux distro as a
+base for a tablet, now that Organic Maps is available in
+Flatpak... (My biggest blocker was pretty much missing OSMand, but OM
+is a good replacement.)
+
+I [wrote a spec on reddit](https://old.reddit.com/r/linuxhardware/comments/1e953mx/oled_tablet_running_linux_android_acceptable_if/), and it looks like the intersection of
+"OLED" and "mainline linux" is pretty much impossible except perhaps
+the [ASUS T3300](https://www.asus.com/laptops/for-home/vivobook/vivobook-13-slate-oled-t3300/) although it's not clear if that runs mainline or
+not. According to [this thread](https://old.reddit.com/r/linuxhardware/comments/woqf2q/anyone_using_linux_on_vivobook_13_slate_oled_t3300/), Ubuntu *works* except for the
+camera, and ChromeOS works except the camera and fingerprint
+reader. [Similar report from Arch Linux](https://wiki.archlinux.org/title/Laptop/ASUS#Vivobook). Pen requires charging
+unfortunately, so probably not great.
+
+Alternatively, I've been told Samsung is not *that* bad and perhaps
+it's worth giving them a try again, with the understanding it will
+*never* be flashed with a proper OS...
+
+Why can't we have nice things?
+
 ## Star Labs
 
 https://ca.starlabs.systems/pages/starlite

more image viewers and issues with current ones
diff --git a/software/desktop/wayland.md b/software/desktop/wayland.md
index cb8c3128..13defeaf 100644
--- a/software/desktop/wayland.md
+++ b/software/desktop/wayland.md
@@ -730,6 +730,39 @@ fuzzy and the thumbnail preview just didn't work anymore (filed as
 scaling][]. All of those problems were solved and I'm now happily
 using Geeqie, although I still think the UI is weird.
 
+My main frustration with *all* image viewers I could find out there is
+that they fail in one or multiple of those ways:
+
+ * too slow (e.g. Darktable used to be fast, but now fails at "just
+   scroll quickly through the collection)
+
+ * too roomy grids (e.g. geeqie has huge gaps around images, darktable
+   is better, but also has big gaps, no image viewer I know correctly
+   handles portraits and landscape views (that is, by scaling
+   portraits images to be as high as landscape images so they all fit
+   on the same line, or at least arranging a clever mosaic)
+
+ * clunky (e.g. Darktable used to have a <kbd>z</kbd> key to flip
+   between full screen preview of an image and the light table, that's
+   gone and I don't know how to find it again; geeqie's side panel is
+   stuck to the image, and i keep struggling to find ways to get rid
+   of it)
+
+ * requires rescan (e.g. Digikam required a couple of hours to even
+   *start* showing me thumbnails)
+
+ * crashes (both Digikam and Darktable segfault on me regularly)
+
+ * heavy (Darktable is a memory and CPU hog, and keeps a 30GB
+   thumbnail folder without which it just can't show images
+   efficiently)
+
+My standard for comparison is apps like Google Photos online which
+have nice mosaic views, or Aves Libre on Android that you can just zip
+through hundreds of images with the flick of a finger, without any
+prior scanning. Aves fits all images in squares, which is an
+acceptable compromise for me.
+
 Alternatives:
 
  * [GNOME Photos][]: stock GNOME image viewer, requires
@@ -753,6 +786,9 @@ Alternatives:
    2 minutes to index 2400 photos, hangs when I click to expand
    photos, iterates into `.git/annex` directories, generating dupes,
    not in Debian
+ * [qimgv][]: grid view, "fast", themes, shortcuts, copy/move images,
+   basic editing (crop/rotate/resize), scripting, video support, in
+   Debian
  * [swayimg][]: overlay, in Debian
  * [tiny image finder][]: grid viewer, looks promising but Flatpak
    failed to render any image
@@ -782,6 +818,7 @@ list of image viewers, not necessarily ported to Wayland.
 [tiny image finder]: https://levz.dev/image-finder/
 [GNOME Photos]: https://wiki.gnome.org/Apps/Photos
 [X-apps pix]: https://github.com/linuxmint/pix/
+[qimgv]: https://github.com/easymodo/qimgv
 
 ## Media player: mpv, gmpc / sublime
 
@@ -986,10 +1023,11 @@ how many things you were using are tightly bound to X.
    [swaybg][] just loads a *single* image, duh. [oguri][] might be a
    solution, but unmaintained, [used here][], not in
    Debian. [wallutils][] is another option, also not in
-   Debian. For now I just don't have a wallpaper, the background is a
-   solid gray, which is better than Xorg's default (which is whatever
-   crap was left around a buffer by the previous collection of
-   programs, basically)
+   Debian. [azote][] is now in Debian and seems like a good
+   alternative. For now I just don't have a wallpaper, the background
+   is a solid gray, which is better than Xorg's default (which is
+   whatever crap was left around a buffer by the previous collection
+   of programs, basically)
 
  * notifications: previously [dunst][] in some places, which works
    well in both Xorg and Wayland, not a blocker, [fnott][], [salut][]
@@ -1058,6 +1096,7 @@ See also [this list of useful addons][] and [this other list][] for other app al
 [this list of useful addons]: https://github.com/swaywm/sway/wiki/Useful-add-ons-for-sway
 [this other list]: https://github.com/swaywm/sway/wiki/i3-Migration-Guide
 [fnott]: https://codeberg.org/dnkl/fnott
+[azote]: https://github.com/nwg-piotr/azote
 
 ## More X11 / Wayland equivalents
 

push notifications for mbsync
diff --git a/blog/2021-11-21-mbsync-vs-offlineimap.md b/blog/2021-11-21-mbsync-vs-offlineimap.md
index 5222390f..5039f2fe 100644
--- a/blog/2021-11-21-mbsync-vs-offlineimap.md
+++ b/blog/2021-11-21-mbsync-vs-offlineimap.md
@@ -1048,6 +1048,8 @@ Those are all the options I have considered, in alphabetical order
    server, and written in C
  * [getmail](https://pyropus.ca./software/getmail/): fetchmail replacement, IMAP/POP3 support, supports
    incremental runs, classification rules, Python
+ * [imapnotify](https://www.npmjs.com/package/imapnotify) (also [goimapnotify](https://gitlab.com/shackra/goimapnotify), [python-imapnotify](https://github.com/a-sk/python-imapnotify)):
+   run a script when "IMAP IDLE" pings, not a puller itself
  * [imapsync](https://imapsync.lamiral.info/): one-way only, has another [list of alternatives](https://imapsync.lamiral.info/S/external.shtml)
  * [interimap](https://guilhem.org/interimap/): syncs two IMAP servers, [apparently faster](https://guilhem.org/interimap/benchmark.html) than
    `doveadm` and `offlineimap`, but requires running an IMAP server
@@ -1055,7 +1057,8 @@ Those are all the options I have considered, in alphabetical order
  * [isync/mbsync](http://isync.sf.net/): TLS client certs and SSH tunnels, fast,
    incremental, IMAP/POP/Maildir support, multiple mailbox, trash and
    recursion support, and generally has good words from multiple
-   Debian and notmuch people ([Arch tutorial](https://wiki.archlinux.org/title/Isync)), written in C,
+   Debian and notmuch people ([Arch tutorial](https://wiki.archlinux.org/title/Isync)), supports [push
+   notifications](https://wiki.archlinux.org/title/isync#With_imapnotify) through imapnotify (see above) written in C,
    review above
  * [mail-sync](https://blog.hades.lkamp.de/mail-sync/): notify support, happens over any piped transport
    (e.g. ssh), diff/patch system, requires binary on both ends,

rsync.net borg configuration
diff --git a/services/backup.mdwn b/services/backup.mdwn
index d5f81e1e..62a59a05 100644
--- a/services/backup.mdwn
+++ b/services/backup.mdwn
@@ -611,6 +611,132 @@ Then the object store is added and fetched:
 The first line is critical: `initremote` might create a new encryption
 key instead of reusing the existing one?
 
+## rsync.net backups
+
+rsync.net is quirky. they h ave an old borg version so you need to
+specify:
+
+    export BORG_REMOTE_PATH=/usr/local/bin/borg1/borg1
+
+otherwise you get all sorts of warnings and, ultimately, can't
+actually backup. They also do daily snapshots which is not super
+useful with borg.
+
+Then it's kind of weird to figure out where to connect. You need to
+login to https://www.rsync.net/ then click on the `FMT` link that will
+show you a hostname to connect to, which is *also* your username. Then
+everything happens over SSH, for example you can look at your quota
+with:
+
+    ssh fm1234@fm1234.rsync.net quota
+
+My username, for example, is `fm1234` (redacted) above.
+
+They have nice server-side ZFS snapshots but that's not very useful
+for me as I do not want to trust them with my cleartext data, so I use
+borg for my backups. The magic borg URL is something like:
+
+    export BORG_REPO="ssh://fm1234@fm1234.rsync.net/data1/home/fm1234/borg-marcos"
+
+First backup is relatively fast, but doesn't quite saturate my uplink
+(~5-10mbps vs 50mbps), not sure where that bottleneck is, could be the
+local disk as well. Here is the server-side backup:
+
+```
+------------------------------------------------------------------------------
+Repository: ssh://fm1234@fm1234.rsync.net/data1/home/fm1234/borg-marcos
+Archive name: marcos-auto-2024-07-03T15:58:38
+Archive fingerprint: 062f69b4a6692a09ba6f8cf41e9297c37599e93b77bd1e7de14373bef5d97459
+Time (start): Wed, 2024-07-03 15:58:49
+Time (end):   Thu, 2024-07-04 00:18:29
+Duration: 8 hours 19 minutes 39.56 seconds
+Number of files: 2123411
+Utilization of max. archive size: 1%
+------------------------------------------------------------------------------
+                       Original size      Compressed size    Deduplicated size
+This archive:              204.00 GB            129.49 GB            114.67 GB
+All archives:              204.00 GB            129.49 GB            114.72 GB
+
+                       Unique chunks         Total chunks
+Chunk index:                 1791565              2170349
+------------------------------------------------------------------------------
+```
+
+Another incremental run was of course much faster:
+
+```
+------------------------------------------------------------------------------
+Repository: ssh://fm1234@fm1234.rsync.net/data1/home/fm1234/borg-marcos
+Archive name: marcos-auto-2024-07-04T13:34:44
+Archive fingerprint: 17a50d859f600af29185b4332c1f274f650d303f5aec1157a67643f4ef1b1c4f
+Time (start): Thu, 2024-07-04 13:35:00
+Time (end):   Thu, 2024-07-04 13:42:25
+Duration: 7 minutes 24.86 seconds
+Number of files: 2123656
+Utilization of max. archive size: 1%
+------------------------------------------------------------------------------
+                       Original size      Compressed size    Deduplicated size
+This archive:              204.10 GB            129.51 GB            506.07 MB
+All archives:              408.10 GB            259.00 GB            115.22 GB
+
+                       Unique chunks         Total chunks
+Chunk index:                 1792561              4330539
+------------------------------------------------------------------------------
+```
+
+Here, obviously, bandwidth is not the bottleneck, we're probably
+blocked by disk I/O, specifically walking the directories. The
+resulting bandwidth, for the above 506MB/7m25s, is 1.1MB/s.
+
+The laptop job aborted halfway (after 4.32GB and 16 hours), but that
+might be because the laptop went to sleep: indeed, the process
+terminated when I came back in the office... The final status was:
+
+```
+------------------------------------------------------------------------------
+Repository: ssh://fm1234@fm1234.rsync.net/data1/home/fm1234/borg-angela
+Archive name: angela-2024-07-04T09:48:18.194260
+Archive fingerprint: c58891e2a915a0145bd990861eaf702687747a8bf6549a612b7bce52386b382d
+Time (start): Thu, 2024-07-04 09:49:44
+Time (end):   Thu, 2024-07-04 12:27:20
+Duration: 2 hours 37 minutes 35.71 seconds
+Number of files: 2354887
+Utilization of max. archive size: 1%
+------------------------------------------------------------------------------
+                       Original size      Compressed size    Deduplicated size
+This archive:              149.95 GB            117.18 GB             49.81 GB
+All archives:              150.32 GB            117.27 GB            102.98 GB
+
+                       Unique chunks         Total chunks
+Chunk index:                 1841394              3576009
+------------------------------------------------------------------------------
+```
+
+Note that during the first full backup, both backups were running in
+parallel so that has also impacted performance.
+
+The incremental on the laptop had similar performance:
+
+```
+------------------------------------------------------------------------------
+Repository: ssh://fm1702@fm1702.rsync.net/data1/home/fm1702/borg-angela
+Archive name: angela-2024-07-04T13:48:48.403736
+Archive fingerprint: a036c2cc424340b77744cd97cb35c461a69743154c28cfbb3a7538b40e64b246
+Time (start): Thu, 2024-07-04 13:49:08
+Time (end):   Thu, 2024-07-04 13:57:54
+Duration: 8 minutes 45.95 seconds
+Number of files: 2354928
+Utilization of max. archive size: 1%
+------------------------------------------------------------------------------
+                       Original size      Compressed size    Deduplicated size
+This archive:              149.96 GB            117.18 GB            471.51 MB
+All archives:              300.28 GB            234.45 GB            103.46 GB
+
+                       Unique chunks         Total chunks
+Chunk index:                 1842235              5951877
+------------------------------------------------------------------------------
+```
+
 ## References
 
 Borg:

rewire phone page to show current status first
diff --git a/hardware/phone.mdwn b/hardware/phone.mdwn
index ede191a7..1479a4f1 100644
--- a/hardware/phone.mdwn
+++ b/hardware/phone.mdwn
@@ -8,6 +8,192 @@ phones as well:
 
 [[!toc levels=2]]
 
+# Current phone
+
+2024: I have given up and switched to Pixels, see
+[[blog/2021-01-13-new-phone]] for details. I have used a Pixel 4a
+which had a flaky screen after a year and switched to a 6a. I liked
+the 4a but the 6a is too large. I used the "Google" case for the phone
+at first but switched to [Spigen Liquid Air](https://www.spigen.com/collections/pixel-6-series-case-collection/products/pixel-6-series-case-liquid-air?variant=41718301524015) case that seems to
+work well so far.
+
+# Previous phones
+
+## HTC One S
+
+See [[htc-one-s]] for config details. [Specs](http://www.gsmarena.com/htc_one_s-4574.php):
+
+ * Dual-core 1.5 GHz Krait
+ * 16 GB, 1 GB RAM
+ * 8 MP, autofocus, LED flash, check quality
+ * FM radio, RDS
+ * Wi-Fi 802.11 b/g/n, DLNA, hotspot
+ * A-GPS
+ * Non-removable battery, Up to 317 h, talk up to 10 h 30 min
+ * 130.9 x 65 x 7.8 mm (5.15 x 2.56 x 0.31 in)
+ * 119.5 g (4.20 oz)
+ * 4.3" (~59.9% screen-to-body ratio)
+
+## HTC Dream
+
+The [[!wikipedia HTC Dream]] was the first commercial Android phone. It still works, although it is a little old and buggy here.
+
+### Android / Cyanogenmod support
+
+One of the issues with the device is that it doesn't (or can't!) run more recent Android releases, which basically means no software support. It runs Android 2.2 / CM 6.1!
+
+ * [porting 2.3/CM 7 to it](http://forum.cyanogenmod.com/topic/13579-gingerbread-on-the-magicdream/)
+ * [android 4.1 / CM 10 ported??](http://www.theverge.com/2012/8/9/3229163/android-4-1-ported-to-the-venerable-htc-g1)
+ * [CM homepage for dream](http://wiki.cyanogenmod.org/w/Dream_sapphire_Info)
+
+### podcasting
+
+One of the thing that's missing is podcasting, various ideas:
+
+ * [volksempfaenger](https://play.google.com/store/apps/details?id=net.x4a42.volksempfaenger) (android 4.0+?, [not on fdroid yet](http://f-droid.org/forums/topic/volksempfanger-podcast-app/)
+ * Antennapod, android 2.3.3+ [fdroid](http://f-droid.org/repository/browse/?fdcategory=Multimedia&fdid=de.danoeh.antennapod&fdpage=1)
+ * <http://www.doggcatcher.com/>
+
+## Nokia n900
+
+The [[!wikipedia Nokia_N900]] was a great machine, but those machines
+are now so dead: no more software support from Nokia... and the
+hardware is somewhat slow. There's [Neo900](http://neo900.org/), a
+plan to rebuild a new phone based on the same case, but that's not yet
+shipping.
+
+I have two n900 machines, both have their SIM card socket broken now,
+either desoldered or some other broken thing. [Wikipedia says this can
+be fixed by resoldering][], and there are two references online:
+
+* <http://talk.maemo.org/showthread.php?p=1154781#post1154781>
+* <https://www.jabawok.net/?p=14>
+
+ [Wikipedia says this can be fixed by resoldering]: https://en.wikipedia.org/wiki/Nokia_N900#Known_issues
+
+ * 600MHz Cortex A8
+ * 32GB, 256MB ram
+ * 5MP
+ * FM radio and transceiver(!)
+ * Wi-Fi 802.11 b/g, DLNA
+ * A-GPS
+ * Removeable battery
+ * 3.5" (800 x 480 pixels)
+ * 110.9 x 59.8 x 18 mm, 181g
+
+## Partial inventory
+
+ * HTC Dream: works?
+ * LG GB255g: old flip phone, good condition
+ * Kyocera M2000: dead battery, slide keyboard, public mobile
+ * 2x Nokia n900: broken sim card readers?
+ * LG P999DW: old android, broken screen, still works!
+ * HTC One S: broken wifi (drivers?), no more lineage OS support,
+   rooted
+ * LG G3 d852: not rooted, on "stolen or lost" list so unusable as a
+   phone
+
+# Features
+
+Those features are nice to have. Unfortunately, they are now showing
+their age and might not be relevant anymore.
+
+## FM support
+
+FM support in newer smartphones in spotty at best. According to [pdadb.net](http://pdadb.net/index.php?m=pdachooser), only 35 phones (out of 4111) have FM support. Amongst those, only 4 run android.
+
+## External keyboard
+
+Less rare in newer phones, real keyboards are still hard to find. Out of the 4111 android phones in the padb.net inventory, only 229 have actual keyboards, and often those are only regular phone keyboards, not actual QWERTY keyboards.
+
+## Liberated baseband
+
+The "[[!wikipedia Baseband processor]]" in a phone is a second processor in the phone that handles phone calls. Very often, and in fact in almost all cases, this is proprietary hardware and software that is hidden from the main processor, as a black box. So even if you manage to install free software (like cyanogenmod) on an Android device, you are still stuck with this [problematic backdoor](http://www.extremetech.com/computing/170874-the-secret-second-operating-system-that-could-make-every-mobile-phone-insecure).
+
+Note that there is also software in the SIM card, which makes it three different operating systems running at once in your phone.
+
+Some people are trying to fix this:
+
+* [Osmocom](http://osmocom.org/) is a
+  [collection of projects](http://openbsc.osmocom.org/trac/wiki/OsmocomOverview)
+  that try to attack various communication projects, with
+  [OpenBTS](http://cgit.osmocom.org/cgit/osmo-bts/) attacking GSM in
+  particular
+* [lima](http://limadriver.org/) and
+  [freedreno](http://freedreno.github.io/) are attacking the graphics stack
+
+.. but it's not in a phone yet. Ideally, a phone would just be another
+general purpose computer, radio included, so that you'd have a simple
+[SDR](https://en.wikipedia.org/wiki/Software-defined_radio) that you
+would program GSM, FM, AM, CB, or whatever protocol acronym you would
+fancy on top of that, all in software.
+
+## Roaming and frequency support
+
+What a nightmare... since [3G](https://en.wikipedia.org/wiki/3G) came
+up, there's all sorts of very different frequencies for different
+providers *and* for different
+countries. [This map](http://www.worldtimezone.com/gsm.html) has a
+good explanation of the world-wide coverage bands...
+
+See also [the canada coverage map](http://maps.mobileworldlive.com/network.php?cid=170&cname=Canada)
+to figure out exactly what protocols and what frequencies a provider
+uses.
+
+All numbers are in MHz unless otherwise noted.
+
+### 2G
+
+* Europe: 900, 1800
+* Americas: 850, 1900 (except east of south-america)
+
+### 3G
+
+It gets complicated here. But in general:
+
+* Europe: 900, 2100
+* Americas: 850 ([Rogers][], [Bell][Bell 3G]), 1700 (Vidéotron), 1900
+  ([Rogers][], [Bell][Bell 3G]). the three big networks seem to
+  support HSDPA, HSPA+, UMTS or W-CDMA, and only Rogers not supporting
+  EV-DO
+  ([source](https://community.koodomobile.com/koodo/topics/the_big_three_canadian_network_frequencies))
+
+See the
+[source table](https://en.wikipedia.org/wiki/UMTS_frequency_bands#Deployments_by_region_.28UMTS-FDD.29)
+for this.
+
+ [Bell 3G]: http://support.bell.ca/Mobility/Smartphones_and_mobile_internet/Will_my_mobile_phone_or_smartphone_work_on_the_Bell_network
+
+### 4G
+
+Also known as `LTE`, `E-UTRA`, this is where it gets pretty messy.
+
+* Asia: 800, 1800, 2600 (bands 1, 3, 5, 7, 8, 11, 13, 40)
+* Europe: 700, 800, 900, 1800, 2600 (bands 3, 7, 20)
+* Australia: 1800, 2300 (bands 3, 40)
+* America: 700, 750, 800, 850, 1900, 1700/2100 (AWS/[Vidéotron][]), 2500, 2600
+  ([Rogers][], [Bell][]) (bands 2, 4, 7, 12, 13, 17, 25,
+  26, 41, 66)
+* S. America: 2500
+
+See also the [source][lte-frequency-bands] for the above and the [explicit deployment
+chart](https://en.wikipedia.org/wiki/LTE_frequency_bands#Deployments_by_region). Basically, we need one (or many?) of those:
+
+[lte-frequency-bands]: https://en.wikipedia.org/wiki/LTE_(telecommunication)#Frequency_bands
+
+* base 4, 7 (1700/2100, 2600 MHz: [Bell][], [Rogers][]/[Fido][], others?)
+* base 10 (700 MHz: [Vidéotron][])
+* base 13 (700 MHz: [Bell][], [Vidéotron][], Telus)
+* base 17 (700 MHz: [Bell][], [Rogers][]?/[Fido][])
+
+See also [this post on koodoo](https://community.koodomobile.com/koodo/topics/the_big_three_canadian_network_frequencies) (dead link, no archive). [This
+inventory of bands per provider in Canada/US](https://www.signalbooster.com/pages/what-are-the-cellular-frequencies-of-cell-phone-carriers-in-usa-canada) is useful as well.
+
+ [Fido]: http://www.fido.ca/web/content/phonewarranty/configure_unlocked_device_guide&lang=fr
+ [Rogers]: http://www.rogers.com/web/support/wireless/unlock/479?setLanguage=en
+ [Vidéotron]: http://soutien.videotron.com/residentiel/mobile/appareils/limite-soutien-en-telephonie-mobile
+ [Bell]: https://en.wikipedia.org/wiki/Bell_Mobility#LTE
+
 # Places to buy
 
  * [Bestbuy](https://www.bestbuy.ca/en-ca/category/unlocked-android-phones/743360.aspx?)
@@ -172,18 +358,10 @@ incredibly. repairable, IPX rating. seems like a fat phone though.
 ### Pixels
 

(Diff truncated)
settext headings
diff --git a/hardware/phone.mdwn b/hardware/phone.mdwn
index f777de51..ede191a7 100644
--- a/hardware/phone.mdwn
+++ b/hardware/phone.mdwn
@@ -8,8 +8,7 @@ phones as well:
 
 [[!toc levels=2]]
 
-Places to buy
-=============
+# Places to buy
 
  * [Bestbuy](https://www.bestbuy.ca/en-ca/category/unlocked-android-phones/743360.aspx?)
  * [B&H](https://www.bhphotovideo.com/c/buy/smartphones/ci/24039/N/3955685938)
@@ -19,8 +18,7 @@ Places to buy
  * [Recy-cell](https://recy-cell.ca/) (used phones)
  * [Tiger Direct](http://www.tigerdirect.ca/applications/category/category_tlc.asp?CatId=5116) - not a great selection
 
-Potential phones
-================
+# Potential phones
 
 Must-have criteria:
 
@@ -44,8 +42,7 @@ Nice to have:
  * removable battery
  * "fair" sourced materials
 
-Picking a phone
----------------
+## Picking a phone
 
 Picking a phone is hard with all those restrictions. The `#lineageos`
 folks are legendary for not helping you choose your phone but have
@@ -137,18 +134,15 @@ Canada (voir ci-bas) et j'ai fait une [demande](https://forum.fairphone.com/t/bu
 Update: j'ai acheté un Fairphone 2 chez Ecosto, pour ~500$CAD, voir
 [[fairphone2]] pour les détails.
 
-Fairphone 2
------------
+## Fairphone 2
 
 Moved to [[fairphone2]].
 
-Fairphone 3
------------
+## Fairphone 3
 
 Moved to [[fairphone3]].
 
-Fairphone 4 and 5
--------------------
+## Fairphone 4 and 5
 
 Fairphone keeps pushing new phones out and I can't really keep track
 anymore.
@@ -156,13 +150,11 @@ anymore.
 Note that the Fairphone 4 has come out and recently has teamed up with
 [Murena](https://murena.com/) (AKA /e/) to [ship phones in the US](https://arstechnica.com/gadgets/2023/07/fairphone-is-coming-to-america/).
 
-Murena 2
----------
+## Murena 2
 
 Murena is doing their own crowdfunding for a [new phone](https://www.kickstarter.com/projects/murena/murena-2-switch-your-privacy-on/).
 
-Purism Librem 5
----------------
+## Purism Librem 5
 
 In development at the time of writing (2019-02-21), might ship in
 "april 2019" according to their website but according to their [latest
@@ -175,8 +167,7 @@ still don't have a finished device.
 [shiftphone 8](https://www.shift.eco/en/shiftphone-8-status-page-2/) will have [mainline support](https://www.phoronix.com/news/SHIFTphone-8-Linux-Patches),
 incredibly. repairable, IPX rating. seems like a fat phone though.
 
-Google
-------
+## Google
 
 ### Pixels
 
@@ -215,8 +206,7 @@ to work well so far.
 
 No external keyboard, no FM transmitter?
 
-Motorola
---------
+## Motorola
 
 Motorola is an interesting company. They made the first ever cell
 phone and are the first company to [provide iFixit with OEM parts](https://ifixit.org/blog/11644/motorola-ifixit-partnership/),
@@ -236,8 +226,7 @@ sealed. The only problem might be the lower battery life and the lower
 resolution camera, when compared with the XA2. The body is about the
 same size as the G3 and the screen is smaller, unfortunately.
 
-Samsung
--------
+## Samsung
 
 Generally well supportedin LOS. The S7 has [good reviews](https://forum.xda-developers.com/galaxy-s7/review) but
 hasn't been ported to the newer LOS 15.1. The [S9](https://wiki.lineageos.org/devices/starlte) is better and
@@ -249,8 +238,7 @@ flashing a Samsung tablet, I'm wary of struggling against my hardware
 manufacturer to have the freedom to install what I want on them. See
 [this post for a hint](https://community.e.foundation/t/glaxay-s9-e-version-confusion/18076/27).
 
-Sony
-----
+## Sony
 
 The [XA2](https://wiki.lineageos.org/devices/pioneer) looks well maintained in LOS, and looks like generally a
 nice phone. The [reviews](https://forum.xda-developers.com/xperia-xa2/review) are generally positive, except for the
@@ -259,8 +247,7 @@ camera. The XA2 is 5.2", the Ultra is 6.0" ([comparative](https://www.gsmarena.c
 Another big downside is the repairability: you need a hot-air gun even
 to just remove the back cover, according to [this video](https://www.ifixit.com/Teardown/Sony+Xperia+XA2+Teardown/110666).
 
-Xiaomi
-------
+## Xiaomi
 
 Those make the fame [Pocophone F1](https://en.wikipedia.org/wiki/Xiaomi_Pocophone_F1) which I'm avoiding mostly
 because of the notch but also [difficult battery access](https://www.youtube.com/watch?v=L5VWWba0coY&feature=youtu.be). It's also
@@ -274,8 +261,7 @@ supported until 14. It's unclear how repairable those last three are.
 
 Xiaomi devices are also hard to find at usual locations.
 
-Cosmo communicator
-------------------
+## Cosmo communicator
 
 Huge phone running android, flip keyboard, 24MP camera, super powerful
 but expensive.
@@ -284,19 +270,15 @@ https://www.indiegogo.com/projects/cosmo-communicator
 
  * Size: 17.14(W) x 7.93cm(D) x 1.6(H)cm
 
-
-Gemini & other PDAs
--------------------
+## Gemini & other PDAs
 
 See [[laptop#gemini]].
 
-2015 phones evaluation
-======================
+# 2015 phones evaluation
 
 This is getting incredibly out of date.
 
-Fairphone 1
------------
+## Fairphone 1
 
 The [[!wikipedia Fairphone]] is a really interesting project:
 
@@ -326,8 +308,7 @@ Downside: it doesn't have an FM transmitter and the [baseband isn't
 open](https://forum.fairphone.com/t/fairphone-baseband-os-firmware/1228), but that's pretty much the case for all phones out there
 right now.
 
-Samsung Galaxy S3
------------------
+## Samsung Galaxy S3
 
 [[!wikipedia Samsung_Galaxy_S_III]] - an interesting device:
 
@@ -349,8 +330,7 @@ No FM transmitter, no external keyboard.
 
 The S4 is similar, but one generation newer so better battery and faster LTE support (100mbps!), but at a slightly higher cost (140$ used vs 50-100$).
 
-Elephone
---------
+## Elephone
 
 Very interesting phones: they are
 [actively porting Cyanogenmod to their stack](http://www.elephone.cc/news/Elephone-port-CyanogenMod-121-to-Mediatek-phone/)
@@ -551,20 +531,17 @@ News:
  * [Digital trends: Why Nokia made an Android phone it wants you to
    tear apart](https://www.digitaltrends.com/mobile/hmd-global-nokia-g22-quickfix-nokia-c32-nokia-c22-mwc-2023-news/)
 
-Other no-names
---------------
+## Other no-names
 
 There are tons of other generic phones out there. A friend got
 [this cubot phone](http://www.everbuying.net/product1055309.html)
 which will be a good test for the 3G and 4G support.
 
-Vaporware
-=========
+# Vaporware
 
 Those phones were nice ideas but never shipped.
 
-Phoneblocks
------------
+## Phoneblocks
 
 [[!wikipedia Phonebloks]] is the idea of a modular phone that could be easily fixable and field-upgradable. It was turned into a [discussion forum](https://phonebloks.com/) around 2013 by Motorola and Google in favor of their [[!wikipedia Project Ara]] scheduled for release in January 2015.
 
@@ -572,31 +549,27 @@ Here's a [pretty homepage](http://www.projectara.com/) (site dead, [archive](htt

(Diff truncated)
turns out "secure" also means "incompatible"
diff --git a/hardware/svetlana.md b/hardware/svetlana.md
index 45ca9ab2..25635c68 100644
--- a/hardware/svetlana.md
+++ b/hardware/svetlana.md
@@ -51,6 +51,11 @@ Did the following config:
  5. configured WPA password
  6. manually tuned radio channels and power
 
+Update, 2024-07-01: Tweaked the wifi security down from WPA2/WPA3
+mixed to WPA/WPA2 because a Nintendo Switch couldn't even *see* the
+access point. An old iMac also had trouble connecting, but I couldn't
+confirm if the issue was related as I haven't retried that.
+
 According to <https://fast.com> and <https://speed.cloudflare.com/>, this
 hotspot can saturate my uplink (130/30mbps) but with some bufferbloat
 (14 vs 63ms loaded).

another bookmark thing
diff --git a/services/bookmarks.mdwn b/services/bookmarks.mdwn
index 67f117c9..57433f64 100644
--- a/services/bookmarks.mdwn
+++ b/services/bookmarks.mdwn
@@ -75,6 +75,7 @@ This also overlaps with bookmarking software like:
  * [apollo](https://github.com/amirgamil/apollo)
  * [archivebox](https://archivebox.io/) (previously called [bookmark-archiver](https://pirate.github.io/bookmark-archiver/))
  * [archivy](https://archivy.github.io/)
+ * [betula](https://betula.mycorrhiza.wiki/) - federated delicious-like
  * [bookmarkos](https://bookmarkos.com/)
  * [braintool](https://braintool.org/)
  * [browsersync](https://www.xbrowsersync.org/)

another important computing women
diff --git a/services/dns.mdwn b/services/dns.mdwn
index beefe303..f1a9cc4c 100644
--- a/services/dns.mdwn
+++ b/services/dns.mdwn
@@ -209,6 +209,8 @@ Les noms suivants pourraient être utilisés pour de futures machines:
  * [Viola Desmond][] - challenged racial segregation in Canada
  * [Ada Lovelace][] - first programmer
  * [Grace Hopper][] - inventor of the compiler and linker
+ * [Lynn Conway][] - VLSI inventor, fired by IBM when coming out as
+   trans in 1968, rebuilt her carreer from scratch, died in 2024
  * [Séverine][] - journaliste, féministe, première femme à diriger un
    grand quotidien en France
  * [Sister Rosetta Tharpe][] - "first great recording star of gospel
@@ -247,6 +249,7 @@ tout aussi importantes...
 [Phillis Wheatley]: https://en.wikipedia.org/wiki/Phillis_Wheatley
 [Anahareo]: https://en.wikipedia.org/wiki/Anahareo?wprov=sfla1
 [Evelyn Berezin]: https://en.wikipedia.org/wiki/Evelyn_Berezin
+[Lynn Conway]: https://en.wikipedia.org/wiki/Lynn_Conway
 
 Relié
 =====

add another tablet
diff --git a/hardware/tablet.mdwn b/hardware/tablet.mdwn
index 08e9f8a6..a8509063 100644
--- a/hardware/tablet.mdwn
+++ b/hardware/tablet.mdwn
@@ -347,6 +347,15 @@ HDMI, 2x USB-C, micro SD, headphone jack, secure boot, LVFS, coreboot,
 512GB - 2TB SSD, 16GB DDR5, 2x 2k camera, 12h battery life, ubuntu
 supported out of the box, 600-900$, not yet available.
 
+pollo called it "underpowered"
+
+## Minisforum
+
+https://www.minisforum.com/page/v3/
+
+touch screen is not wacom, so less reliable, otherwise nice tech,
+high-end AMD CPU, can be used as an external monitor.
+
 ## Sony
 
 Sony has a [Xperia Z2 tablet](https://en.wikipedia.org/wiki/Sony_Xperia_Z2_tablet) that was recommended on the `#tech`

another book inventory tool
diff --git a/services/bookmarks.mdwn b/services/bookmarks.mdwn
index 74937b43..67f117c9 100644
--- a/services/bookmarks.mdwn
+++ b/services/bookmarks.mdwn
@@ -63,6 +63,7 @@ Possible alternatives
 Possible alternatives to zotero and/or wallabag include:
 
  * [i librarian](https://i-librarian.net/)
+ * [inventaire](https://inventaire.io/) - book sharing/inventory app with an open data aspect
  * [jabref](http://www.jabref.org/)
  * [lesana](https://lesana.trueelena.org/), includes a [GTK](https://git.sr.ht/~fabrixxm/Collector) and [web interface](https://git.sr.ht/~fabrixxm/lesanaweb)
  * [papis](https://github.com/papis/papis)

i'm testing neomutt again
diff --git a/software/desktop/wayland.md b/software/desktop/wayland.md
index e9b93796..cb8c3128 100644
--- a/software/desktop/wayland.md
+++ b/software/desktop/wayland.md
@@ -401,7 +401,20 @@ flags to signal:
 
 ## Email: notmuch
 
-See Emacs, below.
+I'm using [notmuch](https://notmuchmail.org/) to manage my email firehose, and currently use
+the Emacs frontend ([notmuch-emacs](https://notmuchmail.org/notmuch-emacs/)).
+
+I've been a little uncomfortable exposing Emacs to the arbitrary input
+from the network that Email essentially is. This has shown to be
+particularly problematic with the handling of an org-mode
+vulnerability providing remote code execution ([CVE-2024-39331](https://security-tracker.debian.org/tracker/CVE-2024-39331)),
+with a [botched disclosure](https://lwn.net/ml/all/87wmmguk44.fsf@localhost/).
+
+So (starting in June 2024) I've been testing [neomutt](neomutt.org/) since it has
+[notmuch patches](https://neomutt.org/feature/notmuch) that allow somewhat clunky access to my notmuch
+database. So far, it's a learning curve, but it works.
+
+See also Emacs, below.
 
 ## File manager: thunar
 

add nuphy keyboards, found on hackernews somewhere
diff --git a/hardware/keyboard.mdwn b/hardware/keyboard.mdwn
index e4dbbfef..a82a7831 100644
--- a/hardware/keyboard.mdwn
+++ b/hardware/keyboard.mdwn
@@ -376,6 +376,28 @@ feedback, trackballs.
 This is a pretty TKL keyboard, the [Multics](https://vortexgear.store/en-ca/products/multix?variant=43056025993379). Not sure about the Fn
 key on the right though.
 
+## Nuphy
+
+[Nuphy](https://nuphy.com/) has interesting mechanical keyboards, with a special focus on the
+sound and design of the keyboards.
+
+They have QMK-compatible firmware and pretty designs, with slim and
+TKL keyboards.
+
+rtings reviewed [five models](https://www.rtings.com/keyboard/tools/table/141136) and outlined:
+
+ * [Halo75 v2](https://nuphy.com/collections/keyboards/products/halo75-v2-qmk-via-wireless-custom-mechanical-keyboard): "[Best Mid-Range Mechanical Keyboard](https://www.rtings.com/keyboard/reviews/best/mechanical)" ([full review](https://www.rtings.com/keyboard/reviews/nuphy/air75-v2-air60-v2-air96-v2))
+ * [Gem 80](https://nuphy.com/collections/keyboards/products/gem80): "[Best TKL Keyboard For Enthusiasts](https://www.rtings.com/keyboard/reviews/best/tkl)" and "Best
+ modular mechanical keyboard" ([full review](https://www.rtings.com/keyboard/reviews/nuphy/gem80))
+ * [Air75 v2](https://nuphy.com/collections/keyboards/products/air75-v2): "[Best Low-Profile Keyboard](https://www.rtings.com/keyboard/reviews/best/low-profile)", "[Best Mid-Range
+   Wireless Keyboard](https://www.rtings.com/keyboard/reviews/best/by-type/wireless)", "[Best Office Keyboard Without A
+   Numpad](https://www.rtings.com/keyboard/reviews/best/work)", "[Best Mid-Range Keyboard For Programming](https://www.rtings.com/keyboard/reviews/best/by-usage/programming)" ([full
+   review](https://www.rtings.com/keyboard/reviews/nuphy/air75-v2-air60-v2-air96-v2))
+ * [Halo96](https://nuphy.com/collections/keyboards/products/halo96): "[Best Upper Mid-Range Keyboard For Typing](https://www.rtings.com/keyboard/reviews/best/by-usage/writers)" and
+   "[Best Mid-Range RGB Keyboard](https://www.rtings.com/keyboard/reviews/best/rgb#recommendation_313370)" ([full review](https://www.rtings.com/keyboard/reviews/nuphy/halo96-halo65-halo75)), replaced by
+   the Halo96 v2 and Halo75 v2
+ * [Field75](https://nuphy.com/collections/keyboards/products/field75): not best in anything ([full review](https://www.rtings.com/keyboard/reviews/nuphy/field75))
+
 # Mini / travel keyboards
 
 Those are useful for the media station or traveling on the road with a
@@ -395,6 +417,8 @@ phone or tablet.
  * [rk925](https://rkgamingstores.com/products/rk925-foldable-mechanical-keyboard): foldable keyboard, but feels in the wrong direction,
    maybe a bit too small? 112$
 
+[Nuphy](#nuphy) above, has good travel keyboards as well.
+
 # Reviews
 
 * [rtings](https://www.rtings.com/keyboard) has a keyboards section

document diss/shpool
diff --git a/blog/2021-03-19-dtach-screen-security.md b/blog/2021-03-19-dtach-screen-security.md
index f4e11635..b1a96ae3 100644
--- a/blog/2021-03-19-dtach-screen-security.md
+++ b/blog/2021-03-19-dtach-screen-security.md
@@ -189,4 +189,9 @@ Enjoy, and let me know if (or rather, how) I messed up.
     with plain `ssh`, so there's definitely something fishy going on
     here.
 
+ 5. I've found other alternatives to dtach/screen/tmux: [diss](https://github.com/yazgoo/diss)
+    (rust, simple dtach alternative), [shpool](https://github.com/shell-pool/shpool) (rust, similar to
+    dtach and diss but with a single client and some more "smart"
+    logic about rendering and shell prompts)
+
 [[!tag debian debian-planet systemd irssi irc security python-planet hack]]

review omnivore
diff --git a/services/bookmarks.mdwn b/services/bookmarks.mdwn
index 49830fca..74937b43 100644
--- a/services/bookmarks.mdwn
+++ b/services/bookmarks.mdwn
@@ -85,7 +85,12 @@ This also overlaps with bookmarking software like:
  * [linkwarden](https://linkwarden.app/)
  * [memex](https://worldbrain.io/)
  * [nb](https://xwmx.github.io/nb/)
- * [omnivore](https://omnivore.app/)
+ * [omnivore](https://omnivore.app/) - [not in f-droid, possibly never](https://github.com/omnivore-app/omnivore/issues/1853), Javascript-y
+   app that loads slowly here, [doesn't have a "one-click" "mark as
+   read" button, awkward workflow](https://github.com/omnivore-app/omnivore/issues/905#issuecomment-2178901104), [supports imports but not directly
+   Wallabag](https://docs.omnivore.app/using/importing.html), supports adding RSS feeds as source, PDFs, tagging
+   support, including intersection searches, [no support for
+   publishing feeds](https://github.com/omnivore-app/omnivore/issues/409)
  * [promnesia](https://github.com/karlicoss/promnesia)
  * [reminiscense](https://github.com/kanishka-linux/reminiscence)
  * [seelink](https://www.seelink.app/)

another unicode sample file, excellent
diff --git a/blog/2024-05-29-playing-with-fonts-again.md b/blog/2024-05-29-playing-with-fonts-again.md
index 3f46a184..3b708785 100644
--- a/blog/2024-05-29-playing-with-fonts-again.md
+++ b/blog/2024-05-29-playing-with-fonts-again.md
@@ -129,6 +129,9 @@ HYPHEN-MINUS, MINUS SIGN, EN, EM DASH, HORIZONTAL BAR, LOW LINE
 __________________________________________________
 ```
 
+Update: [here is another such sample sheet](https://sheet.shiar.nl/sample), it's pretty good and
+has support for more languages while being still relatively small.
+
 So there you have it, got completely nerd swiped by typography
 again. Now I can go back to writing a too-long proposal again.
 

switch to nwg-displays
it supports saving the configuration to disk and doesn't start the
fans on my computer because it doesn't try to mirror outputs the same
way wdisplays does.
diff --git a/software/desktop/wayland.md b/software/desktop/wayland.md
index ce6694c0..e9b93796 100644
--- a/software/desktop/wayland.md
+++ b/software/desktop/wayland.md
@@ -38,11 +38,11 @@ I had to install the following packages:
         gammastep \
         gdm3 \
         grim slurp \
+        nwg-displays \
         pipewire-pulse \
         sway \
         swayidle \
         swaylock \
-        wdisplays \
         wev \
         wireplumber \
         wlr-randr \
@@ -1055,7 +1055,7 @@ case, they should be listed here:
 
 | X11          | Wayland                               | In Debian |
 |--------------|---------------------------------------|-----------|
-| `arandr`     | [wdisplays][]                         | yes       |
+| `arandr`     | [nwg-displays][]                      | yes       |
 | `autorandr`  | [kanshi][]                            | yes       |
 | `xclock`     | [wlclock][]                           | no        |
 | `xdotool`    | [wtype][]                             | yes       |
@@ -1088,12 +1088,20 @@ X. [arewewaylandyet.com][] refers to a few alternatives. We suggest
 [wdisplays][] and [kanshi][] above (see also [this service file][])
 but [wallutils][] can also do the autorandr stuff, apparently, and
 [nwg-displays][] can do the arandr part. [shikane][] is a promising
-kanshi rewrite in Rust. None of those (but kanshi) are packaged in
-Debian yet.
+kanshi rewrite in Rust. None of those (but kanshi and nwg-displays)
+are packaged in Debian yet.
 
 So I have tried [wdisplays][] and it Just Works, and well. The UI even
 looks better and more usable than arandr, so another clean win from
-Wayland here.
+Wayland here. I've since then switched to nwg-displays because it
+directly saves a Sway-compatible configuration file in
+`~/.config/sway/outputs`, it's just too bad it doesn't also save a
+kanshi config, see also the [save profile feature request in
+kanshi](https://todo.sr.ht/~emersion/kanshi/81) and the [kanshi support feature request in
+nwg-displays](https://github.com/nwg-piotr/nwg-displays/issues/2).
+
+Note that [shikane][] claims to support saving the current
+configuration to a file, but it's [not packaged in Debian](https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=1073813).
 
 I'm currently [kanshi][] as a autorandr replacement and it mostly
 works. It can be hard to figure out the right configuration to put,
@@ -1439,12 +1447,14 @@ Note that other Wayland compositors (e.g. [Hyprland][], GNOME's
 Mutter) *do* support mirroring, so it's not a fundamental limitation
 of Wayland.
 
-One workaround is to use a tool like [wl-mirror](https://github.com/Ferdi265/wl-mirror) to make a window
+One workaround is to use a tool like
+[wl-mirror](https://github.com/Ferdi265/wl-mirror) to make a window
 that mirrors a specific output and place *that* in a different
 workspace. That way you place the output you want to mirror *to* next
 to the output you want to mirror *from*, and use wl-mirror to copy
 between the two outputs. The problem is that wl-mirror is [not
-packaged in Debian yet](https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=1012684).
+packaged in Debian yet](https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=1012684) (update: fixed since 2023, Debian 13
+trixie).
 
 Another workaround mentioned in the thread is to use a [[presentation
 tool|blog/2020-09-30-presentation-tools]] which supports mirroring on

more gtklock stuff
diff --git a/software/desktop/wayland.md b/software/desktop/wayland.md
index 403fbb4d..ce6694c0 100644
--- a/software/desktop/wayland.md
+++ b/software/desktop/wayland.md
@@ -802,7 +802,13 @@ That, unfortunately, does *not* include the fancy "hacks" provided by
 xscreensaver, and that is [unlikely to be implemented upstream][].
 
 Other alternatives include [gtklock][] ([in Debian](https://tracker.debian.org/pkg/gtklock)) and [waylock][] (zig), which
-do not solve that problem either.
+do not solve that problem either. gtklock is interesting though
+because it has all sorts of plugins to show information on the lock
+screen, which I find it quite lacking in swaylock:
+
+ * [playerctl](https://github.com/jovanlanik/gtklock-playerctl-module) support: control media players ([in Debian](https://packages.debian.org/sid/gtklock-playerctl-module))
+ * [userinfo](https://github.com/jovanlanik/gtklock-userinfo-module): show user icon and name ([in Debian](https://packages.debian.org/sid/gtklock-userinfo-module))
+ * [more](https://github.com/jovanlanik/gtklock/wiki#references-2)
 
 It looks like [swaylock-plugin][], a swaylock fork, which at least
 attempts to solve this problem, although not directly using the real

another font
diff --git a/blog/2024-05-29-playing-with-fonts-again.md b/blog/2024-05-29-playing-with-fonts-again.md
index 4ebfd286..3f46a184 100644
--- a/blog/2024-05-29-playing-with-fonts-again.md
+++ b/blog/2024-05-29-playing-with-fonts-again.md
@@ -205,6 +205,10 @@ I'm not using them:
   fancy curly braces contrast perhaps too much with the rest of the
   font, packaged in Debian as [fonts-ibm-plex](https://tracker.debian.org/fonts-ibm-plex)
 
+- [Inconsolata](https://levien.com/type/myfonts/inconsolata.html): no ligatures, maybe italics? more compressed than
+  others, feels a little out of balance because of that, packaged in
+  Debian as [fonts-inconsolata](https://tracker.debian.org/fonts-inconsolata)
+
 - [Intel One Mono](https://github.com/intel/intel-one-mono/): nice legibility, no ligatures, alignment issues
   in box drawing, not packaged in Debian
 

more french pangrams
So the original one there had diacritics but didn't have all of
them. Get a new one that *does* have all the 50 characters. Tested
with:
sed 's/\(.\)/\1\n/g' | sort -u | wc -l
Source: https://fr.wikipedia.org/wiki/Pangramme#Avec_les_signes_diacritiques
We also include the more classic "whisky" quote that is traditionally
used:
https://fr.wikipedia.org/wiki/Portez_ce_vieux_whisky_au_juge_blond_qui_fume
diff --git a/blog/2024-05-29-playing-with-fonts-again.md b/blog/2024-05-29-playing-with-fonts-again.md
index ff9bdbfb..4ebfd286 100644
--- a/blog/2024-05-29-playing-with-fonts-again.md
+++ b/blog/2024-05-29-playing-with-fonts-again.md
@@ -91,8 +91,13 @@ THE QUICK FOX JUMPS OVER THE LAZY DOG
 
 same, in french:
 
-voix ambiguë d'un cœur qui, au zéphyr, préfère les jattes de kiwis.
-VOIX AMBIGUË D'UN CŒUR QUI, AU ZÉPHYR, PRÉFÈRE LES JATTES DE KIWIS.
+Portez ce vieux whisky au juge blond qui fume.
+
+dès noël, où un zéphyr haï me vêt de glaçons würmiens, je dîne
+d’exquis rôtis de bœuf au kir, à l’aÿ d’âge mûr, &cætera.
+
+DÈS NOËL, OÙ UN ZÉPHYR HAÏ ME VÊT DE GLAÇONS WÜRMIENS, JE DÎNE
+D’EXQUIS RÔTIS DE BŒUF AU KIR, À L’AŸ D’ÂGE MÛR, &CÆTERA.
 
 Ligatures test:
 

add IBM plex, good candidate
diff --git a/blog/2024-05-29-playing-with-fonts-again.md b/blog/2024-05-29-playing-with-fonts-again.md
index e1f5bd35..ff9bdbfb 100644
--- a/blog/2024-05-29-playing-with-fonts-again.md
+++ b/blog/2024-05-29-playing-with-fonts-again.md
@@ -122,7 +122,6 @@ HYPHEN-MINUS, MINUS SIGN, EN, EM DASH, HORIZONTAL BAR, LOW LINE
 ——————————————————————————————————————————————————
 ――――――――――――――――――――――――――――――――――――――――――――――――――
 __________________________________________________
-
 ```
 
 So there you have it, got completely nerd swiped by typography
@@ -195,6 +194,12 @@ I'm not using them:
 - [Hermit](https://github.com/Swordfish90/cool-retro-term/tree/master/app/qml/fonts/modern-hermit): no ligatures, smaller, alignment issues in box drawing
   and dashes, packaged as [fonts-hermit](https://tracker.debian.org/fonts-hermit) somehow part of [cool-retro-term](https://github.com/Swordfish90/cool-retro-term/)
 
+- [IBM Plex](https://www.ibm.com/plex/plexness/): irritating website, replaces Helvetica as the IBM
+  corporate font, no ligatures by default, italics, proportional alternatives,
+  serifs and sans, multiple languages, partial failure in box alignment test (X signs),
+  fancy curly braces contrast perhaps too much with the rest of the
+  font, packaged in Debian as [fonts-ibm-plex](https://tracker.debian.org/fonts-ibm-plex)
+
 - [Intel One Mono](https://github.com/intel/intel-one-mono/): nice legibility, no ligatures, alignment issues
   in box drawing, not packaged in Debian
 
@@ -230,6 +235,7 @@ So, if I get tired of Commit Mono, I might probably try, in order:
 
 1. Hack
 1. Jetbrains Mono
+1. IBM Plex Mono
 
 Iosevka, Monoki and Intel One Mono are also good options, but have
 alignment problems. Iosevka is particularly disappointing as the `EM

more test (failures)
diff --git a/blog/2024-05-29-playing-with-fonts-again.md b/blog/2024-05-29-playing-with-fonts-again.md
index 165920bf..e1f5bd35 100644
--- a/blog/2024-05-29-playing-with-fonts-again.md
+++ b/blog/2024-05-29-playing-with-fonts-again.md
@@ -184,10 +184,13 @@ I'm not using them:
   packaged as [fonts-cascadia-code](https://tracker.debian.org/pkg/fonts-cascadia-code)
 
 - Fira Code: ligatures, was using Fira Mono from which it is derived,
-  lacking italics except for forks, packaged as [fonts-firacode](https://tracker.debian.org/fonts-firacode)
+  lacking italics except for forks, interestingly, Fira Code succeeds
+  the alignment test but Fira Mono fails to show the X signs properly!
+  packaged as [fonts-firacode](https://tracker.debian.org/fonts-firacode)
 
-- [Hack](https://sourcefoundry.org/hack/): no ligatures, very similar to Fira, italics, good alternative,
-  packaged as [fonts-hack](https://tracker.debian.org/fonts-hack)
+- [Hack](https://sourcefoundry.org/hack/): no ligatures, very similar to Fira, italics, good
+  alternative, fails the X test in box alignment, packaged as
+  [fonts-hack](https://tracker.debian.org/fonts-hack)
 
 - [Hermit](https://github.com/Swordfish90/cool-retro-term/tree/master/app/qml/fonts/modern-hermit): no ligatures, smaller, alignment issues in box drawing
   and dashes, packaged as [fonts-hermit](https://tracker.debian.org/fonts-hermit) somehow part of [cool-retro-term](https://github.com/Swordfish90/cool-retro-term/)

remove HTML comment end that I put there to unconfuse emacs
It doesn't seem confused anymore.
diff --git a/blog/2024-05-29-playing-with-fonts-again.md b/blog/2024-05-29-playing-with-fonts-again.md
index bfe93bd1..165920bf 100644
--- a/blog/2024-05-29-playing-with-fonts-again.md
+++ b/blog/2024-05-29-playing-with-fonts-again.md
@@ -125,8 +125,6 @@ __________________________________________________
 
 ```
 
--->
-
 So there you have it, got completely nerd swiped by typography
 again. Now I can go back to writing a too-long proposal again.
 

review all fonts, again
diff --git a/blog/2024-05-29-playing-with-fonts-again.md b/blog/2024-05-29-playing-with-fonts-again.md
index 6f007cdf..bfe93bd1 100644
--- a/blog/2024-05-29-playing-with-fonts-again.md
+++ b/blog/2024-05-29-playing-with-fonts-again.md
@@ -4,6 +4,8 @@ I am getting increasingly frustrated by Fira Mono's [lack of italic
 support](https://github.com/mozilla/Fira/issues/38) so I am looking at [[alternative fonts
 again|2020-03-10-font-changes]].
 
+# Commit Mono
+
 This time I seem to be settling on either [Commit Mono](https://commitmono.com/) or [Space
 Mono](https://www.colophon-foundry.org/custom-projects/space-mono). For now I'm using Commit Mono because it's a little more
 compressed than Fira and does have a italic version. I don't like how
@@ -61,6 +63,8 @@ I mentioned before, I like how the bar on the "f" aligns with the
 other top of letters, something in Fira mono that really annoys me now
 that I've noticed it (it's not aligned!).
 
+# A UTF-8 test file
+
 Here's the test sheet I've made up to test various characters. I could
 have sworn I had a good one like this lying around somewhere but
 couldn't find it so here it is, I guess.
@@ -152,8 +156,95 @@ Sources and inspiration for the above:
 
 - [UTF-8 sampler](https://web.archive.org/web/20080515024332/http://www.columbia.edu/kermit/utf8.html) - unused, similar
 
-[[!tag debian-planet python-planet typography meta theming usability]]
+# Other fonts
+
+In [[my previous blog post about fonts|2020-03-10-font-changes]], I
+had a list of alternative fonts, but it seems people are not digging
+through this, so I figured I would redo the list here to preempt "but
+have you tried Jetbrains mono" kind of comments.
+
+My requirements are:
+
+- *no* ligatures: yes, in the previous post, I *wanted* ligatures but
+  I have changed my mind. after testing this, I find them distracting,
+  confusing, and they often break the monospace nature of the display
+- monospace: this is to display code
+- italics: often used when writing Markdown, where I do make use of
+  italics... Emacs falls back to underlining text when lacking italics
+  which is hard to read
+- free-ish, ultimately should be packaged in Debian
+
+Here is the list of alternatives I have considered in the past and why
+I'm not using them:
+
+- [agave](https://b.agaric.net/page/agave): recommended by tarzeau, not sure I like the lowercase
+  `a`, a bit too exotic, packaged as [fonts-agave](https://tracker.debian.org/pkg/fonts-agave)
+
+- [Cascadia code](https://github.com/microsoft/cascadia-code): optional ligatures, multilingual, not liking the
+  alignment, ambiguous parenthesis (look too much like square
+  brackets), new default for [Windows Terminal](https://en.wikipedia.org/wiki/Windows_Terminal) and Visual Studio,
+  packaged as [fonts-cascadia-code](https://tracker.debian.org/pkg/fonts-cascadia-code)
+
+- Fira Code: ligatures, was using Fira Mono from which it is derived,
+  lacking italics except for forks, packaged as [fonts-firacode](https://tracker.debian.org/fonts-firacode)
+
+- [Hack](https://sourcefoundry.org/hack/): no ligatures, very similar to Fira, italics, good alternative,
+  packaged as [fonts-hack](https://tracker.debian.org/fonts-hack)
+
+- [Hermit](https://github.com/Swordfish90/cool-retro-term/tree/master/app/qml/fonts/modern-hermit): no ligatures, smaller, alignment issues in box drawing
+  and dashes, packaged as [fonts-hermit](https://tracker.debian.org/fonts-hermit) somehow part of [cool-retro-term](https://github.com/Swordfish90/cool-retro-term/)
+
+- [Intel One Mono](https://github.com/intel/intel-one-mono/): nice legibility, no ligatures, alignment issues
+  in box drawing, not packaged in Debian
 
+- [Iosevka](https://typeof.net/Iosevka/): optional ligatures, italics, multilingual, good
+  legibility, has a proportional option, serifs and sans, line height
+  issue in box drawing, fails dash test, not in Debian
+
+- [Jetbrains Mono](https://www.jetbrains.com/lp/mono/): (mandatory?) ligatures, good coverage,
+  originally rumored to be not DFSG-free (Debian Free Software
+  Guidelines) but ultimately [packaged in Debian](https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=950152) as
+  [fonts-jetbrains-mono](https://tracker.debian.org/pkg/fonts-jetbrains-mono)
+
+- [Monoid](https://larsenwork.com/monoid/): optional ligatures, feels much "thinner" than
+  Jetbrains, not liking alignment or spacing on that one, ambiguous
+  `2Z`, problems rendering box drawing, packaged as [fonts-monoid](https://tracker.debian.org/fonts-monoid)
+
+- [Mononoki](https://madmalik.github.io/mononoki/): no ligatures, looks good, good alternative, suggested
+  by the Debian fonts team as part of [fonts-recommended](https://tracker.debian.org/fonts-recommended), problems
+  rendering box drawing, em dash bigger than en dash, packaged as
+  [fonts-mononoki](https://tracker.debian.org/fonts-mononoki)
+
+- [Source Code Pro](http://adobe-fonts.github.io/source-code-pro/): italics, looks good, but dash metrics look
+  whacky, [not in Debian](https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=736681)
+
+- [spleen](https://github.com/fcambus/spleen): bitmap font, old school, spacing issue in box drawing
+  test, packaged as [fonts-spleen](https://tracker.debian.org/pkg/fonts-spleen)
+
+- [sudo](https://www.kutilek.de/sudo-font/): personal project, no ligatures, zero originally not
+  dotted, relied on metrics for legibility, spacing issue in box
+  drawing, not in Debian
+
+So, if I get tired of Commit Mono, I might probably try, in order:
+
+1. Hack
+1. Jetbrains Mono
+
+Iosevka, Monoki and Intel One Mono are also good options, but have
+alignment problems. Iosevka is particularly disappointing as the `EM
+DASH` metrics are just completely wrong (much too wide).
+
+This was tested using the [Programming fonts](https://www.programmingfonts.org/) site which has *all*
+the above fonts, which cannot be said of [Font Squirrel](https://www.fontsquirrel.com/) or [Google
+Fonts](fonts.google.com/), amazingly. Other such tools:
+
+ * [Coding Font](https://www.codingfont.com/) (broken in Firefox as of 2024-05-30)
+ * [dev fonts comparator](https://devfonts.gafi.dev/)
+ * [Font Squirrel](https://www.fontsquirrel.com/)
+ * [Google Fonts](fonts.google.com/)
+ * [Programming fonts](https://www.programmingfonts.org/)
+
+[[!tag debian-planet python-planet typography meta theming usability]]
 
 <!-- posted to the federation on 2024-05-29T17:44:57.933852 -->
 [[!mastodon "https://kolektiva.social/@Anarcat/112526563590503074"]]

compress test sheet
diff --git a/blog/2024-05-29-playing-with-fonts-again.md b/blog/2024-05-29-playing-with-fonts-again.md
index 91a85d0c..6f007cdf 100644
--- a/blog/2024-05-29-playing-with-fonts-again.md
+++ b/blog/2024-05-29-playing-with-fonts-again.md
@@ -71,19 +71,14 @@ US keyboard coverage:
 abcdefghijklmnopqrstuvwxyz`1234567890-=[]\;',./
 ABCDEFGHIJKLMNOPQRSTUVWXYZ~!@#$%^&*()_+{}|:"<>?
 
-ambiguity test:
+latin1 coverage: ¡¢£¤¥¦§¨©ª«¬­®¯°±²³´µ¶·¸¹º»¼½¾¿
+EURO SIGN, TRADE MARK SIGN: €™
 
-iI71lL!|¦ 
-[](){}/\
-e¢coC0ODQ
-b6G&0B83
-zs$S52Z%
+ambiguity test:
 
-MIDDLE DOT, BULLET, HORIZONTAL ELLIPSIS: ·•…
-curly ‘single’ and “double” quotes
-ACUTE ACCENT, GRAVE ACCENT: ´`
-EURO SIGN: €
-unicode A1-BF: ¡¢£¤¥¦§¨©ª«¬­®¯°±²³´µ¶·¸¹º»¼½¾¿
+e¢coC0ODQ iI71lL!|¦
+b6G&0B83  [](){}/\.…·•
+zs$S52Z%  ´`'"‘’“”«»
 
 all characters in a sentence, uppercase:
 
@@ -92,10 +87,8 @@ THE QUICK FOX JUMPS OVER THE LAZY DOG
 
 same, in french:
 
-voix ambiguë d'un cœur qui, au zéphyr,
-préfère les jattes de kiwis.
-VOIX AMBIGUË D'UN CŒUR QUI, AU ZÉPHYR,
-PRÉFÈRE LES JATTES DE KIWIS.
+voix ambiguë d'un cœur qui, au zéphyr, préfère les jattes de kiwis.
+VOIX AMBIGUË D'UN CŒUR QUI, AU ZÉPHYR, PRÉFÈRE LES JATTES DE KIWIS.
 
 Ligatures test:
 
@@ -106,15 +99,15 @@ Ligatures test:
 <: := *= *+ <* <*> *> <| <|> |> <. <.> .> +* =* =: :>
 (* *) /* */ [| |] {| |} ++ +++ \/ /\ |- -| <!-- <!---
 
-Box drawing alignment tests:                                          █
-                                                                      ▉
-  ╔══╦══╗  ┌──┬──┐  ╭──┬──╮  ╭──┬──╮  ┏━━┳━━┓  ┎┒┏┑   ╷  ╻ ┏┯┓ ┌┰┐    ▊ ╱╲╱╲╳╳╳
-  ║┌─╨─┐║  │╔═╧═╗│  │╒═╪═╕│  │╓─╁─╖│  ┃┌─╂─┐┃  ┗╃╄┙  ╶┼╴╺╋╸┠┼┨ ┝╋┥    ▋ ╲╱╲╱╳╳╳
-  ║│╲ ╱│║  │║   ║│  ││ │ ││  │║ ┃ ║│  ┃│ ╿ │┃  ┍╅╆┓   ╵  ╹ ┗┷┛ └┸┘    ▌ ╱╲╱╲╳╳╳
-  ╠╡ ╳ ╞╣  ├╢   ╟┤  ├┼─┼─┼┤  ├╫─╂─╫┤  ┣┿╾┼╼┿┫  ┕┛┖┚     ┌┄┄┐ ╎ ┏┅┅┓ ┋ ▍ ╲╱╲╱╳╳╳
-  ║│╱ ╲│║  │║   ║│  ││ │ ││  │║ ┃ ║│  ┃│ ╽ │┃  ░░▒▒▓▓██ ┊  ┆ ╎ ╏  ┇ ┋ ▎
-  ║└─╥─┘║  │╚═╤═╝│  │╘═╪═╛│  │╙─╀─╜│  ┃└─╂─┘┃  ░░▒▒▓▓██ ┊  ┆ ╎ ╏  ┇ ┋ ▏
-  ╚══╩══╝  └──┴──┘  ╰──┴──╯  ╰──┴──╯  ┗━━┻━━┛           └╌╌┘ ╎ ┗╍╍┛ ┋  ▁▂▃▄▅▆▇█
+Box drawing alignment tests:
+                                                                   █
+╔══╦══╗  ┌──┬──┐  ╭──┬──╮  ╭──┬──╮  ┏━━┳━━┓ ┎┒┏┑   ╷  ╻ ┏┯┓ ┌┰┐    ▉ ╱╲╱╲╳╳╳
+║┌─╨─┐║  │╔═╧═╗│  │╒═╪═╕│  │╓─╁─╖│  ┃┌─╂─┐┃ ┗╃╄┙  ╶┼╴╺╋╸┠┼┨ ┝╋┥    ▊ ╲╱╲╱╳╳╳
+║│╲ ╱│║  │║   ║│  ││ │ ││  │║ ┃ ║│  ┃│ ╿ │┃ ┍╅╆┓   ╵  ╹ ┗┷┛ └┸┘    ▋ ╱╲╱╲╳╳╳
+╠╡ ╳ ╞╣  ├╢   ╟┤  ├┼─┼─┼┤  ├╫─╂─╫┤  ┣┿╾┼╼┿┫ ┕┛┖┚     ┌┄┄┐ ╎ ┏┅┅┓ ┋ ▌ ╲╱╲╱╳╳╳
+║│╱ ╲│║  │║   ║│  ││ │ ││  │║ ┃ ║│  ┃│ ╽ │┃ ░░▒▒▓▓██ ┊  ┆ ╎ ╏  ┇ ┋ ▍
+║└─╥─┘║  │╚═╤═╝│  │╘═╪═╛│  │╙─╀─╜│  ┃└─╂─┘┃ ░░▒▒▓▓██ ┊  ┆ ╎ ╏  ┇ ┋ ▎
+╚══╩══╝  └──┴──┘  ╰──┴──╯  ╰──┴──╯  ┗━━┻━━┛          └╌╌┘ ╎ ┗╍╍┛ ┋ ▏▁▂▃▄▅▆▇█
 
 Dashes alignment test:
 

tweak font test file titles
diff --git a/blog/2024-05-29-playing-with-fonts-again.md b/blog/2024-05-29-playing-with-fonts-again.md
index 19881144..91a85d0c 100644
--- a/blog/2024-05-29-playing-with-fonts-again.md
+++ b/blog/2024-05-29-playing-with-fonts-again.md
@@ -66,12 +66,12 @@ have sworn I had a good one like this lying around somewhere but
 couldn't find it so here it is, I guess.
 
 ```
-US keyboard coverage
+US keyboard coverage:
 
 abcdefghijklmnopqrstuvwxyz`1234567890-=[]\;',./
 ABCDEFGHIJKLMNOPQRSTUVWXYZ~!@#$%^&*()_+{}|:"<>?
 
-ambiguous characters
+ambiguity test:
 
 iI71lL!|¦ 
 [](){}/\
@@ -85,19 +85,20 @@ ACUTE ACCENT, GRAVE ACCENT: ´`
 EURO SIGN: €
 unicode A1-BF: ¡¢£¤¥¦§¨©ª«¬­®¯°±²³´µ¶·¸¹º»¼½¾¿
 
-all characters in a sentence, uppercase
+all characters in a sentence, uppercase:
 
 the quick fox jumps over the lazy dog
 THE QUICK FOX JUMPS OVER THE LAZY DOG
 
-same, in french
+same, in french:
 
 voix ambiguë d'un cœur qui, au zéphyr,
 préfère les jattes de kiwis.
 VOIX AMBIGUË D'UN CŒUR QUI, AU ZÉPHYR,
 PRÉFÈRE LES JATTES DE KIWIS.
 
-Ligatures test
+Ligatures test:
+
 -<< -< -<- <-- <--- <<- <- -> ->> --> ---> ->- >- >>-
 =<< =< =<= <== <=== <<= <= => =>> ==> ===> =>= >= >>=
 <-> <--> <---> <----> <=> <==> <===> <====> :: ::: __
@@ -115,6 +116,8 @@ Box drawing alignment tests:                                          █
   ║└─╥─┘║  │╚═╤═╝│  │╘═╪═╛│  │╙─╀─╜│  ┃└─╂─┘┃  ░░▒▒▓▓██ ┊  ┆ ╎ ╏  ┇ ┋ ▏
   ╚══╩══╝  └──┴──┘  ╰──┴──╯  ╰──┴──╯  ┗━━┻━━┛           └╌╌┘ ╎ ┗╍╍┛ ┋  ▁▂▃▄▅▆▇█
 
+Dashes alignment test:
+
 HYPHEN-MINUS, MINUS SIGN, EN, EM DASH, HORIZONTAL BAR, LOW LINE
 --------------------------------------------------
 −−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−

add ligatures test, from https://typeof.net/Iosevka/
diff --git a/blog/2024-05-29-playing-with-fonts-again.md b/blog/2024-05-29-playing-with-fonts-again.md
index d3de4833..19881144 100644
--- a/blog/2024-05-29-playing-with-fonts-again.md
+++ b/blog/2024-05-29-playing-with-fonts-again.md
@@ -79,6 +79,12 @@ e¢coC0ODQ
 b6G&0B83
 zs$S52Z%
 
+MIDDLE DOT, BULLET, HORIZONTAL ELLIPSIS: ·•…
+curly ‘single’ and “double” quotes
+ACUTE ACCENT, GRAVE ACCENT: ´`
+EURO SIGN: €
+unicode A1-BF: ¡¢£¤¥¦§¨©ª«¬­®¯°±²³´µ¶·¸¹º»¼½¾¿
+
 all characters in a sentence, uppercase
 
 the quick fox jumps over the lazy dog
@@ -91,6 +97,14 @@ préfère les jattes de kiwis.
 VOIX AMBIGUË D'UN CŒUR QUI, AU ZÉPHYR,
 PRÉFÈRE LES JATTES DE KIWIS.
 
+Ligatures test
+-<< -< -<- <-- <--- <<- <- -> ->> --> ---> ->- >- >>-
+=<< =< =<= <== <=== <<= <= => =>> ==> ===> =>= >= >>=
+<-> <--> <---> <----> <=> <==> <===> <====> :: ::: __
+<~~ </ </> /> ~~> == != /= ~= <> === !== !=== =/= =!=
+<: := *= *+ <* <*> *> <| <|> |> <. <.> .> +* =* =: :>
+(* *) /* */ [| |] {| |} ++ +++ \/ /\ |- -| <!-- <!---
+
 Box drawing alignment tests:                                          █
                                                                       ▉
   ╔══╦══╗  ┌──┬──┐  ╭──┬──╮  ╭──┬──╮  ┏━━┳━━┓  ┎┒┏┑   ╷  ╻ ┏┯┓ ┌┰┐    ▊ ╱╲╱╲╳╳╳
@@ -101,12 +115,6 @@ Box drawing alignment tests:                                          █
   ║└─╥─┘║  │╚═╤═╝│  │╘═╪═╛│  │╙─╀─╜│  ┃└─╂─┘┃  ░░▒▒▓▓██ ┊  ┆ ╎ ╏  ┇ ┋ ▏
   ╚══╩══╝  └──┴──┘  ╰──┴──╯  ╰──┴──╯  ┗━━┻━━┛           └╌╌┘ ╎ ┗╍╍┛ ┋  ▁▂▃▄▅▆▇█
 
-MIDDLE DOT, BULLET, HORIZONTAL ELLIPSIS: ·•…
-curly ‘single’ and “double” quotes
-ACUTE ACCENT, GRAVE ACCENT: ´`
-EURO SIGN: €
-unicode A1-BF: ¡¢£¤¥¦§¨©ª«¬­®¯°±²³´µ¶·¸¹º»¼½¾¿
-
 HYPHEN-MINUS, MINUS SIGN, EN, EM DASH, HORIZONTAL BAR, LOW LINE
 --------------------------------------------------
 −−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−
@@ -117,6 +125,8 @@ __________________________________________________
 
 ```
 
+-->
+
 So there you have it, got completely nerd swiped by typography
 again. Now I can go back to writing a too-long proposal again.
 

add cent, vertical pipe, z to ambiguity sample
diff --git a/blog/2024-05-29-playing-with-fonts-again.md b/blog/2024-05-29-playing-with-fonts-again.md
index aab9b70c..d3de4833 100644
--- a/blog/2024-05-29-playing-with-fonts-again.md
+++ b/blog/2024-05-29-playing-with-fonts-again.md
@@ -73,8 +73,11 @@ ABCDEFGHIJKLMNOPQRSTUVWXYZ~!@#$%^&*()_+{}|:"<>?
 
 ambiguous characters
 
-iI71lL!| ecoC0ODQ
-[](){}/\ b6G&0B83 $sS52Z%
+iI71lL!|¦ 
+[](){}/\
+e¢coC0ODQ
+b6G&0B83
+zs$S52Z%
 
 all characters in a sentence, uppercase
 

review utf-8 sample file after reading agave's home page
It has a more extensive sample coverage like b6G& and eco that we
didn't have. Also we had $ on its own without anything to compare it
to, so add the interesting $sS52Z% string in there as well.
Shift the full keyboard sample upwars and make it ordered more
logically.
diff --git a/blog/2024-05-29-playing-with-fonts-again.md b/blog/2024-05-29-playing-with-fonts-again.md
index ccad50ee..aab9b70c 100644
--- a/blog/2024-05-29-playing-with-fonts-again.md
+++ b/blog/2024-05-29-playing-with-fonts-again.md
@@ -66,14 +66,15 @@ have sworn I had a good one like this lying around somewhere but
 couldn't find it so here it is, I guess.
 
 ```
-ASCII test
+US keyboard coverage
 
-abcdefghijklmnopqrstuvwxyz1234567890-=
-ABCDEFGHIJKLMNOPQRSTUVWXYZ!@#$%^&*()_+
+abcdefghijklmnopqrstuvwxyz`1234567890-=[]\;',./
+ABCDEFGHIJKLMNOPQRSTUVWXYZ~!@#$%^&*()_+{}|:"<>?
 
 ambiguous characters
 
-&iIL7l1!|[](){}/\oO0DQ8B3;:,./?~`'"$
+iI71lL!| ecoC0ODQ
+[](){}/\ b6G&0B83 $sS52Z%
 
 all characters in a sentence, uppercase
 

add 3 to B/8 ambiguity check, thanks @mdione
diff --git a/blog/2024-05-29-playing-with-fonts-again.md b/blog/2024-05-29-playing-with-fonts-again.md
index 252125c6..ccad50ee 100644
--- a/blog/2024-05-29-playing-with-fonts-again.md
+++ b/blog/2024-05-29-playing-with-fonts-again.md
@@ -73,7 +73,7 @@ ABCDEFGHIJKLMNOPQRSTUVWXYZ!@#$%^&*()_+
 
 ambiguous characters
 
-&iIL7l1!|[](){}/\oO0DQ8B;:,./?~`'"$
+&iIL7l1!|[](){}/\oO0DQ8B3;:,./?~`'"$
 
 all characters in a sentence, uppercase
 

delete duplicated federation post
diff --git a/blog/2024-05-29-playing-with-fonts-again.md b/blog/2024-05-29-playing-with-fonts-again.md
index d0bcd45a..252125c6 100644
--- a/blog/2024-05-29-playing-with-fonts-again.md
+++ b/blog/2024-05-29-playing-with-fonts-again.md
@@ -145,8 +145,5 @@ Sources and inspiration for the above:
 [[!tag debian-planet python-planet typography meta theming usability]]
 
 
-<!-- posted to the federation on 2024-05-29T17:44:57.665346 -->
-[[!mastodon "https://kolektiva.social/@Anarcat/112526563552199519"]]
-
 <!-- posted to the federation on 2024-05-29T17:44:57.933852 -->
-[[!mastodon "https://kolektiva.social/@Anarcat/112526563590503074"]]
\ No newline at end of file
+[[!mastodon "https://kolektiva.social/@Anarcat/112526563590503074"]]

fix blog post title
diff --git a/blog/2024-05-29-playing-with-fonts-again.md b/blog/2024-05-29-playing-with-fonts-again.md
index 8d88f6c0..d0bcd45a 100644
--- a/blog/2024-05-29-playing-with-fonts-again.md
+++ b/blog/2024-05-29-playing-with-fonts-again.md
@@ -1,4 +1,4 @@
-[[meta title="Playing with fonts again"]]
+[[!meta title="Playing with fonts again"]]
 
 I am getting increasingly frustrated by Fira Mono's [lack of italic
 support](https://github.com/mozilla/Fira/issues/38) so I am looking at [[alternative fonts

automatic federated post of blog/2024-05-29-playing-with-fonts-again.md
Command: ['/usr/bin/feed2exec', '-v', 'fetch', '--nocache']
Plugin file: /usr/lib/python3/dist-packages/feed2exec/plugins/ikiwikitoot.py
Source directory: /home/w-anarcat/source
Running on: marcos
diff --git a/blog/2024-05-29-playing-with-fonts-again.md b/blog/2024-05-29-playing-with-fonts-again.md
index 048a59e0..8d88f6c0 100644
--- a/blog/2024-05-29-playing-with-fonts-again.md
+++ b/blog/2024-05-29-playing-with-fonts-again.md
@@ -143,3 +143,10 @@ Sources and inspiration for the above:
 - [UTF-8 sampler](https://web.archive.org/web/20080515024332/http://www.columbia.edu/kermit/utf8.html) - unused, similar
 
 [[!tag debian-planet python-planet typography meta theming usability]]
+
+
+<!-- posted to the federation on 2024-05-29T17:44:57.665346 -->
+[[!mastodon "https://kolektiva.social/@Anarcat/112526563552199519"]]
+
+<!-- posted to the federation on 2024-05-29T17:44:57.933852 -->
+[[!mastodon "https://kolektiva.social/@Anarcat/112526563590503074"]]
\ No newline at end of file

another image viewer
diff --git a/software/desktop/x11.md b/software/desktop/x11.md
index 82a27606..5ae8c443 100644
--- a/software/desktop/x11.md
+++ b/software/desktop/x11.md
@@ -189,6 +189,9 @@ Other alternatives I have considered or used in the past:
  * [nomacs](https://github.com/nomacs/nomacs): gorgeous, fast, but badly maintained, [vendored
    exiv](https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=974616), [unfixed CVE](https://github.com/nomacs/nomacs/issues/516) ([CVE-2020-23884](https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=1014124)), no release in 2
    years (as of 2022)
+ * [oculante](https://github.com/woelper/oculante): fast startup, animation-level sequential image
+   display, hardware acceleration, minimal editing capabilities, not
+   in Debian
  * [pho](http://shallowsky.com/software/pho/): streamlined, minimal, batch operations, not in Debian
  * [plio][]: sxiv rewrite, with sorting capacities
  * [sxiv](https://github.com/muennich/sxiv): abandoned upstream

publish blog post
diff --git a/blog/2024-05-29-playing-with-fonts-again.md b/blog/2024-05-29-playing-with-fonts-again.md
index dc9a9254..048a59e0 100644
--- a/blog/2024-05-29-playing-with-fonts-again.md
+++ b/blog/2024-05-29-playing-with-fonts-again.md
@@ -142,4 +142,4 @@ Sources and inspiration for the above:
 
 - [UTF-8 sampler](https://web.archive.org/web/20080515024332/http://www.columbia.edu/kermit/utf8.html) - unused, similar
 
-[[!tag draft]]
+[[!tag debian-planet python-planet typography meta theming usability]]

some edits
diff --git a/blog/2024-05-29-playing-with-fonts-again.md b/blog/2024-05-29-playing-with-fonts-again.md
index c877f3d6..dc9a9254 100644
--- a/blog/2024-05-29-playing-with-fonts-again.md
+++ b/blog/2024-05-29-playing-with-fonts-again.md
@@ -41,22 +41,25 @@ originals *look* sharp on my display, I suspect this is something to
 do with the Wayland transition. I've tried with both [grim](https://sr.ht/~emersion/grim/) and
 [flameshot](https://github.com/flameshot-org/flameshot), for what its worth.)
 
-They are pretty similar! Commit Mono feels a *bit* more compressed,
-maybe too much so, actually -- the line height feels too low.  But
-it's heavily customizable so that's something that's relatively easy
-to fix, if it's really a problem. Its weight is also a little heavier
-than Fira which I find a little distracting right now, but maybe I'll
-get used to it.
+They are pretty similar! Commit Mono feels a *bit* more vertically
+compressed maybe too much so, actually -- the line height feels too
+low.  But it's heavily customizable so that's something that's
+relatively easy to fix, if it's really a problem. Its weight is also a
+little heavier and wider than Fira which I find a little distracting
+right now, but maybe I'll get used to it.
 
 All characters seem properly distinguishable, although, if I'd really
-want to nitpick I'd say the © and ® are too different, with the latter
-(`REGISTERED SIGN`) being way too small, basically unreadable
-here. Since I see this approximately never, it probably doesn't
-matter.
+want to nitpick I'd say the © and ® are *too* different, with the
+latter (`REGISTERED SIGN`) being way too small, basically unreadable
+here. Since I see this sign approximately never, it probably doesn't
+matter at all.
 
 I like how the ampersand (`&`) is more traditional, although I'll miss
-the exotic Fira one... I like how the back quotes (`\``, `GRAVE ACCENT`)
-drop down low, nicely aligned with the apostrophe.
+the exotic one Fira produced... I like how the back quotes (`` ` ``,
+`GRAVE ACCENT`) drop down low, nicely aligned with the apostrophe. As
+I mentioned before, I like how the bar on the "f" aligns with the
+other top of letters, something in Fira mono that really annoys me now
+that I've noticed it (it's not aligned!).
 
 Here's the test sheet I've made up to test various characters. I could
 have sworn I had a good one like this lying around somewhere but

new blog post: new fonts
diff --git a/blog/2024-05-29-playing-with-fonts-again.md b/blog/2024-05-29-playing-with-fonts-again.md
new file mode 100644
index 00000000..c877f3d6
--- /dev/null
+++ b/blog/2024-05-29-playing-with-fonts-again.md
@@ -0,0 +1,142 @@
+[[meta title="Playing with fonts again"]]
+
+I am getting increasingly frustrated by Fira Mono's [lack of italic
+support](https://github.com/mozilla/Fira/issues/38) so I am looking at [[alternative fonts
+again|2020-03-10-font-changes]].
+
+This time I seem to be settling on either [Commit Mono](https://commitmono.com/) or [Space
+Mono](https://www.colophon-foundry.org/custom-projects/space-mono). For now I'm using Commit Mono because it's a little more
+compressed than Fira and does have a italic version. I don't like how
+Space Mono's parenthesis (`()`) is "squarish", it feels visually
+ambiguous with the square brackets (`[]`), a big no-no for my primary
+use case (code).
+
+So here I am using a new font, again. It required changing a bunch of
+configuration files in my home directory (which is in a private
+repository, sorry) and Emacs configuration (thankfully that's
+public!). 
+
+One gotcha is I realized I didn't actually have a global font
+configuration in Emacs, as some [Faces](https://www.gnu.org/software/emacs/manual/html_node/emacs/Faces.html) define their own font
+family, which overrides the frame defaults.
+
+This is what it looks like, before:
+
+<figure>
+<img src="snap-20240529T171950-fira-mono.png" alt="A dark terminal
+showing the test sheet in Fira Mono" />
+<figcaption>Fira Mono</figcaption>
+</figure>
+
+After:
+
+<figure>
+<img src="snap-20240529T171846-commit-mono.png" alt="A dark terminal
+showing the test sheet in Fira Mono" />
+<figcaption>Commit Mono</figcaption>
+</figure>
+
+(Notice how those screenshots are not sharp? I'm surprised too. The
+originals *look* sharp on my display, I suspect this is something to
+do with the Wayland transition. I've tried with both [grim](https://sr.ht/~emersion/grim/) and
+[flameshot](https://github.com/flameshot-org/flameshot), for what its worth.)
+
+They are pretty similar! Commit Mono feels a *bit* more compressed,
+maybe too much so, actually -- the line height feels too low.  But
+it's heavily customizable so that's something that's relatively easy
+to fix, if it's really a problem. Its weight is also a little heavier
+than Fira which I find a little distracting right now, but maybe I'll
+get used to it.
+
+All characters seem properly distinguishable, although, if I'd really
+want to nitpick I'd say the © and ® are too different, with the latter
+(`REGISTERED SIGN`) being way too small, basically unreadable
+here. Since I see this approximately never, it probably doesn't
+matter.
+
+I like how the ampersand (`&`) is more traditional, although I'll miss
+the exotic Fira one... I like how the back quotes (`\``, `GRAVE ACCENT`)
+drop down low, nicely aligned with the apostrophe.
+
+Here's the test sheet I've made up to test various characters. I could
+have sworn I had a good one like this lying around somewhere but
+couldn't find it so here it is, I guess.
+
+```
+ASCII test
+
+abcdefghijklmnopqrstuvwxyz1234567890-=
+ABCDEFGHIJKLMNOPQRSTUVWXYZ!@#$%^&*()_+
+
+ambiguous characters
+
+&iIL7l1!|[](){}/\oO0DQ8B;:,./?~`'"$
+
+all characters in a sentence, uppercase
+
+the quick fox jumps over the lazy dog
+THE QUICK FOX JUMPS OVER THE LAZY DOG
+
+same, in french
+
+voix ambiguë d'un cœur qui, au zéphyr,
+préfère les jattes de kiwis.
+VOIX AMBIGUË D'UN CŒUR QUI, AU ZÉPHYR,
+PRÉFÈRE LES JATTES DE KIWIS.
+
+Box drawing alignment tests:                                          █
+                                                                      ▉
+  ╔══╦══╗  ┌──┬──┐  ╭──┬──╮  ╭──┬──╮  ┏━━┳━━┓  ┎┒┏┑   ╷  ╻ ┏┯┓ ┌┰┐    ▊ ╱╲╱╲╳╳╳
+  ║┌─╨─┐║  │╔═╧═╗│  │╒═╪═╕│  │╓─╁─╖│  ┃┌─╂─┐┃  ┗╃╄┙  ╶┼╴╺╋╸┠┼┨ ┝╋┥    ▋ ╲╱╲╱╳╳╳
+  ║│╲ ╱│║  │║   ║│  ││ │ ││  │║ ┃ ║│  ┃│ ╿ │┃  ┍╅╆┓   ╵  ╹ ┗┷┛ └┸┘    ▌ ╱╲╱╲╳╳╳
+  ╠╡ ╳ ╞╣  ├╢   ╟┤  ├┼─┼─┼┤  ├╫─╂─╫┤  ┣┿╾┼╼┿┫  ┕┛┖┚     ┌┄┄┐ ╎ ┏┅┅┓ ┋ ▍ ╲╱╲╱╳╳╳
+  ║│╱ ╲│║  │║   ║│  ││ │ ││  │║ ┃ ║│  ┃│ ╽ │┃  ░░▒▒▓▓██ ┊  ┆ ╎ ╏  ┇ ┋ ▎
+  ║└─╥─┘║  │╚═╤═╝│  │╘═╪═╛│  │╙─╀─╜│  ┃└─╂─┘┃  ░░▒▒▓▓██ ┊  ┆ ╎ ╏  ┇ ┋ ▏
+  ╚══╩══╝  └──┴──┘  ╰──┴──╯  ╰──┴──╯  ┗━━┻━━┛           └╌╌┘ ╎ ┗╍╍┛ ┋  ▁▂▃▄▅▆▇█
+
+MIDDLE DOT, BULLET, HORIZONTAL ELLIPSIS: ·•…
+curly ‘single’ and “double” quotes
+ACUTE ACCENT, GRAVE ACCENT: ´`
+EURO SIGN: €
+unicode A1-BF: ¡¢£¤¥¦§¨©ª«¬­®¯°±²³´µ¶·¸¹º»¼½¾¿
+
+HYPHEN-MINUS, MINUS SIGN, EN, EM DASH, HORIZONTAL BAR, LOW LINE
+--------------------------------------------------
+−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−
+––––––––––––––––––––––––––––––––––––––––––––––––––
+——————————————————————————————————————————————————
+――――――――――――――――――――――――――――――――――――――――――――――――――
+__________________________________________________
+
+```
+
+So there you have it, got completely nerd swiped by typography
+again. Now I can go back to writing a too-long proposal again.
+
+Sources and inspiration for the above:
+
+- the `unicode(1)` command, to lookup individual characters to
+  disambiguate, for example, `-` (`U+002D HYPHEN-MINUS`, the minus
+  sign next to zero on US keyboards) and − (`U+2212 MINUS SIGN`, a
+  math symbol)
+
+- [searchable list of characters and their names](https://web.archive.org/web/20080515015236/http://www.columbia.edu/kermit/utf8-t1.html) - roughly
+  equivalent to the `unicode(1)` command, but in one page, amazingly
+  the `/usr/share/unicode` database doesn't have any one file like
+  this
+
+- [bits/UTF-8-Unicode-Test-Documents](https://github.com/bits/UTF-8-Unicode-Test-Documents) - full list of UTF-8
+  characters
+
+- [UTF-8 encoded plain text file](https://www.cl.cam.ac.uk/~mgk25/ucs/examples/UTF-8-demo.txt) - nice examples of edge cases,
+  curly quotes example and box drawing alignment test which,
+  incidentally, showed me I needed specific faces customisation in
+  Emacs to get the Markdown code areas to display properly, also the
+  idea of comparing various dashes
+
+- [sample sentences in many languages](https://www.cl.cam.ac.uk/~mgk25/ucs/examples/quickbrown.txt) - unused, "Sentences that
+  contain all letters commonly used in a language"
+
+- [UTF-8 sampler](https://web.archive.org/web/20080515024332/http://www.columbia.edu/kermit/utf8.html) - unused, similar
+
+[[!tag draft]]
diff --git a/blog/2024-05-29-playing-with-fonts-again/snap-20240529T171846-commit-mono.png b/blog/2024-05-29-playing-with-fonts-again/snap-20240529T171846-commit-mono.png
new file mode 100644
index 00000000..2ceafccc
Binary files /dev/null and b/blog/2024-05-29-playing-with-fonts-again/snap-20240529T171846-commit-mono.png differ
diff --git a/blog/2024-05-29-playing-with-fonts-again/snap-20240529T171950-fira-mono.png b/blog/2024-05-29-playing-with-fonts-again/snap-20240529T171950-fira-mono.png
new file mode 100644
index 00000000..569b4e84
Binary files /dev/null and b/blog/2024-05-29-playing-with-fonts-again/snap-20240529T171950-fira-mono.png differ

more keyring help
diff --git a/.well-known/openpgpkey/Makefile b/.well-known/openpgpkey/Makefile
index 593215b6..1c6aa85f 100644
--- a/.well-known/openpgpkey/Makefile
+++ b/.well-known/openpgpkey/Makefile
@@ -30,9 +30,12 @@ upload:
 	@echo "next time, try using GitLab API: https://docs.gitlab.com/ee/api/users.html#list-all-gpg-keys"
 	@echo "list, parse for fingerprint, delete, then upload"
 	@echo "last test with plain 'python-gitlab' CLI failed though"
+	gpg --export --export-options export-minimal -a $(FINGERPRINT) | wl-copy
+	@echo "key copied to clipboard"
 
 renew:
 	gpg --quick-set-expire $(FINGERPRINT) $(NEXT_EXPIRE)
+	@echo "note that this doesn't upload or update the key! run '$(MAKE) hu upload upload-tpo' to complete the procedure"
 
 upload-tpo:
 	@echo "updating TPO keyring"

renew pgp key, pushed everywhere and updated procedures
diff --git a/.well-known/openpgpkey/Makefile b/.well-known/openpgpkey/Makefile
index 973b6889..593215b6 100644
--- a/.well-known/openpgpkey/Makefile
+++ b/.well-known/openpgpkey/Makefile
@@ -24,8 +24,12 @@ upload:
 	@echo "Not covered: GitLab and GitHub accounts:"
 	@echo "https://gitlab.torproject.org/-/profile/gpg_keys"
 	@echo "https://gitlab.com/-/profile/gpg_keys"
+	@echo "https://salsa.debian.org/-/profile/gpg_keys"
 	@echo "https://github.com/settings/keys"
-	@echo "https://salsa.debian.org/settings/keys"
+	@echo "most involves deleting the old key then reuploading the new one"
+	@echo "next time, try using GitLab API: https://docs.gitlab.com/ee/api/users.html#list-all-gpg-keys"
+	@echo "list, parse for fingerprint, delete, then upload"
+	@echo "last test with plain 'python-gitlab' CLI failed though"
 
 renew:
 	gpg --quick-set-expire $(FINGERPRINT) $(NEXT_EXPIRE)
@@ -36,10 +40,3 @@ upload-tpo:
 	gpg --export --export-options export-minimal $(FINGERPRINT) > $(TPO_KEYRING)/torproject-keyring/anarcat-$(FINGERPRINT).gpg
 	git -C $(TPO_KEYRING) commit torproject-keyring/anarcat-$(FINGERPRINT).gpg
 	git -C $(TPO_KEYRING) push
-	git -C $(TPO_KEYRING) push alberti
-
-	@echo "updating TPO password manager keyring"
-	git -C $(TPO_PWMANAGER) pull
-	gpg --export --export-options export-minimal $(FINGERPRINT) | gpg --no-default-keyring --keyring=$(TPO_PWMANAGER)/.keyring --import
-	git -C $(TPO_PWMANAGER) commit .keyring
-	git -C $(TPO_PWMANAGER) push
diff --git a/.well-known/openpgpkey/hu/myctwj4an6ne7htuzyoo8osctuji68xe b/.well-known/openpgpkey/hu/myctwj4an6ne7htuzyoo8osctuji68xe
index 5fc43adf..1d3f569e 100644
Binary files a/.well-known/openpgpkey/hu/myctwj4an6ne7htuzyoo8osctuji68xe and b/.well-known/openpgpkey/hu/myctwj4an6ne7htuzyoo8osctuji68xe differ

fix links in usb-c article
diff --git a/blog/2023-02-10-usb-c.md b/blog/2023-02-10-usb-c.md
index 94e7a168..12a074cd 100644
--- a/blog/2023-02-10-usb-c.md
+++ b/blog/2023-02-10-usb-c.md
@@ -144,7 +144,7 @@ I found that weird little thing through [this Twitter post](https://twitter.com/
 [Benedict Reuschling](https://twitter.com/bsdbcr), from [this blog post](https://klarasystems.com/articles/openzfs-data-security-vs-integrity/), from [2.5 admins
 episode 127](https://2.5admins.com/2-5-admins-127/) (phew!).
 
-I ordered a TOFU power station in February (2023-02-20) and it landed
+I ordered a [TOFU power station](https://www.zentofu.com/tps.php) in February (2023-02-20) and it landed
 on my doorstep about two weeks later (2023-03-08).
 
 The power output is a little disappointing: my laptop tells me it's
@@ -156,7 +156,7 @@ fine for charging the laptop overnight during my travels, which is
 basically my use case here.
 
 The "travel" thing is a little plastic contraption that holds three
-different power adapters: [Australian](https://en.wikipedia.org/wiki/AS/NZS_3112), [British](https://en.wikipedia.org/wiki/AC_power_plugs_and_sockets:_British_and_related_types#BS_1363_three-pin_(rectangular)_plugs_and_sockets), [Europe](https://en.wikipedia.org/wiki/Europlug),
+different power adapters: [Australian](https://en.wikipedia.org/wiki/AS/NZS_3112), [British][], [Europe](https://en.wikipedia.org/wiki/Europlug),
 and [USA](https://en.wikipedia.org/wiki/NEMA_connector). The clever thing here is the other end is what looks
 like a [IEC 60320](https://en.wikipedia.org/wiki/IEC_60320) C7/C8 coupler, AKA a "figure-8", "infinity" or
 "shotgun", according to Wikipedia. It seems design to fit with Macbook
@@ -244,6 +244,8 @@ Update 2: I traveled quite a bit with this device and I like it. The
 main downside is the cable is just too damn short and a larger cable
 doesn't fit well in the case. Otherwise it's really nice.
 
+[British]: https://en.wikipedia.org/wiki/AC_power_plugs_and_sockets:_British_and_related_types#BS_1363_three-pin_(rectangular)_plugs_and_sockets
+
 ### TOFU YOYO Cable
 
 I also bought the [YOYO cable](https://www.elvesfactory.com/worldshop/EN/TOFU/TYC) in the hope it would fix that

another phone
diff --git a/hardware/phone.mdwn b/hardware/phone.mdwn
index 7c7eca6b..f777de51 100644
--- a/hardware/phone.mdwn
+++ b/hardware/phone.mdwn
@@ -170,6 +170,11 @@ report](https://puri.sm/posts/massive-progress-exact-cpu-selected-minor-shipping
 shipping", so that means at least July 2019, if not later. Their demos
 still don't have a finished device.
 
+## SHIFTphone
+
+[shiftphone 8](https://www.shift.eco/en/shiftphone-8-status-page-2/) will have [mainline support](https://www.phoronix.com/news/SHIFTphone-8-Linux-Patches),
+incredibly. repairable, IPX rating. seems like a fat phone though.
+
 Google
 ------
 

CRLs expire, ugh
diff --git a/services/mail.mdwn b/services/mail.mdwn
index bb8dc235..1730c6cf 100644
--- a/services/mail.mdwn
+++ b/services/mail.mdwn
@@ -1165,6 +1165,14 @@ You can now test revocation with:
     cat cacert.pem crl.pem > cacrl.pem
     service dovecot restart
 
+Note that, by default, that damn crl expires after 30 days, you'll
+probably want to bump that expiry date (with `default_crl_days=3650`
+in `openssl.conf` or with the `-crldays` option) and then:
+
+    openssl ca -config openssl.cnf  -gencrl  > crl.pem
+    cat cacert.pem crl.pem > cacrl.pem
+    service dovecot restart
+
 And now the above `curl` command should fail. Notice how dovecot needs
 a kick after revocation, a `reload` might be sufficient as well.
 

upgraded to Emacs 29 for Wayland support, amazing
diff --git a/software/desktop/wayland.md b/software/desktop/wayland.md
index 74e16c24..403fbb4d 100644
--- a/software/desktop/wayland.md
+++ b/software/desktop/wayland.md
@@ -411,44 +411,29 @@ Unchanged.
 
 See Email, above, or Emacs in Editor, below.
 
-## Editor: Emacs okay-ish
+## Editor: Emacs
 
-Emacs is being actively ported to Wayland. According to [this LWN
+Emacs was ported to Wayland in version 29. According to [this LWN
 article][], the first (partial, to Cairo) port was done in 2014 and a
 working port (to GTK3) was completed in 2021, but wasn't merged until
-[late 2021][]. That is: after [Emacs 28 was released][] (April
-2022). 
+[late 2021][]. That is: after [Emacs 28 was released][] (April 2022)
+and [Debian bookworm freeze][]. The Emacs 29 bookworm backport works.
 
-So we'll probably need to wait for Emacs 29 to have native Wayland
-support in Emacs, which, in turn, is unlikely to arrive in time for
-the [Debian bookworm freeze][]. There are, however, [unofficial
-builds][] for both Emacs 28 and 29 provided by [spwhitton][] which
-may provide native Wayland support. 
+To get the native builds, you need to install the [emacs-pgtk
+package](https://packages.debian.org/unstable/emacs-pgtk).
 
-I tested the snapshot packages and they do not quite work well
-enough. First off, they completely take over the builtin Emacs — they
-hijack the `$PATH` in `/etc`! — and certain things are simply not
-working in my setup. For example, this hook never gets ran on startup:
-
-    (add-hook 'after-init-hook 'server-start t) 
-
-Still, like many X11 applications, Emacs mostly works fine under
-Xwayland. The clipboard works as expected, for example.
-
-Scaling is a bit of an issue: fonts look fuzzy.
+In any case, like many X11 applications, Emacs mostly works fine under
+Xwayland. The clipboard works as expected, for example. Scaling is a
+bit of an issue: fonts look fuzzy.
 
 I have heard anecdotal evidence of hard lockups with Emacs running
 under Xwayland as well, but haven't experienced any problem so far. I
 did experience a Wayland crash with the snapshot version however.
 
-TODO: look again at Wayland in Emacs 29.
-
 [this LWN article]: https://lwn.net/Articles/843896/
 [late 2021]: https://batsov.com/articles/2021/12/19/building-emacs-from-source-with-pgtk/
 [Emacs 28 was released]: https://www.gnu.org/savannah-checkouts/gnu/emacs/emacs.html#Releases
 [Debian bookworm freeze]: https://lists.debian.org/debian-devel/2022/03/msg00251.html
-[unofficial builds]: https://silentflame.com/debian/
-[spwhitton]: https://spwhitton.name/
 
 ## Backups: borg
 

framework ec driver progress
diff --git a/hardware/laptop/framework-12th-gen.md b/hardware/laptop/framework-12th-gen.md
index 0a083c6a..d5653cc8 100644
--- a/hardware/laptop/framework-12th-gen.md
+++ b/hardware/laptop/framework-12th-gen.md
@@ -235,7 +235,8 @@ the laptop.
  * the EC (Embedded Controller) is [open source](https://github.com/FrameworkComputer/EmbeddedController) so of course
    people are [hacking at it](https://github.com/lhl/linuxlaptops/wiki/2022-Framework-Laptop-DIY-Edition-12th-Gen-Intel-Batch-1#ectool), [some documentation on what's
    possible](https://www.howett.net/posts/2021-12-framework-ec/) (e.g. changing LED colors, fan curves, etc), [see
-   also](https://github.com/lhl/linuxlaptops/wiki/2022-Framework-Laptop-DIY-Edition-12th-Gen-Intel-Batch-1#ectool)
+   also](https://github.com/lhl/linuxlaptops/wiki/2022-Framework-Laptop-DIY-Edition-12th-Gen-Intel-Batch-1#ectool) and possible [mainline inclusion](https://www.phoronix.com/news/Framework-Laptop-EC-Driver) for the charge
+   controller
 
 ## Cons
 

another inotify thing
diff --git a/blog/2019-11-20-file-monitoring-tools.mdwn b/blog/2019-11-20-file-monitoring-tools.mdwn
index 0e8b768b..99163956 100644
--- a/blog/2019-11-20-file-monitoring-tools.mdwn
+++ b/blog/2019-11-20-file-monitoring-tools.mdwn
@@ -408,6 +408,16 @@ to fit a square peg in this round hole:
 
 # Other
 
+## inotify-info
+
+<https://github.com/mikesart/inotify-info>
+
+ * 2021-...
+ * C++
+ * MIT
+ * Debian package
+ * simply lists active inotify watches
+
 ## kfmon (kobo launcher)
 
 <https://github.com/NiLuJe/kfmon>

gtkgreet landed in debian
diff --git a/software/desktop/wayland.md b/software/desktop/wayland.md
index 931a957e..74e16c24 100644
--- a/software/desktop/wayland.md
+++ b/software/desktop/wayland.md
@@ -496,12 +496,15 @@ Possible alternatives:
 
  * [lightdm elephant greeter][] (I tried [[!debpkg slick-greeter]] and
    [[!debpkg ukui-greeter]], neither could start the Sway session)
- * [greetd][], [tuigreet][] (in Debian) and [QtGreet][] (not in
+ * [greetd][] is a login manager that delegates to greeters, like
+   [gtkgreet][], [tuigreet][] (in Debian) and [QtGreet][] (not in
    Debian), tested [agreety][] (part of greetd) but it didn't work at
    all
  * [sddm][]: KDE's default, in Debian, probably heavier or as heavy as
    gdm3
 
+ [gtkgreet]: https://git.sr.ht/~kennylevinsen/gtkgreet
+
 [lightdm elephant greeter]: https://github.com/max-moser/lightdm-elephant-greeter
 [greetd]: https://sr.ht/~kennylevinsen/greetd/
 [QtGreet]: https://gitlab.com/marcusbritanicus/QtGreet

another victim of the federation
diff --git a/blog/2022-06-17-matrix-notes.md b/blog/2022-06-17-matrix-notes.md
index 2b5bec2d..e8da1388 100644
--- a/blog/2022-06-17-matrix-notes.md
+++ b/blog/2022-06-17-matrix-notes.md
@@ -352,7 +352,7 @@ a space in the future where it isn't or should be hidden behind a
 proxy, for example. That still feels like a security issue, and that
 still isn't something Matrix seem to care about.)
 
-[Mastodon has the same problem](https://github.com/mastodon/mastodon/issues/23662).
+[Mastodon has the same problem](https://github.com/mastodon/mastodon/issues/23662), and [people are starting to notice](https://news.itsfoss.com/mastodon-link-problem/).
 
 # Moderation
 

make link references for sending by email
diff --git a/blog/2024-05-01-gitolite-gitlab-migration.md b/blog/2024-05-01-gitolite-gitlab-migration.md
index 991a2c2c..b3833611 100644
--- a/blog/2024-05-01-gitolite-gitlab-migration.md
+++ b/blog/2024-05-01-gitolite-gitlab-migration.md
@@ -5,12 +5,17 @@
 > contrary, I've been very busy but just didn't have time to write
 > about anything. So I've taken it upon myself to write *something*
 > about my work this week, and published [this post on the Tor
-> blog](https://blog.torproject.org/gitolite-gitlab-migration/) which I copy here for a broader audience. Let me know if
+> blog][] which I copy here for a broader audience. Let me know if
 > you like this or not.
 
+ [this post on the Tor blog]: https://blog.torproject.org/gitolite-gitlab-migration/
+
 Tor has finally completed a long migration from legacy Git
-infrastructure ([Gitolite and GitWeb](https://gitlab.torproject.org/tpo/tpa/team/-/wikis/howto/git)) to our self-hosted
-[GitLab](https://gitlab.torproject.org/tpo/tpa/team/-/wikis/howto/gitlab) server.
+infrastructure ([Gitolite and GitWeb][]) to our self-hosted
+[GitLab][] server.
+
+ [GitLab]: https://gitlab.torproject.org/tpo/tpa/team/-/wikis/howto/gitlab
+ [Gitolite and GitWeb]: https://gitlab.torproject.org/tpo/tpa/team/-/wikis/howto/git
 
 Git repository addresses have therefore changed. Many of you probably
 have made the switch already, but if not, you will need to change:
@@ -23,12 +28,15 @@ to:
 
 In your Git configuration.
 
-The [GitWeb front page](https://gitweb.torproject.org/) is now an archived listing of all the
+The [GitWeb front page][] is now an archived listing of all the
 repositories before the migration. Inactive git repositories were
-archived in GitLab [legacy/gitolite namespace](https://gitlab.torproject.org/legacy/gitolite/) and the
+archived in GitLab [legacy/gitolite namespace][] and the
 `gitweb.torproject.org` and `git.torproject.org` web sites now
 redirect to GitLab.
 
+ [legacy/gitolite namespace]: https://gitlab.torproject.org/legacy/gitolite/
+ [GitWeb front page]: https://gitweb.torproject.org/
+
 Best effort was made to reproduce the original gitolite repositories
 faithfully and also avoid duplicating too much data in the
 migration. But it's *possible* that some data present in Gitolite has
@@ -54,69 +62,99 @@ problems we faced during the migration.
 
 Normally, nothing should be lost. All repositories in gitolite have
 been either explicitly migrated by their owners, forcibly migrated by
-the sysadmin team ([TPA](https://gitlab.torproject.org/tpo/tpa/team/)), or explicitly destroyed at their owner's
+the sysadmin team ([TPA][]), or explicitly destroyed at their owner's
 request.
 
-An exhaustive [rewrite map](https://archive.torproject.org/websites/gitolite2gitlab.txt) translates gitolite projects to GitLab
+ [TPA]: https://gitlab.torproject.org/tpo/tpa/team/
+
+An exhaustive [rewrite map][] translates gitolite projects to GitLab
 projects. Some of those projects actually redirect to their *parent*
 in cases of empty repositories that were obvious forks. Destroyed
 repositories redirect to the GitLab front page.
 
+ [rewrite map]: https://archive.torproject.org/websites/gitolite2gitlab.txt
+
 Because the migration happened progressively, it's technically
 possible that commits pushed to gitolite were lost after the
 migration. We took great care to avoid that scenario. First, we
-adopted a proposal ([TPA-RFC-36](https://gitlab.torproject.org/tpo/tpa/team/-/wikis/policy/tpa-rfc-36-gitolite-gitweb-retirement)) in June 2023 to announce the
-transition. Then, in [March 2024](https://gitlab.torproject.org/tpo/tpa/team/-/issues/41213), we locked down all repositories
+adopted a proposal ([TPA-RFC-36][]) in June 2023 to announce the
+transition. Then, in [March 2024][], we locked down all repositories
 from any further changes. Around that time, only a [handful of
-repositories](https://gitlab.torproject.org/tpo/tpa/team/-/issues/41214#note_2983302 "handful of repositories") had changes made after the adoption date, and we
+repositories][] had changes made after the adoption date, and we
 examined each repository carefully to make sure nothing was lost.
 
-Still, we built a [diff of all the changes in the git references](https://gitlab.torproject.org/tpo/tpa/team/-/issues/41215#note_3023924)
+ [handful of repositories]: https://gitlab.torproject.org/tpo/tpa/team/-/issues/41214#note_2983302 "handful of repositories"
+ [March 2024]: https://gitlab.torproject.org/tpo/tpa/team/-/issues/41213
+ [TPA-RFC-36]: https://gitlab.torproject.org/tpo/tpa/team/-/wikis/policy/tpa-rfc-36-gitolite-gitweb-retirement
+
+Still, we built a [diff of all the changes in the git references][]
 that archivists can peruse to check for data loss. It's large (6MiB+)
 because a lot of repositories were migrated before the mass migration
 and then kept evolving in GitLab. Many other repositories were rebuilt
 in GitLab from parent to rebuild a fork relationship which added extra
 references to those clones.
 
+ [diff of all the changes in the git references]: https://gitlab.torproject.org/tpo/tpa/team/-/issues/41215#note_3023924
+
 A note to amateur archivists out there, it's probably too late for one
 last crawl now. The Git repositories now all redirect to GitLab and
 are effectively unavailable in their original form.
 
-That said, the GitWeb site was crawled into the [Internet Archive](https://archive.org/) [in
-February 2024](https://gitlab.torproject.org/tpo/tpa/team/-/issues/41218#note_2992296), so at least some copy of it is available in the
-[Wayback Machine](https://web.archive.org/web/20240204162238/https://gitweb.torproject.org/). At that point, however, many developers had already
+That said, the GitWeb site was crawled into the [Internet Archive][] [in
+February 2024][], so at least some copy of it is available in the
+[Wayback Machine][]. At that point, however, many developers had already
 migrated their projects to GitLab, so the copies there were already
 possibly out of date compared with the repositories in GitLab.
 
-[Software Heritage](https://www.softwareheritage.org/) also has a copy of all repositories hosted on
-Gitolite [since June 2023](https://gitlab.softwareheritage.org/swh/infra/sysadm-environment/-/issues/4939) and have continuously kept mirroring the
+ [Wayback Machine]: https://web.archive.org/web/20240204162238/https://gitweb.torproject.org/
+ [in February 2024]: https://gitlab.torproject.org/tpo/tpa/team/-/issues/41218#note_2992296
+ [Internet Archive]: https://archive.org/
+
+[Software Heritage][] also has a copy of all repositories hosted on
+Gitolite [since June 2023][] and have continuously kept mirroring the
 repositories, where they will be kept hopefully in eternity. There's
-an [issue](https://gitlab.softwareheritage.org/swh/devel/swh-web/-/issues/4787) where the main website can't find the repositories when
+an [issue][] where the main website can't find the repositories when
 you search for `gitweb.torproject.org`, instead [search for
-`git.torproject.org`](https://archive.softwareheritage.org/browse/search/?q=git.torproject.org&visit_type=git&with_content=true&with_visit=true).
+`git.torproject.org`][].
+
+ [search for `git.torproject.org`]: https://archive.softwareheritage.org/browse/search/?q=git.torproject.org&visit_type=git&with_content=true&with_visit=true
+ [issue]: https://gitlab.softwareheritage.org/swh/devel/swh-web/-/issues/4787
+ [since June 2023]: https://gitlab.softwareheritage.org/swh/infra/sysadm-environment/-/issues/4939
+ [Software Heritage]: https://www.softwareheritage.org/
 
 In any case, if you believe data is missing, please do let us know by
-[opening an issue with TPA](https://gitlab.torproject.org/tpo/tpa/team/-/issues/new).
+[opening an issue with TPA][].
+
+ [opening an issue with TPA]: https://gitlab.torproject.org/tpo/tpa/team/-/issues/new
 
 # Why?
 
 This is an old project in the making. The first [discussion about
-migrating from gitolite to GitLab](https://gitlab.torproject.org/tpo/tpa/team/-/issues/40472) started in 2020 (almost 4 years
-ago). But [going further back](https://gitlab.torproject.org/tpo/tpa/team/-/wikis/howto/trac#history), the first GitLab experiment was in
+migrating from gitolite to GitLab][] started in 2020 (almost 4 years
+ago). But [going further back][], the first GitLab experiment was in
 2016, almost a decade ago.
 
+ [going further back]: https://gitlab.torproject.org/tpo/tpa/team/-/wikis/howto/trac#history
+
+ [discussion about migrating from gitolite to GitLab]: https://gitlab.torproject.org/tpo/tpa/team/-/issues/40472
+
 The current GitLab server dates from 2019, [replacing Trac for issue
-tracking in 2020](https://blog.torproject.org/from-trac-into-gitlab-for-tor/). It was originally supposed to host only mirrors
+tracking in 2020][]. It was originally supposed to host only mirrors
 for merge requests and issue trackers but, naturally, one thing led to
 another and eventually, GitLab had grown a container registry,
 continuous integration (CI) runners, GitLab Pages, and, of course,
 hosted most Git repositories.
 
+ [replacing Trac for issue tracking in 2020]: https://blog.torproject.org/from-trac-into-gitlab-for-tor/
+
 There were hesitations at moving to GitLab for code hosting. We had
-[discussions about the increased attack surface](https://gitlab.torproject.org/tpo/tpa/gitlab/-/issues/81) and [ways to
-mitigate that](https://gitlab.torproject.org/tpo/tpa/gitlab/-/issues/98), but, ultimately, it seems the issues were not that
+[discussions about the increased attack surface][] and [ways to
+mitigate that][], but, ultimately, it seems the issues were not that
 serious and the community embraced GitLab.
 
+ [ways to mitigate that]: https://gitlab.torproject.org/tpo/tpa/gitlab/-/issues/98
+ [discussions about the increased attack surface]: https://gitlab.torproject.org/tpo/tpa/gitlab/-/issues/81
+
 TPA actually migrated its most critical repositories out of shared
 hosting entirely, into specific servers (e.g. the Puppet Git
 repository is just on the Puppet server now), leveraging Git's
@@ -138,21 +176,30 @@ When Gitolite access was shutdown, we had repositories on both GitLab
 and Gitolite, without a clear relationship between the two. A priori,
 the plan then was to import all the remaining Gitolite repositories
 into the `legacy/gitolite` namespace, but that seemed wasteful,
-particularly for large repositories like [Tor Browser](https://gitlab.torproject.org/tpo/applications/tor-browser) which uses
+particularly for large repositories like [Tor Browser][] which uses
 nearly a gigabyte of disk space. So we took special care to avoid
 duplicating repositories.
 
-When the [mass migration](https://gitlab.torproject.org/tpo/tpa/team/-/issues/41215) started, only 71 of the 538 Gitolite
+ [Tor Browser]: https://gitlab.torproject.org/tpo/applications/tor-browser
+
+When the [mass migration][] started, only 71 of the 538 Gitolite
 repositories were `Migrated to GitLab` in the `gitolite.conf`
 file. So, given that we had *hundreds* of repositories to migrate:, we
-developed some automation to "[save time](https://xkcd.com/1205/)". We already automate
-similar ad-hoc tasks with [Fabric](https://gitlab.torproject.org/tpo/tpa/team/-/wikis/howto/fabric/), so we used that framework here
-as well. (Our normal configuration management tool is [Puppet](https://gitlab.torproject.org/tpo/tpa/team/-/wikis/howto/puppet),
+developed some automation to "[save time][]". We already automate
+similar ad-hoc tasks with [Fabric][], so we used that framework here
+as well. (Our normal configuration management tool is [Puppet][],
 which is a poor fit here.)
 
-So a relatively [large amount of Python code](https://gitlab.torproject.org/tpo/tpa/fabric-tasks/-/blob/85121b4a8a293cebb0d9dfd68ebf26e2cc95ed76/fabric_tpa/gitolite.py) was produced to
+ [Puppet]: https://gitlab.torproject.org/tpo/tpa/team/-/wikis/howto/puppet
+ [Fabric]: https://gitlab.torproject.org/tpo/tpa/team/-/wikis/howto/fabric/
+ [save time]: https://xkcd.com/1205/
+ [mass migration]: https://gitlab.torproject.org/tpo/tpa/team/-/issues/41215
+
+So a relatively [large amount of Python code][] was produced to
 basically do the following:
 
+ [large amount of Python code]: https://gitlab.torproject.org/tpo/tpa/fabric-tasks/-/blob/85121b4a8a293cebb0d9dfd68ebf26e2cc95ed76/fabric_tpa/gitolite.py
+
  1. check if all on-disk repositories are listed in `gitolite.conf`
     (and vice versa) and either add missing repositories or delete
     them from disk if garbage
@@ -186,9 +233,11 @@ first-come-first-served basis from the `gitolite.conf` order.

(fichier de différences tronqué)
automatic federated post of blog/2024-05-01-gitolite-gitlab-migration.md
Command: ['/usr/bin/feed2exec', '-v', 'fetch', '--nocache']
Plugin file: /usr/lib/python3/dist-packages/feed2exec/plugins/ikiwikitoot.py
Source directory: /home/w-anarcat/source
Running on: marcos
diff --git a/blog/2024-05-01-gitolite-gitlab-migration.md b/blog/2024-05-01-gitolite-gitlab-migration.md
index a93b36ca..991a2c2c 100644
--- a/blog/2024-05-01-gitolite-gitlab-migration.md
+++ b/blog/2024-05-01-gitolite-gitlab-migration.md
@@ -535,3 +535,7 @@ The reference copy of those is available in our (currently private)
 Puppet git repository.
 
 [[!tag tor gitlab debian-planet gitlab git sysadmin python python-planet]]
+
+
+<!-- posted to the federation on 2024-05-01T10:58:47.676656 -->
+[[!mastodon "https://kolektiva.social/@Anarcat/112366421768959691"]]
\ No newline at end of file

add tags
diff --git a/blog/2024-05-01-gitolite-gitlab-migration.md b/blog/2024-05-01-gitolite-gitlab-migration.md
index 6862f96b..a93b36ca 100644
--- a/blog/2024-05-01-gitolite-gitlab-migration.md
+++ b/blog/2024-05-01-gitolite-gitlab-migration.md
@@ -534,3 +534,4 @@ RewriteRule .* https://gitlab.torproject.org [R=302,L]
 The reference copy of those is available in our (currently private)
 Puppet git repository.
 
+[[!tag tor gitlab debian-planet gitlab git sysadmin python python-planet]]

new blog post from work
diff --git a/blog/2024-05-01-gitolite-gitlab-migration.md b/blog/2024-05-01-gitolite-gitlab-migration.md
new file mode 100644
index 00000000..6862f96b
--- /dev/null
+++ b/blog/2024-05-01-gitolite-gitlab-migration.md
@@ -0,0 +1,536 @@
+[[!meta title="Tor migrates from Gitolite/GitWeb to GitLab"]]
+
+> Note: I've been awfully silent here for the past ... (checks notes)
+> oh dear, 3 months! But that's not because I've been idle, quite the
+> contrary, I've been very busy but just didn't have time to write
+> about anything. So I've taken it upon myself to write *something*
+> about my work this week, and published [this post on the Tor
+> blog](https://blog.torproject.org/gitolite-gitlab-migration/) which I copy here for a broader audience. Let me know if
+> you like this or not.
+
+Tor has finally completed a long migration from legacy Git
+infrastructure ([Gitolite and GitWeb](https://gitlab.torproject.org/tpo/tpa/team/-/wikis/howto/git)) to our self-hosted
+[GitLab](https://gitlab.torproject.org/tpo/tpa/team/-/wikis/howto/gitlab) server.
+
+Git repository addresses have therefore changed. Many of you probably
+have made the switch already, but if not, you will need to change:
+
+    https://git.torproject.org/
+
+to:
+
+    https://gitlab.torproject.org/
+
+In your Git configuration.
+
+The [GitWeb front page](https://gitweb.torproject.org/) is now an archived listing of all the
+repositories before the migration. Inactive git repositories were
+archived in GitLab [legacy/gitolite namespace](https://gitlab.torproject.org/legacy/gitolite/) and the
+`gitweb.torproject.org` and `git.torproject.org` web sites now
+redirect to GitLab.
+
+Best effort was made to reproduce the original gitolite repositories
+faithfully and also avoid duplicating too much data in the
+migration. But it's *possible* that some data present in Gitolite has
+not migrated to GitLab.
+
+User repositories are particularly at risk, because they were
+massively migrated, and they were "re-forked" from their upstreams, to
+avoid wasting disk space. If a user had a project with a matching name
+it was *assumed* to have the right data, which might be inaccurate.
+
+The two virtual machines responsible for the legacy service (`cupani`
+for `git-rw.torproject.org` and `vineale` for `git.torproject.org` and
+`gitweb.torproject.org`) have been shutdown. Their disks will remain
+for 3 months (until the end of July 2024) and their backups for
+another year after that (until the end of July 2025), after which
+point all the data from those hosts will be destroyed, with only the
+GitLab archives remaining.
+
+The rest of this article expands on how this was done and what kind of
+problems we faced during the migration.
+
+# Where is the code?
+
+Normally, nothing should be lost. All repositories in gitolite have
+been either explicitly migrated by their owners, forcibly migrated by
+the sysadmin team ([TPA](https://gitlab.torproject.org/tpo/tpa/team/)), or explicitly destroyed at their owner's
+request.
+
+An exhaustive [rewrite map](https://archive.torproject.org/websites/gitolite2gitlab.txt) translates gitolite projects to GitLab
+projects. Some of those projects actually redirect to their *parent*
+in cases of empty repositories that were obvious forks. Destroyed
+repositories redirect to the GitLab front page.
+
+Because the migration happened progressively, it's technically
+possible that commits pushed to gitolite were lost after the
+migration. We took great care to avoid that scenario. First, we
+adopted a proposal ([TPA-RFC-36](https://gitlab.torproject.org/tpo/tpa/team/-/wikis/policy/tpa-rfc-36-gitolite-gitweb-retirement)) in June 2023 to announce the
+transition. Then, in [March 2024](https://gitlab.torproject.org/tpo/tpa/team/-/issues/41213), we locked down all repositories
+from any further changes. Around that time, only a [handful of
+repositories](https://gitlab.torproject.org/tpo/tpa/team/-/issues/41214#note_2983302 "handful of repositories") had changes made after the adoption date, and we
+examined each repository carefully to make sure nothing was lost.
+
+Still, we built a [diff of all the changes in the git references](https://gitlab.torproject.org/tpo/tpa/team/-/issues/41215#note_3023924)
+that archivists can peruse to check for data loss. It's large (6MiB+)
+because a lot of repositories were migrated before the mass migration
+and then kept evolving in GitLab. Many other repositories were rebuilt
+in GitLab from parent to rebuild a fork relationship which added extra
+references to those clones.
+
+A note to amateur archivists out there, it's probably too late for one
+last crawl now. The Git repositories now all redirect to GitLab and
+are effectively unavailable in their original form.
+
+That said, the GitWeb site was crawled into the [Internet Archive](https://archive.org/) [in
+February 2024](https://gitlab.torproject.org/tpo/tpa/team/-/issues/41218#note_2992296), so at least some copy of it is available in the
+[Wayback Machine](https://web.archive.org/web/20240204162238/https://gitweb.torproject.org/). At that point, however, many developers had already
+migrated their projects to GitLab, so the copies there were already
+possibly out of date compared with the repositories in GitLab.
+
+[Software Heritage](https://www.softwareheritage.org/) also has a copy of all repositories hosted on
+Gitolite [since June 2023](https://gitlab.softwareheritage.org/swh/infra/sysadm-environment/-/issues/4939) and have continuously kept mirroring the
+repositories, where they will be kept hopefully in eternity. There's
+an [issue](https://gitlab.softwareheritage.org/swh/devel/swh-web/-/issues/4787) where the main website can't find the repositories when
+you search for `gitweb.torproject.org`, instead [search for
+`git.torproject.org`](https://archive.softwareheritage.org/browse/search/?q=git.torproject.org&visit_type=git&with_content=true&with_visit=true).
+
+In any case, if you believe data is missing, please do let us know by
+[opening an issue with TPA](https://gitlab.torproject.org/tpo/tpa/team/-/issues/new).
+
+# Why?
+
+This is an old project in the making. The first [discussion about
+migrating from gitolite to GitLab](https://gitlab.torproject.org/tpo/tpa/team/-/issues/40472) started in 2020 (almost 4 years
+ago). But [going further back](https://gitlab.torproject.org/tpo/tpa/team/-/wikis/howto/trac#history), the first GitLab experiment was in
+2016, almost a decade ago.
+
+The current GitLab server dates from 2019, [replacing Trac for issue
+tracking in 2020](https://blog.torproject.org/from-trac-into-gitlab-for-tor/). It was originally supposed to host only mirrors
+for merge requests and issue trackers but, naturally, one thing led to
+another and eventually, GitLab had grown a container registry,
+continuous integration (CI) runners, GitLab Pages, and, of course,
+hosted most Git repositories.
+
+There were hesitations at moving to GitLab for code hosting. We had
+[discussions about the increased attack surface](https://gitlab.torproject.org/tpo/tpa/gitlab/-/issues/81) and [ways to
+mitigate that](https://gitlab.torproject.org/tpo/tpa/gitlab/-/issues/98), but, ultimately, it seems the issues were not that
+serious and the community embraced GitLab.
+
+TPA actually migrated its most critical repositories out of shared
+hosting entirely, into specific servers (e.g. the Puppet Git
+repository is just on the Puppet server now), leveraging Git's
+decentralized nature and removing an entire attack surface from our
+infrastructure. Some of those repositories are *mirrored* back into
+GitLab, but the authoritative copy is not on GitLab.
+
+In any case, the proposal to migrate from Gitolite to GitLab was
+effectively just formalizing a *fait accompli*.
+
+# How to migrate from Gitolite / cgit to GitLab
+
+The progressive migration was a challenge. If you intend to migrate
+between hosting platforms, we strongly recommend to make a "flag day"
+during which you migrate *all* repositories *at once*. This ensures a
+smoother transition and avoids elaborate rewrite rules.
+
+When Gitolite access was shutdown, we had repositories on both GitLab
+and Gitolite, without a clear relationship between the two. A priori,
+the plan then was to import all the remaining Gitolite repositories
+into the `legacy/gitolite` namespace, but that seemed wasteful,
+particularly for large repositories like [Tor Browser](https://gitlab.torproject.org/tpo/applications/tor-browser) which uses
+nearly a gigabyte of disk space. So we took special care to avoid
+duplicating repositories.
+
+When the [mass migration](https://gitlab.torproject.org/tpo/tpa/team/-/issues/41215) started, only 71 of the 538 Gitolite
+repositories were `Migrated to GitLab` in the `gitolite.conf`
+file. So, given that we had *hundreds* of repositories to migrate:, we
+developed some automation to "[save time](https://xkcd.com/1205/)". We already automate
+similar ad-hoc tasks with [Fabric](https://gitlab.torproject.org/tpo/tpa/team/-/wikis/howto/fabric/), so we used that framework here
+as well. (Our normal configuration management tool is [Puppet](https://gitlab.torproject.org/tpo/tpa/team/-/wikis/howto/puppet),
+which is a poor fit here.)
+
+So a relatively [large amount of Python code](https://gitlab.torproject.org/tpo/tpa/fabric-tasks/-/blob/85121b4a8a293cebb0d9dfd68ebf26e2cc95ed76/fabric_tpa/gitolite.py) was produced to
+basically do the following:
+
+ 1. check if all on-disk repositories are listed in `gitolite.conf`
+    (and vice versa) and either add missing repositories or delete
+    them from disk if garbage
+ 2. for each repository in `gitolite.conf`, if its category is marked
+    `Migrated to GitLab`, skip, otherwise;
+ 3. find a matching GitLab project by name, prompt the user for
+    multiple matches
+ 4. if a match is found, redirect if the repository is non-empty 
+    * we have GitLab projects that *look* like the real thing, but are
+    only present to host migrated Trac issues
+    * in such cases we cloned the Gitolite project locally and pushed
+    to the existing repository instead
+ 5. otherwise, a new repository is created in the `legacy/gitolite`
+    namespace, using the "import" mechanism in GitLab to automatically
+    import the repository from Gitolite, creating redirections and
+    updating `gitolite.conf` to document the change
+
+User repositories (those under the `user/` directory in Gitolite) were
+handled specially. First, the existing redirection map was checked to
+see if a similarly named project was migrated (so that,
+e.g. `user/dgoulet/tor` is properly treated as a fork of
+`tpo/core/tor`). Then the parent project was forked in GitLab and the
+Gitolite project force-pushed to the fork. This allows us to show the
+fork relationship in GitLab and, more importantly, benefit from the
+"pool" feature in GitLab which deduplicates disk usage between forks.
+
+Sometimes, we found no such relationships. Then we simply imported
+multiple repositories with similar names in the `legacy/gitolite`
+namespace, sometimes creating forks between user repositories, on a
+first-come-first-served basis from the `gitolite.conf` order.
+
+The code used in this migration is now available publicly. We
+encourage other groups planning to migrate from Gitolite/GitWeb to
+GitLab to use (and contribute to) our [fabric-tasks](https://gitlab.torproject.org/tpo/tpa/fabric-tasks/) repository,
+even though it does have its fair share of hard-coded assertions. 
+
+The main entry point is the `gitolite.mass-repos-migration` task. A
+typical migration job looked like:
+

(fichier de différences tronqué)
kobo wikipedia hacking
diff --git a/hardware/tablet/kobo-clara-hd.md b/hardware/tablet/kobo-clara-hd.md
index 1decbdad..eab362df 100644
--- a/hardware/tablet/kobo-clara-hd.md
+++ b/hardware/tablet/kobo-clara-hd.md
@@ -206,6 +206,18 @@ decided *not* to do here because my time is precious:
  * using calibre to generate e-books based on RSS feeds (yes, I did
    that, and yes, it was pretty bad and almost useless)
  * [SSH support][]: builtin to koreader
+ * offline Wikipedia support: incredibly, 512GiB micro-SD cards are a
+   thing now, so all of Wikipedia could fit on a Kobo... Koreader has
+   [Wikipedia support](https://github.com/koreader/koreader/wiki/Wikipedia-support) but cannot [work offline](https://github.com/koreader/koreader/issues/2333), although
+   there's a [PR to add a plugin that works on a SQLite database
+   converted from ZIM files](https://github.com/koreader/koreader/pull/9534). I've also found [hacks to make it
+   work again on Nickel](https://phire.cc/Offline-Wikipedia-on-the-Kobo.html) ([another](https://a3nm.net/blog/kobo_glo_hacking.html)). But also, Kobo forcibly
+   forces the `vfat` filesystem type for `/mnt/onboard`, so it's
+   actually impossible to write the full Wikipedia archives, as FAT
+   filesystems are limited to 4GB files. I tried patching that out of
+   `/etc/init.d/rcS` but failed. The workaround typically used is to
+   make another filesystem and add an extra init command to mount it
+   at boot, and write files there.
 
 Now maybe I'll have time to actually read a book...
 

another charger
diff --git a/blog/2023-02-10-usb-c.md b/blog/2023-02-10-usb-c.md
index e0992c51..94e7a168 100644
--- a/blog/2023-02-10-usb-c.md
+++ b/blog/2023-02-10-usb-c.md
@@ -379,6 +379,12 @@ reddit](https://old.reddit.com/r/UsbCHardware/comments/161t5d4/absolutely_smalle
 It's not small enough to beat the Sharge as a daily driver, but if I
 find it too bulky / heavy, maybe I'll indulge.
 
+### Others
+
+Russell Coker [bought](https://etbe.coker.com.au/2024/04/29/usb-psus/) [this device from Ali Express](https://www.aliexpress.com/item/1005006105371654.html) which is
+not quite in the same range of things as the above, but could serve
+well as a home charger.
+
 ## USB testers
 
 Now that a USB cable isn't a simple 5V electric signal, cables and

another zfs thing
diff --git a/software/zfs.md b/software/zfs.md
index 4c8aaf6e..76ea279f 100644
--- a/software/zfs.md
+++ b/software/zfs.md
@@ -282,6 +282,10 @@ It has a setup command to initialize a configuration, example setup:
 There is no official Debian package but upstream has a [debian source
 package](https://github.com/Gregy/znapzend-debian). It is written in Perl.
 
+### zelta
+
+[zelta](https://github.com/bellhyve/zelta) is written in Awk. Incomplete, ran with [zfsnap](https://github.com/zfsnap/zfsnap).
+
 ### Other DIY solutions
 
 twb (`#debian-til`) wrote [cyber-zfs-backup](https://github.com/cyberitsolutions/cyber-zfs-backup). It's short (~300

sway's autotiler now in debian
diff --git a/software/desktop/wayland.md b/software/desktop/wayland.md
index eed45781..931a957e 100644
--- a/software/desktop/wayland.md
+++ b/software/desktop/wayland.md
@@ -1465,7 +1465,7 @@ There's a lot of improvements Sway could bring over using plain
 i3. There are pretty neat auto-tilers that could replicate the
 configurations I used to have in Xmonad or Awesome, see:
 
- * [autotiling][]
+ * [autotiling][] (now in Debian)
  * [swaymonad][]
 
 [autotiling]: https://github.com/nwg-piotr/autotiling

new greetd extension landed in debian
diff --git a/software/desktop/wayland.md b/software/desktop/wayland.md
index 287598d2..eed45781 100644
--- a/software/desktop/wayland.md
+++ b/software/desktop/wayland.md
@@ -496,15 +496,17 @@ Possible alternatives:
 
  * [lightdm elephant greeter][] (I tried [[!debpkg slick-greeter]] and
    [[!debpkg ukui-greeter]], neither could start the Sway session)
- * [greetd][] and [QtGreet][] (former in Debian, not latter, which
-   means we're stuck with the weird [agreety](https://manpages.debian.org/agreety) which doesn't work at
-   all)
+ * [greetd][], [tuigreet][] (in Debian) and [QtGreet][] (not in
+   Debian), tested [agreety][] (part of greetd) but it didn't work at
+   all
  * [sddm][]: KDE's default, in Debian, probably heavier or as heavy as
    gdm3
 
 [lightdm elephant greeter]: https://github.com/max-moser/lightdm-elephant-greeter
 [greetd]: https://sr.ht/~kennylevinsen/greetd/
 [QtGreet]: https://gitlab.com/marcusbritanicus/QtGreet
+[tuigreet]: https://github.com/apognu/tuigreet
+[agreety]: https://manpages.debian.org/agreety
 [sddm]: https://github.com/sddm/sddm
 
 ## Terminal: xterm → foot
@@ -983,9 +985,9 @@ how many things you were using are tightly bound to X.
    programs, basically)
 
  * notifications: previously [dunst][] in some places, which works
-   well in both Xorg and Wayland, not a blocker, [fnott][] ([not in
-   Debian](https://bugs.debian.org/997020)), [salut][] (not in Debian) possible alternatives:
-   damjan [uses mako][]. Eventually migrated to [sway-nc][].
+   well in both Xorg and Wayland, not a blocker, [fnott][], [salut][]
+   (not in Debian) possible alternatives: damjan [uses
+   mako][]. Eventually migrated to [sway-nc][].
 
  * notification area: I had trouble making `nm-applet` work. based on
    [this nm-applet.service][], I found that you need to pass `--indicator`.  In

yet another sync client
diff --git a/blog/2021-11-21-mbsync-vs-offlineimap.md b/blog/2021-11-21-mbsync-vs-offlineimap.md
index d4b29a30..5222390f 100644
--- a/blog/2021-11-21-mbsync-vs-offlineimap.md
+++ b/blog/2021-11-21-mbsync-vs-offlineimap.md
@@ -1062,6 +1062,9 @@ Those are all the options I have considered, in alphabetical order
    mentions UUCP in the manpage, mentions `rsmtp` which is a nice name
    for `rsendmail`. not evaluated because it seems awfully complex to
    setup, Haskell
+ * [neverest](https://git.sr.ht/~soywod/neverest-cli): rust, IMAP/Maildir/Notmuch sync, filters, lacks
+   client TLS support, see [comparison](https://pimalaya.org/neverest/cli/latest/faq.html), layout [incompatible with
+   mbsync](https://todo.sr.ht/~soywod/pimalaya/196), [unclear if it supports IDLE/notify](https://todo.sr.ht/~soywod/pimalaya/162#event-346614)
  * [nncp](http://www.nncpgo.org/): treat the local spool as another mail server, not really
    compatible with my "multiple clients" setup, Golang
  * [offlineimap3](https://github.com/OfflineIMAP/offlineimap3): requires IMAP, used the py2 version in the past,

some research on keyboards
diff --git a/hardware/keyboard.mdwn b/hardware/keyboard.mdwn
index 515b4639..e4dbbfef 100644
--- a/hardware/keyboard.mdwn
+++ b/hardware/keyboard.mdwn
@@ -376,6 +376,25 @@ feedback, trackballs.
 This is a pretty TKL keyboard, the [Multics](https://vortexgear.store/en-ca/products/multix?variant=43056025993379). Not sure about the Fn
 key on the right though.
 
+# Mini / travel keyboards
+
+Those are useful for the media station or traveling on the road with a
+phone or tablet.
+
+ * [Voyager](https://www.zsa.io/voyager), from the moonlander folks, a bit big, "ergonomic" (so
+   columnar, split layout, unusual keys), expensive (365$USD+)
+
+ * [rii](http://www.riitek.com/product/214.html): bluetooth, tiny keyboard, mostly for thumbs, media
+   server, cheap-ish (25$) but proprietary battery
+
+ * [adafruit mini keyboard](https://www.adafruit.com/product/3601): 13$ but no mouse, back ordered, really
+   tiny, looks like [this keyboard](https://gromaudio.com/store/accessories/keyboard-k-wbtk3.html)
+
+ * [iclever bk08](https://office.iclever.com/products/BK08-Portable-Tri-folding-Bluetooth-Keyboard-with-Touchpad): foldable keyboard, 60$
+ 
+ * [rk925](https://rkgamingstores.com/products/rk925-foldable-mechanical-keyboard): foldable keyboard, but feels in the wrong direction,
+   maybe a bit too small? 112$
+
 # Reviews
 
 * [rtings](https://www.rtings.com/keyboard) has a keyboards section

fix link to other emacs article, thanks reader!
diff --git a/blog/2022-03-20-20-years-emacs.md b/blog/2022-03-20-20-years-emacs.md
index 37757d33..a7649c61 100644
--- a/blog/2022-03-20-20-years-emacs.md
+++ b/blog/2022-03-20-20-years-emacs.md
@@ -1,6 +1,6 @@
 [[!meta title="20+ years of Emacs"]]
 
-I enjoyed reading [this article named "22 years of Emacs"](https://arjenwiersma.nl/writeups/emacs/22-years-of-emacs/)
+I enjoyed reading [this article named "22 years of Emacs"](https://arjenwiersma.nl/posts/22-years-of-emacs/)
 recently. It's kind of fascinating, because I realised I don't exactly
 know for how long I've been using Emacs. It's lost in the mists of
 [[history|blog/2012-11-01-my-short-computing-history]]. If I would

document sleeves and cases
diff --git a/hardware/laptop/framework-12th-gen.md b/hardware/laptop/framework-12th-gen.md
index 66ed3b07..0a083c6a 100644
--- a/hardware/laptop/framework-12th-gen.md
+++ b/hardware/laptop/framework-12th-gen.md
@@ -2079,6 +2079,18 @@ USB-C|blog/2023-02-10-usb-c]]. I'm considering a Dell
  * [logitech dongle hider with USB-A output](https://github.com/LeoDJ/FW-EC-DongleHiderPlus)
 * check out [this forum category](https://community.frame.work/c/developer-program/expansion-card/90) for a cornucopia of those
 
+## Sleeves and cases
+
+I carry the 13" Framework laptop in a [tomtoc Defender A13
+sleeve](https://www.tomtoc.com/products/tomtoc-a13-versatile-laptop-sleeve-for-13-5-inch-microsoft-surface-laptop-navy-blue). It's a nice soft sleeve with a pocket where I fit all the
+expansion cards and a power supply. There's a [pretty long thread
+about carrying bags and sleeves](https://community.frame.work/t/suggestions-on-carry-bag-or-sleeve/3763) where I [participated](https://community.frame.work/t/suggestions-on-carry-bag-or-sleeve/3763/115?u=anarcat) (and,
+you'll notice, bought another Timbuk sleeve I didn't like so much.
+
+In retrospect, I might consider buying a hard shell next time. The
+Smatree 13.5 looks pretty cool, but it's [not clear if it actually
+fits](https://community.frame.work/t/hard-case-compatibility/13016/4?u=anarcat). [This one comment points at one case that does fit](https://community.frame.work/t/suggestions-on-carry-bag-or-sleeve/3763/131?u=anarcat)
+
 ## Upstream resources
 
  * [community forum](https://community.frame.work/), lots of information, much support, wow!

framework BIOS update fail
diff --git a/hardware/laptop/framework-12th-gen.md b/hardware/laptop/framework-12th-gen.md
index f7cc84f7..66ed3b07 100644
--- a/hardware/laptop/framework-12th-gen.md
+++ b/hardware/laptop/framework-12th-gen.md
@@ -940,6 +940,15 @@ can be deployed through LVFS with:
 Those instructions come from the [beta forum post](https://community.frame.work/t/12th-gen-intel-core-bios-3-06-beta/25726). I performed the
 BIOS update on 2023-01-16T16:00-0500.
 
+Update: more than a year later, that update never came out of
+beta. Worse, they published a new update (3.08) including security fixes, but
+only for Windows. See [this very long thread on the forum](https://community.frame.work/t/12th-gen-intel-core-bios-3-08-release/43244), [my
+comment](https://community.frame.work/t/12th-gen-intel-core-bios-3-08-release/43244/329?u=anarcat), and [this Ars article](https://arstechnica.com/gadgets/2024/04/frameworks-software-and-firmware-have-been-a-mess-but-its-working-on-them/).
+
+I have filed a formal complaint with support, threatening a refund, as
+I find it simply unacceptable that they just drop support for Linux
+like this.
+
 ## Resolution tweaks
 
 The Framework laptop resolution (2256px X 1504px) is big enough to

calibre can't do flat
diff --git a/software/desktop/calibre.mdwn b/software/desktop/calibre.mdwn
index 63e43524..e2ae6e5e 100644
--- a/software/desktop/calibre.mdwn
+++ b/software/desktop/calibre.mdwn
@@ -561,6 +561,53 @@ until we're satisfied.
 
 Or we can just keep using Calibre.
 
+Another big problem I have with Calibre right now is that it enforces
+this `Author/Title/Title.epub` folder structure which is really
+*heavy* and annoying. It feels like iTunes. I have 355 authors in my
+collection here and 952 books (or at least 952 second-level folders),
+so the Author/Title distinction is really not helping much: a flat
+hierarchy of `Author - Title.epub` would really work just as well, and
+would make the book collection much easier to browse using standard
+tools (e.g. Koreader would render it much more nicely).
+
+Compare, for example, before:
+
+[[!img snap-20240415T135134.png]]
+
+and after flatting:
+
+[[!img snap-20240415T135538.png]]
+
+Now, I cheated a little bit there as I don't show the other Ada Palmer
+books, for which Koreader somehow can't generate a cover for (which is
+a problem!) and I deleted the `cover.jpg` that Calibre adds everywhere
+which would otherwise double the listings everywhere. (But I'm
+considering ditching those files anyways, since they clutter
+everything and needlessly inflate the library.)
+
+But this is something the Calibre author has been [completely
+inflexible](https://manual.calibre-ebook.com/faq.html#why-doesn-t-calibre-let-me-store-books-in-my-own-folder-structure) on since basically forever:
+
+> If you are still not convinced, then I’m afraid calibre is not for
+> you. Look elsewhere for your book cataloguing needs. Just so we’re
+> clear, this is not going to change. Kindly do not contact us in an
+> attempt to get us to change this.
+
+... which is a recurring pattern of "my way or the highway" with this
+software. Totally within their right of course, but exactly the kind
+of things that make me want to look elsewhere.
+
+In any case, if we're going to ditch Calibre, this would be the
+procedure:
+
+    rm */*/cover.jpg # remove all covers
+    # rename all actual book files without the directories, keeping extension
+    rename 's,([^/]*)/([^/]*)/.*-.*(\....),$1 - $2$3,' */*/*
+    # rename remaining files, should just be metadata.opf
+    rename 's,([^/]*)/([^/]*)/metadata.opf,$1 - $2.opf,' */*/*
+    # remove empty directories, if this fails, we forgot some
+    rmdir */*
+
 [work Peter Keel did]: https://seegras.discordia.ch/Blog/life-with-calibre/
 [epub-tools]: https://sourceforge.net/projects/ebook-tools/
 [Thunar]: https://docs.xfce.org/xfce/thunar/start
diff --git a/software/desktop/calibre/snap-20240415T135134.png b/software/desktop/calibre/snap-20240415T135134.png
new file mode 100644
index 00000000..e5f2e845
Binary files /dev/null and b/software/desktop/calibre/snap-20240415T135134.png differ
diff --git a/software/desktop/calibre/snap-20240415T135538.png b/software/desktop/calibre/snap-20240415T135538.png
new file mode 100644
index 00000000..2bba3b43
Binary files /dev/null and b/software/desktop/calibre/snap-20240415T135538.png differ

new package in debian
diff --git a/software/desktop/wayland.md b/software/desktop/wayland.md
index affe47f1..287598d2 100644
--- a/software/desktop/wayland.md
+++ b/software/desktop/wayland.md
@@ -848,8 +848,8 @@ although it's not clear to me what its purpose is...
 I'm a heavy user of [maim][] (and a package uploader in Debian). It
 looks like the direct replacement to maim (and [slop][]) is [grim][]
 (and [slurp][]). There's also [swappy][] which goes on *top* of grim
-and allows preview/edit of the resulting image, nice touch (not in
-Debian though).
+and allows preview/edit of the resulting image, nice touch (in Debian
+since Trixie).
 
 See also [awesome-wayland screenshots][] for other alternatives:
 there are many, including X11 tools like [Flameshot][] that also

hid thing not fixed
diff --git a/hardware/laptop/framework-12th-gen.md b/hardware/laptop/framework-12th-gen.md
index e9a3cd5c..f7cc84f7 100644
--- a/hardware/laptop/framework-12th-gen.md
+++ b/hardware/laptop/framework-12th-gen.md
@@ -500,7 +500,10 @@ Note that there's another solution flying around that fixes this by
 that or seen confirmation it works.
 
 Update: it seems like this issue [has been fixed in newer kernels](https://community.frame.work/t/solved-guide-12th-gen-not-sending-xf86monbrightnessup-down/20605/103)
-([6.6.6+](https://community.frame.work/t/solved-guide-12th-gen-not-sending-xf86monbrightnessup-down/20605/98?u=anarcat)?), but I couldn't figure out if the light sensor still works.
+([6.6.6+](https://community.frame.work/t/solved-guide-12th-gen-not-sending-xf86monbrightnessup-down/20605/98?u=anarcat)?), but I couldn't figure out if the light sensor still
+works. Worse, I *thought* it was fixed, but then it wasn't: I think I
+forgot to run `depmod -a`, because at some point my <kbd>fn lock</kbd>
+key broke...
 
 ### Kill switches
 

linux fixed the framework brightness button issue!
diff --git a/hardware/laptop/framework-12th-gen.md b/hardware/laptop/framework-12th-gen.md
index 18868775..e9a3cd5c 100644
--- a/hardware/laptop/framework-12th-gen.md
+++ b/hardware/laptop/framework-12th-gen.md
@@ -243,7 +243,7 @@ the laptop.
    are much less affordable (700$+)
 
  * the 12th gen has compatibility issues with Debian, followup in the
-   [DebianOn page](https://wiki.debian.org/InstallingDebianOn/FrameWork/12thGen), but basically: [brightness hotkeys](https://community.frame.work/t/12th-gen-not-sending-xf86monbrightnessup-down/20605/6), [power
+   [DebianOn page](https://wiki.debian.org/InstallingDebianOn/FrameWork/12thGen), but basically: [brightness hotkeys](https://community.frame.work/t/12th-gen-not-sending-xf86monbrightnessup-down/20605/6) (fixed!), [power
    management](https://community.frame.work/t/12th-gen-power-management-on-linux/21330), [wifi](https://community.frame.work/t/debian-11-gen12th-wifi-working/21799), the webcam is okay even though the
    chipset is the [infamous alder lake](https://www.phoronix.com/news/Greg-KH-No-ADL-Webcam-Laptop) because it [does not have
    the fancy camera](https://www.phoronix.com/forums/forum/linux-graphics-x-org-drivers/intel-linux/1340695-greg-kh-recommends-avoiding-alder-lake-laptops-intel-webcam-linux-driver-long-ways-out?p=1340968#post1340968); most issues currently seem solvable, and
@@ -499,6 +499,9 @@ Note that there's another solution flying around that fixes this by
 [changing permissions on the input device](https://community.frame.work/t/12th-gen-not-sending-xf86monbrightnessup-down/20605/24?u=anarcat) but I haven't tested
 that or seen confirmation it works.
 
+Update: it seems like this issue [has been fixed in newer kernels](https://community.frame.work/t/solved-guide-12th-gen-not-sending-xf86monbrightnessup-down/20605/103)
+([6.6.6+](https://community.frame.work/t/solved-guide-12th-gen-not-sending-xf86monbrightnessup-down/20605/98?u=anarcat)?), but I couldn't figure out if the light sensor still works.
+
 ### Kill switches
 
 The Framework has two "[kill switches](https://en.wikipedia.org/wiki/Kill_switch)": one for the camera and the

usb-c status updates
diff --git a/blog/2023-02-10-usb-c.md b/blog/2023-02-10-usb-c.md
index 556c045e..e0992c51 100644
--- a/blog/2023-02-10-usb-c.md
+++ b/blog/2023-02-10-usb-c.md
@@ -104,9 +104,14 @@ Sharge, ZMI all within 1.5mm of each other) by only 4mm for depth, so
 maybe not worth it? Interestingly, it's not much lighter than the
 travel-friendly Oneworld.
 
-The Sharge is my current "left in my bag" driver, even though it's
+### Current picks
+
+The Sharge is my current "every day carry" driver, even though it's
 heavier than the TOFU, because the latter is a little too bulky (one
-of the largest by volume).
+of the largest by volume). I do bring the TOFU and/or the Oneworld on
+trips however, especially the TOFU for conferences and the Oneworld
+for hotel rooms (and having *both* means I can leave the latter in the
+hotel room!).
 
 ### Sharge
 
@@ -492,7 +497,7 @@ Also: [this post from Big Mess Of Wires](https://www.bigmessowires.com/2019/05/1
 *anything* might work at all. It's where I had the Cable Matters
 reference however...
 
-Update: I ordered a [this dock from Cable Matters](https://www.cablematters.com/pc-1054-127-usb-c-docking-station-with-dual-4k-hdmi-and-80w-charging-for-windows-computers.aspx) [from Amazon](https://www.amazon.ca/dp/B07PFFN219)
+Update (2023-02-22): I ordered a [this dock from Cable Matters](https://www.cablematters.com/pc-1054-127-usb-c-docking-station-with-dual-4k-hdmi-and-80w-charging-for-windows-computers.aspx) [from Amazon](https://www.amazon.ca/dp/B07PFFN219)
 (reluctantly). It promises “Linux” support and checked all the boxes
 for me (4x USB-A, audio, network, 2xHDMI).
 
@@ -509,16 +514,35 @@ fun. I suspect foul play inside Sway.
 And yeah, those things are costly! This one goes for 300$ a pop, not
 great.
 
-Update 2: Cable Matters support responded by simply giving me this
+Update (2023-02-27): Cable Matters support responded by simply giving me this
 hack that solved it at least for now. Just reverse the USB-C cable,
 and poof, everything works. *Magic*.
 
-Update 3: turns out that was overly optimistic. It seems the problem
+Update (2023-05-10): turns out that was overly optimistic. It seems the problem
 actually resides in Sway, because when it happens (and it still does),
 logging out fixes the issue: GDM3 takes over and reinitializes the
 monitors properly. Then Sway can do its thing when I log back in
 again.
 
+Update (2024-04-13): I have since then returned the dock to Cable
+Matters who have been gracious enough to do a RMA (although I paid for
+shipping). I have now a USB-C twin-[[hardware/monitor]] setup that
+works really well, but the reason for that is that I downgraded Sway
+to the version in stable. It seems like there was some impedance
+mismatch there, and I was rather distressed to find out I still had
+the bugs with the shiny new monitors. So, I guess I'm sorry for the
+Cable Matters folks, their dock was fine after all...
+
+### Current status
+
+I'm using the USB-C docks built-in my [[hardware/monitor]]s, two [Dell
+U2723QE][]. The first monitor's USB ports are completely full, so I
+daisy-chained to the second monitor and, amazingly, that all works
+over a single USB-C cable. The only annoyance is that USB-C cable is
+rather short, so it's not as neatly tucked in as it should ne.
+
+[Dell U2723QE]: https://www.dell.com/en-ca/shop/cty/apd/210-bdpf
+
 ## Power banks
 
 This has been spun out in another page, see [[hardware/battery]].

improve tok
diff --git a/blog/2023-02-10-usb-c.md b/blog/2023-02-10-usb-c.md
index 87effe79..556c045e 100644
--- a/blog/2023-02-10-usb-c.md
+++ b/blog/2023-02-10-usb-c.md
@@ -3,7 +3,7 @@
 Dear lazy web, help me pick the right hardware to make my shiny new
 laptop work better. I want a new USB-C dock and travel power supply.
 
-[[!toc]]
+[[!toc levels=3]]
 
 # Background
 

Archival link:

The above link creates a machine-readable RSS feed that can be used to easily archive new changes to the site. It is used by internal scripts to do sanity checks on new entries in the wiki.

Created . Edited .