#!/bin/sh # TODO: rid ourselves of plaintext configs which can have sensitive network keys export cfg_loc="/home/shockrah/.config/wifi-configs/" export usb_iface='enx9cebe828e98a' export default_iface='wlp1s0' export iface=$default_iface debug_kill= # wpa_supplicant and dhclient are only exposed to root by default if [ "`id -u`" -ne 0 ] then echo 'Must be ran as root' exit 1 fi __write_config_personal() { printf "network={ ssid=\"$2\" psk=\"$3\" }\n" > "$cfg_loc/$1" } __write_config_enterprise() { printf "network={ ssid=\"$1\" scan_ssid=1 key_mgmt=WPA-EAP identity=\"$2\" password=\"$3\" eap=PEAP phase1=\"peaplabel=0\" phase2=\"auth=MSCHAPV2\" }" > "$cfg_loc/$4" } __kill_old() { if [ -z "$debug_kill" ] then kill "`pgrep wpa_supplicant`" dhclient -r else echo 'Not killing anything' fi } __connect_config() { if [ -z "$debug_kill" ] then if [ ! -f "$1" ]; then echo Config not found exit 1 fi __kill_old wpa_supplicant -B -i $iface -c "$1" dhclient $iface else echo Not connecting to anything fi } select_interface() { _iface="`ip a \ | awk '{print $2}' \ | grep -E '^[a-z0-9]+:$' \ | sed 's/://g' \ | dmenu -i -p 'Select interface to connect on'`" if [ -z "$_iface" ];then exit 1 fi iface=$_iface } remove_old_config() { name="`ls $cfg_loc | dmenu -i -p 'Name of config to remove'`" rm -f "$cfg_loc/$name" } reconnect_old_config() { name="`ls $cfg_loc | dmenu -i -p 'Choose config to connect with'`" if [ ! -z "$name" ] then __connect_config "$cfg_loc/$name" fi } create_new_config() { name="`echo '' | dmenu -i -p 'Name of new config'`" type="`printf "WPA2 Personal\nWPA2 Enterprise" | dmenu -i -p 'Connection Type'`" mkdir -p $cfg_loc case $type in *Personal) ssid="`echo '' | dmenu -p 'SSID'`" psk="`echo '' | dmenu -p 'Passkey'`" __write_config_personal "$name" "$ssid" "$psk" ;; *Enterprise) ssid="`echo '' | dmenu -p 'SSID'`" identity="`echo '' | dmenu -p 'Identity'`" psk="`echo '' | dmenu -p 'Passkey'`" __write_config_enterprise $ssid $identity $psk $name ;; esac } option=`printf "Remove\nConnect\nNew\nDiconnect\n" | dmenu -i -p 'Options:'` case $option in New) create_new_config;; Remove) remove_old_config;; Connect) select_interface; echo 'yes'; reconnect_old_config ;; Disconnect) __kill_old;; esac