diff options
Diffstat (limited to '.config/luastatus/wireless.lua')
| -rw-r--r-- | .config/luastatus/wireless.lua | 70 |
1 files changed, 70 insertions, 0 deletions
diff --git a/.config/luastatus/wireless.lua b/.config/luastatus/wireless.lua new file mode 100644 index 0000000..e3d53d7 --- /dev/null +++ b/.config/luastatus/wireless.lua @@ -0,0 +1,70 @@ +local MIN_DBM, MAX_DBM = -90, -20 +local COLOR_DIM = '#709080' + +local function clamp(x, lo, hi) + if x < lo then return lo end + if x > hi then return hi end + return x +end + +local function make_wifi_level(dbm) + dbm = clamp(dbm, MIN_DBM, MAX_DBM) + + -- Normalize to [0, 1] + local t = (dbm - MIN_DBM) / (MAX_DBM - MIN_DBM) + + local level + if t < 0.25 then + level = '' + elseif t < 0.50 then + level = '' + elseif t < 0.75 then + level = '' + else + level = '' + end + + return { + full_text = level, + color = COLOR_DIM, + } +end + +widget = { + plugin = 'network-linux', + opts = { + wireless = true, + timeout = 10, + }, + cb = function(t) + if not t then + return nil + end + local r = {} + for iface, params in pairs(t) do + if params.wireless then + if params.wireless.ssid then + r[#r + 1] = { + full_text = params.wireless.ssid, + color = COLOR_DIM, + } + end + if params.wireless.signal_dbm then + r[#r + 1] = make_wifi_level(params.wireless.signal_dbm) + end + elseif iface ~= 'lo' and (params.ipv4 or params.ipv6) then + r[#r + 1] = { + full_text = string.format('[%s]', iface), + color = COLOR_DIM, + } + end + end + return r + end, + event = [[ + local t = ... + if t.button == 1 then + os.execute('~/.local/bin/rofi-wifimenu &') + end + ]], +} |
