From a0bb023d782dd2d8703670d560b5ccd8d25d640e Mon Sep 17 00:00:00 2001
From: Yigit Sever
Date: Thu, 4 Nov 2021 12:25:04 +0300
Subject: bins: shfmt, weasel suite, spark

---
 .local/bin/bukuadd_c              |   4 +-
 .local/bin/done                   |   4 +-
 .local/bin/dups                   |  54 ++++++++++++++++++++
 .local/bin/epub_lander            |   1 -
 .local/bin/i3-get-window-criteria |   8 +--
 .local/bin/letsread               |   2 +-
 .local/bin/mailsync               |  32 +++++++-----
 .local/bin/mailto_handler         |   2 +-
 .local/bin/openfile               |   4 +-
 .local/bin/passive                |  65 ++++++++++++++++++++++++
 .local/bin/power.sh               |   8 +--
 .local/bin/rfv                    |  12 ++---
 .local/bin/spark                  | 103 ++++++++++++++++++++++++++++++++++++++
 .local/bin/texclear               |   6 +--
 .local/bin/type.sh                |  12 ++---
 .local/bin/weasel                 |  38 ++++++++++++++
 16 files changed, 310 insertions(+), 45 deletions(-)
 create mode 100755 .local/bin/dups
 create mode 100755 .local/bin/passive
 create mode 100755 .local/bin/spark
 create mode 100755 .local/bin/weasel

diff --git a/.local/bin/bukuadd_c b/.local/bin/bukuadd_c
index 925022a..86f705d 100755
--- a/.local/bin/bukuadd_c
+++ b/.local/bin/bukuadd_c
@@ -10,7 +10,7 @@ fi
 
 FOO=$(buku --nostdin --np --nc -p -1)
 OUT="$(buku --nostdin --np --nc -a "$url" "$tags" 2>&1)"
-if [[ $OUT =~ "ERROR" ]] ; then
+if [[ $OUT =~ "ERROR" ]]; then
     notify-send "Bookmarking Failed" "$OUT" --app-name="buku" --icon="dialog-error"
     exit 1
 fi
@@ -20,7 +20,7 @@ BAR=$FOO
 while [[ $BAR == "$FOO" ]]; do
     sleep 1
     BAR=$(buku --nostdin --np --nc -p -1)
-done;
+done
 
 notify-send "Success" "$BAR" --app-name="buku" --icon="checkmark"
 
diff --git a/.local/bin/done b/.local/bin/done
index 8bb0a3d..ae76287 100755
--- a/.local/bin/done
+++ b/.local/bin/done
@@ -27,9 +27,9 @@ if ACTIVE_TASK=$(task active); then
             timew "@1" annotate "${annot:0:1}"
         else
             if maybe_delete=$(printf "no no\nyea" | rofi -dmenu -p "should we delete the tracking?" -lines 2 -no-custom); then
-                if [[ "${maybe_delete}" == "no no" ]]; then
+                if [[ ${maybe_delete} == "no no" ]]; then
                     notify-send "tracking unannotated, not deleted" "nobody will know how that went" --app-name="done" --icon="itmages-question"
-                elif [[ "${maybe_delete}" == "yea" ]]; then
+                elif [[ ${maybe_delete} == "yea" ]]; then
                     timew delete "@1"
                     notify-send "tracking deleted" "like you never worked on that" --app-name="done" --icon="pack-more"
                 fi
