mirror of
https://github.com/ChrisTitusTech/linutil.git
synced 2024-11-25 22:36:03 +00:00
Merge pull request #465 from guruswarupa/main
brightness control(xorg) , Auto login DM, Bootable pendrive maker script, auto power profiling using auto-cpufreq, timeshift backup, samba-ssh server setup
This commit is contained in:
commit
62093df6b4
|
@ -5,6 +5,7 @@
|
||||||
RC='\033[0m'
|
RC='\033[0m'
|
||||||
RED='\033[31m'
|
RED='\033[31m'
|
||||||
YELLOW='\033[33m'
|
YELLOW='\033[33m'
|
||||||
|
CYAN='\033[36m'
|
||||||
GREEN='\033[32m'
|
GREEN='\033[32m'
|
||||||
|
|
||||||
command_exists() {
|
command_exists() {
|
||||||
|
|
205
tabs/system-setup/5-samba-ssh-setup.sh
Executable file
205
tabs/system-setup/5-samba-ssh-setup.sh
Executable file
|
@ -0,0 +1,205 @@
|
||||||
|
#!/bin/sh -e
|
||||||
|
|
||||||
|
# Load common script functions
|
||||||
|
. ../common-script.sh
|
||||||
|
|
||||||
|
# Function to install packages based on the package manager
|
||||||
|
install_package() {
|
||||||
|
PACKAGE=$1
|
||||||
|
if ! command_exists "$PACKAGE"; then
|
||||||
|
case "$PACKAGER" in
|
||||||
|
pacman)
|
||||||
|
$ESCALATION_TOOL "$PACKAGER" -S --noconfirm "$PACKAGE"
|
||||||
|
;;
|
||||||
|
*)
|
||||||
|
$ESCALATION_TOOL "$PACKAGER" install -y "$PACKAGE"
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
else
|
||||||
|
echo "$PACKAGE is already installed."
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
# Function to setup and configure SSH
|
||||||
|
setup_ssh() {
|
||||||
|
printf "%b\n" "${YELLOW}Setting up SSH...${RC}"
|
||||||
|
|
||||||
|
# Detect package manager and install appropriate SSH package
|
||||||
|
case "$PACKAGER" in
|
||||||
|
"apt-get")
|
||||||
|
install_package openssh-server
|
||||||
|
SSH_SERVICE="ssh"
|
||||||
|
;;
|
||||||
|
"pacman")
|
||||||
|
install_package openssh
|
||||||
|
SSH_SERVICE="sshd"
|
||||||
|
;;
|
||||||
|
*)
|
||||||
|
install_package openssh-server
|
||||||
|
SSH_SERVICE="sshd"
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
|
||||||
|
# Enable and start the appropriate SSH service
|
||||||
|
$ESCALATION_TOOL systemctl enable "$SSH_SERVICE"
|
||||||
|
$ESCALATION_TOOL systemctl start "$SSH_SERVICE"
|
||||||
|
|
||||||
|
# Get the local IP address
|
||||||
|
LOCAL_IP=$(ip -4 addr show | awk '/inet / {print $2}' | tail -n 1)
|
||||||
|
|
||||||
|
printf "%b\n" "${GREEN}Your local IP address is: $LOCAL_IP${RC}"
|
||||||
|
|
||||||
|
# Check if SSH is running
|
||||||
|
if systemctl is-active --quiet "$SSH_SERVICE"; then
|
||||||
|
printf "%b\n" "${GREEN}SSH is up and running.${RC}"
|
||||||
|
else
|
||||||
|
printf "%b\n" "${RED}Failed to start SSH.${RC}"
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
# Function to setup and configure Samba
|
||||||
|
setup_samba() {
|
||||||
|
printf "%b\n" "${YELLOW}Setting up Samba...${RC}"
|
||||||
|
|
||||||
|
# Install Samba if not installed
|
||||||
|
install_package samba
|
||||||
|
|
||||||
|
SAMBA_CONFIG="/etc/samba/smb.conf"
|
||||||
|
|
||||||
|
if [ -f "$SAMBA_CONFIG" ]; then
|
||||||
|
printf "%b\n" "${YELLOW}Samba configuration file already exists in $SAMBA_CONFIG.${RC}"
|
||||||
|
printf "Do you want to modify the existing Samba configuration? (yes/no): "
|
||||||
|
read -r MODIFY_SAMBA
|
||||||
|
if [ "$MODIFY_SAMBA" = "yes" ]; then
|
||||||
|
"$ESCALATION_TOOL" "$EDITOR" "$SAMBA_CONFIG"
|
||||||
|
fi
|
||||||
|
else
|
||||||
|
printf "%b\n" "${YELLOW}No existing Samba configuration found. Setting up a new one...${RC}"
|
||||||
|
|
||||||
|
# Prompt user for shared directory path
|
||||||
|
printf "Enter the path for the Samba share (default: /srv/samba/share): "
|
||||||
|
read -r SHARED_DIR
|
||||||
|
SHARED_DIR=${SHARED_DIR:-/srv/samba/share}
|
||||||
|
|
||||||
|
# Create the shared directory if it doesn't exist
|
||||||
|
$ESCALATION_TOOL mkdir -p "$SHARED_DIR"
|
||||||
|
$ESCALATION_TOOL chmod -R 0777 "$SHARED_DIR"
|
||||||
|
|
||||||
|
# Add a new Samba user
|
||||||
|
echo "Enter Samba username: "
|
||||||
|
read -r SAMBA_USER
|
||||||
|
|
||||||
|
# Loop until the passwords match
|
||||||
|
while true; do
|
||||||
|
echo "Enter Samba password: "
|
||||||
|
stty -echo
|
||||||
|
read -r SAMBA_PASSWORD
|
||||||
|
stty echo
|
||||||
|
echo "Confirm Samba password: "
|
||||||
|
stty -echo
|
||||||
|
read SAMBA_PASSWORD_CONFIRM
|
||||||
|
stty echo
|
||||||
|
echo ""
|
||||||
|
if [ "$SAMBA_PASSWORD" = "$SAMBA_PASSWORD_CONFIRM" ]; then
|
||||||
|
printf "%b\n" "${GREEN}Passwords match.${RC}"
|
||||||
|
break
|
||||||
|
else
|
||||||
|
printf "%b\n" "${RED}Passwords do not match. Please try again.${RC}"
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
|
||||||
|
# Add the user and set the password
|
||||||
|
$ESCALATION_TOOL smbpasswd -a "$SAMBA_USER"
|
||||||
|
|
||||||
|
# Configure Samba settings
|
||||||
|
$ESCALATION_TOOL sh -c "cat > $SAMBA_CONFIG" <<EOL
|
||||||
|
[global]
|
||||||
|
workgroup = WORKGROUP
|
||||||
|
server string = Samba Server
|
||||||
|
security = user
|
||||||
|
map to guest = bad user
|
||||||
|
dns proxy = no
|
||||||
|
|
||||||
|
[Share]
|
||||||
|
path = $SHARED_DIR
|
||||||
|
browsable = yes
|
||||||
|
writable = yes
|
||||||
|
guest ok = no
|
||||||
|
read only = no
|
||||||
|
EOL
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Enable and start Samba services
|
||||||
|
$ESCALATION_TOOL systemctl enable smb nmb
|
||||||
|
$ESCALATION_TOOL systemctl start smb nmb
|
||||||
|
|
||||||
|
# Check if Samba is running
|
||||||
|
if systemctl is-active --quiet smb && systemctl is-active --quiet nmb; then
|
||||||
|
printf "%b\n" "${GREEN}Samba is up and running.${RC}"
|
||||||
|
printf "%b\n" "${YELLOW}Samba share available at: $SHARED_DIR${RC}"
|
||||||
|
else
|
||||||
|
printf "%b\n" "${RED}Failed to start Samba.${RC}"
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
# Function to configure firewall (optional)
|
||||||
|
configure_firewall() {
|
||||||
|
printf "%b\n" "${BLUE}Configuring firewall...${RC}"
|
||||||
|
|
||||||
|
if command_exists ufw; then
|
||||||
|
$ESCALATION_TOOL ufw allow OpenSSH
|
||||||
|
$ESCALATION_TOOL ufw allow Samba
|
||||||
|
$ESCALATION_TOOL ufw enable
|
||||||
|
printf "%b\n" "${GREEN}Firewall configured for SSH and Samba.${RC}"
|
||||||
|
else
|
||||||
|
printf "%b\n" "${YELLOW}UFW is not installed. Skipping firewall configuration.${RC}"
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
setup_ssh_samba(){
|
||||||
|
printf "Samba and SSH Setup Script\n"
|
||||||
|
printf "----------------------------\n"
|
||||||
|
clear
|
||||||
|
|
||||||
|
# Display menu
|
||||||
|
printf "Select an option:\n"
|
||||||
|
printf "1. Setup SSH\n"
|
||||||
|
printf "2. Setup Samba\n"
|
||||||
|
printf "3. Configure Firewall\n"
|
||||||
|
printf "4. Setup All\n"
|
||||||
|
printf "5. Exit\n"
|
||||||
|
|
||||||
|
printf "Enter your choice [1-5]: "
|
||||||
|
read CHOICE
|
||||||
|
|
||||||
|
case "$CHOICE" in
|
||||||
|
1)
|
||||||
|
setup_ssh
|
||||||
|
;;
|
||||||
|
2)
|
||||||
|
setup_samba
|
||||||
|
;;
|
||||||
|
3)
|
||||||
|
configure_firewall
|
||||||
|
;;
|
||||||
|
4)
|
||||||
|
setup_ssh
|
||||||
|
setup_samba
|
||||||
|
configure_firewall
|
||||||
|
;;
|
||||||
|
5)
|
||||||
|
printf "%b\n" "${GREEN}Exiting.${RC}"
|
||||||
|
exit 0
|
||||||
|
;;
|
||||||
|
*)
|
||||||
|
printf "%b\n" "${RED}Invalid choice. Please enter a number between 1 and 5.${RC}"
|
||||||
|
exit 1
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
|
||||||
|
printf "%b\n" "${GREEN}Setup completed.${RC}"
|
||||||
|
}
|
||||||
|
|
||||||
|
checkEnv
|
||||||
|
checkEscalationTool
|
||||||
|
setup_ssh_samba
|
|
@ -52,6 +52,10 @@ script = "3-global-theme.sh"
|
||||||
name = "Remove Snaps"
|
name = "Remove Snaps"
|
||||||
script = "4-remove-snaps.sh"
|
script = "4-remove-snaps.sh"
|
||||||
|
|
||||||
|
[[data]]
|
||||||
|
name = "SSH-Samba Setup"
|
||||||
|
script = "5-samba-ssh-setup.sh"
|
||||||
|
|
||||||
[[data]]
|
[[data]]
|
||||||
name = "Docker Setup"
|
name = "Docker Setup"
|
||||||
script = "6-docker-setup.sh"
|
script = "6-docker-setup.sh"
|
179
tabs/utils/auto-login.sh
Normal file
179
tabs/utils/auto-login.sh
Normal file
|
@ -0,0 +1,179 @@
|
||||||
|
#!/bin/sh -e
|
||||||
|
|
||||||
|
. ../common-script.sh
|
||||||
|
|
||||||
|
# Function to list common session options
|
||||||
|
list_sessions() {
|
||||||
|
echo "Select the session:"
|
||||||
|
echo "1) GNOME (gnome.desktop)"
|
||||||
|
echo "2) KDE Plasma (plasma.desktop)"
|
||||||
|
echo "3) XFCE (xfce.desktop)"
|
||||||
|
echo "4) LXDE (LXDE.desktop)"
|
||||||
|
echo "5) LXQt (lxqt.desktop)"
|
||||||
|
echo "6) Cinnamon (cinnamon.desktop)"
|
||||||
|
echo "7) MATE (mate.desktop)"
|
||||||
|
echo "8) Openbox (openbox.desktop)"
|
||||||
|
echo "9) i3 (i3.desktop)"
|
||||||
|
echo "10) Custom session"
|
||||||
|
echo "Enter your choice [1-10]: "
|
||||||
|
read session_choice
|
||||||
|
|
||||||
|
case "$session_choice" in
|
||||||
|
1) session="gnome.desktop" ;;
|
||||||
|
2) session="plasma.desktop" ;;
|
||||||
|
3) session="xfce.desktop" ;;
|
||||||
|
4) session="LXDE.desktop" ;;
|
||||||
|
5) session="lxqt.desktop" ;;
|
||||||
|
6) session="cinnamon.desktop" ;;
|
||||||
|
7) session="mate.desktop" ;;
|
||||||
|
8) session="openbox.desktop" ;;
|
||||||
|
9) session="i3.desktop" ;;
|
||||||
|
10)
|
||||||
|
echo "Enter custom session name (e.g., mysession.desktop): "
|
||||||
|
read -r session ;;
|
||||||
|
*)
|
||||||
|
echo "Invalid option selected."
|
||||||
|
exit 1 ;;
|
||||||
|
esac
|
||||||
|
}
|
||||||
|
|
||||||
|
# Function to configure LightDM
|
||||||
|
configure_lightdm() {
|
||||||
|
echo "Configuring LightDM for autologin..."
|
||||||
|
|
||||||
|
echo "Enter username for LightDM autologin: "
|
||||||
|
read -r user
|
||||||
|
|
||||||
|
$ESCALATION_TOOL "echo '[Seat:*]' > /etc/lightdm/lightdm.conf.d/50-autologin.conf"
|
||||||
|
$ESCALATION_TOOL "echo 'autologin-user=$user' >> /etc/lightdm/lightdm.conf.d/50-autologin.conf"
|
||||||
|
$ESCALATION_TOOL "echo 'autologin-user-timeout=0' >> /etc/lightdm/lightdm.conf.d/50-autologin.conf"
|
||||||
|
|
||||||
|
echo "LightDM has been configured for autologin."
|
||||||
|
}
|
||||||
|
|
||||||
|
# Function to remove LightDM autologin
|
||||||
|
remove_lightdm_autologin() {
|
||||||
|
echo "Removing LightDM autologin configuration..."
|
||||||
|
$ESCALATION_TOOL rm -f /etc/lightdm/lightdm.conf.d/50-autologin.conf
|
||||||
|
echo "LightDM autologin configuration has been removed."
|
||||||
|
}
|
||||||
|
|
||||||
|
# Function to configure GDM
|
||||||
|
configure_gdm() {
|
||||||
|
echo "Configuring GDM for autologin..."
|
||||||
|
|
||||||
|
echo "Enter username for GDM autologin: "
|
||||||
|
read -r user
|
||||||
|
|
||||||
|
$ESCALATION_TOOL "echo '[daemon]' > /etc/gdm/custom.conf"
|
||||||
|
$ESCALATION_TOOL "echo 'AutomaticLoginEnable = true' >> /etc/gdm/custom.conf"
|
||||||
|
$ESCALATION_TOOL "echo 'AutomaticLogin = $user' >> /etc/gdm/custom.conf"
|
||||||
|
|
||||||
|
echo "GDM has been configured for autologin."
|
||||||
|
}
|
||||||
|
|
||||||
|
# Function to remove GDM autologin
|
||||||
|
remove_gdm_autologin() {
|
||||||
|
echo "Removing GDM autologin configuration..."
|
||||||
|
$ESCALATION_TOOL sed -i '/AutomaticLoginEnable/d' /etc/gdm/custom.conf
|
||||||
|
$ESCALATION_TOOL sed -i '/AutomaticLogin/d' /etc/gdm/custom.conf
|
||||||
|
echo "GDM autologin configuration has been removed."
|
||||||
|
}
|
||||||
|
|
||||||
|
# Function to configure SDDM
|
||||||
|
configure_sddm() {
|
||||||
|
echo "Configuring SDDM for autologin..."
|
||||||
|
|
||||||
|
echo "Enter username for SDDM autologin: "
|
||||||
|
read -r user
|
||||||
|
list_sessions # Show session options
|
||||||
|
|
||||||
|
$ESCALATION_TOOL "echo '[Autologin]' > /etc/sddm.conf"
|
||||||
|
$ESCALATION_TOOL "echo 'User=$user' >> /etc/sddm.conf"
|
||||||
|
$ESCALATION_TOOL "echo 'Session=$session' >> /etc/sddm.conf"
|
||||||
|
|
||||||
|
echo "SDDM has been configured for autologin."
|
||||||
|
}
|
||||||
|
|
||||||
|
# Function to remove SDDM autologin
|
||||||
|
remove_sddm_autologin() {
|
||||||
|
echo "Removing SDDM autologin configuration..."
|
||||||
|
$ESCALATION_TOOL sed -i '/\[Autologin\]/,+2d' /etc/sddm.conf
|
||||||
|
echo "SDDM autologin configuration has been removed."
|
||||||
|
}
|
||||||
|
|
||||||
|
# Function to configure LXDM
|
||||||
|
configure_lxdm() {
|
||||||
|
echo "Configuring LXDM for autologin..."
|
||||||
|
|
||||||
|
echo "Enter username for LXDM autologin: "
|
||||||
|
read -r user
|
||||||
|
list_sessions # Show session options
|
||||||
|
|
||||||
|
$ESCALATION_TOOL sed -i "s/^#.*autologin=.*$/autologin=${user}/" /etc/lxdm/lxdm.conf
|
||||||
|
$ESCALATION_TOOL sed -i "s|^#.*session=.*$|session=/usr/bin/${session}|; s|^session=.*$|session=/usr/bin/${session}|" /etc/lxdm/lxdm.conf
|
||||||
|
|
||||||
|
echo "LXDM has been configured for autologin."
|
||||||
|
}
|
||||||
|
|
||||||
|
# Function to remove LXDM autologin
|
||||||
|
remove_lxdm_autologin() {
|
||||||
|
echo "Removing LXDM autologin configuration..."
|
||||||
|
$ESCALATION_TOOL sed -i "s/^autologin=.*$/#autologin=/" /etc/lxdm/lxdm.conf
|
||||||
|
$ESCALATION_TOOL sed -i "s/^session=.*$/#session=/" /etc/lxdm/lxdm.conf
|
||||||
|
echo "LXDM autologin configuration has been removed."
|
||||||
|
}
|
||||||
|
|
||||||
|
# Function to configure or remove autologin based on user choice
|
||||||
|
configure_or_remove_autologin() {
|
||||||
|
echo "Do you want to add or remove autologin?"
|
||||||
|
echo "1) Add autologin"
|
||||||
|
echo "2) Remove autologin"
|
||||||
|
echo "Enter your choice [1-2]: "
|
||||||
|
read action_choice
|
||||||
|
|
||||||
|
if [ "$action_choice" = "1" ]; then
|
||||||
|
echo "Choose the display manager to configure:"
|
||||||
|
echo "1) LightDM"
|
||||||
|
echo "2) GDM"
|
||||||
|
echo "3) SDDM"
|
||||||
|
echo "4) LXDM"
|
||||||
|
echo "Enter your choice [1-4]: "
|
||||||
|
read choice
|
||||||
|
|
||||||
|
case "$choice" in
|
||||||
|
1) configure_lightdm ;;
|
||||||
|
2) configure_gdm ;;
|
||||||
|
3) configure_sddm ;;
|
||||||
|
4) configure_lxdm ;;
|
||||||
|
*) echo "Invalid option selected." ;;
|
||||||
|
esac
|
||||||
|
elif [ "$action_choice" = "2" ]; then
|
||||||
|
echo "Choose the display manager to remove autologin:"
|
||||||
|
echo "1) LightDM"
|
||||||
|
echo "2) GDM"
|
||||||
|
echo "3) SDDM"
|
||||||
|
echo "4) LXDM"
|
||||||
|
echo "Enter your choice [1-4]: "
|
||||||
|
read choice
|
||||||
|
|
||||||
|
case "$choice" in
|
||||||
|
1) remove_lightdm_autologin ;;
|
||||||
|
2) remove_gdm_autologin ;;
|
||||||
|
3) remove_sddm_autologin ;;
|
||||||
|
4) remove_lxdm_autologin ;;
|
||||||
|
*) echo "Invalid option selected." ;;
|
||||||
|
esac
|
||||||
|
else
|
||||||
|
echo "Invalid choice. Exiting..."
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
echo "Action completed. Exiting..."
|
||||||
|
exit 0
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
checkEnv
|
||||||
|
checkEscalationTool
|
||||||
|
configure_or_remove_autologin
|
193
tabs/utils/create-bootable-usb.sh
Normal file
193
tabs/utils/create-bootable-usb.sh
Normal file
|
@ -0,0 +1,193 @@
|
||||||
|
#!/bin/sh -e
|
||||||
|
|
||||||
|
. ../common-script.sh
|
||||||
|
|
||||||
|
# Function to display usage instructions
|
||||||
|
usage() {
|
||||||
|
printf "%b\n" "${RED} Usage: $0 ${RC}"
|
||||||
|
echo "No arguments needed. The script will prompt for ISO path and USB device."
|
||||||
|
exit 1
|
||||||
|
}
|
||||||
|
|
||||||
|
# Function to display all available block devices
|
||||||
|
list_devices() {
|
||||||
|
printf "%b\n" "${YELLOW} Available devices and partitions: ${RC}"
|
||||||
|
echo ""
|
||||||
|
$ESCALATION_TOOL lsblk -o NAME,FSTYPE,SIZE,MOUNTPOINT,LABEL
|
||||||
|
echo ""
|
||||||
|
}
|
||||||
|
|
||||||
|
# Function to fetch the latest Arch Linux ISO
|
||||||
|
fetch_arch_latest_iso() {
|
||||||
|
ARCH_BASE_URL="https://archive.archlinux.org/iso/"
|
||||||
|
ARCH_LATEST=$(curl -s "$ARCH_BASE_URL" | grep -oP '(?<=href=")[0-9]{4}\.[0-9]{2}\.[0-9]{2}(?=/)' | sort -V | tail -1)
|
||||||
|
ARCH_URL="${ARCH_BASE_URL}${ARCH_LATEST}/archlinux-${ARCH_LATEST}-x86_64.iso"
|
||||||
|
printf "%b\n" "${GREEN} Selected Arch Linux (latest) ISO URL: ${RC} $ARCH_URL"
|
||||||
|
}
|
||||||
|
|
||||||
|
# Function to fetch older Arch Linux ISOs and display in a table format
|
||||||
|
fetch_arch_older_isos() {
|
||||||
|
ARCH_BASE_URL="https://archive.archlinux.org/iso/"
|
||||||
|
ARCH_VERSIONS=$(curl -s "$ARCH_BASE_URL" | grep -oP '(?<=href=")[0-9]{4}\.[0-9]{2}\.[0-9]{2}(?=/)' | sort -V)
|
||||||
|
|
||||||
|
# Filter versions to include only those from 2017-04-01 and later
|
||||||
|
MIN_DATE="2017.04.01"
|
||||||
|
ARCH_VERSIONS=$(echo "$ARCH_VERSIONS" | awk -v min_date="$MIN_DATE" '$0 >= min_date')
|
||||||
|
|
||||||
|
if [ -z "$ARCH_VERSIONS" ]; then
|
||||||
|
printf "%b\n" "${RED}No Arch Linux versions found from ${MIN_DATE} onwards.${RC}"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
printf "%b\n" "${YELLOW}Available Arch Linux versions from ${MIN_DATE} onwards:${RC}"
|
||||||
|
|
||||||
|
COUNTER=1
|
||||||
|
ROW_ITEMS=6 # Number of versions to show per row
|
||||||
|
for VERSION in $ARCH_VERSIONS; do
|
||||||
|
printf "%-5s${YELLOW}%-15s ${RC}" "$COUNTER)" "$VERSION"
|
||||||
|
|
||||||
|
if [ $(( COUNTER % ROW_ITEMS )) -eq 0 ]; then
|
||||||
|
echo "" # New line after every 6 versions
|
||||||
|
fi
|
||||||
|
|
||||||
|
COUNTER=$((COUNTER + 1))
|
||||||
|
done
|
||||||
|
printf "\n" # New line after the last row
|
||||||
|
printf "Select an Arch Linux version (1-%d): " "$((COUNTER - 1))"
|
||||||
|
read -r ARCH_OPTION
|
||||||
|
ARCH_DIR=$(echo "$ARCH_VERSIONS" | sed -n "${ARCH_OPTION}p")
|
||||||
|
ARCH_URL="${ARCH_BASE_URL}${ARCH_DIR}/archlinux-${ARCH_DIR}-x86_64.iso"
|
||||||
|
printf "%b\n" "${GREEN}Selected Arch Linux (older) ISO URL: $ARCH_URL${RC}"
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
# Function to fetch the latest Debian Linux ISO
|
||||||
|
fetch_debian_latest_iso() {
|
||||||
|
DEBIAN_URL=$(curl -s https://www.debian.org/distrib/netinst | grep -oP '(?<=href=")[^"]+debian-[0-9.]+-amd64-netinst.iso(?=")' | head -1)
|
||||||
|
printf "%b\n" "${GREEN} Selected Debian Linux (latest) ISO URL: ${RC} $DEBIAN_URL"
|
||||||
|
}
|
||||||
|
|
||||||
|
# Function to ask whether to use local or online ISO
|
||||||
|
choose_iso_source() {
|
||||||
|
printf "%b\n" "${YELLOW} Do you want to use a local ISO or download online? ${RC}"
|
||||||
|
printf "1) Download online\n"
|
||||||
|
printf "2) Use local ISO\n"
|
||||||
|
printf "\n"
|
||||||
|
printf "Select option (1-2): "
|
||||||
|
read -r ISO_SOURCE_OPTION
|
||||||
|
|
||||||
|
case $ISO_SOURCE_OPTION in
|
||||||
|
1)
|
||||||
|
fetch_iso_urls # Call the function to fetch online ISO URLs
|
||||||
|
;;
|
||||||
|
2)
|
||||||
|
printf "Enter the path to the already downloaded ISO file: "
|
||||||
|
read -r ISO_PATH
|
||||||
|
if [ ! -f "$ISO_PATH" ]; then
|
||||||
|
printf "%b\n" "${RED} ISO file not found: $ISO_PATH ${RC}"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
;;
|
||||||
|
*)
|
||||||
|
printf "%b\n" "${RED}Invalid option selected. ${RC}"
|
||||||
|
exit 1
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
}
|
||||||
|
|
||||||
|
# Function to fetch ISO URLs
|
||||||
|
fetch_iso_urls() {
|
||||||
|
clear
|
||||||
|
printf "%b\n" "${YELLOW}Available ISOs for download:${RC}"
|
||||||
|
echo "1) Arch Linux (latest)"
|
||||||
|
echo "2) Arch Linux (older versions)"
|
||||||
|
echo "3) Debian Linux (latest)"
|
||||||
|
echo ""
|
||||||
|
read -p "Select the ISO you want to download (1-3): " ISO_OPTION
|
||||||
|
|
||||||
|
case $ISO_OPTION in
|
||||||
|
1)
|
||||||
|
fetch_arch_latest_iso
|
||||||
|
ISO_URL=$ARCH_URL
|
||||||
|
;;
|
||||||
|
2)
|
||||||
|
fetch_arch_older_isos
|
||||||
|
ISO_URL=$ARCH_URL
|
||||||
|
;;
|
||||||
|
3)
|
||||||
|
fetch_debian_latest_iso
|
||||||
|
ISO_URL=$DEBIAN_URL
|
||||||
|
;;
|
||||||
|
*)
|
||||||
|
printf "%b\n" "${RED}Invalid option selected.${RC}"
|
||||||
|
exit 1
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
|
||||||
|
ISO_PATH=$(basename "$ISO_URL")
|
||||||
|
printf "%b\n" "${YELLOW}Downloading ISO...${RC}"
|
||||||
|
curl -L -o "$ISO_PATH" "$ISO_URL"
|
||||||
|
if [ $? -ne 0 ]; then
|
||||||
|
printf "%b\n" "${RED}Failed to download the ISO file.${RC}"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
write_iso(){
|
||||||
|
clear
|
||||||
|
|
||||||
|
# Ask whether to use a local or online ISO
|
||||||
|
choose_iso_source
|
||||||
|
|
||||||
|
clear
|
||||||
|
# Display all available devices
|
||||||
|
list_devices
|
||||||
|
|
||||||
|
# Prompt user for USB device
|
||||||
|
read -p "Enter the USB device (e.g., /dev/sdX): " USB_DEVICE
|
||||||
|
|
||||||
|
# Verify that the USB device exists
|
||||||
|
if [ ! -b "$USB_DEVICE" ]; then
|
||||||
|
printf "%b\n" "${RED}USB device not found: $USB_DEVICE${RC}"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Confirm the device selection with the user
|
||||||
|
printf "%b\n" "${RED}WARNING: This will erase all data on ${USB_DEVICE}. Are you sure you want to continue? (yes/no)${RC}"
|
||||||
|
read -r CONFIRMATION
|
||||||
|
|
||||||
|
if [ "$CONFIRMATION" != "yes" ]; then
|
||||||
|
printf "%b\n" "${YELLOW}Operation cancelled.${RC}"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Display progress and create the bootable USB drive
|
||||||
|
printf "%b\n" "${YELLOW}Creating bootable USB drive...${RC}"
|
||||||
|
if ! $ESCALATION_TOOL dd if="$ISO_PATH" of="$USB_DEVICE" bs=4M status=progress oflag=sync; then
|
||||||
|
printf "%b\n" "${RED}Failed to create bootable USB drive${RC}"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Sync to ensure all data is written
|
||||||
|
if ! $ESCALATION_TOOL sync; then
|
||||||
|
printf "%b\n" "${RED}Failed to sync data${RC}"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
printf "%b\n" "${GREEN}Bootable USB drive created successfully!${RC}"
|
||||||
|
|
||||||
|
# Eject the USB device
|
||||||
|
printf "%b\n" "${YELLOW}Ejecting ${USB_DEVICE}...${RC}"
|
||||||
|
if ! $ESCALATION_TOOL umount "${USB_DEVICE}"* 2>/dev/null; then
|
||||||
|
printf "%b\n" "${RED}Failed to unmount ${USB_DEVICE}${RC}"
|
||||||
|
fi
|
||||||
|
if ! $ESCALATION_TOOL eject "$USB_DEVICE"; then
|
||||||
|
printf "%b\n" "${RED}Failed to eject ${USB_DEVICE}${RC}"
|
||||||
|
fi
|
||||||
|
|
||||||
|
printf "%b\n" "${GREEN}You can safely remove your USB drive. Reinsert the drive to be detected.${RC}"
|
||||||
|
}
|
||||||
|
|
||||||
|
checkEnv
|
||||||
|
checkEscalationTool
|
||||||
|
write_iso
|
85
tabs/utils/monitor-control/set_brightness.sh
Normal file
85
tabs/utils/monitor-control/set_brightness.sh
Normal file
|
@ -0,0 +1,85 @@
|
||||||
|
#!/bin/sh -e
|
||||||
|
|
||||||
|
. ./utility_functions.sh
|
||||||
|
|
||||||
|
# Function to adjust brightness for a selected monitor
|
||||||
|
adjust_monitor_brightness() {
|
||||||
|
while true; do
|
||||||
|
monitor_list=$(detect_connected_monitors)
|
||||||
|
monitor_array=$(echo "$monitor_list" | tr '\n' ' ')
|
||||||
|
set -- $monitor_array
|
||||||
|
count=1
|
||||||
|
|
||||||
|
clear
|
||||||
|
printf "%b\n" "${YELLOW}=========================================${RC}"
|
||||||
|
printf "%b\n" "${YELLOW} Adjust Monitor Brightness${RC}"
|
||||||
|
printf "%b\n" "${YELLOW}=========================================${RC}"
|
||||||
|
printf "%b\n" "${YELLOW}Choose a monitor to adjust brightness:${RC}"
|
||||||
|
for monitor in "$@"; do
|
||||||
|
echo "$count. $monitor"
|
||||||
|
count=$((count + 1))
|
||||||
|
done
|
||||||
|
|
||||||
|
echo "Enter the number of the monitor (or 'q' to quit): "
|
||||||
|
read monitor_choice
|
||||||
|
|
||||||
|
if [ "$monitor_choice" = "q" ]; then
|
||||||
|
printf "%b\n" "${RED}Exiting...${RC}"
|
||||||
|
return
|
||||||
|
fi
|
||||||
|
|
||||||
|
if ! echo "$monitor_choice" | grep -qE '^[0-9]+$'; then
|
||||||
|
echo "Invalid selection. Please try again."
|
||||||
|
echo "Press [Enter] to continue..."
|
||||||
|
read dummy
|
||||||
|
continue
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [ "$monitor_choice" -lt 1 ] || [ "$monitor_choice" -gt "$#" ]; then
|
||||||
|
printf "%b\n" "${RED}Invalid selection. Please try again.${RC}"
|
||||||
|
echo "Press [Enter] to continue..."
|
||||||
|
read dummy
|
||||||
|
continue
|
||||||
|
fi
|
||||||
|
|
||||||
|
monitor_name=$(eval echo "\${$monitor_choice}")
|
||||||
|
current_brightness=$(get_current_brightness "$monitor_name")
|
||||||
|
|
||||||
|
# Correctly calculate the brightness percentage
|
||||||
|
current_brightness_percentage=$(awk "BEGIN {printf \"%.0f\", $current_brightness * 100}")
|
||||||
|
printf "%b\n" "${YELLOW}Current brightness for $monitor_name${RC}: ${GREEN}$current_brightness_percentage%${RC}"
|
||||||
|
|
||||||
|
while true; do
|
||||||
|
echo "Enter the new brightness value as a percentage (10 to 100, or 'q' to quit): "
|
||||||
|
read new_brightness_percentage
|
||||||
|
|
||||||
|
if [ "$new_brightness_percentage" = "q" ]; then
|
||||||
|
printf "%b\n" "${RED}Exiting...${RC}"
|
||||||
|
return
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Validate brightness input: accept only values above 10
|
||||||
|
if ! echo "$new_brightness_percentage" | grep -qE '^[0-9]+$' || [ "$new_brightness_percentage" -lt 10 ] || [ "$new_brightness_percentage" -gt 100 ]; then
|
||||||
|
printf "%b\n" "${RED}Invalid brightness value. Please enter a value between 10 and 100.${RC}"
|
||||||
|
continue
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Convert percentage to xrandr brightness value (10% to 0.10)
|
||||||
|
new_brightness=$(awk "BEGIN {printf \"%.2f\", $new_brightness_percentage / 100}")
|
||||||
|
|
||||||
|
echo "Set brightness for $monitor_name to $new_brightness_percentage%? (y/n): "
|
||||||
|
read confirm
|
||||||
|
if [ "$confirm" = "y" ] || [ "$confirm" = "Y" ]; then
|
||||||
|
printf "%b\n" "${GREEN}Setting brightness for $monitor_name to $new_brightness_percentage%${RC}"
|
||||||
|
execute_command "xrandr --output $monitor_name --brightness $new_brightness"
|
||||||
|
printf "%b\n" "${GREEN}Brightness for $monitor_name set to $new_brightness_percentage% successfully.${RC}"
|
||||||
|
break
|
||||||
|
else
|
||||||
|
printf "%b\n" "${RED}Action canceled. Please choose a different brightness value.${RC}"
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
done
|
||||||
|
}
|
||||||
|
|
||||||
|
# Call the adjust_monitor_brightness function
|
||||||
|
adjust_monitor_brightness
|
|
@ -38,6 +38,12 @@ detect_connected_monitors() {
|
||||||
echo "$xrandr_output" | grep " connected" | awk '{print $1}'
|
echo "$xrandr_output" | grep " connected" | awk '{print $1}'
|
||||||
}
|
}
|
||||||
|
|
||||||
|
# Function to get the current brightness for a monitor
|
||||||
|
get_current_brightness() {
|
||||||
|
monitor="$1"
|
||||||
|
xrandr --verbose | grep -A 10 "^$monitor connected" | grep "Brightness:" | awk '{print $2}'
|
||||||
|
}
|
||||||
|
|
||||||
# Function to get resolutions for a monitor
|
# Function to get resolutions for a monitor
|
||||||
get_unique_resolutions() {
|
get_unique_resolutions() {
|
||||||
monitor="$1"
|
monitor="$1"
|
||||||
|
@ -73,8 +79,9 @@ get_unique_resolutions() {
|
||||||
# Function to prompt for confirmation
|
# Function to prompt for confirmation
|
||||||
confirm_action() {
|
confirm_action() {
|
||||||
action="$1"
|
action="$1"
|
||||||
echo "$action"
|
printf "%b\n" "${CYAN}$action${RC}"
|
||||||
read -p "Are you sure? (y/n): " confirm
|
printf "%b" "${CYAN}Are you sure? (y/n): ${RC}"
|
||||||
|
read -r confirm
|
||||||
if echo "$confirm" | grep -qE '^[Yy]$'; then
|
if echo "$confirm" | grep -qE '^[Yy]$'; then
|
||||||
return 0
|
return 0
|
||||||
else
|
else
|
||||||
|
|
100
tabs/utils/power-profile.sh
Normal file
100
tabs/utils/power-profile.sh
Normal file
|
@ -0,0 +1,100 @@
|
||||||
|
#!/bin/sh -e
|
||||||
|
|
||||||
|
. ../common-script.sh
|
||||||
|
|
||||||
|
installAutoCpufreq() {
|
||||||
|
clear
|
||||||
|
printf "%b\n" "${YELLOW}Checking if auto-cpufreq is already installed...${RC}"
|
||||||
|
|
||||||
|
# Check if auto-cpufreq is already installed
|
||||||
|
if command_exists auto-cpufreq; then
|
||||||
|
printf "%b\n" "${GREEN}auto-cpufreq is already installed.${RC}"
|
||||||
|
else
|
||||||
|
printf "%b\n" "${YELLOW}Installing auto-cpufreq...${RC}"
|
||||||
|
|
||||||
|
# Install git if not already installed
|
||||||
|
if ! command_exists git; then
|
||||||
|
printf "%b\n" "${YELLOW}git not found. Installing git...${RC}"
|
||||||
|
case ${PACKAGER} in
|
||||||
|
pacman)
|
||||||
|
$ESCALATION_TOOL ${PACKAGER} -S --needed --noconfirm git
|
||||||
|
;;
|
||||||
|
*)
|
||||||
|
$ESCALATION_TOOL ${PACKAGER} install -y git
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Clone the auto-cpufreq repository and run the installer
|
||||||
|
if [ ! -d "auto-cpufreq" ]; then
|
||||||
|
printf "%b\n" "${YELLOW}Cloning auto-cpufreq repository...${RC}"
|
||||||
|
git clone https://github.com/AdnanHodzic/auto-cpufreq.git
|
||||||
|
fi
|
||||||
|
|
||||||
|
case ${PACKAGER} in
|
||||||
|
*)
|
||||||
|
cd auto-cpufreq
|
||||||
|
printf "%b\n" "${YELLOW}Running auto-cpufreq installer...${RC}"
|
||||||
|
$ESCALATION_TOOL ./auto-cpufreq-installer
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
cd ..
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
configureAutoCpufreq() {
|
||||||
|
printf "%b\n" "${YELLOW}Configuring auto-cpufreq...${RC}"
|
||||||
|
|
||||||
|
if command_exists auto-cpufreq; then
|
||||||
|
# Check if the system has a battery to determine if it's a laptop
|
||||||
|
if [ -d /sys/class/power_supply/BAT0 ]; then
|
||||||
|
printf "%b\n" "${GREEN}System detected as laptop. Updating auto-cpufreq for laptop...${RC}"
|
||||||
|
$ESCALATION_TOOL auto-cpufreq --force powersave
|
||||||
|
else
|
||||||
|
printf "%b\n" "${GREEN}System detected as desktop. Updating auto-cpufreq for desktop...${RC}"
|
||||||
|
$ESCALATION_TOOL auto-cpufreq --force performance
|
||||||
|
fi
|
||||||
|
else
|
||||||
|
printf "%b\n" "${RED}auto-cpufreq is not installed, skipping configuration.${RC}"
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
removeAutoCpufreqTweak() {
|
||||||
|
printf "%b\n" "${YELLOW}Removing auto-cpufreq tweak...${RC}"
|
||||||
|
|
||||||
|
if command_exists auto-cpufreq; then
|
||||||
|
printf "%b\n" "${YELLOW}Resetting auto-cpufreq configuration...${RC}"
|
||||||
|
$ESCALATION_TOOL auto-cpufreq --force reset
|
||||||
|
else
|
||||||
|
printf "%b\n" "${RED}auto-cpufreq is not installed, skipping removal.${RC}"
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
apply_or_remove_auto_cpufreq() {
|
||||||
|
# Prompt user for action
|
||||||
|
printf "%b\n" "${YELLOW}Do you want to apply the auto-cpufreq tweak or remove it?${RC}"
|
||||||
|
printf "%b\n" "${YELLOW}1) Apply tweak${RC}"
|
||||||
|
printf "%b\n" "${YELLOW}2) Remove tweak${RC}"
|
||||||
|
printf "%b" "Enter your choice [1/2]: "
|
||||||
|
read -r choice
|
||||||
|
|
||||||
|
case $choice in
|
||||||
|
1)
|
||||||
|
configureAutoCpufreq
|
||||||
|
;;
|
||||||
|
2)
|
||||||
|
removeAutoCpufreqTweak
|
||||||
|
;;
|
||||||
|
*)
|
||||||
|
printf "%b\n" "${RED}Invalid choice. Exiting.${RC}"
|
||||||
|
exit 1
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
|
||||||
|
printf "%b\n" "${GREEN}auto-cpufreq setup complete.${RC}"
|
||||||
|
}
|
||||||
|
|
||||||
|
checkEnv
|
||||||
|
checkEscalationTool
|
||||||
|
installAutoCpufreq
|
||||||
|
apply_or_remove_auto_cpufreq
|
|
@ -20,6 +20,22 @@ script = "ollama.sh"
|
||||||
name = "Service Manager"
|
name = "Service Manager"
|
||||||
script = "service-control.sh"
|
script = "service-control.sh"
|
||||||
|
|
||||||
|
[[data]]
|
||||||
|
name = "Auto Login"
|
||||||
|
script = "auto-login.sh"
|
||||||
|
|
||||||
|
[[data]]
|
||||||
|
name = "Bootable USB Creator"
|
||||||
|
script = "create-bootable-usb.sh"
|
||||||
|
|
||||||
|
[[data]]
|
||||||
|
name = "Auto Power Profiling"
|
||||||
|
script = "power-profile.sh"
|
||||||
|
|
||||||
|
[[data]]
|
||||||
|
name = "Timeshift Backup"
|
||||||
|
script = "timeshift.sh"
|
||||||
|
|
||||||
[[data]]
|
[[data]]
|
||||||
name = "Monitor Control"
|
name = "Monitor Control"
|
||||||
|
|
||||||
|
@ -73,3 +89,8 @@ script = "monitor-control/scale_monitor.sh"
|
||||||
name = "Reset Scaling"
|
name = "Reset Scaling"
|
||||||
script = "monitor-control/reset_scaling.sh"
|
script = "monitor-control/reset_scaling.sh"
|
||||||
matches = true
|
matches = true
|
||||||
|
|
||||||
|
[[data.entries]]
|
||||||
|
name = "Set Brightness"
|
||||||
|
script = "monitor-control/set_brightness.sh"
|
||||||
|
matches = true
|
162
tabs/utils/timeshift.sh
Normal file
162
tabs/utils/timeshift.sh
Normal file
|
@ -0,0 +1,162 @@
|
||||||
|
#!/bin/sh -e
|
||||||
|
|
||||||
|
. ../common-script.sh
|
||||||
|
|
||||||
|
# Function to install Timeshift
|
||||||
|
install_timeshift() {
|
||||||
|
clear
|
||||||
|
printf "%b\n" "${YELLOW}Checking if Timeshift is installed...${RC}"
|
||||||
|
|
||||||
|
if ! command_exists timeshift; then
|
||||||
|
case ${PACKAGER} in
|
||||||
|
pacman)
|
||||||
|
$ESCALATION_TOOL "${PACKAGER}" -S --noconfirm timeshift
|
||||||
|
;;
|
||||||
|
*)
|
||||||
|
$ESCALATION_TOOL "${PACKAGER}" install -y timeshift
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
else
|
||||||
|
echo "Timeshift is already installed."
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
# Function to display the menu
|
||||||
|
display_menu() {
|
||||||
|
clear
|
||||||
|
printf "%b\n" "${CYAN}Timeshift CLI Automation${RC}"
|
||||||
|
printf "%b\n" "${CYAN}\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-"
|
||||||
|
printf "%b\n" "${CYAN}1) List Snapshots${RC}"
|
||||||
|
printf "%b\n" "${CYAN}2) List Devices${RC}"
|
||||||
|
printf "%b\n" "${CYAN}3) Create Snapshot${RC}"
|
||||||
|
printf "%b\n" "${CYAN}4) Restore Snapshot${RC}"
|
||||||
|
printf "%b\n" "${CYAN}5) Delete Snapshot${RC}"
|
||||||
|
printf "%b\n" "${CYAN}6) Delete All Snapshots${RC}"
|
||||||
|
printf "%b\n" "${CYAN}7) Exit${RC}"
|
||||||
|
printf "%b\n" "${CYAN}\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-"
|
||||||
|
}
|
||||||
|
|
||||||
|
# Function to list snapshots
|
||||||
|
list_snapshots() {
|
||||||
|
printf "%b\n" "${CYAN}Listing snapshots...${RC}"
|
||||||
|
$ESCALATION_TOOL timeshift --list-snapshots
|
||||||
|
}
|
||||||
|
|
||||||
|
# Function to list devices
|
||||||
|
list_devices() {
|
||||||
|
printf "%b\n" "${CYAN}Listing available devices...${RC}"
|
||||||
|
$ESCALATION_TOOL timeshift --list-devices
|
||||||
|
}
|
||||||
|
|
||||||
|
# Function to create a new snapshot
|
||||||
|
create_snapshot() {
|
||||||
|
printf "%b" "${CYAN}Enter a comment for the snapshot (optional): ${RC}"
|
||||||
|
read -r COMMENT
|
||||||
|
printf "%b" "${CYAN}Enter snapshot tag (O,B,H,D,W,M) (leave empty for no tag): ${RC}"
|
||||||
|
read -r TAG
|
||||||
|
|
||||||
|
if [ -z "$COMMENT" ] && [ -z "$TAG" ]; then
|
||||||
|
echo "Creating snapshot with no comment or tag..."
|
||||||
|
$ESCALATION_TOOL timeshift --create
|
||||||
|
elif [ -z "$TAG" ]; then
|
||||||
|
echo "Creating snapshot with no tag..."
|
||||||
|
$ESCALATION_TOOL timeshift --create --comments "$COMMENT"
|
||||||
|
else
|
||||||
|
echo "Creating snapshot with tag: $TAG..."
|
||||||
|
$ESCALATION_TOOL timeshift --create --comments "$COMMENT" --tags "$TAG"
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [ $? -eq 0 ]; then
|
||||||
|
echo "Snapshot created successfully."
|
||||||
|
else
|
||||||
|
echo "Snapshot creation failed."
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
# Function to restore a snapshot
|
||||||
|
restore_snapshot() {
|
||||||
|
list_snapshots
|
||||||
|
|
||||||
|
printf "%b" "${CYAN}Enter the snapshot name you want to restore: ${RC}"
|
||||||
|
read -r SNAPSHOT
|
||||||
|
printf "%b" "${CYAN}Enter the target device (e.g., /dev/sda1): ${RC}"
|
||||||
|
read -r TARGET_DEVICE
|
||||||
|
printf "%b" "${CYAN}Do you want to skip GRUB reinstall? (yes/no): ${RC}"
|
||||||
|
read -r SKIP_GRUB
|
||||||
|
|
||||||
|
if [ "$SKIP_GRUB" = "yes" ]; then
|
||||||
|
$ESCALATION_TOOL timeshift --restore --snapshot "$SNAPSHOT" --target-device "$TARGET_DEVICE" --skip-grub --yes
|
||||||
|
else
|
||||||
|
printf "%b" "${CYAN}Enter GRUB device (e.g., /dev/sda): ${RC}"
|
||||||
|
read -r GRUB_DEVICE
|
||||||
|
$ESCALATION_TOOL timeshift --restore --snapshot "$SNAPSHOT" --target-device "$TARGET_DEVICE" --grub-device "$GRUB_DEVICE" --yes
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [ $? -eq 0 ]; then
|
||||||
|
printf "%b\n" "${GREEN}Snapshot restored successfully.${RC}"
|
||||||
|
else
|
||||||
|
printf "%b\n" "${RED}Snapshot restore failed.${RC}"
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
# Function to delete a snapshot
|
||||||
|
delete_snapshot() {
|
||||||
|
list_snapshots
|
||||||
|
|
||||||
|
printf "%b" "${CYAN}Enter the snapshot name you want to delete: ${RC}"
|
||||||
|
read -r SNAPSHOT
|
||||||
|
|
||||||
|
printf "%b\n" "${YELLOW}Deleting snapshot $SNAPSHOT...${RC}"
|
||||||
|
$ESCALATION_TOOL timeshift --delete --snapshot "$SNAPSHOT" --yes
|
||||||
|
|
||||||
|
if [ $? -eq 0 ]; then
|
||||||
|
printf "%b\n" "${GREEN}Snapshot deleted successfully.${RC}"
|
||||||
|
else
|
||||||
|
printf "%b\n" "${RED}Snapshot deletion failed.${RC}"
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
# Function to delete all snapshots
|
||||||
|
delete_all_snapshots() {
|
||||||
|
printf "%b\n" "${RED}WARNING: This will delete all snapshots!${RC}"
|
||||||
|
printf "%b" "${CYAN}Are you sure? (yes/no): ${RC}"
|
||||||
|
read -r CONFIRMATION
|
||||||
|
|
||||||
|
if [ "$CONFIRMATION" = "yes" ]; then
|
||||||
|
echo "Deleting all snapshots..."
|
||||||
|
$ESCALATION_TOOL timeshift --delete-all --yes
|
||||||
|
if [ $? -eq 0 ]; then
|
||||||
|
printf "%b\n" "${GREEN}All snapshots deleted successfully.${RC}"
|
||||||
|
else
|
||||||
|
printf "%b\n" "${RED}Failed to delete snapshots.${RC}"
|
||||||
|
fi
|
||||||
|
else
|
||||||
|
printf "%b\n" "${RED}Operation cancelled.${RC}"
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
main_menu() {
|
||||||
|
while true; do
|
||||||
|
display_menu
|
||||||
|
printf "%b" "${CYAN}Select an option (1-7): ${RC}"
|
||||||
|
read -r OPTION
|
||||||
|
|
||||||
|
case $OPTION in
|
||||||
|
1) list_snapshots ;;
|
||||||
|
2) list_devices ;;
|
||||||
|
3) create_snapshot ;;
|
||||||
|
4) restore_snapshot ;;
|
||||||
|
5) delete_snapshot ;;
|
||||||
|
6) delete_all_snapshots ;;
|
||||||
|
7) printf "%b\n" "${GREEN}Exiting...${RC}"; exit 0 ;;
|
||||||
|
*) printf "%b\n" "${RED}Invalid option. Please try again.${RC}" ;;
|
||||||
|
esac
|
||||||
|
printf "%b" "${CYAN}Press Enter to continue...${RC}"
|
||||||
|
read -r dummy
|
||||||
|
done
|
||||||
|
}
|
||||||
|
|
||||||
|
checkEnv
|
||||||
|
checkEscalationTool
|
||||||
|
install_timeshift
|
||||||
|
main_menu
|
Loading…
Reference in New Issue
Block a user