- Update browser bookmarks from
vigil.heimdall.technettox-monitor.heimdall.technet; links in notifications sent before the switch stop working
Left named Vigil on purpose, because renaming them needs a hand-made change in a running service or an encrypted file:
Trilium's ETAPI token named Vigil; the sops key names (*_vigil_*, vigil_*) and
HOMEPAGE_VAR_VIGIL_PASS inside homepage_env; the .vigil-canary files, whose archived copies the restore checks compare;
the vigil-self monitor id and the Home Assistant automation and webhook ids, which key existing history.
- Confirm the
borg recreatefrom Odin againstssh://borg@ragnarok.technet/Storage/Backups/Laptop/Vortafinished and theborg compactafter it ran - Confirm the lock is gone from
/Storage/Backups/Laptop/Vortaon Ragnarok - Confirm Vorta's next "3. Ragnarok Backup" run succeeds
The rewrite is ragnarok-run.sh from /Storage/Files/Backups/Laptop/vorta-purge-2026-09-24/, which
was 31 of 77 archives in at 23:43 on 2026-09-24. Its log is
~/.claude/tmp/claude-1000/-Storage-Files-Projects-TechNet/18ceb386-f731-4c6c-8afa-e85f87c1f9ce/scratchpad/purge-ragnarok.log,
in a directory that had been deleted and was recreated by hand. A missing log directory
makes bash skip any command redirected into it, so check the log ends with compact exit 0 and
DONE. If the compact did not run, run borg compact on that repository by hand.
- Deploy Heimdall and Odin, so they get commit
ff6c7f04and X-Monitoree51de2or later - Expect the restore checks to fail until the next scheduled backup includes each canary file, then confirm every borg monitor's RESTORE CHECK card shows Passed
- Decide whether Vorta's "2. Heimdall Backup" profile is right to keep no weekly or monthly
archives;
x-monitor.nixwas changed to match it, so if Vorta is wrong, fix the profile and put backkeep_weekly = 2andkeep_monthly = 3on thebackup-laptop-heimdallmonitor
The canary files are /Storage/Services/.vigil-canary on Heimdall, and /Storage/System/.vigil-canary
and /Storage/Files/.vigil-canary on Odin. Heimdall's "Ragnarok" backup monitor stays failed until the
repair below is done.
- Run the repair below on Ragnarok
- Confirm Heimdall's next
borgmatic-check.servicerun finishes successfully - Delete
/Storage/Backups/Server/Borgmatic.pre-repair-20260924on Ragnarok
Heimdall's borgmatic-check.service has failed on every run since at least 2026-09-22, because of
one fault in Ragnarok's copy of the server repository (ssh://borg@ragnarok.technet/Storage/Backups/Server/Borgmatic).
The failing run on 2026-09-24 reported:
- The repository and data checks were clean: no segment problems, and all 181,966 chunks verified.
- The archive check found one missing file chunk in archive
backup-2026-08-20T01:53:42, inStorage/Services/Home-Assistant/config/backups/Automatic_backup_2026.8.1_2026-08-17_05.08_39003985.tar(bytes 146325898–147981586).
Heimdall's local copy (/Storage/Files/Backups/Server/Borgmatic) passed the same checks and is not
affected.
Run this on Ragnarok as the borg user, so the repository files stay owned by borg:
R=/Storage/Backups/Server/Borgmatic
sudo -u borg env BORG_PASSCOMMAND="cat /run/secrets/borg_repo_encryption_key" BORG_BASE_DIR=/var/lib/borg-check \
BORG_RELOCATED_REPO_ACCESS_IS_OK=yes BORG_CHECK_I_KNOW_WHAT_I_AM_DOING=YES sh -c "
borg with-lock --lock-wait 3600 $R cp -a --reflink=always $R $R.pre-repair-20260924 &&
borg check --repair --archives-only --lock-wait 3600 --info $R"The first step takes an instant copy of the repository on btrfs while holding borg's lock, so the repair can be rolled back. The second step repairs only the archive metadata, because the repository check was clean. The repair fills the missing chunk with zeros, so that one tar in that one archive stays damaged. Once the X-Monitor borg monitors are deployed, the "Ragnarok" backup monitor under Heimdall's Backups group shows the check result.
- Add LNXlink to Ragnarok, as a system service like Heimdall's
(
lnxlink.nix) - Add LNXlink to Thor, as a user service like Odin's
(
lnxlink.nix) - Give each host its own broker account in Heimdall's
broker.nix - Confirm both show up in Home Assistant through MQTT discovery
From a feature comparison of the two in August 2026. Nothing here is needed yet; it is the list to check before deciding LNXlink covers everything.
- Windows support; LNXlink runs on Linux only
- A native Home Assistant integration over its own API and WebSocket, with no MQTT broker
- A built-in MCP server, so an AI assistant can query and control the machine
- An Android companion app
- A tray app, a web client and a settings UI
- Display sensors: resolution and refresh rate of each monitor
- Looking up running processes by PID or name
- Power usage as a wattage sensor, for the whole system and the GPU
- GPU clock, fan speed, temperature and power sensors
- Hibernate, lock and log out as power actions
- Notifications with action buttons, images and sound
- Browsing media sources, not just controlling playback
- Move Pi-hole's state (
/Storage/Services/PiHole, including/etc/pihole) offdata-pool-Heimdall, or otherwise stop its writes waiting behind bulk writes there (pi-hole.nix) - Confirm Thor gets a DHCP lease and Odin resolves
.technetnames during a large Syncthing catch-up
On 2026-09-26 Syncthing on Heimdall was pulling 10.5 GB of the Projects folder, and the data pool,
a mirror with the SMR Toshiba MQ04, had I/O pressure near 90% with sync writes waiting 6-7s.
pihole-FTL sat in uninterruptible disk wait, so Thor's Wi-Fi associated but never got a lease and
Odin could not resolve names.
- Find why Thor's aw-server lost its device id twice, and fix what loses it
- Confirm the two deleted export folders do not come back from Thor's local sync folder
Thor exported under three device ids: 0e0fb438 on 2026-09-26, 34e53ad4 on 2026-09-29 and
1ddd78b2 on 2026-10-03. Each one is a fresh aw-server identity, so the persisted
~/.local/share/activitywatch (backed by /Storage/Apps/TechNet/ActivityWatch) is not surviving
something, whether a reboot or a reinstall. The first two exports were deleted from
/Storage/Files/ActivityWatch on 2026-10-04, after confirming Heimdall already holds their events.
Thor's sync job copies everything in ~/.local/share/activitywatch/sync to Heimdall, so if either
folder is still there, it will reappear in the share.
- Open the app's Sync Settings on ThorX and check its last and next sync times
- Confirm a newer export reaches
/Storage/Files/ActivityWatchand shows up on Heimdall
The Android app exported once: its folder in the share last changed on 2026-09-29, and its newest event is from 2026-09-30. It writes one level deeper than the other hosts, under a folder named after the device, which Heimdall's import reads through a second pull.
- Find why each pull re-adds copies of Thor's AFK events, and fix it or report it upstream
- Until then, remove the copies now and then by grouping each
-synced-from-bucket's events on timestamp, duration and data and deleting all but one through aw-server's API
On 2026-10-04 Heimdall's aw-watcher-afk_Thor-synced-from-Thor held 5,902 events of which 24 were
distinct, and Odin's AFK and Firefox buckets held smaller numbers of exact copies. After every copy
was deleted, two 5-minute pulls added 12 more to Thor's AFK bucket alone, from a single export that
was not changing because Thor was offline. Every other bucket stayed clean over those two pulls.
- Check whether Cinnamon runs a GeoClue agent for beatlink; GeoClue never answers
GetClientfor a user without one - Enable
services.geoclue2on Odin with anappConfigentry forbattletime-companion, the DesktopId the app asks under - Turn on "Use where this computer is" in the app's Settings and confirm it finds a place
Until then the app's weather uses a place chosen by name, which already works.
- Once
socket-ragnarokis back online, flash it from Heimdall with Device Builder's own ESPHome CLI (esphome run socket-ragnarok.yaml --device socket-ragnarok.technet, as theesphomeuser) - Confirm X-Monitor's "Ragnarok Socket" monitor and the "IoT Sensors" group it belongs to show online
It is the only device not flashed since .lan was folded into .technet. Home Assistant and X-Monitor
already reach it as socket-ragnarok.technet over WireGuard (10.100.100.18), so the flash only
updates the name the firmware reports. Until it is online, X-Monitor's "IoT Sensors" group stays failed.