bin: update scripts
This commit is contained in:
parent
c4c3b4d492
commit
6533464fd2
26 changed files with 207 additions and 55 deletions
|
@ -2,6 +2,15 @@
|
||||||
# Automatically set screen brightness based on time of day.
|
# Automatically set screen brightness based on time of day.
|
||||||
# OLD: value=$(expr 100 - $(expr 13 - $(date +%H) | tr -d -) \* 5)
|
# OLD: value=$(expr 100 - $(expr 13 - $(date +%H) | tr -d -) \* 5)
|
||||||
# S Function: echo "(c($(date +%H) / 4 - 3) + 1) * 50" | bc -l
|
# S Function: echo "(c($(date +%H) / 4 - 3) + 1) * 50" | bc -l
|
||||||
value=$(echo "l=(100 - 1.5 * ( 11 - $(date +%H) ) ^ 2); if(l > 0) l else 3" | bc -l)
|
# summertime: value=$(echo "l=(100 - 1.5 * ( 11 - $(date +%H) ) ^ 2); if(l > 0) l else 3" | bc -l)
|
||||||
|
value=$(echo "l=(100 - 3 * ( 12 - $(date +%H) ) ^ 2); if(l > 0) l else 3" | bc -l)
|
||||||
|
if test "$1" != "-n"; then
|
||||||
light -S $value
|
light -S $value
|
||||||
{ date && echo $value; } >>/var/log/autolight
|
inputmodule-control led-matrix --brightness $(echo $value / 5 + 2 | bc)
|
||||||
|
if ! test -w /var/log/autolight
|
||||||
|
then
|
||||||
|
sudo chown :$(id -g) /var/log
|
||||||
|
sudo chmod g+w /var/log
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
printf "Set Light Level %4.1f at %s\n" "$value" "$(date)" | tee -a /var/log/autolight
|
||||||
|
|
|
@ -43,10 +43,6 @@ fileinfo() {
|
||||||
tput rmso
|
tput rmso
|
||||||
|
|
||||||
size=$(stat --format=%s "$arg")
|
size=$(stat --format=%s "$arg")
|
||||||
# Check if SSH key (<10KB then read)
|
|
||||||
if test "$size" -lt 10000
|
|
||||||
then $elevate ssh-keygen -l -f "$arg" 2>/dev/null
|
|
||||||
fi
|
|
||||||
# I think this check is here to avoid scrolling text interpreted as video
|
# I think this check is here to avoid scrolling text interpreted as video
|
||||||
#probe="$($elevate ffprobe "$arg" 2>&1)"
|
#probe="$($elevate ffprobe "$arg" 2>&1)"
|
||||||
#echo $probe | grep -v -e '00:00:00.04' -e 'ansi' &&
|
#echo $probe | grep -v -e '00:00:00.04' -e 'ansi' &&
|
||||||
|
@ -59,7 +55,12 @@ fileinfo() {
|
||||||
) - birth %.10w mod %.10y" "$arg" | numfmt --field=3 --to=iec-i --padding=6 --suffix=B
|
) - birth %.10w mod %.10y" "$arg" | numfmt --field=3 --to=iec-i --padding=6 --suffix=B
|
||||||
fi
|
fi
|
||||||
done
|
done
|
||||||
|
# Check if SSH key (<10KB then read)
|
||||||
|
if test "${size:-99999}" -lt 10000
|
||||||
|
then $elevate ssh-keygen -l -f "$arg" 2>/dev/null || true
|
||||||
|
fi
|
||||||
tput sgr0
|
tput sgr0
|
||||||
|
pacman -Qo "$arg" 2>/dev/null || true
|
||||||
}
|
}
|
||||||
|
|
||||||
prefix=/tmp/b
|
prefix=/tmp/b
|
||||||
|
@ -77,7 +78,7 @@ for arg; do
|
||||||
fi
|
fi
|
||||||
# amount of items to display per line in a grid for two lines max
|
# amount of items to display per line in a grid for two lines max
|
||||||
grid=$(expr $(tput cols) / \( 25 - \( $# / 2 \) \& $# \< 30 \| 5 \))
|
grid=$(expr $(tput cols) / \( 25 - \( $# / 2 \) \& $# \< 30 \| 5 \))
|
||||||
tmpfile="$prefix/$(basename -- "$arg")_$(dd "if=$arg" bs=512 count=10 2>/dev/null | md5sum | tr -d ' ' || true)"
|
tmpfile="$prefix/$(basename -- "$arg")_$(dd "if=$arg" bs=1M count=16 2>/dev/null | md5sum | cut -d ' ' -f1 || true)"
|
||||||
mkdir -p "$prefix"
|
mkdir -p "$prefix"
|
||||||
case "$mime" in
|
case "$mime" in
|
||||||
(*\ application/pdf)
|
(*\ application/pdf)
|
||||||
|
@ -108,8 +109,13 @@ for arg; do
|
||||||
! $inspect &&
|
! $inspect &&
|
||||||
# TODO sometimes duration mismatch for short videos
|
# TODO sometimes duration mismatch for short videos
|
||||||
test $(printf "%.0f" $(ffprobe -v error -show_entries format=duration -of default=noprint_wrappers=1:nokey=1 "$arg")) -gt 3 &&
|
test $(printf "%.0f" $(ffprobe -v error -show_entries format=duration -of default=noprint_wrappers=1:nokey=1 "$arg")) -gt 3 &&
|
||||||
mtn -q -i -t -W -r$(expr 5 - $# \& $# \< 4 \| 1) -D6 -b 0.6 -c $grid -w $(expr $(tput cols) '*' 20) \
|
{ mtn -q -i -t \
|
||||||
-O "$prefix" -o "$suffix" "$arg" &&
|
-D6 -b 0.6 \
|
||||||
|
-r$(expr 5 - $# \& $# \< 4 \| 1) -c $grid -w $(expr $(tput cols) '*' 20) \
|
||||||
|
-W -O "$prefix" -o "$suffix" "$arg" ||
|
||||||
|
mtn -q -i -t \
|
||||||
|
-W -O "$prefix" -o "$suffix" "$arg"
|
||||||
|
} &&
|
||||||
timg -W "$prefix/$(basename -- "${arg%.*}")$suffix"
|
timg -W "$prefix/$(basename -- "${arg%.*}")$suffix"
|
||||||
;;
|
;;
|
||||||
(*\ image/*)
|
(*\ image/*)
|
||||||
|
@ -154,7 +160,8 @@ for arg; do
|
||||||
;;
|
;;
|
||||||
(*:\ SQLite\ *\ database*) highlight "Tables" && sqlite3 "$arg" ".tables";; # TODO for few tables: SELECT * FROM db LIMIT 3; | cut -c-$col
|
(*:\ SQLite\ *\ database*) highlight "Tables" && sqlite3 "$arg" ".tables";; # TODO for few tables: SELECT * FROM db LIMIT 3; | cut -c-$col
|
||||||
(*:\ data) ;;
|
(*:\ data) ;;
|
||||||
(*\ key) bat+=("$arg");;
|
(*\ key) bat+=("$arg")
|
||||||
|
continue;;
|
||||||
(*) bat+=("$arg")
|
(*) bat+=("$arg")
|
||||||
timga+=("$arg")
|
timga+=("$arg")
|
||||||
continue
|
continue
|
||||||
|
@ -245,15 +252,16 @@ if test "$ls" -o $# -le $(echo "$flags" | wc -w); then
|
||||||
checkperm .
|
checkperm .
|
||||||
# Alternative: find -exec ls -dl {} +
|
# Alternative: find -exec ls -dl {} +
|
||||||
{
|
{
|
||||||
# TODO handle single quotes in filenames
|
# Below issues are fixed by disabling timeout, maybe an alternative can be found to prevent hanging on huge dirs
|
||||||
# TODO listing sometimes doubles as exa prints partial listings while working
|
# handle single quotes in filenames
|
||||||
timeout .6s sh -c "
|
# listing sometimes doubles as exa prints partial listings while working
|
||||||
if test '$tree'
|
#timeout .6s sh -c "
|
||||||
then $elevate tree -a --dirsfirst --du -h -C -L 3 $flags -- $(printf "'%s' " "${ls[@]:-.}")
|
if test -n "$tree"
|
||||||
|
then $elevate tree -a --dirsfirst --du -h -C -L 3 $flags -- "${ls[@]:-.}"
|
||||||
elif which exa 2>/dev/null >&2
|
elif which exa 2>/dev/null >&2
|
||||||
then $elevate exa --icons --color=always --long --group --classify --all --all --sort=modified --reverse $flags -- $(printf "'%s' " "${ls[@]:-.}")
|
then $elevate exa --icons --color=always --long --group --classify --all --all --sort=modified --reverse $flags -- "${ls[@]:-.}"
|
||||||
else $elevate ls -l $(test $# -gt ${#ls[@]} && echo '-d') --color=always --human-readable --si --group-directories-first --file-type --dereference-command-line-symlink-to-dir --all $flags -- $(printf "'%s' " "${ls[@]:-.}")
|
else $elevate ls -l $(test $# -gt ${#ls[@]} && echo '-d') --color=always --human-readable --si --group-directories-first --file-type --dereference-command-line-symlink-to-dir --all $flags -- "${ls[@]:-.}"
|
||||||
fi
|
fi
|
||||||
" || $elevate ls $(test $# -gt ${#ls[@]} && echo "-d") --color=always --human-readable --si --dereference-command-line --all --sort=none $flags -- "${ls[@]:-.}"
|
#" || $elevate ls $(test $# -gt ${#ls[@]} && echo "-d") --color=always --human-readable --si --dereference-command-line --all --sort=none $flags -- "${ls[@]:-.}"
|
||||||
} | $pager --quit-if-one-screen
|
} | $pager --quit-if-one-screen
|
||||||
fi
|
fi
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
#!/bin/sh -e
|
#!/bin/sh -e
|
||||||
# Suspend screen until enter is pressed
|
# Suspend screen until enter is pressed or interrupted
|
||||||
test "$1" && sleep $1
|
test "$1" && sleep $1
|
||||||
dpms() {
|
dpms() {
|
||||||
if test $XDG_SESSION_TYPE = wayland
|
if test $XDG_SESSION_TYPE = wayland
|
||||||
|
@ -9,5 +9,6 @@ dpms() {
|
||||||
}
|
}
|
||||||
dpms off
|
dpms off
|
||||||
trap 'dpms on' INT
|
trap 'dpms on' INT
|
||||||
sleep 99999
|
sleep 3
|
||||||
|
read _
|
||||||
dpms on
|
dpms on
|
||||||
|
|
23
.local/bin/scripts/contact
Executable file
23
.local/bin/scripts/contact
Executable file
|
@ -0,0 +1,23 @@
|
||||||
|
#!/bin/sh -e
|
||||||
|
# Process raw contact data into a vcard and save it to nextcloud
|
||||||
|
echo "Finish input with Ctrl-D" >&2
|
||||||
|
inputfile=/tmp/aichat-contact
|
||||||
|
cat >"$inputfile"
|
||||||
|
|
||||||
|
while test "$accept" != "y"
|
||||||
|
do printf "\nProcessing...\n" >&2
|
||||||
|
vcard="$(aichat --role carddav <"$inputfile")"
|
||||||
|
echo "$vcard"
|
||||||
|
printf "Accept? ([y]es/[n]o/[c]ancel) " >&2
|
||||||
|
read -r accept
|
||||||
|
test "$accept" != "c" || exit $?
|
||||||
|
done
|
||||||
|
uid=$(echo "$vcard" | grep UID | grep --only-matching '[-0-9a-fx]\{36\}')
|
||||||
|
echo
|
||||||
|
|
||||||
|
ncfields=$(pass show service/nextcloud)
|
||||||
|
ncfield() {
|
||||||
|
echo "$ncfields" | head -$1 | tail -1
|
||||||
|
}
|
||||||
|
echo "$vcard" | curl -o /tmp/contact -w "HTTP Response Code from $(ncfield 3): %{http_code}\n" -u $(ncfield 2):$(ncfield 1) "$(ncfield 3)/remote.php/dav/addressbooks/users/$(ncfield 2)/${1:-contacts}/$uid.vcf" -X PUT -H 'Depth: 0' -H 'Content-Type: text/vcard; charset=utf-8;' -H 'DNT: 1' --data-binary @-
|
||||||
|
cat /tmp/contact
|
|
@ -22,8 +22,10 @@ then highlight "[1mWrite Test"
|
||||||
test -s $tempfile ||
|
test -s $tempfile ||
|
||||||
( highlight "Preparing random bits:" &&
|
( highlight "Preparing random bits:" &&
|
||||||
sudo dd status=progress if=/dev/urandom of=$tempfile bs=1M count=$count ) &&
|
sudo dd status=progress if=/dev/urandom of=$tempfile bs=1M count=$count ) &&
|
||||||
|
sha1sum $tempfile
|
||||||
highlight "Copying random bits:" &&
|
highlight "Copying random bits:" &&
|
||||||
sudo dd status=progress if=$tempfile of=.$count bs=1M count=$count
|
sudo dd status=progress if=$tempfile of=.$count bs=1M count=$count
|
||||||
|
sha1sum .$count
|
||||||
highlight "Copying zero bits:" &&
|
highlight "Copying zero bits:" &&
|
||||||
sudo dd status=progress if=/dev/zero of=.$count bs=1M count=$count
|
sudo dd status=progress if=/dev/zero of=.$count bs=1M count=$count
|
||||||
sudo rm .$count
|
sudo rm .$count
|
||||||
|
|
|
@ -4,17 +4,19 @@ d5=$DATA/5-*
|
||||||
dow=$d5/download
|
dow=$d5/download
|
||||||
|
|
||||||
# Internal Duplicates
|
# Internal Duplicates
|
||||||
rmlint --rank-by=Olam -o pretty -o sh:/tmp/dow.sh $dow/*.*
|
script1=/tmp/dedup-download_$(date +%s)_internal.sh
|
||||||
|
rmlint --rank-by=Olam -o pretty -o sh:$script1 $dow/*.*
|
||||||
printf "Enter to confirm, any text to skip (answer does not matter if nothing is printed above this). "
|
printf "Enter to confirm, any text to skip (answer does not matter if nothing is printed above this). "
|
||||||
read -r answer
|
read -r answer
|
||||||
test -n "$answer" || /tmp/dow.sh -d
|
test -n "$answer" || $script1 -d
|
||||||
|
|
||||||
# Songs
|
# Songs
|
||||||
mv -v -- $dow/*.mp3 $dow/*.flac $dow/*.wav $MUSIC/
|
mv -v -- $dow/*.mp3 $dow/*.flac $dow/*.wav $MUSIC/
|
||||||
mv -v -- $dow/*.iso $DATA/4-*/flash/
|
mv -v -- $dow/*.iso $DATA/4-*/flash/
|
||||||
|
|
||||||
# Data-dir duplicates
|
# Data-dir duplicates
|
||||||
rmlint --keep-all-tagged --max-depth=5 --rank-by=Odlam -o pretty -o sh:/tmp/dow.sh $d5 // $DATA/1-* $DATA/2-* $DATA/3-* $DATA/4-*
|
script2=/tmp/dedup-download_$(date +%s)_data.sh
|
||||||
|
rmlint --keep-all-tagged --max-depth=5 --rank-by=Odlam -o pretty -o sh:$script2 $d5 // $DATA/1-* $DATA/2-* $DATA/3-* $DATA/4-*
|
||||||
printf "Enter to confirm, any text to skip (answer does not matter if nothing is printed above this). "
|
printf "Enter to confirm, any text to skip (answer does not matter if nothing is printed above this). "
|
||||||
read -r answer
|
read -r answer
|
||||||
test -n "$answer" || /tmp/dow.sh -d
|
test -n "$answer" || $script2 -d
|
||||||
|
|
12
.local/bin/scripts/ecled
Executable file
12
.local/bin/scripts/ecled
Executable file
|
@ -0,0 +1,12 @@
|
||||||
|
#!/bin/sh -e
|
||||||
|
# Make controlling framework leds from framework more accessible
|
||||||
|
case $# in
|
||||||
|
(0)
|
||||||
|
for led in $(sudo ectool led '' query 2>&1 | tail -1 | cut -d: -f2)
|
||||||
|
do
|
||||||
|
highlight $led
|
||||||
|
sudo ectool led $led query
|
||||||
|
done;;
|
||||||
|
(1) sudo ectool led "$@" query;;
|
||||||
|
(*) sudo ectool led "$@";;
|
||||||
|
esac
|
|
@ -10,7 +10,7 @@ listconf() {
|
||||||
find "${XDG_CONFIG_HOME:-$HOME/.config}" /etc /var/lib/postgres /var/lib/pleroma/static/instance \
|
find "${XDG_CONFIG_HOME:-$HOME/.config}" /etc /var/lib/postgres /var/lib/pleroma/static/instance \
|
||||||
-maxdepth 4 -follow \
|
-maxdepth 4 -follow \
|
||||||
\( -name Partitions -o -name mdn -o -name .git -o -name .local -o -name plugged \) -prune -o \
|
\( -name Partitions -o -name mdn -o -name .git -o -name .local -o -name plugged \) -prune -o \
|
||||||
! \( -iname "*.markdown" -o -iname "*.md" -o -name "Network Persistent State" -o -iname "*.pem" \) -a \
|
! \( -iname "*.markdown" -o -name "Network Persistent State" -o -iname "*.pem" \) -a \
|
||||||
-type f -readable -exec grep -lI '' {} + 2>/dev/null
|
-type f -readable -exec grep -lI '' {} + 2>/dev/null
|
||||||
} | dedup-lines
|
} | dedup-lines
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
#!/bin/sh
|
#!/bin/sh
|
||||||
# View song metadata using ffprobe
|
# View media metadata using ffprobe
|
||||||
# Accepts filenames from args or stdin (one file per line)
|
# Accepts filenames from args or stdin (one file per line)
|
||||||
# TODO only print header when interactive
|
# TODO only print header when interactive
|
||||||
if test "$#" -eq 0
|
if test "$#" -eq 0
|
||||||
|
@ -7,5 +7,7 @@ then cat
|
||||||
else printf '%s\n' "$@"
|
else printf '%s\n' "$@"
|
||||||
fi | while read f; do
|
fi | while read f; do
|
||||||
highlight "$f"
|
highlight "$f"
|
||||||
find "$f" -type f -exec ffprobe -loglevel 20 -print_format default=noprint_wrappers=1 -show_format -pretty {} \;
|
find "$f" -type f -exec ffprobe -hide_banner \
|
||||||
|
-loglevel $(expr 34 - $#) -print_format default=noprint_wrappers=1 -show_format -pretty {} \;
|
||||||
|
# loglevel: from 32 shows stream details (steps of 8), so only for small groups
|
||||||
done | less
|
done | less
|
||||||
|
|
8
.local/bin/scripts/fw-clock
Executable file
8
.local/bin/scripts/fw-clock
Executable file
|
@ -0,0 +1,8 @@
|
||||||
|
#!/bin/sh -e
|
||||||
|
# Creates a breathing clock in a tmux session (9-16)
|
||||||
|
# or fixed brightness
|
||||||
|
tmux new-session -d -s ledmatrix \; \
|
||||||
|
send-keys 'retry inputmodule-control led-matrix --clock' C-m \; \
|
||||||
|
split-window -v \; \
|
||||||
|
send-keys "while test $(expr 12 - $(date +%H) | tr -d -) -lt 4; do inputmodule-control led-matrix --breathing; done
|
||||||
|
autolight" C-m
|
58
.local/bin/scripts/gol
Executable file
58
.local/bin/scripts/gol
Executable file
|
@ -0,0 +1,58 @@
|
||||||
|
#!/bin/bash -e
|
||||||
|
# Run Game of Life on the Framework 16 matrix with the given input string
|
||||||
|
CFG="${XDG_CONFIG_HOME}/fwledmatrix/combos"
|
||||||
|
mkdir -p "$(dirname "$CFG")"
|
||||||
|
|
||||||
|
alphabet=({A..Z} = + '!' '.' ':') # -
|
||||||
|
case "$1" in
|
||||||
|
(--iter)
|
||||||
|
# Iterate over all combinations
|
||||||
|
for l1 in "${alphabet[@]}" ""; do
|
||||||
|
for l2 in "${alphabet[@]}" ""; do
|
||||||
|
for l3 in "${alphabet[@]}" ""; do
|
||||||
|
for l4 in "${alphabet[@]}" ""; do
|
||||||
|
for l5 in "${alphabet[@]}" ""; do
|
||||||
|
combination="${l1}${l2}${l3}${l4}${l5}"
|
||||||
|
echo "$combination"
|
||||||
|
gol "$combination"
|
||||||
|
done
|
||||||
|
done
|
||||||
|
done
|
||||||
|
done
|
||||||
|
done
|
||||||
|
;;
|
||||||
|
(--random)
|
||||||
|
# Function to generate a random combination
|
||||||
|
generate_random_combination() {
|
||||||
|
local combination=""
|
||||||
|
for _ in {1..5}; do
|
||||||
|
# Select a random letter from the alphabet
|
||||||
|
random_letter=${alphabet[$RANDOM % ${#alphabet[@]}]}
|
||||||
|
combination+="$random_letter"
|
||||||
|
done
|
||||||
|
echo "$combination"
|
||||||
|
}
|
||||||
|
while true
|
||||||
|
do gol "$(generate_random_combination)"
|
||||||
|
done
|
||||||
|
;;
|
||||||
|
(""|--known)
|
||||||
|
while true
|
||||||
|
do gol "$(shuf -n 1 "$CFG")"
|
||||||
|
done
|
||||||
|
;;
|
||||||
|
(*)
|
||||||
|
inputmodule-control led-matrix --stop-game
|
||||||
|
string="$(echo "$@" | tr 'a-z' 'A-Z')"
|
||||||
|
echo "Running '$string'"
|
||||||
|
inputmodule-control led-matrix --string "$string"
|
||||||
|
sleep 1
|
||||||
|
inputmodule-control led-matrix --start-game game-of-life --game-param current-matrix
|
||||||
|
while ! read -r -t 30 game_continue
|
||||||
|
do inputmodule-control led-matrix --sleeping false
|
||||||
|
done
|
||||||
|
if test -n "$game_continue"
|
||||||
|
then echo "$string" >>"$CFG"
|
||||||
|
fi
|
||||||
|
;;
|
||||||
|
esac
|
|
@ -26,7 +26,7 @@ showinfo() {
|
||||||
|
|
||||||
cmd="$1"
|
cmd="$1"
|
||||||
case "$cmd" in
|
case "$cmd" in
|
||||||
(fwupdmgr|hunt|rdoc|gh|chordpro|pdfjam|reflector|topgrade|r128gain|7z|kubectl|diffr|docker|jrnl|difft|wiked-diff|qpdf|ninja|qobuz-dl|beet)
|
(fwupdmgr|hunt|rdoc|gh|chordpro|pdfjam|reflector|topgrade|r128gain|7z|kubectl|diffr|docker|jrnl|difft|wiked-diff|qpdf|ninja|qobuz-dl|beet|flux)
|
||||||
unbuffer "$@" --help | sed 's|^[^ ].*:|[1m\0[22m|' | $paginate;;
|
unbuffer "$@" --help | sed 's|^[^ ].*:|[1m\0[22m|' | $paginate;;
|
||||||
(sqlcmd) sqlcmd -?;;
|
(sqlcmd) sqlcmd -?;;
|
||||||
(exa) "$0" eza;;
|
(exa) "$0" eza;;
|
||||||
|
|
|
@ -5,8 +5,8 @@ if test $# -eq 0
|
||||||
then
|
then
|
||||||
set -x
|
set -x
|
||||||
$0 sleep uni nap cry tech read dev phone bike tour laptop computer piano faith health lens Zinc \
|
$0 sleep uni nap cry tech read dev phone bike tour laptop computer piano faith health lens Zinc \
|
||||||
girl CB Claudia Kerstin Turi Taura \
|
girl CB Claudia Turi Taura \
|
||||||
Erlangen Bayreuth Berlin ICF
|
Erlangen Bayreuth Berlin
|
||||||
true $?
|
true $?
|
||||||
else
|
else
|
||||||
for arg
|
for arg
|
||||||
|
|
|
@ -14,15 +14,22 @@ case $1 in
|
||||||
#done &
|
#done &
|
||||||
# TODO handle labels with spaces
|
# TODO handle labels with spaces
|
||||||
lsblk --list --noheadings --output name,label,fstype,mountpoint | grep -v LUKS | grep -v '/' | grep ".\+ [^ ]\+";
|
lsblk --list --noheadings --output name,label,fstype,mountpoint | grep -v LUKS | grep -v '/' | grep ".\+ [^ ]\+";
|
||||||
|
awk '$1 !~ /^#/ && NF>=2 {print $2}' /etc/fstab | while read fstab_mount; do
|
||||||
|
if ! grep -qs " $fstab_mount " /proc/mounts; then
|
||||||
|
echo "$fstab_mount"
|
||||||
|
fi
|
||||||
|
done;
|
||||||
} | fzf --exit-0 | sed "s/^\([^ ]\+ \+\)\?\([^ ]\+\) \+[^ ]\+ *$/\2/"
|
} | fzf --exit-0 | sed "s/^\([^ ]\+ \+\)\?\([^ ]\+\) \+[^ ]\+ *$/\2/"
|
||||||
);;
|
);;
|
||||||
(--help) echo "$_help" && exit 0;;
|
(--help) echo "$_help" && exit 0;;
|
||||||
(-u) shift
|
(-u) shift
|
||||||
for last; do true; done
|
for last; do true; done
|
||||||
sudo umount --verbose "$@"
|
sudo umount --verbose "$@"
|
||||||
code=$?
|
exit $?
|
||||||
sudo rm -df "$last"
|
#code=$?
|
||||||
exit $code;;
|
#sudo rm -df "$last"
|
||||||
|
#exit $code
|
||||||
|
;;
|
||||||
(*) arg=$1
|
(*) arg=$1
|
||||||
shift;;
|
shift;;
|
||||||
esac
|
esac
|
||||||
|
@ -39,13 +46,13 @@ then loopdevice="$(sudo losetup -f)"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
# FSTAB: BY LABEL
|
# FSTAB: BY LABEL
|
||||||
if grep --word-regexp "LABEL=$arg" /etc/fstab
|
if grep --word-regexp "^LABEL=$arg" /etc/fstab
|
||||||
then # have to mount twice as the first one might be creating the directory
|
then # have to mount twice as the first one might be creating the directory
|
||||||
mount -L "$arg" "$@" 2>/dev/null || mount -L "$arg" "$@"
|
mount -L "$arg" "$@" 2>/dev/null || mount -L "$arg" "$@"
|
||||||
exit $?
|
exit $?
|
||||||
fi
|
fi
|
||||||
# FSTAB: BY MOUNTPOINT/NAME
|
# FSTAB: BY MOUNTPOINT/NAME - does not find by UUID
|
||||||
if grep --word-regexp "$arg" /etc/fstab
|
if sudo findmnt --fstab | grep --word-regexp "$arg"
|
||||||
then mount "$arg" "$@"; exit $?
|
then mount "$arg" "$@"; exit $?
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
|
|
@ -1,5 +1,8 @@
|
||||||
#!/bin/sh -e
|
#!/bin/sh -e
|
||||||
# Add file to mpd queue
|
# Add file to mpd queue
|
||||||
|
if test $# -eq 0
|
||||||
|
then mpc --format "%album% %track% > %artist% - %title% (%genre% aus %date%)" current
|
||||||
|
fi
|
||||||
for arg
|
for arg
|
||||||
do fullpath=$(realpath "$arg")
|
do fullpath=$(realpath "$arg")
|
||||||
mpc insert "${fullpath/$MUSIC\//}"
|
mpc insert "${fullpath/$MUSIC\//}"
|
||||||
|
|
|
@ -5,6 +5,7 @@
|
||||||
test $# -gt 0 && command=$1 && shift
|
test $# -gt 0 && command=$1 && shift
|
||||||
test "$1" = '-v' && verbose='true' && shift || verbose='false'
|
test "$1" = '-v' && verbose='true' && shift || verbose='false'
|
||||||
! test -d "$MUSIC" && echo "No music directory!" && exit 1
|
! test -d "$MUSIC" && echo "No music directory!" && exit 1
|
||||||
|
playlists="$MUSIC/playlists"
|
||||||
case $command in
|
case $command in
|
||||||
(update)
|
(update)
|
||||||
for pl; do
|
for pl; do
|
||||||
|
@ -19,7 +20,18 @@ case $command in
|
||||||
done | tee $pl
|
done | tee $pl
|
||||||
echo "Backup of $pl saved to $bak" >&2
|
echo "Backup of $pl saved to $bak" >&2
|
||||||
done;;
|
done;;
|
||||||
(edit) ${EDITOR:-nano} $(find $MUSIC/Playlists -iname "$1\.*" | grep . || find $MUSIC/Playlists -iname "$1*");;
|
(edit) ${EDITOR:-nano} $(find "$playlists" -iname "$1\.*" | grep . || find "$playlists" -iname "$1*");;
|
||||||
|
(add) # Add current mpc song or given songs to playlist
|
||||||
|
pl=$1
|
||||||
|
shift
|
||||||
|
playlist="$playlists/$pl"*
|
||||||
|
test -e "$playlist" || { playlist="$playlists/$pl.m3u8" && touch "$playlist"; }
|
||||||
|
if test $# -gt 0
|
||||||
|
then realpath --relative-to $playlists "$@"
|
||||||
|
else mpc current -f "../%file%"
|
||||||
|
fi | tee -a $playlist
|
||||||
|
echo "...added to $playlist"
|
||||||
|
;;
|
||||||
(make)
|
(make)
|
||||||
if test $1 = d
|
if test $1 = d
|
||||||
then shift && i=1; while test $i -le ${1:-9}; do $0 make "${2:-Ω}$i" "empty$i"; ((i++)); done
|
then shift && i=1; while test $i -le ${1:-9}; do $0 make "${2:-Ω}$i" "empty$i"; ((i++)); done
|
||||||
|
|
|
@ -1,6 +1,8 @@
|
||||||
#!/bin/sh -e
|
#!/bin/sh -e
|
||||||
# Remove recursively safely
|
# Remove recursively safely
|
||||||
case "$1" in ([0-9]) depth=$1; shift;; esac
|
case "$1" in ([0-9]) depth=$1; shift;; esac
|
||||||
|
if test "$1" == "--"; then shift; fi
|
||||||
|
|
||||||
for f in "${@:-$PWD}"
|
for f in "${@:-$PWD}"
|
||||||
do
|
do
|
||||||
test -w "$(dirname "$f")" && elevate="" || elevate=sudo
|
test -w "$(dirname "$f")" && elevate="" || elevate=sudo
|
||||||
|
@ -15,7 +17,7 @@ do
|
||||||
fi
|
fi
|
||||||
|
|
||||||
# Clean empty files
|
# Clean empty files
|
||||||
$elevate find -name '.thumbnails' -printf 'Pre-cleaning %p\n' -exec rm -r {} +
|
$elevate find "$f" -name '.thumbnails' -printf 'Pre-cleaning %p\n' -exec rm -r {} +
|
||||||
$elevate find -H "$f" -maxdepth $(expr 1 \& "$f" = "/" \| 5 \& $# \> 0 \| 3) \
|
$elevate find -H "$f" -maxdepth $(expr 1 \& "$f" = "/" \| 5 \& $# \> 0 \| 3) \
|
||||||
\( -name '.stfolder' -o -name '.*keep' -o -name '*.py' -o -name 'nodelay.txt' -o -name '.git' -o -name 'tmp' -o -name '.nomedia' -o -name '__init__.py' -o -name '*ignore' -o -name 'instalee' \) \
|
\( -name '.stfolder' -o -name '.*keep' -o -name '*.py' -o -name 'nodelay.txt' -o -name '.git' -o -name 'tmp' -o -name '.nomedia' -o -name '__init__.py' -o -name '*ignore' -o -name 'instalee' \) \
|
||||||
\( -type d -o -type f \) -prune -o -empty -printf 'Removing empty %p\n' -exec rm -d {} +
|
\( -type d -o -type f \) -prune -o -empty -printf 'Removing empty %p\n' -exec rm -d {} +
|
||||||
|
|
|
@ -1,7 +1,6 @@
|
||||||
#!/bin/sh
|
#!/bin/sh -e
|
||||||
# Recursively add replaygain to the given files or from the current directory
|
# Recursively add replaygain to the given files or from the current directory
|
||||||
#rsgain custom --album --skip-existing --tagmode=i "${@:-${MUSIC:-.}}"
|
nice -n 8 rsgain easy --skip-existing --multithread=${SPARE_CORES:-3} "${@:-.}"
|
||||||
beet replaygain -a -t 4 -w ||
|
#test $# -eq 0 && nice -n 8 beet replaygain --album --threads=${SPARE_CORES:-3} --write "$@"
|
||||||
r128gain $(test -f "$1" || echo '--recursive') --skip-tagged --preserve-times 1 "${@:-.}"
|
|
||||||
# Need a find command, call for each album
|
# Need a find command, call for each album
|
||||||
# rsgain easy --skip-existing --multithread=${SPARE_CORES:-3} "${@:-.}"
|
#rsgain custom --album --skip-existing --tagmode=i "${@:-${MUSIC:-.}}"
|
||||||
|
|
|
@ -4,6 +4,7 @@
|
||||||
export chars=$(expr $(tput cols) - 60)
|
export chars=$(expr $(tput cols) - 60)
|
||||||
case "$1" in (+*) size=${1#+}G; depth=2; shift;; esac
|
case "$1" in (+*) size=${1#+}G; depth=2; shift;; esac
|
||||||
case "$1" in ([0-9]) depth=$1; shift;; esac
|
case "$1" in ([0-9]) depth=$1; shift;; esac
|
||||||
(du --max-depth "${depth:-1}" -xhat ${size:-50M} "$@" | sort -h | grep -v "^0") |
|
du="du --max-depth '${depth:-1}' -xha"
|
||||||
|
($du -t ${size:-50M} "$@" | sort -h | grep -v "^0") |
|
||||||
while read line; do echo "$(tput smso)$line$(tput rmso) $(pacman -Qqo $(echo $line | awk '{print $2}') 2>/dev/null | paste -s -d',' | sed "s/\(.\{${chars}\}\).*/\1.../")"; done || #| column -t ||
|
while read line; do echo "$(tput smso)$line$(tput rmso) $(pacman -Qqo $(echo $line | awk '{print $2}') 2>/dev/null | paste -s -d',' | sed "s/\(.\{${chars}\}\).*/\1.../")"; done || #| column -t ||
|
||||||
(du --max-depth "${depth:-1}" -xha "$@" | sort -h | tail)
|
($du "$@" | sort -h | tail)
|
||||||
|
|
|
@ -1,5 +1,7 @@
|
||||||
#!/bin/sh -e
|
#!/bin/sh -e
|
||||||
# Put system to sleep after specified number of seconds
|
# Put system to sleep after specified number of seconds
|
||||||
|
# If used in a pipe, put a command into /tmp/save to override
|
||||||
mpc pause || mpdr
|
mpc pause || mpdr
|
||||||
$(which timer || sleep) "${@:-30}"
|
$(which timer || sleep) "${@:-30}"
|
||||||
systemctl suspend
|
# TODO delay in case I happen to still be on PC - use idle?
|
||||||
|
$(cat /tmp/save 2>/dev/null) || systemctl suspend
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
#!/bin/sh
|
#!/bin/sh -ex
|
||||||
# Force Sway Scaling
|
# Force Sway Scaling
|
||||||
shift=1
|
shift=1
|
||||||
scale=1
|
scale=1
|
||||||
|
|
|
@ -10,8 +10,8 @@ case "$1" in
|
||||||
sudo mkdir -p /etc/yadm
|
sudo mkdir -p /etc/yadm
|
||||||
sudo chown -R $USER /etc/yadm
|
sudo chown -R $USER /etc/yadm
|
||||||
sysyadm clone -w / gitea@git.jfischer.org:xeruf/etc.git --bootstrap;;
|
sysyadm clone -w / gitea@git.jfischer.org:xeruf/etc.git --bootstrap;;
|
||||||
(init) sudo -E sysyadm init -b main -w /;;
|
(init) sudo "$(which sysyadm)" init -b main -w /;;
|
||||||
(*) sudo -E sysyadm "$@";;
|
(*) sudo --preserve-env=PATH,XDG_CONFIG_HOME "$(which sysyadm)" "$@";;
|
||||||
esac
|
esac
|
||||||
#sudo chmod +rw /tmp/git -R 2>/dev/null
|
#sudo chmod +rw /tmp/git -R 2>/dev/null
|
||||||
sudo chown -R $USER /etc/yadm
|
sudo chown -R $USER /etc/yadm
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
#!/bin/sh -e
|
#!/bin/sh -e
|
||||||
# Type in NoVNC - from clipboard or interactively with german layout
|
# Type in NoVNC with X tools - from clipboard or interactively with german layout
|
||||||
xdotool search --onlyvisible --classname Navigator windowactivate # Activate Firefox
|
xdotool search --onlyvisible --classname Navigator windowactivate # Activate Firefox
|
||||||
if test $# -gt 0
|
if test $# -gt 0
|
||||||
then
|
then
|
||||||
|
|
|
@ -1,7 +1,8 @@
|
||||||
#!/bin/sh
|
#!/bin/sh
|
||||||
temp=$(mktemp)
|
#temp=$(mktemp)
|
||||||
target=$(pass app/voidcat)
|
target=$(pass app/voidcat)
|
||||||
for arg; do
|
for arg; do
|
||||||
|
extension=$(echo "$arg" | sed 's/.*\.//')
|
||||||
echo "Uploading $arg"
|
echo "Uploading $arg"
|
||||||
{ curl --progress-bar -X POST \
|
{ curl --progress-bar -X POST \
|
||||||
-H "V-Content-Type: $(file --mime-type -b $1)" \
|
-H "V-Content-Type: $(file --mime-type -b $1)" \
|
||||||
|
@ -9,6 +10,6 @@ echo "Uploading $arg"
|
||||||
-H "V-Filename: $arg" \
|
-H "V-Filename: $arg" \
|
||||||
-H "Authorization: Bearer $(echo "$target" | head -1)" \
|
-H "Authorization: Bearer $(echo "$target" | head -1)" \
|
||||||
--data-binary @$arg \
|
--data-binary @$arg \
|
||||||
$(echo "$target" | tail -1); echo; } | tee -a $temp
|
$(echo "$target" | tail -1); echo; } | sed "s/\$/.$extension/"
|
||||||
done
|
done
|
||||||
test $# -gt 1 && echo && cat $temp | sed 's|http:|https:|'
|
#test $# -gt 1 && echo && #sed 's|http:|https:|' "$temp"
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
#!/bin/sh -e
|
#!/bin/sh -e
|
||||||
# Save wl clipboard image with last copied url
|
# Save wl clipboard image with last copied url
|
||||||
file="$(date +%y%m%d-%H%M%S)_$(cliphist list | grep https:// | head -1 | rev | cut -d/ -f1 | rev).png"
|
file="$(date +%y%m%d-%H%M%S)_$(cliphist list | grep --max-count 1 https:// | sed 's|/$||' | rev | cut -d/ -f1 | rev).png"
|
||||||
wl-paste >"$file"
|
wl-paste >"$file"
|
||||||
b "$file"
|
b "$file"
|
||||||
|
|
Loading…
Add table
Reference in a new issue