mirror of
https://codeberg.org/tmayoff/.dotfiles.git
synced 2025-12-06 16:58:34 -05:00
234 lines
5.8 KiB
Lua
234 lines
5.8 KiB
Lua
local icons = require("icons")
|
|
local colors = require("colors")
|
|
local settings = require("settings")
|
|
|
|
-- Execute the event provider binary which provides the event "network_update"
|
|
-- for the network interface "en0", which is fired every 2.0 seconds.
|
|
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_up = sbar.add("item", "widgets.wifi1", {
|
|
position = "right",
|
|
padding_left = -5,
|
|
width = 0,
|
|
icon = {
|
|
padding_right = 0,
|
|
font = {
|
|
style = settings.font.style_map["Bold"],
|
|
size = 9.0,
|
|
},
|
|
string = icons.wifi.upload,
|
|
},
|
|
label = {
|
|
font = {
|
|
family = settings.font.numbers,
|
|
style = settings.font.style_map["Bold"],
|
|
size = 9.0,
|
|
},
|
|
color = colors.red,
|
|
string = "??? Bps",
|
|
},
|
|
y_offset = 4,
|
|
})
|
|
|
|
local wifi_down = sbar.add("item", "widgets.wifi2", {
|
|
position = "right",
|
|
padding_left = -5,
|
|
icon = {
|
|
padding_right = 0,
|
|
font = {
|
|
style = settings.font.style_map["Bold"],
|
|
size = 9.0,
|
|
},
|
|
string = icons.wifi.download,
|
|
},
|
|
label = {
|
|
font = {
|
|
family = settings.font.numbers,
|
|
style = settings.font.style_map["Bold"],
|
|
size = 9.0,
|
|
},
|
|
color = colors.blue,
|
|
string = "??? Bps",
|
|
},
|
|
y_offset = -4,
|
|
})
|
|
|
|
local wifi = sbar.add("item", "widgets.wifi.padding", {
|
|
position = "right",
|
|
label = { drawing = false },
|
|
})
|
|
|
|
-- Background around the item
|
|
local wifi_bracket = sbar.add("bracket", "widgets.wifi.bracket", {
|
|
wifi.name,
|
|
wifi_up.name,
|
|
wifi_down.name
|
|
}, {
|
|
background = { color = colors.bg1 },
|
|
popup = { align = "center", height = 30 }
|
|
})
|
|
|
|
local ssid = sbar.add("item", {
|
|
position = "popup." .. wifi_bracket.name,
|
|
icon = {
|
|
font = {
|
|
style = settings.font.style_map["Bold"]
|
|
},
|
|
string = icons.wifi.router,
|
|
},
|
|
width = popup_width,
|
|
align = "center",
|
|
label = {
|
|
font = {
|
|
size = 15,
|
|
style = settings.font.style_map["Bold"]
|
|
},
|
|
max_chars = 18,
|
|
string = "????????????",
|
|
},
|
|
background = {
|
|
height = 2,
|
|
color = colors.grey,
|
|
y_offset = -15
|
|
}
|
|
})
|
|
|
|
local hostname = sbar.add("item", {
|
|
position = "popup." .. wifi_bracket.name,
|
|
icon = {
|
|
align = "left",
|
|
string = "Hostname:",
|
|
width = popup_width / 2,
|
|
},
|
|
label = {
|
|
max_chars = 20,
|
|
string = "????????????",
|
|
width = popup_width / 2,
|
|
align = "right",
|
|
}
|
|
})
|
|
|
|
local ip = sbar.add("item", {
|
|
position = "popup." .. wifi_bracket.name,
|
|
icon = {
|
|
align = "left",
|
|
string = "IP:",
|
|
width = popup_width / 2,
|
|
},
|
|
label = {
|
|
string = "???.???.???.???",
|
|
width = popup_width / 2,
|
|
align = "right",
|
|
}
|
|
})
|
|
|
|
local mask = sbar.add("item", {
|
|
position = "popup." .. wifi_bracket.name,
|
|
icon = {
|
|
align = "left",
|
|
string = "Subnet mask:",
|
|
width = popup_width / 2,
|
|
},
|
|
label = {
|
|
string = "???.???.???.???",
|
|
width = popup_width / 2,
|
|
align = "right",
|
|
}
|
|
})
|
|
|
|
local router = sbar.add("item", {
|
|
position = "popup." .. wifi_bracket.name,
|
|
icon = {
|
|
align = "left",
|
|
string = "Router:",
|
|
width = popup_width / 2,
|
|
},
|
|
label = {
|
|
string = "???.???.???.???",
|
|
width = popup_width / 2,
|
|
align = "right",
|
|
},
|
|
})
|
|
|
|
sbar.add("item", { position = "right", width = settings.group_paddings })
|
|
|
|
wifi_up:subscribe("network_update", function(env)
|
|
local up_color = (env.upload == "000 Bps") and colors.grey or colors.red
|
|
local down_color = (env.download == "000 Bps") and colors.grey or colors.blue
|
|
wifi_up:set({
|
|
icon = { color = up_color },
|
|
label = {
|
|
string = env.upload,
|
|
color = up_color
|
|
}
|
|
})
|
|
wifi_down:set({
|
|
icon = { color = down_color },
|
|
label = {
|
|
string = env.download,
|
|
color = down_color
|
|
}
|
|
})
|
|
end)
|
|
|
|
wifi:subscribe({"wifi_change", "system_woke"}, function(env)
|
|
sbar.exec("ipconfig getifaddr en0", function(ip)
|
|
local connected = not (ip == "")
|
|
wifi:set({
|
|
icon = {
|
|
string = connected and icons.wifi.connected or icons.wifi.disconnected,
|
|
color = connected and colors.white or colors.red,
|
|
},
|
|
})
|
|
end)
|
|
end)
|
|
|
|
local function hide_details()
|
|
wifi_bracket:set({ popup = { drawing = false } })
|
|
end
|
|
|
|
local function toggle_details()
|
|
local should_draw = wifi_bracket:query().popup.drawing == "off"
|
|
if should_draw then
|
|
wifi_bracket: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 'Subnet mask: ' '/^Subnet mask: / {print $2}'", function(result)
|
|
mask: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_up:subscribe("mouse.clicked", toggle_details)
|
|
wifi_down:subscribe("mouse.clicked", toggle_details)
|
|
wifi:subscribe("mouse.clicked", toggle_details)
|
|
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
|
|
|
|
ssid:subscribe("mouse.clicked", copy_label_to_clipboard)
|
|
hostname:subscribe("mouse.clicked", copy_label_to_clipboard)
|
|
ip:subscribe("mouse.clicked", copy_label_to_clipboard)
|
|
mask:subscribe("mouse.clicked", copy_label_to_clipboard)
|
|
router:subscribe("mouse.clicked", copy_label_to_clipboard)
|