143 lines
3.3 KiB
Lua
143 lines
3.3 KiB
Lua
local icons = require "icons"
|
|
local colors = require("colors").sections.widgets.wifi
|
|
|
|
sbar.exec(
|
|
"killall network_load >/dev/null; $CONFIG_DIR/helpers/event_providers/network_load/bin/network_load en0 network_update 2.0"
|
|
)
|
|
|
|
local popup_width = 250
|
|
|
|
local wifi = sbar.add("item", "widgets.wifi", {
|
|
position = "right",
|
|
padding_right = 8,
|
|
padding_left = 0,
|
|
icon = {
|
|
color = colors.icon,
|
|
padding_left = 8
|
|
},
|
|
label = {
|
|
padding_right = 8,
|
|
},
|
|
popup = {
|
|
align = "center",
|
|
height = 30,
|
|
y_offset = 2,
|
|
},
|
|
})
|
|
|
|
local ip = sbar.add("item", {
|
|
position = "popup." .. wifi.name,
|
|
icon = {
|
|
align = "left",
|
|
string = "IP:",
|
|
width = popup_width / 2,
|
|
},
|
|
label = {
|
|
string = "???.???.???.???",
|
|
width = popup_width / 2,
|
|
align = "right",
|
|
},
|
|
background = { drawing = false },
|
|
})
|
|
|
|
local router = sbar.add("item", {
|
|
position = "popup." .. wifi.name,
|
|
icon = {
|
|
align = "left",
|
|
string = "Router:",
|
|
width = popup_width / 2,
|
|
},
|
|
label = {
|
|
string = "???.???.???.???",
|
|
width = popup_width / 2,
|
|
align = "right",
|
|
},
|
|
background = { drawing = false },
|
|
})
|
|
|
|
wifi:subscribe({ "wifi_change", "system_woke", "forced" }, function()
|
|
sbar.exec([[ipconfig getsummary en0 | awk -F ' SSID : ' '/ SSID : / {print $2}']], function(wifi_name)
|
|
local is_connected = not (wifi_name == "")
|
|
wifi:set {
|
|
icon = {
|
|
string = is_connected and icons.wifi.connected or icons.wifi.disconnected,
|
|
},
|
|
label = {
|
|
string = is_connected and wifi_name or "",
|
|
}
|
|
}
|
|
|
|
sbar.exec([[sleep 2; scutil --nwi | grep -m1 'utun' | awk '{ print $1 }']], function(vpn)
|
|
local is_vpn_connected = not (vpn == "")
|
|
|
|
if is_vpn_connected then
|
|
wifi:set {
|
|
icon = {
|
|
string = icons.wifi.vpn,
|
|
color = colors.green,
|
|
},
|
|
}
|
|
end
|
|
end)
|
|
end)
|
|
end)
|
|
|
|
local function hide_details()
|
|
wifi:set { popup = { drawing = false } }
|
|
end
|
|
|
|
local function toggle_details()
|
|
local should_draw = wifi:query().popup.drawing == "off"
|
|
if should_draw then
|
|
wifi:set { popup = { drawing = true } }
|
|
sbar.exec("ipconfig getifaddr en0", function(result)
|
|
ip:set { label = result }
|
|
end)
|
|
sbar.exec("networksetup -getinfo Wi-Fi | awk -F 'Router: ' '/^Router: / {print $2}'", function(result)
|
|
router:set { label = result }
|
|
end)
|
|
else
|
|
hide_details()
|
|
end
|
|
end
|
|
|
|
wifi:subscribe("mouse.clicked", function()
|
|
sbar.animate("tanh", 8, function()
|
|
wifi:set({
|
|
background = {
|
|
shadow = {
|
|
distance = 0,
|
|
},
|
|
},
|
|
y_offset = -4,
|
|
padding_left = 4,
|
|
padding_right = 4,
|
|
})
|
|
wifi:set({
|
|
background = {
|
|
shadow = {
|
|
distance = 4,
|
|
},
|
|
},
|
|
y_offset = 0,
|
|
padding_left = 0,
|
|
padding_right = 8,
|
|
})
|
|
end)
|
|
toggle_details()
|
|
end)
|
|
|
|
-- wifi:subscribe("mouse.exited.global", hide_details)
|
|
|
|
local function copy_label_to_clipboard(env)
|
|
local label = sbar.query(env.NAME).label.value
|
|
sbar.exec('echo "' .. label .. '" | pbcopy')
|
|
sbar.set(env.NAME, { label = { string = icons.clipboard, align = "center" } })
|
|
sbar.delay(1, function()
|
|
sbar.set(env.NAME, { label = { string = label, align = "right" } })
|
|
end)
|
|
end
|
|
|
|
ip:subscribe("mouse.clicked", copy_label_to_clipboard)
|
|
router:subscribe("mouse.clicked", copy_label_to_clipboard)
|