From 3e5458c95c50c06523de4c3cd8dc425f67d4dea5 Mon Sep 17 00:00:00 2001 From: Tyler Hoang Date: Sat, 6 Nov 2021 21:07:20 -0700 Subject: initial commit --- 4viewer | 22 +++ ani-cli | 418 +++++++++++++++++++++++++++++++++++++++++++++++ booksplit | 46 ++++++ compiler | 57 +++++++ cron/README.md | 11 ++ cron/checkup | 17 ++ cron/crontog | 6 + cron/newsup | 15 ++ displayselect | 83 ++++++++++ dmenuhandler | 21 +++ dmenumount | 67 ++++++++ dmenumountcifs | 19 +++ dmenupass | 6 + dmenurecord | 123 ++++++++++++++ dmenuumount | 44 +++++ dmenuunicode | 18 ++ getbib | 14 ++ getkeys | 5 + ifinstalled | 12 ++ lf-select | 9 + linkhandler | 23 +++ maimpick | 14 ++ ncmpcpp-ueberzug | 1 + noisereduce | 81 +++++++++ opout | 13 ++ passmenu-otp | 30 ++++ pauseallmpv | 10 ++ peertubetorrent | 7 + podentr | 7 + prompt | 8 + qndl | 12 ++ queueandnotify | 14 ++ remaps | 13 ++ rotdir | 12 ++ rssadd | 18 ++ samedir | 10 ++ setbg | 33 ++++ shortcuts | 40 +++++ slider | 126 ++++++++++++++ statusbar/sb-battery | 37 +++++ statusbar/sb-clock | 29 ++++ statusbar/sb-cpu | 12 ++ statusbar/sb-cpubars | 44 +++++ statusbar/sb-disk | 23 +++ statusbar/sb-doppler | 206 +++++++++++++++++++++++ statusbar/sb-forecast | 35 ++++ statusbar/sb-help-icon | 17 ++ statusbar/sb-internet | 26 +++ statusbar/sb-iplocate | 10 ++ statusbar/sb-kbselect | 16 ++ statusbar/sb-mailbox | 20 +++ statusbar/sb-memory | 12 ++ statusbar/sb-moonphase | 37 +++++ statusbar/sb-mpdup | 8 + statusbar/sb-music | 19 +++ statusbar/sb-nettraf | 29 ++++ statusbar/sb-news | 17 ++ statusbar/sb-pacpackages | 29 ++++ statusbar/sb-popupgrade | 9 + statusbar/sb-price | 50 ++++++ statusbar/sb-tasks | 20 +++ statusbar/sb-torrent | 27 +++ statusbar/sb-volume | 30 ++++ sysact | 18 ++ tag | 67 ++++++++ td-toggle | 12 ++ texclear | 16 ++ torwrap | 7 + transadd | 9 + tutorialvids | 26 +++ unix | 26 +++ 71 files changed, 2428 insertions(+) create mode 100755 4viewer create mode 100755 ani-cli create mode 100755 booksplit create mode 100755 compiler create mode 100644 cron/README.md create mode 100755 cron/checkup create mode 100755 cron/crontog create mode 100755 cron/newsup create mode 100755 displayselect create mode 100755 dmenuhandler create mode 100755 dmenumount create mode 100755 dmenumountcifs create mode 100755 dmenupass create mode 100755 dmenurecord create mode 100755 dmenuumount create mode 100755 dmenuunicode create mode 100755 getbib create mode 100755 getkeys create mode 100755 ifinstalled create mode 100755 lf-select create mode 100755 linkhandler create mode 100755 maimpick create mode 120000 ncmpcpp-ueberzug create mode 100755 noisereduce create mode 100755 opout create mode 100755 passmenu-otp create mode 100755 pauseallmpv create mode 100755 peertubetorrent create mode 100755 podentr create mode 100755 prompt create mode 100755 qndl create mode 100755 queueandnotify create mode 100755 remaps create mode 100755 rotdir create mode 100755 rssadd create mode 100755 samedir create mode 100755 setbg create mode 100755 shortcuts create mode 100755 slider create mode 100755 statusbar/sb-battery create mode 100755 statusbar/sb-clock create mode 100755 statusbar/sb-cpu create mode 100755 statusbar/sb-cpubars create mode 100755 statusbar/sb-disk create mode 100755 statusbar/sb-doppler create mode 100755 statusbar/sb-forecast create mode 100755 statusbar/sb-help-icon create mode 100755 statusbar/sb-internet create mode 100755 statusbar/sb-iplocate create mode 100755 statusbar/sb-kbselect create mode 100755 statusbar/sb-mailbox create mode 100755 statusbar/sb-memory create mode 100755 statusbar/sb-moonphase create mode 100755 statusbar/sb-mpdup create mode 100755 statusbar/sb-music create mode 100755 statusbar/sb-nettraf create mode 100755 statusbar/sb-news create mode 100755 statusbar/sb-pacpackages create mode 100755 statusbar/sb-popupgrade create mode 100755 statusbar/sb-price create mode 100755 statusbar/sb-tasks create mode 100755 statusbar/sb-torrent create mode 100755 statusbar/sb-volume create mode 100755 sysact create mode 100755 tag create mode 100755 td-toggle create mode 100755 texclear create mode 100755 torwrap create mode 100755 transadd create mode 100755 tutorialvids create mode 100755 unix diff --git a/4viewer b/4viewer new file mode 100755 index 0000000..47b7f32 --- /dev/null +++ b/4viewer @@ -0,0 +1,22 @@ +#!/bin/bash + +archivegif () { +LINK=$(curl -s "${1}") +title=$(echo "$LINK" | grep -oE post_title.*\<\/h2\> | head -1 | sed 's/post_title">//' | sed 's/<\/h2>//') +urls=$(echo "$LINK" | grep -oP '"\K[^"\047]+(?=["\047])' | grep -E ".gif|.webm" | grep -v "s\." | grep "//" | grep torako | uniq) +} + + +mpv-chan() { + URL=$1 + BOARD=$(echo $URL| grep -Po '([\w\d]+)\/thread' |cut -d'/' -f1) + title=$(curl -sL "${URL}.json" | jq -cr '.posts[0].sub') + urls=$(curl -sL "${URL}.json"|jq -cr '.posts[]|("https://i.4cdn.org/'${BOARD}'/"+(.tim|tostring) + .ext )'|grep -v null|paste -sd ' ') +} + +if [[ "$1" == *"boards"* ]]; then + mpv-chan "$1" + else + archivegif "$1" +fi +mpv --quiet --prefetch-playlist=yes --no-pause --force-media-title="$title" --demuxer-cache-wait=no $urls diff --git a/ani-cli b/ani-cli new file mode 100755 index 0000000..27c7096 --- /dev/null +++ b/ani-cli @@ -0,0 +1,418 @@ +#!/bin/sh + +# dependencies: grep sed curl video_player +# video_player ( needs to be able to play urls ) +player_fn="mpv" + +prog="ani-cli" +logfile="${XDG_CACHE_HOME:-$HOME/.cache}/ani-hsts" +base_url="https://gogoanime.cm" + +c_red="\033[1;31m" +c_green="\033[1;32m" +c_yellow="\033[1;33m" +c_blue="\033[1;34m" +c_magenta="\033[1;35m" +c_cyan="\033[1;36m" +c_reset="\033[0m" + + +help_text () { + while IFS= read line; do + printf "%s\n" "$line" + done <<-EOF + USAGE: $prog + -h show this help text + -d download episode + -H continue where you left off + -D delete history + -q set video quality (best/worst/360/480/720/..) + --dub play the dub version if present + EOF +} + + +die () { + printf "$c_red%s$c_reset\n" "$*" >&2 + exit 1 +} + +err () { + printf "$c_red%s$c_reset\n" "$*" >&2 +} + +search_anime () { + # get anime name along with its id + search=$(printf '%s' "$1" | tr ' ' '-' ) + titlepattern='&2 + quality=best + video_quality=$(printf '%s' "$available_qualities" | tail -n 1) + fi + printf '%s' "$video_quality" + ;; + esac + +} + +get_links () { + embedded_video_url="$1" + video_url=$(curl -s "$embedded_video_url" | + sed -n -E ' + /^[[:space:]]*sources:/{ + s/.*(https[^'\'']*).*/\1/p + q + } + ') + + video_quality=$(get_video_quality "$embedded_video_url" "$video_url") + + # Replace the video with highest quality video + printf '%s' "$video_url" | sed -n -E "s/(.*)\.m3u8/\1.$video_quality.m3u8/p" +} + +dep_ch () { + for dep; do + if ! command -v "$dep" >/dev/null ; then + die "Program \"$dep\" not found. Please install it." + fi + done +} + +# get query +get_search_query () { + if [ -z "$*" ]; then + printf "Search Anime: " + read -r query + else + query=$* + fi +} + +# create history file +[ -f "$logfile" ] || : > "$logfile" + +##################### +## Anime selection ## +##################### + +anime_selection () { + search_results=$* + menu_format_string='[%d] %s\n' + menu_format_string_c1="$c_blue[$c_cyan%d$c_blue] $c_reset%s\n" + menu_format_string_c2="$c_blue[$c_cyan%d$c_blue] $c_yellow%s$c_reset\n" + + count=1 + while read anime_id; do + # alternating colors for menu + [ $((count % 2)) -eq 0 ] && + menu_format_string=$menu_format_string_c1 || + menu_format_string=$menu_format_string_c2 + + printf "$menu_format_string" "$count" "$anime_id" + count=$((count+1)) + done <<-EOF + $search_results + EOF + + # User input + printf "$c_blue%s$c_green" "Enter number: " + read choice + printf "$c_reset" + + # Check if input is a number + [ "$choice" -eq "$choice" ] 2>/dev/null || die "Invalid number entered" + + # Select respective anime_id + count=1 + while read anime_id; do + if [ $count -eq $choice ]; then + selection_id=$anime_id + break + fi + count=$((count+1)) + done <<-EOF + $search_results + EOF + + [ -z "$selection_id" ] && die "Invalid number entered" + + read last_ep_number <<-EOF + $(search_eps "$selection_id") + EOF +} + +################## +## Ep selection ## +################## + +episode_selection () { + ep_choice_start="1" + if [ $last_ep_number -gt 1 ] + then + [ $is_download -eq 1 ] && + printf "Range of episodes can be specified: start_number end_number\n" + + printf "${c_blue}Choose episode $c_cyan[1-%d]$c_reset:$c_green " $last_ep_number + read ep_choice_start ep_choice_end + printf "$c_reset" + fi +} + +check_input() { + [ "$ep_choice_start" -eq "$ep_choice_start" ] 2>/dev/null || die "Invalid number entered" + episodes=$ep_choice_start + if [ -n "$ep_choice_end" ]; then + [ "$ep_choice_end" -eq "$ep_choice_end" ] 2>/dev/null || die "Invalid number entered" + # create list of episodes to download/watch + episodes=$(seq $ep_choice_start $ep_choice_end) + fi +} + +append_history () { + grep -q -w "${selection_id}" "$logfile" || + printf "%s\t%d\n" "$selection_id" $((episode+1)) >> "$logfile" +} + +open_selection() { + for ep in $episodes + do + open_episode "$selection_id" "$ep" + done + episode=${ep_choice_end:-$ep_choice_start} +} + +open_episode () { + anime_id=$1 + episode=$2 + + # Cool way of clearing screen + tput reset + while [ "$episode" -lt 1 ] || [ "$episode" -gt "$last_ep_number" ] + do + err "Episode out of range" + printf "${c_blue}Choose episode $c_cyan[1-%d]$c_reset:$c_green " $last_ep_number + read episode + printf "$c_reset" + done + + printf "Getting data for episode %d\n" $episode + + embedded_video_url=$(get_embedded_video_link "$anime_id" "$episode") + video_url=$(get_links "$embedded_video_url") + + case $video_url in + *streamtape*) + # If direct download not available then scrape streamtape.com + BROWSER=${BROWSER:-firefox} + printf "scraping streamtape.com\n" + video_url=$(curl -s "$video_url" | sed -n -E ' + /^