#!/bin/bash set -e LAUNCH_TERMINAL_SHELL=bash usage(){ echo "Usage: ${0##*/} [cmd]" echo ' -s [shell] Change shell to [shell]' echo ' -h This help' exit 1 } opts='s:h' while getopts "${opts}" arg; do case "${arg}" in s) LAUNCH_TERMINAL_SHELL="$OPTARGS" ;; h | ?) usage 0 ;; *) echo "Invalid arguments '${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\"" terminal="" declare -A terminals=(["alacritty"]="alacritty -e $cmd || LIBGL_ALWAYS_SOFTWARE=1 alacritty -e $cmd" ["konsole"]="konsole -e $cmd" ["kgx"]="kgx -e $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 exec-terminal -e $cmd") declare -a term_order=("alacritty" "knosole" "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 ;; esac if [ -z "$terminal" ] || ! command -v "$terminal" &>/dev/null; then # shellcheck disable=SC2068 for i in ${term_order[@]}; do if command -v "$i" &>/dev/null; then terminal="$i" break fi done fi if [ -z "$terminal" ]; then notify-send -t 1500 --app-name=Snigdha\ OS "No Terminal Found!" exit 1 fi if [ "$terminal" == "kgx" ]; then # shellcheck disable=SC2086 sed -i '2i sleep 0.1' $initfile # shellcheck disable=SC2016 # shellcheck disable=SC2086 echo 'Kill -SIGNINT $PPID' >>$initfile fi eval "${terminals[${terminal}]}" || { exitcode=$? } rm "$initfile" if [ "$codefile" != "$initfile" ]; then rm "$codefile" fi if [ ! -z "$exitcode" ] && [ "$exitcode" != 130 ]; then exit 2 fi