summaryrefslogtreecommitdiff
path: root/dots/sketchybar/.config/sketchybar/items/widgets/wifi.lua
diff options
context:
space:
mode:
Diffstat (limited to 'dots/sketchybar/.config/sketchybar/items/widgets/wifi.lua')
-rw-r--r--dots/sketchybar/.config/sketchybar/items/widgets/wifi.lua261
1 files changed, 261 insertions, 0 deletions
diff --git a/dots/sketchybar/.config/sketchybar/items/widgets/wifi.lua b/dots/sketchybar/.config/sketchybar/items/widgets/wifi.lua
new file mode 100644
index 0000000..551a4da
--- /dev/null
+++ b/dots/sketchybar/.config/sketchybar/items/widgets/wifi.lua
@@ -0,0 +1,261 @@
+local constants = require("constants")
+local settings = require("config.settings")
+
+local popupWidth <const> = settings.dimens.graphics.popup.width + 20
+
+sbar.exec(
+ "killall network_load >/dev/null; $CONFIG_DIR/bridge/network_load/bin/network_load en0 network_update 2.0"
+)
+
+local wifiUp = sbar.add("item", constants.items.WIFI .. ".up", {
+ position = "right",
+ width = 0,
+ icon = {
+ padding_left = 0,
+ padding_right = 0,
+ font = {
+ style = settings.fonts.styles.bold,
+ size = 10.0,
+ },
+ string = settings.icons.text.wifi.upload,
+ },
+ label = {
+ font = {
+ family = settings.fonts.numbers,
+ style = settings.fonts.styles.bold,
+ size = 10.0,
+ },
+ color = settings.colors.orange,
+ string = "??? Bps",
+ },
+ y_offset = 4,
+})
+
+local wifiDown = sbar.add("item", constants.items.WIFI .. ".down", {
+ position = "right",
+ icon = {
+ padding_left = 0,
+ padding_right = 0,
+ font = {
+ style = settings.fonts.styles.bold,
+ size = 10.0,
+ },
+ string = settings.icons.text.wifi.download,
+ },
+ label = {
+ font = {
+ family = settings.fonts.numbers,
+ style = settings.fonts.styles.bold,
+ size = 10,
+ },
+ color = settings.colors.blue,
+ string = "??? Bps",
+ },
+ y_offset = -4,
+})
+
+local wifi = sbar.add("item", constants.items.WIFI .. ".padding", {
+ position = "right",
+ label = { drawing = false },
+ padding_right = 0,
+})
+
+local wifiBracket = sbar.add("bracket", constants.items.WIFI .. ".bracket", {
+ wifi.name,
+ wifiUp.name,
+ wifiDown.name
+}, {
+ popup = { align = "center" }
+})
+
+local ssid = sbar.add("item", {
+ align = "center",
+ position = "popup." .. wifiBracket.name,
+ width = popupWidth,
+ height = 16,
+ icon = {
+ string = settings.icons.text.wifi.router,
+ font = {
+ style = settings.fonts.styles.bold
+ },
+ },
+ label = {
+ font = {
+ style = settings.fonts.styles.bold,
+ size = settings.dimens.text.label,
+ },
+ max_chars = 18,
+ string = "????????????",
+ },
+})
+
+local hostname = sbar.add("item", {
+ position = "popup." .. wifiBracket.name,
+ background = {
+ height = 16,
+ },
+ icon = {
+ align = "left",
+ string = "Hostname:",
+ width = popupWidth / 2,
+ font = {
+ size = settings.dimens.text.label
+ },
+ },
+ label = {
+ max_chars = 20,
+ string = "????????????",
+ width = popupWidth / 2,
+ align = "right",
+ }
+})
+
+local ip = sbar.add("item", {
+ position = "popup." .. wifiBracket.name,
+ background = {
+ height = 16,
+ },
+ icon = {
+ align = "left",
+ string = "IP:",
+ width = popupWidth / 2,
+ font = {
+ size = settings.dimens.text.label
+ },
+ },
+ label = {
+ align = "right",
+ string = "???.???.???.???",
+ width = popupWidth / 2,
+ }
+})
+
+local router = sbar.add("item", {
+ position = "popup." .. wifiBracket.name,
+ background = {
+ height = 16,
+ },
+ icon = {
+ align = "left",
+ string = "Router:",
+ width = popupWidth / 2,
+ font = {
+ size = settings.dimens.text.label
+ },
+ },
+ label = {
+ align = "right",
+ string = "???.???.???.???",
+ width = popupWidth / 2,
+ },
+})
+
+sbar.add("item", { position = "right", width = settings.dimens.padding.item })
+
+wifiUp:subscribe("network_update", function(env)
+ local upColor = (env.upload == "000 Bps") and settings.colors.grey or settings.colors.orange
+ local downColor = (env.download == "000 Bps") and settings.colors.grey or settings.colors.blue
+
+ wifiUp:set({
+ icon = { color = upColor },
+ label = {
+ string = env.upload,
+ color = upColor
+ }
+ })
+ wifiDown:set({
+ icon = { color = downColor },
+ label = {
+ string = env.download,
+ color = downColor
+ }
+ })
+end)
+
+wifi:subscribe({ "wifi_change", "system_woke", "forced" }, function(env)
+ wifi:set({
+ icon = {
+ string = settings.icons.text.wifi.disconnected,
+ color = settings.colors.magenta,
+ }
+ })
+
+ sbar.exec([[ipconfig getifaddr en0]], function(ip)
+ local ipConnected = not (ip == "")
+
+ local wifiIcon
+ local wifiColor
+
+ if ipConnected then
+ wifiIcon = settings.icons.text.wifi.connected
+ wifiColor = settings.colors.white
+ end
+
+ wifi:set({
+ icon = {
+ string = wifiIcon,
+ color = wifiColor,
+ }
+ })
+
+ sbar.exec([[sleep 2; scutil --nwi | grep -m1 'utun' | awk '{ print $1 }']], function(vpn)
+ local isVPNConnected = not (vpn == "")
+
+ if isVPNConnected then
+ wifiIcon = settings.icons.text.wifi.vpn
+ wifiColor = settings.colors.green
+ end
+
+ wifi:set({
+ icon = {
+ string = wifiIcon,
+ color = wifiColor,
+ }
+ })
+ end)
+ end)
+end)
+
+local function hideDetails()
+ wifiBracket:set({ popup = { drawing = false } })
+end
+
+local function toggleDetails()
+ local shouldDrawDetails = wifiBracket:query().popup.drawing == "off"
+
+ if shouldDrawDetails then
+ wifiBracket:set({ popup = { drawing = true } })
+ sbar.exec("networksetup -getcomputername", function(result)
+ hostname:set({ label = result })
+ end)
+ sbar.exec("ipconfig getifaddr en0", function(result)
+ ip:set({ label = result })
+ end)
+ sbar.exec("ipconfig getsummary en0 | awk -F ' SSID : ' '/ SSID : / {print $2}'", function(result)
+ ssid:set({ label = result })
+ end)
+ sbar.exec("networksetup -getinfo Wi-Fi | awk -F 'Router: ' '/^Router: / {print $2}'", function(result)
+ router:set({ label = result })
+ end)
+ else
+ hideDetails()
+ end
+end
+
+local function copyLabelToClipboard(env)
+ local label = sbar.query(env.NAME).label.value
+ sbar.exec("echo \"" .. label .. "\" | pbcopy")
+ sbar.set(env.NAME, { label = { string = settings.icons.text.clipboard, align = "center" } })
+ sbar.delay(1, function()
+ sbar.set(env.NAME, { label = { string = label, align = "right" } })
+ end)
+end
+
+wifiUp:subscribe("mouse.clicked", toggleDetails)
+wifiDown:subscribe("mouse.clicked", toggleDetails)
+wifi:subscribe("mouse.clicked", toggleDetails)
+
+ssid:subscribe("mouse.clicked", copyLabelToClipboard)
+hostname:subscribe("mouse.clicked", copyLabelToClipboard)
+ip:subscribe("mouse.clicked", copyLabelToClipboard)
+router:subscribe("mouse.clicked", copyLabelToClipboard)