about summary refs log tree commit diff
path: root/.config/luastatus/wireless.lua
diff options
context:
space:
mode:
Diffstat (limited to '.config/luastatus/wireless.lua')
-rw-r--r--.config/luastatus/wireless.lua70
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
+    ]],
+}