Without this, we see this error:
Feb 22 18:07:12 bert navidrome[230133]: time="2026-02-22T18:07:12-06:00" level=info msg="Watcher started for library" absoluteLibPath=/mnt/bigbird_public/media/music libraryID=1 name="Music Library" path=/mnt/bigbird_public/media/music
Feb 22 18:07:13 bert navidrome[230156]: panic: permission denied [recovered, repanicked]
Feb 22 18:07:13 bert navidrome[230156]: goroutine 1037 [running]:
Feb 22 18:07:13 bert navidrome[230156]: go.senan.xyz/taglib.init.OnceValues[...].func3.1.1()
Feb 22 18:07:13 bert navidrome[230156]: sync/oncefunc.go:98 +0x75
Feb 22 18:07:13 bert navidrome[230156]: panic({0x13a32e0?, 0x3649328?})
Feb 22 18:07:13 bert navidrome[230156]: runtime/panic.go:783 +0x132
Feb 22 18:07:13 bert navidrome[230156]: github.com/tetratelabs/wazero/internal/engine/wazevo.mmapExecutable({0xc00030f000, 0xaf0, 0xc000737800?})
Feb 22 18:07:13 bert navidrome[230156]: github.com/tetratelabs/wazero@v1.11.0/internal/engine/wazevo/engine.go:881 +0xb4
[…]
Feb 22 18:07:13 bert navidrome[230133]: time="2026-02-22T18:07:13-06:00" level=error msg="Scan failed" error="failed to read status from scanner: /nix/store/622zip549ggami2mslhabm80sfsjlrxd-navidrome-0.60.0/bin/.navidrome-wrapped scan --nobanner --subprocess --configfile /nix/store/dxsk74a7b92vkv5mwaaihqcrlqmhlnq0-navidrome.json --datafolder . --cachefolder cache exited with non-zero status code: exit status 2"
Feb 22 18:49:32 bert navidrome[230133]: time="2026-02-22T18:49:32-06:00" level=info msg="Stopping HTTP server"
mkForce is required to avoid a conflicting definition error:
error: The option `systemd.services.navidrome.serviceConfig.MemoryDenyWriteExecute' has conflicting definition values:
- In `/nix/store/jyqf4h6n1wm7kg3qrc5njvvgzkn1m2j5-nixos-25.11/nixos/nixos/modules/services/audio/navidrome.nix': true
- In `/root/config/services/navidrome.nix': false
Use `lib.mkForce value` or `lib.mkDefault value` to change the priority on any of these definitions.
For next time this patch breaks, if I don't feel like fixing it, a good
approximation for this use case is sorting by modified time, e.g.:
handle /downloads/Newsletters/* {
file_server {
browse ${./caddy-browse-template.html} {
sort time desc
}
}
}
The mount path had changed months back:
commit ccc8708a6b
Author: Chandler Swift <chandler@chandlerswift.com>
Date: Tue Jan 14 23:31:14 2025 -0600
bert: Rename mount so systemd doesn't escape hyphen
diff --git a/bert/configuration.nix b/bert/configuration.nix
index 61f79b1..4072b87 100644
--- a/bert/configuration.nix
+++ b/bert/configuration.nix
@@ -40 +40 @@
- fileSystems."/mnt/bigbird-public" = {
+ fileSystems."/mnt/bigbird_public" = {
but I missed this use, so `/sheets` was 404ing.