commit 5228e17590f5c678984b953bd123487de0b8ca2f
parent 2a21068cf6d4cdef67e0a1f0317818735d361b18
Author: Wim Dupont <wim@wimdupont.com>
Date: Sat, 20 Jan 2024 10:54:48 +0100
update and added scripts
Diffstat:
17 files changed, 278 insertions(+), 58 deletions(-)
diff --git a/README.adoc b/README.adoc
@@ -3,6 +3,29 @@
For certain scripts I've added a _"requires"_ section to specify software which is less likely to be installed by default that the script uses.
Most of these can be changed with alternatives by choice if willing to edit the script.
+== link:bin/askpass[askpass]
+
+Prompts for sudo password - using Zenity GUI only when using display server. Meant to be used with addition to the sudo.conf:
+
+[source, conf]
+----
+Path askpass /path/to/askpass
+----
+
+With this, sudo -A can be used to prompt this script.
+
+.Requires:
+
+* https://gitlab.gnome.org/GNOME/zenity[zenity]
+
+== link:bin/auru[auru]
+
+Arch Linux AUR updater. Edit path to your AUR repositories in the script before running. For every updated repository, a file selector GUI will prompt to the delete outdated files.
+
+.Requires:
+
+* https://gitlab.gnome.org/GNOME/zenity[zenity]
+
== link:bin/bookmark[bookmark]
Uses dmenu to browse and open URL's in your browser saved in a textfile (default in ~/.config/scripts/bookmarks).
@@ -41,6 +64,22 @@ Uses dmenu to browse through music directory, including option to shuffle when c
* http://cvs.schmorp.de/rxvt-unicode/[urxvt]
* https://github.com/mpv-player/mpv[mpv]
+== link:bin/mpvpop[mpvpop]
+
+Uses mpv socket to be able to update and grab info of currently played mpv file and/or playlist.
+
+Can be used using '--input-ipc-server=/tmp/mpvsocket' mpv argument. If you always want this active than you are better off adding to mpv.conf:
+
+[source,conf]
+----
+input-ipc-server=/tmp/mpvsocket
+----
+
+.Requires:
+
+* https://github.com/mpv-player/mpv[mpv]
+* https://github.com/dunst-project/dunst[dunst]
+
== link:bin/otp[otp]
Lists files safed under the "~/.password-store/totp/" directory in dmenu or as argument and generates TOTP code based on chosen file.
@@ -78,6 +117,16 @@ Uses dmenu to browse and play online radio stations saved in a textfile (default
* http://cvs.schmorp.de/rxvt-unicode/[urxvt]
* https://github.com/mpv-player/mpv[mpv]
+== link:bin/ugamma[ugamma]
+
+Helper script to update X.org gamma value.
+
+.Requires:
+
+* https://github.com/dunst-project/dunst[dunst]
+* https://gitlab.freedesktop.org/xorg/app/xgamma[xorg-xgamma]
+* https://github.com/lcn2/calc[calc]
+
== link:bin/yt[yt]
Uses mpv and youtube-dl (or forks such as yt-dlp) to easily look up videos from command-line with an audio-only option and an option to specify the amount of results.
diff --git a/bin/askpass b/bin/askpass
@@ -0,0 +1,7 @@
+#!/bin/bash
+
+if [[ -n $DISPLAY ]]; then
+ zenity --password --title="Sudo password prompt"
+else
+ read -s -p "Sudo password: " password && echo -n "${password}"
+fi
diff --git a/bin/auru b/bin/auru
@@ -0,0 +1,21 @@
+#!/bin/bash
+
+readonly AUR_DIR="$HOME/aur"
+readonly AUR_LIST=($(find "${AUR_DIR}" -type d -name '.git' | sed 's/\.git//g'))
+
+for aur in "${AUR_LIST[@]}"; do
+ cd "${aur}"
+ git_result=$(git pull)
+
+ test "${git_result}" == "Already up to date." && echo "${aur} up to date." && continue;
+
+ echo "${git_result}"
+
+ makepkg -rcsi
+
+ IFS='|' read -ra to_delete <<< $(zenity --file-selection --title "Select old-version files to delete." --filename "${aur}/*" --multiple)
+
+ for file_to_delete in "${to_delete[@]}"; do
+ rm -rfv "${file_to_delete}"
+ done
+done
diff --git a/bin/bookmark b/bin/bookmark
@@ -4,22 +4,27 @@ source ~/.config/scripts/properties
shopt -s nullglob globstar
-font=$DMENU_FONT
-lines=$DMENU_LINES
+readonly FONT=$DMENU_FONT
+readonly LINES=$DMENU_LINES
+readonly DMENU=dmenu
+readonly BOOKMARK_FILE=~/.config/scripts/bookmarks
+readonly SEARCH_URI="http://localhost/search?q="
-dmenu=dmenu
-file=~/.config/scripts/bookmarks
+readarray -t bookmarks < "$BOOKMARK_FILE"
-readarray -t bookmarks < "$file"
-
-bookmark=$(printf '%s\n' "${bookmarks[@]}" | "$dmenu" -fn "$font" -i -l "$lines" "$@")
+bookmark=$(printf '%s\n' "${bookmarks[@]}" | "$DMENU" -fn "$FONT" -i -l "$LINES" "$@")
if [ -z "${bookmark}" ]; then
exit 0
fi
-if [[ "${bookmark}" != https://* ]]; then
- bookmark="http://localhost/search?q=${bookmark}"
+if [[ ! ${bookmark} =~ ^(https?://*) ]]; then
+ readonly WITH_SEARCH_ENGINE=$(printf "yes\nno" | "$DMENU" -fn "$FONT" -i "$@" -p "Use search engine?")
+ if [[ "${WITH_SEARCH_ENGINE}" == yes ]]; then
+ bookmark="${SEARCH_URI}${bookmark}"
+ else
+ bookmark="https://${bookmark}"
+ fi
fi
xdg-open "${bookmark}" >/dev/null 2>&1 & disown
diff --git a/bin/coin b/bin/coin
@@ -26,7 +26,7 @@ shift $((OPTIND-1))
# function to join arguments with the first one being the separator
-joinByString() {
+join_by_string() {
local separator="$1"
shift
local first="$1"
@@ -37,7 +37,7 @@ joinByString() {
# turns script arguments into api currency params if not empty
if [[ ! -z "${@// }" ]] ; then
- currencyParam=$(joinByString ',' "$@")
+ currencyParam=$(join_by_string ',' "$@")
fi
# grab data from coinggecko api
@@ -53,5 +53,5 @@ data=$(curl -X 'GET' \
if [ -z "$dataFilter" ]; then
echo ${data} | jq
else
- echo ${data} | jq ".[] | $(joinByString ', ' ${dataFilter[@]/#/.})"
+ echo ${data} | jq ".[] | $(join_by_string ', ' ${dataFilter[@]/#/.})"
fi
diff --git a/bin/decr b/bin/decr
@@ -2,8 +2,8 @@
gpg $1
-tar=$(echo $1 | sed 's/.gpg//g')
+readonly TAR=$(echo $1 | sed 's/.gpg//g')
-tar -xf "$tar"
+trap "shred -u $TAR" EXIT
-shred -u "$tar"
+tar -xf "$TAR"
diff --git a/bin/encr b/bin/encr
@@ -1,7 +1,7 @@
#!/bin/bash
#Encrypted file with default symmetric password
-sym_pwd=$HOME/.sym-pwd.gpg
+readonly SYM_PWD=$HOME/.sym-pwd.gpg
disable_default_pwd=0
asymmetric=0
@@ -28,8 +28,8 @@ tar -cf "$file".tar "$file"
trap 'shred -u "$file".tar' EXIT
if [ $asymmetric -eq 0 ]; then
- if [ $disable_default_pwd -eq 0 ] && [ -f "$sym_pwd" ]; then
- pwd=$(gpg --decrypt "${sym_pwd}" 2>/dev/null)
+ if [ $disable_default_pwd -eq 0 ] && [ -f "$SYM_PWD" ]; then
+ pwd=$(gpg --decrypt "${SYM_PWD}" 2>/dev/null)
gpg --passphrase "${pwd}" --batch --yes -c --no-symkey-cache --cipher-algo AES256 "$file".tar
else
gpg -c --no-symkey-cache --cipher-algo AES256 "$file".tar
diff --git a/bin/mpvd b/bin/mpvd
@@ -3,10 +3,10 @@
source ~/.config/scripts/properties
shopt -s nullglob globstar
-font=$DMENU_FONT
-lines=$DMENU_LINES
-dmenu=dmenu
+readonly FONT=$DMENU_FONT
+readonly LINES=$DMENU_LINES
+readonly DMENU=dmenu
prefix=${MUSIC_DIR-~/Music}
musicdirs=( "$prefix"/*/)
@@ -22,11 +22,11 @@ done
songdirs=( "${songdirs[@]#"$prefix"/}" )
songdirs=( "${songdirs[@]%/}" )
-songdir=$(printf '%s\n' "${songdirs[@]}" | "$dmenu" -fn "$font" -i -l "$lines" "$@")
+songdir=$(printf '%s\n' "${songdirs[@]}" | "$DMENU" -fn "$FONT" -i -l "$LINES" "$@")
[[ -n $songdir ]] || exit
-playsongdir=$(printf "no\nyes" | "$dmenu" -fn "$font" -i "$@" -p "Play full directory?")
+playsongdir=$(printf "no\nyes" | "$DMENU" -fn "$FONT" -i "$@" -p "Play full directory?")
[[ -n $playsongdir ]] || exit
@@ -35,10 +35,10 @@ if [[ "$playsongdir" == no ]]; then
songdirs=( "$prefix"/**/*)
songdirs=( "${songdirs[@]#"$prefix"/}" )
songdirs=( "${songdirs[@]%}" )
- songdir=$(printf '%s\n' "${songdirs[@]}" | "$dmenu" -fn "$font" -i -l "$lines" "$@")
+ songdir=$(printf '%s\n' "${songdirs[@]}" | "$DMENU" -fn "$FONT" -i -l "$LINES" "$@")
[[ -n $songdir ]] || exit
else
- random=$(printf "no\nyes" | "$dmenu" -fn "$font" -i "$@" -p "Shuffle?")
+ random=$(printf "no\nyes" | "$DMENU" -fn "$FONT" -i "$@" -p "Shuffle?")
[[ -n $random ]] || exit
diff --git a/bin/mpvpop b/bin/mpvpop
@@ -0,0 +1,110 @@
+#!/bin/bash
+
+shopt -s nullglob
+
+readonly SOCKET='/tmp/mpvsocket'
+
+help_msg() {
+ echo "
+ Usage:
+ ${PROGRAM} info
+ Show track info
+ ${PROGRAM} volume
+ Show current track volume or change it by passing value as argument (negative to lower)
+ ${PROGRAM} pause
+ Pause/unpause current track
+ ${PROGRAM} stop
+ Stop track/playlist
+ ${PROGRAM} next
+ Play next in playlist
+ ${PROGRAM} previous
+ Play previous in playlist
+ ${PROGRAM} help
+ Show this help menu
+"
+}
+
+trim() {
+ echo $1 | sed -re 's/^[[:blank:]]+|[[:blank:]]+$//g'
+}
+
+mpv_property_data() {
+ printf '{ "command": ["get_property", "%s"] }\n' "$1" | socat - "${SOCKET}" | jq -r ".data" 2> /dev/null
+}
+
+mpv_metadata() {
+ local -r METADATA=($(mpv_property_data "metadata"))
+ local -r KEYS=$(echo -n "${METADATA[*]}" | jq -r "keys[]" 2> /dev/null)
+
+ if [[ "${KEYS[@]}" =~ 'icy-title' ]]; then
+ local -r RESULTDATA=$(echo "${METADATA[*]}" | jq -r '."icy-title"')
+ # split by divider
+ IFS=$'-' data=(${RESULTDATA})
+ # print with newline splitter
+ printf "%s\n" "${data[@]}"
+ elif [[ "${KEYS[@]}" =~ 'title' ]]; then
+ echo "${METADATA[*]}" | jq -r '.artist,.title'
+ else
+ local -r FILENAME=$(mpv_property_data "filename")
+ # Remove extension
+ # print with newline splitter
+ printf "%s\n%s" "Track" "${FILENAME%.*}"
+ fi
+}
+
+mpv_filename() {
+ local -r FILENAME=$(mpv_property_data "filename")
+ # Remove extension
+ echo "${FILENAME%.*}"
+}
+
+track_info() {
+ local -r METADATA="$(mpv_metadata)"
+
+ # split by newline
+ IFS=$'\n' data=(${METADATA[*]})
+
+ dunstify -h string:x-dunst-stack-tag:track-info $(trim "${data[0]}") $(trim "${data[1]}" )
+}
+
+track_volume() {
+ test ! -z $1 && echo add volume $1 | socat - "${SOCKET}"
+ dunstify -h string:x-dunst-stack-tag:track-volume "Track Volume": $(mpv_property_data "volume")
+}
+
+track_pause() {
+ echo cycle pause | socat - "${SOCKET}"
+ dunstify -h string:x-dunst-stack-tag:track-pause "Track cycle pause"
+}
+
+track_stop() {
+ echo stop | socat - "${SOCKET}"
+ dunstify -h string:x-dunst-stack-tag:track-stop "Track stopped"
+}
+
+track_next() {
+ echo playlist-next | socat - "${SOCKET}"
+ sleep 0.5
+ track_info
+}
+
+track_prev() {
+ echo playlist-prev | socat - "${SOCKET}"
+ sleep 0.5
+ track_info
+}
+
+readonly PROGRAM="${0##*/}"
+readonly COMMAND="$1"
+
+case "$1" in
+ help|--help) shift; help_msg ;;
+ info|--info) shift; track_info ;;
+ volume|--volume) shift; track_volume "$@" ;;
+ pause|--pause) shift; track_pause ;;
+ stop|--stop) shift; track_stop ;;
+ next|--next) shift; track_next ;;
+ previous|--previous|prev|--prev) shift; track_prev ;;
+ *) notify-send "Unknown option" "Valid arg is required. --help for available options" ;;
+esac
+exit 0
diff --git a/bin/otp b/bin/otp
@@ -3,7 +3,7 @@
source ~/.config/scripts/properties
shopt -s nullglob globstar
-font=$DMENU_FONT
+readonly FONT=$DMENU_FONT
typeit=0
while getopts ":t" arg; do
@@ -64,7 +64,7 @@ if [ -n "${value}" ]; then
fi
fi
else
- password=$(printf '%s\n' "${password_files[@]}" | "$dmenu" -fn "$font" -i )
+ password=$(printf '%s\n' "${password_files[@]}" | "$dmenu" -fn "$FONT" -i )
[[ -n $password ]] || exit
use_arg_file "${password}"
diff --git a/bin/pclip b/bin/pclip
@@ -4,7 +4,7 @@ source ~/.config/scripts/properties
shopt -s nullglob globstar
-font=$DMENU_FONT
+readonly FONT=$DMENU_FONT
shift $((OPTIND-1))
@@ -28,7 +28,7 @@ clipboards[0]=$(echo -n "Primary: ${primary}" | tr -d '\n')
clipboards[1]=$(echo -n "Secondary: ${secondary}" | tr -d '\n')
clipboards[2]=$(echo -n "Clipboard: ${clipboard}" | tr -d '\n')
-selected=$(printf '%s\n' "${clipboards[@]}" | "$dmenu" -fn "$font" -i -l 10 "$@" )
+selected=$(printf '%s\n' "${clipboards[@]}" | "$dmenu" -fn "$FONT" -i -l 10 "$@" )
[[ -n "${selected}" ]] || exit
diff --git a/bin/pwu b/bin/pwu
@@ -4,7 +4,7 @@ source ~/.config/scripts/properties
shopt -s nullglob globstar
-font=$DMENU_FONT
+readonly FONT=$DMENU_FONT
typeit=0
no_console=0
@@ -63,7 +63,7 @@ function use_file () {
if [[ "$url" ]]; then
if [[ $quiet == 0 ]]; then
if [[ $typeit -eq 0 ]]; then
- openUrl=$(printf "yes\nno" | "$dmenu" -fn "$font" -i -p "Open $url in browser?")
+ openUrl=$(printf "yes\nno" | "$dmenu" -fn "$FONT" -i -p "Open $url in browser?")
if [[ "$openUrl" == yes ]]; then
xdg-open "${url}" >/dev/null 2>&1 & disown
fi
@@ -110,7 +110,7 @@ function use_otp () {
[[ $no_console == 0 ]] || exit
if [[ $quiet == 0 ]]; then
read -p "Press enter to continue"
- copyOtp=$(printf "yes\nno" | "$dmenu" -fn "$font" -i -p "Copy OTP to clipboard?")
+ copyOtp=$(printf "yes\nno" | "$dmenu" -fn "$FONT" -i -p "Copy OTP to clipboard?")
if [[ "$copyOtp" == yes ]]; then
clip_or_type_otp "$file"
fi
@@ -169,7 +169,7 @@ if [ -n "${value}" ]; then
fi
fi
else
- value=$(printf '%s\n' "${password_files[@]}" | "$dmenu" -fn "$font" -i )
+ value=$(printf '%s\n' "${password_files[@]}" | "$dmenu" -fn "$FONT" -i )
[[ -n $value ]] || exit
use_file "${value}"
diff --git a/bin/radio b/bin/radio
@@ -4,22 +4,21 @@ source ~/.config/scripts/properties
shopt -s nullglob globstar
-font=$DMENU_FONT
-lines=$DMENU_LINES
+readonly FONT=$DMENU_FONT
+readonly LINES=$DMENU_LINES
+readonly DMENU=dmenu
+readonly FILE=~/.config/scripts/radiostations
-dmenu=dmenu
-file=~/.config/scripts/radiostations
+readarray -t stations < "${FILE}"
-readarray -t stations < "${file}"
-
-stationName=$(printf '%s\n' "${stations[@]}" | cut -f1 -d ';' | "$dmenu" -fn "$font" -i -l "$lines" "$@")
+station_name=$(printf '%s\n' "${stations[@]}" | cut -f1 -d ';' | "$DMENU" -fn "$FONT" -i -l "$LINES" "$@")
for i in "${stations[@]}"
do
name=$(echo "$i" | cut -f1 -d ';')
- if [[ "${name}" == "${stationName}" ]]; then
+ if [[ "${name}" == "${station_name}" ]]; then
station=$(echo "$i" | cut -f2 -d ';')
urxvt -e mpv --no-video "${station}"
exit 0;
diff --git a/bin/ugamma b/bin/ugamma
@@ -0,0 +1,21 @@
+#!/bin/bash
+
+#requires calc and xorg-xgamma
+
+while getopts "v:" arg; do
+ case $arg in
+ v) value=(${OPTARG});;
+ esac
+done
+
+shift $((OPTIND-1))
+
+if [ -z "${value}" ]; then
+ echo "No value argument (-v) given, resetting to 1.0 instead."
+ xgamma -gamma 1
+else
+ readonly GAMMA_VALUE=$(xgamma 2>&1 | awk '{print $3}' | sed "s/,//")
+ xgamma -gamma $(calc "${GAMMA_VALUE}" + "${value}" | sed "s/\t//g")
+fi
+
+dunstify -h string:x-dunst-stack-tag:gamma "Gamma" "$(xgamma 2>&1 | sed 's/-> //g')"
diff --git a/bin/yt b/bin/yt
@@ -25,6 +25,7 @@ while getopts ":ahn:" arg; do
done
shift $((OPTIND-1))
+
query=$@
if [[ -z "$query" ]]; then
diff --git a/bin/ytd b/bin/ytd
@@ -14,9 +14,10 @@ while getopts ":pas" arg; do
done
shift $((OPTIND-1))
+
url=$*
-getUrl() {
+get_url() {
if [[ -z "${url}" ]]; then
echo "Give the search criteria to download." >&2
read -r url
@@ -29,14 +30,14 @@ getUrl() {
echo "${url}"
}
-getArgs() {
+get_args() {
if [ "${is_audio}" -eq 1 ]; then
echo "-x -f bestaudio"
fi
}
-url="$(getUrl)"
-args="$(getArgs)"
+url="$(get_url)"
+args="$(get_args)"
if [ "${is_playlist}" -eq 1 ]; then
yt-dlp ${args} -i -o "%(playlist_index)s - %(title)s.%(ext)s" "${url}"
diff --git a/bin/ytd-album b/bin/ytd-album
@@ -11,8 +11,9 @@ if [ -z ${URL} ]; then
read URL
fi
-mkdir -pv ~/tmp
+readonly URL
+mkdir -pv ~/tmp
mkdir -pv ~/Downloads/tmp
echo "Downloading $URL in ~/tmp"
@@ -26,23 +27,27 @@ cd ~/Downloads/tmp && yt-dlp -x -f bestaudio -i -o "%(playlist_index)s - %(title
echo "What's the band name?"
read BAND
+readonly BAND
echo "What's the album name?"
read ALBUM
+readonly ALBUM
echo "What's the year of release?"
read YEAR
+readonly YEAR
echo "What's the genre?"
read GENRE
+readonly GENRE
if [ -d "$HOME/tmp/$BAND/$ALBUM" ]; then
echo "Album directory already exists - (y) or (yes) to continue."
- read ANSWER
- if [[ ! $ANSWER =~ ^(y|yes)$ ]]; then
+ read answer
+ if [[ ! $answer =~ ^(y|yes)$ ]]; then
echo "Exiting."
exit 0;
fi
@@ -50,7 +55,7 @@ fi
mkdir -pv "$HOME/tmp/$BAND/$ALBUM"
-DIR=$HOME/tmp/$BAND/$ALBUM
+readonly DIR=$HOME/tmp/$BAND/$ALBUM
mv $HOME/Downloads/tmp/* "$DIR"
@@ -69,28 +74,29 @@ done
for f in "$DIR"/*; do
#remove path to get songname
- SONGNAME=$(echo "$f" | sed 's/.*\///g' | sed 's/.mp3//g')
+ songname=$(echo "$f" | sed 's/.*\///g' | sed 's/.mp3//g')
- TRACK=$(echo $SONGNAME | cut -d ' ' -f 1)
- TITLE=$(echo $SONGNAME | sed "s/$TRACK - //g")
+ readonly TRACK=$(echo $songname | cut -d ' ' -f 1)
+ readonly TITLE=$(echo $songname | sed "s/$TRACK - //g")
- OLDNAME=$SONGNAME
+ readonly OLDNAME=$songname
echo "Type song name for : ${TITLE}"
echo "Enter/Return to keep as is."
read NEWNAME
+ readonly NEWNAME
if [[ ! -z $NEWNAME ]]; then
- SONGNAME=$NEWNAME;
+ songname=$NEWNAME;
- echo $OLDNAME to $SONGNAME
+ echo $OLDNAME to $songname
- mv "$DIR/$OLDNAME.mp3" "$DIR/$TRACK - $SONGNAME.mp3"
+ mv "$DIR/$OLDNAME.mp3" "$DIR/$TRACK - $songname.mp3"
- id3 -t "$SONGNAME" -a "$BAND" -l "$ALBUM" -y "$YEAR" -n $TRACK -g "$GENRE" "$DIR/$TRACK - $SONGNAME.mp3"
+ id3 -t "$songname" -a "$BAND" -l "$ALBUM" -y "$YEAR" -n $TRACK -g "$GENRE" "$DIR/$TRACK - $songname.mp3"
else
- id3 -t "$TITLE" -a "$BAND" -l "$ALBUM" -y "$YEAR" -n "$TRACK" -g "$GENRE" "$DIR/$SONGNAME.mp3"
+ id3 -t "$TITLE" -a "$BAND" -l "$ALBUM" -y "$YEAR" -n "$TRACK" -g "$GENRE" "$DIR/$songname.mp3"
fi
done