From 36585012d59631f2b1cd6fa8d5cd14c709b7696b Mon Sep 17 00:00:00 2001 From: "Eshan Roy (Eshanized)" Date: Wed, 1 May 2024 17:47:38 +0530 Subject: [PATCH] feat(poll): terminal executer for Snigdha OS --- snigdhaos-launcher/PKGBUILD | 27 +++++++++ snigdhaos-launcher/launch-terminal | 96 ++++++++++++++++++++++++++++++ 2 files changed, 123 insertions(+) create mode 100644 snigdhaos-launcher/PKGBUILD create mode 100644 snigdhaos-launcher/launch-terminal diff --git a/snigdhaos-launcher/PKGBUILD b/snigdhaos-launcher/PKGBUILD new file mode 100644 index 00000000..b40c63c4 --- /dev/null +++ b/snigdhaos-launcher/PKGBUILD @@ -0,0 +1,27 @@ +# Maintainer: Eshan Roy + +pkgname=snigdhaos-launcher +org=Snigdha-OS +pkgdesc="Terminal Executer for Snigdha OS" +pkgver=1 +pkgrel=1 +arch=('any') +license=('MIT') +depends=( + 'linotify' +) +source=( + "launch-terminal" +) +sha256sums=( + 'SKIP' +) + +pkgver(){ + printf "r%s.%s" "$(git rev-list --count HEAD)" "$(git rev-parse --short HEAD)" +} + +package() { + install -Dm755 launch-terminal "$pkgdir"/usr/lib/snigdhaos/launch-terminal + install -d "$pkgdir"/var/lib/snigdhaos/tmp +} \ No newline at end of file diff --git a/snigdhaos-launcher/launch-terminal b/snigdhaos-launcher/launch-terminal new file mode 100644 index 00000000..2c65a851 --- /dev/null +++ b/snigdhaos-launcher/launch-terminal @@ -0,0 +1,96 @@ +#!/usr/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="$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\"" + +terminal="" +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 + ;; +esac + +if [ -z "$terminal" ] || ! command -v "$terminal" &>/dev/null; then + 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 15000 --app-name=Garuda\ Linux "No terminal installed" "No supported terminal emulator is installed. Please install a terminal emulator like Alacritty." + exit 1 +fi + +# Special kgx, thanks gnome +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 [ ! -z "$exitcode" ] && [ "$exitcode" != 130 ]; then + exit 2 +fi