Files
dotfiles/.config/polybar/scripts/wifi_status.py

49 lines
1.8 KiB
Python
Executable File

#!/usr/bin/python3
import re
import subprocess
from collections import namedtuple
APListItem = namedtuple('APListItem', ('active', 'bssid', 'ssid', 'mode', 'channel', 'rate', 'signal', 'bars',
'security'))
ConListItem = namedtuple('ConListItem', ('name', 'uuid', 'type', 'device'))
def build_ap_items(output):
return map(lambda line: APListItem(*map(lambda entry: entry.replace('\\:', ':'), line)),
map(lambda line: re.split(r'(?<!\\):', line),
filter(None, output.split('\n'))))
def build_con_items(output):
return map(lambda line: ConListItem(*map(lambda entry: entry.replace('\\:', ':'), line)),
map(lambda line: re.split(r'(?<!\\):', line),
filter(None, output.split('\n'))))
if True:
# Get available wifi APs with nmcli
list_aps_command = ['nmcli', '-t', 'device', 'wifi', 'list']
list_aps_result = subprocess.run(list_aps_command, stdout=subprocess.PIPE)
list_aps_output = list_aps_result.stdout.decode('utf-8')
nm_items = list(build_ap_items(list_aps_output))
active_items = [item for item in nm_items if item.active == '*']
# # Get VPN status
list_con_command = ['nmcli', '-t', 'connection', 'show']
list_con_result = subprocess.run(list_con_command, stdout=subprocess.PIPE)
list_con_output = list_con_result.stdout.decode('utf-8')
con_items = list(build_con_items(list_con_output))
active_vpn = [item for item in con_items if item.type == 'vpn' and item.device.strip() != '']
if active_items:
active_item = active_items[0]
wifi_status = '{ssid} [{signal}%]'.format(signal=active_item.signal, ssid=active_item.ssid)
else:
wifi_status = 'disconnected'
vps_status = '[VPN]' if active_vpn else ''
print(''.join([wifi_status, vps_status]).strip())