this repo has no description
dotfiles
at main 74 lines 1.4 kB view raw
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