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
new bus factor research
diff --git a/blog/2019-10-16-bus-factor.mdwn b/blog/2019-10-16-bus-factor.mdwn
index 409de6d2..af35c843 100644
--- a/blog/2019-10-16-bus-factor.mdwn
+++ b/blog/2019-10-16-bus-factor.mdwn
@@ -85,4 +85,60 @@ spaghetti code before it even has time to [get flooded over][].
 [Aegir]: https://www.aegirproject.org/
 [AlternC]: https://alternc.org/
 
+# Update: actual research exists
+
+Someone actually did [research this](https://www.scannedinavian.com/the-github-plugin-my-coworkers-asked-me-not-to-write.html). 
+
+The term they use is "truck factor". Their definition "relies on a
+coverage assumption: a system will face serious delays or will be
+likely discontinued if its current set of authors covers less than 50%
+of the current set of files in the system".
+
+It doesn't directly confirm or infirm my theory
+(`avg(bus_factor)==1`), but it certainly seems like 1 is the "[most
+common value](https://en.wikipedia.org/wiki/Mode_(statistics))". If I parse [their data](https://mclare.blog/_file/posts/the-bus-factor/results.4c687f4f.json), I end up with an
+average truck factor of 4.9, but this covers only 133 projects! 
+
+And what's worse, the [original paper](https://arxiv.org/pdf/1604.06766) (from which this project
+list is based on) selected based on most popular GitHub projects:
+
+> To select a target set of subjects, we follow a procedure similar to
+> other studies investigating GitHub [12]–[15]. First, we query the
+> programming languages with the largest number of repositories in
+> GitHub. [...] We then select the 100-top most popular repositories
+> within each target language. [...] Considering only the most popular
+> projects in a given language (S`), we remove the systems in the
+> first quartile (Q1) of the distribution of three metrics, namely
+> number of developers (nd), number of commits (nc), and number of
+> files (nf ). After filtering out subjects in Q1, we compute the
+> intersection of the remaining sets.
+
+So they explicitly target large projects with large numbers of
+developers:
+
+> [...] 133 subjects (T 2), which represent the most important systems per
+> language in GitHub, implemented by teams with a considerable number
+> of active developers and with a considerable number of files
+
+Note that their final list does not include foundational projects like
+OpenSSL, GCC, xz (!) but it does include others like git, Linux, or
+less. So their data is likely skewed towards larger, healthier
+projects than what actually matters.
+
+I would be curious, for example, to see this exercise ran against all
+of Debian `main` or [required](https://www.debian.org/doc/debian-policy/ch-archive.html#s-priorities) packages, if we'd have to pick a
+subset. I suspect the bus factor for those would be *much* smaller,
+and maintain my original theory that it converges towards 1.
+
+I'll also note that the original paper concludes that:
+
+> We show that 87 systems (65%) have TF ≤ 2
+
+... which is *pretty close* (off by one!) to my original theory, which
+I should probably rephrase as "most projects have a bus factor of one"
+(the above paper says it's two).
+
+The new research also implies that the trend is getting worse, with
+the kernel moving from 57 to 12, for example.
+
 [[!tag debian-planet python-planet python software debian]]

fix rg package name
diff --git a/software/desktop/emacs.mdwn b/software/desktop/emacs.mdwn
index df7466ca..969e0ede 100644
--- a/software/desktop/emacs.mdwn
+++ b/software/desktop/emacs.mdwn
@@ -57,7 +57,7 @@ Here's the list of packages I currently use.
 | puppet-mode | [0.4](https://stable.melpa.org/#/puppet-mode) | [0.4.post5](https://tracker.debian.org/elpa-puppet-mode)| Major mode for Puppet manifests |
 | rainbow-mode | N/A | [1.0.6.post2](https://tracker.debian.org/elpa-rainbow-mode)| None |
 | recentf | N/A | N/A| None |
-| ripgrep | [0.4.0](https://stable.melpa.org/#/ripgrep) | [2.3.0.post4](https://tracker.debian.org/elpa-rg)| Front-end for ripgrep, a command line search tool |
+| rg | [2.3.0](https://stable.melpa.org/#/rg) | [2.3.0.post4](https://tracker.debian.org/elpa-rg)| A search tool based on ripgrep |
 | shift-number | [0.1](https://stable.melpa.org/#/shift-number) | N/A| Increase/decrease the number at point |
 | smart-mode-line | [2.14](https://stable.melpa.org/#/smart-mode-line) | [2.14.post2](https://tracker.debian.org/elpa-smart-mode-line)| A color coded smart mode-line |
 | srcery-theme | [20240220.805](https://melpa.org/#/srcery-theme) | N/A| Dark color theme |

fix discrepancy in rg/ripgrep packaging
diff --git a/software/desktop/emacs.mdwn b/software/desktop/emacs.mdwn
index 5a6f3fa3..df7466ca 100644
--- a/software/desktop/emacs.mdwn
+++ b/software/desktop/emacs.mdwn
@@ -57,7 +57,7 @@ Here's the list of packages I currently use.
 | puppet-mode | [0.4](https://stable.melpa.org/#/puppet-mode) | [0.4.post5](https://tracker.debian.org/elpa-puppet-mode)| Major mode for Puppet manifests |
 | rainbow-mode | N/A | [1.0.6.post2](https://tracker.debian.org/elpa-rainbow-mode)| None |
 | recentf | N/A | N/A| None |
-| ripgrep | [0.4.0](https://stable.melpa.org/#/ripgrep) | [#976297](https://bugs.debian.org/976297)| Front-end for ripgrep, a command line search tool |
+| ripgrep | [0.4.0](https://stable.melpa.org/#/ripgrep) | [2.3.0.post4](https://tracker.debian.org/elpa-rg)| Front-end for ripgrep, a command line search tool |
 | shift-number | [0.1](https://stable.melpa.org/#/shift-number) | N/A| Increase/decrease the number at point |
 | smart-mode-line | [2.14](https://stable.melpa.org/#/smart-mode-line) | [2.14.post2](https://tracker.debian.org/elpa-smart-mode-line)| A color coded smart mode-line |
 | srcery-theme | [20240220.805](https://melpa.org/#/srcery-theme) | N/A| Dark color theme |

fix typo
diff --git a/blog/2024-08-15-why-trixie.md b/blog/2024-08-15-why-trixie.md
index 83befc1a..17aa8264 100644
--- a/blog/2024-08-15-why-trixie.md
+++ b/blog/2024-08-15-why-trixie.md
@@ -107,7 +107,7 @@ 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][]: [log level noises][A],, paste support
+- [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)

more experience with keyboards
diff --git a/hardware/keyboard.mdwn b/hardware/keyboard.mdwn
index a82a7831..8ccb1a24 100644
--- a/hardware/keyboard.mdwn
+++ b/hardware/keyboard.mdwn
@@ -384,6 +384,24 @@ sound and design of the keyboards.
 They have QMK-compatible firmware and pretty designs, with slim and
 TKL keyboards.
 
+I have found a second hand Air75 at some Amazon overflow thing here,
+and it is *really* nice. It's really slim, I (surprisingly) like the
+short travel and the sound is exquisite, even with red switches. It's
+nice to have the combo Bluetooth / USB-C setup, and there's even a
+"2.4GHz transmitter" in there for non-BT operation, but somehow the
+adapter for that was missing from the case.
+
+Two major downsides:
+
+- it's a bit on the heavy side, which would otherwise make this an
+  incredible travel keyboard
+- the TKL layout is a bit too narrow for me, i can't get used to the
+  vertical pgup/pgdown pad
+
+I have also heard first-hand reports of a full USB controller failure
+and a failure of support to provide proper followup, so that's a bit
+concerning.
+
 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))
@@ -398,6 +416,11 @@ rtings reviewed [five models](https://www.rtings.com/keyboard/tools/table/141136
    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))
 
+## Divinikey
+
+A friend built a [Neo80 keyboard](https://divinikey.com/collections/neo80-keyboard-kit-and-components/products/qwertykeys-neo80-case) by buying a PCB presoldered with
+Gazzew Boba U4 switches, and [earth tone keycaps](https://www.deskhero.ca/products/gmk-earth-tones-keycaps?variant=40347274805314) and likes it.
+
 # Mini / travel keyboards
 
 Those are useful for the media station or traveling on the road with a

mention onyx gpl issue link
diff --git a/hardware/tablet.mdwn b/hardware/tablet.mdwn
index 9f2beaec..a63f80ea 100644
--- a/hardware/tablet.mdwn
+++ b/hardware/tablet.mdwn
@@ -99,7 +99,8 @@ 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.
+from what I've read on hacker news. See also [this Linux Tech Tips
+forum post](https://linustechtips.com/topic/1331748-shortcircuit-showcases-boox-a-product-that-violates-gpl2/).
 
 [Onyx]: https://en.wikipedia.org/wiki/Onyx_Boox
 [community forum]: http://bbs.onyx-international.com/

show versions from stable melpa
diff --git a/software/desktop/emacs.mdwn b/software/desktop/emacs.mdwn
index f131f89b..5a6f3fa3 100644
--- a/software/desktop/emacs.mdwn
+++ b/software/desktop/emacs.mdwn
@@ -25,50 +25,50 @@ Here's the list of packages I currently use.
 
 | Package | Emacs | Debian | Description |
 | ------- | ----- | ------ | ----------- |
-| anzu | [20240929.201](https://melpa.org/#/anzu) | [0.67.post1](https://tracker.debian.org/elpa-anzu)| Show number of matches in mode-line while searching |
-| auto-dictionary | [20150410.1610](https://melpa.org/#/auto-dictionary) | [1.1.post1](https://tracker.debian.org/elpa-auto-dictionary)| Automatic dictionary switcher for flyspell |
-| cape | [20241211.1804](https://melpa.org/#/cape) | [#728729](https://bugs.debian.org/728729)| Completion At Point Extensions |
-| consult | [20241210.1313](https://melpa.org/#/consult) | [1.8.post1](https://tracker.debian.org/elpa-consult)| Consulting completing-read |
-| corfu | [20241208.2242](https://melpa.org/#/corfu) | [1.5.post1](https://tracker.debian.org/elpa-corfu)| COmpletion in Region FUnction |
-| crux | [20240401.1136](https://melpa.org/#/crux) | [#909337](https://bugs.debian.org/909337)| A Collection of Ridiculously Useful eXtensions |
+| anzu | [0.67](https://stable.melpa.org/#/anzu) | [0.67.post1](https://tracker.debian.org/elpa-anzu)| Show number of matches in mode-line while searching |
+| auto-dictionary | [1.1](https://stable.melpa.org/#/auto-dictionary) | [1.1.post1](https://tracker.debian.org/elpa-auto-dictionary)| Automatic dictionary switcher for flyspell |
+| cape | [1.7](https://stable.melpa.org/#/cape) | [#728729](https://bugs.debian.org/728729)| Completion At Point Extensions |
+| consult | [1.8](https://stable.melpa.org/#/consult) | [1.8.post1](https://tracker.debian.org/elpa-consult)| Consulting completing-read |
+| corfu | [1.5](https://stable.melpa.org/#/corfu) | [1.5.post1](https://tracker.debian.org/elpa-corfu)| COmpletion in Region FUnction |
+| crux | [0.5.0](https://stable.melpa.org/#/crux) | [#909337](https://bugs.debian.org/909337)| A Collection of Ridiculously Useful eXtensions |
 | dabbrev | N/A | N/A| None |
 | devdocs | [20241113.1341](https://melpa.org/#/devdocs) | N/A| Emacs viewer for DevDocs |
-| dimmer | [20220817.122](https://melpa.org/#/dimmer) | [0.4.2+repack20220817.a5b6975.3](https://tracker.debian.org/elpa-dimmer)| Visually highlight the selected buffer |
-| dockerfile-mode | [20240914.1549](https://melpa.org/#/dockerfile-mode) | [1.9.post3](https://tracker.debian.org/elpa-dockerfile-mode)| Major mode for editing Docker's Dockerfiles |
+| dimmer | [0.4.2](https://stable.melpa.org/#/dimmer) | [0.4.2+repack20220817.a5b6975.3](https://tracker.debian.org/elpa-dimmer)| Visually highlight the selected buffer |
+| dockerfile-mode | [1.9](https://stable.melpa.org/#/dockerfile-mode) | [1.9.post3](https://tracker.debian.org/elpa-dockerfile-mode)| Major mode for editing Docker's Dockerfiles |
 | eglot | N/A | [1.15.post3](https://tracker.debian.org/elpa-eglot)| None |
-| embark | [20241003.1953](https://melpa.org/#/embark) | [1.1.post2](https://tracker.debian.org/elpa-embark)| Conveniently act on minibuffer completions |
-| embark-consult | [20240919.1831](https://melpa.org/#/embark-consult) | N/A| Consult integration for Embark |
-| flycheck | [20241130.1502](https://melpa.org/#/flycheck) | [34.1.post2](https://tracker.debian.org/elpa-flycheck)| On-the-fly syntax checking |
+| embark | [1.1](https://stable.melpa.org/#/embark) | [1.1.post2](https://tracker.debian.org/elpa-embark)| Conveniently act on minibuffer completions |
+| embark-consult | [1.1](https://stable.melpa.org/#/embark-consult) | N/A| Consult integration for Embark |
+| flycheck | [34.1](https://stable.melpa.org/#/flycheck) | [34.1.post2](https://tracker.debian.org/elpa-flycheck)| On-the-fly syntax checking |
 | flymake | N/A | N/A| None |
-| format-all | [20241126.829](https://melpa.org/#/format-all) | [0.6.0.post2](https://tracker.debian.org/elpa-format-all)| Auto-format C, C++, JS, Python, Ruby and 50 other languages |
-| frames-only-mode | [20241201.1533](https://melpa.org/#/frames-only-mode) | N/A| Use frames instead of Emacs windows |
+| format-all | [0.6.0](https://stable.melpa.org/#/format-all) | [0.6.0.post2](https://tracker.debian.org/elpa-format-all)| Auto-format C, C++, JS, Python, Ruby and 50 other languages |
+| frames-only-mode | [1.0.0](https://stable.melpa.org/#/frames-only-mode) | N/A| Use frames instead of Emacs windows |
 | gnus-alias | [20230818.1830](https://melpa.org/#/gnus-alias) | N/A| An alternative to gnus-posting-styles |
-| go-mode | [20240620.1948](https://melpa.org/#/go-mode) | N/A| Major mode for the Go programming language |
-| gptel | [20241216.411](https://melpa.org/#/gptel) | N/A| Interact with ChatGPT or other LLMs |
-| hl-todo | [20240805.1444](https://melpa.org/#/hl-todo) | [3.8.1.post1](https://tracker.debian.org/elpa-hl-todo)| Highlight TODO and similar keywords |
+| go-mode | [1.6.0](https://stable.melpa.org/#/go-mode) | N/A| Major mode for the Go programming language |
+| gptel | [0.9.7](https://stable.melpa.org/#/gptel) | N/A| Interact with ChatGPT or other LLMs |
+| hl-todo | [3.8.1](https://stable.melpa.org/#/hl-todo) | [3.8.1.post1](https://tracker.debian.org/elpa-hl-todo)| Highlight TODO and similar keywords |
 | ledger | N/A | [4.0.0.post2](https://tracker.debian.org/elpa-ledger)| None |
-| magit | [20241209.933](https://melpa.org/#/magit) | [4.1.3.post1](https://tracker.debian.org/elpa-magit)| A Git porcelain inside Emacs |
-| marginalia | [20241124.1138](https://melpa.org/#/marginalia) | [1.7.post1](https://tracker.debian.org/elpa-marginalia)| Enrich existing commands with completion annotations |
-| markdown-mode | [20241117.1510](https://melpa.org/#/markdown-mode) | [2.6.post2](https://tracker.debian.org/elpa-markdown-mode)| Major mode for Markdown-formatted text |
-| multiple-cursors | [20241201.1841](https://melpa.org/#/multiple-cursors) | [#861127](https://bugs.debian.org/861127)| Multiple cursors for Emacs |
-| notmuch | [20240816.2039](https://melpa.org/#/notmuch) | [0.38.3.post3](https://tracker.debian.org/elpa-notmuch)| Run notmuch within emacs |
+| magit | [4.1.3](https://stable.melpa.org/#/magit) | [4.1.3.post1](https://tracker.debian.org/elpa-magit)| A Git porcelain inside Emacs |
+| marginalia | [1.7](https://stable.melpa.org/#/marginalia) | [1.7.post1](https://tracker.debian.org/elpa-marginalia)| Enrich existing commands with completion annotations |
+| markdown-mode | [2.6](https://stable.melpa.org/#/markdown-mode) | [2.6.post2](https://tracker.debian.org/elpa-markdown-mode)| Major mode for Markdown-formatted text |
+| multiple-cursors | [1.4.0](https://stable.melpa.org/#/multiple-cursors) | [#861127](https://bugs.debian.org/861127)| Multiple cursors for Emacs |
+| notmuch | [0.38.3](https://stable.melpa.org/#/notmuch) | [0.38.3.post3](https://tracker.debian.org/elpa-notmuch)| Run notmuch within emacs |
 | org | N/A | [9.7.16+dfsg.1](https://tracker.debian.org/elpa-org)| None |
-| pdf-tools | [20240429.407](https://melpa.org/#/pdf-tools) | [1.1.0.post3](https://tracker.debian.org/elpa-pdf-tools)| Support library for PDF documents |
-| puppet-mode | [20210305.645](https://melpa.org/#/puppet-mode) | [0.4.post5](https://tracker.debian.org/elpa-puppet-mode)| Major mode for Puppet manifests |
+| pdf-tools | [1.1.0](https://stable.melpa.org/#/pdf-tools) | [1.1.0.post3](https://tracker.debian.org/elpa-pdf-tools)| Support library for PDF documents |
+| puppet-mode | [0.4](https://stable.melpa.org/#/puppet-mode) | [0.4.post5](https://tracker.debian.org/elpa-puppet-mode)| Major mode for Puppet manifests |
 | rainbow-mode | N/A | [1.0.6.post2](https://tracker.debian.org/elpa-rainbow-mode)| None |
 | recentf | N/A | N/A| None |
-| ripgrep | [20220520.1410](https://melpa.org/#/ripgrep) | [#976297](https://bugs.debian.org/976297)| Front-end for ripgrep, a command line search tool |
-| shift-number | [20170301.1459](https://melpa.org/#/shift-number) | N/A| Increase/decrease the number at point |
-| smart-mode-line | [20240924.2322](https://melpa.org/#/smart-mode-line) | [2.14.post2](https://tracker.debian.org/elpa-smart-mode-line)| A color coded smart mode-line |
+| ripgrep | [0.4.0](https://stable.melpa.org/#/ripgrep) | [#976297](https://bugs.debian.org/976297)| Front-end for ripgrep, a command line search tool |
+| shift-number | [0.1](https://stable.melpa.org/#/shift-number) | N/A| Increase/decrease the number at point |
+| smart-mode-line | [2.14](https://stable.melpa.org/#/smart-mode-line) | [2.14.post2](https://tracker.debian.org/elpa-smart-mode-line)| A color coded smart mode-line |
 | srcery-theme | [20240220.805](https://melpa.org/#/srcery-theme) | N/A| Dark color theme |
-| vertico | [20241208.2233](https://melpa.org/#/vertico) | [1.9.post1](https://tracker.debian.org/elpa-vertico)| VERTical Interactive COmpletion |
+| vertico | [1.9](https://stable.melpa.org/#/vertico) | [1.9.post1](https://tracker.debian.org/elpa-vertico)| VERTical Interactive COmpletion |
 | visual-fill-column-mode | N/A | N/A| None |
-| wc-mode | [20210418.47](https://melpa.org/#/wc-mode) | [1.4.post2](https://tracker.debian.org/elpa-wc-mode)| Running word count with goals (minor mode) |
-| which-key | [20240620.2145](https://melpa.org/#/which-key) | [3.6.0.post2](https://tracker.debian.org/elpa-which-key)| Display available keybindings in popup |
-| writegood-mode | [20220511.2109](https://melpa.org/#/writegood-mode) | [2.2.0.post3](https://tracker.debian.org/elpa-writegood-mode)| Polish up poor writing on the fly |
-| writeroom-mode | [20231103.931](https://melpa.org/#/writeroom-mode) | [3.11.post3](https://tracker.debian.org/elpa-writeroom-mode)| Minor mode for distraction-free writing |
-| ws-butler | [20241107.519](https://melpa.org/#/ws-butler) | [0.6.post5](https://tracker.debian.org/elpa-ws-butler)| Unobtrusively remove trailing whitespace |
-| yasnippet | [20241013.1557](https://melpa.org/#/yasnippet) | [0.14.0+git20230912.76e1eee6.2](https://tracker.debian.org/elpa-yasnippet)| Yet another snippet extension for Emacs |
+| wc-mode | [1.4.1](https://stable.melpa.org/#/wc-mode) | [1.4.post2](https://tracker.debian.org/elpa-wc-mode)| Running word count with goals (minor mode) |
+| which-key | [3.6.0](https://stable.melpa.org/#/which-key) | [3.6.0.post2](https://tracker.debian.org/elpa-which-key)| Display available keybindings in popup |
+| writegood-mode | [2.2.0](https://stable.melpa.org/#/writegood-mode) | [2.2.0.post3](https://tracker.debian.org/elpa-writegood-mode)| Polish up poor writing on the fly |
+| writeroom-mode | [3.11](https://stable.melpa.org/#/writeroom-mode) | [3.11.post3](https://tracker.debian.org/elpa-writeroom-mode)| Minor mode for distraction-free writing |
+| ws-butler | [0.7](https://stable.melpa.org/#/ws-butler) | [0.6.post5](https://tracker.debian.org/elpa-ws-butler)| Unobtrusively remove trailing whitespace |
+| yasnippet | [0.14.0](https://stable.melpa.org/#/yasnippet) | [0.14.0+git20230912.76e1eee6.2](https://tracker.debian.org/elpa-yasnippet)| Yet another snippet extension for Emacs |
 
 The above was automatically generated using [check-emacs-packages](https://gitlab.com/anarcat/scripts/blob/main/check-emacs-packages)
 with some manual modifications for packages on the main ELPA archive

remove outdate exceptions note, all from table directly now, warts and al
diff --git a/software/desktop/emacs.mdwn b/software/desktop/emacs.mdwn
index e995c141..f131f89b 100644
--- a/software/desktop/emacs.mdwn
+++ b/software/desktop/emacs.mdwn
@@ -78,16 +78,3 @@ packages into the script, I used this mighty pipeline:
     check-emacs-packages $( ( grep '^(use-package' ~/.emacs.d/init.el | sed 's/.* //' ; \
     grep -A2 packages ~/.emacs.d/custom.el  | tail -1 | sed 's/[()]//g;s/ /\n/g' ) \
     | sort -u ) 2>/dev/null
-
-Some packages are edited by hand:
-
- * `dictionary-el` does not follow the emacs team naming convention
- * `ein` has a false positive in WNPP
- * `gnus-alias` is not in stable MELPA
- * `org-mode` is not on any archive?
- * `rainbow-mode` is in GNU ELPA, not MELPA
- * `vc` is part of Emacs even though I load it with use-package so it
-   is not listed here
-
-This might be part of an override file instead of having to hand-craft
-this...

reformat table
diff --git a/software/desktop/emacs.mdwn b/software/desktop/emacs.mdwn
index d1c02f61..e995c141 100644
--- a/software/desktop/emacs.mdwn
+++ b/software/desktop/emacs.mdwn
@@ -23,52 +23,52 @@ those packages.
 
 Here's the list of packages I currently use.
 
-Package | Emacs | Debian | Description
-------- | ----- | ------ | -----------
-anzu | [20240929.201](https://melpa.org/#/anzu) | [0.67.post1](https://tracker.debian.org/elpa-anzu)| Show number of matches in mode-line while searching
-auto-dictionary | [20150410.1610](https://melpa.org/#/auto-dictionary) | [1.1.post1](https://tracker.debian.org/elpa-auto-dictionary)| Automatic dictionary switcher for flyspell
-cape | [20241211.1804](https://melpa.org/#/cape) | [#728729](https://bugs.debian.org/728729)| Completion At Point Extensions
-consult | [20241210.1313](https://melpa.org/#/consult) | [1.8.post1](https://tracker.debian.org/elpa-consult)| Consulting completing-read
-corfu | [20241208.2242](https://melpa.org/#/corfu) | [1.5.post1](https://tracker.debian.org/elpa-corfu)| COmpletion in Region FUnction
-crux | [20240401.1136](https://melpa.org/#/crux) | [#909337](https://bugs.debian.org/909337)| A Collection of Ridiculously Useful eXtensions
-dabbrev | N/A | N/A| None
-devdocs | [20241113.1341](https://melpa.org/#/devdocs) | N/A| Emacs viewer for DevDocs
-dimmer | [20220817.122](https://melpa.org/#/dimmer) | [0.4.2+repack20220817.a5b6975.3](https://tracker.debian.org/elpa-dimmer)| Visually highlight the selected buffer
-dockerfile-mode | [20240914.1549](https://melpa.org/#/dockerfile-mode) | [1.9.post3](https://tracker.debian.org/elpa-dockerfile-mode)| Major mode for editing Docker's Dockerfiles
-eglot | N/A | [1.15.post3](https://tracker.debian.org/elpa-eglot)| None
-embark | [20241003.1953](https://melpa.org/#/embark) | [1.1.post2](https://tracker.debian.org/elpa-embark)| Conveniently act on minibuffer completions
-embark-consult | [20240919.1831](https://melpa.org/#/embark-consult) | N/A| Consult integration for Embark
-flycheck | [20241130.1502](https://melpa.org/#/flycheck) | [34.1.post2](https://tracker.debian.org/elpa-flycheck)| On-the-fly syntax checking
-flymake | N/A | N/A| None
-format-all | [20241126.829](https://melpa.org/#/format-all) | [0.6.0.post2](https://tracker.debian.org/elpa-format-all)| Auto-format C, C++, JS, Python, Ruby and 50 other languages
-frames-only-mode | [20241201.1533](https://melpa.org/#/frames-only-mode) | N/A| Use frames instead of Emacs windows
-gnus-alias | [20230818.1830](https://melpa.org/#/gnus-alias) | N/A| An alternative to gnus-posting-styles
-go-mode | [20240620.1948](https://melpa.org/#/go-mode) | N/A| Major mode for the Go programming language
-gptel | [20241216.411](https://melpa.org/#/gptel) | N/A| Interact with ChatGPT or other LLMs
-hl-todo | [20240805.1444](https://melpa.org/#/hl-todo) | [3.8.1.post1](https://tracker.debian.org/elpa-hl-todo)| Highlight TODO and similar keywords
-ledger | N/A | [4.0.0.post2](https://tracker.debian.org/elpa-ledger)| None
-magit | [20241209.933](https://melpa.org/#/magit) | [4.1.3.post1](https://tracker.debian.org/elpa-magit)| A Git porcelain inside Emacs
-marginalia | [20241124.1138](https://melpa.org/#/marginalia) | [1.7.post1](https://tracker.debian.org/elpa-marginalia)| Enrich existing commands with completion annotations
-markdown-mode | [20241117.1510](https://melpa.org/#/markdown-mode) | [2.6.post2](https://tracker.debian.org/elpa-markdown-mode)| Major mode for Markdown-formatted text
-multiple-cursors | [20241201.1841](https://melpa.org/#/multiple-cursors) | [#861127](https://bugs.debian.org/861127)| Multiple cursors for Emacs
-notmuch | [20240816.2039](https://melpa.org/#/notmuch) | [0.38.3.post3](https://tracker.debian.org/elpa-notmuch)| Run notmuch within emacs
-org | N/A | [9.7.16+dfsg.1](https://tracker.debian.org/elpa-org)| None
-pdf-tools | [20240429.407](https://melpa.org/#/pdf-tools) | [1.1.0.post3](https://tracker.debian.org/elpa-pdf-tools)| Support library for PDF documents
-puppet-mode | [20210305.645](https://melpa.org/#/puppet-mode) | [0.4.post5](https://tracker.debian.org/elpa-puppet-mode)| Major mode for Puppet manifests
-rainbow-mode | N/A | [1.0.6.post2](https://tracker.debian.org/elpa-rainbow-mode)| None
-recentf | N/A | N/A| None
-ripgrep | [20220520.1410](https://melpa.org/#/ripgrep) | [#976297](https://bugs.debian.org/976297)| Front-end for ripgrep, a command line search tool
-shift-number | [20170301.1459](https://melpa.org/#/shift-number) | N/A| Increase/decrease the number at point
-smart-mode-line | [20240924.2322](https://melpa.org/#/smart-mode-line) | [2.14.post2](https://tracker.debian.org/elpa-smart-mode-line)| A color coded smart mode-line
-srcery-theme | [20240220.805](https://melpa.org/#/srcery-theme) | N/A| Dark color theme
-vertico | [20241208.2233](https://melpa.org/#/vertico) | [1.9.post1](https://tracker.debian.org/elpa-vertico)| VERTical Interactive COmpletion
-visual-fill-column-mode | N/A | N/A| None
-wc-mode | [20210418.47](https://melpa.org/#/wc-mode) | [1.4.post2](https://tracker.debian.org/elpa-wc-mode)| Running word count with goals (minor mode)
-which-key | [20240620.2145](https://melpa.org/#/which-key) | [3.6.0.post2](https://tracker.debian.org/elpa-which-key)| Display available keybindings in popup
-writegood-mode | [20220511.2109](https://melpa.org/#/writegood-mode) | [2.2.0.post3](https://tracker.debian.org/elpa-writegood-mode)| Polish up poor writing on the fly
-writeroom-mode | [20231103.931](https://melpa.org/#/writeroom-mode) | [3.11.post3](https://tracker.debian.org/elpa-writeroom-mode)| Minor mode for distraction-free writing
-ws-butler | [20241107.519](https://melpa.org/#/ws-butler) | [0.6.post5](https://tracker.debian.org/elpa-ws-butler)| Unobtrusively remove trailing whitespace
-yasnippet | [20241013.1557](https://melpa.org/#/yasnippet) | [0.14.0+git20230912.76e1eee6.2](https://tracker.debian.org/elpa-yasnippet)| Yet another snippet extension for Emacs
+| Package | Emacs | Debian | Description |
+| ------- | ----- | ------ | ----------- |
+| anzu | [20240929.201](https://melpa.org/#/anzu) | [0.67.post1](https://tracker.debian.org/elpa-anzu)| Show number of matches in mode-line while searching |
+| auto-dictionary | [20150410.1610](https://melpa.org/#/auto-dictionary) | [1.1.post1](https://tracker.debian.org/elpa-auto-dictionary)| Automatic dictionary switcher for flyspell |
+| cape | [20241211.1804](https://melpa.org/#/cape) | [#728729](https://bugs.debian.org/728729)| Completion At Point Extensions |
+| consult | [20241210.1313](https://melpa.org/#/consult) | [1.8.post1](https://tracker.debian.org/elpa-consult)| Consulting completing-read |
+| corfu | [20241208.2242](https://melpa.org/#/corfu) | [1.5.post1](https://tracker.debian.org/elpa-corfu)| COmpletion in Region FUnction |
+| crux | [20240401.1136](https://melpa.org/#/crux) | [#909337](https://bugs.debian.org/909337)| A Collection of Ridiculously Useful eXtensions |
+| dabbrev | N/A | N/A| None |
+| devdocs | [20241113.1341](https://melpa.org/#/devdocs) | N/A| Emacs viewer for DevDocs |
+| dimmer | [20220817.122](https://melpa.org/#/dimmer) | [0.4.2+repack20220817.a5b6975.3](https://tracker.debian.org/elpa-dimmer)| Visually highlight the selected buffer |
+| dockerfile-mode | [20240914.1549](https://melpa.org/#/dockerfile-mode) | [1.9.post3](https://tracker.debian.org/elpa-dockerfile-mode)| Major mode for editing Docker's Dockerfiles |
+| eglot | N/A | [1.15.post3](https://tracker.debian.org/elpa-eglot)| None |
+| embark | [20241003.1953](https://melpa.org/#/embark) | [1.1.post2](https://tracker.debian.org/elpa-embark)| Conveniently act on minibuffer completions |
+| embark-consult | [20240919.1831](https://melpa.org/#/embark-consult) | N/A| Consult integration for Embark |
+| flycheck | [20241130.1502](https://melpa.org/#/flycheck) | [34.1.post2](https://tracker.debian.org/elpa-flycheck)| On-the-fly syntax checking |
+| flymake | N/A | N/A| None |
+| format-all | [20241126.829](https://melpa.org/#/format-all) | [0.6.0.post2](https://tracker.debian.org/elpa-format-all)| Auto-format C, C++, JS, Python, Ruby and 50 other languages |
+| frames-only-mode | [20241201.1533](https://melpa.org/#/frames-only-mode) | N/A| Use frames instead of Emacs windows |
+| gnus-alias | [20230818.1830](https://melpa.org/#/gnus-alias) | N/A| An alternative to gnus-posting-styles |
+| go-mode | [20240620.1948](https://melpa.org/#/go-mode) | N/A| Major mode for the Go programming language |
+| gptel | [20241216.411](https://melpa.org/#/gptel) | N/A| Interact with ChatGPT or other LLMs |
+| hl-todo | [20240805.1444](https://melpa.org/#/hl-todo) | [3.8.1.post1](https://tracker.debian.org/elpa-hl-todo)| Highlight TODO and similar keywords |
+| ledger | N/A | [4.0.0.post2](https://tracker.debian.org/elpa-ledger)| None |
+| magit | [20241209.933](https://melpa.org/#/magit) | [4.1.3.post1](https://tracker.debian.org/elpa-magit)| A Git porcelain inside Emacs |
+| marginalia | [20241124.1138](https://melpa.org/#/marginalia) | [1.7.post1](https://tracker.debian.org/elpa-marginalia)| Enrich existing commands with completion annotations |
+| markdown-mode | [20241117.1510](https://melpa.org/#/markdown-mode) | [2.6.post2](https://tracker.debian.org/elpa-markdown-mode)| Major mode for Markdown-formatted text |
+| multiple-cursors | [20241201.1841](https://melpa.org/#/multiple-cursors) | [#861127](https://bugs.debian.org/861127)| Multiple cursors for Emacs |
+| notmuch | [20240816.2039](https://melpa.org/#/notmuch) | [0.38.3.post3](https://tracker.debian.org/elpa-notmuch)| Run notmuch within emacs |
+| org | N/A | [9.7.16+dfsg.1](https://tracker.debian.org/elpa-org)| None |
+| pdf-tools | [20240429.407](https://melpa.org/#/pdf-tools) | [1.1.0.post3](https://tracker.debian.org/elpa-pdf-tools)| Support library for PDF documents |
+| puppet-mode | [20210305.645](https://melpa.org/#/puppet-mode) | [0.4.post5](https://tracker.debian.org/elpa-puppet-mode)| Major mode for Puppet manifests |
+| rainbow-mode | N/A | [1.0.6.post2](https://tracker.debian.org/elpa-rainbow-mode)| None |
+| recentf | N/A | N/A| None |
+| ripgrep | [20220520.1410](https://melpa.org/#/ripgrep) | [#976297](https://bugs.debian.org/976297)| Front-end for ripgrep, a command line search tool |
+| shift-number | [20170301.1459](https://melpa.org/#/shift-number) | N/A| Increase/decrease the number at point |
+| smart-mode-line | [20240924.2322](https://melpa.org/#/smart-mode-line) | [2.14.post2](https://tracker.debian.org/elpa-smart-mode-line)| A color coded smart mode-line |
+| srcery-theme | [20240220.805](https://melpa.org/#/srcery-theme) | N/A| Dark color theme |
+| vertico | [20241208.2233](https://melpa.org/#/vertico) | [1.9.post1](https://tracker.debian.org/elpa-vertico)| VERTical Interactive COmpletion |
+| visual-fill-column-mode | N/A | N/A| None |
+| wc-mode | [20210418.47](https://melpa.org/#/wc-mode) | [1.4.post2](https://tracker.debian.org/elpa-wc-mode)| Running word count with goals (minor mode) |
+| which-key | [20240620.2145](https://melpa.org/#/which-key) | [3.6.0.post2](https://tracker.debian.org/elpa-which-key)| Display available keybindings in popup |
+| writegood-mode | [20220511.2109](https://melpa.org/#/writegood-mode) | [2.2.0.post3](https://tracker.debian.org/elpa-writegood-mode)| Polish up poor writing on the fly |
+| writeroom-mode | [20231103.931](https://melpa.org/#/writeroom-mode) | [3.11.post3](https://tracker.debian.org/elpa-writeroom-mode)| Minor mode for distraction-free writing |
+| ws-butler | [20241107.519](https://melpa.org/#/ws-butler) | [0.6.post5](https://tracker.debian.org/elpa-ws-butler)| Unobtrusively remove trailing whitespace |
+| yasnippet | [20241013.1557](https://melpa.org/#/yasnippet) | [0.14.0+git20230912.76e1eee6.2](https://tracker.debian.org/elpa-yasnippet)| Yet another snippet extension for Emacs |
 
 The above was automatically generated using [check-emacs-packages](https://gitlab.com/anarcat/scripts/blob/main/check-emacs-packages)
 with some manual modifications for packages on the main ELPA archive

update emacs package list
diff --git a/software/desktop/emacs.mdwn b/software/desktop/emacs.mdwn
index 4c5f17c0..d1c02f61 100644
--- a/software/desktop/emacs.mdwn
+++ b/software/desktop/emacs.mdwn
@@ -25,40 +25,59 @@ Here's the list of packages I currently use.
 
 Package | Emacs | Debian | Description
 ------- | ----- | ------ | -----------
-anzu | [0.62](https://stable.melpa.org/#/anzu) | [0.62-2](https://tracker.debian.org/elpa-anzu) | Show number of matches in mode-line while searching
-atomic-chrome | [2.0.0](https://stable.melpa.org/#/atomic-chrome) | [#909336](http://bugs.debian.org/909336) | Edit Chrome text area with Emacs using Atomic Chrome
-auto-dictionary | [1.1](https://stable.melpa.org/#/auto-dictionary) | [1.1-1](https://tracker.debian.org/elpa-auto-dictionary) | automatic dictionary switcher for flyspell
-company | [0.9.6](https://stable.melpa.org/#/company) | [0.9.6-1](https://tracker.debian.org/elpa-company) | Modular text completion framework
-company-go | [20170907](https://stable.melpa.org/#/company-go) | [20170907-3](https://tracker.debian.org/elpa-company-go) | company-mode backend for Go (using gocode)
-crux | [0.3.0](https://stable.melpa.org/#/crux) | [#909337](http://bugs.debian.org/909337) | A Collection of Ridiculously Useful eXtensions
-dictionary | [1.10](https://stable.melpa.org/#/dictionary) | [1.10-3](https://tracker.debian.org/pkg/dictionary-el) | Client for rfc2229 dictionary servers
-ein | [0.14.1](https://stable.melpa.org/#/ein) | [None](https://bugs.debian.org/) | Emacs IPython Notebook
-elpy | [1.24.0](https://stable.melpa.org/#/elpy) | [1.24.0-1](https://tracker.debian.org/elpa-elpy) | Emacs Python Development Environment
-gnus-alias | [20150316.42](https://melpa.org/#/gnus-alias) | [None](https://bugs.debian.org/) | an alternative to gnus-posting-styles
-go-mode | [1.5.0](https://stable.melpa.org/#/go-mode) | [3:1.5.0-2](https://tracker.debian.org/elpa-go-mode) | Major mode for the Go programming language
-ledger | [20180826.243](https://melpa.org/#/ledger-mode) | [3.1.2~pre1+g3a00e1c+dfsg1-5](https://tracker.debian.org/elpa-ledger) | command-line double-entry accounting program (emacs interface)
-magit | [2.13.0](https://stable.melpa.org/#/magit) | [2.13.0-3](https://tracker.debian.org/elpa-magit) | A Git porcelain inside Emacs.
-markdown-mode | [2.3](https://stable.melpa.org/#/markdown-mode) | [2.3+154-1](https://tracker.debian.org/elpa-markdown-mode) | Major mode for Markdown-formatted text
-markdown-toc | [0.1.2](https://stable.melpa.org/#/markdown-toc) | [#861128](http://bugs.debian.org/861128) | A simple TOC generator for markdown file
-multiple-cursors | [1.4.0](https://stable.melpa.org/#/multiple-cursors) | [#861127](http://bugs.debian.org/861127) | Multiple cursors for Emacs.
-notmuch | [0.27](https://stable.melpa.org/#/notmuch) | [0.27-3](https://tracker.debian.org/elpa-notmuch) | run notmuch within emacs
-org | [None](https://github.com/melpa/melpa/blob/master/CONTRIBUTING.org) | [9.1.14+dfsg-3](https://tracker.debian.org/elpa-org) | Keep notes, maintain ToDo lists, and do project planning in emacs
-rainbow-mode | [1.0.1](https://elpa.gnu.org/packages/rainbow-mode.html) | [1.0.1-1](https://tracker.debian.org/elpa-rainbow-mode) | Colorize color names in buffers
-solarized-theme | [1.2.2](https://stable.melpa.org/#/solarized-theme) | [1.2.2-3](https://tracker.debian.org/elpa-solarized-theme) | The Solarized color theme, ported to Emacs.
-use-package | [2.3](https://stable.melpa.org/#/use-package) | [2.3+repack-2](https://tracker.debian.org/elpa-use-package) | A use-package declaration for simplifying your .emacs
-webpaste | [2.1.0](https://stable.melpa.org/#/webpaste) | [None](https://bugs.debian.org/) | Paste to pastebin-like services
-writegood-mode | [2.0.3](https://stable.melpa.org/#/writegood-mode) | [2.0.3-1](https://tracker.debian.org/elpa-writegood-mode) | Polish up poor writing on the fly
-writeroom-mode | [3.7](https://stable.melpa.org/#/writeroom-mode) | [#861124](http://bugs.debian.org/861124) | Minor mode for distraction-free writing
-yasnippet | [0.13.0](https://stable.melpa.org/#/yasnippet) | [0.13.0-2](https://tracker.debian.org/elpa-yasnippet) | Yet another snippet extension for Emacs.
+anzu | [20240929.201](https://melpa.org/#/anzu) | [0.67.post1](https://tracker.debian.org/elpa-anzu)| Show number of matches in mode-line while searching
+auto-dictionary | [20150410.1610](https://melpa.org/#/auto-dictionary) | [1.1.post1](https://tracker.debian.org/elpa-auto-dictionary)| Automatic dictionary switcher for flyspell
+cape | [20241211.1804](https://melpa.org/#/cape) | [#728729](https://bugs.debian.org/728729)| Completion At Point Extensions
+consult | [20241210.1313](https://melpa.org/#/consult) | [1.8.post1](https://tracker.debian.org/elpa-consult)| Consulting completing-read
+corfu | [20241208.2242](https://melpa.org/#/corfu) | [1.5.post1](https://tracker.debian.org/elpa-corfu)| COmpletion in Region FUnction
+crux | [20240401.1136](https://melpa.org/#/crux) | [#909337](https://bugs.debian.org/909337)| A Collection of Ridiculously Useful eXtensions
+dabbrev | N/A | N/A| None
+devdocs | [20241113.1341](https://melpa.org/#/devdocs) | N/A| Emacs viewer for DevDocs
+dimmer | [20220817.122](https://melpa.org/#/dimmer) | [0.4.2+repack20220817.a5b6975.3](https://tracker.debian.org/elpa-dimmer)| Visually highlight the selected buffer
+dockerfile-mode | [20240914.1549](https://melpa.org/#/dockerfile-mode) | [1.9.post3](https://tracker.debian.org/elpa-dockerfile-mode)| Major mode for editing Docker's Dockerfiles
+eglot | N/A | [1.15.post3](https://tracker.debian.org/elpa-eglot)| None
+embark | [20241003.1953](https://melpa.org/#/embark) | [1.1.post2](https://tracker.debian.org/elpa-embark)| Conveniently act on minibuffer completions
+embark-consult | [20240919.1831](https://melpa.org/#/embark-consult) | N/A| Consult integration for Embark
+flycheck | [20241130.1502](https://melpa.org/#/flycheck) | [34.1.post2](https://tracker.debian.org/elpa-flycheck)| On-the-fly syntax checking
+flymake | N/A | N/A| None
+format-all | [20241126.829](https://melpa.org/#/format-all) | [0.6.0.post2](https://tracker.debian.org/elpa-format-all)| Auto-format C, C++, JS, Python, Ruby and 50 other languages
+frames-only-mode | [20241201.1533](https://melpa.org/#/frames-only-mode) | N/A| Use frames instead of Emacs windows
+gnus-alias | [20230818.1830](https://melpa.org/#/gnus-alias) | N/A| An alternative to gnus-posting-styles
+go-mode | [20240620.1948](https://melpa.org/#/go-mode) | N/A| Major mode for the Go programming language
+gptel | [20241216.411](https://melpa.org/#/gptel) | N/A| Interact with ChatGPT or other LLMs
+hl-todo | [20240805.1444](https://melpa.org/#/hl-todo) | [3.8.1.post1](https://tracker.debian.org/elpa-hl-todo)| Highlight TODO and similar keywords
+ledger | N/A | [4.0.0.post2](https://tracker.debian.org/elpa-ledger)| None
+magit | [20241209.933](https://melpa.org/#/magit) | [4.1.3.post1](https://tracker.debian.org/elpa-magit)| A Git porcelain inside Emacs
+marginalia | [20241124.1138](https://melpa.org/#/marginalia) | [1.7.post1](https://tracker.debian.org/elpa-marginalia)| Enrich existing commands with completion annotations
+markdown-mode | [20241117.1510](https://melpa.org/#/markdown-mode) | [2.6.post2](https://tracker.debian.org/elpa-markdown-mode)| Major mode for Markdown-formatted text
+multiple-cursors | [20241201.1841](https://melpa.org/#/multiple-cursors) | [#861127](https://bugs.debian.org/861127)| Multiple cursors for Emacs
+notmuch | [20240816.2039](https://melpa.org/#/notmuch) | [0.38.3.post3](https://tracker.debian.org/elpa-notmuch)| Run notmuch within emacs
+org | N/A | [9.7.16+dfsg.1](https://tracker.debian.org/elpa-org)| None
+pdf-tools | [20240429.407](https://melpa.org/#/pdf-tools) | [1.1.0.post3](https://tracker.debian.org/elpa-pdf-tools)| Support library for PDF documents
+puppet-mode | [20210305.645](https://melpa.org/#/puppet-mode) | [0.4.post5](https://tracker.debian.org/elpa-puppet-mode)| Major mode for Puppet manifests
+rainbow-mode | N/A | [1.0.6.post2](https://tracker.debian.org/elpa-rainbow-mode)| None
+recentf | N/A | N/A| None
+ripgrep | [20220520.1410](https://melpa.org/#/ripgrep) | [#976297](https://bugs.debian.org/976297)| Front-end for ripgrep, a command line search tool
+shift-number | [20170301.1459](https://melpa.org/#/shift-number) | N/A| Increase/decrease the number at point
+smart-mode-line | [20240924.2322](https://melpa.org/#/smart-mode-line) | [2.14.post2](https://tracker.debian.org/elpa-smart-mode-line)| A color coded smart mode-line
+srcery-theme | [20240220.805](https://melpa.org/#/srcery-theme) | N/A| Dark color theme
+vertico | [20241208.2233](https://melpa.org/#/vertico) | [1.9.post1](https://tracker.debian.org/elpa-vertico)| VERTical Interactive COmpletion
+visual-fill-column-mode | N/A | N/A| None
+wc-mode | [20210418.47](https://melpa.org/#/wc-mode) | [1.4.post2](https://tracker.debian.org/elpa-wc-mode)| Running word count with goals (minor mode)
+which-key | [20240620.2145](https://melpa.org/#/which-key) | [3.6.0.post2](https://tracker.debian.org/elpa-which-key)| Display available keybindings in popup
+writegood-mode | [20220511.2109](https://melpa.org/#/writegood-mode) | [2.2.0.post3](https://tracker.debian.org/elpa-writegood-mode)| Polish up poor writing on the fly
+writeroom-mode | [20231103.931](https://melpa.org/#/writeroom-mode) | [3.11.post3](https://tracker.debian.org/elpa-writeroom-mode)| Minor mode for distraction-free writing
+ws-butler | [20241107.519](https://melpa.org/#/ws-butler) | [0.6.post5](https://tracker.debian.org/elpa-ws-butler)| Unobtrusively remove trailing whitespace
+yasnippet | [20241013.1557](https://melpa.org/#/yasnippet) | [0.14.0+git20230912.76e1eee6.2](https://tracker.debian.org/elpa-yasnippet)| Yet another snippet extension for Emacs
 
 The above was automatically generated using [check-emacs-packages](https://gitlab.com/anarcat/scripts/blob/main/check-emacs-packages)
 with some manual modifications for packages on the main ELPA archive
 (as opposed to MELPA, which is surprisingly rare). To feed the list of
 packages into the script, I used this mighty pipeline:
 
-    check-emacs-packages $( ( grep '^(use-package' ~/.emacs | sed 's/.* //' ; \
-    grep -A2 packages ~/.emacs-custom  | tail -1 | sed 's/[()]//g;s/ /\n/g' ) \
-    | sort -u )
+    check-emacs-packages $( ( grep '^(use-package' ~/.emacs.d/init.el | sed 's/.* //' ; \
+    grep -A2 packages ~/.emacs.d/custom.el  | tail -1 | sed 's/[()]//g;s/ /\n/g' ) \
+    | sort -u ) 2>/dev/null
 
 Some packages are edited by hand:
 

fix syntax error
diff --git a/services/upgrades/bookworm.md b/services/upgrades/bookworm.md
index 335b2863..23e38d40 100644
--- a/services/upgrades/bookworm.md
+++ b/services/upgrades/bookworm.md
@@ -49,9 +49,9 @@ can log back in over a serial console or virtual terminal.
 
  1. Preparation:
 
-        echo reset to the default locale
+        echo reset to the default locale &&
         export LC_ALL=C.UTF-8 &&
-        echo install some dependencies
+        echo install some dependencies &&
         sudo apt install ttyrec screen debconf-utils deborphan apt-forktracer &&
         echo create ttyrec file with adequate permissions &&
         sudo touch /var/log/upgrade-bookworm.ttyrec &&

more trixie issues
diff --git a/services/upgrades/trixie.md b/services/upgrades/trixie.md
index 8c74e575..3d878c88 100644
--- a/services/upgrades/trixie.md
+++ b/services/upgrades/trixie.md
@@ -233,14 +233,143 @@ TODO
 
 See also the [noteworthy obsolete packages](https://www.debian.org/releases/testing/release-notes/issues.en.html#noteworthy-obsolete-packages) list.
 
+## Other improvements
+
+- pinentry-qt now has Wayland support
+- Signal Desktop seems to work properly in Wayland
+
 # Issues
 
 See also the official list of [known issues](https://www.debian.org/releases/testing/release-notes/issues.en.html#known-severe-bugs).
 
 ## Pending
 
+### Removed packages
+
+- `nomacs` (needs an [update to latest upstream](https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=1076763))
+- `raysession` (broken by a [FTBFS in a dependency](https://bugs.debian.org/1075409))
+
+### Webcam sharing stopped working in Firefox
+
+Webcam isn't detected properly in Firefox. It works in guvcview and
+chrome, so it's not an issue with the webcam per se, seems specific to
+Firefox.
+
+Screen sharing still works.
+
 ## Resolved
 
+### Fluffychat fails to start
+
+After the upgrade, Fluffychat completely failed to start with an error
+like:
+
+    flutter: [Matrix] !!!CRITICAL!!! Unable to construct database! - SqfliteFfiException(sqlite_error: 26, , SqliteException(26): while selecting from statement, file is not a database, file is not a database (code 26)
+
+It was quite hard to parse in the UI, and after restarting, the error
+message went away, but it was as if the configuration was entirely
+reset. Looking at my logs, it seems the problem is with the keyring
+support:
+
+    fluffychat[228136]: libsecret_error: Failed to unlock the keyring
+    flutter: [Matrix] Unable to init database encryption - PlatformException(Libsecret error, Failed to unlock the keyring, null, null)
+
+I switched to gomuks, but they are [rewriting it in web](https://github.com/tulir/gomuks/issues/476) which,
+ugh. So I also tested [ement.el](https://github.com/alphapapa/ement.el), an Emacs (!) client, which works
+well: OIDC and image support, but it's lacking E2EE.
+
+This might be unrelated to the upgrade, and more likely because I
+started using [keyring_pass](https://github.com/nazarewk/keyring_pass).
+
+Thankfully, just logging in again and entering the recovery key mostly
+brought back Fluffychat in good working order.
+
+### gpg-agent / SSH failure
+
+After a reboot, GCR (GNOME Keyring?) took over the `SSH_AUTH_SOCK`
+environment (set to `/run/user/1000/gcr/ssh` instead of
+`/run/user/1000/gnupg/S.gpg-agent.ssh`). That's somewhat easily worked
+around by hardcoding the environment in a shell, but even without
+that, SSH still fails, as scdaemon fails to talk with the YubiKey:
+
+    scdaemon[16500]: pcsc_connect failed: sharing violation (0x8010000b)
+
+Restarting `gpg-agent.service` and disconnecting the YubiKey fixed
+the latter.
+
+Purging `gcr4` fixed the former.
+
+### In-upgrade issues
+
+During the upgrade, magit started misbehaving, gpg-agent wouldn't
+authenticate to remove SSH servers or decrypt emails either. The
+problem is the `pinentry` program:
+
+    Cannot mix incompatible Qt library (5.15.15) with this library (5.15.8)
+
+... and bash completion would fail with:
+
+    _comp_initialize: command not found
+
+All of those issues fixed themselves after the upgrade was completed.
+
+### Out of space in /boot
+
+The `/boot` has, again, become too small, which is getting a bit
+ridiculous. I had to jump through a couple hoops to make the upgrade
+complete:
+
+1. `MODULES=dep` in `/etc/initramfs-tools/initramfs.conf`
+2. cleaning up old kernels preemptively
+3. regenerate the current initramfs with `update-initramfs -u`
+4. rerun `apt upgrade`
+
+After the upgrade, with two initramfs compressed with zstd and
+`MODULES=dep`, I get:
+
+    root@angela:/var/tmp# df -h  /boot
+    Filesystem      Size  Used Avail Use% Mounted on
+    /dev/nvme0n1p2  456M  264M  167M  62% /boot
+
+... which is a bit bizarre because `du -schx /boot` reports 88M
+used. After a reboot, however, free space returns properly:
+
+    Filesystem      Size  Used Avail Use% Mounted on
+    /dev/nvme0n1p2  456M   88M  344M  21% /boot
+
+### Packages not upgradable
+
+The packages `libboost-dev` and `source-extractor` were marked as "not
+upgrading". Both packages were not directly used and just purged.
+
+### Pinentry reverted to GNOME
+
+After a reboot, for some reason pinentry switched from `pinentry-qt`
+to `pinentry-gnome3` which *works* but that I find kind of ugly. A
+simple fix is to:
+
+    update-alternatives --config pinentry
+
+Removing `pinentry-gnome3` also fixes this.
+
+### Puppet catalog fails
+
+Puppet in trixie fails with:
+
+    Error while evaluating a Function Call, Unsupported OS family:  (file: /etc/puppet/code/production/modules/augeas/manifests/params.pp, line: 46, column: 17) on node angela.anarc.at
+
+There were *lots* of issues like this, as Puppet 8 deprecated a ton of
+things. Adding `include_legacy_facts=true` to `puppet.conf` on the
+agent helped a lot, but ultimately I just upgraded all the modules
+that were failing, one at a time.
+
+### Removed packages
+
+- `gnuradio` (reinstalled)
+- `python3-yubikey-manager` (now called `python3-ykman`, normal transition)
+- `tlp` (replaced with `power-profiles-daemon` during the upgrade,
+  restored by Puppet)
+
 # Troubleshooting
 
 ## Upgrade failures

try some trixies
diff --git a/blog/2024-08-15-why-trixie.md b/blog/2024-08-15-why-trixie.md
index bf51df60..83befc1a 100644
--- a/blog/2024-08-15-why-trixie.md
+++ b/blog/2024-08-15-why-trixie.md
@@ -36,6 +36,7 @@ interesting enough to list here.
 - [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
+- [gomuks](https://github.com/tulir/gomuks/) and [ement.el](https://github.com/alphapapa/ement.el): new Matrix clients
 - [fyi](https://codeberg.org/dnkl/fyi): notify-send replacement
 - [git-subrepo](https://github.com/ingydotnet/git-subrepo): git-submodule replacement I am considering
 - [gpg-from-sq](https://packages.debian.org/unstable/gpg-from-sq): Sequoia (Rust!) wrapper for GnuPG, might be able
@@ -60,7 +61,8 @@ 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)
 - [shoutidjc](https://idjc.sourceforge.io/index.html): streaming workstation, currently using [butt](https://tracker.debian.org/pkg/butt) but
-  it doesn't support HTTPS correctly
+  it doesn't support HTTPS correctly (update: not so exciting, no GUI,
+  no great error reporting - failed to fail with incorrect password)
 - [spytrap-adb](https://github.com/spytrap-org/spytrap-adb): cool spy gear
 - [syslog-summary](https://github.com/shtrom/syslog-summary): log summarizer, one of many of the kind, but
   made by Lars, so it must be good

fix non-exising apt queries
diff --git a/blog/2024-08-15-why-trixie.md b/blog/2024-08-15-why-trixie.md
index 7c90037e..bf51df60 100644
--- a/blog/2024-08-15-why-trixie.md
+++ b/blog/2024-08-15-why-trixie.md
@@ -90,8 +90,9 @@ that can just be installed from unstable:
 - [asn](https://github.com/nitefood/asn/): IP address forensics
 - [diffr](https://github.com/mookid/diffr): improved git diffs - i typically have this in magit, but
   this is useful when calling `git diff` directly in a shell, which i
-  still do sometimes - [riff](https://github.com/walles/riff) is similar but not in Debian, and
-  there's also [git-delta](https://github.com/dandavison/delta) that's only in trixie
+  still do sometimes - [riff](https://github.com/walles/riff) is similar but not in Debian.
+  there's also [git-delta](https://github.com/dandavison/delta) that's only in trixie, but it also
+  [supports ripgrep](https://dandavison.github.io/delta/grep.html) which is pretty cool
 - [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
 - [sway-notification-center](https://github.com/ErikReider/SwayNotificationCenter): used as part of my status bar, yet another status bar
diff --git a/services/upgrades/trixie.md b/services/upgrades/trixie.md
index 20baf3f8..8c74e575 100644
--- a/services/upgrades/trixie.md
+++ b/services/upgrades/trixie.md
@@ -39,9 +39,9 @@ can log back in over a serial console or virtual terminal.
 
  1. Preparation:
 
-        echo reset to the default locale
+        echo reset to the default locale &&
         export LC_ALL=C.UTF-8 &&
-        echo install some dependencies
+        echo install some dependencies &&
         sudo apt install ttyrec screen debconf-utils deborphan &&
         echo create ttyrec file with adequate permissions &&
         sudo touch /var/log/upgrade-trixie.ttyrec &&
@@ -86,13 +86,15 @@ can log back in over a serial console or virtual terminal.
         rm -f /etc/apt/sources.list.d/testing.list &&
         echo purge removed packages &&
         apt purge $(dpkg -l | awk '/^rc/ { print $2 }') &&
+        echo purge obsolete packages &&
         apt purge '?obsolete' &&
+        echo autoremove packages &&
         apt autoremove -y --purge &&
         echo possibly clean up old kernels &&
         dpkg -l 'linux-image-*' &&
         echo look for packages from backports, other suites or archives &&
         echo if possible, switch to official packages by disabling third-party repositories &&
-        apt list "?narrow(?installed, ?not(?version(CURRENT)))" &&
+        apt list "?narrow(?installed, ?not(?codename($(lsb_release -c -s | tail -1))))" &&
         printf "End of Step 3\a\n"
 
  4. Check free space (see [this guide to free up space][]), disable
@@ -159,7 +161,7 @@ can log back in over a serial console or virtual terminal.
         apt autopurge &&
         echo review obsolete and odd packages &&
         apt purge '?obsolete' && apt autopurge &&
-        apt list "?narrow(?installed, ?not(?version(CURRENT)))" &&
+        apt list "?narrow(?installed, ?not(?codename($(lsb_release -c -s | tail -1))))" &&
         apt clean &&
         echo review installed kernels: &&
         dpkg -l 'linux-image*' | less &&

found git-delta too
diff --git a/blog/2024-08-15-why-trixie.md b/blog/2024-08-15-why-trixie.md
index d80a3124..7c90037e 100644
--- a/blog/2024-08-15-why-trixie.md
+++ b/blog/2024-08-15-why-trixie.md
@@ -91,7 +91,7 @@ that can just be installed from unstable:
 - [diffr](https://github.com/mookid/diffr): improved git diffs - i typically have this in magit, but
   this is useful when calling `git diff` directly in a shell, which i
   still do sometimes - [riff](https://github.com/walles/riff) is similar but not in Debian, and
-  there's probably another one i forgot about
+  there's also [git-delta](https://github.com/dandavison/delta) that's only in trixie
 - [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
 - [sway-notification-center](https://github.com/ErikReider/SwayNotificationCenter): used as part of my status bar, yet another status bar

another trixie thing
diff --git a/blog/2024-08-15-why-trixie.md b/blog/2024-08-15-why-trixie.md
index 0857a253..d80a3124 100644
--- a/blog/2024-08-15-why-trixie.md
+++ b/blog/2024-08-15-why-trixie.md
@@ -88,6 +88,10 @@ 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
+- [diffr](https://github.com/mookid/diffr): improved git diffs - i typically have this in magit, but
+  this is useful when calling `git diff` directly in a shell, which i
+  still do sometimes - [riff](https://github.com/walles/riff) is similar but not in Debian, and
+  there's probably another one i forgot about
 - [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
 - [sway-notification-center](https://github.com/ErikReider/SwayNotificationCenter): used as part of my status bar, yet another status bar

rosa donated
diff --git a/hardware/rosa.mdwn b/hardware/rosa.mdwn
index fb0276f0..d1d66448 100644
--- a/hardware/rosa.mdwn
+++ b/hardware/rosa.mdwn
@@ -24,6 +24,11 @@ configured similarly to [[hardware/server/plastik]], with a fresh
 OpenWRT (19.07.3) setup (see the [OpenWRT hardware page](https://openwrt.org/toh/hwdata/tp-link/tp-link_archer_c7_v5)), using
 the `factory.bin` image from the TP-Link stock firmware web interface.
 
+Update, 2024-11-20: the device was given to a family looking for a
+more powerful router. It was upgraded to 23.07 and
+factory-reset. Location and passwords still available in password
+manager.
+
 Benchmarks
 ==========
 

note divergent package check from trixie
diff --git a/services/upgrades/bookworm.md b/services/upgrades/bookworm.md
index bc177dd5..335b2863 100644
--- a/services/upgrades/bookworm.md
+++ b/services/upgrades/bookworm.md
@@ -508,7 +508,8 @@ caught however. This will:
 That effectively replaces the old `apt-show-versions | grep -v
 /bookworm` hack.
 
-TODO: update actual procedure with the above.
+Note that the [[trixie]] procedure has a new `apt list` query that we
+consider complete.
 
 # References
 

merge bookworm fixes into trixie
diff --git a/services/upgrades/bookworm.md b/services/upgrades/bookworm.md
index 9acfac83..bc177dd5 100644
--- a/services/upgrades/bookworm.md
+++ b/services/upgrades/bookworm.md
@@ -85,9 +85,9 @@ can log back in over a serial console or virtual terminal.
         rm -f /etc/apt/preferences /etc/apt/preferences.d/* &&
         rm -f /etc/apt/sources.list.d/backports.debian.org.list &&
         rm -f /etc/apt/sources.list.d/backports.list &&
+        rm -f /etc/apt/sources.list.d/*-backports.list &&
         rm -f /etc/apt/sources.list.d/bookworm.list &&
         rm -f /etc/apt/sources.list.d/bullseye.list &&
-        rm -f /etc/apt/sources.list.d/buster-backports.list &&
         rm -f /etc/apt/sources.list.d/experimental.list &&
         rm -f /etc/apt/sources.list.d/incoming.list &&
         rm -f /etc/apt/sources.list.d/proposed-updates.list &&
@@ -104,7 +104,7 @@ can log back in over a serial console or virtual terminal.
         apt-forktracer &&
         printf "End of Step 3\a\n"
 
- 5. Check free space (see [this guide to free up space][]), disable
+ 4. Check free space (see [this guide to free up space][]), disable
     auto-upgrades, and download packages:
 
         systemctl stop apt-daily.timer &&
@@ -115,6 +115,7 @@ can log back in over a serial console or virtual terminal.
         apt -y -d upgrade &&
         apt -y -d dist-upgrade &&
         df -h &&
+        echo make sure host is silenced in monitoring &&
         printf "End of Step 4\a\n"
 
  5. Actual upgrade run:
@@ -515,7 +516,7 @@ TODO: update actual procedure with the above.
  * [Release notes](https://www.debian.org/releases/bookworm/amd64/release-notes/ch-whats-new.en.html)
  * [Koumbit guide](https://wiki.koumbit.net/BookwormUpgrade) (checked 2024-11-27, changes ported to trixie procedure)
  * [DSA guide](https://dsa.debian.org/howto/upgrade-to-bullseye/) (checked 2024-11-27, changes ported to trixie procedure)
- * [TPA guide][] (merged 2024-11-27)
+ * [TPA guide][] (merged 2024-11-27, changes also ported to trixie procedure)
  * [Solution proposal to automate this](https://wiki.debian.org/AutomatedUpgrade)
 
 [TPA guide]: https://gitlab.torproject.org/tpo/tpa/team/-/wikis/howto/upgrades/bullseye
diff --git a/services/upgrades/trixie.md b/services/upgrades/trixie.md
index fa1d685d..20baf3f8 100644
--- a/services/upgrades/trixie.md
+++ b/services/upgrades/trixie.md
@@ -39,16 +39,16 @@ can log back in over a serial console or virtual terminal.
 
  1. Preparation:
 
-        : reset to the default locale
+        echo reset to the default locale
         export LC_ALL=C.UTF-8 &&
-        : install some dependencies
+        echo install some dependencies
         sudo apt install ttyrec screen debconf-utils deborphan &&
-        : create ttyrec file with adequate permissions &&
+        echo create ttyrec file with adequate permissions &&
         sudo touch /var/log/upgrade-trixie.ttyrec &&
         sudo chmod 600 /var/log/upgrade-trixie.ttyrec &&
         sudo ttyrec -a -e screen /var/log/upgrade-trixie.ttyrec
 
- 2. Backups, stop monitoring, and checks:
+ 2. Backups and checks:
 
         ( 
           umask 0077 &&
@@ -59,11 +59,11 @@ can log back in over a serial console or virtual terminal.
         ( puppet agent --test || true )&&
         apt-mark showhold &&
         dpkg --audit &&
-        : look for dkms packages and make sure they are relevant, if not, purge. &&
+        echo look for dkms packages and make sure they are relevant, if not, purge. &&
         ( dpkg -l '*dkms' || true ) &&
-        : look for leftover config files &&
+        echo look for leftover config files &&
         /home/anarcat/src/koumbit-scripts/vps/clean_conflicts &&
-        : run backups &&
+        echo run backups &&
         /home/anarcat/bin/backup-$(hostname) &&
         printf "End of Step 2\a\n"
 
@@ -71,7 +71,7 @@ can log back in over a serial console or virtual terminal.
 
         puppet agent --disable "running major upgrade" &&
         apt update && apt -y upgrade &&
-        : Check for pinned, on hold, packages, and possibly disable &&
+        echo Check for pinned, on hold, packages, and possibly disable &&
         rm -f /etc/apt/preferences /etc/apt/preferences.d/* &&
         rm -f /etc/apt/sources.list.d/backports.debian.org.list &&
         rm -f /etc/apt/sources.list.d/backports.list &&
@@ -84,15 +84,15 @@ can log back in over a serial console or virtual terminal.
         rm -f /etc/apt/sources.list.d/proposed-updates.list &&
         rm -f /etc/apt/sources.list.d/sid.list &&
         rm -f /etc/apt/sources.list.d/testing.list &&
-        : purge removed packages &&
+        echo purge removed packages &&
         apt purge $(dpkg -l | awk '/^rc/ { print $2 }') &&
         apt purge '?obsolete' &&
         apt autoremove -y --purge &&
-        : possibly clean up old kernels &&
+        echo possibly clean up old kernels &&
         dpkg -l 'linux-image-*' &&
-        : look for packages from backports, other suites or archives &&
-        : if possible, switch to official packages by disabling third-party repositories &&
-        apt list "?narrow(?installed, ?not(?codename($(lsb_release -c -s | tail -1))))" &&
+        echo look for packages from backports, other suites or archives &&
+        echo if possible, switch to official packages by disabling third-party repositories &&
+        apt list "?narrow(?installed, ?not(?version(CURRENT)))" &&
         printf "End of Step 3\a\n"
 
  4. Check free space (see [this guide to free up space][]), disable
@@ -106,12 +106,10 @@ can log back in over a serial console or virtual terminal.
         apt -y -d upgrade &&
         apt -y -d dist-upgrade &&
         df -h &&
-        : make sure host is silenced in monitoring &&
+        echo make sure host is silenced in monitoring &&
         printf "End of Step 4\a\n"
 
-[this guide to free up space]: https://www.debian.org/releases/testing/release-notes/upgrading.en.html#make-sure-you-have-sufficient-space-for-the-upgrade
-
- 5. Actual upgrade step.
+ 5. Actual upgrade step. Put server in maintenance here.
 
     Optional, minimal upgrade run (avoids new installs or removals):
 
@@ -134,32 +132,41 @@ can log back in over a serial console or virtual terminal.
         printf "Press enter to continue, Ctrl-C to abort." &&
         read -r _ &&
         (puppet agent -t || true) &&
-        : rm -f /etc/apt/apt.conf.d/50unattended-upgrades.dpkg-dist /etc/ca-certificates.conf.dpkg-old /etc/cron.daily/bsdmainutils.dpkg-remove /etc/default/prometheus-apache-exporter.dpkg-dist /etc/default/prometheus-node-exporter.dpkg-dist /etc/logrotate.d/apache2.dpkg-dist /etc/nagios/nrpe.cfg.dpkg-dist /etc/ssh/ssh_config.dpkg-dist /etc/ssh/sshd_config.ucf-dist /etc/unbound/unbound.conf.dpkg-dist &&
+        echo deploy upgrades after possible Puppet sources.list changes &&
+        apt update && apt upgrade -y &&
+        echo rm -f /etc/apt/apt.conf.d/50unattended-upgrades.dpkg-dist /etc/ca-certificates.conf.dpkg-old /etc/cron.daily/bsdmainutils.dpkg-remove /etc/default/prometheus-apache-exporter.dpkg-dist /etc/default/prometheus-node-exporter.dpkg-dist /etc/logrotate.d/apache2.dpkg-dist /etc/nagios/nrpe.cfg.dpkg-dist /etc/ssh/ssh_config.dpkg-dist /etc/ssh/sshd_config.ucf-dist /etc/unbound/unbound.conf.dpkg-dist &&
         printf "\a" &&
         /home/anarcat/src/koumbit-scripts/vps/clean_conflicts &&
         systemctl start apt-daily.timer &&
+        rm /etc/nologin &&
         printf "End of Step 6\a\n" &&
-        shutdown -r +1 "rebooting to get rid of old kernel image..."
+        shutdown -r +1 "major upgrade step 6: removing old kernel image"
 
- 7. Post-upgrade checks:
+ 7. Post-upgrade cleanup:
 
         export LC_ALL=C.UTF-8 &&
         sudo ttyrec -a -e screen /var/log/upgrade-trixie.ttyrec
 
-        apt-mark manual bind9-dnsutils puppet-agent
-        apt purge gcc-9-base gcc-10-base apt-forktracer
-        apt purge $(dpkg -l | awk '/^rc/ { print $2 }') # purge removed packages
-        apt autoremove -y --purge
-        apt purge $(deborphan --guess-dummy)
-        while deborphan -n | grep -q . ; do apt purge $(deborphan -n); done
-        apt autoremove -y --purge
-        apt clean
-        # review and purge older kernel if the new one boots properly
-        dpkg -l 'linux-image*'
-        # review packages that are not in the new distribution
-        apt purge '?obsolete'
-        apt list "?narrow(?installed, ?not(?codename($(lsb_release -c -s | tail -1))))" &&
-        printf "All procedures completed\a\n" &&
+        echo consider apt-mark minimize-manual
+
+        apt-mark manual bind9-dnsutils &&
+        apt purge apt-forktracer &&
+        echo purging removed packages &&
+        apt purge $(dpkg -l | awk '/^rc/ { print $2 }') &&
+        apt autopurge &&
+        apt purge $(deborphan --guess-dummy) &&
+        while deborphan -n | grep -q . ; do apt purge $(deborphan -n); done &&
+        apt autopurge &&
+        echo review obsolete and odd packages &&
+        apt purge '?obsolete' && apt autopurge &&
+        apt list "?narrow(?installed, ?not(?version(CURRENT)))" &&
+        apt clean &&
+        echo review installed kernels: &&
+        dpkg -l 'linux-image*' | less &&
+        printf "End of Step 8\a\n" &&
+        shutdown -r +1 "last major upgrade step: testing reboots one final time"
+
+[this guide to free up space]: https://www.debian.org/releases/testing/release-notes/upgrading.en.html#make-sure-you-have-sufficient-space-for-the-upgrade
 
 ## Conflicts resolution
 

merge bookworm with TPA
diff --git a/services/upgrades/bookworm.md b/services/upgrades/bookworm.md
index a1324b16..9acfac83 100644
--- a/services/upgrades/bookworm.md
+++ b/services/upgrades/bookworm.md
@@ -117,8 +117,6 @@ can log back in over a serial console or virtual terminal.
         df -h &&
         printf "End of Step 4\a\n"
 
-[this guide to free up space]: http://www.debian.org/releases/bookworm/amd64/release-notes/ch-upgrading.en.html#sufficient-space
-
  5. Actual upgrade run:
 
         echo put server in maintenance &&
@@ -135,32 +133,44 @@ can log back in over a serial console or virtual terminal.
         printf "Press enter to continue, Ctrl-C to abort." &&
         read -r _ &&
         (puppet agent -t || true) &&
+        echo deploy upgrades after possible Puppet sources.list changes &&
+        apt update && apt upgrade -y &&
         echo rm -f /etc/apt/apt.conf.d/50unattended-upgrades.dpkg-dist /etc/ca-certificates.conf.dpkg-old /etc/cron.daily/bsdmainutils.dpkg-remove /etc/default/prometheus-apache-exporter.dpkg-dist /etc/default/prometheus-node-exporter.dpkg-dist /etc/logrotate.d/apache2.dpkg-dist /etc/nagios/nrpe.cfg.dpkg-dist /etc/ssh/ssh_config.dpkg-dist /etc/ssh/sshd_config.ucf-dist /etc/unbound/unbound.conf.dpkg-dist &&
         printf "\a" &&
         /home/anarcat/src/koumbit-scripts/vps/clean_conflicts &&
         systemctl start apt-daily.timer &&
+        rm /etc/nologin &&
         printf "End of Step 6\a\n" &&
-        shutdown -r +1 "rebooting to get rid of old kernel image..."
+        shutdown -r +1 "bookworm upgrade step 6: removing old kernel image"
 
- 7. Post-upgrade checks:
+ 7. Post-upgrade cleanup:
 
         export LC_ALL=C.UTF-8 &&
         sudo ttyrec -a -e screen /var/log/upgrade-bookworm.ttyrec
 
-        apt-mark manual bind9-dnsutils puppet-agent
-        apt purge gcc-9-base gcc-10-base apt-forktracer
-        apt purge $(dpkg -l | awk '/^rc/ { print $2 }') # purge removed packages
-        apt autoremove -y --purge
-        apt purge $(deborphan --guess-dummy)
-        while deborphan -n | grep -q . ; do apt purge $(deborphan -n); done
-        apt autoremove -y --purge
-        apt clean
-        # review and purge older kernel if the new one boots properly
-        dpkg -l 'linux-image*'
-        # review packages that are not in the new distribution
-        apt purge '?obsolete'
+        apt-mark manual bind9-dnsutils puppet-agent &&
+        apt purge apt-forktracer &&
+        echo purging removed packages &&
+        apt purge $(dpkg -l | awk '/^rc/ { print $2 }') &&
+        apt autopurge &&
+        apt purge $(deborphan --guess-dummy) &&
+        while deborphan -n | grep -q . ; do apt purge $(deborphan -n); done &&
+        apt autopurge &&
+        echo review obsolete and odd packages &&
+        apt purge '?obsolete' && apt autopurge &&
         apt list "?narrow(?installed, ?not(?codename($(lsb_release -c -s | tail -1))))" &&
-        printf "All procedures completed\a\n" &&
+        apt clean &&
+        echo review installed kernels: &&
+        dpkg -l 'linux-image*' | less &&
+        printf "End of Step 8\a\n" &&
+        shutdown -r +1 "bookworm upgrade step 9: testing reboots one final time"
+
+IMPORTANT: make sure you test the services at this point, or at least
+notify the admins responsible for the service so they do so. This will
+allow new problems that developed due to the upgrade to be found
+earlier.
+
+[this guide to free up space]: http://www.debian.org/releases/bookworm/amd64/release-notes/ch-upgrading.en.html#sufficient-space
 
 ## Conflicts resolution
 
@@ -505,7 +515,7 @@ TODO: update actual procedure with the above.
  * [Release notes](https://www.debian.org/releases/bookworm/amd64/release-notes/ch-whats-new.en.html)
  * [Koumbit guide](https://wiki.koumbit.net/BookwormUpgrade) (checked 2024-11-27, changes ported to trixie procedure)
  * [DSA guide](https://dsa.debian.org/howto/upgrade-to-bullseye/) (checked 2024-11-27, changes ported to trixie procedure)
- * [TPA guide][] (WIP, last checked 2023-06-05)
+ * [TPA guide][] (merged 2024-11-27)
  * [Solution proposal to automate this](https://wiki.debian.org/AutomatedUpgrade)
 
 [TPA guide]: https://gitlab.torproject.org/tpo/tpa/team/-/wikis/howto/upgrades/bullseye

merge TPA changes in bookworm procedure
diff --git a/services/upgrades/bookworm.md b/services/upgrades/bookworm.md
index 75b21a14..a1324b16 100644
--- a/services/upgrades/bookworm.md
+++ b/services/upgrades/bookworm.md
@@ -49,11 +49,11 @@ can log back in over a serial console or virtual terminal.
 
  1. Preparation:
 
-        : reset to the default locale
+        echo reset to the default locale
         export LC_ALL=C.UTF-8 &&
-        : install some dependencies
+        echo install some dependencies
         sudo apt install ttyrec screen debconf-utils deborphan apt-forktracer &&
-        : create ttyrec file with adequate permissions &&
+        echo create ttyrec file with adequate permissions &&
         sudo touch /var/log/upgrade-bookworm.ttyrec &&
         sudo chmod 600 /var/log/upgrade-bookworm.ttyrec &&
         sudo ttyrec -a -e screen /var/log/upgrade-bookworm.ttyrec
@@ -69,11 +69,11 @@ can log back in over a serial console or virtual terminal.
         ( puppet agent --test || true )&&
         apt-mark showhold &&
         dpkg --audit &&
-        : look for dkms packages and make sure they are relevant, if not, purge. &&
+        echo look for dkms packages and make sure they are relevant, if not, purge. &&
         ( dpkg -l '*dkms' || true ) &&
-        : look for leftover config files &&
+        echo look for leftover config files &&
         /home/anarcat/src/koumbit-scripts/vps/clean_conflicts &&
-        : run backups &&
+        echo run backups &&
         /home/anarcat/bin/backup-$(hostname) &&
         printf "End of Step 2\a\n"
 
@@ -81,7 +81,7 @@ can log back in over a serial console or virtual terminal.
 
         puppet agent --disable "running major upgrade" &&
         apt update && apt -y upgrade &&
-        : Check for pinned, on hold, packages, and possibly disable &&
+        echo Check for pinned, on hold, packages, and possibly disable &&
         rm -f /etc/apt/preferences /etc/apt/preferences.d/* &&
         rm -f /etc/apt/sources.list.d/backports.debian.org.list &&
         rm -f /etc/apt/sources.list.d/backports.list &&
@@ -93,14 +93,14 @@ can log back in over a serial console or virtual terminal.
         rm -f /etc/apt/sources.list.d/proposed-updates.list &&
         rm -f /etc/apt/sources.list.d/sid.list &&
         rm -f /etc/apt/sources.list.d/testing.list &&
-        : purge removed packages &&
+        echo purge removed packages &&
         apt purge $(dpkg -l | awk '/^rc/ { print $2 }') &&
         apt purge '?obsolete' &&
         apt autoremove -y --purge &&
-        : possibly clean up old kernels &&
+        echo possibly clean up old kernels &&
         dpkg -l 'linux-image-*' &&
-        : look for packages from backports, other suites or archives &&
-        : if possible, switch to official packages by disabling third-party repositories &&
+        echo look for packages from backports, other suites or archives &&
+        echo if possible, switch to official packages by disabling third-party repositories &&
         apt-forktracer &&
         printf "End of Step 3\a\n"
 
@@ -121,7 +121,7 @@ can log back in over a serial console or virtual terminal.
 
  5. Actual upgrade run:
 
-        : put server in maintenance &&
+        echo put server in maintenance &&
         sudo touch /etc/nologin &&
         env DEBIAN_FRONTEND=noninteractive APT_LISTCHANGES_FRONTEND=none APT_LISTBUGS_FRONTEND=none UCF_FORCE_CONFFOLD=y \
             apt full-upgrade -y -o Dpkg::Options::='--force-confdef' -o Dpkg::Options::='--force-confold' &&
@@ -135,7 +135,7 @@ can log back in over a serial console or virtual terminal.
         printf "Press enter to continue, Ctrl-C to abort." &&
         read -r _ &&
         (puppet agent -t || true) &&
-        : rm -f /etc/apt/apt.conf.d/50unattended-upgrades.dpkg-dist /etc/ca-certificates.conf.dpkg-old /etc/cron.daily/bsdmainutils.dpkg-remove /etc/default/prometheus-apache-exporter.dpkg-dist /etc/default/prometheus-node-exporter.dpkg-dist /etc/logrotate.d/apache2.dpkg-dist /etc/nagios/nrpe.cfg.dpkg-dist /etc/ssh/ssh_config.dpkg-dist /etc/ssh/sshd_config.ucf-dist /etc/unbound/unbound.conf.dpkg-dist &&
+        echo rm -f /etc/apt/apt.conf.d/50unattended-upgrades.dpkg-dist /etc/ca-certificates.conf.dpkg-old /etc/cron.daily/bsdmainutils.dpkg-remove /etc/default/prometheus-apache-exporter.dpkg-dist /etc/default/prometheus-node-exporter.dpkg-dist /etc/logrotate.d/apache2.dpkg-dist /etc/nagios/nrpe.cfg.dpkg-dist /etc/ssh/ssh_config.dpkg-dist /etc/ssh/sshd_config.ucf-dist /etc/unbound/unbound.conf.dpkg-dist &&
         printf "\a" &&
         /home/anarcat/src/koumbit-scripts/vps/clean_conflicts &&
         systemctl start apt-daily.timer &&
@@ -503,8 +503,8 @@ TODO: update actual procedure with the above.
 
  * [Official guide](https://www.debian.org/releases/bookworm/amd64/release-notes/ch-upgrading.en.html)
  * [Release notes](https://www.debian.org/releases/bookworm/amd64/release-notes/ch-whats-new.en.html)
- * [Koumbit guide](https://wiki.koumbit.net/BookwormUpgrade) (N/A, last checked 2023-06-05)
- * [DSA guide](https://dsa.debian.org/howto/upgrade-to-bullseye/) (N/A, last checked 2023-06-05)
+ * [Koumbit guide](https://wiki.koumbit.net/BookwormUpgrade) (checked 2024-11-27, changes ported to trixie procedure)
+ * [DSA guide](https://dsa.debian.org/howto/upgrade-to-bullseye/) (checked 2024-11-27, changes ported to trixie procedure)
  * [TPA guide][] (WIP, last checked 2023-06-05)
  * [Solution proposal to automate this](https://wiki.debian.org/AutomatedUpgrade)
 

minimal upgrade procedure
diff --git a/services/upgrades/trixie.md b/services/upgrades/trixie.md
index e47febd7..fa1d685d 100644
--- a/services/upgrades/trixie.md
+++ b/services/upgrades/trixie.md
@@ -65,7 +65,6 @@ can log back in over a serial console or virtual terminal.
         /home/anarcat/src/koumbit-scripts/vps/clean_conflicts &&
         : run backups &&
         /home/anarcat/bin/backup-$(hostname) &&
-        : make sure host is silenced in monitoring &&
         printf "End of Step 2\a\n"
 
  3. Perform any pending upgrade and clear out old pins:
@@ -96,7 +95,7 @@ can log back in over a serial console or virtual terminal.
         apt list "?narrow(?installed, ?not(?codename($(lsb_release -c -s | tail -1))))" &&
         printf "End of Step 3\a\n"
 
- 5. Check free space (see [this guide to free up space][]), disable
+ 4. Check free space (see [this guide to free up space][]), disable
     auto-upgrades, and download packages:
 
         systemctl stop apt-daily.timer &&
@@ -107,13 +106,21 @@ can log back in over a serial console or virtual terminal.
         apt -y -d upgrade &&
         apt -y -d dist-upgrade &&
         df -h &&
+        : make sure host is silenced in monitoring &&
         printf "End of Step 4\a\n"
 
 [this guide to free up space]: https://www.debian.org/releases/testing/release-notes/upgrading.en.html#make-sure-you-have-sufficient-space-for-the-upgrade
 
- 5. Actual upgrade run:
+ 5. Actual upgrade step.
+
+    Optional, minimal upgrade run (avoids new installs or removals):
+
+        sudo touch /etc/nologin &&
+        env DEBIAN_FRONTEND=noninteractive APT_LISTCHANGES_FRONTEND=none APT_LISTBUGS_FRONTEND=none UCF_FORCE_CONFFOLD=y \
+            apt upgrade --without-new-pkgs -y -o Dpkg::Options::='--force-confdef' -o Dpkg::Options::='--force-confold' &&
+
+    Full upgrade:
 
-        : put server in maintenance &&
         sudo touch /etc/nologin &&
         env DEBIAN_FRONTEND=noninteractive APT_LISTCHANGES_FRONTEND=none APT_LISTBUGS_FRONTEND=none UCF_FORCE_CONFFOLD=y \
             apt full-upgrade -y -o Dpkg::Options::='--force-confdef' -o Dpkg::Options::='--force-confold' &&

skip forktracer
diff --git a/services/upgrades/trixie.md b/services/upgrades/trixie.md
index ddeb576b..e47febd7 100644
--- a/services/upgrades/trixie.md
+++ b/services/upgrades/trixie.md
@@ -93,7 +93,7 @@ can log back in over a serial console or virtual terminal.
         dpkg -l 'linux-image-*' &&
         : look for packages from backports, other suites or archives &&
         : if possible, switch to official packages by disabling third-party repositories &&
-        apt-forktracer &&
+        apt list "?narrow(?installed, ?not(?codename($(lsb_release -c -s | tail -1))))" &&
         printf "End of Step 3\a\n"
 
  5. Check free space (see [this guide to free up space][]), disable

another trixie trick
diff --git a/blog/2024-08-15-why-trixie.md b/blog/2024-08-15-why-trixie.md
index a0e14638..0857a253 100644
--- a/blog/2024-08-15-why-trixie.md
+++ b/blog/2024-08-15-why-trixie.md
@@ -29,6 +29,7 @@ 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
+- [broot](https://dystroy.org/broot/): a TUI file manager with `ncdu` and `magit`-like features
 - [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)

sbuild unshare
diff --git a/software/debian-development.mdwn b/software/debian-development.mdwn
index 39278fbd..96f3e1a3 100644
--- a/software/debian-development.mdwn
+++ b/software/debian-development.mdwn
@@ -627,6 +627,50 @@ A few handy `qemu` related commands:
    it above.
 """]]
 
+### unshare configuration
+
+Everyone seems to be switching to unshare as a schroot backend,
+[including the official debian.org builders](https://lists.debian.org/debian-devel-announce/2024/11/msg00002.html). The [official sbuild
+instructions](https://wiki.debian.org/sbuild) also use unshare now, this is my take.
+
+ 1. install necessary packages
+ 
+        sudo apt install sbuild mmdebstrap uidmap
+
+ 2. create directory to store images
+
+        mkdir -p ~/.cache/sbuild
+
+    Note that jumped around quite a lot for me. It used to be in
+    `/srv/sbuild` for qemu, but this was bind-mounted to
+    `/home/sbuild`, which begs the question of why it can't just be in
+    `~/.cache` after all, although I have Puppet managing `/srv`.
+
+ 3. create an unstable image:
+ 
+        mmdebstrap --include=ca-certificates --skip=output/dev --variant=buildd unstable ~/.cache/sbuild/unstable-amd64.tar.zst https://deb.debian.org/debian
+
+    This install took 42 seconds in my experience.
+
+ 4. tweak `.sbuildrc`:
+ 
+        $chroot_mode = 'unshare';
+
+    Remove any `$piuparts_opts`, `$autopkgtest_virt_server_options`,
+    or `$autopkgtest_opts`
+
+The guide argues against running this, but you can update the tarballs
+with:
+
+    sbuild-update --chroot-mode=unshare --update --upgrade --dist-upgrade --autoremove oldstable stable unstable
+
+This takes 6 seconds in my tests, much faster than rebuilding from
+scratch.
+
+Note that we don't care about doing overlayfs or fancy copy-on-write
+stuff, the tarballs apparently take only two seconds to
+decompresss. See also [this discussion](https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=960950).
+
 ### Building with sbuild
 
 Now that a sbuild backend is setup, I can build packages in one of

mention monitoring
diff --git a/services/upgrades/trixie.md b/services/upgrades/trixie.md
index 84a10c06..ddeb576b 100644
--- a/services/upgrades/trixie.md
+++ b/services/upgrades/trixie.md
@@ -48,7 +48,7 @@ can log back in over a serial console or virtual terminal.
         sudo chmod 600 /var/log/upgrade-trixie.ttyrec &&
         sudo ttyrec -a -e screen /var/log/upgrade-trixie.ttyrec
 
- 2. Backups and checks:
+ 2. Backups, stop monitoring, and checks:
 
         ( 
           umask 0077 &&
@@ -65,6 +65,7 @@ can log back in over a serial console or virtual terminal.
         /home/anarcat/src/koumbit-scripts/vps/clean_conflicts &&
         : run backups &&
         /home/anarcat/bin/backup-$(hostname) &&
+        : make sure host is silenced in monitoring &&
         printf "End of Step 2\a\n"
 
  3. Perform any pending upgrade and clear out old pins:

fix links to release notes
diff --git a/services/upgrades/trixie.md b/services/upgrades/trixie.md
index b3ba5bd1..84a10c06 100644
--- a/services/upgrades/trixie.md
+++ b/services/upgrades/trixie.md
@@ -28,9 +28,8 @@ upgrade at more or less random times). Then those changes get applied
 after a reboot. And yes, that's even more dangerous.
 
 IMPORTANT: if you are doing this procedure over SSH (I had the
-privilege of having a console), you may want to [upgrade SSH first](https://www.debian.org/releases/trixie/amd64/release-notes/ch-information.en.html#ssh-not-available)
-as it has a longer downtime period, especially if you are on a flaky
-connection.
+privilege of having a console), you may want to upgrade SSH first,
+especially if you are on a flaky connection.
 
 Make sure you read the [conflicts resolution section below](#conflicts-resolution) for how
 to handle `clean_conflicts` output.
@@ -109,7 +108,7 @@ can log back in over a serial console or virtual terminal.
         df -h &&
         printf "End of Step 4\a\n"
 
-[this guide to free up space]: http://www.debian.org/releases/trixie/amd64/release-notes/ch-upgrading.en.html#sufficient-space
+[this guide to free up space]: https://www.debian.org/releases/testing/release-notes/upgrading.en.html#make-sure-you-have-sufficient-space-for-the-upgrade
 
  5. Actual upgrade run:
 
@@ -208,18 +207,18 @@ This table summarizes package version changes I find interesting.
 
 Note that this table may not be up to date with the current
 release. See the [official release
-notes](https://www.debian.org/releases/trixie/amd64/release-notes/ch-whats-new.en.html#newdistro)
+notes](https://www.debian.org/releases/testing/release-notes/whats-new.en.html#desktops-and-well-known-packages)
 for a more up to date list.
 
 ## Removed packages
 
 TODO
 
-See also the [noteworthy obsolete packages](https://www.debian.org/releases/trixie/amd64/release-notes/ch-information.en.html#noteworthy-obsolete-packages) list.
+See also the [noteworthy obsolete packages](https://www.debian.org/releases/testing/release-notes/issues.en.html#noteworthy-obsolete-packages) list.
 
 # Issues
 
-See also the official list of [known issues](https://www.debian.org/releases/trixie/amd64/release-notes/ch-information.en.html).
+See also the official list of [known issues](https://www.debian.org/releases/testing/release-notes/issues.en.html#known-severe-bugs).
 
 ## Pending
 
@@ -230,21 +229,24 @@ See also the official list of [known issues](https://www.debian.org/releases/tri
 ## Upgrade failures
 
 Instructions on errors during upgrades can be found in [the release
-notes troubleshooting section](https://www.debian.org/releases/trixie/amd64/release-notes/ch-upgrading.en.html#trouble).
+notes "possible issues" section](https://www.debian.org/releases/testing/release-notes/upgrading.en.html#possible-issues-during-upgrade).
 
 ## Reboot failures
 
 If there's any trouble during reboots, you should use some recovery
 system. The [release notes actually have good documentation on
-that](https://www.debian.org/releases/trixie/amd64/release-notes/ch-upgrading.en.html#recovery), on top of "use a live filesystem".
+that](https://www.debian.org/releases/testing/release-notes/upgrading.en.html#prepare-for-recovery), on top of "use a live filesystem".
 
 # References
 
- * [Official guide](https://www.debian.org/releases/trixie/amd64/release-notes/ch-upgrading.en.html)
- * [Release notes](https://www.debian.org/releases/trixie/amd64/release-notes/ch-whats-new.en.html)
+ * [Official guide](https://www.debian.org/releases/testing/release-notes/upgrading.en.html)
+ * [Release notes](https://www.debian.org/releases/testing/release-notes/whats-new.en.html)
  * [Koumbit guide](https://wiki.koumbit.net/TrixieUpgrade) (N/A, last checked 2024-11-27
  * [DSA guide](https://dsa.debian.org/howto/upgrade-to-trixie/) (N/A, last checked 2024-11-27)
  * [TPA guide][] (N/A, last checked 2024-11-27)
  * [Solution proposal to automate this](https://wiki.debian.org/AutomatedUpgrade)
 
 [TPA guide]: https://gitlab.torproject.org/tpo/tpa/team/-/wikis/howto/upgrades/trixie
+
+TODO: replace `releases/testing` with `releases/trixie` after the
+release notes are published.

start work on trixie upgrade procedure
diff --git a/services/upgrades/trixie.md b/services/upgrades/trixie.md
index 44d54f91..b3ba5bd1 100644
--- a/services/upgrades/trixie.md
+++ b/services/upgrades/trixie.md
@@ -1 +1,250 @@
-Before doing the "new in" stuff, look at blog/2024-08-15-why-trixie
+[[!meta title="Trixie upgrade"]]
+
+[[!toc levels=3]]
+
+This document contains my upgrade procedure, notable changes in the
+new version, issues I have stumbled upon (and possibly fixed), and
+troubleshooting instructions.
+
+It does not hope to replace the official documentation: it is a
+personal, living document that I have started keeping back when I
+upgraded to [[jessie]]. The other documents can be found in the parent
+[[upgrades]] page.
+
+# Procedure
+
+This procedure is designed to be applied, in batch, on multiple
+servers. Do NOT follow this procedure unless you are familiar with the
+command line and the Debian upgrade process. It has been crafted by
+and for experienced system administrators that have dozens if not
+hundreds of servers to upgrade.
+
+In particular, it runs almost completely unattended: configuration
+changes are not prompted during the upgrade, and just not applied at
+all, which *will* break services in many cases. I use a
+[clean-conflicts](https://gitlab.com/anarcat/koumbit-scripts/-/blob/master/vps/clean_conflicts) script to do this all in one shot to shorten the
+upgrade process (without it, configuration file changes stop the
+upgrade at more or less random times). Then those changes get applied
+after a reboot. And yes, that's even more dangerous.
+
+IMPORTANT: if you are doing this procedure over SSH (I had the
+privilege of having a console), you may want to [upgrade SSH first](https://www.debian.org/releases/trixie/amd64/release-notes/ch-information.en.html#ssh-not-available)
+as it has a longer downtime period, especially if you are on a flaky
+connection.
+
+Make sure you read the [conflicts resolution section below](#conflicts-resolution) for how
+to handle `clean_conflicts` output.
+
+This procedure *may* kill your graphical session, so make sure you
+can log back in over a serial console or virtual terminal.
+
+ 1. Preparation:
+
+        : reset to the default locale
+        export LC_ALL=C.UTF-8 &&
+        : install some dependencies
+        sudo apt install ttyrec screen debconf-utils deborphan &&
+        : create ttyrec file with adequate permissions &&
+        sudo touch /var/log/upgrade-trixie.ttyrec &&
+        sudo chmod 600 /var/log/upgrade-trixie.ttyrec &&
+        sudo ttyrec -a -e screen /var/log/upgrade-trixie.ttyrec
+
+ 2. Backups and checks:
+
+        ( 
+          umask 0077 &&
+          tar cfz /var/backups/pre-trixie-backup.tgz /etc /var/lib/dpkg /var/lib/apt/extended_states /var/cache/debconf $( [ -e /var/lib/aptitude/pkgstates ] && echo /var/lib/aptitude/pkgstates ) &&
+          dpkg --get-selections "*" > /var/backups/dpkg-selections-pre-trixie.txt &&
+          debconf-get-selections > /var/backups/debconf-selections-pre-trixie.txt
+        ) &&
+        ( puppet agent --test || true )&&
+        apt-mark showhold &&
+        dpkg --audit &&
+        : look for dkms packages and make sure they are relevant, if not, purge. &&
+        ( dpkg -l '*dkms' || true ) &&
+        : look for leftover config files &&
+        /home/anarcat/src/koumbit-scripts/vps/clean_conflicts &&
+        : run backups &&
+        /home/anarcat/bin/backup-$(hostname) &&
+        printf "End of Step 2\a\n"
+
+ 3. Perform any pending upgrade and clear out old pins:
+
+        puppet agent --disable "running major upgrade" &&
+        apt update && apt -y upgrade &&
+        : Check for pinned, on hold, packages, and possibly disable &&
+        rm -f /etc/apt/preferences /etc/apt/preferences.d/* &&
+        rm -f /etc/apt/sources.list.d/backports.debian.org.list &&
+        rm -f /etc/apt/sources.list.d/backports.list &&
+        rm -f /etc/apt/sources.list.d/*-backports.list &&
+        rm -f /etc/apt/sources.list.d/trixie.list &&
+        rm -f /etc/apt/sources.list.d/bookworm.list &&
+        rm -f /etc/apt/sources.list.d/bullseye.list &&
+        rm -f /etc/apt/sources.list.d/experimental.list &&
+        rm -f /etc/apt/sources.list.d/incoming.list &&
+        rm -f /etc/apt/sources.list.d/proposed-updates.list &&
+        rm -f /etc/apt/sources.list.d/sid.list &&
+        rm -f /etc/apt/sources.list.d/testing.list &&
+        : purge removed packages &&
+        apt purge $(dpkg -l | awk '/^rc/ { print $2 }') &&
+        apt purge '?obsolete' &&
+        apt autoremove -y --purge &&
+        : possibly clean up old kernels &&
+        dpkg -l 'linux-image-*' &&
+        : look for packages from backports, other suites or archives &&
+        : if possible, switch to official packages by disabling third-party repositories &&
+        apt-forktracer &&
+        printf "End of Step 3\a\n"
+
+ 5. Check free space (see [this guide to free up space][]), disable
+    auto-upgrades, and download packages:
+
+        systemctl stop apt-daily.timer &&
+        sed -i 's#bookworm-security#trixie-security#' $(ls /etc/apt/sources.list /etc/apt/sources.list.d/*) &&
+        sed -i 's/bookworm/trixie/g' $(ls /etc/apt/sources.list /etc/apt/sources.list.d/*) &&
+        apt update &&
+        apt -y -d full-upgrade &&
+        apt -y -d upgrade &&
+        apt -y -d dist-upgrade &&
+        df -h &&
+        printf "End of Step 4\a\n"
+
+[this guide to free up space]: http://www.debian.org/releases/trixie/amd64/release-notes/ch-upgrading.en.html#sufficient-space
+
+ 5. Actual upgrade run:
+
+        : put server in maintenance &&
+        sudo touch /etc/nologin &&
+        env DEBIAN_FRONTEND=noninteractive APT_LISTCHANGES_FRONTEND=none APT_LISTBUGS_FRONTEND=none UCF_FORCE_CONFFOLD=y \
+            apt full-upgrade -y -o Dpkg::Options::='--force-confdef' -o Dpkg::Options::='--force-confold' &&
+        printf "End of Step 5\a\n"
+
+ 6. Post-upgrade procedures:
+
+        apt-get update --allow-releaseinfo-change &&
+        puppet agent --enable &&
+        puppet agent -t --noop &&
+        printf "Press enter to continue, Ctrl-C to abort." &&
+        read -r _ &&
+        (puppet agent -t || true) &&
+        : rm -f /etc/apt/apt.conf.d/50unattended-upgrades.dpkg-dist /etc/ca-certificates.conf.dpkg-old /etc/cron.daily/bsdmainutils.dpkg-remove /etc/default/prometheus-apache-exporter.dpkg-dist /etc/default/prometheus-node-exporter.dpkg-dist /etc/logrotate.d/apache2.dpkg-dist /etc/nagios/nrpe.cfg.dpkg-dist /etc/ssh/ssh_config.dpkg-dist /etc/ssh/sshd_config.ucf-dist /etc/unbound/unbound.conf.dpkg-dist &&
+        printf "\a" &&
+        /home/anarcat/src/koumbit-scripts/vps/clean_conflicts &&
+        systemctl start apt-daily.timer &&
+        printf "End of Step 6\a\n" &&
+        shutdown -r +1 "rebooting to get rid of old kernel image..."
+
+ 7. Post-upgrade checks:
+
+        export LC_ALL=C.UTF-8 &&
+        sudo ttyrec -a -e screen /var/log/upgrade-trixie.ttyrec
+
+        apt-mark manual bind9-dnsutils puppet-agent
+        apt purge gcc-9-base gcc-10-base apt-forktracer
+        apt purge $(dpkg -l | awk '/^rc/ { print $2 }') # purge removed packages
+        apt autoremove -y --purge
+        apt purge $(deborphan --guess-dummy)
+        while deborphan -n | grep -q . ; do apt purge $(deborphan -n); done
+        apt autoremove -y --purge
+        apt clean
+        # review and purge older kernel if the new one boots properly
+        dpkg -l 'linux-image*'
+        # review packages that are not in the new distribution
+        apt purge '?obsolete'
+        apt list "?narrow(?installed, ?not(?codename($(lsb_release -c -s | tail -1))))" &&
+        printf "All procedures completed\a\n" &&
+
+## Conflicts resolution
+
+When the `clean_conflicts` script gets run, it asks you to check each
+configuration file that was modified locally but that the Debian
+package upgrade wants to overwrite. You need to make a decision on
+each file. This section aims to provide guidance on how to handle
+those prompts.
+
+Those config files should be manually checked on each host:
+
+         /etc/default/grub.dpkg-dist
+         /etc/initramfs-tools/initramfs.conf.dpkg-dist
+
+If other files come up, they should be added in the above decision
+list, or in an operation in step 2 or 7 of the above procedure, before
+the `clean_conflicts` call.
+
+Files that should be updated in Puppet are mentioned in the Issues
+section below as well.
+
+# Notable changes
+
+Here are some packages with notable version changes that I
+noticed.
+
+TODO: merge or point at blog/2024-08-15-why-trixie
+
+See also the [wiki page about trixie](https://wiki.debian.org/NewInTrixie) for another list.
+
+## New packages
+
+This is a curated list of packages that were introduced in
+trixie. There are actually *thousands* of new packages in the new
+Debian release, but this is a small selection of projects I found
+particularly interesting:
+
+TODO
+

(Diff truncated)
more framework links
diff --git a/hardware/laptop.mdwn b/hardware/laptop.mdwn
index 428eb6b7..f8adfb78 100644
--- a/hardware/laptop.mdwn
+++ b/hardware/laptop.mdwn
@@ -82,6 +82,7 @@ Review:
  * [Tom's hardware](https://www.tomshardware.com/news/amd-7040-framework-laptop-mainboard-transfer-performance-test-review), AMD - "Switching from one platform to the
    other was easy"
  * [Phoronix](https://www.phoronix.com/review/framework-13-amd/6), AMD - "fantastic choice for Linux users"
+ * [rtings](https://www.rtings.com/laptop/reviews/framework/laptop-13-2023)
 
 ### Framework 16
 
@@ -94,6 +95,7 @@ Reviews:
 
  * [Ars Technica](https://arstechnica.com/gadgets/2024/01/review-frameworks-laptop-16-is-unique-laudable-fascinating-and-flawed/): "unique, laudable, fascinating, and flawed"
  * [Upstream's review index](https://frame.work/ca/en/blog/framework-laptop-16-reviews-are-live)
+ * [ifixit teardown](https://www.youtube.com/watch?v=Y8uv8fajOrc) (10/10)
 
 ## GPD pocket
 
diff --git a/hardware/laptop/framework-12th-gen.md b/hardware/laptop/framework-12th-gen.md
index ad7683fb..6d7f2b7c 100644
--- a/hardware/laptop/framework-12th-gen.md
+++ b/hardware/laptop/framework-12th-gen.md
@@ -2097,6 +2097,13 @@ 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)
 
+### Card holders
+
+ * [travel case for 2 modules](https://community.frame.work/t/travel-expansion-card-holder-with-lid/49662)
+ * [flat case for 5 modules including ethernet](https://www.printables.com/model/548864-framework-expansion-card-holder)
+
+See also the [carrying case discussion](https://community.frame.work/t/expansion-card-carrying-case/5432).
+
 ## Upstream resources
 
  * [community forum](https://community.frame.work/), lots of information, much support, wow!

more sq stuff
diff --git a/blog/2024-08-15-why-trixie.md b/blog/2024-08-15-why-trixie.md
index 5ec0b8c1..a0e14638 100644
--- a/blog/2024-08-15-why-trixie.md
+++ b/blog/2024-08-15-why-trixie.md
@@ -38,7 +38,10 @@ interesting enough to list here.
 - [fyi](https://codeberg.org/dnkl/fyi): notify-send replacement
 - [git-subrepo](https://github.com/ingydotnet/git-subrepo): git-submodule replacement I am considering
 - [gpg-from-sq](https://packages.debian.org/unstable/gpg-from-sq): Sequoia (Rust!) wrapper for GnuPG, might be able
-  to replace everything but `gpg-agent`!
+  to replace everything but `gpg-agent`! currently at least missing
+  [send-keys](https://gitlab.com/sequoia-pgp/sequoia-chameleon-gnupg/-/issues/91), [card-status](https://gitlab.com/sequoia-pgp/sequoia-chameleon-gnupg/-/issues/100), [performance improvements on
+  key listings](https://gitlab.com/sequoia-pgp/sequoia-chameleon-gnupg/-/issues/83), and [quick-gen-key](https://gitlab.com/sequoia-pgp/sequoia-chameleon-gnupg/-/issues/82), but those can all be
+  accessed through the `gpg-from-gpg`, and all work in progress
 - [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

fix bookworm upgrade instructions, that apt syntax appears *after* the upgrade
diff --git a/services/upgrades/bookworm.md b/services/upgrades/bookworm.md
index 53a2accb..75b21a14 100644
--- a/services/upgrades/bookworm.md
+++ b/services/upgrades/bookworm.md
@@ -52,7 +52,7 @@ can log back in over a serial console or virtual terminal.
         : reset to the default locale
         export LC_ALL=C.UTF-8 &&
         : install some dependencies
-        sudo apt install ttyrec screen debconf-utils deborphan &&
+        sudo apt install ttyrec screen debconf-utils deborphan apt-forktracer &&
         : create ttyrec file with adequate permissions &&
         sudo touch /var/log/upgrade-bookworm.ttyrec &&
         sudo chmod 600 /var/log/upgrade-bookworm.ttyrec &&
@@ -101,8 +101,7 @@ can log back in over a serial console or virtual terminal.
         dpkg -l 'linux-image-*' &&
         : look for packages from backports, other suites or archives &&
         : if possible, switch to official packages by disabling third-party repositories &&
-        apt list '?narrow(?installed, ?not(?origin(Debian)))' &&
-        apt list "?narrow(?installed, ?not(?codename($(lsb_release -c -s | tail -1))))" &&
+        apt-forktracer &&
         printf "End of Step 3\a\n"
 
  5. Check free space (see [this guide to free up space][]), disable
@@ -149,7 +148,7 @@ can log back in over a serial console or virtual terminal.
         sudo ttyrec -a -e screen /var/log/upgrade-bookworm.ttyrec
 
         apt-mark manual bind9-dnsutils puppet-agent
-        apt purge gcc-9-base gcc-10-base
+        apt purge gcc-9-base gcc-10-base apt-forktracer
         apt purge $(dpkg -l | awk '/^rc/ { print $2 }') # purge removed packages
         apt autoremove -y --purge
         apt purge $(deborphan --guess-dummy)

more trixie treats
diff --git a/blog/2024-08-15-why-trixie.md b/blog/2024-08-15-why-trixie.md
index b912a355..5ec0b8c1 100644
--- a/blog/2024-08-15-why-trixie.md
+++ b/blog/2024-08-15-why-trixie.md
@@ -37,6 +37,8 @@ interesting enough to list here.
   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
+- [gpg-from-sq](https://packages.debian.org/unstable/gpg-from-sq): Sequoia (Rust!) wrapper for GnuPG, might be able
+  to replace everything but `gpg-agent`!
 - [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
@@ -56,6 +58,8 @@ interesting enough to list here.
 - [shoutidjc](https://idjc.sourceforge.io/index.html): streaming workstation, currently using [butt](https://tracker.debian.org/pkg/butt) but
   it doesn't support HTTPS correctly
 - [spytrap-adb](https://github.com/spytrap-org/spytrap-adb): cool spy gear
+- [syslog-summary](https://github.com/shtrom/syslog-summary): log summarizer, one of many of the kind, but
+  made by Lars, so it must be good
 - [trippy](https://github.com/fujiapple852/trippy): trippy network analysis tool, kind of an improved MTR
 - [yubikey-touch-detector](https://github.com/maximbaz/yubikey-touch-detector): notifications for when I need to touch
   my YubiKey

not a real doc
diff --git a/services/upgrades/trixie.md b/services/upgrades/trixie.md
new file mode 100644
index 00000000..44d54f91
--- /dev/null
+++ b/services/upgrades/trixie.md
@@ -0,0 +1 @@
+Before doing the "new in" stuff, look at blog/2024-08-15-why-trixie

weird mono issues
diff --git a/services/radio.mdwn b/services/radio.mdwn
index 7934696f..83c201a6 100644
--- a/services/radio.mdwn
+++ b/services/radio.mdwn
@@ -544,7 +544,13 @@ If I start using liquidsoap again, i'll setup [prometheus
 metrics](https://www.liquidsoap.info/doc-2.2.3/prometheus.html). For now I'm using butt, but it [doesn't support HTTPS](https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=1087129)
 either. At least it gives a nice user interface which shows the
 listener count. I configure it in "pipewire" mode and use raysession
-to dispatch sources.
+to dispatch sources. Butt also has this weird behavior that audio
+quality takes a huge drop whenever it's started: I lose all bass and
+things get pretty bad.
+
+In fact, it seems I have a bug in my pipewire setup where any time I
+plug the microphone into *any* part of the graph, my entire audio
+stack drops to mono.
 
 RTP streaming attempts
 ----------------------

moar trixie
diff --git a/blog/2024-08-15-why-trixie.md b/blog/2024-08-15-why-trixie.md
index c7261743..b912a355 100644
--- a/blog/2024-08-15-why-trixie.md
+++ b/blog/2024-08-15-why-trixie.md
@@ -46,6 +46,7 @@ interesting enough to list here.
   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
+- [memray](https://bloomberg.github.io/memray/): Python memory profiler
 - [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

mention swaysome
diff --git a/software/desktop/wayland.md b/software/desktop/wayland.md
index 3bacfb61..ff40898d 100644
--- a/software/desktop/wayland.md
+++ b/software/desktop/wayland.md
@@ -1536,6 +1536,11 @@ configurations I used to have in Xmonad or Awesome, see:
 [autotiling]: https://github.com/nwg-piotr/autotiling
 [swaymonad]: https://github.com/nicolasavru/swaymonad
 
+Inversely, some people find i3 is actually a *regression* on some
+things, namely the way multiple monitors are managed. I actually got
+used to this, but people missing the way [AwesomeWM](https://awesomewm.org/) did that
+should look at [swaysome](https://gitlab.com/hyask/swaysome).
+
 ## Display latency tweaks
 
 TODO: You can tweak the display latency in wlroots compositors with the

tried a bunch of icecast streaming software
diff --git a/blog/2024-08-15-why-trixie.md b/blog/2024-08-15-why-trixie.md
index d6ce6b19..c7261743 100644
--- a/blog/2024-08-15-why-trixie.md
+++ b/blog/2024-08-15-why-trixie.md
@@ -52,6 +52,8 @@ interesting enough to list here.
   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)
+- [shoutidjc](https://idjc.sourceforge.io/index.html): streaming workstation, currently using [butt](https://tracker.debian.org/pkg/butt) but
+  it doesn't support HTTPS correctly
 - [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
 - [yubikey-touch-detector](https://github.com/maximbaz/yubikey-touch-detector): notifications for when I need to touch
diff --git a/services/radio.mdwn b/services/radio.mdwn
index c020160a..7934696f 100644
--- a/services/radio.mdwn
+++ b/services/radio.mdwn
@@ -522,6 +522,30 @@ from stdin, and has the advantage of not requiring any config file.
 [idjc]: http://packages.debian.org/idjc
 [ezstream]: http://packages.debian.org/ezstream
 
+## Other tools
+
+I have tried streaming to my HTTPS icecast server with those tools,
+and it failed in various ways:
+
+- obs-studio: requires [serious hackery](https://epir.at/2018/03/08/obs-icecast-streaming/) to work over icecast,
+  strongly leaning towards video
+- darkice: crashed after streaming JACK for a while
+- ezstream: no support for a plain open JACK port, requires a playlist
+  or stdin
+- glassgui: didn't work, crashes
+- mixxx: can't work over HTTPS, steep learning curve
+- [muse](https://dyne.org/software/muse/): couldn't find debian package, seems dead
+- libretime: [not packaged](https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=888687)
+- [shoutidjc](https://idjc.sourceforge.io/index.html): promising, not in stable
+- liquidsoap itself, in theory, can stream from JACK to Icecast, but
+  the Debian build is [lacking HTTPS support](https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=1087134)
+
+If I start using liquidsoap again, i'll setup [prometheus
+metrics](https://www.liquidsoap.info/doc-2.2.3/prometheus.html). For now I'm using butt, but it [doesn't support HTTPS](https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=1087129)
+either. At least it gives a nice user interface which shows the
+listener count. I configure it in "pipewire" mode and use raysession
+to dispatch sources.
+
 RTP streaming attempts
 ----------------------
 

more containers details
diff --git a/software/desktop/firefox.mdwn b/software/desktop/firefox.mdwn
index 50555b24..302bc2ab 100644
--- a/software/desktop/firefox.mdwn
+++ b/software/desktop/firefox.mdwn
@@ -83,6 +83,17 @@ I am testing those and they might make it to the top list once I'm happy:
    [Hide/Show container more accessible (#755)](https://github.com/mozilla/multi-account-containers/issues/755), [Show only this
    container option (#1662)](https://github.com/mozilla/multi-account-containers/issues/1662), and [Some options are hard to access
    from the container list (#2089)](https://github.com/mozilla/multi-account-containers/issues/2089).
+   Containers are rendered mostly irrelevant by the "first party
+   isolation" features shipped with Firefox 87 (also known as [total
+   cookie protection](https://blog.mozilla.org/security/2021/02/23/total-cookie-protection/)), my primary use case for those containers is
+   to have tab groups (e.g. "work", "play") that i can hide easily. 
+   Containers are not actually required for *that*, although I do like
+   the "temporary container" feature to test sites..
+   Mozilla is working on native tab groups (alpha available with
+   `browser.tabs.groups.enabled` in nightly as of 2024-11-01, but
+   lacking lots of UX), which might make all of this moot as well.
+   Also tested [sideberry](https://addons.mozilla.org/en-US/firefox/addon/sidebery/) (overkill, no support for hiding tabs)
+   and [simple tab groups](https://addons.mozilla.org/en-US/firefox/addon/simple-tab-groups/) (all but simple, not as usable as tabarray)
  * [Greasemonkey](https://addons.mozilla.org/firefox/addon/greasemonkey/) (no deb, [source](https://github.com/greasemonkey/greasemonkey/)) - mostly for [this one hack
    for Nextcloud Calendar to show UTC times alongside local](https://gitlab.torproject.org/tpo/tpa/team/-/wikis/service/nextcloud#showing-utc-times-in-weekly-calendar-view)
  * [Link hints][] (no deb, [source](https://github.com/lydell/LinkHints/)) - nice and simple alternative

update status of my firefox extensions
diff --git a/software/desktop/firefox.mdwn b/software/desktop/firefox.mdwn
index 95bb4216..50555b24 100644
--- a/software/desktop/firefox.mdwn
+++ b/software/desktop/firefox.mdwn
@@ -65,28 +65,32 @@ I am testing those and they might make it to the top list once I'm happy:
  * [Auto Tab Discard](https://addons.mozilla.org/en-US/firefox/addon/auto-tab-discard/) (no deb, [source](https://github.com/rNeomy/auto-tab-discard)), like the old,
    [dead](https://github.com/greatsuspender/thegreatsuspender/issues/1263) Great Suspender. I was specifically looking for a feature
    to suspend ("discard") a specific time taking up too much CPU (but
-   not close it), [all tabs helper](https://addons.mozilla.org/en-US/firefox/addon/all-tabs-helper/) can also do this and manage
+   not close it). [all tabs helper](https://addons.mozilla.org/en-US/firefox/addon/all-tabs-helper/) can also do this and manage
    tabs as well, but seems to overlap with the tab menu, Auto Tab
-   Discard is also [recommended](https://support.mozilla.org/en-US/kb/add-on-badges)
+   Discard is also [recommended](https://support.mozilla.org/en-US/kb/add-on-badges). I previously used [Snooze
+   tabs](https://addons.mozilla.org/en-US/firefox/addon/snoozetabs/) (no deb, [source](https://github.com/bwinton/SnoozeTabs#readme)) for this as well.
  * [Clean URLs](https://docs.clearurls.xyz/) (no deb, [source](https://github.com/ClearURLs/Addon)) - remove garbage in URLs
- * [Dark Background and Light Text](https://addons.mozilla.org/en-GB/firefox/addon/dark-background-light-text/) (no deb, [source](https://github.com/m-khvoinitsky/dark-background-light-text-extension)) - Mozilla
-   also recommends [Midnight Lizard](https://addons.mozilla.org/addon/midnight-lizard-quantum/) for Android which I couldn't
-   figure out how to disable by default (and only enable on some
-   sites), and I also tested [dark reader](https://addons.mozilla.org/addon/darkreader/), which seem a bit
-   overkill.
- * [display anchors](https://addons.mozilla.org/en-US/firefox/addon/display-_anchors/) (no deb, [source](https://github.com/Rob--W/display-anchors))
+ * [Display anchors](https://addons.mozilla.org/en-US/firefox/addon/display-_anchors/) (no deb, [source](https://github.com/Rob--W/display-anchors))
+ * Firefox [Multi-account containers][] (no deb, [source](https://github.com/mozilla/multi-account-containers/)) - kind of
+   useful to separate work/private stuff and generally keep cross-site
+   surveillance under control. I was also using "Container Tab Groups"
+   (AKA "TabArray") but this had [data loss issues](https://github.com/menhera-org/TabArray/issues/457). That extension
+   was very useful to "hide a container", but the builtin extension
+   also provides that feature, just with a bunch more clicks. 
+   - builtin: extension button -> click ">" on the right container -> "Hide this
+   container"
+   - tabarray: right-click on tab and "hide this container" See
+   [Hide/Show container more accessible (#755)](https://github.com/mozilla/multi-account-containers/issues/755), [Show only this
+   container option (#1662)](https://github.com/mozilla/multi-account-containers/issues/1662), and [Some options are hard to access
+   from the container list (#2089)](https://github.com/mozilla/multi-account-containers/issues/2089).
  * [Greasemonkey](https://addons.mozilla.org/firefox/addon/greasemonkey/) (no deb, [source](https://github.com/greasemonkey/greasemonkey/)) - mostly for [this one hack
    for Nextcloud Calendar to show UTC times alongside local](https://gitlab.torproject.org/tpo/tpa/team/-/wikis/service/nextcloud#showing-utc-times-in-weekly-calendar-view)
- * [link hints][] (no deb, [source](https://github.com/lydell/LinkHints/)) - nice and simple alternative
+ * [Link hints][] (no deb, [source](https://github.com/lydell/LinkHints/)) - nice and simple alternative
    to full-scale keyboard driven interface like [tridactyl][], see the
    [keybindings](#keybindings) section below
  * [Popup window](https://addons.mozilla.org/en-US/firefox/addon/popup-window/) (no deb, [source](https://github.com/ettoolong/PopupWindow)) - open the link in a
    pop-up, useful to have an "app-like" window for a website (I use
    this for videoconferencing in a second tab)
- * [redirector](https://addons.mozilla.org/en-US/firefox/addon/redirector/) (no deb, [homepage](https://einaregilsson.com/redirector/), [source](https://github.com/einaregilsson/Redirector)) - mainly to
-   redirect to `old.reddit.com`, really ([alternative just for reddit](https://addons.mozilla.org/en-US/firefox/addon/old-reddit-redirect/)
- * [translations](https://addons.mozilla.org/en-GB/firefox/addon/firefox-translations/) (no deb, [source](https://github.com/mozilla/firefox-translations)) - native LLM translation,
-   [soon to be directly in Firefox](https://bugzilla.mozilla.org/show_bug.cgi?id=971044), [models also available](https://github.com/mozilla/firefox-translations-models/)
 
 [tridactyl]: https://github.com/tridactyl/tridactyl
 [builtin Firefox shortcuts]: https://support.mozilla.org/en-US/kb/keyboard-shortcuts-perform-firefox-tasks-quickly
@@ -100,11 +104,12 @@ the top list.
 Those were in testing for a while, then installed, but then I got
 tired of them...
 
- * Firefox [Multi-account containers][] (no deb, [source](https://github.com/mozilla/multi-account-containers/)) - kind of
-   useful, but also a bit strange: impossible to assign an existing
-   tab to a container, UI is very clikety (can't open a
-   container-specific tab from the keyboard), etc. need to click-hold
-   on the "+" tab button to choose container.
+ * [Dark Background and Light Text](https://addons.mozilla.org/en-GB/firefox/addon/dark-background-light-text/) (no deb, [source](https://github.com/m-khvoinitsky/dark-background-light-text-extension)) - Mozilla
+   also recommends [Midnight Lizard](https://addons.mozilla.org/addon/midnight-lizard-quantum/) for Android which I couldn't
+   figure out how to disable by default (and only enable on some
+   sites). I also tested [dark reader](https://addons.mozilla.org/addon/darkreader/), which seem a bit
+   overkill. Nowadays I just use `browser.in-content.dark-mode`, see
+   below.
  * [GhostText][] (no debian package, [#910289](https://bugs.debian.org/910289), [source](https://github.com/GhostText/GhostText))- "It's
    all text" replacement, allowed me to edit text areas with my
    favorite text editor (Emacs), worried about security implications
@@ -118,6 +123,8 @@ tired of them...
    rules](https://news.ycombinator.com/item?id=26120168)) - replaced by uBlock cosmetic rules
  * [Open in Browser](https://addons.mozilla.org/en-US/firefox/addon/open-in-browser/) (no deb, [source](https://github.com/Rob--W/open-in-browser)) - reopen the file in the
    browser instead of downloading - not really used that much
+ * [redirector](https://addons.mozilla.org/en-US/firefox/addon/redirector/) (no deb, [homepage](https://einaregilsson.com/redirector/), [source](https://github.com/einaregilsson/Redirector)) - mainly to
+   redirect to `old.reddit.com`, really ([alternative just for reddit](https://addons.mozilla.org/en-US/firefox/addon/old-reddit-redirect/)
  * [Switch container](https://addons.mozilla.org/en-US/firefox/addon/switch-container/) (no deb, [source](https://gitlab.com/mjanetmars/switch-container)) - fixes *one* of the
    issues with multi-account containers (ie. moving tab to another
    container)
@@ -171,9 +178,9 @@ hard to use or simply irrelevant.
    details. Nowadays, I just don't need any extension: I enable
    [HTTPS-only mode](https://blog.mozilla.org/security/2020/11/17/firefox-83-introduces-https-only-mode/) (AKA `dom.security.https_only_mode`). The EFF
    even [deprecated HTTPS everywhere](https://www.eff.org/https-everywhere/set-https-default-your-browser) because of this.
- * [Snooze tabs](https://addons.mozilla.org/en-US/firefox/addon/snoozetabs/) (no deb, [source](https://github.com/bwinton/SnoozeTabs#readme)) - another way to deal with
-   tab explosion. never really used it seriously, i have an agenda and
-   Wallabag for that kind of stuff
+ * [translations](https://addons.mozilla.org/en-GB/firefox/addon/firefox-translations/) (no deb, [source](https://github.com/mozilla/firefox-translations)) - native LLM translation,
+   now available natively through `browser.translations.enable`, now
+   default. [models also available](https://github.com/mozilla/firefox-translations-models/)
  * [U2F Support](https://addons.mozilla.org/en-US/firefox/addon/u2f-support-add-on/), is now unnecessary as it is builtin, starting
    with FF 57 (see [issue #59](https://github.com/prefiks/u2f4moz/issues/59#issuecomment-325768286)). the upstream issue
    was [#1065729](https://bugzilla.mozilla.org/show_bug.cgi?id=1065729)

more wayland packages
diff --git a/software/desktop/wayland.md b/software/desktop/wayland.md
index f165f75c..3bacfb61 100644
--- a/software/desktop/wayland.md
+++ b/software/desktop/wayland.md
@@ -1562,10 +1562,16 @@ Other alternatives:
  * [Avizo][], not in Debian, requires keybinding wrapper
  * [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)
+ * [wayout][], also provides a way to write stuff on the display, but
+   is too rudimentary for our needs
+ * [wob][], packaged in Debian, just a generic progress bar overlay,
+   requires [more elaborate wrappers](https://github.com/francma/wob/blob/729e5c68215547eb8939c4c1778f58cca36b2bc0/contrib/README.md)
 
 [Avizo]: https://github.com/misterdanb/avizo
 [SwayOSD]: https://github.com/ErikReider/SwayOSD
 [sway-nc]: https://github.com/ErikReider/SwayNotificationCenter
+[wob]: https://github.com/francma/wob
+[wayout]: https://git.sr.ht/~proycon/wayout
 
 # Debugging tricks
 

update mailman 3 status
diff --git a/services/mail.mdwn b/services/mail.mdwn
index 1730c6cf..2023e662 100644
--- a/services/mail.mdwn
+++ b/services/mail.mdwn
@@ -1438,6 +1438,10 @@ the complexity of this thing. Bravo!
 
 # Mailing lists
 
+NOTE: this is mostly moot. I have uninstalled Mailman 3 locally, but
+ended up reusing those docs to update the torproject.org mailman 2
+server instead, see [the TPA lists documentation instead](https://gitlab.torproject.org/tpo/tpa/team/-/wikis/service/lists).
+
 I naively thought I could [go old school and replace Facebook with
 email](https://blog.chaddickerson.com/2019/01/09/replacing-facebook/) (even though I actually never used Facebook). I figured,
 heck, mailing lists, I know that, I'll just install Mailman 3 in
@@ -1575,8 +1579,6 @@ Other issues:
 
  * code linting issues in Mailman core made my other MR fail ([MR #444](https://gitlab.com/mailman/mailman/merge_requests/444))
 
-## Remaining issues
-
  * no "invite" subscription mechanism ([mailman bug #510](https://gitlab.com/mailman/mailman/issues/510)) -
    workaround: [custom API script](https://gitlab.com/anarcat/scripts/blob/main/mm3-invite-user.py) to invite users seem to
    work. usage:
@@ -1584,10 +1586,14 @@ Other issues:
          export MAILMAN_PASSWORD=$(sed -n '/^admin_pass:/{s/.*: //;p}' mailman.cfg)
         mm3-invite-user.py test@lists.anarc.at anarcat@example.com
 
+   Update: [fixed in MR 678][] (3.3.2 and later)
+
  * confirmation mail subject is not translatable, subjects are not
    templatable ([mailman bug #541](https://gitlab.com/mailman/mailman/issues/541)). workaround: patch to make
    Mailman not send the email so we can do it ourselves ([mailman MR
    452](https://gitlab.com/mailman/mailman/merge_requests/452)))
+   
+   Update: [fixed in MR 678][] (3.3.2 and later)
 
  * translated french templates are missing ([mailman bug #540](https://gitlab.com/mailman/mailman/issues/540)) -
    workaround: add french templates as needed through the web GUI
@@ -1604,10 +1610,8 @@ Other issues:
    is `/usr/lib/python3/dist-packages/mailman/`. This means templates
    can be created on the filesystem for individual lists without going
    through the GUI. updates are shipped upstream in [MR #446](https://gitlab.com/mailman/mailman/merge_requests/446).
-
- * UI french translation is missing - workaround: partial translation
-   started, with `.pot` file but still missing compiling and shipping
-   the `.mo` file ([MR 453](https://gitlab.com/mailman/mailman/merge_requests/453))
+   
+   Update: fixed.
 
  * unicode templates gets mangled ([mailman bug #542](https://gitlab.com/mailman/mailman/issues/542)) -
    workaround: switch French to utf-8 ([MR #443](https://gitlab.com/mailman/mailman/merge_requests/443)), change default
@@ -1620,6 +1624,16 @@ Other issues:
         >>> m.preferred_language = 'fr'
         >>> commit()
 
+   Update: probably fixed?
+
+## Remaining issues
+
+ * UI french translation is missing - workaround: partial translation
+   started, with `.pot` file but still missing compiling and shipping
+   the `.mo` file ([MR 453](https://gitlab.com/mailman/mailman/merge_requests/453))
+
+[fixed in MR 678]: https://gitlab.com/mailman/mailman/-/merge_requests/678
+
 ## Tested
 
  * delivery

another trick in trixie
diff --git a/blog/2024-08-15-why-trixie.md b/blog/2024-08-15-why-trixie.md
index 9b382d3d..d6ce6b19 100644
--- a/blog/2024-08-15-why-trixie.md
+++ b/blog/2024-08-15-why-trixie.md
@@ -54,6 +54,8 @@ interesting enough to list here.
   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
+- [yubikey-touch-detector](https://github.com/maximbaz/yubikey-touch-detector): notifications for when I need to touch
+  my YubiKey
 
 # New packages I won't use
 

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:
 

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 .