#!/bin/bash # Function for Flatpak apps close_flatpak() { local app="$1" flatpak kill "$app" for i in $(seq 1 5); do sleep 1 if ! pgrep -f "$app" > /dev/null; then echo "$app closed (attempt $i)" return fi echo "$app still running, retrying ($i/5)..." flatpak kill "$app" done echo "$app force closing (KILL)..." pkill -KILL -f "$app" pkill -KILL -f bwrap 2>/dev/null # kill sandbox container } # Function for native apps close_app() { local app="$1" pkill -TERM -f "$app" for i in $(seq 1 5); do sleep 1 if ! pgrep -f "$app" > /dev/null; then echo "$app closed (attempt $i)" return fi echo "$app still running, retrying ($i/5)..." pkill -TERM -f "$app" done echo "$app force closing (KILL)..." pkill -KILL -f "$app" } # Prompt read -r -p "Close all programs and shut down? [Y/n]: " response response="${response:-Y}" if [[ ! "$response" =~ ^[Yy]$ ]]; then echo "Cancelled." exit 0 fi # Close apps close_flatpak "com.discordapp.Discord" close_flatpak "io.github.lullabyX.sone" close_flatpak "rocks.shy.VacuumTube" close_app "firefox" # Close Steam if pgrep -f steam > /dev/null; then steam -shutdown for i in $(seq 1 5); do sleep 1 if ! pgrep -f steam > /dev/null; then echo "Steam closed (attempt $i)" break fi echo "Steam still running ($i/5)..." done pkill -KILL -f steam 2>/dev/null else echo "Steam not running, skipping..." fi # Countdown – Ctrl+C to cancel echo "All programs closed. Shutting down in:" for i in 3 2 1; do echo " $i..." sleep 1 done sudo shutdown -h now