diff options
| author | Franck Cuny <franck@fcuny.net> | 2026-01-02 12:06:12 -0800 |
|---|---|---|
| committer | Franck Cuny <franck@fcuny.net> | 2026-01-02 12:06:12 -0800 |
| commit | 9dadee200241480f3c20677bf6aea63126bb880f (patch) | |
| tree | 7757c2d7c8e2cf8bbd3fd17efbef58d5bd68b088 /home/programs/backups | |
| parent | initial setup for ollama (diff) | |
| download | infra-9dadee200241480f3c20677bf6aea63126bb880f.tar.gz | |
one last big shuffle
Diffstat (limited to 'home/programs/backups')
| -rw-r--r-- | home/programs/backups/restic.nix | 196 |
1 files changed, 0 insertions, 196 deletions
diff --git a/home/programs/backups/restic.nix b/home/programs/backups/restic.nix deleted file mode 100644 index a27270f..0000000 --- a/home/programs/backups/restic.nix +++ /dev/null @@ -1,196 +0,0 @@ -{ - config, - lib, - pkgs, - ... -}: -let - nasHost = "nas"; - repoPath = "/backups/workstation"; - - resticRepository = "sftp:${nasHost}:${repoPath}"; - - backupPaths = [ - "${config.home.homeDirectory}/Documents" - "${config.home.homeDirectory}/Pictures" - ]; - - excludeFile = "${config.home.homeDirectory}/.config/restic/exclude"; - includeFile = "${config.home.homeDirectory}/.config/restic/includes"; -in -{ - home.packages = with pkgs; [ restic ]; - - age.secrets.restic-password = { - file = ../../../secrets/restic-pw.age; - path = "${config.home.homeDirectory}/.config/restic/password"; - mode = "400"; - }; - - home.sessionVariables = { - RESTIC_REPOSITORY = resticRepository; - RESTIC_PASSWORD_FILE = config.age.secrets.restic-password.path; - }; - - home.file.".config/restic/includes" = { - text = lib.concatStringsSep "\n" backupPaths; - onChange = '' - echo "Restic backup paths updated" - ''; - }; - - home.file.".config/restic/exclude" = { - text = '' - # macOS specific - .DS_Store - .Trash - .Spotlight-V100 - .fseventsd - .TemporaryItems - .DocumentRevisions-V100 - .VolumeIcon.icns - .AppleDouble - .LSOverride - Library/Caches - Library/Logs - - # Development artifacts - **/node_modules - **/.venv - **/__pycache__ - **/*.pyc - **/venv - **/target # Rust - **/dist - **/build - **/.tox - **/.pytest_cache - **/.coverage - **/.mypy_cache - - # Large files that might not need backup - *.dmg - *.iso - *.pkg - - # Version control - **/.git/objects - **/.git/lfs - - # IDE - **/.idea - **/.vscode - *.swp - *~ - ''; - }; - - home.file.".local/bin/restic-now" = { - executable = true; - text = '' - #!/usr/bin/env bash - set -euo pipefail - - # Colors for output - RED='\033[0;31m' - GREEN='\033[0;32m' - YELLOW='\033[1;33m' - NC='\033[0m' # No Color - - echo -e "''${GREEN}Starting restic backup...''${NC}" - - # Check if repository exists, initialize if not - echo -e "''${YELLOW}Checking repository...''${NC}" - if ! ${pkgs.restic}/bin/restic cat config > /dev/null 2>&1; then - echo -e "''${YELLOW}Repository not found. Initializing...''${NC}" - ${pkgs.restic}/bin/restic init - fi - - # Run backup - echo -e "''${GREEN}Running backup...''${NC}" - ${pkgs.restic}/bin/restic backup \ - --compression max \ - --files-from="${includeFile}" \ - --exclude-file="${excludeFile}" \ - --verbose=1 \ - --host="$(hostname -s)" - - # Unlock in case of stale locks - echo -e "''${YELLOW}Checking for stale locks...''${NC}" - ${pkgs.restic}/bin/restic unlock || true - - # Prune old snapshots - echo -e "''${GREEN}Pruning old snapshots...''${NC}" - ${pkgs.restic}/bin/restic forget \ - --prune \ - --keep-daily=7 \ - --keep-weekly=4 \ - --keep-monthly=12 \ - --compression max \ - --verbose=1 - - # Check repository integrity (optional, can be slow) - echo -e "''${GREEN}Checking repository integrity...''${NC}" - ${pkgs.restic}/bin/restic check --read-data-subset=5% - - echo -e "''${GREEN}Backup completed successfully!''${NC}" - ''; - }; - - home.file.".local/bin/restic-status" = { - executable = true; - text = '' - #!/usr/bin/env bash - set -euo pipefail - - echo "Repository: $RESTIC_REPOSITORY" - echo "" - echo "=== Latest snapshots ===" - ${pkgs.restic}/bin/restic snapshots --latest 5 --compact - echo "" - echo "=== Repository stats ===" - ${pkgs.restic}/bin/restic stats - ''; - }; - - home.file.".local/bin/restic-mount" = { - executable = true; - text = '' - #!/usr/bin/env bash - set -euo pipefail - - MOUNT_POINT="''${1:-$HOME/mnt/restic}" - - if [ ! -d "$MOUNT_POINT" ]; then - echo "Creating mount point: $MOUNT_POINT" - mkdir -p "$MOUNT_POINT" - fi - - echo "Mounting restic repository at $MOUNT_POINT" - echo "Press Ctrl+C to unmount" - ${pkgs.restic}/bin/restic mount "$MOUNT_POINT" - ''; - }; - - home.file.".local/bin/restic-restore" = { - executable = true; - text = '' - #!/usr/bin/env bash - set -euo pipefail - - if [ $# -lt 1 ]; then - echo "Usage: $0 <snapshot-id> [target-directory]" - echo "" - echo "Available snapshots:" - ${pkgs.restic}/bin/restic snapshots --compact - exit 1 - fi - - SNAPSHOT="$1" - TARGET="''${2:-$HOME/restic-restore}" - - echo "Restoring snapshot $SNAPSHOT to $TARGET" - ${pkgs.restic}/bin/restic restore "$SNAPSHOT" --target "$TARGET" - ''; - }; -} |
