first update
This commit is contained in:
commit
b87984ccce
0
.gitignore
vendored
Normal file
0
.gitignore
vendored
Normal file
10
README.md
Normal file
10
README.md
Normal file
@ -0,0 +1,10 @@
|
||||
# My Shell Utilities
|
||||
|
||||
Various shell scripts that do various things.
|
||||
|
||||
## Categories
|
||||
|
||||
- sys: all the shell scripts related to system monitoring and manipulation
|
||||
- app: convenience scripts that make it easier to use applications
|
||||
- scripting: tools to improve scripting or serve as a reference
|
||||
|
13
app/apps
Executable file
13
app/apps
Executable file
@ -0,0 +1,13 @@
|
||||
#!/usr/bin/env zsh
|
||||
set -eo pipefail
|
||||
|
||||
_stopnow() {
|
||||
test -f stopnow && echo "Stopping!" && rm stopnow && exit 0 || return 0
|
||||
}
|
||||
|
||||
while true
|
||||
do
|
||||
_stopnow
|
||||
menu
|
||||
done
|
||||
|
12
app/contacts
Executable file
12
app/contacts
Executable file
@ -0,0 +1,12 @@
|
||||
#!/usr/bin/env zsh
|
||||
|
||||
addressbook="/home/gmgauthier/.local/share/addrbook/contacts.txt"
|
||||
|
||||
## Simple record retrieval by any known value
|
||||
#awk 'BEGIN { RS = "<->" } /'$*'/' $addressbook
|
||||
|
||||
## Get record by search for substring in email
|
||||
#awk 'BEGIN { RS = "<->"; FS = "email: " } ($2 ~ "'${*}'") { print $0 }' $addressbook
|
||||
|
||||
## Get email addresses in a specific contact class
|
||||
awk 'BEGIN { RS = "<->"; FS = "category: " } ($2 ~ "'${1}'") { print }' $addressbook | grep '^email:' | egrep -o '[^ ]+$'
|
18
app/def
Executable file
18
app/def
Executable file
@ -0,0 +1,18 @@
|
||||
#!/usr/bin/env bash
|
||||
|
||||
dict -h localhost -d gcide "$@" > /home/gmgauthier/.local/tmp/"${1}".txt 2>&1
|
||||
|
||||
content=$(cat /home/gmgauthier/.local/tmp/"${1}".txt);
|
||||
|
||||
if [[ "${content}" == *"No definitions found"* ]]; then
|
||||
icon="/home/gmgauthier/.local/bin/img/caution-48.png"
|
||||
else
|
||||
icon="/home/gmgauthier/.local/bin/img/checkmark-32.png"
|
||||
fi
|
||||
|
||||
zenity --text-info \
|
||||
--window-icon="${icon}" \
|
||||
--filename=/home/gmgauthier/.local/tmp/"${1}".txt \
|
||||
--font="IBM Plex Mono Medium 11" \
|
||||
--width=750 \
|
||||
--height=600 2> /dev/null
|
8
app/forecast
Executable file
8
app/forecast
Executable file
@ -0,0 +1,8 @@
|
||||
#!/usr/bin/env bash
|
||||
if ! [[ -n $1 ]]; then
|
||||
loc="Cowley,UK"
|
||||
else
|
||||
loc=$1
|
||||
fi
|
||||
|
||||
curl wttr.in/$loc?u
|
112
app/menu
Executable file
112
app/menu
Executable file
@ -0,0 +1,112 @@
|
||||
#!/usr/bin/env bash
|
||||
|
||||
# while-menu-dialog: a menu driven system information program
|
||||
export ME="/home/gmgauthier"
|
||||
|
||||
DIALOG_CANCEL=1
|
||||
DIALOG_ESC=255
|
||||
HEIGHT=17
|
||||
WIDTH=0
|
||||
|
||||
tmemo() {
|
||||
tmp=$(date +"memo-%Y.%m.%d-%k.%M.%S")
|
||||
timestamp="${tmp// /}"
|
||||
filename="$HOME/memos/${timestamp}.md"
|
||||
exec tilde $filename
|
||||
}
|
||||
|
||||
output_panel() {
|
||||
dialog --title "$1" \
|
||||
--no-collapse \
|
||||
--msgbox "$result" 0 0
|
||||
}
|
||||
|
||||
_stopnow() {
|
||||
test -f stopnow && echo "Stopping!" && rm stopnow && exit 0 || return 0
|
||||
}
|
||||
|
||||
menu() {
|
||||
exec 3>&1
|
||||
selection=$(dialog \
|
||||
--backtitle "TUI Command Center" \
|
||||
--title "Menu" \
|
||||
--clear \
|
||||
--cancel-label "Exit" \
|
||||
--menu "Please select:" $HEIGHT $WIDTH 4 \
|
||||
"1" "Mutt Email" \
|
||||
"2" "Calcurse Calendar" \
|
||||
"3" "Abook Contacts" \
|
||||
"4" "Tudu Tasks" \
|
||||
"5" "Tilde Notepad" \
|
||||
"6" "CLI Calculator" \
|
||||
"7" "MC File Manager" \
|
||||
"8" "IRC Client" \
|
||||
"9" "Castero Podcasts" \
|
||||
"0" "VLC Music Player" \
|
||||
2>&1 1>&3)
|
||||
exit_status=$?
|
||||
exec 3>&-
|
||||
|
||||
case $exit_status in
|
||||
$DIALOG_CANCEL)
|
||||
clear
|
||||
echo "Exiting Apps Menu."
|
||||
exit 1
|
||||
;;
|
||||
$DIALOG_ESC)
|
||||
clear
|
||||
echo "Terminating Apps Menu." >&2
|
||||
exit 1
|
||||
;;
|
||||
esac
|
||||
|
||||
clear
|
||||
|
||||
case $selection in
|
||||
1 )
|
||||
clear
|
||||
exec neomutt -F ${ME}/.config/mutt/.protonmuttrc
|
||||
;;
|
||||
2 )
|
||||
clear
|
||||
exec calcurse -c ${ME}/.local/share/calcurse/calendar -C ${ME}/.config/calcurse
|
||||
;;
|
||||
3 )
|
||||
clear
|
||||
exec abook --datafile ${ME}/.local/share/abook/addressbook
|
||||
;;
|
||||
4 )
|
||||
clear
|
||||
exec tudu -f ${ME}/.local/share/tudu/tasks.xml -c ${ME}/.config/tudu/config
|
||||
;;
|
||||
5 )
|
||||
clear
|
||||
tmemo
|
||||
;;
|
||||
6 )
|
||||
clear
|
||||
exec calc
|
||||
;;
|
||||
7 )
|
||||
clear
|
||||
exec mc
|
||||
;;
|
||||
8 )
|
||||
clear
|
||||
exec weechat
|
||||
;;
|
||||
9 )
|
||||
clear
|
||||
exec castero
|
||||
;;
|
||||
0 )
|
||||
clear
|
||||
exec vlc -Z -L -I ncurses --no-video --recursive expand ${ME}/Music
|
||||
;;
|
||||
esac
|
||||
}
|
||||
|
||||
while true; do
|
||||
_stopnow
|
||||
menu
|
||||
done
|
43
app/spchk
Executable file
43
app/spchk
Executable file
@ -0,0 +1,43 @@
|
||||
#!/usr/bin/env bash
|
||||
|
||||
function parseResults() {
|
||||
oIFS=$IFS
|
||||
IFS=":"
|
||||
declare -a fields=($1)
|
||||
|
||||
export QUERYTERM=$(echo "${fields[0]}"|awk '{print $1}');
|
||||
export LISTCOUNT=$(echo "${fields[0]}"|awk '{print $2}');
|
||||
export WORDLIST=$(echo "${fields[1]}"|sed 's/^\s*\|\s*$//g');
|
||||
|
||||
IFS=$oIFS
|
||||
unset oIFS
|
||||
}
|
||||
|
||||
if [ $# -eq 0 ]; then
|
||||
>&2 echo "No arguments provided"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
if [[ "$1" =~ ^[0-9]+$ ]]; then
|
||||
zenity --info --text="<b>ERROR</b> only words, please!"\
|
||||
--icon-name=error \
|
||||
--window-icon="/home/gmgauthier/.local/bin/img/xmark.png" 2> /dev/null
|
||||
exit 1;
|
||||
fi
|
||||
|
||||
export RESULT=$(echo "$@"|aspell -a|sed "1 d"); # Deletes the header line
|
||||
export FIXED="${RESULT/& }" # Removes ampersand causing parsing errors.
|
||||
|
||||
if [[ "${FIXED}" == *"*"* ]]; then
|
||||
zenity --info --text="<b>CORRECT!</b> " \
|
||||
--icon-name=info \
|
||||
--window-icon="/home/gmgauthier/.local/bin/img/check-mark-11-16.png" 2> /dev/null
|
||||
|
||||
else
|
||||
parseResults "${FIXED}"
|
||||
message="<b>There are ${LISTCOUNT} suggested corrections for '${QUERYTERM}':</b> ${WORDLIST}"
|
||||
zenity --info --text="${message}"\
|
||||
--icon-name=warning \
|
||||
--window-icon="/home/gmgauthier/.local/bin/img/caution-48.png" 2> /dev/null
|
||||
|
||||
fi
|
8
app/wx
Executable file
8
app/wx
Executable file
@ -0,0 +1,8 @@
|
||||
#!/usr/bin/env bash
|
||||
if ! [[ -n $1 ]]; then
|
||||
loc="Cowley,UK"
|
||||
else
|
||||
loc=$1
|
||||
fi
|
||||
|
||||
ansiweather -l $loc -u imperial -s true -i false
|
39
app/yootoob
Executable file
39
app/yootoob
Executable file
@ -0,0 +1,39 @@
|
||||
#!/usr/bin/env bash
|
||||
|
||||
$cecho = '/gmgauthier/.local/bin/cecho';
|
||||
|
||||
function border () {
|
||||
local str="$*" # Put all arguments into single string
|
||||
local len=${#str}
|
||||
local i
|
||||
for ((i = 0; i < len + 4; ++i)); do
|
||||
printf '-'
|
||||
done
|
||||
printf '\n| %s |\n' "$str"
|
||||
for ((i = 0; i < len + 4; ++i)); do
|
||||
printf '-'
|
||||
done
|
||||
echo
|
||||
}
|
||||
|
||||
clear
|
||||
border "Internet Video Console"
|
||||
echo
|
||||
read -p "Search For: " searchphrase
|
||||
|
||||
ytfzf --detach --notify-playing --ytdl-pref="[height <=? 720]" --sort-by="upload_date" --pages=3 "${searchphrase}"
|
||||
|
||||
if [[ $? -ne 0 ]]; then
|
||||
/home/gmgauthier/.local/bin/cecho "IYellow" "There are no results for '${searchphrase}'";
|
||||
read -p "Press any key to exit... " -n1 -s
|
||||
else
|
||||
# needed because immediate exit was destroying the handshake between alacritty and ytfzf
|
||||
/home/gmgauthier/.local/bin/cecho "Green" "Your video will play momentarily..."
|
||||
sleep 4
|
||||
#This only works if the query window is the only open terminal
|
||||
#xdotool search --onlyvisible --classname alacritty windowminimize
|
||||
#sleep 5
|
||||
#this only works if mpv doesn't become the active window
|
||||
#xdotool windowminimize getactivewindow
|
||||
fi
|
||||
exit 0
|
89
scripting/cecho
Executable file
89
scripting/cecho
Executable file
@ -0,0 +1,89 @@
|
||||
#!/usr/bin/env bash
|
||||
|
||||
function cecho(){
|
||||
# Reset
|
||||
Color_Off='\033[0m' # Text Reset
|
||||
|
||||
# Regular Colors
|
||||
Black='\033[0;30m' # Black
|
||||
Red='\033[0;31m' # Red
|
||||
Green='\033[0;32m' # Green
|
||||
Yellow='\033[0;33m' # Yellow
|
||||
Blue='\033[0;34m' # Blue
|
||||
Purple='\033[0;35m' # Purple
|
||||
Cyan='\033[0;36m' # Cyan
|
||||
White='\033[0;37m' # White
|
||||
|
||||
# Bold
|
||||
BBlack='\033[1;30m' # Black
|
||||
BRed='\033[1;31m' # Red
|
||||
BGreen='\033[1;32m' # Green
|
||||
BYellow='\033[1;33m' # Yellow
|
||||
BBlue='\033[1;34m' # Blue
|
||||
BPurple='\033[1;35m' # Purple
|
||||
BCyan='\033[1;36m' # Cyan
|
||||
BWhite='\033[1;37m' # White
|
||||
|
||||
# Underline
|
||||
UBlack='\033[4;30m' # Black
|
||||
URed='\033[4;31m' # Red
|
||||
UGreen='\033[4;32m' # Green
|
||||
UYellow='\033[4;33m' # Yellow
|
||||
UBlue='\033[4;34m' # Blue
|
||||
UPurple='\033[4;35m' # Purple
|
||||
UCyan='\033[4;36m' # Cyan
|
||||
UWhite='\033[4;37m' # White
|
||||
|
||||
# Background
|
||||
On_Black='\033[40m' # Black
|
||||
On_Red='\033[41m' # Red
|
||||
On_Green='\033[42m' # Green
|
||||
On_Yellow='\033[43m' # Yellow
|
||||
On_Blue='\033[44m' # Blue
|
||||
On_Purple='\033[45m' # Purple
|
||||
On_Cyan='\033[46m' # Cyan
|
||||
On_White='\033[47m' # White
|
||||
|
||||
# High Intensity
|
||||
IBlack='\033[0;90m' # Black
|
||||
IRed='\033[0;91m' # Red
|
||||
IGreen='\033[0;92m' # Green
|
||||
IYellow='\033[0;93m' # Yellow
|
||||
IBlue='\033[0;94m' # Blue
|
||||
IPurple='\033[0;95m' # Purple
|
||||
ICyan='\033[0;96m' # Cyan
|
||||
IWhite='\033[0;97m' # White
|
||||
|
||||
# Bold High Intensity
|
||||
BIBlack='\033[1;90m' # Black
|
||||
BIRed='\033[1;91m' # Red
|
||||
BIGreen='\033[1;92m' # Green
|
||||
BIYellow='\033[1;93m' # Yellow
|
||||
BIBlue='\033[1;94m' # Blue
|
||||
BIPurple='\033[1;95m' # Purple
|
||||
BICyan='\033[1;96m' # Cyan
|
||||
BIWhite='\033[1;97m' # White
|
||||
|
||||
# High Intensity backgrounds
|
||||
On_IBlack='\033[0;100m' # Black
|
||||
On_IRed='\033[0;101m' # Red
|
||||
On_IGreen='\033[0;102m' # Green
|
||||
On_IYellow='\033[0;103m' # Yellow
|
||||
On_IBlue='\033[0;104m' # Blue
|
||||
On_IPurple='\033[0;105m' # Purple
|
||||
On_ICyan='\033[0;106m' # Cyan
|
||||
On_IWhite='\033[0;107m' # White
|
||||
|
||||
RED="\033[0;31m"
|
||||
GREEN="\033[0;32m" # <-- [0 means not bold
|
||||
YELLOW="\033[1;33m" # <-- [1 means bold
|
||||
CYAN="\033[1;36m"
|
||||
# ... Add more colors if you like
|
||||
|
||||
NC="\033[0m" # No Color
|
||||
|
||||
# printf "${(P)1}${2} ${NC}\n" # <-- zsh
|
||||
printf "${!1}${2} ${NC}\n" # <-- bash
|
||||
}
|
||||
|
||||
cecho "$@"
|
4
scripting/mvsprt
Executable file
4
scripting/mvsprt
Executable file
@ -0,0 +1,4 @@
|
||||
#!/usr/bin/env zsh
|
||||
|
||||
#lpr -p -o media=11x17 -o orientation-requested=5 "$@"
|
||||
lpr -p -o media=17x11 "$@"
|
BIN
scripting/passwdgen
Executable file
BIN
scripting/passwdgen
Executable file
Binary file not shown.
5
sys/birthdate
Executable file
5
sys/birthdate
Executable file
@ -0,0 +1,5 @@
|
||||
#!/bin/sh
|
||||
|
||||
statout=$(stat -c %W --terse /)
|
||||
birthdate=$(date --date="@$statout")
|
||||
echo $birthdate
|
3
sys/checkit
Executable file
3
sys/checkit
Executable file
@ -0,0 +1,3 @@
|
||||
#!/usr/bin/env zsh
|
||||
|
||||
vale --config=/home/gmgauthier/.config/vale/.vale.ini --no-wrap "$@"
|
3
sys/dirsz
Executable file
3
sys/dirsz
Executable file
@ -0,0 +1,3 @@
|
||||
#!/usr/bin/env zsh
|
||||
|
||||
du -mhac "$@" --exclude .git|sort -h
|
10
sys/ifcheck
Executable file
10
sys/ifcheck
Executable file
@ -0,0 +1,10 @@
|
||||
#!/usr/bin/env bash
|
||||
|
||||
iface=$(ip -br -4 -iec -o -c address show dev wlp0s20f3)
|
||||
if=$(echo $iface|awk '{print $1}')
|
||||
ifstatus=$(echo $iface|awk '{print $2}')
|
||||
ifaddr=$(echo $iface|awk '{print $3}')
|
||||
|
||||
echo $if $ifstatus $ifaddr
|
||||
|
||||
exit
|
11
sys/netcheck
Executable file
11
sys/netcheck
Executable file
@ -0,0 +1,11 @@
|
||||
#!/usr/bin/env bash
|
||||
|
||||
nchk=$(/home/gmgauthier/.local/bin/ifcheck)
|
||||
|
||||
|
||||
ping -q -n -c1 "1.1.1.1" &>"/dev/null"
|
||||
if [[ "${?}" -ne 0 ]]; then
|
||||
/home/gmgauthier/.local/bin/cecho "BRed" "UNAVAILABLE"
|
||||
elif [[ "${#args[@]}" -eq 0 ]]; then
|
||||
/home/gmgauthier/.local/bin/cecho "IGreen" "AVAILABLE"
|
||||
fi
|
28
sys/status
Executable file
28
sys/status
Executable file
@ -0,0 +1,28 @@
|
||||
#!/usr/bin/env bash
|
||||
numlines=$(tput lines)
|
||||
numcols=$(tput cols)
|
||||
numcols=$(expr $numcols - 1)
|
||||
separator_line=$(for i in $(seq 0 $numcols);do printf "%s"═"";done;printf "\n")
|
||||
/usr/bin/clear
|
||||
tput cup 0
|
||||
|
||||
status=$(/home/gmgauthier/.local/bin/ifcheck)
|
||||
if=$(echo $status|awk '{print $1}')
|
||||
ifstatus=$(echo $status|awk '{print $2}')
|
||||
ifaddr=$(echo $status|awk '{print $3}')
|
||||
|
||||
if [[ "${status}" == *"UP"* ]]; then
|
||||
echo -e " $(/home/gmgauthier/.local/bin/wx)"
|
||||
echo -e "$(/home/gmgauthier/.local/bin/cecho ICyan Wifi:) ${ifstatus}\t\t $(/home/gmgauthier/.local/bin/cecho ICyan Inet:) $(/home/gmgauthier/.local/bin/netcheck)\t\t\t\t\t $(date +%R)"
|
||||
else
|
||||
iface=$(ip -br -o -c address show dev wlp0s20f3)
|
||||
ifstatus=$(echo $iface|awk '{print $2}')
|
||||
ifaddr=$(echo $iface|awk '{print $3}')
|
||||
echo -e "$(/home/gmgauthier/.local/bin/cecho ICyan Wifi:) ${ifstatus} ${ifaddr} $(/home/gmgauthier/.local/bin/cecho ICyan Inet:) $(/home/gmgauthier/.local/bin/netcheck) $(date +%R)"
|
||||
fi
|
||||
echo $separator_line
|
||||
mpstat
|
||||
echo $separator_line
|
||||
dfrs
|
||||
echo $separator_line
|
||||
acpi
|
54
sys/usedisk
Executable file
54
sys/usedisk
Executable file
@ -0,0 +1,54 @@
|
||||
#/usr/bin/env bash
|
||||
|
||||
MEDIADIR="/media/gmgauthier"
|
||||
format=0 # Don't format disk images that already exist
|
||||
|
||||
# get name of freshly created blank disk, or create one
|
||||
if [ $# -eq 0 ]; then
|
||||
echo ">>> NEW DISK IS BEING CREATED..."
|
||||
PREFIX="floppy"
|
||||
RANDO=$(od -An -N4 -i < /dev/urandom|sed 's/[ -]//g')
|
||||
DISK="$PREFIX$RANDO"
|
||||
dd if=/dev/zero of=$DISK.img bs=1k count=1440
|
||||
format=1
|
||||
else
|
||||
DISK=$1
|
||||
if ! [ -f $DISK.img ]; then
|
||||
dd if=/dev/zero of=$DISK.img bs=1k count=1440
|
||||
format=1
|
||||
fi
|
||||
fi
|
||||
|
||||
# Find the next available loop device on the system
|
||||
echo ">>> LOOP DEVICE IS BEING IDENTIFIED..."
|
||||
list=$(losetup -O name|sed 's/\/dev\/loop//g'|sed 's/NAME//g'|sort - --sort=human-numeric)
|
||||
### listarr=(${(@s: :)list}) # zsh version of the array generator
|
||||
listarr=($(echo $list | tr " " "\n")) #bash version of array generator
|
||||
lastdev=${listarr[-1]}
|
||||
lastdevnum=$((lastdev))
|
||||
nextdev=$((lastdevnum+1))
|
||||
|
||||
# allocate the next available loop device, format the disk, and mount it.
|
||||
nextdevname="/dev/loop$nextdev"
|
||||
echo ">>> LOOP DEVICE $nextdevname RESERVED FOR DISK: $DISK.img"
|
||||
|
||||
sudo losetup $nextdevname $DISK.img
|
||||
|
||||
if [ $format -eq 1 ]; then
|
||||
echo ">>> DISK IMAGE IS RAW AND WILL BE FORMATTED"
|
||||
sudo mkfs -t vfat $nextdevname
|
||||
fi
|
||||
|
||||
if ! [ -d $MEDIADIR/$DISK ]; then
|
||||
echo ">>> MOUNT DIRECTORY NOT FOUND. CREATING DIRECTORY NOW."
|
||||
sudo mkdir $MEDIADIR/$DISK
|
||||
fi
|
||||
|
||||
echo ">>> DISK $DISK.img MOUNTING AT LOCATION: $MEDIADIR/$DISK"
|
||||
sudo mount $DISK.img $MEDIADIR/$DISK
|
||||
|
||||
if [ $format -eq 1 ]; then
|
||||
echo ">>> DISK INFORMATION BEING COPIED TO $DISK.img"
|
||||
sudo fdisk -l $nextdevname >> $DISK-fdisk.txt
|
||||
sudo cp $DISK-fdisk.txt $MEDIADIR/$DISK/$DISK.txt && rm $DISK-fdisk.txt
|
||||
fi
|
Loading…
Reference in New Issue
Block a user