this repo has no description
dotfiles

[i3] Handle alternative network interfaces

+46 -13
+1 -1
config/i3blocks/config
··· 83 83 [sharp-wifi] 84 84 command=/home/sharparam/.dotfiles/i3blocks/sharp-wifi.rb 85 85 label= 86 - instance=wlp4s0 86 + instance=wlp4s0,enp0s31f6,enp0s20f0u2 87 87 interval=10 88 88 89 89 # Memory usage
+45 -12
i3blocks/sharp-wifi.rb
··· 12 12 end 13 13 end 14 14 15 - interface = ENV['BLOCK_INSTANCE'] || 'wlp4s0' 15 + def get_addr(interface) 16 + has_addr = `ip -color=never addr show #{interface}` =~ /inet6? ([^\/]+)\// 17 + has_addr ? $1 : nil 18 + end 16 19 17 - has_addr = `ip addr show #{interface}` =~ /inet6? ([^\/]+)\// 20 + def 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 37 + end 18 38 19 - exit unless has_addr 20 - 21 - address = $1 39 + def 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 + } 48 + end 22 49 23 - conf = `iwconfig #{interface}` 50 + interfaces = ENV['BLOCK_INSTANCE']&.split(',') || %w[wlp4s0] 24 51 25 - ssid = conf.match(/ESSID:"(.+)"\s*$/)[1].to_s 52 + data = interfaces.map { |i| get_data(i) }.compact.first 26 53 27 - quality, max_quality = conf.match(/Link Quality=(\d+)\/(\d+)/).to_a[1..2].map(&:to_f) 54 + exit if data.nil? 28 55 29 - strength = ((quality / max_quality) * 100).round 56 + address = data[:address] 57 + ssid = data[:ssid] 58 + strength = data[:strength] 30 59 31 - long = "#{ssid}: #{address} #{strength}%" 32 - short = "#{strength}%" 60 + if strength 61 + long = "#{ssid}: #{address} #{strength}%" 62 + else 63 + long = "#{ssid}: #{address}" 64 + end 65 + short = "#{strength || 100}%" 33 66 34 67 if ENV['BLOCK_BUTTON'].to_i == 2 35 68 require 'open3' ··· 38 71 39 72 puts long 40 73 puts short 41 - puts color strength 74 + puts color strength if strength