scripts

custom scripts and utils
git clone git://git.pyratebeard.net/scripts.git
Log | Files | Refs | README

commit ef3ed77da366e75b91633184365a66ed6b776c8e
parent af0d9d80ec22737dd7d2ce3295d6b84f7496aba4
Author: pyratebeard <root@pyratebeard.net>
Date:   Sat,  3 May 2025 23:29:26 +0100

feat(consta): formally connect. rename and improvements

scan available ssids and find existing wpa_supp creds. use tailscale instead of vpn.

Diffstat:
Dbin/.local/bin/connect | 66------------------------------------------------------------------
Abin/.local/bin/consta | 83+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
2 files changed, 83 insertions(+), 66 deletions(-)

diff --git a/bin/.local/bin/connect b/bin/.local/bin/connect @@ -1,66 +0,0 @@ -#!/usr/bin/env zsh - -# vars -WIFI_DEV=$(iw dev | awk '$1=="Interface"{print $2}') -CONNECTION_FILE_PATH="$HOME/lib/documents/wifi/" -CONNECTION_FILE="${CONNECTION_FILE_PATH}${1}" -CONNECTION=$(echo ${CONNECTION_FILE} | awk -F\/ '{print $NF}') -VPN_KEY_PATH="$HOME/lib/key" -VPN_KEY="${VPN_KEY_PATH}/$(hostname -s).ovpn" - -if [ ! $1 ] ; then - echo "specify a connection file" - exit 1 -elif [ ! -f ${CONNECTION_FILE} ] ; then - echo "${CONNECTION_FILE} does not exist" - exit 1 -fi - -# disconnect -echo "disconnecting any running connection" -$HOME/bin/disconnect - -# bring dev up -if $(ip link show up | grep ${WIFI_DEV} >/dev/null) ; then - echo "${WIFI_DEV} is already up" -else - echo "bringing ${WIFI_DEV} up" - sudo ip link set ${WIFI_DEV} up >/dev/null -fi - -# connect using specified config -if [ -f ${CONNECTION_FILE} ] ; then - echo "connecting to ${CONNECTION}" - sudo wpa_supplicant -B -q -i ${WIFI_DEV} -c ${CONNECTION_FILE} >/dev/null 2>&1 -fi - -# get an ip -echo "starting dhcpcd" -sudo dhcpcd -b -4 ${WIFI_DEV} >/dev/null 2>&1 - -function use_vpn() { - echo "not at home, starting vpn" - sleep 20 - sudo openvpn --config ${VPN_KEY} --daemon >/dev/null 2>&1 - sudo systemd-tty-ask-password-agent - echo "waiting for vpn..." - sleep 60 - echo "nameserver 208.67.222.222 - nameserver 208.67.220.220" | sudo resolvconf -a ${WIFI_DEV}.inet - sudo ip route add 192.168.0.0/24 via 10.8.0.13 dev tun0 - while : - ping -q -c1 fortkickass >/dev/null - if [ $? -eq 0 ] ; then - echo "vpn is up" - break - else - echo "still waiting..." - sleep 2 - fi -} -# when remote bring ip vpn -case "${CONNECTION}" in - home) ;; |work) ;; - *) use_vpn ;; -esac - diff --git a/bin/.local/bin/consta b/bin/.local/bin/consta @@ -0,0 +1,83 @@ +#!/usr/bin/env zsh +# ██ +# ░██ +# █████ ██████ ███████ ██████ ██████ ██████ +# ██░░░██ ██░░░░██░░██░░░██ ██░░░░ ░░░██░ ░░░░░░██ +# ░██ ░░ ░██ ░██ ░██ ░██░░█████ ░██ ███████ +# ░██ ██░██ ░██ ░██ ░██ ░░░░░██ ░██ ██░░░░██ +# ░░█████ ░░██████ ███ ░██ ██████ ░░██ ░░████████ +# ░░░░░ ░░░░░░ ░░░ ░░ ░░░░░░ ░░ ░░░░░░░░ +# c o n n e c t ( w i f i ) s t a t i o n +# author ▓▒ pyratebeard +# code ▓▒ https://git.pyratebeard.net/scripts +# mirror ▓▒ https://gitlab.com/pyratebeard/scripts + +# requires `iw`, `tailscale`, and `sudo` permissions + +# vars +WIFI_DEV=$(iw dev | awk '$1=="Interface"{print $2}') +WPA_CONF_DIR="$XDG_CONFIG_HOME/wpa_supplicant" + +# exit if already connected +[[ $(iw dev ${WIFI_DEV} link) == "Not connected." ]] || exit 0 + +# ensure dev is up +ip link show up | grep ${WIFI_DEV} >/dev/null && \ + echo "${WIFI_DEV} is already up" || { + echo "bringing ${WIFI_DEV} up" + sudo ip link set ${WIFI_DEV} up >/dev/null +} + +# scan for available ssids +SSIDs=("${(@f)$(sudo iw dev ${WIFI_DEV} scan 2>/dev/null | \ + # tried to do this with `awk` but when an ssid + # included spaces it broke, my awk fu is not good enough + #awk '/SSID: / { for (i=2; i<=NF; i++) printf $i"\n" }')}") + grep SSID: | sed 's/\tSSID:\ //')}") + +# check if we have configured any of +# the available ssids and connect +for c in ${WPA_CONF_DIR}/*.conf ; do + # pull the ssid from conf file + # this allows filename to be anything + _ssid=$(grep ssid= $c | cut -d '"' -f2) + # `:t` to only print filename not path + # `:r` to drop extension + #(( ${SSIDs[(Ie)${c:t:r}]} )) && { + (( ${SSIDs[(Ie)${_ssid}]} )) && { + echo "connecting to ${c:t:r}" + sudo wpa_supplicant -B -q -i ${WIFI_DEV} -c ${c} >/dev/null 2>&1 && \ + break + } || { + # TODO prompt to connect to available network + # and generate wpa_supplicant conf + echo no networks found + exit 1 + } +done + +# get an ip +echo "starting dhcpcd" +ps -ef | grep dhcpcd | grep -v grep || \ + sudo dhcpcd -b -4 ${WIFI_DEV} >/dev/null 2>&1 + +# wait for connection then dns +i=0 +sp="-\|/" +echo "connecting" +while ! ping -c 1 -W 1 9.9.9.9 >/dev/null 2>&1 ; do + i=$(( (i+1) % 4 )) + printf "\b${sp:$i:1}" + sleep 0.1 +done +echo +echo "waiting for dns" +while ! dig pyratebeard.net >/dev/null 2>&1 ; do + i=$(( (i+1) % 4 )) + printf "\b${sp:$i:1}" + sleep 0.1 +done + +# always bring up tailscale +tailscale status >/dev/null 2>&1 || + sudo systemctl start tailscaled