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:
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