#!/usr/bin/env perl use strict; use warnings; use Term::ANSIColor; use Capture::Tiny qw(capture); use Sys::Hostname qw(hostname); sub main { my $argc = $#ARGV + 1; if ($argc == 0) { print "Argument needed - [" . colored("lower", 'bold') . " - " . colored("raise", 'bold') . " - " . colored("toggle", 'bold') . "]\n"; exit 1; } elsif ($argc > 1) { print "Too many arguments, only one needed\n"; exit 2; } my $host = hostname(); my $curr_vol = 0; my $curr_vol_cmd = "/usr/sbin/mixer vol | /usr/bin/awk -F ':' '{print \$2}'"; if ($host eq "po-rbo.ln.ysosecure.com") { $curr_vol_cmd = "/usr/bin/pactl get-sink-volume \@DEFAULT_SINK\@ | /usr/bin/awk '{print \$5}'"; } my $ns = '/usr/local/bin/notify-send'; if (hostname() eq "po-rbo.ln.ysosecure.com") { $ns = '/usr/bin/notify-send'; } if ($ARGV[0] eq "lower" || $ARGV[0] eq "raise") { if ($ARGV[0] eq "lower") { if ($host eq "po-rbo.ln.ysosecure.com") { system('/usr/bin/pactl', 'set-sink-volume', '@DEFAULT_SINK@', '-5%'); } else { capture { system('/usr/sbin/mixer', 'vol', '-5'); }; } } else { if ($host eq "po-rbo.ln.ysosecure.com") { system('/usr/bin/pactl', 'set-sink-volume', '@DEFAULT_SINK@', '+5%'); } else { capture { system('/usr/sbin/mixer', 'vol', '+5'); }; } } $curr_vol = `$curr_vol_cmd`; chomp $curr_vol; system( $ns, '-h', 'int:value:' . $curr_vol, '-u', 'low', '-t', '1000', 'mixer-set', ' volume' ); system('kill -68 $(pidof dwmblocks)'); exit; } elsif ($ARGV[0] eq "toggle") { my $tmp_file = '/tmp/mixervol'; $curr_vol = `$curr_vol_cmd`; chomp $curr_vol; if ($curr_vol > 0) { open(my $fh, '>:encoding(UTF-8)', $tmp_file); print $fh $curr_vol; close($fh); if ($host eq "po-rbo.ln.ysosecure.com") { system('/usr/bin/pactl', 'set-sink-volume', '@DEFAULT_SINK@', '0%'); } else { capture { system( '/usr/sbin/mixer', 'vol', '0' ); }; } system( $ns, '-u', 'low', '-t', '1750', 'mixer-set', ' muted' ); system('kill -68 $(pidof dwmblocks)'); } else { open(my $fh, '<:encoding(UTF-8)', $tmp_file); $curr_vol = <$fh>; close($fh); if ($host eq "po-rbo.ln.ysosecure.com") { chomp $curr_vol; system('/usr/bin/pactl', 'set-sink-volume', '@DEFAULT_SINK@', $curr_vol); } else { capture { system( '/usr/sbin/mixer', 'vol', $curr_vol ); }; } system( $ns, '-h', 'int:value:' . $curr_vol, '-u', 'low', '-t', '1750', 'mixer-set', ' restored' ); system('kill -68 $(pidof dwmblocks)'); } exit; } else { print "Unrecognized argument: " . $ARGV[0] . "\n"; } exit; } main(); __END__