change from mono-home-manager to full flake multi-system configuration
This commit is contained in:
68
home/backup.nix
Normal file
68
home/backup.nix
Normal file
@@ -0,0 +1,68 @@
|
||||
{ config, pkgs, lib, ... }:
|
||||
|
||||
let
|
||||
hostname = config.networking.hostName or (builtins.getEnv "HOSTNAME");
|
||||
backupTarget = "/mnt/backup/borg"; # Adjust this path to your remote or local backup repo
|
||||
backupRepo = "${backupTarget}/${hostname}";
|
||||
backupPaths = {
|
||||
"t440p" = [ "Documents" "Projects" ];
|
||||
"steamdeck" = [ ".config" ];
|
||||
"xaorus" = [ "Pictures" "Videos" ];
|
||||
};
|
||||
folders = builtins.map (dir: "${config.home.homeDirectory}/${dir}") (backupPaths.${hostname} or []);
|
||||
cfg = config.homeModules.backup;
|
||||
in
|
||||
|
||||
lib.mkIf cfg.enable {
|
||||
home.packages = with pkgs; [ borgbackup ];
|
||||
|
||||
systemd.user.services.borg-backup = {
|
||||
Unit = {
|
||||
Description = "Borg Backup for ${hostname}";
|
||||
Wants = [ "network-online.target" ];
|
||||
After = [ "network-online.target" ];
|
||||
};
|
||||
|
||||
Service = {
|
||||
Type = "oneshot";
|
||||
ExecStart = ''
|
||||
${pkgs.borgbackup}/bin/borg create \
|
||||
--verbose \
|
||||
--filter AME \
|
||||
--list \
|
||||
--stats \
|
||||
--show-rc \
|
||||
--compression lz20 \
|
||||
${backupRepo}::"{now:%Y-%m-%d_%H-%M}" \
|
||||
${builtins.concatStringsSep " \\\n " folders} \
|
||||
--exclude ${config.home.homeDirectory}/.cache \
|
||||
--exclude ${config.home.homeDirectory}/Downloads \
|
||||
--exclude ${config.home.homeDirectory}/node_modules \
|
||||
--exclude '*/.git' \
|
||||
--exclude '*/venv' \
|
||||
--exclude '*/target'
|
||||
'';
|
||||
ExecStopPost = ''
|
||||
${pkgs.borgbackup}/bin/borg prune -v --list ${backupRepo} \
|
||||
--keep-daily=7 \
|
||||
--keep-weekly=4 \
|
||||
--keep-monthly=3
|
||||
'';
|
||||
};
|
||||
|
||||
Install = {
|
||||
WantedBy = [ "default.target" ];
|
||||
};
|
||||
};
|
||||
|
||||
# Optional: allow the backup location to be automounted
|
||||
xdg.userDirs.extraConfig = {
|
||||
XDG_BACKUP_DIR = "${backupTarget}";
|
||||
};
|
||||
|
||||
# Optional: set environment variable to simplify CLI usage
|
||||
home.sessionVariables = {
|
||||
BORG_REPO = backupRepo;
|
||||
BORG_PASSPHRASE = ""; # or use environment.d or a secrets mechanism
|
||||
};
|
||||
}
|
||||
Reference in New Issue
Block a user