summaryrefslogtreecommitdiffstats
path: root/hammerspoon/Spoons/SpeedMenu.spoon/init.lua
diff options
context:
space:
mode:
Diffstat (limited to 'hammerspoon/Spoons/SpeedMenu.spoon/init.lua')
-rw-r--r--hammerspoon/Spoons/SpeedMenu.spoon/init.lua111
1 files changed, 111 insertions, 0 deletions
diff --git a/hammerspoon/Spoons/SpeedMenu.spoon/init.lua b/hammerspoon/Spoons/SpeedMenu.spoon/init.lua
new file mode 100644
index 0000000..d4ecdac
--- /dev/null
+++ b/hammerspoon/Spoons/SpeedMenu.spoon/init.lua
@@ -0,0 +1,111 @@
+--- === SpeedMenu ===
+---
+--- Menubar netspeed meter
+---
+--- Download: [https://github.com/Hammerspoon/Spoons/raw/master/Spoons/SpeedMenu.spoon.zip](https://github.com/Hammerspoon/Spoons/raw/master/Spoons/SpeedMenu.spoon.zip)
+
+local obj={}
+obj.__index = obj
+
+-- Metadata
+obj.name = "SpeedMenu"
+obj.version = "1.0"
+obj.author = "ashfinal <ashfinal@gmail.com>"
+obj.homepage = "https://github.com/Hammerspoon/Spoons"
+obj.license = "MIT - https://opensource.org/licenses/MIT"
+
+function obj:init()
+ self.menubar = hs.menubar.new()
+ obj:rescan()
+end
+
+local function data_diff()
+ local in_seq = hs.execute(obj.instr)
+ local out_seq = hs.execute(obj.outstr)
+ local in_diff = in_seq - obj.inseq
+ local out_diff = out_seq - obj.outseq
+ if in_diff/1024 > 1024 then
+ obj.kbin = string.format("%6.2f", in_diff/1024/1024) .. ' mb/s'
+ else
+ obj.kbin = string.format("%6.2f", in_diff/1024) .. ' kb/s'
+ end
+ if out_diff/1024 > 1024 then
+ obj.kbout = string.format("%6.2f", out_diff/1024/1024) .. ' mb/s'
+ else
+ obj.kbout = string.format("%6.2f", out_diff/1024) .. ' kb/s'
+ end
+ local disp_str = '⥄ ' .. obj.kbout .. '\n⥂ ' .. obj.kbin
+ if obj.darkmode then
+ obj.disp_str = hs.styledtext.new(disp_str, {font={size=9.0, color={hex="#FFFFFF"}}})
+ else
+ obj.disp_str = hs.styledtext.new(disp_str, {font={size=9.0, color={hex="#000000"}}})
+ end
+ obj.menubar:setTitle(obj.disp_str)
+ obj.inseq = in_seq
+ obj.outseq = out_seq
+end
+
+--- SpeedMenu:rescan()
+--- Method
+--- Redetect the active interface, darkmode …And redraw everything.
+---
+
+function obj:rescan()
+ obj.interface = hs.network.primaryInterfaces()
+ obj.darkmode = hs.osascript.applescript('tell application "System Events"\nreturn dark mode of appearance preferences\nend tell')
+ local menuitems_table = {}
+ if obj.interface then
+ -- Inspect active interface and create menuitems
+ local interface_detail = hs.network.interfaceDetails(obj.interface)
+ if interface_detail.AirPort then
+ local ssid = interface_detail.AirPort.SSID
+ table.insert(menuitems_table, {
+ title = "SSID: " .. ssid,
+ tooltip = "Copy SSID to clipboard",
+ fn = function() hs.pasteboard.setContents(ssid) end
+ })
+ end
+ if interface_detail.IPv4 then
+ local ipv4 = interface_detail.IPv4.Addresses[1]
+ table.insert(menuitems_table, {
+ title = "IPv4: " .. ipv4,
+ tooltip = "Copy IPv4 to clipboard",
+ fn = function() hs.pasteboard.setContents(ipv4) end
+ })
+ end
+ if interface_detail.IPv6 then
+ local ipv6 = interface_detail.IPv6.Addresses[1]
+ table.insert(menuitems_table, {
+ title = "IPv6: " .. ipv6,
+ tooltip = "Copy IPv6 to clipboard",
+ fn = function() hs.pasteboard.setContents(ipv6) end
+ })
+ end
+ local macaddr = hs.execute('ifconfig ' .. obj.interface .. ' | grep ether | awk \'{print $2}\'')
+ table.insert(menuitems_table, {
+ title = "MAC Addr: " .. macaddr,
+ tooltip = "Copy MAC Address to clipboard",
+ fn = function() hs.pasteboard.setContents(macaddr) end
+ })
+ -- Start watching the netspeed delta
+ obj.instr = 'netstat -ibn | grep -e ' .. obj.interface .. ' -m 1 | awk \'{print $7}\''
+ obj.outstr = 'netstat -ibn | grep -e ' .. obj.interface .. ' -m 1 | awk \'{print $10}\''
+
+ obj.inseq = hs.execute(obj.instr)
+ obj.outseq = hs.execute(obj.outstr)
+
+ if obj.timer then
+ obj.timer:stop()
+ obj.timer = nil
+ end
+ obj.timer = hs.timer.doEvery(1, data_diff)
+ end
+ table.insert(menuitems_table, {
+ title = "Rescan Network Interfaces",
+ fn = function() obj:rescan() end
+ })
+ obj.menubar:setTitle("⚠︎")
+ obj.menubar:setMenu(menuitems_table)
+end
+
+return obj