summaryrefslogtreecommitdiff
path: root/bin
diff options
context:
space:
mode:
Diffstat (limited to 'bin')
-rwxr-xr-xbin/dmount73
-rwxr-xr-xbin/estimate-running-emerge4
-rwxr-xr-xbin/gamma10
-rwxr-xr-xbin/git-landed22
-rwxr-xr-xbin/qr-code58
-rwxr-xr-xbin/rst2html2
-rwxr-xr-xbin/set-screen8
-rwxr-xr-xbin/signal2
-rwxr-xr-xbin/zoom45
9 files changed, 215 insertions, 9 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
diff --git a/bin/gamma b/bin/gamma
index 57cdc7f..b684b4f 100755
--- a/bin/gamma
+++ b/bin/gamma
@@ -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/set-screen b/bin/set-screen
index 57bdd59..f2ffbfd 100755
--- a/bin/set-screen
+++ b/bin/set-screen
@@ -37,7 +37,11 @@ function make_display_state_dir() {
function run_display_state_commands() {
local dir
- dir="$(display_state_dir)"
+ if [[ -n "$1" ]]; then
+ dir="${CONFIG_DIR}/$1"
+ else
+ dir="$(display_state_dir)"
+ fi
if [[ -x "${dir}/command" ]]; then
if [[ -x "${CONFIG_DIR}/pre-command" ]]; then
@@ -68,7 +72,7 @@ EOF
case "$1" in
'make') make_display_state_dir "$2" ;;
'which') display_state_dir ;;
- '' | 'set') run_display_state_commands ;;
+ '' | 'set') run_display_state_commands "$2";;
'help' | '--help' ) print_usage ; exit 0 ;;
*) >&2 print_usage; exit 1 ;;
esac
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[@]}"