Files
snigdhaos-system-config/usr/bin/launch-terminal

113 lines
2.7 KiB
Bash
Executable File

#!/usr/bin/bash
# Author: Garuda Linux
# Adopted for Snigdha OS
set -euo pipefail # Enable strict error handling
LAUNCH_TERMINAL_SHELL=bash
usage() {
echo "Usage: ${0##*/} [options] [command]"
echo
echo "Options:"
echo " -s [shell] Change shell to [shell] (default: bash)"
echo " -h Show this help message"
echo
echo "Example:"
echo " ${0##*/} -s zsh 'echo Hello, World!'"
echo " ${0##*/} -h"
exit 1
}
opts='s:h'
while getopts "${opts}" arg; do
case "${arg}" in
s) LAUNCH_TERMINAL_SHELL="$OPTARG" ;;
h | ?) usage 0 ;;
*)
echo "invalid argument '${arg}'"
usage 1
;;
esac
done
shift $(($OPTIND - 1))
initfile=$(mktemp)
codefile=$initfile
echo "#!/usr/bin/env bash" > "$initfile"
if [ "$LAUNCH_TERMINAL_SHELL" != "bash" ]; then
codefile=$(mktemp)
echo "$LAUNCH_TERMINAL_SHELL $codefile" >> "$initfile"
fi
echo "$1" >> "$codefile"
chmod +x "$initfile"
cmd="\"$initfile\""
declare -A terminals=(
["alacritty"]="alacritty -e $cmd || LIBGL_ALWAYS_SOFTWARE=1 alacritty -e $cmd"
["konsole"]="konsole -e $cmd"
["kgx"]="kgx -- $cmd"
["gnome-terminal"]="gnome-terminal --wait -- $cmd"
["xfce4-terminal"]="xfce4-terminal --disable-server --command '$cmd'"
["qterminal"]="qterminal -e $cmd"
["lxterminal"]="lxterminal -e $cmd"
["mate-terminal"]="mate-terminal --disable-factory -e $cmd"
["xterm"]="xterm -e $cmd"
["foot"]="foot -T launch-terminal -e $cmd"
)
declare -a term_order=(
"alacritty" "konsole" "kgx" "gnome-terminal" "mate-terminal"
"xfce4-terminal" "qterminal" "lxterminal" "xterm" "foot"
)
case "$XDG_CURRENT_DESKTOP" in
KDE) terminal=konsole ;;
GNOME)
if command -v "kgx" &> /dev/null; then
terminal=kgx
else
terminal=gnome-terminal
fi
;;
XFCE) terminal=xfce4-terminal ;;
LXQt) terminal=qterminal ;;
MATE) terminal=mate-terminal ;;
*)
for i in "${term_order[@]}"; do
if command -v "$i" &> /dev/null; then
terminal=$i
break
fi
done
;;
esac
if [ -z "$terminal" ]; then
notify-send -t 15000 --app-name=Snigdha\ OS "No terminal installed" "No supported terminal emulator is installed. Please install a terminal emulator like Alacritty."
exit 1
fi
if [ "$terminal" = "kgx" ]; then
sed -i '2i sleep 0.1' "$initfile"
echo 'kill -SIGINT $PPID' >> "$initfile"
fi
eval "${terminals[$terminal]}" || {
exitcode=$?
}
rm "$initfile"
if [ "$codefile" != "$initfile" ]; then
rm "$codefile"
fi
if [ -n "$exitcode" ] && [ "$exitcode" != 130 ]; then
exit 2
fi