this repo has no description
dotfiles
1#!/usr/bin/env ruby
2
3def color(percent)
4 if percent < 40
5 '#FF0000'
6 elsif percent < 60
7 '#FFAE00'
8 elsif percent < 80
9 '#FFF600'
10 else
11 '#00FF00'
12 end
13end
14
15def get_addr(interface)
16 has_addr = `ip -color=never addr show #{interface}` =~ /inet6? ([^\/]+)\//
17 has_addr ? $1 : nil
18end
19
20def get_wifi_data(interface)
21 conf = `iwconfig #{interface} 2>/dev/null`
22 has_ssid = conf =~ /ESSID:"(.+)"\s*$/
23 if has_ssid
24 ssid = $1
25 quality, max_quality = conf.match(/Link Quality=(\d+)\/(\d+)/).to_a[1..2].map(&:to_f)
26 strength = ((quality / max_quality) * 100).round
27 {
28 ssid: ssid,
29 strength: strength
30 }
31 else
32 {
33 ssid: interface,
34 strength: nil
35 }
36 end
37end
38
39def get_data(interface)
40 addr = get_addr(interface)
41 return nil unless addr
42 wifi_data = get_wifi_data(interface)
43 {
44 address: addr,
45 ssid: wifi_data[:ssid],
46 strength: wifi_data[:strength]
47 }
48end
49
50interfaces = ENV['BLOCK_INSTANCE']&.split(',') || %w[wlp4s0]
51
52data = interfaces.map { |i| get_data(i) }.compact.first
53
54exit if data.nil?
55
56address = data[:address]
57ssid = data[:ssid]
58strength = data[:strength]
59
60if strength
61 long = "#{ssid}: #{address} #{strength}%"
62else
63 long = "#{ssid}: #{address}"
64end
65short = "#{strength || 100}%"
66
67if ENV['BLOCK_BUTTON'].to_i == 2
68 require 'open3'
69 Open3.popen2('xclip -sel c') { |i, _, _| i.write address }
70end
71
72puts long
73puts short
74puts color strength if strength