Commit graph

113 commits

Author SHA1 Message Date
4389500ccc
fix(borgbackup): add network dependencies to onsite services
Fixes DNS resolution failures when persistent timers trigger backups
after system wake.

The NixOS borgbackup module adds network-online.target dependencies
to the timer when persistentTimer=true, but systemd timers don't pass
their dependencies to the services they trigger. This caused onsite
backups to start before the network was ready, resulting in "Could not
resolve hostname" errors.

Adding after/wants network-online.target directly to the service
ensures the backup waits for network availability regardless of how
it's triggered (timer or offsite's Wants= dependency).

Example failure (Oct 11, 07:43):
- Backup started at 07:43:43 (persistent timer caught up)
- DNS lookup failed: "Could not resolve hostname viridian.home.arpa"
- WiFi connected at 07:43:47 (4 seconds too late)

Applied to both fuchsia and viridian onsite backups.
2025-10-11 08:06:00 +08:00
a276fdf53a
fix(borgbackup): prevent race conditions and improve reliability
Fixes multiple issues with borgbackup service coordination:

1. Race condition between onsite/offsite backups
   - Set Type=oneshot to ensure services wait for completion
   - Added Wants= dependency to trigger onsite when offsite runs
   - Prevents snapshot path collision at /btrfs-subvolumes

2. Network unavailability after sleep/wake
   - Added persistentTimer=true to onsite backups
   - NixOS module now auto-adds network-online.target dependencies
   - Fixes DNS resolution failures for SSH repos

3. Data loss risk from missed backups
   - Persistent timers ensure backups run on wake if missed
   - Protects work done before sleep from being unbackored

4. Duplicate onsite runs at midnight
   - Removed 15-minute stagger (00:15 -> 00:00)
   - Systemd deduplicates services in same transaction
   - Onsite now runs once, not twice

Applied to both fuchsia and viridian for consistency.
2025-10-09 11:30:00 +08:00
15b4851e8e
refactor(borgbackup): implement shared staging with defense-in-depth
Major improvements to borgbackup configuration for better reliability and
maintainability:

**Shared staging directory:**
- Use single /btrfs-subvolumes directory (was /subvolumes-{onsite,offsite})
- Eliminates redundant path suffixes in archive structure
- Archive paths now semantic: /btrfs-subvolumes/srv-forgejo clearly indicates
  BTRFS subvolume content without redundant backup job metadata

**Defense-in-depth protection:**
- Layer 1: Systemd ordering - offsite waits for onsite completion
- Layer 2: Self-healing preHook - auto-cleanup orphaned snapshots from
  crashes/power loss
- Prevents cascading failures from race conditions or abnormal terminations

**Code quality improvements:**
- Extract subvolume lists to reduce duplication (DRY principle)
- Add /* sh */ syntax hints for proper editor highlighting
- Silent operation for consistency with existing hooks
- Improved readability with clearer comments and formatting
- All lines ≤ 100 characters

