aboutsummaryrefslogtreecommitdiff
path: root/scripts/.local
diff options
context:
space:
mode:
Diffstat (limited to 'scripts/.local')
-rwxr-xr-xscripts/.local/bin/personal/autostart/autostart.sh6
-rwxr-xr-xscripts/.local/bin/personal/dlaudio13
-rwxr-xr-xscripts/.local/bin/personal/external/reStream.sh296
-rwxr-xr-xscripts/.local/bin/personal/old/compresspdf7
-rwxr-xr-xscripts/.local/bin/personal/old/micrec3
5 files changed, 322 insertions, 3 deletions
diff --git a/scripts/.local/bin/personal/autostart/autostart.sh b/scripts/.local/bin/personal/autostart/autostart.sh
new file mode 100755
index 0000000..6e01dd6
--- /dev/null
+++ b/scripts/.local/bin/personal/autostart/autostart.sh
@@ -0,0 +1,6 @@
+#!/bin/dash
+
+/usr/bin/jupyter-lab --no-browser &
+/usr/bin/syncthing --no-browser &
+/usr/bin/otd-daemon &
+/usr/bin/easyeffects -w &
diff --git a/scripts/.local/bin/personal/dlaudio b/scripts/.local/bin/personal/dlaudio
index 3bd414c..05b8917 100755
--- a/scripts/.local/bin/personal/dlaudio
+++ b/scripts/.local/bin/personal/dlaudio
@@ -1,10 +1,17 @@
#!/bin/bash
-# A script to not make me type all that argument **** when I want to download music.
-# Yes I am lazy.
+# A script to download audio from various web sources. Optionally into a specific directory.
+
+specific_dir="$HOME/music/files"
+template="%(title)s.%(ext)s"
if [[ -n "$1" ]]; then
- yt-dlp "$1" --extract-audio -i -o "%(title)s.%(ext)s" --audio-format mp3 --cookies "~/.config/cookies.txt" &&
+ url="$1"
+
+ if [[ "$2" = "m" || "$1" = "m" ]]; then template="$specific_dir/$template"; fi
+ if [[ "$1" = "m" && -n "$2" ]]; then url="$2"; fi
+
+ yt-dlp "$url" --extract-audio -i -o "$template" --audio-format mp3 --cookies "$HOME/.config/cookies.txt" &&
exit 0 ||
exit 1
else
diff --git a/scripts/.local/bin/personal/external/reStream.sh b/scripts/.local/bin/personal/external/reStream.sh
new file mode 100755
index 0000000..0315087
--- /dev/null
+++ b/scripts/.local/bin/personal/external/reStream.sh
@@ -0,0 +1,296 @@
+#!/bin/sh
+
+# Current reStream.sh version
+version="1.2.0"
+
+# video_filters links:
+# https://ffmpeg.org/doxygen/trunk/pixfmt_8h_source.html
+# https://ffmpeg.org/ffmpeg-filters.html#eq
+
+rm2_old_firmware_version="3.7.0.1930"
+
+# default values for arguments
+remarkable="${REMARKABLE_IP:-10.11.99.1}" # remarkable IP address
+landscape=false # rotate 90 degrees to the right
+cursor=false # show a cursor where the pen is hovering
+output_path=- # display output through ffplay
+format=- # automatic output format
+webcam=false # not to a webcam
+hflip=false # horizontal flip webcam
+measure_throughput=false # measure how fast data is being transferred
+window_title=reStream # stream window title is reStream
+video_filters="" # list of ffmpeg filters to apply
+unsecure_connection=false # Establish a unsecure connection that is faster
+
+# loop through arguments and process them
+while [ $# -gt 0 ]; do
+ case "$1" in
+ -v | --version)
+ echo "reStream version: v$version"
+ exit
+ ;;
+ -p | --portrait)
+ landscape=false
+ shift
+ ;;
+ -c | --cursor)
+ cursor=true
+ shift
+ ;;
+ -s | --source)
+ remarkable="$2"
+ shift
+ shift
+ ;;
+ -o | --output)
+ output_path="$2"
+ shift
+ shift
+ ;;
+ -f | --format)
+ format="$2"
+ shift
+ shift
+ ;;
+ -m | --measure)
+ measure_throughput=true
+ shift
+ ;;
+ -w | --webcam)
+ webcam=true
+ format="v4l2"
+
+ # check if there is a modprobed v4l2 loopback device
+ # use the first cam as default if there is no output_path already
+ cam_path=$(v4l2-ctl --list-devices \
+ | sed -n '/^[^\s]\+platform:v4l2loopback/{n;s/\s*//g;p;q}')
+
+ # fail if there is no such device
+ if [ -e "$cam_path" ]; then
+ if [ "$output_path" = "-" ]; then
+ output_path="$cam_path"
+ fi
+ else
+ echo "Could not find a video loopback device, did you"
+ echo "sudo modprobe v4l2loopback"
+ exit 1
+ fi
+ shift
+ ;;
+ --mirror)
+ # do nothing if --webcam is not set
+ hflip=true
+ shift
+ ;;
+ -t | --title)
+ window_title="$2"
+ shift
+ shift
+ ;;
+ -u | --unsecure-connection)
+ unsecure_connection=true
+ shift
+ ;;
+ -h | --help | *)
+ echo "Usage: $0 [-p] [-c] [-u] [-s <source>] [-o <output>] [-f <format>] [-t <title>] [-m] [-w] [--hflip]"
+ echo "Examples:"
+ echo " $0 # live view in landscape"
+ echo " $0 -p # live view in portrait"
+ echo " $0 -c # show a cursor where the pen is hovering (rM2 only)"
+ echo " $0 -s 192.168.0.10 # connect to different IP"
+ echo " $0 -o remarkable.mp4 # record to a file"
+ echo " $0 -o udp://dest:1234 -f mpegts # record to a stream"
+ echo " $0 -w --mirror # write to a webcam (yuv420p + resize + mirror)"
+ echo " $0 -u # establish a unsecure but faster connection"
+ exit 1
+ ;;
+ esac
+done
+
+ssh_cmd() {
+ echo "[SSH]" "$@" >&2
+ ssh -o ConnectTimeout=1 \
+ -o PasswordAuthentication=no \
+ -o PubkeyAcceptedKeyTypes=+ssh-rsa \
+ -o HostKeyAlgorithms=+ssh-rsa \
+ "root@$remarkable" "$@"
+}
+
+is_current_rm_firmware_version_ge() {
+ current_rm_firmware_version=$(ssh_cmd "grep 'REMARKABLE_RELEASE_VERSION=' /usr/share/remarkable/update.conf | cut -d '=' -f2")
+ test "$(printf '%s\n' "$current_rm_firmware_version" "$1" | sort -rV | head -n 1)" = "$current_rm_firmware_version"
+}
+
+# kill reStream on remarkable at the end.
+# shellcheck disable=SC2016
+exit_rm() {
+ ssh_cmd 'kill $(pidof restream)'
+}
+trap exit_rm EXIT INT HUP
+
+# SSH_CONNECTION is a variable on reMarkable => ssh '' instead of ssh ""
+# shellcheck disable=SC2016
+remarkable_ip() {
+ ssh_cmd 'echo $SSH_CONNECTION' | cut -d\ -f3
+}
+
+# check if we are able to reach the remarkable
+if ! ssh_cmd true; then
+ echo "$remarkable unreachable or you have not set up an ssh key."
+ echo "If you see a 'Permission denied' error, please visit"
+ echo "https://github.com/rien/reStream/#installation for instructions."
+ trap - EXIT
+ exit 1
+fi
+
+rm_version="$(ssh_cmd cat /sys/devices/soc0/machine)"
+
+case "$rm_version" in
+ "reMarkable 1.0")
+ width=1408
+ height=1872
+ bytes_per_pixel=2
+ fb_file="/dev/fb0"
+ pixel_format="rgb565le"
+ ;;
+ "reMarkable 2.0")
+ if ssh_cmd "[ -f /dev/shm/swtfb.01 ]"; then
+ width=1404
+ height=1872
+ bytes_per_pixel=2
+ fb_file="/dev/shm/swtfb.01"
+ pixel_format="rgb565le"
+ else
+ width=1872
+ height=1404
+ fb_file=":mem:"
+
+ # Use updated video settings?
+ if is_current_rm_firmware_version_ge $rm2_old_firmware_version; then
+ echo "Using the newer :mem: video settings."
+ bytes_per_pixel=2
+ pixel_format="gray16be"
+ video_filters="$video_filters colorlevels=rimin=0:rimax=29/255:gimin=0:gimax=29/255:bimin=0:bimax=29/255,transpose=3"
+ # Use the previous video settings.
+ else
+ echo "Using the older :mem: video settings."
+ bytes_per_pixel=1
+ pixel_format="gray8"
+ video_filters="$video_filters,transpose=2"
+ fi
+ fi
+ ;;
+ *)
+ echo "Unsupported reMarkable version: $rm_version."
+ echo "Please visit https://github.com/rien/reStream/ for updates."
+ exit 1
+ ;;
+esac
+
+# technical parameters
+loglevel="info"
+decompress="lz4 -d"
+
+# check if lz4 is present on the host
+if ! lz4 -V >/dev/null; then
+ echo "Your host does not have lz4."
+ echo "Please install it using the instruction in the README:"
+ echo "https://github.com/rien/reStream/#installation"
+ exit 1
+fi
+
+# check if restream binay is present on remarkable
+if ssh_cmd "[ ! -f ~/restream ] && [ ! -f /opt/bin/restream ]"; then
+ echo "The restream binary is not installed on your reMarkable."
+ echo "Please install it using the instruction in the README:"
+ echo "https://github.com/rien/reStream/#installation"
+ exit 1
+fi
+
+# use pv to measure throughput if desired, else we just pipe through cat
+if $measure_throughput; then
+ if ! pv --version >/dev/null; then
+ echo "You need to install pv to measure data throughput."
+ exit 1
+ else
+ loglevel="error" # verbose ffmpeg output interferes with pv
+ host_passthrough="pv"
+ fi
+else
+ host_passthrough="cat"
+fi
+
+# store extra ffmpeg arguments in $@
+set --
+
+# rotate 90 degrees if landscape=true
+$landscape && video_filters="$video_filters,transpose=1"
+
+# Scale and add padding if we are targeting a webcam because a lot of services
+# expect a size of exactly 1280x720 (tested in Firefox, MS Teams, and Skype for
+# for business). Send a PR if you can get a higher resolution working.
+if $webcam; then
+ video_filters="$video_filters,format=pix_fmts=yuv420p"
+ video_filters="$video_filters,scale=-1:720"
+ video_filters="$video_filters,pad=1280:0:-1:0:#eeeeee"
+
+ # Some applications, eg Zoom and Discord, mirror by default the webcam video
+ # Restore the correct orientation
+ $hflip && video_filters="$video_filters,hflip"
+fi
+
+# set each frame presentation time to the time it is received
+video_filters="$video_filters,setpts=(RTCTIME - RTCSTART) / (TB * 1000000)"
+
+set -- "$@" -vf "${video_filters#,}"
+
+if [ "$output_path" = - ]; then
+ output_cmd=ffplay
+
+ window_title_option="-window_title $window_title"
+else
+ output_cmd=ffmpeg
+
+ if [ "$format" != - ]; then
+ set -- "$@" -f "$format"
+ fi
+
+ set -- "$@" "$output_path"
+fi
+
+set -e # stop if an error occurs
+
+restream_options="-h $height -w $width -b $bytes_per_pixel -f $fb_file"
+
+if "$cursor"; then
+ restream_options="$restream_options -c"
+fi
+
+# shellcheck disable=SC2089
+restream_rs="PATH=\"\$PATH:/opt/bin/:.\" restream $restream_options"
+if $unsecure_connection; then
+ listen_port=16789
+ ssh_cmd "$restream_rs --listen $listen_port" &
+ sleep 1 # give some time to restream.rs to start listening
+ receive_cmd="nc $(remarkable_ip) $listen_port"
+else
+ receive_cmd="ssh_cmd $restream_rs"
+fi
+
+# shellcheck disable=SC2086,SC2090
+$receive_cmd \
+ | $decompress \
+ | $host_passthrough \
+ | (
+ "$output_cmd" \
+ -vcodec rawvideo \
+ -loglevel "$loglevel" \
+ -f rawvideo \
+ -pixel_format "$pixel_format" \
+ -video_size "$width,$height" \
+ $window_title_option \
+ -i - \
+ "$@" \
+ ;
+ kill $$
+ )
diff --git a/scripts/.local/bin/personal/old/compresspdf b/scripts/.local/bin/personal/old/compresspdf
new file mode 100755
index 0000000..beffebd
--- /dev/null
+++ b/scripts/.local/bin/personal/old/compresspdf
@@ -0,0 +1,7 @@
+#!/bin/bash
+
+if [[ -e $1 ]]; then
+ pdf2ps "$1" && ps2pdf "$1" && printf "done"
+else
+ printf "Error"
+fi
diff --git a/scripts/.local/bin/personal/old/micrec b/scripts/.local/bin/personal/old/micrec
new file mode 100755
index 0000000..1c5355e
--- /dev/null
+++ b/scripts/.local/bin/personal/old/micrec
@@ -0,0 +1,3 @@
+#!/bin/bash
+
+[[ -n "$1" ]] && ffmpeg -f dshow -i audio="$1" -c:a libmp3lame -b:a 128k OUTPUT.mp3 || echo "no audio device in argument"