mirror of
https://github.com/tomasriveral/nixos.git
synced 2026-08-12 02:28:37 +02:00
backup: created script for backuping git repos
This commit is contained in:
@@ -28,6 +28,7 @@
|
|||||||
disk
|
disk
|
||||||
disk-laptop
|
disk-laptop
|
||||||
fonts
|
fonts
|
||||||
|
gitBackup
|
||||||
hardware-configuration-laptop
|
hardware-configuration-laptop
|
||||||
hardwareUtils-laptop
|
hardwareUtils-laptop
|
||||||
hyprland
|
hyprland
|
||||||
|
|||||||
@@ -0,0 +1,102 @@
|
|||||||
|
{self, ...}: {
|
||||||
|
flake.nixosModules.gitBackup = {pkgs, ...}: {
|
||||||
|
environment.systemPackages = [
|
||||||
|
self.packages.${pkgs.system}.custom-gitBackup
|
||||||
|
];
|
||||||
|
|
||||||
|
systemd.user.services.custom-gitBackup = {
|
||||||
|
description = "Backup selected git repos";
|
||||||
|
|
||||||
|
serviceConfig = {
|
||||||
|
Type = "oneshot";
|
||||||
|
|
||||||
|
ExecStart = "/run/current-system/sw/bin/custom-gitBackup";
|
||||||
|
|
||||||
|
TimeoutStartSec = "45min";
|
||||||
|
TimeoutStopSec = "10min";
|
||||||
|
|
||||||
|
RemainAfterExit = true;
|
||||||
|
|
||||||
|
Nice = 10;
|
||||||
|
IOSchedulingClass = "best-effort";
|
||||||
|
IOSchedulingPriority = 7;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
# Systemd USER timer
|
||||||
|
systemd.user.timers.custom-gitBackup = {
|
||||||
|
wantedBy = ["timers.target"];
|
||||||
|
|
||||||
|
timerConfig = {
|
||||||
|
OnCalendar = "Thu *-*-* 12:00:00";
|
||||||
|
|
||||||
|
Persistent = true; # if it happens during shutted down
|
||||||
|
|
||||||
|
RandomizedDelaySec = "20min";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
};
|
||||||
|
perSystem = {pkgs, ...}: {
|
||||||
|
packages.custom-gitBackup = pkgs.writeShellApplication {
|
||||||
|
name = "custom-gitBackup";
|
||||||
|
runtimeInputs = with pkgs; [
|
||||||
|
rsync
|
||||||
|
matrix-commander-rs
|
||||||
|
libnotify
|
||||||
|
self.packages.${pkgs.system}.custom-checkKdrive
|
||||||
|
];
|
||||||
|
text = ''
|
||||||
|
# checks if kdrive is available
|
||||||
|
custom-checkKdrive
|
||||||
|
|
||||||
|
REPOS=(
|
||||||
|
"https://github.com/tomasriveral/nixos.git"
|
||||||
|
"https://github.com/tomasriveral/notewrapper.git"
|
||||||
|
"https://github.com/tomasriveral/fractal-cli.git"
|
||||||
|
"https://github.com/tomasriveral/boids.git"
|
||||||
|
)
|
||||||
|
|
||||||
|
LOCAL_BACKUP_DIR="$HOME/.gitBackups"
|
||||||
|
CLOUD_DIR="$HOME/kdrive/Code/gitBackups"
|
||||||
|
|
||||||
|
# Create backup directories if they don't exist
|
||||||
|
mkdir -p "$LOCAL_BACKUP_DIR"
|
||||||
|
mkdir -p "$CLOUD_DIR"
|
||||||
|
|
||||||
|
notify_error() {
|
||||||
|
local message="$1"
|
||||||
|
notify-send "Git Backup Failed" "$message"
|
||||||
|
matrix-commander-rs --verbose -m "Git Backup Failed: $message <br><a href=\"https://matrix.to/#/@notificationbot_0000:matrix.org\">@notificationbot_0000</a>" \
|
||||||
|
--html \
|
||||||
|
-r "\!7j-78_02dHROeLj4Ns8F12eo4IiZGv4zNsQ_1-WlyIU"
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
for REPO in "''${REPOS[@]}"; do
|
||||||
|
# Extract repo name (without .git)
|
||||||
|
REPO_NAME=$(basename "$REPO" .git)
|
||||||
|
LOCAL_REPO_PATH="$LOCAL_BACKUP_DIR/$REPO_NAME.git"
|
||||||
|
|
||||||
|
if [ ! -d "$LOCAL_REPO_PATH" ]; then
|
||||||
|
# Clone mirror if it doesn't exist
|
||||||
|
echo "Cloning $REPO..."
|
||||||
|
git clone --mirror "$REPO" "$LOCAL_REPO_PATH" || { notify_error "Failed to clone $REPO"; continue; }
|
||||||
|
else
|
||||||
|
# Update existing mirror
|
||||||
|
echo "Updating $REPO..."
|
||||||
|
cd "$LOCAL_REPO_PATH" || { notify_error "Cannot enter $LOCAL_REPO_PATH"; continue; }
|
||||||
|
git remote update || { notify_error "Failed to update $REPO"; continue; }
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Rsync to cloud directory (only changes, preserve permissions)
|
||||||
|
echo "Syncing $REPO_NAME to cloud..."
|
||||||
|
rsync -a --delete "$LOCAL_REPO_PATH/" "$CLOUD_DIR/$REPO_NAME/" || { notify_error "Failed to rsync $REPO_NAME"; continue; }
|
||||||
|
|
||||||
|
done
|
||||||
|
|
||||||
|
echo "All backups completed."
|
||||||
|
'';
|
||||||
|
};
|
||||||
|
};
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user