#!/usr/bin/env perl =head1 DESCRIPTION Open an URL in different browsers depending on the URL. Play spotify URLs with the spotify client. =cut use strict; use warnings; use autodie qw(:all); use Text::Template 'fill_in_string'; my $sites = { 'ssh-git' => { 'patterns' => [ qr|^ssh://(?:(?\w+)@)?(?[\w.]+)(?::(?\d+))?/(?.*)\.git|, ], 'command' => ['firefox', 'https://{$domain}/{$path}'], }, 'youtube' => { 'patterns' => [ qr|^https://www.youtube.com|, qr|^https://youtube.com|, qr|^https://youtu.be|, ], 'command' => ['firefox', '{$url}'], }, 'spotify' => { 'patterns' => [ qr|^https://open\.spotify\.com/(?\w+)/(?\w+)?| ], 'command' => [ 'dbus-send', '--print-reply', '--dest=org.mpris.MediaPlayer2.spotify', '/org/mpris/MediaPlayer2', 'org.mpris.MediaPlayer2.Player.OpenUri', 'string:spotify:{$group}:{$track}', ], }, }; my $url_argument = $ARGV[0]; for my $key (keys $sites->%*) { my $site = $sites->{$key}; for my $pattern ($site->{patterns}->@*) { if ($url_argument =~ m/$pattern/) { my @cmd = $site->{command}->@*; # template @cmd @cmd = map {fill_in_string($_, HASH => {%+, url => $url_argument}) } @cmd; exec(@cmd); } } } exec $ENV{'REAL_BROWSER'} // 'firefox', $url_argument;