diff --git a/system-backup.sh b/system-backup.sh new file mode 100755 index 0000000..be1125c --- /dev/null +++ b/system-backup.sh @@ -0,0 +1,74 @@ +#!/bin/bash + +set -e + +PKGLIST="pkglist.txt" +SYSTEMD_SYSTEM="systemd_enabled.txt" +SYSTEMD_USER="systemd_user_enabled.txt" + +show_help() { + echo "Usage: $0 [OPTION]" + echo "" + echo "Options:" + echo " -b, --backup Create backup files of packages and systemd units" + echo " -r, --restore Restore packages and systemd units from backup files" + echo " -h, --help Show this help message" +} + +backup() { + echo "Creating package list..." + paru -Qqe > "$PKGLIST" + echo "Created $PKGLIST" + + echo "Creating system unit list..." + systemctl list-unit-files --state=enabled --no-pager | awk '{print $1}' > "$SYSTEMD_SYSTEM" + echo "Created $SYSTEMD_SYSTEM" + + echo "Creating user unit list..." + systemctl --user list-unit-files --state=enabled --no-pager | awk '{print $1}' > "$SYSTEMD_USER" + echo "Created $SYSTEMD_USER" + + echo "Backup complete." +} + +restore() { + if [[ ! -f "$PKGLIST" ]]; then + echo "Error: $PKGLIST not found" + exit 1 + fi + + echo "Installing packages..." + paru -S --needed - < "$PKGLIST" + + if [[ -f "$SYSTEMD_SYSTEM" ]]; then + echo "Enabling system units..." + while read unit; do + sudo systemctl enable "$unit" 2>/dev/null || echo "Skipping $unit" + done < "$SYSTEMD_SYSTEM" + fi + + if [[ -f "$SYSTEMD_USER" ]]; then + echo "Enabling user units..." + while read unit; do + systemctl --user enable "$unit" 2>/dev/null || echo "Skipping $unit" + done < "$SYSTEMD_USER" + fi + + echo "Restore complete." +} + +case "$1" in + -b|--backup) + backup + ;; + -r|--restore) + restore + ;; + -h|--help) + show_help + ;; + *) + show_help + exit 1 + ;; +esac diff --git a/systemd_enabled.txt b/systemd_enabled.txt new file mode 100644 index 0000000..405ca1b --- /dev/null +++ b/systemd_enabled.txt @@ -0,0 +1,16 @@ +UNIT +bluetooth.service +getty@.service +NetworkManager-dispatcher.service +NetworkManager-wait-online.service +NetworkManager.service +reflector.service +systemd-boot-update.service +tlp.service +avahi-daemon.socket +cups.socket +pcscd.socket +systemd-userdbd.socket +remote-fs.target + +13 diff --git a/systemd_user_enabled.txt b/systemd_user_enabled.txt new file mode 100644 index 0000000..2673f18 --- /dev/null +++ b/systemd_user_enabled.txt @@ -0,0 +1,9 @@ +UNIT +kanshi.service +wireplumber.service +xdg-user-dirs.service +p11-kit-server.socket +pipewire-pulse.socket +pipewire.socket + +6