commit 96f78957d1a527fa49b0ad633214322e84cc5fa9 Author: Artyom Titov Date: Wed Sep 9 20:05:09 2026 +0300 Initial commit diff --git a/nstart.zsh b/nstart.zsh new file mode 100755 index 0000000..b7941ee --- /dev/null +++ b/nstart.zsh @@ -0,0 +1,115 @@ +#!/bin/zsh + +spinner() { + local pid=$1 + local text=$2 + local -a frames=( '⠋' '⠙' '⠹' '⠸' '⠼' '⠴' '⠦' '⠧' '⠇' '⠏' ) + local i=1 + + while kill -0 "$pid" 2>/dev/null; do + printf "\r%s %s" "${frames[$i]}" "$text" + (( i = i % $#frames + 1 )) + sleep 0.08 + done +} + +print_numbered_list() { + local i + local -a items=( "${(@P)1}" ) + for (( i=1; i <= ${#items}; i++ )); do + items[$i]="%B[$i]%b$items[$i]" + done + print -P -C 4 "${items[@]}" +} + +if [[ "$1" == "-h" || "$1" == "--help" ]]; then + +fi + +connections=( ${(f)"$(nmcli --terse --fields NAME connection show)"} ) + +typeset -T DEFAULT_CONNECTIONS_NM default_con +if [[ "$default_con" == "" ]]; then + #if you can't export zsh array to environment, replace this fallback values + default_con=(home wg0 work wifi iPhone) +fi + +for (( i=$#default_con; i>=1; i-- )); do + local flag=false + + for con in $connections; do + if [[ "$default_con[$i]" == "$con" ]]; then + flag=true + break + fi + done + + if [[ "$flag" == "false" ]]; then + default_con[$i]=() + fi +done + +print -n "Found" +for (( i=1; i <= $#default_con; i++ )); do + print -nP " %B[$i]%b$default_con[$i]" +done +print " from default connections" + +connection_number=0 +connection_promt=" Connect to [1]? Otherwise enter connection's number (1-$#default_con) + or 'n' for choosing from all connections [1/n]: " +read -r "connection_number?${connection_promt}" + +connection_to_run="None" + +if [[ -z "$connection_number" ]]; then + connection_to_run=$default_con[1] +elif (( connection_number )); then + connection_to_run=$default_con[$connection_number] +elif [[ "$connection_number" == "n" ]]; then + print "Select connections from below:" + print_numbered_list connections + + read -r "connection_number_? + Enter a number: " + connection_to_run=$connections[$connection_number_] +else + connection_to_run=$connection_number +fi + +nmcli c u "$connection_to_run" 1> /dev/null 2>&1 & +nmcli_pid=$! + +spinner "$nmcli_pid" "Connecting to '$connection_to_run'..." + +if wait "$nmcli_pid"; then + print -P "\r%E%F{green}✔%f Connected to '$connection_to_run'" +else + print -P "\r%F{red}✘%fFailed to connect to '$connection_to_run'" +fi + + +## Starting xray proxy + +#checking if xray running +if pgrep xray 1>/dev/null; then + print "Xray is running already. No need in duplication." + exit 0 +fi + +# +if [[ -n "$XRAY_CONFIG_FILE" ]]; then + print "\$XRAY_CONFIG_FILE is defined. Using this." +else + print "\$XRAY_CONFIG_FILE is not defined. Write path to xray's config file:" + read -t 60 XRAY_CONFIG_FILE + if [[ ! -n "$XRAY_CONFIG_FILE" ]]; then + print -P "Timeout for promting XRAY_CONFIG_FILE.\nScript exiting." + exit 1 + fi +fi + +print -n "Starting quietly xray with config '$XRAY_CONFIG_FILE'..." +xray run -c $XRAY_CONFIG_FILE 1>/dev/null 2>/dev/null & +print -P "\r%E%B%F{green}✔%f%b xray has started" +exit 0