aboutsummaryrefslogtreecommitdiff
path: root/scripts/util
diff options
context:
space:
mode:
authorben <ben@nagy.contact>2025-05-03 14:41:13 -0700
committerben <ben@nagy.contact>2025-05-03 14:41:13 -0700
commitea687c769521b3139c8547a2d4a839842fa7b0fe (patch)
treef4805588bb59ca15e96d8b71124c4aafd5dd40cb /scripts/util
parent16725b034eeb7122f4174f08221ab7f07b6abbf1 (diff)
added scripts
Diffstat (limited to 'scripts/util')
-rwxr-xr-xscripts/util/afk.sh21
-rwxr-xr-xscripts/util/arcc11
-rwxr-xr-xscripts/util/arco11
-rwxr-xr-xscripts/util/bday.sh47
-rwxr-xr-xscripts/util/bmark.sh3
-rwxr-xr-xscripts/util/croc.sh7
-rwxr-xr-xscripts/util/dic5
-rwxr-xr-xscripts/util/dupt.sh5
-rwxr-xr-xscripts/util/fmail.sh3
-rwxr-xr-xscripts/util/git-repo-add.sh57
-rwxr-xr-xscripts/util/gtab_init.sh25
-rwxr-xr-xscripts/util/hist.sh3
-rwxr-xr-xscripts/util/killpid.sh3
-rwxr-xr-xscripts/util/manfzf.sh13
-rwxr-xr-xscripts/util/netsel.sh6
-rwxr-xr-xscripts/util/open_15
-rwxr-xr-xscripts/util/pgen.sh34
-rwxr-xr-xscripts/util/sc.sh3
-rwxr-xr-xscripts/util/sp.sh11
-rwxr-xr-xscripts/util/update-web.sh5
-rwxr-xr-xscripts/util/vol19
-rwxr-xr-xscripts/util/vol+17
-rwxr-xr-xscripts/util/vol-22
23 files changed, 336 insertions, 0 deletions
diff --git a/scripts/util/afk.sh b/scripts/util/afk.sh
new file mode 100755
index 0000000..a189dd5
--- /dev/null
+++ b/scripts/util/afk.sh
@@ -0,0 +1,21 @@
+#!/bin/sh
+
+# TODO: for dunst, we need to create a watchdog process
+
+# Prevent screen from sleeping or trick websites to think you're present while afk
+
+dzen_opts="-bg white -fg black -p 1 -x -475 -y 50 -w 475 -h 50"
+message="Away from keyboard for ~$1 minutes"
+
+#[[ $(pgrep dunst) ]] && dunstctl set-paused true
+while true; do
+ for direction in "10 0" "0 10" "-10 0" "0 -10"; do # move around
+ xdotool mousemove_relative -- $direction
+ printf '%s\n' "$message" | dzen2 $dzen_opts
+ done
+
+ xdotool mousemove 2880 540 # someplace near the middle
+done
+
+#[[ $(pgrep dunst) ]] && dunstctl set-paused false
+rm "$PID_FILE"
diff --git a/scripts/util/arcc b/scripts/util/arcc
new file mode 100755
index 0000000..7bb25e7
--- /dev/null
+++ b/scripts/util/arcc
@@ -0,0 +1,11 @@
+#!/bin/bash
+
+if df | grep -q aa && df | grep -q arc ; then
+ sudo umount ~/Digital/Drives/D2
+ sudo cryptsetup close /dev/mapper/arc &&
+
+ sudo umount ~/Digital/Drives/ED
+ sudo cryptsetup close /dev/mapper/aa
+ else
+ echo "Error: Drive not mounted.";
+fi
diff --git a/scripts/util/arco b/scripts/util/arco
new file mode 100755
index 0000000..2d93661
--- /dev/null
+++ b/scripts/util/arco
@@ -0,0 +1,11 @@
+#!/bin/bash
+
+if lsblk | grep -q sdc && lsblk | grep -q sdb ; then
+ sudo cryptsetup open /dev/sdb arc
+ sudo mount /dev/mapper/arc ~/Digital/Drives/D2 -o compress-force &&
+
+ sudo cryptsetup open /dev/sdc aa
+ sudo mount /dev/mapper/aa ~/Digital/Drives/ED
+else
+ echo "Error: Drive not mounted.";
+fi
diff --git a/scripts/util/bday.sh b/scripts/util/bday.sh
new file mode 100755
index 0000000..72ac556
--- /dev/null
+++ b/scripts/util/bday.sh
@@ -0,0 +1,47 @@
+#!/bin/sh
+
+# I'm forgetful of these things
+
+today=$(date '+%m/%d')
+run_date=$(date '+%Y-%m-%d')
+#F_BDAY_RECORDS="bdays.txt"
+F_BDAY_RECORDS=~/.local/share/bdays.txt
+BDAY_IMG=~/Digital/Pictures/Backgrounds/birthday.png
+
+last_run=$(
+ grep '^# last run:' "$F_BDAY_RECORDS" 2>/dev/null \
+ | tail -n1 \
+ | awk '{ print $4 }'
+)
+[ "$last_run" = "$run_date" ] && exit 0
+
+
+BDAY_LIST=$(awk -v td="$today" '
+ $0 ~ /^[[:space:]]*#/ { next } # skip comments
+ NF < 3 { next } # skip malformed
+ $1 == td {
+ printf("%s %d\n", $3, $2 + 1)
+ }
+' "$F_BDAY_RECORDS")
+
+[ -z "$BDAY_LIST" ] && exit 0
+
+magick -size 800x600 canvas:black \
+ -gravity north -font 'Adwaita-Sans-Bold' -pointsize 72 -fill white \
+ -annotate +0+50 'Birthdays Today' \
+ -gravity center -font 'Adwaita-Sans' -pointsize 36 \
+ -annotate +0+100 "$BDAY_LIST" \
+ ~/Digital/Pictures/Backgrounds/birthday.png
+
+awk -v td="$today" '
+ /^# last run:/ { next } # drop old last-run
+ $0 ~ /^[[:space:]]*#/ { print; next } # preserve other comments
+ NF < 3 { print; next } # preserve blanks/malformed
+ $1 == td { $2 = $2 + 1 } # bump age
+ { print $1, $2, $3 } # print all records
+' "$F_BDAY_RECORDS" > bdays.tmp
+
+echo "# last run: $run_date" >> bdays.tmp
+mv bdays.tmp "$F_BDAY_RECORDS"
+
+xwallpaper --output HDMI-A-0 --center "$BDAY_IMG"
diff --git a/scripts/util/bmark.sh b/scripts/util/bmark.sh
new file mode 100755
index 0000000..466414c
--- /dev/null
+++ b/scripts/util/bmark.sh
@@ -0,0 +1,3 @@
+#!/bin/sh
+
+xdotool type $(grep -v '^#' ~/.local/share/bmark/bmarks.txt | dmenu -i -l 30 | cut -d' ' -f1)
diff --git a/scripts/util/croc.sh b/scripts/util/croc.sh
new file mode 100755
index 0000000..ae7efbd
--- /dev/null
+++ b/scripts/util/croc.sh
@@ -0,0 +1,7 @@
+#!/bin/sh
+
+nmcli c show --active | grep -q "wg-mullvad" 2>>/dev/null && read -p "VPN is active. Contine? [Y/n] " ON || echo "VPN is off, aborting."; break ;
+
+case $ON in
+ [Yy]* ) croc $1;
+esac
diff --git a/scripts/util/dic b/scripts/util/dic
new file mode 100755
index 0000000..58755a8
--- /dev/null
+++ b/scripts/util/dic
@@ -0,0 +1,5 @@
+#!/bin/sh
+
+# Online CLI dictionary
+
+curl -s https://www.wordnik.com/words/"$1" | awk '/id="define/{p=1}p' | awk '/div/{p++}p==2' | sed -e 's/<[^>]*>//g' | sed 's/^ *$//g' | expand --tabs=1 | less
diff --git a/scripts/util/dupt.sh b/scripts/util/dupt.sh
new file mode 100755
index 0000000..61d2260
--- /dev/null
+++ b/scripts/util/dupt.sh
@@ -0,0 +1,5 @@
+#!/bin/sh
+
+# open a new terminal in the current working directory
+
+st -e sh -c 'cd "$PWD" && exec $SHELL' >/dev/null 2>&1 &
diff --git a/scripts/util/fmail.sh b/scripts/util/fmail.sh
new file mode 100755
index 0000000..e90e91a
--- /dev/null
+++ b/scripts/util/fmail.sh
@@ -0,0 +1,3 @@
+#!/bin/bash
+
+/usr/local/bin/mailsync && /bin/mbsync -c /home/black/.config/mbsync/config -a
diff --git a/scripts/util/git-repo-add.sh b/scripts/util/git-repo-add.sh
new file mode 100755
index 0000000..709ead0
--- /dev/null
+++ b/scripts/util/git-repo-add.sh
@@ -0,0 +1,57 @@
+#!/bin/bash
+
+# this is to be run locally after remote script has executed
+
+if [ $# -ne 1 ]; then
+ echo -e "\nUsage: $0 'new-repo-name'\n"
+ exit 1
+fi
+
+if [ -d "$1" ]; then
+ echo "Directory $1 already exists. Aborting."
+ exit 1
+fi
+
+
+echo -e "\nCreating new repo $PWD/$1"
+
+mkdir "$1" && echo "created $PWD/$1"
+cd "$1"
+git init && echo "initialized $1"
+touch README.md && echo "created 'README.md'"
+echo "init" > README.md
+git add . && echo "staged $1"
+git commit -m 'initial commit' && echo "commited repo"
+
+echo -e "\n\n"
+while true; do
+ echo "Enter remote name and URL (press enter to finish)"
+ echo -e "eg. origin ssh://git@ssh.github.com:443/user/$1\n"
+ read -p ": " name url
+
+ if [ -z "$name" ] && [ -z "$url" ]; then
+ break
+ fi
+
+ if [ -z "$name" ] || [ -z "$url" ]; then
+ echo -e "\nYou must provide a name and url"
+ echo -e "eg. origin ssh://git@ssh.github.com:443/user/$1\n\n"
+ continue
+ fi
+
+ git remote add "$name" "$url"
+ echo "added $name ($url)"
+done
+
+read -p "Push to remote? (y/n): " push_choice
+
+if [[ "$push_choice" =~ ^[Yy]$ ]]; then
+ for remote in $(git remote); do
+ git push "$remote" --all
+ echo "Pushed to remote: $remote"
+ done
+else
+ echo "Push aborted."
+fi
+
+cd ..
diff --git a/scripts/util/gtab_init.sh b/scripts/util/gtab_init.sh
new file mode 100755
index 0000000..99b3cde
--- /dev/null
+++ b/scripts/util/gtab_init.sh
@@ -0,0 +1,25 @@
+pad_id=$(xinput | grep "HID 256c:006d Pad pad" | cut -f 2 | cut -d '=' -f 2)
+stylus_id=$(xinput | grep "HID 256c:006d Pen stylus" | cut -f 2 | cut -d '=' -f 2)
+#SCREEN="$1"
+
+# Reset Buttons
+xsetwacom set $pad_id Button 1 "key + "
+xsetwacom set $pad_id Button 2 "key + "
+xsetwacom set $pad_id Button 3 "key + "
+xsetwacom set $pad_id Button 8 "key + "
+xsetwacom set $pad_id Button 9 "key + "
+xsetwacom set $pad_id Button 10 "key + "
+xsetwacom set $pad_id Button 11 "key + "
+xsetwacom set $pad_id Button 12 "key + "
+
+# Set the Screen
+xsetwacom set $stylus_id MapToOutput "DisplayPort-0" # $SCREEN
+
+# Set Buttons
+xsetwacom --set $pad_id Button 1 "key +ctrl z -ctrl"
+xsetwacom --set $pad_id Button 2 "key +ctrl s -ctrl"
+xsetwacom --set $pad_id Button 9 "key +ctrl shift p -ctrl"
+xsetwacom --set $pad_id Button 10 "key +ctrl shift e -ctrl"
+xsetwacom --set $pad_id Button 11 "key +ctrl shift a -ctrl"
+#xsetwacom --set $pad_id Button 12 "key +ctrl 7 -ctrl"
+xsetwacom --set $pad_id Button 12 "key +ctrl shift r -ctrl"
diff --git a/scripts/util/hist.sh b/scripts/util/hist.sh
new file mode 100755
index 0000000..16b7717
--- /dev/null
+++ b/scripts/util/hist.sh
@@ -0,0 +1,3 @@
+#!/bin/sh
+
+$(cat "$HISTFILE" | fzf)
diff --git a/scripts/util/killpid.sh b/scripts/util/killpid.sh
new file mode 100755
index 0000000..34a738a
--- /dev/null
+++ b/scripts/util/killpid.sh
@@ -0,0 +1,3 @@
+#!/bin/sh
+
+ps -aux | fzf | awk '{print $2}' | xargs -r kill
diff --git a/scripts/util/manfzf.sh b/scripts/util/manfzf.sh
new file mode 100755
index 0000000..aa25d11
--- /dev/null
+++ b/scripts/util/manfzf.sh
@@ -0,0 +1,13 @@
+# Man without options will use fzf to select a page
+function fzf-man(){
+ MAN="/usr/bin/man"
+ if [ -n "$1" ]; then
+ $MAN "$@"
+ return $?
+ else
+ $MAN -k . | fzf --reverse --preview="echo {1,2} | sed 's/ (/./' | sed -E 's/\)\s*$//' | xargs $MAN" | awk '{print $1 "." $2}' | tr -d '()' | xargs -r $MAN
+ return $?
+ fi
+}
+
+fzf-man
diff --git a/scripts/util/netsel.sh b/scripts/util/netsel.sh
new file mode 100755
index 0000000..b1b2a88
--- /dev/null
+++ b/scripts/util/netsel.sh
@@ -0,0 +1,6 @@
+#!/bin/sh
+
+BSSID=$(printf "%s" "$(nmcli d wifi | fzf --height 40%)" | sed 's/\*//' | awk '{print $1}')
+#read -sp "Enter password for $BSSID: " PASSWORD
+
+nmcli d wifi connect $BSSID #password "$PASSWORD"
diff --git a/scripts/util/open_1 b/scripts/util/open_1
new file mode 100755
index 0000000..58c8efc
--- /dev/null
+++ b/scripts/util/open_1
@@ -0,0 +1,5 @@
+#!/bin/sh
+
+sudo cryptsetup open /dev/sda1 one
+
+sudo mount /dev/mapper/one ~/Digital/Drives/D1 -o compress-force
diff --git a/scripts/util/pgen.sh b/scripts/util/pgen.sh
new file mode 100755
index 0000000..f3a7976
--- /dev/null
+++ b/scripts/util/pgen.sh
@@ -0,0 +1,34 @@
+#!/bin/bash
+
+# A pseudorandom password generator
+
+LEN=16 # default length
+SYMBOLS=true
+
+gen_psw() {
+ local len=$1
+ local symbols=$2
+ local charset="abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789"
+
+ [[ $symbols == true ]] && charset="${charset}!@#$%^&*()_+{}|:<>?"
+
+ psw=$(< /dev/urandom tr -dc "$charset" | head -c "$len")
+ echo "$psw"
+}
+
+while [[ "$#" -gt 0 ]]; do
+ case $1 in
+ -l|--length) LEN="$2"; shift ;;
+ -ns|--no-symbols) SYMBOLS=false ;;
+ *) echo "Unknown flag: $1"; exit 1 ;;
+ esac
+ shift
+done
+
+PASSWORD=$(gen_psw "$LEN" "$SYMBOLS")
+echo "$PASSWORD"
+
+if command -v xclip &> /dev/null; then
+ echo -n "$PASSWORD" | xclip -selection clipboard
+ printf '%s\n' "Password has been copied." | dzen2 -p 1 -bg white -fg black -x -305 -y 50 -w 455 -h 50
+fi
diff --git a/scripts/util/sc.sh b/scripts/util/sc.sh
new file mode 100755
index 0000000..9557e34
--- /dev/null
+++ b/scripts/util/sc.sh
@@ -0,0 +1,3 @@
+#!/bin/sh
+
+maim -s -m 10 | tee ~/Digital/Pictures/Screen\ Shots/$(date +%Y-%m-%d__%S%S).jpg | xclip -selection clipboard -t image/png
diff --git a/scripts/util/sp.sh b/scripts/util/sp.sh
new file mode 100755
index 0000000..b4ce819
--- /dev/null
+++ b/scripts/util/sp.sh
@@ -0,0 +1,11 @@
+#!/bin/sh
+
+# pacman wrapper
+
+case $* in
+ -Syu ) sudo pacman -Syu
+ echo 0 > ~/.local/share/updates.txt ;;
+ -Syyu ) sudo pacman -Syyu
+ echo 0 > ~/.local/share/updates.txt ;;
+ * ) sudo pacman ;;
+esac
diff --git a/scripts/util/update-web.sh b/scripts/util/update-web.sh
new file mode 100755
index 0000000..88292b5
--- /dev/null
+++ b/scripts/util/update-web.sh
@@ -0,0 +1,5 @@
+#!/bin/sh
+
+SITE=$(printf "$(ls ~/Dev/website)" | dmenu -i -p "Pick a site to update");
+rsync -uvrp --delete-after ~/Dev/website/"$SITE"/ root@nagy.contact:/var/www/"$SITE"/
+printf "Updating: $SITE\n" | dzen2 -bg white -fg black -p 2 -x -375 -y 50 -w 275 -h 50
diff --git a/scripts/util/vol b/scripts/util/vol
new file mode 100755
index 0000000..1aa82c0
--- /dev/null
+++ b/scripts/util/vol
@@ -0,0 +1,19 @@
+#!/bin/sh
+
+ mute_state=$(amixer -c 3 get 'Master',0 | grep -o '\[on\]')
+
+ if [[ $mute_state == "[on]" ]]; then
+ amixer -c 3 set 'Master',0 mute
+ printf '%s\n' "Volume: Off" | dzen2 -p 1 -bg white -fg black -x -375 -y 50 -w 275 -h 50
+ amixer -c 3 set 'Headphone',0 mute
+ else
+ amixer -c 3 set 'Master',0 unmute
+ amixer -c 3 set 'Headphone',0 unmute
+ printf '%s\n' "Volume: On" | dzen2 -p 1 -bg white -fg black -x -375 -y 50 -w 275 -h 50
+ fi
+
+
+#amixer -D pulse sset Master toggle
+#state=$(amixer -D pulse sget Master | grep 'Front Left:' | sed -E 's/.*\[([a-z]+)\].*/\1/')
+#printf 'Volume %s\n' "$state" | dzen2 -p 1 -bg white -fg black -x -375 -y 50 -w 275 -h 50
+# amixer set Master toggle ; a="$(awk -F"[][]" '/Front Left/ { print $4 }' <(amixer sget Master) | tail -n +2)"; printf '%s\n' "Volume: $a" | dzen2 -p 1 -bg white -fg black -x -375 -y 50 -w 275 -h 50
diff --git a/scripts/util/vol+ b/scripts/util/vol+
new file mode 100755
index 0000000..89c8fcb
--- /dev/null
+++ b/scripts/util/vol+
@@ -0,0 +1,17 @@
+#!/bin/bash
+
+MASTER_SINK=$(pactl list short sinks | grep "RUNNING" | awk '{print $1}')
+if [ $# -eq 0 ]
+then
+ pactl set-sink-volume $MASTER_SINK +5%
+else
+ pactl set-sink-volume $MASTER_SINK +$@%
+fi
+level=$(pactl list sinks | grep -E "RUNNING|Volume" | grep -A1 "RUNNING" | grep -E -o "[[:digit:]]{1,5}%" | head -n1)
+printf '%s\n' "Vol $(echo $level)" | dzen2 -p 1 -bg white -fg black -x -375 -y 50 -w 275 -h 50
+
+#amixer -D pulse sset Master -c 3 5%+
+#level=$(amixer -D pulse sget Master -c 3 | sed -n 's/^[^[]*\[\([0-9]*%\)\].*$/\1/p')
+#3printf '%s\n' "Vol $(echo $level)" | dzen2 -p 1 -bg white -fg black -x -375 -y 50 -w 275 -h 50
+
+#amixer set Master -c 3 5%+ > /dev/null 2>&1 ; a="$()" ; printf '%s\n' "Vol $(amixer -c 3 sget Master | awk -F'[][]' '/Mono: Playback/ {print $2}')" | dzen2 -p 1 -bg white -fg black -x -375 -y 50 -w 275 -h 50
diff --git a/scripts/util/vol- b/scripts/util/vol-
new file mode 100755
index 0000000..c2c2f9c
--- /dev/null
+++ b/scripts/util/vol-
@@ -0,0 +1,22 @@
+#!/bin/bash
+
+
+MASTER_SINK=$(pactl list short sinks | grep "RUNNING" | awk '{print $1}')
+if [ $# -eq 0 ]
+then
+ pactl set-sink-volume $MASTER_SINK -5%
+else
+ pactl set-sink-volume $MASTER_SINK -$@%
+fi
+
+level=$(pactl list sinks | grep -E "RUNNING|Volume" | grep -A1 "RUNNING" | grep -E -o "[[:digit:]]{1,5}%" | head -n1)
+printf '%s\n' "Vol $(echo $level)" | dzen2 -p 1 -bg white -fg black -x -375 -y 50 -w 275 -h 50
+
+
+#amixer -D pulse sset Master -c 3 5%-
+
+#level=$(amixer -D pulse sget Master -c 3 | grep 'Front Left:' | sed -E 's/.*\[([0-9]+%)\].*/\1/')
+#level=$(amixer -D pulse sget Master -c 3 | sed -n 's/^[^[]*\[\([0-9]*%\)\].*$/\1/p')
+#printf '%s\n' "Vol $(echo $level)" | dzen2 -p 1 -bg white -fg black -x -375 -y 50 -w 275 -h 50
+
+#amixer set Master -c 2 5%- > /dev/null 2>&1 ; a="$()" ; printf '%s\n' "Vol $(amixer -c 2 sget Master | awk -F'[][]' '/Mono: Playback/ {print $2}')" | dzen2 -p 1 -bg white -fg black -x -375 -y 50 -w 275 -h 50