diff options
Diffstat (limited to 'bin')
-rwxr-xr-x | bin/dmount | 73 | ||||
-rwxr-xr-x | bin/estimate-running-emerge | 4 | ||||
-rwxr-xr-x | bin/gamma | 10 | ||||
-rwxr-xr-x | bin/git-landed | 22 | ||||
-rwxr-xr-x | bin/qr-code | 58 | ||||
-rwxr-xr-x | bin/rst2html | 2 | ||||
-rwxr-xr-x | bin/signal | 2 | ||||
-rwxr-xr-x | bin/zoom | 45 |
8 files changed, 209 insertions, 7 deletions
diff --git a/bin/dmount b/bin/dmount new file mode 100755 index 0000000..45448e3 --- /dev/null +++ b/bin/dmount @@ -0,0 +1,73 @@ +#!/usr/bin/env perl +use v5.24; +use strict; +use warnings; +use File::Basename; +use Try::Tiny; +use List::Util 'uniq'; +use Net::DBus; + +# you probably want /etc/udev/rules.d/88-udisks2.rules with: +# +# SUBSYSTEM=="block", ENV{UDISKS_FILESYSTEM_SHARED}="1" +# +# so everything is mounted under /media instead of /run/media/$USER/ + +my $bus = Net::DBus->system(); +my $srv = $bus->get_service('org.freedesktop.UDisks2'); +my $ud = $srv->get_object('/org/freedesktop/UDisks2/Manager'); + +sub filter_dev { + my ($device_path) = @_; + + my $dev = $srv->get_object($device_path); + return unless $dev->_net_dbus_introspector->has_interface('org.freedesktop.UDisks2.Filesystem'); + my $ignore = try { $dev->HintIgnore } catch { 1 }; + return if $ignore; + my $mounted = try { $dev->MountPoints->@* } catch { 1 }; + return if $mounted; + return $dev; +} + +sub list { + return map { $_->IdLabel || $_->IdUUID } + map { filter_dev($_) } + @{$ud->GetBlockDevices({})}; +} + +sub mount { + my ($name) = @_; + + my @devs = map { filter_dev($_) } uniq( + @{$ud->ResolveDevice({label=>$name},{})}, + @{$ud->ResolveDevice({uuid=>$name},{})}, + ); + die "No device matching '$name'\n" unless @devs; + + $_->Mount({}) for @devs; +} + +my $cmd = basename($0); +if (!@ARGV) { + warn <<"EOF"; +$cmd <name> # mount +$cmd --list # list names +$cmd --bashcomp # print completion code +EOF + exit 1; +} +elsif ($ARGV[0] eq '--list') { + say for list(); +} +elsif ($ARGV[0] eq '--bashcomp') { + print <<"EOF"; +_dmount_list() { + COMPREPLY=( $( compgen -W '\$($cmd --list)' -- "\$2" ) ) +} + +complete -F _dmount_list $cmd +EOF +} +else { + mount($ARGV[0]); +} diff --git a/bin/estimate-running-emerge b/bin/estimate-running-emerge index 84e4d50..08cabb9 100755 --- a/bin/estimate-running-emerge +++ b/bin/estimate-running-emerge @@ -6,6 +6,6 @@ mergelist=$( ) if [[ -n "$mergelist" ]]; then - <<<"$mergelist" genlop -p + <<<"$mergelist" /usr/bin/perl /usr/bin/genlop -p fi -genlop -c +/usr/bin/perl /usr/bin/genlop -c @@ -2,15 +2,17 @@ if [[ ${#@} == 1 ]]; then red=$1 - blue=$1 green=$1 + blue=$1 + brightness=1 else red=$1 - blue=$2 - green=$3 + green=$2 + blue=$3 + brightness=${4:-1} fi declare -a outputs=( $(xrandr --query --current | perl -nle 'm{^(\S+) connected} and print $1' ) ) for o in "${outputs[@]}"; do - xrandr --output "$o" --gamma "${red}:${green}:${blue}" + xrandr --output "$o" --gamma "${red}:${green}:${blue}" --brightness "$brightness" done diff --git a/bin/git-landed b/bin/git-landed new file mode 100755 index 0000000..420d6ac --- /dev/null +++ b/bin/git-landed @@ -0,0 +1,22 @@ +#!/bin/bash + +# shows the commit that "landed" a branch on HEAD +# +# git landed $commit-on-branch [ $head-to-land-on ] [ git-log options ] + +declare -a revs +declare -a flags + +for p in "$@"; do + if [[ $p =~ ^- ]]; then + flags+=( "$p" ) + else + revs+=( "$p" ) + fi +done + +there="${revs[0]:?need a commitish}" +here="${revs[1]:-HEAD}" + +git log "$here" ^"$there" --ancestry-path --merges --reverse -z "${flags[@]}" \ + | head -z -n 1 diff --git a/bin/qr-code b/bin/qr-code new file mode 100755 index 0000000..b614a6a --- /dev/null +++ b/bin/qr-code @@ -0,0 +1,58 @@ +#!/usr/bin/env perl +use strict; +use warnings; +use Getopt::Long; + +my $data=''; +my $level='L'; +my $format='png'; +my $light='255:255:255'; +my $dark='0:0:0'; +my $size=10; + +my $res=GetOptions('data|d=s' => \$data, + 'level|l=s' => \$level, + 'format|f=s' => \$format, + 'size|s=i' => \$size, + 'light=s' => \$light, + 'dark=s' => \$dark, +); + +{ +$level=uc($level); +if ($level !~ /\A[MLQH]\z/) { + $level='L'; +} +} + +$data = join(' ',@ARGV) unless $data; + +if ($format eq 'txt') { + require Text::QRCode; + + my $qr=Text::QRCode->new( + level=>$level, + mode=>'8-bit', + ); + + my $arr=$qr->plot($data); + + print join "\n", map { join '', @$_ } @$arr; +} else { + require Imager::QRCode; + my $qr=Imager::QRCode->new( + size=>$size, + margin=>3, + level=>$level, + mode=>'8-bit', + lightcolor => Imager::Color->new(split ':',$light), + darkcolor => Imager::Color->new(split ':',$dark), + ); + + my $img=$qr->plot($data); + my $pid = open my $display, '|-', 'display' + or die "Can't start `display`: $!"; + $img->write(type=>$format, fh=>$display); + close $display; + waitpid $pid,0; +} diff --git a/bin/rst2html b/bin/rst2html index 252570e..24b45c0 100755 --- a/bin/rst2html +++ b/bin/rst2html @@ -4,4 +4,4 @@ thisdir="$(realpath "$(dirname "$0")")" #exec rst2html.py --stylesheet-path=html4css1.css,"$thisdir/pygments-default.css" --embed-stylesheet "$@" -exec rst2html5.py --stylesheet-path=plain.css,math.css,"$thisdir/pygments-default.css" --embed-stylesheet "$@" +exec rst2html5.py --stylesheet-path=minimal.css,plain.css,math.css,"$thisdir/pygments-default.css" --embed-stylesheet "$@" diff --git a/bin/signal b/bin/signal new file mode 100755 index 0000000..d910269 --- /dev/null +++ b/bin/signal @@ -0,0 +1,2 @@ +#!/bin/bash +exec signal-desktop --use-tray-icon >/dev/null 2>&1 diff --git a/bin/zoom b/bin/zoom new file mode 100755 index 0000000..f1d92c3 --- /dev/null +++ b/bin/zoom @@ -0,0 +1,45 @@ +#!/bin/bash + +# convert https://us02web.zoom.us/j/1111111?pwd=xxxxxxxx (the URI you +# usually get) +# +# into zoommtg://zoom.us/join?confno=1111111&pwd=xxxxxxxx (the URI +# that the zoom client actually wants) + +munge-zoom-uri() { + local uri="$1" + if [[ $uri =~ ^zoommtg://[^/]+/join ]]; then + echo "$uri" + return + fi + + if [[ $uri =~ ^https?://([^/.]+\.)?zoom\.us/j/([0-9]+)$ ]]; then + echo "zoommtg://zoom.us/join?confno=${BASH_REMATCH[2]}" + return + fi + + if [[ $uri =~ ^https?://([^/.]+\.)?zoom\.us/j/([0-9]+)\?pwd=(.+)$ ]]; then + echo "zoommtg://zoom.us/join?confno=${BASH_REMATCH[2]}&pwd=${BASH_REMATCH[3]}" + return + fi + + if [[ $uri =~ ^https?://([^/.]+\.)?zoom\.us/w/([0-9]+)\?pwd=(.+)$ ]]; then + echo "zoommtg://zoom.us/join?confno=${BASH_REMATCH[2]}&pwd=${BASH_REMATCH[3]}" + return + fi + + if [[ $uri =~ ^https?://([^/.]+\.)?zoom\.us/my/([a-zA-Z0-9]+)\?pwd=(.+)$ ]]; then + echo "zoommtg://zoom.us/join?confno=${BASH_REMATCH[2]}&pwd=${BASH_REMATCH[3]}" + return + fi + + >&2 echo "can't parse <$uri>, ignoring"; + return +} + +declare -a args +if [[ -n "$1" ]]; then + args+=("$(munge-zoom-uri "$1")") +fi + +exec /opt/zoom/ZoomLauncher "${args[@]}" |