mirror of
https://gitlab.com/Zaney/zaneyos.git
synced 2024-12-03 20:13:10 +01:00
122 lines
3.4 KiB
Nix
122 lines
3.4 KiB
Nix
{ pkgs, ... }:
|
|
|
|
let
|
|
inherit (import ../../options.nix) flakeDir flakePrev flakeBackup;
|
|
in
|
|
pkgs.writeShellScriptBin "zcc" ''
|
|
if [ "$#" -eq 0 ]; then
|
|
echo "The ZaneyOS Control Center requires an option like 'zcc [OPTION]'."
|
|
elif [ "$#" -eq 1 ]; then
|
|
if [ "$ZANEYOS" = true ]; then
|
|
choice="$1"
|
|
if [[ "$choice" = "update" ]]; then
|
|
# Add your update logic here
|
|
# If ~/zaneyos-previous exists, backup the configuration
|
|
if [[ -d ${flakePrev} ]]; then
|
|
# Check if ~/zaneyos-backup exists, otherwise create it
|
|
if [[ ! -d ${flakeBackup} ]]; then
|
|
mkdir ${flakeBackup}
|
|
fi
|
|
|
|
# Create a unique backup folder name with date and time
|
|
backup_folder=${flakeBackup}/$(date +"%Y%m%d%H%M%S")
|
|
|
|
# Backup previous configuration
|
|
sudo mv ${flakePrev} "$backup_folder"
|
|
echo "---"
|
|
echo "Previous configuration saved in $backup_folder"
|
|
fi
|
|
# Copy the previous repository
|
|
sudo cp -rp ${flakeDir} ${flakePrev}
|
|
echo "---"
|
|
echo "Actual configuration saved on $FLAKEPREV"
|
|
|
|
# Change directory
|
|
cd ${flakeDir} || exit 1
|
|
|
|
# Run git status to get only modified, tracked but not committed files
|
|
files_to_check=$(git status -s --untracked-files=no | awk '{print $2}')
|
|
|
|
# Stash changes and update the local repo from the remote one
|
|
echo "---"
|
|
echo "Updating zaneyos..."
|
|
git stash && git pull
|
|
|
|
# Show files to check to the user
|
|
echo "---"
|
|
echo "Files to review:"
|
|
echo $files_to_check
|
|
|
|
# Initialize the unresolved_files list
|
|
unresolved_files=()
|
|
|
|
# Verify and overwrite files if the user confirms or save files to be manually reviewed
|
|
for file in $files_to_check; do
|
|
echo "---"
|
|
echo "Differences on $file:"
|
|
diff "$file" ~/zaneyos-previous/"$file"
|
|
echo "---"
|
|
read -p "Overwrite file $file with your? [Y/n]: " choice
|
|
case "$choice" in
|
|
*)
|
|
cp ~/zaneyos-previous/"$file" "$file"
|
|
;;
|
|
n|N)
|
|
# Add the file to unresolved_files
|
|
unresolved_files+=("$file")
|
|
;;
|
|
esac
|
|
done
|
|
|
|
# If unresolved_files contains one or more files
|
|
if [[ ''${#unresolved_files[@]} -gt 0 ]]; then
|
|
# Show the user files to be manually reviewed and exit
|
|
echo "---"
|
|
echo "Review manually the following files:"
|
|
printf '%s\n' "''${unresolved_files[@]}"
|
|
else
|
|
# Prompt for updating flake.nix
|
|
echo "---"
|
|
read -p "Do you want to update flake? [Y/n]: " update_flake
|
|
update_flake=${update_flake:-Y} # Set Y as default option
|
|
if [[ $update_flake == [Yy] ]]; then
|
|
# Run flake-update
|
|
echo "---"
|
|
echo "Running flake-update..."
|
|
sudo nix flake update ~/zaneyos
|
|
# Prompt for system rebuild
|
|
echo "---"
|
|
read -p "Do you want to rebuild the system? [Y/n]: " rebuild_system
|
|
rebuild_system=${rebuild_system:-Y} # Set Y as default option
|
|
if [[ $rebuild_system == [Yy] ]]; then
|
|
# Run flake-rebuild
|
|
echo "---"
|
|
echo "Running flake-rebuild..."
|
|
sudo nixos-rebuild switch --flake ~/zaneyos
|
|
else
|
|
echo "---"
|
|
echo "Ok, the system will not be rebuilt"
|
|
fi
|
|
else
|
|
echo "---"
|
|
echo "Ok, flake will not be updated"
|
|
fi
|
|
fi
|
|
echo "---"
|
|
echo "Ok. Press any key to exit."
|
|
read -n 1 -s
|
|
|
|
elif [[ "$choice" = "install" ]]; then
|
|
echo "Installing..."
|
|
# Add logic for when the user chooses not to update
|
|
else
|
|
echo "Invalid option. Try zcc update or zcc install"
|
|
fi
|
|
else
|
|
echo "ZANEYOS is false"
|
|
fi
|
|
else
|
|
echo "Too many arguments. Please provide one argument."
|
|
fi
|
|
''
|