feat: add Nebula-only Trilium web clients #98
No reviewers
Labels
No labels
host:electra
host:fleet
host:lyra
host:vega
host:vega
phase:cutover
phase:deploy
phase:mcp
phase:module
phase:packaging
phase:prep
phase:validation
project:attic-postgres-lyra-rollout
project:auto-update-reliability
project:declarative-purity-cleanup
project:external-review
project:host-facts-refactor
project:lyra-nixos-deploy
project:lyra-service-stack-migration
project:nebula-mesh-network
project:security-hardening
project:service-stack-migration
project:vega-sillytavern-cutover
service:auto-update
service:mem0
service:sillytavern
No milestone
No assignees
1 participant
Notifications
Due date
No due date set.
Dependencies
No dependencies set
Reference
nimmo/nixos-config!98
Loading…
Reference in a new issue
No description provided.
Delete branch "trilium-web-nebula-sync"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Summary
trilium-webNixOS module for Nebula-onlyservices.trilium-serverelectra,lena,vega, andlyraall get a local Trilium web clienthttps://notes.nimmog.ukand support first-run bootstrap from the SOPS-backedtrilium/sync-passwordValidation
nix flake checkjust testonelectraelectraRemaining Live Evidence
lena,vega,lyra) still need rollout/verification as appropriateRefs #97
Automated code review
Reviewed commit:
90515dfac1cd41b7417242b4e079763479ac9a54Verdict: Ready to merge
No blocking or important findings were retained, and deterministic checks passed. Suggestions remain advisory.
Overall assessment
The PR introduces a NixOS module for Nebula-only Trilium web clients, integrates it into the AI desktop profile, adds SOPS-backed first-run bootstrap secrets, and updates documentation. Static analysis confirms correct assertion guards and service ordering. Two operational suggestions remain regarding firewall interface naming and bootstrap retry behavior.
Blocking findings
None.
Important findings
None.
Suggestions
Nebula firewall interface name must match system configuration exactly (modules/services/trilium-web.nix:145; high confidence)
networking.firewall.interfaces."nebula.mesh".allowedTCPPorts = [ cfg.port ];
Impact: If the actual Nebula overlay interface is named differently (e.g., 'nebula' or a custom alias), this firewall rule will be silently ignored, potentially exposing the service to unintended networks.
Suggested fix: Verify the exact interface name via
ip linkor Nebula's configuration and update the string literal accordingly.Bootstrap service retry behavior on persistent failure (modules/services/trilium-web.nix:108; medium confidence)
for _ in $(seq 1 30); do
if status_json="$(${pkgs.curl}/bin/curl --fail --silent --show-error "$api_base/api/setup/status")"; then
break
fi
sleep 1;
done
Impact: If the remote sync server remains unreachable during bootstrap, the oneshot service will exhaust its 30-second window and fail on each subsequent boot until connectivity is restored, generating repeated log noise.
Suggested fix: Consider adding a systemd ConditionPathExists=!/var/lib/trilium/.trilium/config.json or similar marker to skip execution entirely after a successful bootstrap, though the current API-based .isInitialized check mitigates re-runs once initialized.
Tests and validation
Questions
Review limitations
nix flake checkor validate SOPS decryption/runtime behavior.Diff coverage
README.md: reviewed — included in a context-limited batchmodules/common/base.nix: reviewed — included in a context-limited batchmodules/profiles/ai-desktop.nix: reviewed — included in a context-limited batchmodules/services/trilium-web.nix: reviewed — included in a context-limited batchsecrets/README.md: reviewed — included in a context-limited batchsecrets/trilium.yaml: reviewed — included in a context-limited batchReview metadata