From 2fb7617a037be6da67b13558ce3013b2ceb91448 Mon Sep 17 00:00:00 2001 From: Simon Bruder Date: Sat, 19 Dec 2020 16:15:45 +0100 Subject: [PATCH] Restructure and clean up shell functions --- users/simon/files/scripts/btsync | 7 + users/simon/files/scripts/calibre-remote | 18 +++ .../files/scripts/mkvextract-all-attachments | 2 + .../simon/files/scripts/mkvpropedit-add-fonts | 6 + users/simon/files/scripts/mullvad | 14 ++ users/simon/files/scripts/nixify | 16 ++ users/simon/files/scripts/renumber | 12 ++ users/simon/files/zsh/functions.zsh | 151 ------------------ users/simon/files/zsh/pass-wrappers.zsh | 33 ++++ users/simon/modules/default.nix | 1 + users/simon/modules/scripts.nix | 17 ++ users/simon/modules/zsh.nix | 2 +- 12 files changed, 127 insertions(+), 152 deletions(-) create mode 100755 users/simon/files/scripts/btsync create mode 100755 users/simon/files/scripts/calibre-remote create mode 100755 users/simon/files/scripts/mkvextract-all-attachments create mode 100755 users/simon/files/scripts/mkvpropedit-add-fonts create mode 100755 users/simon/files/scripts/mullvad create mode 100755 users/simon/files/scripts/nixify create mode 100755 users/simon/files/scripts/renumber delete mode 100644 users/simon/files/zsh/functions.zsh create mode 100644 users/simon/files/zsh/pass-wrappers.zsh create mode 100644 users/simon/modules/scripts.nix diff --git a/users/simon/files/scripts/btsync b/users/simon/files/scripts/btsync new file mode 100755 index 0000000..7f5a734 --- /dev/null +++ b/users/simon/files/scripts/btsync @@ -0,0 +1,7 @@ +#!/usr/bin/env bash +set -eo pipefail +card=$(pactl list cards short | grep -E -o "bluez_card.*" | cut -f1) +# pactl does not support any easily parsable output format +profile=$(pactl list cards | rg -oU "Name: ${card}.*(\\n.*?)*.*Active Profile: (.*)" -r '$2') +pacmd set-card-profile $card off +pacmd set-card-profile $card "$profile" diff --git a/users/simon/files/scripts/calibre-remote b/users/simon/files/scripts/calibre-remote new file mode 100755 index 0000000..a7c8022 --- /dev/null +++ b/users/simon/files/scripts/calibre-remote @@ -0,0 +1,18 @@ +#!/usr/bin/env bash +set -e + +function cleanup { + fusermount -u "$library" + rm -rf "$library" +} + +if [ -z "$1" ]; then + echo "USAGE: $0 host:path" + exit 1 +fi + +library=$(mktemp -p /tmp -d calibre-remote.XXXXXXXXXX) +sshfs "$1" "$library" +trap cleanup EXIT INT TERM + +calibre --with-library="$library" diff --git a/users/simon/files/scripts/mkvextract-all-attachments b/users/simon/files/scripts/mkvextract-all-attachments new file mode 100755 index 0000000..8000884 --- /dev/null +++ b/users/simon/files/scripts/mkvextract-all-attachments @@ -0,0 +1,2 @@ +#!/usr/bin/env bash +mkvextract "$1" attachments $(mkvmerge --identify "$1" | grep "Attachment ID" | sed "s/Attachment ID \([0-9]*\): .*/\1/") diff --git a/users/simon/files/scripts/mkvpropedit-add-fonts b/users/simon/files/scripts/mkvpropedit-add-fonts new file mode 100755 index 0000000..0e35382 --- /dev/null +++ b/users/simon/files/scripts/mkvpropedit-add-fonts @@ -0,0 +1,6 @@ +#!/usr/bin/env bash +file="$1" +shift +for attachment in $@; do + mkvpropedit --attachment-mime-type font/sfnt --add-attachment "$attachment" "$file" +done diff --git a/users/simon/files/scripts/mullvad b/users/simon/files/scripts/mullvad new file mode 100755 index 0000000..545092b --- /dev/null +++ b/users/simon/files/scripts/mullvad @@ -0,0 +1,14 @@ +#!/usr/bin/env bash +if (( $# < 1 )); then + echo "USAGE: $0 LOCATION|off" >&2 + exit 1 +fi + +current_interfaces="$(ip -o a | grep -oE '[0-9]*:\ mullvad-(v6-)?[a-z][a-z][0-9]*' | uniq | cut -d: -f2 | tr -d ' ')" +for current_interface in $current_interfaces; do + sudo wg-quick down "$current_interface" +done + +if [ "$1" != "off" ]; then + sudo wg-quick up mullvad-$1 +fi diff --git a/users/simon/files/scripts/nixify b/users/simon/files/scripts/nixify new file mode 100755 index 0000000..3c33e78 --- /dev/null +++ b/users/simon/files/scripts/nixify @@ -0,0 +1,16 @@ +#!/usr/bin/env bash +if [ ! -e ./.envrc ]; then + echo "use nix" > .envrc + direnv allow +fi +if [[ ! -e shell.nix ]] && [[ ! -e default.nix ]]; then + cat > shell.nix << EOF +{ pkgs ? import {} }: + +pkgs.mkShell { + buildInputs = with pkgs; [ + ]; +} +EOF +vim shell.nix +fi diff --git a/users/simon/files/scripts/renumber b/users/simon/files/scripts/renumber new file mode 100755 index 0000000..96d12d1 --- /dev/null +++ b/users/simon/files/scripts/renumber @@ -0,0 +1,12 @@ +#!/usr/bin/env bash +if (( $# < 2 )); then + echo "USAGE: $0 DIGITS FILES" + return 1 +fi +digits="$1" +shift 1 +i=1 +for file in $@; do + mv -n "$file" "$(dirname $file)/$(printf %0${digits}d $i).${file##*.}" + i="$((i+1))" +done diff --git a/users/simon/files/zsh/functions.zsh b/users/simon/files/zsh/functions.zsh deleted file mode 100644 index a245e0b..0000000 --- a/users/simon/files/zsh/functions.zsh +++ /dev/null @@ -1,151 +0,0 @@ -# pass wrappers - -function drone-add-hub() { - drone secret add --name docker_username --data sbruder "$1" - drone secret add --name docker_password --data "$(pass devops/docker|head -n 1)" "$1" -} - -function drone-add-registry() { - drone secret add --name docker_username --data simon "$1" - drone secret add --name docker_password --data "$(pass sbruder.de/account|head -n 1)" "$1" -} - -function drone-add-netlify() { - drone secret add --name netlify_auth_token --data "$(pass-field web/netlify.com Drone-Key)" "$1" -} - -function drone-add-s3() { - drone secret add --name aws_access_key_id --data "$(pass-field sbruder.de/minio/personal User)" "$1" - drone secret add --name aws_secret_access_key --data "$(pass sbruder.de/minio/personal|head -n 1)" "$1" -} - -function drone() ( - export DRONE_SERVER="$(pass-field sbruder.de/drone Server)" - export DRONE_TOKEN="$(pass sbruder.de/drone|head -n 1)" - command drone $@ -) - -function docker-ls() ( - export DOCKER_LS_PASSWORD="$(pass sbruder.de/account|head -n 1)" - command docker-ls $@ -) - -function docker-rm() ( - export DOCKER_LS_PASSWORD="$(pass sbruder.de/account|head -n 1)" - command docker-rm $@ -) - -# Helpers - -## resync pulseaudio bluetooth connection -function btsync() ( - card=$(pactl list cards short|grep -E -o "bluez_card.*[[:space:]]") - pacmd set-card-profile $card off - pacmd set-card-profile $card a2dp_sink -) - -## get field from pass entry -function pass-field() { - pass "$1"|grep "$2"|cut -d: -f2-|tr -d ' ' -} - -## Helper to create nix-shell direnv -function nixify() { - if [ ! -e ./.envrc ]; then - echo "use nix" > .envrc - direnv allow - fi - if [[ ! -e shell.nix ]] && [[ ! -e default.nix ]]; then - cat > shell.nix << EOF -{ pkgs ? import {} }: - -pkgs.mkShell { - buildInputs = with pkgs; [ - ]; -} -EOF - vim shell.nix - fi -} - -## Timer -function timer() ( - if [ -z "$1" ] || [ -z "$2" ]; then - echo "USAGE: $0 [u|f] TIME/DURATION" >&2 - return 1 - fi - - if [ "$1" != "u" ] && [ "$1" != "f" ]; then - echo "Invalid mode “$1” supplied. Valid modes are: u|f" >&2 - return 2 - fi - - [ "$1" = "u" ] && mode="until" - [ "$1" = "f" ] && mode="for" - - gosleep --${mode} "$2" - - if [ "$?" = 0 ]; then - echo "Press CTRL-C to stop the alarm…" >&2 - echo -en "\a" # highlight window - paplay ~/Documents/sound/ringtones/Bergentrückung.wav - else - echo "The sleep command failed. Please check the options." >&2 - return 3 - fi -) - -function currency() ( - amount=${1:-1} - fromcurrency=${2:-USD} - tocurrency=${3:-EUR} - rate=$(curl -s "https://api.exchangeratesapi.io/latest?base=$fromcurrency&symbols=$tocurrency"|jq ".rates.$tocurrency") - printf "$amount $fromcurrency: %.02f $tocurrency\n" $(($amount * $rate)) -) - -function urlencode() { - python3 -c "import urllib.parse; print(urllib.parse.quote(open(0, 'rb').read()))" -} - -function renumber() ( - if (( $# < 2 )); then - echo "USAGE: $0 DIGITS FILES" - return 1 - fi - digits=$1 - shift 1 - i=1 - for file in $@; do - mv -n "$file" "$(dirname $file)/$(printf %0${digits}d $i).${file##*.}" - i=$((i+1)) - done -) - -function mkvextract-all-attachments() { - mkvextract $1 attachments $(mkvmerge --identify $1|grep "Attachment ID"|sed "s/Attachment ID \([0-9]*\): .*/\1/") -} - -function mkvpropedit-add-attachments() ( - file="$1" - shift - for attachment in $@; do - mkvpropedit --attachment-mime-type font/sfnt --add-attachment "$attachment" "$file" - done -) - -function ssim() { - ffmpeg -loglevel fatal -i "$1" -i "$2" -lavfi 'ssim=/dev/stdout' -f null - -} - -function mullvad() ( - if (( $# < 1 )); then - echo "USAGE: $0 LOCATION|off" >&2 - fi - current_interfaces="$(ip -o a|grep -oE '[0-9]*:\ mullvad-(v6-)?[a-z][a-z][0-9]*'|uniq|cut -d: -f2|tr -d ' ')" - for current_interface in $current_interfaces; do - sudo wg-quick down "$current_interface" - done - if [ "$1" != "off" ]; then - sudo wg-quick up mullvad-$1 - fi -) diff --git a/users/simon/files/zsh/pass-wrappers.zsh b/users/simon/files/zsh/pass-wrappers.zsh new file mode 100644 index 0000000..7779cb2 --- /dev/null +++ b/users/simon/files/zsh/pass-wrappers.zsh @@ -0,0 +1,33 @@ +function pass-field() { + pass show "$1" | grep "$2" | cut -d: -f2- | tr -d ' ' +} + +function drone() ( + export DRONE_SERVER="$(pass-field sbruder.de/drone Server)" + export DRONE_TOKEN="$(pass sbruder.de/drone | head -n 1)" + command drone $@ +) + +function drone-add-registry() { + drone secret add --name docker_username --data simon "$1" + drone secret add --name docker_password --data "$(pass sbruder.de/account | head -n 1)" "$1" +} + +function drone-add-netlify() { + drone secret add --name netlify_auth_token --data "$(pass-field web/netlify.com Drone-Key)" "$1" +} + +function drone-add-s3() { + drone secret add --name aws_access_key_id --data "$(pass-field sbruder.de/minio/personal User)" "$1" + drone secret add --name aws_secret_access_key --data "$(pass sbruder.de/minio/personal | head -n 1)" "$1" +} + +function docker-ls() ( + export DOCKER_LS_PASSWORD="$(pass sbruder.de/account | head -n 1)" + command docker-ls $@ +) + +function docker-rm() ( + export DOCKER_LS_PASSWORD="$(pass sbruder.de/account | head -n 1)" + command docker-rm $@ +) diff --git a/users/simon/modules/default.nix b/users/simon/modules/default.nix index 58474d8..04e7386 100644 --- a/users/simon/modules/default.nix +++ b/users/simon/modules/default.nix @@ -10,6 +10,7 @@ ./mpv.nix ./neovim.nix ./programs.nix + ./scripts.nix ./sway.nix ./tmux.nix ./vdirsyncer.nix diff --git a/users/simon/modules/scripts.nix b/users/simon/modules/scripts.nix new file mode 100644 index 0000000..09d9901 --- /dev/null +++ b/users/simon/modules/scripts.nix @@ -0,0 +1,17 @@ +{ pkgs, ... }: +let + scripts = pkgs.stdenv.mkDerivation { + name = "scripts"; + + src = ../files/scripts; + + dontBuild = true; + installPhase = '' + mkdir -p $out + cp -r . $out/bin + ''; + }; +in +{ + home.packages = [ scripts ]; +} diff --git a/users/simon/modules/zsh.nix b/users/simon/modules/zsh.nix index 93fe643..a6dafa8 100644 --- a/users/simon/modules/zsh.nix +++ b/users/simon/modules/zsh.nix @@ -54,7 +54,7 @@ in initExtra = '' eval $(${pkgs.coreutils}/bin/dircolors -b ${dircolors-solarized}/dircolors.ansi-universal) - source ${../files/zsh/functions.zsh} + source ${../files/zsh/pass-wrappers.zsh} ''; }; };