Just my blogroll - BlogFlock2025-09-18T18:03:35.106ZBlogFlockIrreal, Protesilaos Stavrou: News and Announcements, GamingOnLinux Latest Articles, BuzzMachine, Arialdo Martini, Justin Barclay, Emacs@ Dyerdwelling, The Emacs Cat, MacAdie Web Blog, Wilfred Hughes::Blog, Jeff Kreeftmeijer, Karthinks, Sacha Chua, Xah Lee, Philip KALUDERCIC, Bowmansarrow, Take on Rules, manuel uberti, Bicycle For Your Mind, LWN.net, Rock Paper Shotgun Latest Articles Feed, McSweeney’sReading Papers And Taking Notes With Org Roam - Irrealhttps://irreal.org/blog/?p=132792025-09-18T17:14:04.000Z<p>
Kiran Gopinathan has a very interesting video on <a href="https://www.reddit.com/r/emacs/comments/1niy3hk/how_i_read_papers_with_orgroam_zotero_emacs/">how she uses Emacs, Org-Roam, and Zotero to do her literature reviews</a>. If you aren’t familiar with the concept, <i>Literature Reviews</i> are the process of reading papers related to your current research topic. Typically there are a lot of papers and you have to take notes as you go along so that you can draw it all together for your own research and papers.
</p>
<p>
Her video serves as a real life example of a <a href="https://en.wikipedia.org/wiki/Zettelkasten">Zettelkasten</a> in action. A she reads a paper, she takes notes and, critically, links them to the other papers she’s read on the current topic. Her workflow involves storing the papers in <a href="https://www.zotero.org/">Zotero</a> and automatically updating her BibTeX file as new papers are introduced.
</p>
<p>
You can see Gopinathan’s method in action in her video. Things move along fairly rapidly and can difficult to follow so you have to beardown when watching it but it’s worth the effort. Even if you’re not an academic, it’s easy to see how the process could be useful for organizing your own data.
</p>
<p>
Although she doesn’t mention it in the video, her Org-Roam configuration is available online <a href="https://gist.github.com/kiranandcode/7216310a6b7989afb30f12f17f058123">in this Gist</a>. Take a look at it if you’re interested in her method. The video is 16 minutes, 6 seconds long so it should be fairly easy to fit into your day. On the other hand, you may want to watch it more than once to wring out all the information it contains.</p>
Tencent accuse Sony of trying "to fence off a well-trodden corner of popular culture" with their Horizon copyright lawsuit - Rock Paper Shotgun Latest Articles Feedhttps://www.rockpapershotgun.com/tencent-accuse-sony-of-trying-to-fence-off-a-well-trodden-corner-of-popular-culture-with-their-horizon-copyright-lawsuit2025-09-18T17:02:30.000Z<img src="https://assetsio.gnwcdn.com/Light-of-Motiram_mammoth-battle.jpg?width=1920&height=1920&fit=bounds&quality=70&format=jpg&auto=webp" /> <p>
This afternoon, a choice of two raging videogame lawsuits to report on. Firstly, a snippet from the on-going courtroom scrap between former Unknown Worlds executives and Krafton over the state of <a href="https://www.rockpapershotgun.com/games/subnautica-2">Subnautica 2</a>'s development, in which the former accuse the latter of changing their story about why the executives were fired.</p>
<p>I've decided not to write that one up because it feels like we are entering the realm of potshots over minutiae, rather than learning anything genuinely new about Subnautica 2 or its creators, but if you're interested, <a href="https://www.gamesindustry.biz/krafton-inc-versus-subnautica-2-former-lead-developers">GamesIndustry.biz has your back</a>. The parallel Tencent/Sony bust-up has the virtue of relative novelty. It gives me a whole <em>different</em> kind of headache. What's going on with this one, then?
</p> <p><a href="https://www.rockpapershotgun.com/tencent-accuse-sony-of-trying-to-fence-off-a-well-trodden-corner-of-popular-culture-with-their-horizon-copyright-lawsuit">Read more</a></p>NVIDIA are investing $5 billion in Intel to develop new chips together - GamingOnLinux Latest Articleshttps://www.gamingonlinux.com/2025/09/nvidia-are-investing-5-billion-in-intel-to-develop-new-chips-together/2025-09-18T16:48:55.000ZA huge announcement for the entire computing industry came today, with NVIDIA and Intel teaming up to make new chips for data centre and consumers too.<p><img src="https://www.gamingonlinux.com/uploads/articles/tagline_images/476494798id27621gol.jpg" alt />.</p><p>Read the full article on <a href="https://www.gamingonlinux.com/2025/09/nvidia-are-investing-5-billion-in-intel-to-develop-new-chips-together/">GamingOnLinux</a>.</p>Yes, Hollow Knight: Silksong has "some moments of steep difficulty" Team Cherry admit, but have you considered going for a pre-boss walk - Rock Paper Shotgun Latest Articles Feedhttps://www.rockpapershotgun.com/yes-hollow-knight-silksong-has-some-moments-of-steep-difficulty-team-cherry-admit-but-have-you-considered-going-for-a-pre-boss-walk2025-09-18T16:10:19.000Z<img src="https://assetsio.gnwcdn.com/hollow-knight-silksong-stardew-valley-creator-cameo-01.jpg?width=1920&height=1920&fit=bounds&quality=70&format=jpg&auto=webp" /> <p>Something <a href="https://www.rockpapershotgun.com/games/hollow-knight-silksong">Hollow Knight: Silksong</a>-related has happened <a href="https://www.rockpapershotgun.com/silksong-may-release-before-september-given-that-itll-be-publicly-playable-by-then">at an Australian museum again</a>. This time, rather than the game being confirmed for an appearance back when it was still infinitely mysterious and sans release date, it's Team Cherry devs addressing just how difficult their creation is, following plenty of post-release discourse on the subject.</p>
<p>This follows the <a href="https://www.rockpapershotgun.com/best-metroidvania-games">metroidvania</a>'s <a href="https://www.rockpapershotgun.com/hollow-knight-silksongs-first-patch-makes-some-early-bosses-slightly-easier-out-now-in-steam-and-gog-beta">first patch making a couple of its early bosses a bit easier</a> to tackle, amid debate as to whether it's just good and hard, or pushes into unnecessarily annoying slog territory via the likes of bench placement and hazards being able to deal out two masks of damage. As with every FromSoft game since time itself began with the release of <a href="https://www.rockpapershotgun.com/games/demons-souls">Demon's Souls</a>, where you stand on that bickering will likely depend on how prepared you are to spend hours battling one foe over and over again.</p>
<p><a href="https://www.rockpapershotgun.com/yes-hollow-knight-silksong-has-some-moments-of-steep-difficulty-team-cherry-admit-but-have-you-considered-going-for-a-pre-boss-walk">Read more</a></p>Dying Light: The Beast is out, dark, Steam Deck Verified - Rock Paper Shotgun Latest Articles Feedhttps://www.rockpapershotgun.com/dying-light-the-beast-is-out-dark-steam-deck-verified2025-09-18T16:01:06.000Z<img src="https://assetsio.gnwcdn.com/Dying-Light-2-The-Beast-night-zombie.jpeg?width=1920&height=1920&fit=bounds&quality=70&format=jpg&auto=webp" /> <p>Parkoury zombie bludgeoner <a href="https://www.rockpapershotgun.com/games/dying-light-the-beast">Dying Light: The Beast</a> has, literally just this minute, gone on sale, which means the review embargo curtain has lifted on RPS to reveal... an empty chair with an IOU stuck to it.</p>
<p>This one is my bad, rather than because of any cheeky <a href="https://www.rockpapershotgun.com/hollow-knight-silksong-is-out-now-on-steam-our-review-is-on-the-way">code</a> <a href="https://www.rockpapershotgun.com/borderlands-4-is-out-now-but-our-review-code-just-arrived-so-im-writing-about-this-silly-bicycle-game-instead">withholding</a>. I’d simply underestimated how many trillions of PC games were also out this week, and had to abandon my charge through The Beast to help keep the undermanned Treehouse on top of things elsewhere. Still, we’ll shortly be bringing you a full, likely much better appraisal from RPS veteran Dominic Tarason (thaaaaaanks Dominic), and in penance, I offer some initial impressions from my couple of hours with the game’s opening.</p>
<p><a href="https://www.rockpapershotgun.com/dying-light-the-beast-is-out-dark-steam-deck-verified">Read more</a></p>[$] Extending the time-slice-extension discussion - LWN.nethttps://lwn.net/Articles/1038235/2025-09-18T15:30:18.000ZTime-slice extension is a proposed scheduler feature that would allow a
user-space process to request to not be preempted for a short period while
it executes a critical section. It is an idea that has been circulating
for years, but efforts to implement it <a href="https://lwn.net/Articles/1009509/">became
more serious</a> in February of this year. The latest developer to make an
attempt at time-slice extension is Thomas Gleixner, who has posted <a
href="https://lwn.net/ml/all/20250908225709.144709889@linutronix.de">a new patch set</a>
with a reworked API. Chances are good that this implementation is close to
what will actually be adopted by the kernel.Modding-friendly arcade racer Formula Legends is out now - works well on Linux / Steam Deck - GamingOnLinux Latest Articleshttps://www.gamingonlinux.com/2025/09/modding-friendly-arcade-racer-formula-legends-is-out-now-works-well-on-linux-steam-deck/2025-09-18T15:04:31.000ZIf you have the need for speed but don't want to play one of the various full simulators, perhaps Formula Legends might be just the ticket you need.<p><img src="https://www.gamingonlinux.com/uploads/articles/tagline_images/2069841240id27620gol.jpg" alt />.</p><p>Read the full article on <a href="https://www.gamingonlinux.com/2025/09/modding-friendly-arcade-racer-formula-legends-is-out-now-works-well-on-linux-steam-deck/">GamingOnLinux</a>.</p>Rust 1.90.0 released - LWN.nethttps://lwn.net/Articles/1038649/2025-09-18T14:56:39.000Z<a href="https://blog.rust-lang.org/2025/09/18/Rust-1.90.0/">Version
1.90.0</a> of the Rust language has been released. Changes include
switching to the <a href="https://lld.llvm.org/">LLD linker</a> by default,
the addition of support for workspace publishing to <tt>cargo</tt>, and the
usual set of stabilized APIs.Endless Legend 2's early access launch is a triumph of asymmetrical 4X design, but I do wish it were even stranger - Rock Paper Shotgun Latest Articles Feedhttps://www.rockpapershotgun.com/endless-legend-2s-early-access-launch-is-a-triumph-of-asymmetrical-4x-design-but-i-do-wish-it-were-even-stranger2025-09-18T14:32:42.000Z<img src="https://assetsio.gnwcdn.com/1_UC7NZk1.png?width=1920&height=1920&fit=bounds&quality=70&format=jpg&auto=webp" /> <p>
As the ravening shitbeetles of the Edwinphage overran the coral fortifications of the neighbouring Aspect kingdom, filling the air with the moist crunch of mandible on polyp, it occurred to me that I don't feel as much like a horrible doomsday cockroach as I should. We'll circle back to that feeling. <a href="https://www.rockpapershotgun.com/games/endless-legend-2">Endless Legend 2</a> launches into early access on 22nd September, and I've now spent around 20 hours with it. I've <a href="https://www.rockpapershotgun.com/endless-legend-2-is-everything-i-love-about-2014s-best-4x-but-on-a-map-thats-constantly-changing">previously praised</a> its new/reborn factions and retreating ocean mechanic, and I plan to carry on praising, but there are definitely some more comprehensive issues I'd love Amplitude to address as this splendid scarab of a turn-based <a href="https://www.rockpapershotgun.com/the-best-strategy-games-on-pc">strategy</a> game rumbles toward 1.0.
</p> <p><a href="https://www.rockpapershotgun.com/endless-legend-2s-early-access-launch-is-a-triumph-of-asymmetrical-4x-design-but-i-do-wish-it-were-even-stranger">Read more</a></p>Security updates for Thursday - LWN.nethttps://lwn.net/Articles/1038638/2025-09-18T14:28:08.000ZSecurity updates have been issued by <b>AlmaLinux</b> (gnutls, mysql:8.4, opentelemetry-collector, and python-cryptography), <b>Debian</b> (nextcloud-desktop), <b>Fedora</b> (chromium, firefox, forgejo, gitleaks, kernel, kernel-headers, lemonldap-ng, perl-Cpanel-JSON-XS, and python-pip), <b>Red Hat</b> (firefox and libxml2), <b>Slackware</b> (expat and mozilla), <b>SUSE</b> (avahi, bluez, cups, curl, firefox-esr, gdk-pixbuf, gstreamer, java-1_8_0-ibm, krb5, net-tools, podman, raptor, sevctl, tkimg, ucode-intel, and vim), and <b>Ubuntu</b> (linux, linux-aws, linux-aws-hwe, linux-azure, linux-azure-4.15, linux-gcp,
linux-gcp-4.15, linux-hwe, linux-kvm, linux-oracle, linux-fips, linux-azure-fips, linux-gcp-fips, and linux-gcp-6.14, linux-oracle, linux-oracle-6.14).Bluefin LTS released - LWN.nethttps://lwn.net/Articles/1038584/2025-09-18T14:24:09.000Z<p>The Universal Blue project has announced the release of <a
href="https://docs.projectbluefin.io/blog/bluefin-lts-ga/">Bluefin LTS</a>,
an image-based distribution similar to <a
href="https://lwn.net/Articles/954059/">Bluefin</a> that uses
CentOS Stream 10 and EPEL instead of Fedora as its base:</p>
<blockquote class="bq">
<p>Bluefin LTS ships with Linux 6.12.0, which is the kernel for the
lifetime of release. An optional hwe branch with new kernels is
available, offering the same modern kernel you'll find in Bluefin and
Bluefin GTS. Both vanilla and HWE ISOs are available, and you can
always choose to switch back and forth after installation. [...]</p>
<p>Bluefin LTS provides a backported GNOME desktop so that you are not
left behind. This is an important thing for us. James has been
diligently working on GNOME backports with the upstream CentOS
community, and we feel bringing modern GNOME desktops to an LTS makes
sense.</p>
</blockquote>
<p></p>Alabaster Dawn from the devs of CrossCode has a demo out now - GamingOnLinux Latest Articleshttps://www.gamingonlinux.com/2025/09/alabaster-dawn-from-the-devs-of-crosscode-has-a-demo-out-now/2025-09-18T14:00:42.000ZRadical Fish Games known for the awesome CrossCode have just put a demo for their next action-RPG with Alabaster Dawn now available to test.<p><img src="https://www.gamingonlinux.com/uploads/articles/tagline_images/896544301id27619gol.jpg" alt />.</p><p>Read the full article on <a href="https://www.gamingonlinux.com/2025/09/alabaster-dawn-from-the-devs-of-crosscode-has-a-demo-out-now/">GamingOnLinux</a>.</p>Tails 7.0 released - LWN.nethttps://lwn.net/Articles/1038579/2025-09-18T13:52:28.000Z<p><a
href="https://blog.torproject.org/new-release-tails-7_0/">Version
7.0</a> of the <a href="https://tails.net/">Tails</a> portable
operating system has been released. This is the first version of Tails
based on Linux 6.12.43, <a
href="https://lwn.net/Articles/1033474/">Debian 13</a>
("trixie") and GNOME 48. It uses <tt>ztsd</tt> instead of
<tt>xz</tt> to compress the USB and ISO images to deliver a
faster start time on most computers. The release is dedicated to the <a
href="https://lwn.net/Articles/997775/">memory of Lunar</a>, "<q>a
traveling companion for Tails, a Tor volunteer, Free Software hacker,
and community organizer</q>":</p>
<blockquote class="bq">
<p>Lunar has always been by our side throughout Tails' history. From
the first baby steps of the project that eventually became Tails, to
the merge with Tor, he's provided sensible technical suggestions,
out-of-the-box product design ideas, outreach support, and caring
organizational advice.</p>
<p>Outside of Tor, Lunar worked on highly successful Free Software
projects such as the <a href="https://www.debian.org/">Debian</a> project, the Linux distribution on which
Tails is based, and the <a
href="https://reproducible-builds.org/">Reproducible Builds</a>
project, which helps us verify the <a href="https://tails.net/contribute/build/reproducible/">integrity of Tails releases</a>.</p>
</blockquote>
<p>See the <a
href="https://gitlab.tails.boum.org/tails/tails/-/blob/master/debian/changelog">changelog</a>
for a full list of fixes, upgraded applications, and removals. LWN <a
href="https://lwn.net/Articles/1029769/">covered</a> Tails
Project team leader intrigeri's <a href="https://debconf25.debconf.org/">DebConf25</a> talk in July.</p>Go catch some creatures with the Critter Chaos Humble Bundle - GamingOnLinux Latest Articleshttps://www.gamingonlinux.com/2025/09/go-catch-some-creatures-with-the-critter-chaos-humble-bundle/2025-09-18T13:47:15.000ZLove creature collecting games? You should check out the Critter Chaos Humble Bundle that's live now with another 8 great games.<p><img src="https://www.gamingonlinux.com/uploads/articles/tagline_images/2025424362id27618gol.jpg" alt />.</p><p>Read the full article on <a href="https://www.gamingonlinux.com/2025/09/go-catch-some-creatures-with-the-critter-chaos-humble-bundle/">GamingOnLinux</a>.</p>Dying Light: The Beast rated Steam Deck Verified ahead of release - GamingOnLinux Latest Articleshttps://www.gamingonlinux.com/2025/09/dying-light-the-beast-rated-steam-deck-verified-ahead-of-release/2025-09-18T13:29:28.000ZA few hours before Dying Light: The Beast releases today, Valve put up a green tick for it to be Steam Deck Verified and SteamOS Compatible.<p><img src="https://www.gamingonlinux.com/uploads/articles/tagline_images/1967010823id27617gol.jpg" alt />.</p><p>Read the full article on <a href="https://www.gamingonlinux.com/2025/09/dying-light-the-beast-rated-steam-deck-verified-ahead-of-release/">GamingOnLinux</a>.</p>Obscure Emacs package appreciation: backup-walker - Sacha Chuahttps://sachachua.com/blog/2025/09/obscure-emacs-package-appreciation-backup-walker/2025-09-18T13:19:03.000Z<p>
The <a href="https://www.emacswiki.org/emacs/Carnival">Emacs Carnival</a> theme for September is <a href="https://goritskov.com/posts/obscure_packages.html">obscure
packages</a>, which made me think of how the
<a href="https://github.com/lewang/backup-walker">backup-walker</a> package saved me from having to
write some code all over again. Something went
wrong when I was editing my config in Org Mode. I
probably accidentally deleted a subtree due to
over-enthusiastic speed commands. (… Maybe I
should make my <code>k</code> shortcut for
<a href="https://sachachua.com/dotemacs#org-mode-keyboard-shortcuts-speed-commands-org-mode-cutting-the-current-list-item-including-nested-lists-with-a-speed-command"><code>my-org-cut-subtree-or-list-item</code></a> only work in my
Inbox.org and news.org files.) Chunks of my
<a href="https://sachachua.com/dotemacs/index.html">literate Emacs configuration</a> were gone, including
the code that defined <a href="https://sachachua.com/dotemacs#my-org-insert-link-dwim"><code>my-org-insert-link-dwim</code></a>.
Before I noticed, I'd already exported my (now
slightly shorter) Emacs configuration file with
<code>org-babel-tangle</code> and restarted Emacs. I couldn't
recover the definition from memory using
<a href="https://sachachua.com/dotemacs#inserting-code"><code>symbol-function</code></a>. I couldn't use <a target="_blank" href="https://elpa.gnu.org/packages/vundo.html">vundo</a> to browse
the Emacs undo tree. As usual, I'd been neglecting
to commit my config changes to Git, so I couldn't
restore a previous version. Oops.
</p>
<p>
Well, not the first time I've needed to rewrite
code from scratch because of a brain hiccup. I
started to reimplement the function. Then I
remembered that I had other backups. I have a 2 TB
SSD in my laptop, and I had configured Emacs to
neatly save numbered backups in a separate
directory, keeping all the versions without
deleting any of the old ones.
</p>
<div class="org-src-container">
<pre class="src src-emacs-lisp"><code>(<span class="org-keyword">setq</span> backup-directory-alist <span class="org-highlight-quoted-quote">'</span>((<span class="org-string">"\\.env$"</span> . nil)
(<span class="org-string">"."</span> . <span class="org-string">"~/.config/emacs/backups"</span>)))
(<span class="org-keyword">with-eval-after-load</span> <span class="org-highlight-quoted-quote">'</span><span class="org-highlight-quoted-symbol">tramp</span>
(<span class="org-keyword">setq</span> tramp-backup-directory-alist nil))
(<span class="org-keyword">setq</span> delete-old-versions -1)
(<span class="org-keyword">setq</span> version-control t)
(<span class="org-keyword">setq</span> auto-save-file-name-transforms <span class="org-highlight-quoted-quote">'</span>((<span class="org-string">".*"</span> <span class="org-string">"~/.config/emacs/auto-save-list/"</span> t)))
</code></pre>
</div>
<p>
At the moment, there are about 12,633 files adding
up to 3 GB. Totally worth it for peace of
mind. I could probably use grep to search for the
function, but it wasn't easy to see what changed
between versions.
</p>
<p>
I had learned about backup-walker in the process
of writing about <a href="https://sachachua.com/blog/2025/06/thinking-about-time-travel-with-the-emacs-text-editor-and-org-mode/">Thinking about time travel with
the Emacs text editor, Org Mode, and backups</a>. So I
used <a href="https://github.com/lewang/backup-walker">backup-walker</a> to flip through my file's
numbered backups in much the same way that
git-timemachine lets you flip through Git versions
of a file. After <code>M-x backup-walker-start</code>, I
tapped <code>p</code> to go through the previous backups. The
diff it showed me made it easy to check with <code>C-s</code>
(<code>isearch-forward</code>) if this was the version I was
looking for. When I found the change, I pressed
RET to load the version with the function in it.
Once I found it, it was easy to restore that
section. I also restored a couple of other
sections that I'd accidentally deleted too, like
the custom <a href="https://sachachua.com/dotemacs#org-mode-publishing-plain-text">plain text publishing backend</a> I use to
export Emacs News with less punctuation. It took
maybe 5 minutes to figure this out. Hooray for
backup-walker!
</p>
<p>
Note that the backup-walker diff was the other way
around from what I expected. It goes "diff new
old" instead of "diff old new", so the green
regions marked with <code>+</code> indicate stuff that was
<b>removed</b> by the newer version (compared to the
one a little older than it) and the red regions
marked with <code>-</code> indicate stuff that was added.
This could be useful if you think backwards in
time, kind of like the <a href="https://www.gnu.org/software/emacs/manual/html_node/elisp/Antinews.html">Emacs Antinews</a> file, but my
mind doesn't quite work that way. I wanted it to
look like a regular diff, with the additions in
newer versions marked with <code>+</code>. Emacs being Emacs,
I changed it. Here's an example showing what it
looks like now:
</p>
<figure id="org31523df">
<img src="https://sachachua.com/blog/2025/09/obscure-emacs-package-appreciation-backup-walker/2025-09-17_13-46-12.png" alt="2025-09-17_13-46-12.png">
<figcaption><span class="figure-number">Figure 1: </span>backup-walker diffs going the direction I want them to: additions (+) marked in green, deletions (-) in red</figcaption>
</figure>
<p>
The following code makes it behave the way I
expect:
</p>
<div class="org-src-container">
<pre class="src src-emacs-lisp"><code>(<span class="org-keyword">defun</span> <span class="org-function-name">my-backup-walker-refresh</span> ()
(<span class="org-keyword">let*</span> ((index (cdr (assq <span class="org-builtin">:index</span> backup-walker-data-alist)))
(suffixes (cdr (assq <span class="org-builtin">:backup-suffix-list</span> backup-walker-data-alist)))
(prefix (cdr (assq <span class="org-builtin">:backup-prefix</span> backup-walker-data-alist)))
(right-file (concat prefix (nth index suffixes)))
(right-version (format <span class="org-string">"%i"</span> (backup-walker-get-version right-file)))
diff-buff left-file left-version)
(<span class="org-keyword">if</span> (eq index 0)
(<span class="org-keyword">setq</span> left-file (cdr (assq <span class="org-builtin">:original-file</span> backup-walker-data-alist))
left-version <span class="org-string">"orig"</span>)
(<span class="org-keyword">setq</span> left-file (concat prefix (nth (1- index) suffixes))
left-version (format <span class="org-string">"%i"</span> (backup-walker-get-version left-file))))
<span class="org-comment-delimiter">;; </span><span class="org-comment">we change this to go the other way here</span>
(<span class="org-keyword">setq</span> diff-buf (diff-no-select right-file left-file nil <span class="org-highlight-quoted-quote">'</span><span class="org-highlight-quoted-symbol">noasync</span>))
(<span class="org-keyword">setq</span> buffer-read-only nil)
(delete-region (point-min) (point-max))
(insert-buffer diff-buf)
(set-buffer-modified-p nil)
(<span class="org-keyword">setq</span> buffer-read-only t)
(force-mode-line-update)
(<span class="org-keyword">setq</span> header-line-format
(concat (format <span class="org-string">"{{ ~%s~ → ~%s~ }} "</span>
(propertize left-version <span class="org-highlight-quoted-quote">'</span><span class="org-highlight-quoted-symbol">face</span> <span class="org-highlight-quoted-quote">'</span><span class="org-highlight-quoted-symbol">font-lock-variable-name-face</span>)
(propertize right-version <span class="org-highlight-quoted-quote">'</span><span class="org-highlight-quoted-symbol">face</span> <span class="org-highlight-quoted-quote">'</span><span class="org-highlight-quoted-symbol">font-lock-variable-name-face</span>))
(<span class="org-keyword">if</span> (nth (1+ index) suffixes)
(concat (propertize <span class="org-string">"<p>"</span> <span class="org-highlight-quoted-quote">'</span><span class="org-highlight-quoted-symbol">face</span> <span class="org-highlight-quoted-quote">'</span><span class="org-highlight-quoted-symbol">italic</span>)
<span class="org-string">" ~"</span>
(propertize (int-to-string
(backup-walker-get-version (nth (1+ index) suffixes)))
<span class="org-highlight-quoted-quote">'</span><span class="org-highlight-quoted-symbol">face</span> <span class="org-highlight-quoted-quote">'</span><span class="org-highlight-quoted-symbol">font-lock-keyword-face</span>)
<span class="org-string">"~ "</span>)
<span class="org-string">""</span>)
(<span class="org-keyword">if</span> (eq index 0)
<span class="org-string">""</span>
(concat (propertize <span class="org-string">"<n>"</span> <span class="org-highlight-quoted-quote">'</span><span class="org-highlight-quoted-symbol">face</span> <span class="org-highlight-quoted-quote">'</span><span class="org-highlight-quoted-symbol">italic</span>)
<span class="org-string">" ~"</span>
(propertize (int-to-string (backup-walker-get-version (nth (1- index) suffixes)))
<span class="org-highlight-quoted-quote">'</span><span class="org-highlight-quoted-symbol">face</span> <span class="org-highlight-quoted-quote">'</span><span class="org-highlight-quoted-symbol">font-lock-keyword-face</span>)
<span class="org-string">"~ "</span>))
(propertize <span class="org-string">"<return>"</span> <span class="org-highlight-quoted-quote">'</span><span class="org-highlight-quoted-symbol">face</span> <span class="org-highlight-quoted-quote">'</span><span class="org-highlight-quoted-symbol">italic</span>)
<span class="org-string">" open ~"</span>
(propertize (propertize (int-to-string (backup-walker-get-version right-file))
<span class="org-highlight-quoted-quote">'</span><span class="org-highlight-quoted-symbol">face</span> <span class="org-highlight-quoted-quote">'</span><span class="org-highlight-quoted-symbol">font-lock-keyword-face</span>))
<span class="org-string">"~"</span>))
(kill-buffer diff-buf)))
(<span class="org-keyword">with-eval-after-load</span> <span class="org-highlight-quoted-quote">'</span><span class="org-highlight-quoted-symbol">backup-walker</span>
(advice-add <span class="org-highlight-quoted-quote">'</span><span class="org-highlight-quoted-symbol">backup-walker-refresh</span> <span class="org-builtin">:override</span> <span class="org-highlight-quoted-quote">#'</span><span class="org-highlight-quoted-symbol">my-backup-walker-refresh</span>))
</code></pre>
</div>
<p>
<code>backup-walker</code> is not actually a real package in
the sense of <code>M-x package-install</code>, but
fortunately, recent Emacs makes it easier to
install from a repository. I needed to
install it from
<a href="https://github.com/lewang/backup-walker">https://github.com/lewang/backup-walker</a>. It was
written so long ago that I needed to
<code>defalias</code> some functions that were removed in
Emacs 26.1. Here's the use-package snippet from my
configuration:
</p>
<div class="org-src-container">
<pre class="src src-emacs-lisp"><code>(<span class="org-keyword">use-package</span> backup-walker
<span class="org-builtin">:vc</span> (<span class="org-builtin">:url</span> <span class="org-string">"https://github.com/lewang/backup-walker"</span>)
<span class="org-builtin">:commands</span> backup-walker-start
<span class="org-builtin">:init</span>
(<span class="org-keyword">defalias</span> <span class="org-highlight-quoted-quote">'</span><span class="org-function-name">string-to-int</span> <span class="org-highlight-quoted-quote">'</span><span class="org-highlight-quoted-symbol">string-to-number</span>) <span class="org-comment-delimiter">; </span><span class="org-comment">removed in 26.1</span>
(<span class="org-keyword">defalias</span> <span class="org-highlight-quoted-quote">'</span><span class="org-function-name">display-buffer-other-window</span> <span class="org-highlight-quoted-quote">'</span><span class="org-highlight-quoted-symbol">display-buffer</span>))
</code></pre>
</div>
<p>
So there's an obscure package recommendation:
<a href="https://github.com/lewang/backup-walker">backup-walker</a>. It hasn't been updated for more
than a decade, and it's not even installable the
regular way, but it's still handy.
</p>
<p>
I can imagine all sorts of ways this workflow
could be even better. It might be nice to dust off
backup-walker off, switch out the obsolete
functions, add an option for the diff direction,
and maybe sort things out so that you can reverse
the diff, split hunks, and apply hunks to your
original file. And maybe a way to walk the backup
history for changes in a specific region? I
suppose someone could make a spiffy
<a href="https://github.com/magit/transient">Transient</a>-based user interface to modernize it.
But it's fine, it works. Maybe there's a more
modern equivalent, but I didn't see anything in a
quick search of <code>M-x list-packages</code> <code>/ N</code>
(<code>package-menu-filter-by-name-or-description</code>) for
"backup~, except maybe <a href="https://elpa.gnu.org/packages/vc-backup.html">vc-backup</a>. (The <a href="https://git.sr.ht/~pkal/vc-backup">original
repo</a> is missing, but you can read it via <a href="https://gitweb.git.savannah.gnu.org/gitweb/?p=emacs/elpa.git;a=blob_plain;f=vc-backup.el;hb=refs/heads/externals/vc-backup">ELPA's
copy</a>.) Is there a general-purpose VC equivalent to
git-timemachine? That might be useful.
</p>
<p>
I should really be saving things in proper version
control, but this was a good backup. That reminds
me: I should backup my backup backups. I had
initially excluded my <code>~/.config</code> directory from
<a href="https://www.borgbackup.org/">borgbackup</a> because of the extra bits and bobs that
I wouldn't need when restoring from backup (like
all the Emacs packages I'd just re-download). But
my file backups… Yeah, that's worth it. I
changed my <code>--exclude-from</code> to <code>--patterns-from</code>
and changing my <a href="https://manpages.debian.org/testing/borgbackup/borg-patterns.1.en.html">borg-patterns</a> file to look like
this:
</p>
<pre class="example" id="org1cb02d8">
+ /home/sacha/.config/emacs/backups
- /home/sacha/.config/*
# ... other rules
</pre>
<p>
May backup-walker save you from a future oops!</p>
<div class="note">This is part of my <a href="https://sachachua.com/dotemacs#backups">Emacs configuration.</a></div><div><a href="https://sachachua.com/blog/2025/09/obscure-emacs-package-appreciation-backup-walker/index.org">View org source for this post</a></div>
<p>You can <a href="https://social.sachachua.com/@sacha/statuses/01K5EHNVSHPHMAXFQPZYWJ1D1H" target="_blank" rel="noopener noreferrer">comment on Mastodon</a> or <a href="mailto:sacha@sachachua.com?subject=Comment%20on%20https%3A%2F%2Fsachachua.com%2Fblog%2F2025%2F09%2Fobscure-emacs-package-appreciation-backup-walker%2F&body=Name%20you%20want%20to%20be%20credited%20by%20(if%20any)%3A%20%0AMessage%3A%20%0ACan%20I%20share%20your%20comment%20so%20other%20people%20can%20learn%20from%20it%3F%20Yes%2FNo%0A">e-mail me at sacha@sachachua.com</a>.</p>Hack the system and cause chaos in the explosive top-down shooter DeadWire - GamingOnLinux Latest Articleshttps://www.gamingonlinux.com/2025/09/hack-the-system-and-cause-chaos-in-the-explosive-top-down-shooter-deadwire/2025-09-18T12:39:30.000ZA top-down shooter where anything from cars, cameras, electronics and even enemy implants can be rewired into chaotic chains of destruction in DeadWire.<p><img src="https://www.gamingonlinux.com/uploads/articles/tagline_images/727308615id27616gol.jpg" alt />.</p><p>Read the full article on <a href="https://www.gamingonlinux.com/2025/09/hack-the-system-and-cause-chaos-in-the-explosive-top-down-shooter-deadwire/">GamingOnLinux</a>.</p>Heroes of Might and Magic 2 project fheroes2 version 1.1.11 has been released - GamingOnLinux Latest Articleshttps://www.gamingonlinux.com/2025/09/heroes-of-might-and-magic-2-project-fheroes2-version-1-1-11-has-been-released/2025-09-18T12:13:23.000ZAnother fresh upgrade for the Heroes of Might and Magic 2 open source game engine fheroes2 with some major changes and bug fixes.<p><img src="https://www.gamingonlinux.com/uploads/articles/tagline_images/7989970id27615gol.jpg" alt />.</p><p>Read the full article on <a href="https://www.gamingonlinux.com/2025/09/heroes-of-might-and-magic-2-project-fheroes2-version-1-1-11-has-been-released/">GamingOnLinux</a>.</p>Guide: How to install Hollow Knight: Silksong mods on Linux, SteamOS and Steam Deck - GamingOnLinux Latest Articleshttps://www.gamingonlinux.com/guides/view/how-to-install-hollow-knight-silksong-mods-on-linux-steamos-and-steam-deck2025-09-18T12:08:36.000ZHollow Knight: Silksong can be a challenging game and it has an active modding scene - here's how to install Silksong mods on Linux, SteamOS and Steam Deck.<p><img src="https://www.gamingonlinux.com/uploads/articles/tagline_images/1321750977id27614gol.jpg" alt />.</p><p>Read the full article on <a href="https://www.gamingonlinux.com/guides/view/how-to-install-hollow-knight-silksong-mods-on-linux-steamos-and-steam-deck">GamingOnLinux</a>.</p>The Friendly Nazis Next Door - McSweeney’shttps://www.mcsweeneys.net/articles/the-friendly-nazis-next-door2025-09-18T12:00:00.000Z<p>Everyone says that this new crop of American Nazis is really mean, but I, a white journalist, went out to talk to them for this profile, and they were actually really nice. I mean, sure, when I first met George Nathan Bedford Forrest Wallace on his compound, I was a little thrown off by his swastika hat, confederate flag T-shirt, and his pants, which had a crossed-out trans flag on each leg. All those hateful clothes made him seem a little mean.</p> <p>But when he opened the front door of his bunker for me, and I thought, <i>See, this is a guy with manners. </i> He knows how to treat a lady.</i></p> <p>His wife, Davida “Duke” Wallace, was also very nice. She introduced me to her knitting circle, which was six pleasant middle-aged ladies who were just sitting down for sweet tea and cake before they went back to their latest group knitting project. I was a little nervous when I saw that they were knitting a very large blanket that said <small>GO <span class="caps">BACK</span> TO <span class="caps">AFRICA</span></small>, but they also served me a scrumptious lemon cake with raspberry filling. They even gave me the recipe.</p> <p>And their kids couldn’t have been sweeter. Eleven-year-old George Wallace Junior and eight-year-old Strom Thurmond Wallace taught me how to play a game in the woods with their bow and arrows. I admit I was a little freaked out when they told me the game was called “The Great Re-Replacement Theory,” but I don’t know anything about the woods, and they kept me from crashing into poison ivy. Yeah, their game was a little edgy, but would truly terrible people help a stranger out like that?</p> <p>Overall, I have to say that I really enjoyed my visit with the Wallaces. I obviously don’t share their worldview, but I think they’re friendly, kind folks who everyone in the country would be proud to call “neighbor.” Okay, maybe not everybody, but you know, most Americans.</p> <div class='break'>- - -</div><p style="text-align:center;"><i>Kashana Cauley’s latest novel is</i> <a href="https://bookshop.org/p/books/the-payback-kashana-cauley/eb775bc233bf5698?ean=9781668075531&next=t&next=t&affiliate=269"><strong>The Payback</strong></a>.</p>