diff --git a/.local/bin/dups b/.local/bin/dups
new file mode 100755
index 0000000..eb450f5
--- /dev/null
+++ b/.local/bin/dups
@@ -0,0 +1,54 @@
+#!/usr/bin/env perl
+
+# Finds duplicate adjacent words.
+
+use strict ;
+
+my $DupCount = 0 ;
+
+if (!@ARGV) {
+  print "usage: dups <file> ...\n" ;
+  exit ;
+}
+
+while (1) {
+  my $FileName = shift @ARGV ;
+
+  # Exit code = number of duplicates found.
+  exit $DupCount if (!$FileName) ;
+
+  open FILE, $FileName or die $!;
+
+  my $LastWord = "" ;
+  my $LineNum = 0 ;
+
+  while (<FILE>) {
+    chomp ;
+
+    $LineNum ++ ;
+
+    my @words = split (/(\W+)/) ;
+
+    foreach my $word (@words) {
+      # Skip spaces:
+      next if $word =~ /^\s*$/ ;
+
+      # Skip punctuation:
+      if ($word =~ /^\W+$/) {
+        $LastWord = "" ;
+        next ;
+      }
+
+      # Found a dup?
+      if (lc($word) eq lc($LastWord)) {
+        print "$FileName:$LineNum $word\n" ;
+        $DupCount ++ ;
+      } # Thanks to Sean Cronin for tip on case.
+
+      # Mark this as the last word:
+      $LastWord = $word ;
+    }
+  }
+
+  close FILE ;
+}
diff --git a/.local/bin/epub_lander b/.local/bin/epub_lander
index 801381a..19e0a1c 100755
--- a/.local/bin/epub_lander
+++ b/.local/bin/epub_lander
@@ -15,4 +15,3 @@ mv $HOME/down/*.pdf $HOME/docs/pdf_landing/
 if [[ $? -ne 1 ]]; then
     notify-send "Moved some pdfs" "" --app-name="epub_lander" --icon="emblem_success"
 fi
-
diff --git a/.local/bin/i3-get-window-criteria b/.local/bin/i3-get-window-criteria
index f46f65e..6d6ea1b 100755
--- a/.local/bin/i3-get-window-criteria
+++ b/.local/bin/i3-get-window-criteria
@@ -9,7 +9,7 @@
 # quotes in "<string>" are not escaped properly. This is a problem with the output of `xprop`,
 # reported upstream: https://bugs.freedesktop.org/show_bug.cgi?id=66807
 
-PROGNAME=`basename "$0"`
+PROGNAME=$(basename "$0")
 
 # Check for xwininfo and xprop
 for cmd in xwininfo xprop; do
@@ -25,13 +25,13 @@ match_qstring='"[^"\\]*(\\.[^"\\]*)*"' # NOTE: Adds 1 backreference
 
 {
     # Run xwininfo, get window id
-    window_id=`xwininfo -int | sed -nre "s/^xwininfo: Window id: ($match_int) .*$/\1/p"`
+    window_id=$(xwininfo -int | sed -nre "s/^xwininfo: Window id: ($match_int) .*$/\1/p")
     echo "id=$window_id"
 
     # Run xprop, transform its output into i3 criteria. Handle fallback to
     # WM_NAME when _NET_WM_NAME isn't set
-    xprop -id $window_id |
-        sed -nr \
+    xprop -id $window_id \
+        | sed -nr \
             -e "s/^WM_CLASS\(STRING\) = ($match_qstring), ($match_qstring)$/instance=\1\nclass=\3/p" \
             -e "s/^WM_WINDOW_ROLE\(STRING\) = ($match_qstring)$/window_role=\1/p" \
             -e "/^WM_NAME\(STRING\) = ($match_string)$/{s//title=\1/; h}" \
diff --git a/.local/bin/letsread b/.local/bin/letsread
index 5e3cf5a..d5f1e0c 100755
--- a/.local/bin/letsread
+++ b/.local/bin/letsread
@@ -1,4 +1,4 @@
 #!/usr/bin/env bash
 
-firefox $(buku --stag toread -f 10 | shuf -n 1)
+firefox "$(buku --stag toread -f 10 | shuf -n 1)"
 dunstify "Time to read" "Don't forget to remove 'toread' from that when you're done"
diff --git a/.local/bin/mailsync b/.local/bin/mailsync
index ae0801c..cc7010b 100755
--- a/.local/bin/mailsync
+++ b/.local/bin/mailsync
@@ -3,9 +3,15 @@
 # Sync mail and give notification if there is new mail.
 
 # Run only if user logged in (prevent cron errors)
-pgrep -u "${USER:=$LOGNAME}" >/dev/null || { echo "$USER not logged in; sync will not run."; exit ;}
+pgrep -u "${USER:=$LOGNAME}" > /dev/null || {
+    echo "$USER not logged in; sync will not run."
+    exit
+}
 # Run only if not already running in other instance
-pgrep -x mbsync >/dev/null && { notify-send --app-name="mailsync" "mbsync is already running" "you should fix this" ; exit ;}
+pgrep -x mbsync > /dev/null && {
+    notify-send --app-name="mailsync" "mbsync is already running" "you should fix this"
+    exit
+}
 
 if [[ -f "$HOME/.local/share/.dnd" ]]; then
     echo "do not disturb is on"
@@ -13,8 +19,11 @@ if [[ -f "$HOME/.local/share/.dnd" ]]; then
 fi
 
 # Checks for internet connection and set notification script.
-ping -q -c 1 1.1.1.1 > /dev/null || ping -q -c 1 1.0.0.1 > /dev/null || ping -q -c 1 example.org || { echo "No internet connection detected."; exit ;}
-command -v notify-send >/dev/null || echo "Note that \`libnotify\` or \`libnotify-send\` should be installed for pop-up mail notifications with this script."
+ping -q -c 1 1.1.1.1 > /dev/null || ping -q -c 1 1.0.0.1 > /dev/null || ping -q -c 1 example.org || {
+    echo "No internet connection detected."
+    exit
+}
+command -v notify-send > /dev/null || echo 'Note that `libnotify` or `libnotify-send` should be installed for pop-up mail notifications with this script.'
 
 # Required to display notifications if run as a cronjob:
 export DBUS_SESSION_BUS_ADDRESS=unix:path=/run/user/$(id -u)/bus
@@ -25,11 +34,11 @@ export DISPLAY=:0.0
 
 # Settings are different for MacOS (Darwin) systems.
 if [ "$(uname)" = "Darwin" ]; then
-    notify() { osascript -e "display notification \"$2 in $1\" with title \"You've got Mail\" subtitle \"Account: $account\"" && sleep 2 ;}
-    messageinfo() { osascript -e "display notification with title \"📧 $from\" subtitle \"$subject\"" ;}
+    notify() { osascript -e "display notification \"$2 in $1\" with title \"You've got Mail\" subtitle \"Account: $account\"" && sleep 2; }
+    messageinfo() { osascript -e "display notification with title \"📧 $from\" subtitle \"$subject\""; }
 else
-    notify() { notify-send --icon="mail_new" --app-name="excerpt" "\`$1\`" "📬 $2 new mail(s)" ;}
-    messageinfo() { notify-send --icon="mail-mark-unread" --app-name="mutt" "📧 $from" "$subject" ;}
+    notify() { notify-send --icon="mail_new" --app-name="excerpt" "\`$1\`" "📬 $2 new mail(s)"; }
+    messageinfo() { notify-send --icon="mail-mark-unread" --app-name="mutt" "📧 $from" "$subject"; }
 fi
 
 # Check account for new mail. Notify if there is new content.
@@ -44,7 +53,7 @@ syncandnotify() {
             # Extract subject and sender from mail.
             from=$(awk '/^From: / && ++n ==1,/^\<.*\>:/' "$file" | perl -CS -MEncode -ne 'print decode("MIME-Header", $_)' | awk '{ $1=""; if (NF>=3)$NF=""; print $0 }' | sed 's/^[[:blank:]]*[\"'\''\<]*//;s/[\"'\''\>]*[[:blank:]]*$//')
             subject=$(awk '/^Subject: / && ++n == 1,/^\<.*\>: / && ++i == 2' "$file" | head -n 1 | perl -CS -MEncode -ne 'print decode("MIME-Header", $_)' | sed 's/^Subject: //' | sed 's/^{[[:blank:]]*[\"'\''\<]*//;s/[\"'\''\>]*[[:blank:]]*$//' | tr -d '\n')
-	    messageinfo &
+            messageinfo &
         done
     fi
 }
