swiftbar updates
change
commit 36f74a1fe2de107c640ba04def80e920bed641cd
author Alpha Chen <alpha.chen@brilliant.org>
date
parent b340b499
diff --git a/macos/swift-bar/switch-audio.30s.rb b/macos/swift-bar/switch-audio.30s.rb
index 1c83d6bb..dfd9bc99 100755
--- a/macos/swift-bar/switch-audio.30s.rb
+++ b/macos/swift-bar/switch-audio.30s.rb
@@ -4,48 +4,48 @@
 # <swiftbar.hideRunInTerminal>true</swiftbar.hideRunInTerminal>
 # <swiftbar.hideLastUpdated>true</swiftbar.hideLastUpdated>
 # <swiftbar.hideDisablePlugin>true</swiftbar.hideDisablePlugin>
+# <swiftbar.hideSwiftBar>true</swiftbar.hideSwiftBar>
 # <swiftbar.refreshOnOpen>true</swiftbar.refreshOnOpen>
 
 require "json"
 
-switch_audio_source = "/opt/homebrew/bin/SwitchAudioSource"
+SWITCH_AUDIO_SOURCE = "/opt/homebrew/bin/SwitchAudioSource"
+SOURCES = {
+  headset: { icon: "headphones", input: "Antlion USB Microphone", output: "CalDigit Thunderbolt 3 Audio" },
+  laptop: { icon: "play.laptopcomputer", input: "MacBook Pro Microphone", output: "MacBook Pro Speakers" },
+}
 
 unless ARGV.empty?
-  type, id = ARGV
-  `#{switch_audio_source} -t #{type} -i #{id}`
+  audio_sources = `#{SWITCH_AUDIO_SOURCE} -a -f json`
+    .lines(chomp: true)
+    .map {|x| JSON.parse(x) }
+
+  SOURCES.fetch(ARGV.shift.to_sym).each do |type, name|
+    src = audio_sources.find {|src| src.values_at("type", "name") == [type.to_s, name] }
+    id = src.fetch("id")
+    `#{SWITCH_AUDIO_SOURCE} -t #{type} -i #{id}`
+  end
 end
 
-audio_sources = `#{switch_audio_source} -a -f json`
-  .lines(chomp: true)
-  .map {|x| JSON.parse(x) }
-  .group_by {|x| x.fetch("type") }
-
-input = JSON.parse(`#{switch_audio_source} -c -f json -t input`)
-output = JSON.parse(`#{switch_audio_source} -c -f json -t output`)
+input = JSON.parse(`#{SWITCH_AUDIO_SOURCE} -c -f json -t input`)
+output = JSON.parse(`#{SWITCH_AUDIO_SOURCE} -c -f json -t output`)
+active_source = SOURCES.find {|_,src|
+  src.values_at(:input, :output) == [input, output].map {|src| src.fetch("name") }
+}
 
-puts ":waveform: | symbolize=true"
+icon = active_source ? active_source.fetch(1).fetch(:icon) : "questionmark.bubble"
+puts ":waveform:: :#{icon}: | symbolize=true"
 puts "---"
 
-audio_sources.each do |type,sources|
-  sources.each do |source|
-    name = source.fetch("name")
-    id = source.fetch("id")
-
-    sf_type = case type
-              when "input" then ":mic.fill:"
-              when "output" then ":speaker.wave.2.fill:"
-              else fail "Unexpected type: #{type}"
-              end
-
-    params = {
-      symbolize: true,
-      checked: [input, output].include?(source),
-      bash: __FILE__,
-      terminal: false,
-      param0: type,
-      param1: id,
-    }
-
-    puts "#{sf_type} #{name} | #{params.map {|k,v| "#{k}=#{v}"}.join(" ")}"
-  end
+SOURCES.each do |name, sources|
+  params = {
+    symbolize: true,
+    checked: name == active_source.fetch(0),
+    bash: __FILE__,
+    terminal: false,
+    param0: name,
+  }
+
+  icon = sources.fetch(:icon)
+  puts ":#{icon}: | #{params.map {|k,v| "#{k}=#{v}"}.join(" ")}"
 end
diff --git a/macos/swift-bar/system-mute.30s.rb b/macos/swift-bar/system-mute.30s.rb
index fadcafad..397fed17 100755
--- a/macos/swift-bar/system-mute.30s.rb
+++ b/macos/swift-bar/system-mute.30s.rb
@@ -7,7 +7,8 @@
 
 require "json"
 
-muted = `osascript -e "input volume of (get volume settings)"`.to_i.zero?
+volume = `osascript -e "input volume of (get volume settings)"`.to_i
+muted = volume < 5
 
 unless ARGV.empty?
   vol = ARGV.shift