diff options
-rwxr-xr-x | keyboard/mounter | 2 | ||||
-rwxr-xr-x | keyboard/screenshot | 17 | ||||
-rwxr-xr-x | launch/launch | 92 | ||||
-rwxr-xr-x | misc/passwdgen | 2 | ||||
-rwxr-xr-x | misc/seasonalwallpaper | 10 | ||||
-rwxr-xr-x | misc/verify | 45 | ||||
-rwxr-xr-x | sync/pull | 2 | ||||
-rwxr-xr-x | video/ffconcat | 30 | ||||
-rwxr-xr-x | video/rectape | 18 | ||||
-rwxr-xr-x | video/rectapehevc | 15 | ||||
-rwxr-xr-x | video/rectapevaapi | 12 | ||||
-rwxr-xr-x | video/screenrec | 4 | ||||
-rwxr-xr-x | video/slideshow | 26 | ||||
-rwxr-xr-x | video/vaapiencode | 9 | ||||
-rwxr-xr-x | x11/xkeyconf | 15 | ||||
-rwxr-xr-x | x11/xsudo | 5 |
16 files changed, 190 insertions, 114 deletions
diff --git a/keyboard/mounter b/keyboard/mounter index 90c6caf..e0a8fac 100755 --- a/keyboard/mounter +++ b/keyboard/mounter @@ -1,6 +1,6 @@ #!/bin/sh # TODO: add support for mounting discs -sudo=doas +sudo=${SUDO:-sudo} mps=/media/mnt # User should have ownership of this directory notify='notify-send --urgency low' diff --git a/keyboard/screenshot b/keyboard/screenshot index f0d0fff..25e99cd 100755 --- a/keyboard/screenshot +++ b/keyboard/screenshot @@ -1,5 +1,13 @@ #!/bin/sh -printusage() { echo "Usage: $(basename "$0") [-cx]\n\nOPTIONS:\n -c\tInteractively crop screenshot\n -x\tCopy screenshot to clipboard with xclip rather than saving it" && exit; } +printusage() { +cat << HELPDOC +Usage: $(basename "$0") [-cx] + +OPTIONS: + -c\tInteractively crop screenshot + -x\tCopy screenshot to clipboard with xclip rather than saving it +HELPDOC +} # Scrot and xclip opts fmt=$(date '+%m-%d-%4Y_%I:%M:%S_%p.png') @@ -29,11 +37,10 @@ while getopts "cxh" arg; do case "$arg" in c) opt=$cropopt ;; x) path=$tmppath; exp=$xclipexp; summ=$xclipsumm; body=$xclipbody ;; - h) printusage ;; - *) printusage ;; + h|*) printusage && exit ;; esac done scrot $opt $path --exec "$exp" \ -&& notify-send $notifyopts -i $path "$summ" "$body" \ -|| notify-send $notifyopts "Screenshot Failed!" + && notify-send $notifyopts -i $path "$summ" "$body" \ + || notify-send $notifyopts "Screenshot Failed!" diff --git a/launch/launch b/launch/launch index b4c1c7a..b8757e6 100755 --- a/launch/launch +++ b/launch/launch @@ -7,8 +7,8 @@ Usage: $(me): [-gh] [COMMAND] [COMMAND ARGS]... Args: - -g: Force generate cache - -h: show this help message + -g, --gen-cache : Force generate cache + -h, --help : show this help message Config Syntax: +host [HOSTNAME] @@ -22,51 +22,51 @@ HELPDOC gencache() { awk ' - BEGIN { - print "run=\"$1\"; shift" - print "case \"$run\" in" - } - { - sub(/#.*/, "") # Remove comments - if (!/^\s*$/) { - if (/^\+host/) { - sub(/\s*\+host\s*/, "") - h++ - hosts[h] = $0 +BEGIN { + print "run=\"$1\"; shift" + print "case \"$run\" in" +} +{ + sub(/#.*/, "") # Remove comments + if (!/^\s*$/) { + if (/^\+host/) { + sub(/\s*\+host\s*/, "") + h++ + hosts[h] = $0 + } + else { + if (!/^\t/) { + hostnum = 1 + o++ + opts[o] = $0 } else { - if (!/^\t/) { - hostnum = 1 - o++ - opts[o] = $0 - } - else { - sub(/^\t/, "") - if ($0 == "^") - $0 = cache - else if ($0 ~ /^[0-9]*$/) - $0 = cmds[hosts[$0]":"opts[o]] - cmds[hosts[hostnum]":"opts[o]] = cache = $0 - hostnum++ - } + sub(/^\t/, "") + if ($0 == "^") + $0 = cache + else if ($0 ~ /^[0-9]*$/) + $0 = cmds[hosts[$0]":"opts[o]] + cmds[hosts[hostnum]":"opts[o]] = cache = $0 + hostnum++ } } } - END { - for (host in hosts) { - if (hosts[host] != "'`hostname`'") - continue - for (cmd in cmds) { - if (cmd ~ hosts[host] && cmds[cmd] && cmds[cmd] != "-") { - i = cmd - sub(/.*:/, "", cmd) - print "\t"cmd") "cmds[i]" \"$@\" & ;;" - } +} +END { + for (host in hosts) { + if (hosts[host] != "'`hostname`'") + continue + for (cmd in cmds) { + if (cmd ~ hosts[host] && cmds[cmd] && cmds[cmd] != "-") { + i = cmd + sub(/.*:/, "", cmd) + print "\t"cmd") "cmds[i]" \"$@\" & ;;" } - print "\t*) command -v \"$run\" >/dev/null && exec \"$run\" \"$@\" || echo \"\\`$run${@:+ $@}\\` Does not exist or exited with an error\" ;;" - print "esac" } + print "\t*) command -v \"$run\" >/dev/null && exec \"$run\" \"$@\" || echo \"\\`$run${@:+ $@}\\` Does not exist or exited with an error\" ;;" + print "esac" } +} ' $conf > $cache chmod +x $cache } @@ -77,10 +77,9 @@ conf=$confdir/config if [ ! -e $conf ]; then mkdir -p $confdir echo "#HOSTS\n+host $(hostname)\n\n#OPTS\ntest\n\techo \"Tested!\"" > $conf - echo "Config file created at $conf! Exiting" - echo + echo "No config file exists! new config file created at $conf! Exiting\n" printhelp - exit 0 + exit 1 fi # Cache file setup @@ -91,10 +90,7 @@ cache=$cachedir/cache # Command line options case "$1" in - -g) echo "Generating new cache: $cache"; gencache && cat $cache; exit ;; - -h) printhelp && exit ;; - '') printhelp && exit ;; + -g|--gen-cache) echo "Generating new cache: $cache"; gencache && cat $cache ;; + -h|--help|'') printhelp ;; + *) exec $cache "$@" ;; # Run esac - -# Run -exec $cache "$@" diff --git a/misc/passwdgen b/misc/passwdgen index ce67c92..8e20ba7 100755 --- a/misc/passwdgen +++ b/misc/passwdgen @@ -2,7 +2,7 @@ [ -n "`echo $1$2 | tr -d '[:digit:]'`" ] && echo "Usage: $0 [Itterations] [Length] [Character Set]" && exit [ -z "$1" ] && itt=5 || itt=$1 [ -z "$2" ] && len=20 || len=$2 -[ -z "$3" ] && set='[:graph:]' || set=$3 +[ -z "$3" ] && set="[:alnum:],.<>/?\'!@#$%^&*()[]{};:-_=+" || set=$3 genpasswd() { tr -cd "$3" < /dev/urandom | fold -w$1 | head -n$2; } genpasswd $len $itt $set diff --git a/misc/seasonalwallpaper b/misc/seasonalwallpaper index 525bfb0..f816136 100755 --- a/misc/seasonalwallpaper +++ b/misc/seasonalwallpaper @@ -1,12 +1,12 @@ #!/bin/sh case $1 in - spring|summer|fall|winter) dir=~/.local/share/wallpaper/$1/ ; xwallpaper --zoom "$dir`ls $dir | shuf -n1`" ;; + spring|summer|fall|winter) dir=~/.local/share/wallpaper/$1 ; xwallpaper --zoom "$dir/`ls $dir | shuf -n1`" ;; *) case `date +%b` in - Dec|Jan|Feb) $0 winter ;; - Mar|Apr|May) $0 spring ;; - Jun|Jul|Aug) $0 summer ;; - Sep|Oct|Nov) $0 fall ;; + Dec|Jan|Feb) $0 winter ;; + Mar|Apr|May) $0 spring ;; + Jun|Jul|Aug) $0 summer ;; + Sep|Oct|Nov) $0 fall ;; esac ;; esac diff --git a/misc/verify b/misc/verify index 5f0430c..1f0d4ab 100755 --- a/misc/verify +++ b/misc/verify @@ -4,11 +4,18 @@ CYN="\033[0;36m" GRN="\033[0;32m" RED="\033[0;31m" +me="$(basename "$0")" + +concat="pv -EE -F'%r [%b] [%t] [%e] %p'" + printhelp() { cat << HELPDOC -Usage: $(basename "$0") [options] [file/directory]... +Usage: $me [options] [file/directory]... OPTIONS: + -o, --stdout Output checksum to STDOUT + -S, --supress Supress all warnings and progress notes (default with -o) + -n, --no-progress Don't output progress bar (default with -o & -S) -m, --md5 Create/verify md5 checksum -s[mode], --sha[mode] Create/verify sha[mode] checksum -x[mode], --xxh[mode] Create/verify xxh[mode] checksum (default) @@ -21,6 +28,9 @@ HELPDOC crypt=xxh while true; do case "$1" in + -o|--stdout) stdout=1; nowarn=1; concat="cat" ;; + -S|--supress) nowarn=1; concat="cat" ;; + -n|--no-progressbar) concat="cat" ;; -m|--md5) crypt=md5 ;; -s*|--sha*) crypt=sha$(echo "$1" | tr -cd [:digit:]) ;; -x*|--xxh*) crypt=xxh$(echo "$1" | tr -cd [:digit:]) ;; @@ -35,6 +45,13 @@ done hashalg=${crypt}sum command -v $hashalg >/dev/null || (echo "Hashing algorithm '$hashalg' does not exist!" && exit 2) +# Warn user +if [ ! "$nowarn" ]; then + for file in "$@"; do + [ -d "$file" ] && echo "${RED}NOTE:${NORM} getting a checksum from an entire directory is NOT a standard feature in any other checksum-checking program! They can only be checked with this script!" && break + done +fi + while [ -n "$1" ]; do file="$1" [ ! "`echo "$file" | sed "s/.$crypt$//"`" = "$file" ] && shift && continue # Skip hash files @@ -43,20 +60,24 @@ while [ -n "$1" ]; do hashfile="$file.$crypt" [ -n "$verify" ] && [ ! -e "$hashfile" ] && shift && continue # Skip files without a hash in verify mode - echo "Getting $crypt checksum of $type '$file'..." - hash=`find "$file" -type f -print0 | sort -z | xargs -r0 pv -EE -F'%r [%b] [%t] [%e] %p' | $hashalg | cut -d' ' -f1` + [ ! "$nowarn" ] && echo "Getting $crypt checksum of $type '$file'..." + hash=`find "$file" -type f -print0 | sort -z | xargs -r0 $concat | $hashalg | cut -d' ' -f1` - if [ -e "$hashfile" ]; then - phash=`cat "$hashfile"` - [ $phash = $hash ] \ - && echo "${GRN}Success: $type matches saved checksum!" \ - || (echo "${RED}Error: $type does not match saved checksum!\nExpected checksum: $phash\nActual checksum: $hash" && ec=1) + if [ "$stdout" ]; then + echo "$hash ($crypt) $file" else - echo $hash > "$hashfile" \ - && echo "${CYN}$crypt checksum file saved at '$hashfile'!" \ - || (echo "${RED}'$hashfile' could not be created!\n$crypt checksum of $type '$file' is $hash" && ec=1) + if [ -e "$hashfile" ]; then + phash=`cat "$hashfile"` + [ $phash = $hash ] \ + && echo "${GRN}Success: $type matches saved checksum!" \ + || (echo "${RED}Error: $type does not match saved checksum!\nExpected checksum: $phash\nActual checksum: $hash" && ec=1) + else + echo $hash > "$hashfile" \ + && echo "${CYN}$crypt checksum file saved at '$hashfile'!" \ + || (echo "${RED}'$hashfile' could not be created!\n$crypt checksum of $type '$file' is $hash" && ec=1) + fi + printf "$NORM"; [ -n "$2" ] && echo fi - printf "$NORM"; [ -n "$2" ] && echo shift done exit $ec @@ -31,7 +31,7 @@ pullrepo() { makerepo() { if echo "$opts" | grep '\-b'; then printmakemsg - doas make clean install \ + ${SUDO:-sudo} make clean install \ && printmakesuccess || printmakeerror fi } diff --git a/video/ffconcat b/video/ffconcat new file mode 100755 index 0000000..34e6550 --- /dev/null +++ b/video/ffconcat @@ -0,0 +1,30 @@ +#!/bin/sh + +trap cleanup EXIT + +ccf=/tmp/concatfile. +cleanup() { rm ${ccf}*; } +concat() { + outfile="output$i.mkv" + concatfile=$(mktemp ${ccf}XXXXXX) + dir="$(pwd)" + for video in $vidfiles; do + echo "file '$dir/$video'" >> $concatfile + done + cat $concatfile | sort > ${concatfile}_ # Sort concatfile so videos are ordered correctly + ffmpeg -v error -f concat -safe 0 -i ${concatfile}_ -c copy $outfile +} + +for video in "$@"; do + codechash=$(ffprobe -v quiet -show_format -show_streams "$video" | \grep 'width\|height\|codec' | md5sum | cut -d' ' -f1) + [ -z "$prevhash" ] && prevhash=$codechash + if [ $prevhash = $codechash ]; then + vidfiles="$video${vidfiles:+ }$vidfiles" + else + [ -z "$i" ] && i=0 + concat + vidfiles="" + i=$((i+1)) + fi +done +concat diff --git a/video/rectape b/video/rectape index fa631eb..238f5de 100755 --- a/video/rectape +++ b/video/rectape @@ -5,12 +5,12 @@ for mod in blackmagic blackmagic-io; do doas modprobe $mod; done #doas rc-service DesktopVideoHelper start ffmpeg \ --f decklink -format_code ntsc -i "Intensity Pro" \ --c:v libx264 \ --preset medium \ --qmin 6 -qmax 18 -qdiff 4 \ --vf yadif \ --c:a aac -b:a 384k \ --metadata "title"="$1" \ --metadata "comment=tapes.tjkeller.xyz" \ -"$1.mkv" + -f decklink -format_code ntsc -i "Intensity Pro" \ + -c:v libx264 \ + -preset medium \ + -qmin 6 -qmax 18 -qdiff 4 \ + -vf yadif \ + -c:a aac -b:a 384k \ + -metadata "title"="$1" \ + -metadata "comment=tapes.tjkeller.xyz" \ + "$1.mkv" diff --git a/video/rectapehevc b/video/rectapehevc new file mode 100755 index 0000000..c44d6d9 --- /dev/null +++ b/video/rectapehevc @@ -0,0 +1,15 @@ +#!/bin/sh +if [ -z "$1" ]; then $0 untitled_$(ls | wc -l); exit; fi + +for mod in blackmagic blackmagic-io; do doas modprobe $mod; done +#doas rc-service DesktopVideoHelper start + +ffmpeg \ + -f decklink -format_code ntsc -i "Intensity Pro" \ + -c:v libx265 \ + -qmin 6 -qmax 18 -qdiff 4 \ + -vf yadif \ + -c:a flac \ + -metadata "title"="$1" \ + -metadata "comment=tapes.tjkeller.xyz" \ + "$1.mkv" diff --git a/video/rectapevaapi b/video/rectapevaapi index 4ddf868..91c0709 100755 --- a/video/rectapevaapi +++ b/video/rectapevaapi @@ -5,9 +5,9 @@ for mod in blackmagic blackmagic-io; do doas modprobe $mod; done doas rc-service DesktopVideoHelper start ffmpeg -hwaccel auto -vaapi_device /dev/dri/renderD128 \ --f decklink -format_code ntsc -i "Intensity Pro" \ --c:v hevc_vaapi \ --vf "yadif,format=nv12,hwupload" \ --c:a libopus -b:a 384k \ --metadata "title"="$1$title" \ -"$1$title.mkv" + -f decklink -format_code ntsc -i "Intensity Pro" \ + -c:v hevc_vaapi \ + -vf "yadif,format=nv12,hwupload" \ + -c:a libopus -b:a 384k \ + -metadata "title"="$1$title" \ + "$1$title.mkv" diff --git a/video/screenrec b/video/screenrec index fa6b628..8f65514 100755 --- a/video/screenrec +++ b/video/screenrec @@ -13,7 +13,11 @@ ffmpeg -hide_banner \ -framerate $fr \ -f x11grab \ -i :0.0+0,0 \ + -f alsa -channels 1 -sample_rate 48000 \ + -i hw:3 \ -c:v libx264 \ + -c:a libopus \ + -b:a 128k \ -preset ultrafast \ -qp 1 \ -pix_fmt yuv444p \ diff --git a/video/slideshow b/video/slideshow index d1a9647..4cd1f61 100755 --- a/video/slideshow +++ b/video/slideshow @@ -1,15 +1,15 @@ #!/bin/sh cat "$@" | ffmpeg -y \ --framerate 0.20 -loop 1 \ --f image2pipe \ --i - \ --c:v h264_amf -quality quality -tune stillimage \ --qp_i 12 -qp_p 28 -qp_b 28 \ --vf \ -fps=1,\ -framerate=25:\ -interp_start=0:\ -interp_end=255:\ -scene=100 \ --metadata "title"="$(pwd | sed "s/.*\///")" \ -output.mkv + -framerate 0.20 -loop 1 \ + -f image2pipe \ + -i - \ + -c:v libx264 -quality quality -tune stillimage \ + -qmin 12 -qmax 28 -qdiff 16 \ + -vf \ + fps=1,\ + framerate=25:\ + interp_start=0:\ + interp_end=255:\ + scene=100 \ + -metadata "title"="$(pwd | sed "s/.*\///")" \ + output.mkv diff --git a/video/vaapiencode b/video/vaapiencode new file mode 100755 index 0000000..ae079f2 --- /dev/null +++ b/video/vaapiencode @@ -0,0 +1,9 @@ +#!/bin/sh +ffmpeg -hwaccel vaapi -hwaccel_output_format vaapi -vaapi_device /dev/dri/renderD128 \ + -ss 60 \ + -i "$1" \ + -t 60 \ + -c:v h264_vaapi \ + -b:v 1000k \ + -c:a libopus -b:a 128k \ + "h264_$1.mkv" diff --git a/x11/xkeyconf b/x11/xkeyconf index cea356f..bc310b6 100755 --- a/x11/xkeyconf +++ b/x11/xkeyconf @@ -1,12 +1,5 @@ #!/bin/sh -# Faster repeated keys and less delay before repeating -xset r rate 250 50 & - -# Remap caps to super when held -setxkbmap -option caps:super - -# Remap caps to escape when pressed -killall xcape 2>/dev/null ; xcape -e 'Super_L=Escape' - -# Turn off caps lock, just in case it was on prior -xset -q | grep "Caps Lock:\s*on" && xdotool key Caps_Lock +xset r rate 250 50 & # Faster repeated keys and less delay before repeating +setxkbmap -option caps:super # Remap caps to super when held +killall xcape 2>/dev/null ; xcape -e 'Super_L=Escape' # Remap caps to escape when pressed +xset -q | grep "Caps Lock:\s*on" && xdotool key Caps_Lock # Turn off caps lock, just in case it was on prior @@ -1,7 +1,8 @@ #!/bin/sh -sudo=doas +sudo=${SUDO:-sudo} while ! echo "$pass" | $sudo -n true; do pass="$(dmenu -p 'Password: ' <&-)" # Ask user for password pass is incorrect (skipped if nopass in enabled) [ "$pass" = '' ] && exit 0 done -echo "$pass" | $sudo xauth -f /root/.Xauthority add $(xauth list $DISPLAY) && echo "$pass" | $sudo "$@" +echo "$pass" | $sudo xauth -f /root/.Xauthority add $(xauth list $DISPLAY) \ + && echo "$pass" | $sudo "$@" |