@@ -62,15 +71,14 @@ fi
 # ( kill -46 "$(pidof "${STATUSBAR:-dwmblocks}")" >/dev/null 2>&1 ) 2>/dev/null
 
 # Parallelize multiple accounts
-for account in $accounts
-do
+for account in $accounts; do
     syncandnotify &
 done
 
 wait
 # ( kill -46 "$(pidof "${STATUSBAR:-dwmblocks}")" >/dev/null 2>&1 ) 2>/dev/null
 
-notmuch new 2>/dev/null
+notmuch new 2> /dev/null
 
 #Create a touch file that indicates the time of the last run of mailsync
 touch "$HOME/.config/mutt/.mailsynclastrun"
diff --git a/.local/bin/mailto_handler b/.local/bin/mailto_handler
index 9493558..36c38bd 100755
--- a/.local/bin/mailto_handler
+++ b/.local/bin/mailto_handler
@@ -21,6 +21,6 @@ for account in "${ACCOUNTSDIR}"/*.muttrc; do
 
 done
 
-picked=$(printf "${choices}" | rofi -dmenu)
+picked=$(printf '%s' "${choices}" | rofi -dmenu)
 
 exec kitty -e neomutt -F "$HOME/.config/mutt/muttrc" -e "source /home/yigit/.config/mutt/accounts/${picked}.muttrc" -- "$@"
diff --git a/.local/bin/openfile b/.local/bin/openfile
index cf3c6c3..742b9c0 100755
--- a/.local/bin/openfile
+++ b/.local/bin/openfile
@@ -1,10 +1,10 @@
 #!/bin/sh
 
 # Helps open a file with xdg-open from mutt in a external program without weird side effects.
-tempdir="${XDG_CACHE_HOME:-$HOME/.cache}/mutt-wizard/files"
+tempdir="${XDG_CACHE_HOME:-$HOME/.cache}/mutt/files"
 file="$tempdir/$(basename "$1")"
 [ "$(uname)" = "Darwin" ] && opener="open" || opener="setsid -f xdg-open"
 mkdir -p "$tempdir"
 cp -f "$1" "$file"
-$opener "$file" >/dev/null 2>&1
+$opener "$file" > /dev/null 2>&1
 find "${tempdir:?}" -mtime +1 -type f -delete
diff --git a/.local/bin/passive b/.local/bin/passive
new file mode 100755
index 0000000..276d61b
--- /dev/null
+++ b/.local/bin/passive
@@ -0,0 +1,65 @@
+#!/usr/bin/env bash
+
+irregulars="awoken|\
+    been|born|beat|\
+    become|begun|bent|\
+    beset|bet|bid|\
+    bidden|bound|bitten|\
+    bled|blown|broken|\
+    bred|brought|broadcast|\
+    built|burnt|burst|\
+    bought|cast|caught|\
+    chosen|clung|come|\
+    cost|crept|cut|\
+    dealt|dug|dived|\
+done|drawn|dreamt|\
+driven|drunk|eaten|fallen|\
+fed|felt|fought|found|\
+fit|fled|flung|flown|\
+forbidden|forgotten|\
+foregone|forgiven|\
+forsaken|frozen|\
+gotten|given|gone|\
+ground|grown|hung|\
+heard|hidden|hit|\
+held|hurt|kept|knelt|\
+knit|known|laid|led|\
+leapt|learnt|left|\
+lent|let|lain|lighted|\
+lost|made|meant|met|\
+misspelt|mistaken|mown|\
+overcome|overdone|overtaken|\
+overthrown|paid|pled|proven|\
+put|quit|read|rid|ridden|\
+rung|risen|run|sawn|said|\
+seen|sought|sold|sent|\
+set|sewn|shaken|shaven|\
+shorn|shed|shone|shod|\
+shot|shown|shrunk|shut|\
+sung|sunk|sat|slept|\
+slain|slid|slung|slit|\
+smitten|sown|spoken|sped|\
+spent|spilt|spun|spit|\
+split|spread|sprung|stood|\
+stolen|stuck|stung|stunk|\
+stridden|struck|strung|\
+striven|sworn|swept|\
+swollen|swum|swung|taken|\
+taught|torn|told|thought|\
+thrived|thrown|thrust|\
+trodden|understood|upheld|\
+upset|woken|worn|woven|\
+wed|wept|wound|won|\
+withheld|withstood|wrung|\
+written"
+
+if [ "$1" = "" ]; then
+    echo "usage: $(basename "$0") <file> ..."
+    exit
+fi
+
+grep -E -n -i --color \
+    "\\b(am|are|were|being|is|been|was|be)\
+    \\b[ ]*(\w+ed|($irregulars))\\b" "$*"
+
+exit $?
diff --git a/.local/bin/power.sh b/.local/bin/power.sh
index f794211..2dd7e5d 100755
--- a/.local/bin/power.sh
+++ b/.local/bin/power.sh
@@ -15,10 +15,10 @@ chosen=$(echo -e "lock\nshutdown\nrestart" | rofi -dmenu -i)
 # Info about some states are available here:
 # https://www.freedesktop.org/software/systemd/man/systemd-sleep.conf.html#Description
 
-if [[ $chosen = "lock" ]]; then
-    $HOME/.local/bin/lock
-elif [[ $chosen = "shutdown" ]]; then
+if [[ $chosen == "lock" ]]; then
+    "$HOME"/.local/bin/lock
+elif [[ $chosen == "shutdown" ]]; then
     systemctl poweroff
-elif [[ $chosen = "restart" ]]; then
+elif [[ $chosen == "restart" ]]; then
     systemctl reboot
 fi
diff --git a/.local/bin/rfv b/.local/bin/rfv
index 4c9a632..a178e67 100755
--- a/.local/bin/rfv
+++ b/.local/bin/rfv
@@ -4,11 +4,11 @@
 # 2. Interactively narrow down the list using fzf
 # 3. Open the file in Vim
 IFS=: read -ra selected < <(
-  rg --color=always --line-number --no-heading --smart-case "${*:-}" |
-    fzf --ansi \
-        --color "hl:-1:underline,hl+:-1:underline:reverse" \
-        --delimiter : \
-        --preview 'bat --color=always {1} --highlight-line {2}' \
-        --preview-window='up:60%:+{2}+3/3:~3'
+    rg --color=always --line-number --no-heading --smart-case "${*:-}" \
+        | fzf --ansi \
+            --color "hl:-1:underline,hl+:-1:underline:reverse" \
+            --delimiter : \
+            --preview 'bat --color=always {1} --highlight-line {2}' \
+            --preview-window='up:60%:+{2}+3/3:~3'
 )
 [ -n "${selected[0]}" ] && nvim "${selected[0]}" "+${selected[1]}"
diff --git a/.local/bin/spark b/.local/bin/spark
new file mode 100755
index 0000000..53a38be
--- /dev/null
+++ b/.local/bin/spark
@@ -0,0 +1,103 @@
+#!/usr/bin/env bash
+#
+# spark
+# https://github.com/holman/spark
+#
+# Generates sparklines for a set of data.
+#
+# Here's a good web-based sparkline generator that was a bit of inspiration
+# for spark:
+#
+#   https://datacollective.org/sparkblocks
+#
+# spark takes a comma-separated or space-separated list of data and then prints
+# a sparkline out of it.
+#
+# Examples:
+#
+#   spark 1 5 22 13 53
+#   # => ▁▁▃▂▇
+#
+#   spark 0 30 55 80 33 150
+#   # => ▁▂▃▅▂▇
+#
+#   spark -h
+#   # => Prints the spark help text.
+
+# Generates sparklines.
+#
+# $1 - The data we'd like to graph.
+_echo()
+{
+  if [ "X$1" = "X-n" ]; then
+    shift
+    printf "%s" "$*"
+  else
+    printf "%s\n" "$*"
+  fi
+}
+
+spark()
+{
+  local n numbers=
+
+  # find min/max values
+  local min=0xffffffff max=0
+
+  for n in ${@//,/ }
+  do
+    # on Linux (or with bash4) we could use `printf %.0f $n` here to
+    # round the number but that doesn't work on OS X (bash3) nor does
+    # `awk '{printf "%.0f",$1}' <<< $n` work, so just cut it off
+    n=${n%.*}
+    (( n < min )) && min=$n
+    (( n > max )) && max=$n
+    numbers=$numbers${numbers:+ }$n
+  done
+
+  # print ticks
+  local ticks=(▁ ▂ ▃ ▄ ▅ ▆ ▇ █)
+
+  # use a high tick if data is constant
+  (( min == max )) && ticks=(▅ ▆)
+
+  local f=$(( (($max-$min)<<8)/(${#ticks[@]}-1) ))
+  (( f < 1 )) && f=1
+
+  for n in $numbers
+  do
+    _echo -n ${ticks[$(( ((($n-$min)<<8)/$f) ))]}
+  done
+  _echo
+}
+
+# If we're being sourced, don't worry about such things
+if [ "$BASH_SOURCE" == "$0" ]; then
+  # Prints the help text for spark.
+  help()
+  {
+    local spark=$(basename $0)
+    cat <<EOF
+
+    USAGE:
+      $spark [-h|--help] VALUE,...
+
+    EXAMPLES:
+      $spark 1 5 22 13 53
+      ▁▁▃▂█
+      $spark 0,30,55,80,33,150
+      ▁▂▃▄▂█
+      echo 9 13 5 17 1 | $spark
+      ▄▆▂█▁
+EOF
+  }
+
+  # show help for no arguments if stdin is a terminal
+  if { [ -z "$1" ] && [ -t 0 ] ; } || [ "$1" == '-h' ] || [ "$1" == '--help' ]
+  then
+    help
+    exit 0
+  fi
+
+  spark ${@:-`cat`}
+fi
diff --git a/.local/bin/texclear b/.local/bin/texclear
index 9a32d70..1fb280a 100755
--- a/.local/bin/texclear
+++ b/.local/bin/texclear
@@ -8,7 +8,7 @@ case "$1" in
         file=$(readlink -f "$1")
         dir=$(dirname "$file")
         base="${file%.*}"
-        find "$dir"  -maxdepth 1 -type f -regextype gnu-awk -regex "^$base\\.(4tc|xref|tmp|pyc|pyo|fls|vrb|fdb_latexmk|bak|swp|aux|log|synctex\\(busy\\)|lof|lot|maf|idx|mtc|mtc0|nav|out|snm|toc|bcf|run\\.xml|synctex\\.gz|blg|bbl)" -delete ;;
-    *) printf "Give .tex file as argument.\\n" ;;
+        find "$dir" -maxdepth 1 -type f -regextype gnu-awk -regex "^$base\\.(4tc|xref|tmp|pyc|pyo|fls|vrb|fdb_latexmk|bak|swp|aux|log|synctex\\(busy\\)|lof|lot|maf|idx|mtc|mtc0|nav|out|snm|toc|bcf|run\\.xml|synctex\\.gz|blg|bbl)" -delete
+        ;;
+    *) printf 'Give .tex file as argument.\n' ;;
 esac
-
diff --git a/.local/bin/type.sh b/.local/bin/type.sh
index b9dbcd7..2d563f3 100755
--- a/.local/bin/type.sh
+++ b/.local/bin/type.sh
@@ -1,15 +1,13 @@
 #!/usr/bin/env bash
 sleep 1
-while read line
-do
-    grep -o . <<<$line | while read a
-    do
-        sleep 0.$((RANDOM%3))
+while read -r line; do
+    grep -o . <<< "$line" | while read -r a; do
+        sleep 0.$((RANDOM % 3))
         #2>&1 echo -n "${a:- }" | tee /dev/tty
         echo -n "${a:- }" | tee /dev/tty
     done
-    sleep 0.$((RANDOM%7))
-    1>&2 echo -ne $"\n"
+    sleep 0.$((RANDOM % 7))
+    echo 1>&2 -ne $"\n"
     echo
     sleep 1.0
 done
diff --git a/.local/bin/weasel b/.local/bin/weasel
new file mode 100755
index 0000000..ce82ce3
--- /dev/null
+++ b/.local/bin/weasel
@@ -0,0 +1,38 @@
+#!/usr/bin/env bash
+
+weasels="many|various|very|fairly|several|extremely\
+    |exceedingly|quite|remarkably|few|surprisingly\
+    |mostly|largely|huge|tiny|((are|is) a number)\
+    |excellent|interestingly|significantly\
+    |substantially|clearly|vast|relatively|completely"
+
+wordfile=""
+
+# Check for an alternate weasel file
+if [ -f "$HOME"/etc/words/weasels ]; then
+    wordfile="$HOME/etc/words/weasels"
+fi
+
+if [ -f "$WORDSDIR"/weasels ]; then
+    wordfile="$WORDSDIR/weasels"
+fi
+
+if [ -f words/weasels ]; then
+    wordfile="words/weasels"
+fi
+
+if [ ! "$wordfile" = "" ]; then
+    weasels="xyzabc123"
+    for w in $(cat $wordfile); do
+        weasels="$weasels|$w"
+    done
+fi
+
+if [ "$1" = "" ]; then
+    echo "usage: $(basename "$0") <file> ..."
+    exit
+fi
+
+grep -E -i -n --color "\\b($weasels)\\b" "$*"
+
+exit $?
-- 
cgit v1.2.3-70-g09d2