**Timing:**
- Offsite: *-*-* 00:15:00 (daily at 12:15 AM, waits for onsite)
- Onsite: hourly (unchanged)
2025-10-08 18:46:50 +08:00
37924375a2
refactor(borgbackup): backup from /persist paths instead of bind mounts
Update backup paths to use actual persistent storage locations (/persist/*) rather than bind-mounted paths, making it clear where data truly resides and simplifying restore operations.
2025-10-08 15:58:23 +08:00
26c08000a0
refactor(borgbackup): use visible directories with semantic subvolume names
Changes staging directories from hidden to visible and aligns backup paths with actual BTRFS subvolume naming conventions for better clarity when browsing archives.
2025-10-08 15:53:15 +08:00
6dc89a2097
feat(borgbackup): include Library directory in backup paths
Add ~/Library to both onsite and offsite backup configurations to preserve application state, preferences, and support files across system restores.
2025-10-08 10:14:13 +08:00
359d01c407
fix(borgbackup): enable persistent timers for offsite backups
Adds persistentTimer=true to both fuchsia and viridian offsite backup configurations to ensure backups run on next boot if the system was asleep at the scheduled time. Without this, daily backups would be skipped entirely until the next scheduled run.
2025-10-08 08:04:57 +08:00
8874c88fbc
fix(ssh): enable key-based root login and use FQDNs for system services
Fixes backup system authentication and hostname resolution issues.

Changes:
- Change PermitRootLogin from "no" to "prohibit-password" in global SSH config
  (allows key-based root login for host-to-host backups while blocking passwords)
- Update fuchsia onsite backup to use viridian.home.arpa FQDN instead of shortname
- Update SSH knownHosts to use FQDNs (fuchsia.home.arpa, viridian.home.arpa)
  (system-level config uses FQDNs, user shortcuts remain in home-manager)

This enables the complete 3-2-1 backup strategy with automated backups working
correctly between fuchsia and viridian, and fuchsia to BorgBase.
2025-10-07 23:11:31 +08:00
85dc419349
refactor(ssh): decentralize SSH configuration to per-host services
Restructures SSH trust relationships from global to host-specific configuration
for better locality of concern and principle of least privilege.

Changes:
- Collapse nixos/common/global/ssh/ back to ssh.nix (single-file module)
- Move internal host trust (fuchsia/viridian) to per-host services/ssh/
- Split BorgBase known hosts by repository (li9kg944 for fuchsia, r7ag7x1w for viridian)
- Add viridian SSH server config to accept backup connections from fuchsia
- Add fuchsia borgbackup passphrase for offsite backups
- Configure viridian to create /srv/borg-repo/fuchsia for remote backups

This enables the 3-2-1 backup strategy with fuchsia backing up to both viridian
(onsite) and BorgBase (offsite) with proper SSH authentication.
2025-10-07 22:33:20 +08:00
acab920858
WIP: SSH configuration restructure
Backup of SSH reorganization changes for future reference.
2025-10-07 20:58:09 +08:00
a6fa8866ac
feat(fuchsia): implement backup strategy with explicit home paths
Add snapper and borgbackup for fuchsia home directory backups:

Snapper Configuration:
- Hourly snapshots of /home/sajenim
- Retention: 24 hourly, 7 daily, 4 weekly, 12 monthly
- Stored in nested .snapshots subvolume

Borgbackup Onsite:
- Backup to viridian over SSH (local network)
- Target: ssh://viridian/srv/borg-repo/fuchsia
- Hourly backups, unencrypted, deduplicated
- Same retention as snapper

Borgbackup Offsite:
- Backup to borgbase (internet)
- Target: li9kg944@li9kg944.repo.borgbase.com:repo
- Daily backups, encrypted (repokey-blake2), deduplicated
- Retention: 7 daily, 4 weekly, 12 monthly

Explicit Home Paths (valuable user data only):
- Documents, Pictures, Videos, Music, Downloads, Academics, Notes
- Dotfiles: .ssh, .gnupg

System Persist Data:
- SSH host keys, machine-id, nixos state
- Bluetooth, NetworkManager configurations

Intentionally Excluded:
- .config (managed declaratively via home-manager)
- .repositories (cloneable from GitHub)
- .cache and build artifacts

Treats viridian as central backup server, maintaining 3-2-1 strategy
(3 copies, 2 locations, 1 offsite).

chore(viridian): remove unused inputs parameter from borgbackup offsite
2025-10-07 19:14:11 +08:00
e5d1ba38d4
remove ollama service from fuchsia host
- Remove ollama service configuration and dependencies
- Clean up traefik routing for ollama web interface
- Comment out traefik service examples for clarity
2025-09-29 18:30:59 +08:00
9c07f33ff8
we no longer use aider but lets keep this 2025-09-28 12:05:55 +08:00
f8e8c02a69
update context length 2025-09-27 21:29:15 +08:00
969075a5de
refactor traefik + add open-webui service 2025-09-27 10:16:18 +08:00
2f545a818f
update configuration of our ollama service 2025-09-26 23:28:15 +08:00
d414ff36ce
refactor 2025-09-26 18:07:05 +08:00
1b857236ee
reduce time to keep garbage 2025-09-26 18:06:08 +08:00
bce8012209
chore: add all 2025-09-01 01:48:47 +08:00
cf0916ca4b
setup pipewire 2025-09-01 01:47:59 +08:00
f38067ab02
chore: update available models 2025-08-07 21:43:26 +08:00
34ed155ae3
update available models 2025-07-23 08:06:28 +08:00
3110f787af
install cups 2025-07-06 23:46:38 +08:00
ed9a836d2d
refactor 2025-06-06 18:35:13 +08:00
fc61369b89
install qmk 2025-05-12 09:58:53 +08:00
c38f58067a
opt in unfree 2025-04-30 12:18:32 +08:00
06c181c610
feat: add LLM models 2025-03-14 21:43:26 +08:00
abacbb57d7
chore: fix pinentry 2025-03-14 21:41:17 +08:00
e6b6325ba6
chore: refactor 2025-03-08 14:18:46 +08:00
f06011e890
chore: refactor 2025-03-08 12:02:30 +08:00
8ae33e9f76
feat: thunar file manager + gtk theme 2025-03-08 09:09:45 +08:00
0ace52a053
chore: fix grammar 2025-03-08 09:05:49 +08:00
0dd76b4b25
unstable lts kernel + increase configuration limit 2025-03-07 21:02:52 +08:00
9ff256061a
chore: refactor 2025-02-26 00:23:03 +08:00
fe95e44a07
feat: add support for flatpak in NixOS configuration
Added the necessary configurations and dependencies to enable Flatpak in the Fuchsia module.
This includes enabling the xdg portal for default settings and adding the flatpak service.
2025-02-23 18:26:58 +08:00
55114d871c
update amdgpu-clocks 2025-02-16 09:36:06 +08:00
9d447646b7
remove flatpaks 2025-02-16 09:34:00 +08:00
3419c7b139
fix script 2024-12-27 21:16:56 +08:00
93f49e3227
install android rules 2024-12-21 21:56:57 +08:00
a93435fede
install ollama 2024-12-21 21:56:12 +08:00
d348fb8032
setup scanner 2024-11-30 21:38:35 +08:00
1ecf47b006
migrate to 24.11 2024-11-22 07:17:23 +08:00
0423359e16
remove samba shares 2024-09-30 21:00:01 +08:00
7203fc1ed9
refactor 2024-09-20 20:24:55 +08:00
2fce9fd507
fix: lw5xl install process, add: HP Deskjet 2800 2024-09-02 21:28:55 +08:00
69eff28b09
Update voltage 2024-08-30 22:15:09 +08:00
ff455eeab5
Setup DYMO LabelWriter 5XL 2024-08-30 22:03:59 +08:00
6704bab226
limit garbage collection and boot configurations 2024-08-30 21:59:52 +08:00
71639ed7ef
update: viridian+fuchsia configuration 2024-08-11 16:15:30 +08:00
802e1c5289
update: amdgpu-clocks 2024-08-11 08:08:11 +08:00